@@ -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; |
@@ -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; |
@@ -1,2 +1,2 @@ | |||
!function(e){var n={};function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:r})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(t.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var o in e)t.d(r,o,function(n){return e[n]}.bind(null,o));return r},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="/js/",t(t.s=144)}({144:function(e,n,r){r.p=OC.linkTo("files_sharing","js/dist/"),r.nc=btoa(OC.requestToken),window.OCP.Collaboration.registerType("file",{action:function(){return new Promise((function(e,n){OC.dialogs.filepicker(t("files_sharing","Link to a file"),(function(t){OC.Files.getClient().getFileInfo(t).then((function(n,t){e(t.id)})).fail((function(){n(new Error("Cannot get fileinfo"))}))}),!1,null,!1,OC.dialogs.FILEPICKER_TYPE_CHOOSE,"",{allowDirectoryChooser:!0})}))},typeString:t("files_sharing","Link to a file"),typeIconClass:"icon-files-dark"})}}); | |||
!function(e){var n={};function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:r})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(t.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var o in e)t.d(r,o,function(n){return e[n]}.bind(null,o));return r},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="/js/",t(t.s=152)}({152:function(e,n,r){r.p=OC.linkTo("files_sharing","js/dist/"),r.nc=btoa(OC.requestToken),window.OCP.Collaboration.registerType("file",{action:function(){return new Promise((function(e,n){OC.dialogs.filepicker(t("files_sharing","Link to a file"),(function(t){OC.Files.getClient().getFileInfo(t).then((function(n,t){e(t.id)})).fail((function(){n(new Error("Cannot get fileinfo"))}))}),!1,null,!1,OC.dialogs.FILEPICKER_TYPE_CHOOSE,"",{allowDirectoryChooser:!0})}))},typeString:t("files_sharing","Link to a file"),typeIconClass:"icon-files-dark"})}}); | |||
//# sourceMappingURL=collaboration.js.map |
@@ -1,2 +1,2 @@ | |||
!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="/js/",r(r.s=265)}({265:function(e,t){Object.assign(OC,{Share:{SHARE_TYPE_USER:0,SHARE_TYPE_GROUP:1,SHARE_TYPE_LINK:3,SHARE_TYPE_EMAIL:4,SHARE_TYPE_REMOTE:6,SHARE_TYPE_CIRCLE:7,SHARE_TYPE_GUEST:8,SHARE_TYPE_REMOTE_GROUP:9,SHARE_TYPE_ROOM:10}})}}); | |||
!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="/js/",r(r.s=273)}({273:function(e,t){Object.assign(OC,{Share:{SHARE_TYPE_USER:0,SHARE_TYPE_GROUP:1,SHARE_TYPE_LINK:3,SHARE_TYPE_EMAIL:4,SHARE_TYPE_REMOTE:6,SHARE_TYPE_CIRCLE:7,SHARE_TYPE_GUEST:8,SHARE_TYPE_REMOTE_GROUP:9,SHARE_TYPE_ROOM:10}})}}); | |||
//# sourceMappingURL=main.js.map |
@@ -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" /> |
@@ -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> |
@@ -4184,26 +4184,35 @@ | |||
} | |||
}, | |||
"@nextcloud/vue": { | |||
"version": "1.5.0", | |||
"resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-1.5.0.tgz", | |||
"integrity": "sha512-z0KZP0PcWyHsD5zpzBJRusToGzC/1DTjapuDMrSAOSuA5lThg/Td7brmIQSwWTrw66OrL5MIRK+8HoKMWmQPAA==", | |||
"requires": { | |||
"@nextcloud/axios": "^1.1.0", | |||
"@nextcloud/l10n": "^1.1.0", | |||
"@nextcloud/router": "^1.0.0", | |||
"core-js": "^3.4.4", | |||
"version": "2.2.1", | |||
"resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-2.2.1.tgz", | |||
"integrity": "sha512-A2vrP+8cMM67Q9q5ZhUriNn4WDb/X6Q7zNqUT6iCQWI5pf/aun0DbWatZQRtH9OIDfdoj5seUlpNXlPFd8eccg==", | |||
"requires": { | |||
"@nextcloud/auth": "^1.2.3", | |||
"@nextcloud/axios": "^1.3.2", | |||
"@nextcloud/dialogs": "^1.3.0", | |||
"@nextcloud/event-bus": "^1.1.4", | |||
"@nextcloud/l10n": "^1.2.3", | |||
"@nextcloud/router": "^1.0.2", | |||
"core-js": "^3.6.5", | |||
"debounce": "1.2.0", | |||
"escape-html": "^1.0.3", | |||
"hammerjs": "^2.0.8", | |||
"md5": "^2.2.1", | |||
"regenerator-runtime": "^0.13.3", | |||
"v-click-outside": "^3.0.0", | |||
"v-tooltip": "^2.0.0-rc.33", | |||
"vue": "^2.6.7", | |||
"vue-color": "^2.7.0", | |||
"vue-multiselect": "^2.1.3", | |||
"regenerator-runtime": "^0.13.5", | |||
"v-click-outside": "^3.0.1", | |||
"v-tooltip": "^2.0.3", | |||
"vue": "^2.6.11", | |||
"vue-color": "^2.7.1", | |||
"vue-multiselect": "^2.1.6", | |||
"vue-visible": "^1.0.2", | |||
"vue2-datepicker": "^3.3.1" | |||
"vue2-datepicker": "^3.4.1" | |||
}, | |||
"dependencies": { | |||
"popper.js": { | |||
"version": "1.16.1", | |||
"resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", | |||
"integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" | |||
} | |||
} | |||
}, | |||
"@nodelib/fs.scandir": { | |||
@@ -6110,9 +6119,9 @@ | |||
} | |||
}, | |||
"date-fns": { | |||
"version": "2.12.0", | |||
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.12.0.tgz", | |||
"integrity": "sha512-qJgn99xxKnFgB1qL4jpxU7Q2t0LOn1p8KMIveef3UZD7kqjT3tpFNNdXJelEHhE+rUgffriXriw/sOSU+cS1Hw==" | |||
"version": "2.14.0", | |||
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.14.0.tgz", | |||
"integrity": "sha512-1zD+68jhFgDIM0rF05rcwYO8cExdNqxjq4xP1QKM60Q45mnO6zaMWB4tOzrIr4M4GSLntsKeE4c9Bdl2jhL/yw==" | |||
}, | |||
"date-format-parse": { | |||
"version": "0.2.5", | |||
@@ -10112,6 +10121,31 @@ | |||
"@nextcloud/vue": "^1.3.0", | |||
"lodash": "^4.17.11", | |||
"vue": "^2.6.11" | |||
}, | |||
"dependencies": { | |||
"@nextcloud/vue": { | |||
"version": "1.5.0", | |||
"resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-1.5.0.tgz", | |||
"integrity": "sha512-z0KZP0PcWyHsD5zpzBJRusToGzC/1DTjapuDMrSAOSuA5lThg/Td7brmIQSwWTrw66OrL5MIRK+8HoKMWmQPAA==", | |||
"requires": { | |||
"@nextcloud/axios": "^1.1.0", | |||
"@nextcloud/l10n": "^1.1.0", | |||
"@nextcloud/router": "^1.0.0", | |||
"core-js": "^3.4.4", | |||
"debounce": "1.2.0", | |||
"escape-html": "^1.0.3", | |||
"hammerjs": "^2.0.8", | |||
"md5": "^2.2.1", | |||
"regenerator-runtime": "^0.13.3", | |||
"v-click-outside": "^3.0.0", | |||
"v-tooltip": "^2.0.0-rc.33", | |||
"vue": "^2.6.7", | |||
"vue-color": "^2.7.0", | |||
"vue-multiselect": "^2.1.3", | |||
"vue-visible": "^1.0.2", | |||
"vue2-datepicker": "^3.3.1" | |||
} | |||
} | |||
} | |||
}, | |||
"nice-try": { | |||
@@ -10792,9 +10826,9 @@ | |||
"integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" | |||
}, | |||
"popper.js": { | |||
"version": "1.15.0", | |||
"resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.15.0.tgz", | |||
"integrity": "sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA==" | |||
"version": "1.16.1", | |||
"resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", | |||
"integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" | |||
}, | |||
"portfinder": { | |||
"version": "1.0.27", | |||
@@ -12850,12 +12884,12 @@ | |||
"integrity": "sha512-FITcAM0R3JEPUSGiO7hfhKDODZHkOQTk/FyI9mwxNcz6LbMbJhABhjevLI5VsU00PRksloQx8vmpFIqlAfX6nw==" | |||
}, | |||
"v-tooltip": { | |||
"version": "2.0.2", | |||
"resolved": "https://registry.npmjs.org/v-tooltip/-/v-tooltip-2.0.2.tgz", | |||
"integrity": "sha512-xQ+qzOFfywkLdjHknRPgMMupQNS8yJtf9Utd5Dxiu/0n4HtrxqsgDtN2MLZ0LKbburtSAQgyypuE/snM8bBZhw==", | |||
"version": "2.0.3", | |||
"resolved": "https://registry.npmjs.org/v-tooltip/-/v-tooltip-2.0.3.tgz", | |||
"integrity": "sha512-KZZY3s+dcijzZmV2qoDH4rYmjMZ9YKGBVoUznZKQX0e3c2GjpJm3Sldzz8HHH2Ud87JqhZPB4+4gyKZ6m98cKQ==", | |||
"requires": { | |||
"lodash": "^4.17.11", | |||
"popper.js": "^1.15.0", | |||
"lodash": "^4.17.15", | |||
"popper.js": "^1.16.0", | |||
"vue-resize": "^0.4.5" | |||
} | |||
}, | |||
@@ -13038,9 +13072,9 @@ | |||
"integrity": "sha512-yaX2its9XAJKGuQqf7LsiZHHSkxsIK8rmCOQOvEGEoF41blKRK8qr9my4qYoD6ikdLss4n8tKqYBecmaY0+WJg==" | |||
}, | |||
"vue2-datepicker": { | |||
"version": "3.4.1", | |||
"resolved": "https://registry.npmjs.org/vue2-datepicker/-/vue2-datepicker-3.4.1.tgz", | |||
"integrity": "sha512-gCPZAwIyPLeN1P3xDg/Oj/UyQTIqnoFFzXw+yfvmUDxL430u/rHq1/JqFSGISEhTvJJu0brgHHrop3A7VBW6rA==", | |||
"version": "3.6.1", | |||
"resolved": "https://registry.npmjs.org/vue2-datepicker/-/vue2-datepicker-3.6.1.tgz", | |||
"integrity": "sha512-U6iQWSDsNoq/u6QJCtAMcyWlcZSx0rmPmqaJ8LQtGvwu9x12jXDoe3YNeG4y7E45OYAMLXs9WzGkDqDmNj3jkw==", | |||
"requires": { | |||
"date-fns": "^2.0.1", | |||
"date-format-parse": "^0.2.5" |
@@ -38,7 +38,7 @@ | |||
"@nextcloud/password-confirmation": "^1.0.1", | |||
"@nextcloud/paths": "^1.1.2", | |||
"@nextcloud/router": "^1.1.0", | |||
"@nextcloud/vue": "^1.5.0", | |||
"@nextcloud/vue": "^2.2.1", | |||
"autosize": "^4.0.2", | |||
"backbone": "^1.4.0", | |||
"blueimp-md5": "^2.16.0", | |||
@@ -71,7 +71,7 @@ | |||
"strengthify": "git+https://github.com/MorrisJobke/strengthify.git#0.5.8", | |||
"underscore": "^1.10.2", | |||
"url-search-params-polyfill": "^8.0.0", | |||
"v-tooltip": "^2.0.2", | |||
"v-tooltip": "^2.0.3", | |||
"vue": "^2.6.11", | |||
"vue-click-outside": "^1.1.0", | |||
"vue-clipboard2": "^0.3.1", |
@@ -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"); | |||
} | |||
@@ -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"); | |||
} | |||
@@ -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"); | |||
} | |||
@@ -328,6 +328,17 @@ class FilesAppSharingContext implements Context, ActorAwareInterface { | |||
* @Given I write down the shared link | |||
*/ | |||
public function iWriteDownTheSharedLink() { | |||
// Close the share link menu if it is open to ensure that it does not | |||
// cover the copy link button. | |||
if (!WaitFor::elementToBeEventuallyNotShown( | |||
$this->actor, | |||
self::shareLinkMenu(), | |||
$timeout = 2 * $this->actor->getFindTimeoutMultiplier())) { | |||
// It may not be possible to click on the menu button (due to the | |||
// menu itself covering it), so "Esc" key is pressed instead. | |||
$this->actor->find(self::shareLinkMenu(), 2)->getWrappedElement()->keyPress(27); | |||
} | |||
$this->actor->find(self::copyLinkButton(), 10)->click(); | |||
// Clicking on the menu item copies the link to the clipboard, but it is |
@@ -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"); | |||
} | |||
@@ -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"); | |||
} | |||
@@ -85,8 +85,7 @@ module.exports = [] | |||
loader: 'babel-loader', | |||
// automatically detect necessary packages to | |||
// transpile in the node_modules folder | |||
exclude: /node_modules(?!(\/|\\)(nextcloud-vue-collections|p-finally|p-limit|p-locate|p-queue|p-timeout|p-try)(\/|\\))/ | |||
exclude: /node_modules(?!(\/|\\)(nextcloud-vue-collections|p-finally|p-limit|p-locate|p-queue|p-timeout|p-try|toastify-js|v-tooltip)(\/|\\))/ | |||
}, | |||
{ | |||
test: /\.(png|jpg|gif)$/, |