diff options
-rw-r--r-- | apps/files/css/detailsView.scss | 42 | ||||
-rw-r--r-- | apps/files/src/views/Sidebar.vue | 2 | ||||
-rw-r--r-- | apps/settings/src/views/Apps.vue | 4 | ||||
-rw-r--r-- | apps/settings/src/views/Users.vue | 110 | ||||
-rw-r--r-- | tests/acceptance/features/bootstrap/AppNavigationContext.php | 2 | ||||
-rw-r--r-- | tests/acceptance/features/bootstrap/AppsManagementContext.php | 10 | ||||
-rw-r--r-- | tests/acceptance/features/bootstrap/FilesAppContext.php | 2 | ||||
-rw-r--r-- | tests/acceptance/features/bootstrap/SettingsMenuContext.php | 4 | ||||
-rw-r--r-- | tests/acceptance/features/bootstrap/ToastContext.php | 2 |
9 files changed, 90 insertions, 88 deletions
diff --git a/apps/files/css/detailsView.scss b/apps/files/css/detailsView.scss index e13cf0d7a4e..d035b24de92 100644 --- a/apps/files/css/detailsView.scss +++ b/apps/files/css/detailsView.scss @@ -1,19 +1,19 @@ -#app-sidebar .detailFileInfoContainer { +.app-sidebar .detailFileInfoContainer { min-height: 50px; padding: 15px; } -#app-sidebar .detailFileInfoContainer > div { +.app-sidebar .detailFileInfoContainer > div { clear: both; } -#app-sidebar .mainFileInfoView .icon { +.app-sidebar .mainFileInfoView .icon { display: inline-block; background-size: 16px 16px; } -#app-sidebar .mainFileInfoView .permalink { +.app-sidebar .mainFileInfoView .permalink { padding: 6px 10px; vertical-align: top; opacity: .6; @@ -23,22 +23,22 @@ opacity: 1; } } -#app-sidebar .mainFileInfoView .permalink-field>input { +.app-sidebar .mainFileInfoView .permalink-field>input { clear: both; width: 90%; } -#app-sidebar .thumbnailContainer.large { +.app-sidebar .thumbnailContainer.large { margin-left: -15px; margin-right: -35px; /* 15 + 20 for the close button */ margin-top: -15px; } -#app-sidebar .thumbnailContainer.large.portrait { +.app-sidebar .thumbnailContainer.large.portrait { margin: 0; /* if we don't fit the image anyway we give it back the margin */ } -#app-sidebar .large .thumbnail { +.app-sidebar .large .thumbnail { width:100%; display:block; background-repeat: no-repeat; @@ -49,21 +49,21 @@ height: auto; } -#app-sidebar .large .thumbnail .stretcher { +.app-sidebar .large .thumbnail .stretcher { content: ''; display: block; padding-bottom: 56.25%; /* sets height of .thumbnail to 9/16 of the width */ } -#app-sidebar .large.portrait .thumbnail { +.app-sidebar .large.portrait .thumbnail { background-position: 50% top; } -#app-sidebar .large.portrait .thumbnail { +.app-sidebar .large.portrait .thumbnail { background-size: contain; } -#app-sidebar .large.text { +.app-sidebar .large.text { overflow-y: scroll; overflow-x: hidden; padding-top: 14px; @@ -71,7 +71,7 @@ margin-left: 0; } -#app-sidebar .thumbnail { +.app-sidebar .thumbnail { width: 100%; min-height: 75px; display: inline-block; @@ -81,44 +81,44 @@ background-repeat: no-repeat; } -#app-sidebar .ellipsis { +.app-sidebar .ellipsis { white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } -#app-sidebar .fileName { +.app-sidebar .fileName { font-size: 16px; padding-top: 13px; padding-bottom: 3px; } -#app-sidebar .fileName h3 { +.app-sidebar .fileName h3 { width: calc(100% - 42px); /* 36px is the with of the copy link icon, but this breaks so we add some more to be sure */ display: inline-block; padding: 5px 0; margin: -5px 0; } -#app-sidebar .file-details { +.app-sidebar .file-details { color: var(--color-text-maxcontrast); } -#app-sidebar .action-favorite { +.app-sidebar .action-favorite { vertical-align: sub; padding: 10px; margin: -10px; } -#app-sidebar .action-favorite > span{ +.app-sidebar .action-favorite > span{ opacity: .7 !important; } -#app-sidebar .detailList { +.app-sidebar .detailList { float: left; } -#app-sidebar .close { +.app-sidebar .close { position: absolute; top: 0; right: 0; diff --git a/apps/files/src/views/Sidebar.vue b/apps/files/src/views/Sidebar.vue index 16abb3ca76f..1fc89c6a7ee 100644 --- a/apps/files/src/views/Sidebar.vue +++ b/apps/files/src/views/Sidebar.vue @@ -454,7 +454,7 @@ export default { } </script> <style lang="scss" scoped> -#app-sidebar { +.app-sidebar { &.has-preview::v-deep { .app-sidebar-header__figure { background-size: cover; diff --git a/apps/settings/src/views/Apps.vue b/apps/settings/src/views/Apps.vue index 6afdb2536aa..ccdb2d1b8de 100644 --- a/apps/settings/src/views/Apps.vue +++ b/apps/settings/src/views/Apps.vue @@ -26,7 +26,7 @@ :content-class="{ 'icon-loading': loadingList }" :navigation-class="{ 'icon-loading': loading }"> <AppNavigation> - <ul id="appscategories"> + <template #list> <AppNavigationItem id="app-category-your-apps" :to="{ name: 'apps' }" @@ -84,7 +84,7 @@ id="app-developer-docs" href="settings.developerDocumentation" :title="t('settings', 'Developer documentation') + ' ↗'" /> - </ul> + </template> </AppNavigation> <AppContent class="app-settings-content" :class="{ 'icon-loading': loadingList }"> <AppList :category="category" :app="currentApp" :search="searchQuery" /> diff --git a/apps/settings/src/views/Users.vue b/apps/settings/src/views/Users.vue index d174768fc80..0e837979b85 100644 --- a/apps/settings/src/views/Users.vue +++ b/apps/settings/src/views/Users.vue @@ -27,7 +27,7 @@ :text="t('settings','New user')" button-class="icon-add" @click="toggleNewUserMenu" /> - <ul id="usergrouplist"> + <template #list> <AppNavigationItem id="addgroup" ref="addGroup" @@ -92,58 +92,60 @@ </ActionButton> </template> </AppNavigationItem> - </ul> - <AppNavigationSettings> - <div> - <p>{{ t('settings', 'Default quota:') }}</p> - <Multiselect :value="defaultQuota" - :options="quotaOptions" - tag-placeholder="create" - :placeholder="t('settings', 'Select default quota')" - label="label" - track-by="id" - :allow-empty="false" - :taggable="true" - @tag="validateQuota" - @input="setDefaultQuota" /> - </div> - <div> - <input id="showLanguages" - v-model="showLanguages" - type="checkbox" - class="checkbox"> - <label for="showLanguages">{{ t('settings', 'Show Languages') }}</label> - </div> - <div> - <input id="showLastLogin" - v-model="showLastLogin" - type="checkbox" - class="checkbox"> - <label for="showLastLogin">{{ t('settings', 'Show last login') }}</label> - </div> - <div> - <input id="showUserBackend" - v-model="showUserBackend" - type="checkbox" - class="checkbox"> - <label for="showUserBackend">{{ t('settings', 'Show user backend') }}</label> - </div> - <div> - <input id="showStoragePath" - v-model="showStoragePath" - type="checkbox" - class="checkbox"> - <label for="showStoragePath">{{ t('settings', 'Show storage path') }}</label> - </div> - <div> - <input id="sendWelcomeMail" - v-model="sendWelcomeMail" - :disabled="loadingSendMail" - type="checkbox" - class="checkbox"> - <label for="sendWelcomeMail">{{ t('settings', 'Send email to new user') }}</label> - </div> - </AppNavigationSettings> + </template> + <template #footer> + <AppNavigationSettings> + <div> + <p>{{ t('settings', 'Default quota:') }}</p> + <Multiselect :value="defaultQuota" + :options="quotaOptions" + tag-placeholder="create" + :placeholder="t('settings', 'Select default quota')" + label="label" + track-by="id" + :allow-empty="false" + :taggable="true" + @tag="validateQuota" + @input="setDefaultQuota" /> + </div> + <div> + <input id="showLanguages" + v-model="showLanguages" + type="checkbox" + class="checkbox"> + <label for="showLanguages">{{ t('settings', 'Show Languages') }}</label> + </div> + <div> + <input id="showLastLogin" + v-model="showLastLogin" + type="checkbox" + class="checkbox"> + <label for="showLastLogin">{{ t('settings', 'Show last login') }}</label> + </div> + <div> + <input id="showUserBackend" + v-model="showUserBackend" + type="checkbox" + class="checkbox"> + <label for="showUserBackend">{{ t('settings', 'Show user backend') }}</label> + </div> + <div> + <input id="showStoragePath" + v-model="showStoragePath" + type="checkbox" + class="checkbox"> + <label for="showStoragePath">{{ t('settings', 'Show storage path') }}</label> + </div> + <div> + <input id="sendWelcomeMail" + v-model="sendWelcomeMail" + :disabled="loadingSendMail" + type="checkbox" + class="checkbox"> + <label for="sendWelcomeMail">{{ t('settings', 'Send email to new user') }}</label> + </div> + </AppNavigationSettings> + </template> </AppNavigation> <AppContent> <UserList #content @@ -514,7 +516,7 @@ export default { <style lang="scss" scoped> // force hiding the editing action for the add group entry -#usergrouplist #addgroup::v-deep .app-navigation-entry__utils { +.app-navigation__list #addgroup::v-deep .app-navigation-entry__utils { display: none; } </style> diff --git a/tests/acceptance/features/bootstrap/AppNavigationContext.php b/tests/acceptance/features/bootstrap/AppNavigationContext.php index 427af0e40c9..df6ed228960 100644 --- a/tests/acceptance/features/bootstrap/AppNavigationContext.php +++ b/tests/acceptance/features/bootstrap/AppNavigationContext.php @@ -31,7 +31,7 @@ class AppNavigationContext implements Context, ActorAwareInterface { * @return Locator */ public static function appNavigation() { - return Locator::forThe()->id("app-navigation")-> + return Locator::forThe()->xpath("//*[@id=\"app-navigation\" or contains(@class, 'app-navigation')]")-> describedAs("App navigation"); } diff --git a/tests/acceptance/features/bootstrap/AppsManagementContext.php b/tests/acceptance/features/bootstrap/AppsManagementContext.php index 1e36ac72ef6..1f3b2dbe28a 100644 --- a/tests/acceptance/features/bootstrap/AppsManagementContext.php +++ b/tests/acceptance/features/bootstrap/AppsManagementContext.php @@ -59,7 +59,7 @@ class AppsManagementContext implements Context, ActorAwareInterface { * @return Locator */ public static function bundleButton($bundle) { - return Locator::forThe()->xpath("//main[@id='app-content']//div[@class='apps-header']/h2[normalize-space() = '$bundle']/input")-> + return Locator::forThe()->xpath("//main[@id='app-content' or contains(@class, 'app-content')]//div[@class='apps-header']/h2[normalize-space() = '$bundle']/input")-> describedAs("Button to enable / disable bundles"); } @@ -67,7 +67,7 @@ class AppsManagementContext implements Context, ActorAwareInterface { * @return Locator */ public static function rowForApp($app) { - return Locator::forThe()->xpath("//main[@id='app-content']//div[@class='app-name'][normalize-space() = '$app']/..")-> + return Locator::forThe()->xpath("//main[@id='app-content' or contains(@class, 'app-content')]//div[@class='app-name'][normalize-space() = '$app']/..")-> describedAs("Row for app $app in Apps Management"); } @@ -75,7 +75,7 @@ class AppsManagementContext implements Context, ActorAwareInterface { * @return Locator */ public static function emptyAppList() { - return Locator::forThe()->xpath("//main[@id='app-content']//div[@id='apps-list-empty']")-> + return Locator::forThe()->xpath("//main[@id='app-content' or contains(@class, 'app-content')]//div[@id='apps-list-empty']")-> describedAs("Empty apps list view"); } @@ -83,7 +83,7 @@ class AppsManagementContext implements Context, ActorAwareInterface { * @return Locator */ public static function appEntries() { - return Locator::forThe()->xpath("//main[@id='app-content']//div[@class='section']")-> + return Locator::forThe()->xpath("//main[@id='app-content' or contains(@class, 'app-content')]//div[@class='section']")-> describedAs("Entries in apps list"); } @@ -109,7 +109,7 @@ class AppsManagementContext implements Context, ActorAwareInterface { * @return Locator */ public static function sidebar() { - return Locator::forThe()->id("app-sidebar")-> + return Locator::forThe()->xpath("//*[@id=\"app-sidebar\" or contains(@class, 'app-sidebar')]")-> describedAs("Sidebar in apps management"); } diff --git a/tests/acceptance/features/bootstrap/FilesAppContext.php b/tests/acceptance/features/bootstrap/FilesAppContext.php index a5dcfb700ba..906a57b9e61 100644 --- a/tests/acceptance/features/bootstrap/FilesAppContext.php +++ b/tests/acceptance/features/bootstrap/FilesAppContext.php @@ -80,7 +80,7 @@ class FilesAppContext implements Context, ActorAwareInterface { * @return Locator */ public static function detailsView() { - return Locator::forThe()->id("app-sidebar")-> + return Locator::forThe()->xpath("//*[@id=\"app-sidebar\" or contains(@class, 'app-sidebar')]")-> describedAs("Details view in Files app"); } diff --git a/tests/acceptance/features/bootstrap/SettingsMenuContext.php b/tests/acceptance/features/bootstrap/SettingsMenuContext.php index 485f945f04c..678d7c5eabb 100644 --- a/tests/acceptance/features/bootstrap/SettingsMenuContext.php +++ b/tests/acceptance/features/bootstrap/SettingsMenuContext.php @@ -88,7 +88,7 @@ class SettingsMenuContext implements Context, ActorAwareInterface { * @return Locator */ private static function settingsPanelFor($itemText) { - return Locator::forThe()->xpath("//div[@id = 'app-navigation']//ul//li[@class = 'app-navigation-caption' and normalize-space() = '$itemText']")-> + return Locator::forThe()->xpath("//div[@id = 'app-navigation' or contains(@class, 'app-navigation')]//ul//li[@class = 'app-navigation-caption' and normalize-space() = '$itemText']")-> describedAs($itemText . " item in Settings panel"); } @@ -97,7 +97,7 @@ class SettingsMenuContext implements Context, ActorAwareInterface { * @return Locator */ private static function settingsPanelEntryFor($itemText) { - return Locator::forThe()->xpath("//div[@id = 'app-navigation']//ul//li[normalize-space() = '$itemText']")-> + return Locator::forThe()->xpath("//div[@id = 'app-navigation' or contains(@class, 'app-navigation')]//ul//li[normalize-space() = '$itemText']")-> describedAs($itemText . " entry in Settings panel"); } diff --git a/tests/acceptance/features/bootstrap/ToastContext.php b/tests/acceptance/features/bootstrap/ToastContext.php index 62b15c74c71..5a67d7f2581 100644 --- a/tests/acceptance/features/bootstrap/ToastContext.php +++ b/tests/acceptance/features/bootstrap/ToastContext.php @@ -39,7 +39,7 @@ class ToastContext implements Context, ActorAwareInterface { * @return Locator */ private static function toastContainer() { - return Locator::forThe()->id("content")-> + return Locator::forThe()->xpath("//*[@id=\"content\" or contains(@class, 'content')]")-> describedAs("Toast container"); } |