diff --git a/src/resources/lang/en/ui.php b/src/resources/lang/en/ui.php --- a/src/resources/lang/en/ui.php +++ b/src/resources/lang/en/ui.php @@ -337,6 +337,7 @@ 'room' => [ 'create' => "Create room", 'delete' => "Delete room", + 'copy-location' => "Copy room location", 'description-hint' => "This is an optional short description for the room, so you can find it more easily on the list.", 'goto' => "Enter the room", 'list-empty' => "There are no conference rooms in this account.", diff --git a/src/resources/themes/app.scss b/src/resources/themes/app.scss --- a/src/resources/themes/app.scss +++ b/src/resources/themes/app.scss @@ -127,6 +127,10 @@ white-space: nowrap; } + td .btn-link { + vertical-align: initial; + } + td.email, td.price, td.datetime, diff --git a/src/resources/vue/Room/List.vue b/src/resources/vue/Room/List.vue --- a/src/resources/vue/Room/List.vue +++ b/src/resources/vue/Room/List.vue @@ -12,7 +12,8 @@
@@ -26,6 +27,7 @@ import { library } from '@fortawesome/fontawesome-svg-core' library.add( + require('@fortawesome/free-regular-svg-icons/faClipboard').definition, require('@fortawesome/free-solid-svg-icons/faArrowUpRightFromSquare').definition, require('@fortawesome/free-solid-svg-icons/faComments').definition ) @@ -48,7 +50,8 @@ { prop: 'name', icon: 'comments', - link: true + link: true, + className: 'text-nowrap' }, { prop: 'description', @@ -73,8 +76,13 @@ }, methods: { goto(room) { - const location = window.config['app.url'] + '/meet/' + encodeURI(room.name) - window.open(location, '_blank') + window.open(this.roomLocation(room), '_blank') + }, + roomLinkCopy(room) { + navigator.clipboard.writeText(this.roomLocation(room)); + }, + roomLocation(room) { + return window.config['app.url'] + '/meet/' + encodeURI(room.name) } } } diff --git a/src/tests/Browser/Meet/RoomsTest.php b/src/tests/Browser/Meet/RoomsTest.php --- a/src/tests/Browser/Meet/RoomsTest.php +++ b/src/tests/Browser/Meet/RoomsTest.php @@ -75,16 +75,18 @@ ->with('tbody tr:nth-child(1)', function ($browser) { $browser->assertSeeIn('td:nth-child(1) a', 'john') ->assertSeeIn('td:nth-child(2) a', "Standard room") - ->assertVisible('td.buttons button') - ->assertAttribute('td.buttons button', 'title', 'Enter the room'); + ->assertElementsCount('td.buttons button', 2) + ->assertAttribute('td.buttons button:nth-child(1)', 'title', 'Copy room location') + ->assertAttribute('td.buttons button:nth-child(2)', 'title', 'Enter the room'); }) ->with('tbody tr:nth-child(2)', function ($browser) { $browser->assertSeeIn('td:nth-child(1) a', 'shared') ->assertSeeIn('td:nth-child(2) a', "Shared room") - ->assertVisible('td.buttons button') - ->assertAttribute('td.buttons button', 'title', 'Enter the room'); + ->assertElementsCount('td.buttons button', 2) + ->assertAttribute('td.buttons button:nth-child(1)', 'title', 'Copy room location') + ->assertAttribute('td.buttons button:nth-child(2)', 'title', 'Enter the room'); }) - ->click('tbody tr:nth-child(1) button'); + ->click('tbody tr:nth-child(1) button:nth-child(2)'); }); $newWindow = collect($browser->driver->getWindowHandles())->last();