From 9b5b29b5b597cd93cb38335b731923f49e14d942 Mon Sep 17 00:00:00 2001 From: Paul Neubauer Date: Thu, 5 Aug 2021 12:10:52 +0200 Subject: [PATCH] added details sidebar for multiple selection --- .drone.env | 4 +- .drone.star | 66 ++- CHANGELOG.md | 118 +++- .../bugfix-left-sidebar-public-link | 5 + .../bugfix-name-checks-with-pagination | 9 + .../bugfix-oc10-web-oidc-csp | 0 .../bugfix-send-cookie-manifests-json | 0 .../bugfix-unnecessary-quota-requests | 0 .../bugfix-use-profile-picture-capability} | 2 +- .../change-add-customer-search-service | 8 + .../enhancement-contextmenu-layout | 6 + .../enhancement-filestable-dropdown-actions | 7 +- changelog/4.0.0_2021-08-04/enhancement-invite | 5 + .../enhancement-load-only-opened-panels | 6 + ...hancement-prevent-bind-to-loopback-address | 10 +- .../enhancement-search-filter-files | 7 + .../enhancement-share-recipients-number | 6 + .../enhancement-sidebar-navigation | 0 .../bugfix-load-folder-in-media-viewer | 7 + ...enhancement-add-multiple-selection-sidebar | 7 + config/config.json.dist | 1 + config/config.json.sample-oc10 | 1 + config/config.json.sample-ocis | 4 +- dev/docker/oc10.config.php | 6 + dev/docker/oc10.entrypoint.sh | 35 ++ dev/docker/oc10.web.config.json | 35 ++ dev/docker/ocis.web.config.json | 39 ++ dev/docker/selenium.Dockerfile | 10 + dev/docker/vnc.Dockerfile | 12 + docker-compose.yml | 73 +++ docs/_index.md | 3 +- docs/backend-ocis.md | 8 +- docs/getting-started.md | 25 +- docs/testing-manual.md | 178 ++++++ docs/testing.md | 186 ++----- nightwatch.conf.js | 9 +- package.json | 13 +- .../web-app-draw-io/l10n/translations.json | 2 +- packages/web-app-files/l10n/translations.json | 2 +- packages/web-app-files/package.json | 1 + .../src/components/AppBar/AppBar.vue | 6 +- .../components/FilesList/ContextActions.vue | 187 +++++-- .../src/components/Search/List.vue | 121 +++++ .../src/components/Search/Preview.vue | 89 +++ .../SideBar/Details/FileDetailsMultiple.vue | 115 ++++ .../Shares/Collaborators/AutocompleteItem.vue | 12 +- .../Shares/Collaborators/NewCollaborator.vue | 251 +++++---- .../Collaborators/RecipientContainer.vue | 107 ++++ .../src/components/SideBar/SideBar.vue | 75 ++- .../src/helpers/resource/filter.ts | 12 + .../src/helpers/resource/index.ts | 1 + .../web-app-files/src/helpers/resources.js | 10 +- packages/web-app-files/src/index.js | 43 +- packages/web-app-files/src/mixins.js | 8 +- .../src/mixins/actions/createPublicLink.js | 23 + .../src/mixins/actions/download.js | 4 +- .../src/mixins/actions/favorite.js | 4 +- .../src/mixins/actions/navigate.js | 22 +- .../src/mixins/actions/rename.js | 10 +- .../src/mixins/actions/restore.js | 4 +- .../src/mixins/actions/showActions.js | 28 + .../src/mixins/actions/showDetails.js | 28 + .../src/mixins/actions/showShares.js | 23 + .../src/mixins/deleteResources.js | 2 - .../src/mixins/filesListFilter.js | 57 ++ .../src/mixins/filesListPositioning.js | 6 + .../src/mixins/sidebar/mountSideBar.js | 4 +- packages/web-app-files/src/quickActions.js | 9 +- .../web-app-files/src/search/filter/index.ts | 48 ++ .../src/search/filter/preview.ts | 30 + packages/web-app-files/src/search/index.ts | 2 + .../web-app-files/src/search/sdk/index.ts | 61 +++ packages/web-app-files/src/search/sdk/list.ts | 33 ++ .../web-app-files/src/search/sdk/preview.ts | 60 ++ packages/web-app-files/src/services/index.ts | 1 + .../web-app-files/src/services/registry.ts | 6 + packages/web-app-files/src/store/actions.js | 42 +- packages/web-app-files/src/store/getters.js | 8 +- packages/web-app-files/src/store/mutations.js | 23 +- packages/web-app-files/src/store/state.js | 3 +- .../web-app-files/src/views/Favorites.vue | 9 +- .../src/views/LocationPicker.vue | 3 +- packages/web-app-files/src/views/Personal.vue | 12 +- .../web-app-files/src/views/PublicFiles.vue | 7 +- .../web-app-files/src/views/SharedViaLink.vue | 4 +- .../web-app-files/src/views/SharedWithMe.vue | 4 +- .../src/views/SharedWithOthers.vue | 4 +- packages/web-app-files/src/views/Trashbin.vue | 9 +- .../FilesList/ContextActions.spec.js | 8 +- .../Details/FileDetailsMultiple.spec.js | 93 ++++ .../Links/PublicLinks/LinkActions.spec.js | 147 +++++ .../unit/helpers/resource/filter.spec.ts | 17 + .../tests/unit/search/filter.spec.ts | 83 +++ .../tests/unit/search/sdk.spec.ts | 137 +++++ .../l10n/translations.json | 2 +- .../l10n/translations.json | 2 +- packages/web-app-media-viewer/src/App.vue | 2 +- .../web-app-media-viewer/src/mixins/loader.js | 93 ++-- packages/web-app-search/l10n/.tx/config | 10 + .../web-app-search/l10n/translations.json | 1 + packages/web-app-search/package.json | 15 + packages/web-app-search/src/App.vue | 10 + packages/web-app-search/src/index.ts | 51 ++ .../web-app-search/src/portals/SearchBar.vue | 386 +++++++++++++ packages/web-app-search/src/service/index.ts | 1 + .../src/service/providerStore.ts | 19 + packages/web-app-search/src/store/index.ts | 6 + packages/web-app-search/src/store/options.ts | 16 + packages/web-app-search/src/types.ts | 31 ++ packages/web-app-search/src/views/List.vue | 45 ++ .../tests/unit/portals/SearchBar.spec.ts | 513 ++++++++++++++++++ .../tests/unit/service/providerStore.spec.ts | 26 + .../tests/unit/store/options.spec.ts | 9 + .../tests/unit/views/List.spec.ts | 48 ++ .../web-integration-oc10/appinfo/info.xml | 4 +- packages/web-pkg/src/cache/cache.ts | 5 + packages/web-pkg/src/decorator/debounce.ts | 43 ++ packages/web-pkg/src/decorator/index.ts | 1 + packages/web-pkg/src/event/bus.ts | 21 + packages/web-pkg/src/event/index.ts | 1 + packages/web-pkg/src/instance/index.ts | 3 + .../web-pkg/tests/unit/cache/cache.spec.ts | 8 + .../tests/unit/decorator/debounce.spec.ts | 28 + packages/web-pkg/tests/unit/event/bus.spec.ts | 26 + .../web-pkg/tests/unit/instance/index.spec.ts | 8 + packages/web-runtime/l10n/translations.json | 2 +- packages/web-runtime/package.json | 5 +- packages/web-runtime/src/App.vue | 2 +- .../src/components/Notifications.vue | 2 +- .../web-runtime/src/components/SearchBar.vue | 111 ---- .../web-runtime/src/components/TopBar.vue | 21 +- packages/web-runtime/src/index.js | 29 +- packages/web-runtime/src/store/config.js | 4 +- .../tests/unit/components/TopBar.spec.js | 103 +--- .../__snapshots__/TopBar.spec.js.snap | 80 +-- rollup.config.js | 9 +- sonar-project.properties | 2 +- tests/acceptance/cancelBuilds.sh | 58 ++ ...-failures-with-ocis-server-ocis-storage.md | 25 +- .../features/webUIFiles/options.feature | 38 -- .../features/webUIFilesSearch/search.feature | 9 +- .../webUIRenameFiles/renameFiles.feature | 27 +- .../webUIRenameFolders/renameFolders.feature | 23 +- .../FilesPageElement/appSideBar.js | 2 +- .../FilesPageElement/fileActionsMenu.js | 4 +- .../FilesPageElement/sharingDialog.js | 14 +- tests/acceptance/pageObjects/ocisLoginPage.js | 3 +- tests/acceptance/pageObjects/webPage.js | 23 +- .../stepDefinitions/searchContext.js | 4 + .../config-oc10-integration-app-oauth.json | 3 +- tests/drone/config-oc10-oauth.json | 3 +- tests/drone/config-oc10-openid.json | 3 +- .../{ocis-config.json => config-ocis.json} | 3 +- tests/unit/stubs/index.js | 3 +- tsconfig.json | 9 +- web.d.ts | 4 + yarn.lock | 97 +++- 157 files changed, 4217 insertions(+), 973 deletions(-) create mode 100644 changelog/4.0.0_2021-08-04/bugfix-left-sidebar-public-link create mode 100644 changelog/4.0.0_2021-08-04/bugfix-name-checks-with-pagination rename changelog/{unreleased => 4.0.0_2021-08-04}/bugfix-oc10-web-oidc-csp (100%) rename changelog/{unreleased => 4.0.0_2021-08-04}/bugfix-send-cookie-manifests-json (100%) rename changelog/{unreleased => 4.0.0_2021-08-04}/bugfix-unnecessary-quota-requests (100%) rename changelog/{unreleased/enhancement-use-profile-picture-capability => 4.0.0_2021-08-04/bugfix-use-profile-picture-capability} (76%) create mode 100644 changelog/4.0.0_2021-08-04/change-add-customer-search-service create mode 100644 changelog/4.0.0_2021-08-04/enhancement-contextmenu-layout rename changelog/{unreleased => 4.0.0_2021-08-04}/enhancement-filestable-dropdown-actions (63%) create mode 100644 changelog/4.0.0_2021-08-04/enhancement-invite create mode 100644 changelog/4.0.0_2021-08-04/enhancement-load-only-opened-panels rename changelog/{unreleased => 4.0.0_2021-08-04}/enhancement-prevent-bind-to-loopback-address (98%) create mode 100644 changelog/4.0.0_2021-08-04/enhancement-search-filter-files create mode 100644 changelog/4.0.0_2021-08-04/enhancement-share-recipients-number rename changelog/{unreleased => 4.0.0_2021-08-04}/enhancement-sidebar-navigation (100%) create mode 100644 changelog/unreleased/bugfix-load-folder-in-media-viewer create mode 100644 changelog/unreleased/enhancement-add-multiple-selection-sidebar create mode 100644 dev/docker/oc10.config.php create mode 100755 dev/docker/oc10.entrypoint.sh create mode 100644 dev/docker/oc10.web.config.json create mode 100644 dev/docker/ocis.web.config.json create mode 100644 dev/docker/selenium.Dockerfile create mode 100644 dev/docker/vnc.Dockerfile create mode 100644 docker-compose.yml create mode 100644 docs/testing-manual.md create mode 100644 packages/web-app-files/src/components/Search/List.vue create mode 100644 packages/web-app-files/src/components/Search/Preview.vue create mode 100644 packages/web-app-files/src/components/SideBar/Details/FileDetailsMultiple.vue create mode 100644 packages/web-app-files/src/components/SideBar/Shares/Collaborators/RecipientContainer.vue create mode 100644 packages/web-app-files/src/helpers/resource/filter.ts create mode 100644 packages/web-app-files/src/mixins/actions/createPublicLink.js create mode 100644 packages/web-app-files/src/mixins/actions/showActions.js create mode 100644 packages/web-app-files/src/mixins/actions/showDetails.js create mode 100644 packages/web-app-files/src/mixins/actions/showShares.js create mode 100644 packages/web-app-files/src/mixins/filesListFilter.js create mode 100644 packages/web-app-files/src/search/filter/index.ts create mode 100644 packages/web-app-files/src/search/filter/preview.ts create mode 100644 packages/web-app-files/src/search/index.ts create mode 100644 packages/web-app-files/src/search/sdk/index.ts create mode 100644 packages/web-app-files/src/search/sdk/list.ts create mode 100644 packages/web-app-files/src/search/sdk/preview.ts create mode 100644 packages/web-app-files/src/services/registry.ts create mode 100644 packages/web-app-files/tests/unit/components/SideBar/Details/FileDetailsMultiple.spec.js create mode 100644 packages/web-app-files/tests/unit/components/SideBar/Links/PublicLinks/LinkActions.spec.js create mode 100644 packages/web-app-files/tests/unit/helpers/resource/filter.spec.ts create mode 100644 packages/web-app-files/tests/unit/search/filter.spec.ts create mode 100644 packages/web-app-files/tests/unit/search/sdk.spec.ts create mode 100644 packages/web-app-search/l10n/.tx/config create mode 100644 packages/web-app-search/l10n/translations.json create mode 100644 packages/web-app-search/package.json create mode 100644 packages/web-app-search/src/App.vue create mode 100644 packages/web-app-search/src/index.ts create mode 100644 packages/web-app-search/src/portals/SearchBar.vue create mode 100644 packages/web-app-search/src/service/index.ts create mode 100644 packages/web-app-search/src/service/providerStore.ts create mode 100644 packages/web-app-search/src/store/index.ts create mode 100644 packages/web-app-search/src/store/options.ts create mode 100644 packages/web-app-search/src/types.ts create mode 100644 packages/web-app-search/src/views/List.vue create mode 100644 packages/web-app-search/tests/unit/portals/SearchBar.spec.ts create mode 100644 packages/web-app-search/tests/unit/service/providerStore.spec.ts create mode 100644 packages/web-app-search/tests/unit/store/options.spec.ts create mode 100644 packages/web-app-search/tests/unit/views/List.spec.ts create mode 100644 packages/web-pkg/src/decorator/debounce.ts create mode 100644 packages/web-pkg/src/decorator/index.ts create mode 100644 packages/web-pkg/src/event/bus.ts create mode 100644 packages/web-pkg/src/event/index.ts create mode 100644 packages/web-pkg/src/instance/index.ts create mode 100644 packages/web-pkg/tests/unit/decorator/debounce.spec.ts create mode 100644 packages/web-pkg/tests/unit/event/bus.spec.ts create mode 100644 packages/web-pkg/tests/unit/instance/index.spec.ts delete mode 100644 packages/web-runtime/src/components/SearchBar.vue create mode 100755 tests/acceptance/cancelBuilds.sh delete mode 100644 tests/acceptance/features/webUIFiles/options.feature rename tests/drone/{ocis-config.json => config-ocis.json} (92%) create mode 100644 web.d.ts diff --git a/.drone.env b/.drone.env index 1be9ba7a850..c9d23d52795 100644 --- a/.drone.env +++ b/.drone.env @@ -1,7 +1,7 @@ # The version of OCIS to use in pipelines that test against OCIS -OCIS_COMMITID=b148faada6191a0c8a7ff800badec5bc1399c75f +OCIS_COMMITID=d30670450a3f0e3901276ff88b5bc4560a4ce1cb OCIS_BRANCH=master # The test runner source for API tests -CORE_COMMITID=f16a490116c1b513948a9f3bd8ec0c8146eab545 +CORE_COMMITID=298ebbbe0106cea6c8cb029b83fd359da2f450d1 CORE_BRANCH=master diff --git a/.drone.star b/.drone.star index 099cbc258f7..8775d7ca2e9 100644 --- a/.drone.star +++ b/.drone.star @@ -460,7 +460,7 @@ config = { "RUN_ON_OCIS": "true", "TESTING_DATA_DIR": "/srv/app/testing/data/", "OCIS_REVA_DATA_ROOT": "/srv/app/tmp/ocis/owncloud/data/", - "WEB_UI_CONFIG": "/srv/config/drone/ocis-config.json", + "WEB_UI_CONFIG": "/srv/config/drone/config-ocis.json", "EXPECTED_FAILURES_FILE": "%s/tests/acceptance/expected-failures-with-ocis-server-ocis-storage.md" % dir["web"], }, "runningOnOCIS": True, @@ -727,10 +727,16 @@ def main(ctx): return pipelines + deploys + checkStarlark() def beforePipelines(ctx): - return yarnlint() + changelog(ctx) + website(ctx) + cacheOcisPipeline(ctx) + if "unit-tests-only" in ctx.build.title.lower(): + return yarnlint() + checkForRecentBuilds(ctx) + else: + return yarnlint() + checkForRecentBuilds(ctx) + changelog(ctx) + website(ctx) + cacheOcisPipeline(ctx) def stagePipelines(ctx): unitTestPipelines = unitTests(ctx) + if "unit-tests-only" in ctx.build.title.lower(): + return unitTestPipelines + acceptancePipelines = acceptance(ctx) if acceptancePipelines == False: return unitTestPipelines @@ -780,6 +786,57 @@ def yarnlint(): return pipelines +def checkForRecentBuilds(ctx): + pipelines = [] + + result = { + "kind": "pipeline", + "type": "docker", + "name": "stop-recent-builds", + "workspace": { + "base": dir["base"], + "path": config["app"], + }, + "steps": stopRecentBuilds(ctx), + "depends_on": [], + "trigger": { + "ref": [ + "refs/heads/master", + "refs/tags/**", + "refs/pull/**", + ], + }, + } + + pipelines.append(result) + + return pipelines + +def stopRecentBuilds(ctx): + repo_slug = ctx.build.source_repo if ctx.build.source_repo else ctx.repo.slug + + return [{ + "name": "stop-recent-builds", + "image": "drone/cli:alpine", + "pull": "always", + "environment": { + "DRONE_SERVER": "https://drone.owncloud.com", + "DRONE_TOKEN": { + "from_secret": "drone_token", + }, + }, + "commands": [ + "drone build ls %s --status running > %s/recentBuilds.txt" % (repo_slug, dir["web"]), + "drone build info %s ${DRONE_BUILD_NUMBER} > %s/thisBuildInfo.txt" % (repo_slug, dir["web"]), + "cd %s && ./tests/acceptance/cancelBuilds.sh" % dir["web"], + ], + "when": { + "event": [ + "pull_request", + ], + }, + }] + def build(ctx): pipelines = [] @@ -978,6 +1035,7 @@ def unitTests(ctx): "trigger": { "ref": [ "refs/heads/master", + "refs/tags/**", "refs/pull/**", ], }, @@ -986,7 +1044,7 @@ def unitTests(ctx): def acceptance(ctx): pipelines = [] - if "acceptance" not in config or "unit-tests-only" in ctx.build.title.lower(): + if "acceptance" not in config: return pipelines if type(config["acceptance"]) == "bool": @@ -1904,7 +1962,7 @@ def ocisService(): "PROXY_OIDC_INSECURE": "true", "STORAGE_HOME_DATA_SERVER_URL": "http://ocis:9155/data", "STORAGE_USERS_DATA_SERVER_URL": "http://ocis:9158/data", - "WEB_UI_CONFIG": "/srv/config/drone/ocis-config.json", + "WEB_UI_CONFIG": "/srv/config/drone/config-ocis.json", "WEB_ASSET_PATH": "%s/dist" % dir["web"], "IDP_IDENTIFIER_REGISTRATION_CONF": "/srv/config/drone/identifier-registration.yml", "ACCOUNTS_DATA_PATH": "/srv/app/tmp/ocis-accounts/", diff --git a/CHANGELOG.md b/CHANGELOG.md index c8b202cf294..4fd4db143be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,22 +3,71 @@ Changelog for ownCloud Web [unreleased] (UNRELEASED) The following sections list the changes in ownCloud web unreleased relevant to ownCloud admins and users. -[unreleased]: https://github.com/owncloud/web/compare/v3.4.1...master +[unreleased]: https://github.com/owncloud/web/compare/v4.0.0...master Summary ------- +* Bugfix - Load folder in Media viewer: [#5427](https://github.com/owncloud/web/issues/5427) + +Details +------- + +* Bugfix - Load folder in Media viewer: [#5427](https://github.com/owncloud/web/issues/5427) + + We've fixed the loading of a folder in the Media viewer extension. If a user reloads the Media + viewer now, it load all the medias both in private and public context. + + https://github.com/owncloud/web/issues/5427 + https://github.com/owncloud/web/pull/5585 + +Changelog for ownCloud Web [4.0.0] (2021-08-04) +======================================= +The following sections list the changes in ownCloud web 4.0.0 relevant to +ownCloud admins and users. + +[4.0.0]: https://github.com/owncloud/web/compare/v3.4.1...v4.0.0 + +Summary +------- + +* Bugfix - Left sidebar visibility in public links: [#5602](https://github.com/owncloud/web/pull/5602) +* Bugfix - Check names also for folders or files that currently are not visible: [#5583](https://github.com/owncloud/web/pull/5583) * Bugfix - Content Security Policy for OpenID Connect authentication: [#5536](https://github.com/owncloud/web/pull/5536) * Bugfix - Send authentication on manifests.json: [#5553](https://github.com/owncloud/web/pull/5553) * Bugfix - Unnecessary quota requests: [#5539](https://github.com/owncloud/web/pull/5539) +* Bugfix - Use profile picture capability in avatars: [#5178](https://github.com/owncloud/web/pull/5178) +* Change - Add custom search service: [#5415](https://github.com/owncloud/web/pull/5415) +* Enhancement - New layout for context menu: [#5160](https://github.com/owncloud/web/issues/5160) * Enhancement - Dropdown actions in FilesTable: [#5102](https://github.com/owncloud/web/issues/5102) +* Enhancement - Refactor recipient autocomplete in people panel: [#5554](https://github.com/owncloud/web/pull/5554) +* Enhancement - Load only opened panels: [#5569](https://github.com/owncloud/web/issues/5569) * Enhancement - Prevent binding to only loopback IP when running in watch mode: [#5515](https://github.com/owncloud/web/pull/5515) +* Enhancement - Add filter & search to files app: [#5415](https://github.com/owncloud/web/pull/5415) +* Enhancement - Define the number of visible share recipients: [#5506](https://github.com/owncloud/web/pull/5506) * Enhancement - Sidebar sliding panels navigation: [#5549](https://github.com/owncloud/web/pull/5549) -* Enhancement - Use profile picture capability in avatars: [#5178](https://github.com/owncloud/web/pull/5178) Details ------- +* Bugfix - Left sidebar visibility in public links: [#5602](https://github.com/owncloud/web/pull/5602) + + We fixed that the left sidebar was showing the navigation items of an authenticated context + when visiting a public link as authenticated user. + + https://github.com/owncloud/web/pull/5602 + +* Bugfix - Check names also for folders or files that currently are not visible: [#5583](https://github.com/owncloud/web/pull/5583) + + We've changed the way how web checks if a file or folder exists. From now on it also include files + from the current folder that actually are not visible. + + This was problematic in situations like the pagination, where a file or folder was not + available in the current set of resources and the user tried to create a folder with the same + name. + + https://github.com/owncloud/web/pull/5583 + * Bugfix - Content Security Policy for OpenID Connect authentication: [#5536](https://github.com/owncloud/web/pull/5536) We added CSP rules for allowing OpenID Connect authentication when running ownCloud Web as app @@ -38,17 +87,56 @@ Details https://github.com/owncloud/web/pull/5539 +* Bugfix - Use profile picture capability in avatars: [#5178](https://github.com/owncloud/web/pull/5178) + + Requests for loading avatar profile pictures now only get sent if the backend communicates + their availability in the capabilities. + + https://github.com/owncloud/web/pull/5178 + +* Change - Add custom search service: [#5415](https://github.com/owncloud/web/pull/5415) + + We've added `search` as another core app that can be utilized by other (third-party) frontend + extensions to provide filter and search functionality. Please note that you need to add + `search` to the `apps` array of your config.json file, otherwise the search bar with its global + file search capabilities will disappear. + + https://github.com/owncloud/web/pull/5415 + +* Enhancement - New layout for context menu: [#5160](https://github.com/owncloud/web/issues/5160) + + The new context menu in the files list received additional menu items and a clear separation + into three sections. + + https://github.com/owncloud/web/issues/5160 + https://github.com/owncloud/web/pull/5576 + * Enhancement - Dropdown actions in FilesTable: [#5102](https://github.com/owncloud/web/issues/5102) Users can now access quick actions in a dropdown by clicking on the three-dots button or right-clicking on rows in the files table. - We've also bumped the ownCloud Design System to version 8.2.0 + We've also bumped the ownCloud Design System to version 8.3.0 https://github.com/owncloud/web/issues/5102 https://github.com/owncloud/web/issues/5103 https://github.com/owncloud/web/pull/5551 - https://github.com/owncloud/owncloud-design-system/releases/tag/v8.2.0 + https://github.com/owncloud/web/pull/5554 + https://github.com/owncloud/owncloud-design-system/releases/tag/v8.3.0 + +* Enhancement - Refactor recipient autocomplete in people panel: [#5554](https://github.com/owncloud/web/pull/5554) + + We've refactored the recipient autocomplete in people panel so that selected recipients are + displayed directly in the autocomplete instead of the list below it. + + https://github.com/owncloud/web/pull/5554 + +* Enhancement - Load only opened panels: [#5569](https://github.com/owncloud/web/issues/5569) + + Do not load panels in the Files extension sidebar until they are opened. + + https://github.com/owncloud/web/issues/5569 + https://github.com/owncloud/web/pull/5573 * Enhancement - Prevent binding to only loopback IP when running in watch mode: [#5515](https://github.com/owncloud/web/pull/5515) @@ -58,6 +146,21 @@ Details https://github.com/owncloud/web/pull/5515 +* Enhancement - Add filter & search to files app: [#5415](https://github.com/owncloud/web/pull/5415) + + We've changed the existing searchbar to use the custom search service. It is now able to be used + at the same time as a filter (on the frontend) and, if the backend is capable of search, as a search + input. + + https://github.com/owncloud/web/pull/5415 + +* Enhancement - Define the number of visible share recipients: [#5506](https://github.com/owncloud/web/pull/5506) + + We've added a new configuration option `sharingRecipientsPerPage` to define how many + recipients should be shown in the share recipients dropdown. + + https://github.com/owncloud/web/pull/5506 + * Enhancement - Sidebar sliding panels navigation: [#5549](https://github.com/owncloud/web/pull/5549) The sidebar now uses a ios like concept for navigate through the different actions in the @@ -66,13 +169,6 @@ Details https://github.com/owncloud/web/issues/5523 https://github.com/owncloud/web/pull/5549 -* Enhancement - Use profile picture capability in avatars: [#5178](https://github.com/owncloud/web/pull/5178) - - Requests for loading avatar profile pictures now only get sent if the backend communicates - their availability in the capabilities. - - https://github.com/owncloud/web/pull/5178 - Changelog for ownCloud Web [3.4.1] (2021-07-12) ======================================= The following sections list the changes in ownCloud web 3.4.1 relevant to diff --git a/changelog/4.0.0_2021-08-04/bugfix-left-sidebar-public-link b/changelog/4.0.0_2021-08-04/bugfix-left-sidebar-public-link new file mode 100644 index 00000000000..1b29e660d72 --- /dev/null +++ b/changelog/4.0.0_2021-08-04/bugfix-left-sidebar-public-link @@ -0,0 +1,5 @@ +Bugfix: Left sidebar visibility in public links + +We fixed that the left sidebar was showing the navigation items of an authenticated context when visiting a public link as authenticated user. + +https://github.com/owncloud/web/pull/5602 diff --git a/changelog/4.0.0_2021-08-04/bugfix-name-checks-with-pagination b/changelog/4.0.0_2021-08-04/bugfix-name-checks-with-pagination new file mode 100644 index 00000000000..8c9de41b394 --- /dev/null +++ b/changelog/4.0.0_2021-08-04/bugfix-name-checks-with-pagination @@ -0,0 +1,9 @@ +Bugfix: Check names also for folders or files that currently are not visible + +We've changed the way how web checks if a file or folder exists. +From now on it also include files from the current folder that actually are not visible. + +This was problematic in situations like the pagination, where a file or folder was not +available in the current set of resources and the user tried to create a folder with the same name. + +https://github.com/owncloud/web/pull/5583 diff --git a/changelog/unreleased/bugfix-oc10-web-oidc-csp b/changelog/4.0.0_2021-08-04/bugfix-oc10-web-oidc-csp similarity index 100% rename from changelog/unreleased/bugfix-oc10-web-oidc-csp rename to changelog/4.0.0_2021-08-04/bugfix-oc10-web-oidc-csp diff --git a/changelog/unreleased/bugfix-send-cookie-manifests-json b/changelog/4.0.0_2021-08-04/bugfix-send-cookie-manifests-json similarity index 100% rename from changelog/unreleased/bugfix-send-cookie-manifests-json rename to changelog/4.0.0_2021-08-04/bugfix-send-cookie-manifests-json diff --git a/changelog/unreleased/bugfix-unnecessary-quota-requests b/changelog/4.0.0_2021-08-04/bugfix-unnecessary-quota-requests similarity index 100% rename from changelog/unreleased/bugfix-unnecessary-quota-requests rename to changelog/4.0.0_2021-08-04/bugfix-unnecessary-quota-requests diff --git a/changelog/unreleased/enhancement-use-profile-picture-capability b/changelog/4.0.0_2021-08-04/bugfix-use-profile-picture-capability similarity index 76% rename from changelog/unreleased/enhancement-use-profile-picture-capability rename to changelog/4.0.0_2021-08-04/bugfix-use-profile-picture-capability index c125790fad9..3962104a882 100644 --- a/changelog/unreleased/enhancement-use-profile-picture-capability +++ b/changelog/4.0.0_2021-08-04/bugfix-use-profile-picture-capability @@ -1,4 +1,4 @@ -Enhancement: Use profile picture capability in avatars +Bugfix: Use profile picture capability in avatars Requests for loading avatar profile pictures now only get sent if the backend communicates their availability in the capabilities. diff --git a/changelog/4.0.0_2021-08-04/change-add-customer-search-service b/changelog/4.0.0_2021-08-04/change-add-customer-search-service new file mode 100644 index 00000000000..5f3c70b1e59 --- /dev/null +++ b/changelog/4.0.0_2021-08-04/change-add-customer-search-service @@ -0,0 +1,8 @@ +Change: Add custom search service + +We've added `search` as another core app that can be utilized by +other (third-party) frontend extensions to provide +filter and search functionality. +Please note that you need to add `search` to the `apps` array of your config.json file, otherwise the search bar with its global file search capabilities will disappear. + +https://github.com/owncloud/web/pull/5415 diff --git a/changelog/4.0.0_2021-08-04/enhancement-contextmenu-layout b/changelog/4.0.0_2021-08-04/enhancement-contextmenu-layout new file mode 100644 index 00000000000..0995fb1b67a --- /dev/null +++ b/changelog/4.0.0_2021-08-04/enhancement-contextmenu-layout @@ -0,0 +1,6 @@ +Enhancement: New layout for context menu + +The new context menu in the files list received additional menu items and a clear separation into three sections. + +https://github.com/owncloud/web/issues/5160 +https://github.com/owncloud/web/pull/5576 diff --git a/changelog/unreleased/enhancement-filestable-dropdown-actions b/changelog/4.0.0_2021-08-04/enhancement-filestable-dropdown-actions similarity index 63% rename from changelog/unreleased/enhancement-filestable-dropdown-actions rename to changelog/4.0.0_2021-08-04/enhancement-filestable-dropdown-actions index 88f1185fb3b..9abd24fb721 100644 --- a/changelog/unreleased/enhancement-filestable-dropdown-actions +++ b/changelog/4.0.0_2021-08-04/enhancement-filestable-dropdown-actions @@ -1,11 +1,12 @@ Enhancement: Dropdown actions in FilesTable -Users can now access quick actions in a dropdown by clicking on +Users can now access quick actions in a dropdown by clicking on the three-dots button or right-clicking on rows in the files table. -We've also bumped the ownCloud Design System to version 8.2.0 +We've also bumped the ownCloud Design System to version 8.3.0 -https://github.com/owncloud/owncloud-design-system/releases/tag/v8.2.0 +https://github.com/owncloud/owncloud-design-system/releases/tag/v8.3.0 https://github.com/owncloud/web/issues/5102 https://github.com/owncloud/web/issues/5103 https://github.com/owncloud/web/pull/5551 +https://github.com/owncloud/web/pull/5554 diff --git a/changelog/4.0.0_2021-08-04/enhancement-invite b/changelog/4.0.0_2021-08-04/enhancement-invite new file mode 100644 index 00000000000..c101083fd42 --- /dev/null +++ b/changelog/4.0.0_2021-08-04/enhancement-invite @@ -0,0 +1,5 @@ +Enhancement: Refactor recipient autocomplete in people panel + +We've refactored the recipient autocomplete in people panel so that selected recipients are displayed directly in the autocomplete instead of the list below it. + +https://github.com/owncloud/web/pull/5554 \ No newline at end of file diff --git a/changelog/4.0.0_2021-08-04/enhancement-load-only-opened-panels b/changelog/4.0.0_2021-08-04/enhancement-load-only-opened-panels new file mode 100644 index 00000000000..a76ee6c7fa3 --- /dev/null +++ b/changelog/4.0.0_2021-08-04/enhancement-load-only-opened-panels @@ -0,0 +1,6 @@ +Enhancement: load only opened panels + +Do not load panels in the Files extension sidebar until they are opened. + +https://github.com/owncloud/web/issues/5569 +https://github.com/owncloud/web/pull/5573 \ No newline at end of file diff --git a/changelog/unreleased/enhancement-prevent-bind-to-loopback-address b/changelog/4.0.0_2021-08-04/enhancement-prevent-bind-to-loopback-address similarity index 98% rename from changelog/unreleased/enhancement-prevent-bind-to-loopback-address rename to changelog/4.0.0_2021-08-04/enhancement-prevent-bind-to-loopback-address index 0c99f4ec5b3..63843edbbb5 100644 --- a/changelog/unreleased/enhancement-prevent-bind-to-loopback-address +++ b/changelog/4.0.0_2021-08-04/enhancement-prevent-bind-to-loopback-address @@ -1,5 +1,5 @@ -Enhancement: Prevent binding to only loopback IP when running in watch mode - -This is required when running the acceptance tests on Windows, it allows the selenium docker containers to access the frontend due to the host binding in rollup (when running `yarn serve`). Does not break any existing functionality. - -https://github.com/owncloud/web/pull/5515 +Enhancement: Prevent binding to only loopback IP when running in watch mode + +This is required when running the acceptance tests on Windows, it allows the selenium docker containers to access the frontend due to the host binding in rollup (when running `yarn serve`). Does not break any existing functionality. + +https://github.com/owncloud/web/pull/5515 diff --git a/changelog/4.0.0_2021-08-04/enhancement-search-filter-files b/changelog/4.0.0_2021-08-04/enhancement-search-filter-files new file mode 100644 index 00000000000..9d6237757f0 --- /dev/null +++ b/changelog/4.0.0_2021-08-04/enhancement-search-filter-files @@ -0,0 +1,7 @@ +Enhancement: Add filter & search to files app + +We've changed the existing searchbar to use the custom search service. +It is now able to be used at the same time as a filter (on the frontend) and, if the backend +is capable of search, as a search input. + +https://github.com/owncloud/web/pull/5415 diff --git a/changelog/4.0.0_2021-08-04/enhancement-share-recipients-number b/changelog/4.0.0_2021-08-04/enhancement-share-recipients-number new file mode 100644 index 00000000000..841155fc5af --- /dev/null +++ b/changelog/4.0.0_2021-08-04/enhancement-share-recipients-number @@ -0,0 +1,6 @@ +Enhancement: Define the number of visible share recipients + +We've added a new configuration option `sharingRecipientsPerPage` to +define how many recipients should be shown in the share recipients dropdown. + +https://github.com/owncloud/web/pull/5506 diff --git a/changelog/unreleased/enhancement-sidebar-navigation b/changelog/4.0.0_2021-08-04/enhancement-sidebar-navigation similarity index 100% rename from changelog/unreleased/enhancement-sidebar-navigation rename to changelog/4.0.0_2021-08-04/enhancement-sidebar-navigation diff --git a/changelog/unreleased/bugfix-load-folder-in-media-viewer b/changelog/unreleased/bugfix-load-folder-in-media-viewer new file mode 100644 index 00000000000..c707e06b2d5 --- /dev/null +++ b/changelog/unreleased/bugfix-load-folder-in-media-viewer @@ -0,0 +1,7 @@ +Bugfix: load folder in Media viewer + +We've fixed the loading of a folder in the Media viewer extension. +If a user reloads the Media viewer now, it load all the medias both in private and public context. + +https://github.com/owncloud/web/issues/5427 +https://github.com/owncloud/web/pull/5585 \ No newline at end of file diff --git a/changelog/unreleased/enhancement-add-multiple-selection-sidebar b/changelog/unreleased/enhancement-add-multiple-selection-sidebar new file mode 100644 index 00000000000..49b7f609108 --- /dev/null +++ b/changelog/unreleased/enhancement-add-multiple-selection-sidebar @@ -0,0 +1,7 @@ +Enhancement: Add multiple selection Sidebar + +We've changed the sidebar so if a user selects multiple files or folders +he sees a detailed view of his selection in the sidebar. + +https://github.com/owncloud/web/issues/5164 +https://github.com/owncloud/web/pull/5630 \ No newline at end of file diff --git a/config/config.json.dist b/config/config.json.dist index 2d61474173a..c9a4132e62c 100644 --- a/config/config.json.dist +++ b/config/config.json.dist @@ -9,6 +9,7 @@ }, "apps" : [ "files", + "search", "media-viewer", "draw-io" ], diff --git a/config/config.json.sample-oc10 b/config/config.json.sample-oc10 index 6c88ff354e3..1a7bb458b3e 100644 --- a/config/config.json.sample-oc10 +++ b/config/config.json.sample-oc10 @@ -9,6 +9,7 @@ }, "apps": [ "files", + "search", "media-viewer" ], "external_apps": [ diff --git a/config/config.json.sample-ocis b/config/config.json.sample-ocis index cd99a98b227..3abb918e761 100644 --- a/config/config.json.sample-ocis +++ b/config/config.json.sample-ocis @@ -9,11 +9,9 @@ "response_type": "code", "scope": "openid profile email" }, - "options": { - "hideSearchBar": true - }, "apps": [ "files", + "search", "media-viewer" ], "external_apps": [ diff --git a/dev/docker/oc10.config.php b/dev/docker/oc10.config.php new file mode 100644 index 00000000000..5edf59fc444 --- /dev/null +++ b/dev/docker/oc10.config.php @@ -0,0 +1,6 @@ + 'http://host.docker.internal:8080/index.php/apps/web', + 'web.rewriteLinks' => true, +]; + diff --git a/dev/docker/oc10.entrypoint.sh b/dev/docker/oc10.entrypoint.sh new file mode 100755 index 00000000000..469a88574b3 --- /dev/null +++ b/dev/docker/oc10.entrypoint.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash +set -eo pipefail +[[ "${DEBUG}" == "true" ]] && set -x + +for FILE in $(find /etc/entrypoint.d -iname \*.sh | sort) +do + source ${FILE} +done + +/usr/bin/owncloud server & + +until curl --output /dev/null --head --fail --silent --insecure "http://localhost:8080"; do + echo "waiting for 'oc10'" + sleep 1 +done + +if [ ! -d /mnt/data/apps/testing ] +then + git clone https://github.com/owncloud/testing.git /mnt/data/apps/testing + occ app:enable oauth2 + occ app:enable testing + occ oauth2:add-client \ + web \ + M8W5mo3wQV3VHWYsaYpWhkr8dwa949i4GljCkedHhl7GWqmHMkxSeJgK2PcS0jt5 \ + sqvPYXK94tMsEEVOYORxg8Ufesi2kC4WpJJSYb0Kj1DSAYl6u2XvJZjc3VcitjDv \ + http://host.docker.internal:8080/index.php/apps/web/oidc-callback.html +fi + +if [ -d /var/www/owncloud/apps/web/ ] +then + rm -rf /var/www/owncloud/apps/web/ + occ app:enable web +fi + +tail -f /mnt/data/files/owncloud.log diff --git a/dev/docker/oc10.web.config.json b/dev/docker/oc10.web.config.json new file mode 100644 index 00000000000..f2782dc632a --- /dev/null +++ b/dev/docker/oc10.web.config.json @@ -0,0 +1,35 @@ +{ + "server" : "http://host.docker.internal:8080", + "auth": { + "clientId": "M8W5mo3wQV3VHWYsaYpWhkr8dwa949i4GljCkedHhl7GWqmHMkxSeJgK2PcS0jt5", + "url": "http://host.docker.internal:8080/index.php/apps/oauth2/api/v1/token", + "authUrl": "http://host.docker.internal:8080/index.php/apps/oauth2/authorize" + }, + "apps": [ + "files", + "media-viewer", + "search" + ], + "applications" : [ + { + "title": { + "en": "Classic Design", + "de": "Dateien", + "fr": "Fichiers", + "zh_CN": "文件" + }, + "icon": "switch_ui", + "url": "http://host.docker.internal:8080/index.php/apps/files" + }, + { + "icon": "application", + "menu": "user", + "target": "_self", + "title": { + "de": "Einstellungen", + "en": "Settings" + }, + "url": "http://host.docker.internal:8080/index.php/settings/personal" + } + ] +} \ No newline at end of file diff --git a/dev/docker/ocis.web.config.json b/dev/docker/ocis.web.config.json new file mode 100644 index 00000000000..61d2e261b6c --- /dev/null +++ b/dev/docker/ocis.web.config.json @@ -0,0 +1,39 @@ +{ + "server": "https://host.docker.internal:9200", + "theme": "https://host.docker.internal:9200/themes/owncloud/theme.json", + "version": "0.1.0", + "openIdConnect": { + "metadata_url": "https://host.docker.internal:9200/.well-known/openid-configuration", + "authority": "https://host.docker.internal:9200", + "client_id": "web", + "response_type": "code", + "scope": "openid profile email" + }, + "options": { + "hideSearchBar": true + }, + "apps": [ + "files", + "media-viewer", + "search" + ], + "external_apps": [ + { + "id": "settings", + "path": "https://host.docker.internal:9200/settings.js" + }, + { + "id": "accounts", + "path": "https://host.docker.internal:9200/accounts.js" + }, + { + "id": "draw-io", + "path": "web-app-draw-io", + "config": { + "url": "https://embed.diagrams.net", + "autosave": false, + "theme": "minimal" + } + } + ] +} \ No newline at end of file diff --git a/dev/docker/selenium.Dockerfile b/dev/docker/selenium.Dockerfile new file mode 100644 index 00000000000..1a62d712f0d --- /dev/null +++ b/dev/docker/selenium.Dockerfile @@ -0,0 +1,10 @@ +# for m1 use SELENIUM_IMAGE=seleniarm/standalone-chromium:4.0.0-beta-1-20210215 docker-compose run selenium +#ARG SELENIUM_IMAGE=selenium/standalone-chrome-debug +ARG SELENIUM_IMAGE +FROM ${SELENIUM_IMAGE} + +RUN sudo apt -qqy update \ + && sudo apt -qqy --no-install-recommends install \ + fonts-indic \ + && sudo rm -rf /var/lib/apt/lists/* \ + && sudo apt -qyy clean \ No newline at end of file diff --git a/dev/docker/vnc.Dockerfile b/dev/docker/vnc.Dockerfile new file mode 100644 index 00000000000..6e9c1fee185 --- /dev/null +++ b/dev/docker/vnc.Dockerfile @@ -0,0 +1,12 @@ +FROM python:3 + +WORKDIR /novnc +RUN pip install numpy +RUN git clone --branch v1.2.0 https://github.com/novnc/noVNC.git . +RUN git clone https://github.com/novnc/websockify ./utils/websockify +RUN sed -i 's/$(hostname):${PORT}\/vnc.html?host=$(hostname)&port=${PORT}/host.docker.internal:${PORT}/g' ./utils/launch.sh +RUN cp vnc.html index.html + +CMD utils/launch.sh --vnc selenium:5900 + + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000000..30c909a415f --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,73 @@ +services: + ocis: + image: ${OCIS_IMAGE:-owncloud/ocis:latest} + container_name: web_ocis + ports: + - 9200:9200 + environment: + OCIS_URL: ${OCIS_URL:-https://host.docker.internal:9200} + STORAGE_HOME_DRIVER: ${STORAGE_HOME_DRIVER:-ocis} + STORAGE_USERS_DRIVER: ${STORAGE_USERS_DRIVER:-ocis} + PROXY_OIDC_INSECURE: "${PROXY_OIDC_INSECURE:-true}" + WEB_UI_CONFIG: ${WEB_UI_CONFIG:-/web/config.json} + WEB_ASSET_PATH: ${WEB_ASSET_PATH:-/web/dist} + IDP_IDENTIFIER_REGISTRATION_CONF: ${IDP_IDENTIFIER_REGISTRATION_CONF:-/web/identifier-registration.yml} + PROXY_ENABLE_BASIC_AUTH: "${PROXY_ENABLE_BASIC_AUTH:-true}" + OCIS_LOG_LEVEL: ${OCIS_LOG_LEVEL:-error} + volumes: + - ./dist:/web/dist:ro + - ./tests/acceptance/mac-identifier-registration.yml:/web/identifier-registration.yml:ro + - ${OCIS_WEB_CONFIG:-./dev/docker/ocis.web.config.json}:/web/config.json:ro + extra_hosts: + - host.docker.internal:${DOCKER_HOST:-host-gateway} + + oc10: + image: ${OC10_IMAGE:-owncloud/server:latest} + container_name: web_oc10 + ports: + - 8080:8080 + volumes: + - ${OC10_WEB_CONFIG:-./dev/docker/oc10.web.config.json}:/mnt/data/config/config.json + - ${OC10_CONFIG:-./dev/docker/oc10.config.php}:/mnt/data/config/setup.config.php + - ./dev/docker/oc10.entrypoint.sh:/usr/bin/entrypoint + - ./packages/web-integration-oc10/appinfo:/mnt/data/apps/web/appinfo + - ./packages/web-integration-oc10/lib:/mnt/data/apps/web/lib + - ./dist/css:/mnt/data/apps/web/css + - ./dist/img:/mnt/data/apps/web/img + - ./dist/js:/mnt/data/apps/web/js + - ./dist/themes:/mnt/data/apps/web/themes + - ./dist/index.html:/mnt/data/apps/web/index.html + - ./dist/manifest.json:/mnt/data/apps/web/manifest.json + - ./dist/oidc-callback.html:/mnt/data/apps/web/oidc-callback.html + - ./dist/oidc-silent-redirect.html:/mnt/data/apps/web/oidc-silent-redirect.html + extra_hosts: + - host.docker.internal:${DOCKER_HOST:-host-gateway} + entrypoint: /usr/bin/entrypoint + + selenium: + build: + dockerfile: selenium.Dockerfile + context: ./dev/docker + args: + SELENIUM_IMAGE: ${SELENIUM_IMAGE:-selenium/standalone-chrome-debug} + container_name: web_selenium + ports: + - 4444:4444 + - 5900:5900 + volumes: + - /dev/shm:/dev/shm + - ./tests/acceptance/filesForUpload:/uploads:ro + extra_hosts: + - host.docker.internal:${DOCKER_HOST:-host-gateway} + environment: + VNC_NO_PASSWORD: "true" + + vnc: + build: + dockerfile: vnc.Dockerfile + context: ./dev/docker + container_name: web_vnc + ports: + - 6080:6080 + extra_hosts: + - host.docker.internal:${DOCKER_HOST:-host-gateway} diff --git a/docs/_index.md b/docs/_index.md index e161e4b259f..e0fa7be12df 100644 --- a/docs/_index.md +++ b/docs/_index.md @@ -8,4 +8,5 @@ geekdocFilePath: _index.md geekdocCollapseSection: true --- -This is the next generation ownCloud frontend. +This is the next generation ownCloud frontend. +If you're new here, head over to the the [getting started guide]({{< ref "getting-started.md" >}}) for a quick introduction. diff --git a/docs/backend-ocis.md b/docs/backend-ocis.md index f98982102eb..9feff3a9aec 100644 --- a/docs/backend-ocis.md +++ b/docs/backend-ocis.md @@ -1,5 +1,5 @@ --- -title: "Setup with OCIS" +title: "Setup with oCIS" date: 2020-04-15T00:00:00+00:00 weight: 50 geekdocRepo: https://github.com/owncloud/web @@ -9,9 +9,9 @@ geekdocFilePath: backend-ocis.md {{< toc >}} -## Setting up OCIS services +## Setting up oCIS services -- Setup OCIS by following the [setup instructions](https://owncloud.dev/ocis/getting-started/). +- Setup oCIS by following the [setup instructions](https://owncloud.dev/ocis/getting-started/). - Kill the oCIS Web service `./ocis kill web` ## Setting up Web @@ -27,5 +27,5 @@ geekdocFilePath: backend-ocis.md ## Running acceptance tests -For testing, please refer to the [OCIS testing section]({{< ref "testing.md#running-acceptance-tests-using-ocis-backend" >}}) +For testing, please refer to the [oCIS testing section]({{< ref "testing.md#running-acceptance-tests-using-ocis-backend" >}}) diff --git a/docs/getting-started.md b/docs/getting-started.md index e55900f0f10..d984f48be64 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -13,7 +13,23 @@ geekdocFilePath: getting-started.md ### Docker -TBD +Make sure to have Docker, Docker-Compose, Node.js and Yarn installed. + +{{< hint info >}} +This setup currently doesn't work on Windows out of the box. + +
+ Workaround + One of our contributors has opened a PR to a dependency that prevents us from successfully bundling the frontend. + Feel free to check out [his changes](https://github.com/egoist/rollup-plugin-postcss/pull/384) and build them locally if you absolutely want to work on Windows. +
+{{< /hint >}} + +After cloning the [source code](https://github.com/owncloud/web), install the dependencies via `yarn install` and bundle the frontend code by running `yarn build:w`. + +Then, you can start the backends by running `docker-compose up oc10 ocis` and access them via [https://host.docker.internal:9200](https://host.docker.internal:9200) (oCIS) and [http://host.docker.internal:8080](http://host.docker.internal:8080) (OC10). If you're not using Docker Desktop, you might have to modify your `/etc/hosts` and add `172.17.0.1 docker.host.internal` to make the `host.docker.internal` links work. + +The bundled frontend code automatically gets mounted into the Docker containers, recompiles on changes and you can log in using the demo user (admin/admin) and take a look around! ### Source code @@ -35,17 +51,18 @@ substring of a value of the authenticated user. Examples are `/Shares`, `/{{.Id} - `options.previewFileExtensions` Specifies which filetypes will be previewed in the ui. For example to only preview jpg and txt files set this option to `["jpg", "txt"]`. - `options.disableFeedbackLink` Set this option to `true` to disable the feedback link in the topbar. Keeping it enabled (value `false` or absence of the option) allows ownCloud to get feedback from your user base through a dedicated survey website. +- `options.sharingRecipientsPerPage` Sets the amount of users shown as recipients in the dropdown when sharing resources. Default amount is 200. ## Setting up backend and running -Web can run against either [ownCloud 10](https://github.com/owncloud/core/) as backend or [OCIS](https://github.com/owncloud/ocis). +Web can run against either [ownCloud 10](https://github.com/owncloud/core/) as backend or [oCIS](https://github.com/owncloud/ocis). Depending which one you chose, please check the matching section: - [Setting up with ownCloud as backend]({{< ref "backend-oc10.md" >}}) -- [Setting up with OCIS as backend]({{< ref "backend-ocis.md" >}}) +- [Setting up with oCIS as backend]({{< ref "backend-ocis.md" >}}) ## Running - [Running with ownCloud as backend]({{< ref "backend-oc10.md#running-web" >}}) -- [Running with OCIS as backend]({{< ref "backend-ocis.md#running-web" >}}) +- [Running with oCIS as backend]({{< ref "backend-ocis.md#running-web" >}}) diff --git a/docs/testing-manual.md b/docs/testing-manual.md new file mode 100644 index 00000000000..43f8ae880ac --- /dev/null +++ b/docs/testing-manual.md @@ -0,0 +1,178 @@ +--- +title: "Running acceptance tests - manual" +date: 2020-04-15T00:00:00+00:00 +weight: 60 +geekdocRepo: https://github.com/owncloud/web +geekdocEditPath: edit/master/docs +geekdocFilePath: testing-old.md +--- + +{{< toc >}} + +## Setup Selenium + +There are multiple ways to run Selenium: + +- [Setup using Docker](#setup-using-docker) +- [Setup using Docker Desktop for Mac](#setup-using-docker-desktop-for-mac) +- [Setup using a standalone Selenium server](#setup-using-standalone-selenium-server) + +### Setup using Docker + +- Set the environment variables `SELENIUM_HOST` as `localhost` and `SERVER_HOST` in the format `http://:9100`. +- If you are a Linux user, run `docker run --rm -d --network="host" -v /dev/shm:/dev/shm -v ${REMOTE_UPLOAD_DIR:-$PWD/tests/acceptance/filesForUpload}:${LOCAL_UPLOAD_DIR:-/uploads}:ro --name web-tests-selenium selenium/standalone-chrome-debug` +- If you are a Mac user, run `docker run --rm -d -p ${SELENIUM_PORT:-4444}:4444 -p 5900:5900 -v /dev/shm:/dev/shm -v ${REMOTE_UPLOAD_DIR:-$PWD/tests/acceptance/filesForUpload}:${LOCAL_UPLOAD_DIR:-/uploads}:ro --name web-tests-selenium selenium/standalone-chrome-debug` + - This command creates a docker container which uses port forwarding instead of host networking [which is not supported on Mac](https://docs.docker.com/network/host/) + + If you are running selenium with these docker commands, you can run these commands from the `web` folder, then you wont need to set `REMOTE_UPLOAD_DIR`. + +### Setup using Docker Desktop for Mac + +In order to run acceptance tests with selenium running in Docker Desktop for Mac while having ownCloud Server and Web running as services +on the host machine, `localhost` will not work as URL. Use the Docker host ip `172.17.0.1` or its alias `host.docker.internal` instead. +This requires adjusting all relevant config files to use `host.docker.internal` instead of `localhost` (config.json in Web and +config/config.php in oC10) and changing the web OIDC-callback url. Set the `SERVER_HOST` and `BACKEND_HOST` environment variables +accordingly. In order to use the same url for development on the host machine, define it as an alias to `127.0.0.1` in `/etc/hosts`. +After all these changes Web will be accessible at `http://host.docker.internal:9100` for both development and acceptance tests. + +### Setup using standalone Selenium server + +When running a standalone Selenium server, make sure to set the environment variable `SELENIUM_HOST`, `SELENIUM_PORT` and `LOCAL_UPLOAD_DIR` accordingly. + +## Setup backend + +### ownCloud 10 + +- set up the [ownCloud 10 backend]({{< ref "backend-oc10.md" >}}) +- clone and install the [testing app](http://github.com/owncloud/testing) into ownCloud + +### oCIS +In order to run the acceptance tests you need to run oCIS using the oCIS storage driver. Also, you need to enable basic auth on the server with these environment variables. + +`PROXY_ENABLE_BASIC_AUTH=true STORAGE_HOME_DRIVER=owncloud STORAGE_USERS_DRIVER=owncloud` + +- set up the [oCIS backend]({{< ref "backend-ocis.md" >}}) + - if you are a Mac user, you need to start the server with additional environment variables: `STORAGE_HOME_DATA_SERVER_URL='http://host.docker.internal:9155/data' STORAGE_DATAGATEWAY_PUBLIC_URL='https://host.docker.internal:9200/data' STORAGE_USERS_DATA_SERVER_URL='http://host.docker.internal:9158/data' STORAGE_FRONTEND_PUBLIC_URL='https://host.docker.internal:9200' PROXY_ENABLE_BASIC_AUTH=true PROXY_OIDC_ISSUER='https://host.docker.internal:9200' IDP_INSECURE='true' IDP_IDENTIFIER_REGISTRATION_CONF='/tests/acceptance/mac-identifier-registration.yml' IDP_ISS='https://host.docker.internal:9200' IDP_TLS='true'` (`` needs to be replaced with the your local clone of ownCloud Web) + +## Setup ownCloud Web + +- [build Web]({{< ref "building.md" >}}) +- [start the Web server]({{< ref "backend-oc10.md#running-web" >}}) +- if you are running web against the oCIS backend, clone the testing app `git clone git@github.com:owncloud/testing.git tests/testing-app` + +## Run tests + +- set `SERVER_HOST` to point at the URL where the Web web pages are served, for example "http://localhost:9100" +- set `BACKEND_HOST` to point to the URL of the backend, for example "http://localhost/owncloud/" +- to be able to run federation tests, additional setup is needed: + 1. Install and set up a second ownCloud server-instance that is accessible by a different URL. That second server-instance must have its own database and data directory. + 2. clone and install the testing app into the second ownCloud server-instance from http://github.com/owncloud/testing . + 3. when running the acceptance tests use `REMOTE_BACKEND_HOST` environment variable to define its address, for example, `REMOTE_BACKEND_HOST=http:// yarn test:acceptance:oc10 ` + +- set the `SELENIUM_HOST` environment variable to your host that runs selenium, mostly `localhost` +- set the `SELENIUM_PORT` environment variable to your selenium port, mostly `4444` +- set the `TESTING_DATA_DIR` when running the tests on oCIS pointing to the testing data that includes data like skeleton directories. The testing directory is available [here](https://github.com/owncloud/testing/tree/master/data). This is handled automatically by the testrunner while running the tests in oc10. + +The feature files are located in the "tests/acceptance/features" subdirectories. + +see [available settings](#available-settings-to-be-set-by-environment-variables) for further setup if needed + +### with oC10 backend + +- run `yarn test:acceptance:oc10 ` + +### with oCIS backend + +- run `yarn test:acceptance:ocis ` +- If you are a mac user, run `STORAGE_HOME_DATA_SERVER_URL='http://host.docker.internal:9155/data' STORAGE_DATAGATEWAY_PUBLIC_URL='https://host.docker.internal:9200/data' STORAGE_USERS_DATA_SERVER_URL='http://host.docker.internal:9158/data' STORAGE_FRONTEND_PUBLIC_URL='https://host.docker.internal:9200' PROXY_ENABLE_BASIC_AUTH=true PROXY_OIDC_ISSUER='https://host.docker.internal:9200' IDP_INSECURE='true' IDP_IDENTIFIER_REGISTRATION_CONF='./tests/acceptance/mac-identifier-registration.yml' IDP_ISS='https://host.docker.internal:9200' IDP_TLS='true' yarn test:acceptance:ocis ` + +### Visual Regression Testing + +The test suite consists of snapshots of UI components which can be compared for visual regression testing when running the acceptance tests. These comparisons are done in the existing scenarios. You can check the existing snapshots of the components in the directory `/tests/vrt/baseline`. + +#### Running the visual regression tests + +When you run the acceptance tests as usual, all the visual regression comparisons are skipped. To run the acceptance test suite with the visual comparison enabled you need to set the env variable, `VISUAL_TEST` to `true` + +eg. +``` +VISUAL_TEST=true SERVER_HOST=http:// BACKEND_HOST=http:// yarn test:acceptance:oc10 +``` + +#### Updating the snapshots + +If there is some change in the components, and you want to update the snapshots of the components you can run the tests with `UPDATE_VRT_SCREENSHOTS` set to `true`. When this env variable is set, the testrunner will ignore if the visual comparison fails and updates the baseline images with the latest images if the comparison fails. + +eg. +``` +VISUAL_TEST=true UPDATE_VRT_SCREENSHOTS=true SERVER_HOST=http:// BACKEND_HOST=http:// yarn test:acceptance:oc10 +``` + +**note** Visual regression testing may not be completely reliable every time as small changes such as window size and screen resolution may affect the result. For better results it is recommended that you run the tests using the `selenium/standalone-chrome-debug` image of selenium and window size of `1280x1024` + +see [available settings](#available-settings-to-be-set-by-environment-variables) for further setup if needed + +## Available settings to be set by environment variables + +These values can be set using the environment variables to configure `yarn test:acceptance:oc10` and `yarn test:acceptance:ocis` to match your local test environment. + +| setting | meaning | default | +|-------------------- | -----------------------------------------------------------------------| ----------------------| +| `SERVER_HOST` | web URL | http://localhost:9100 | +| `BACKEND_HOST` | ownCloud server URL (or reva service url for running with oCIS) | http://localhost:8080 | +| `BACKEND_USERNAME` | ownCloud administrator username | admin | +| `BACKEND_PASSWORD` | ownCloud administrator password | admin | +| `SELENIUM_HOST` | selenium server host, if not set yarn will start selenium automatically
if running the selenium docker container as mentioned above set to `localhost` | | +| `SELENIUM_PORT` | port of selenium server | 4444 | +| `SCREEN_RESOLUTION` | width and height in px to set the browser resolution to e.g. 375x812 | empty = fullscreen | +| `REMOTE_UPLOAD_DIR` | path to `filesForUpload` directory, used when uploading files through api | `./tests/acceptance/filesForUpload` | +| `LOCAL_UPLOAD_DIR` | `filesForUpload` directory available for selenium for direct uploads
If using selenium-docker and example above, set it as `/uploads`.
If running local selenium, set value same as `REMOTE_UPLOAD_DIR` (please, remember to use absolute path)| `/uploads` | +| `REMOTE_BACKEND_HOST` | ownCloud remote server URL | http://localhost:8080 | +| `RUN_ON_OCIS` | Running the tests using the oCIS backend | false | +| `OCIS_REVA_DATA_ROOT` | Data directory of oCIS | /var/tmp/reva | +| `TESTING_DATA_DIR` | Testing data directory for new users | - | +| `WEB_UI_CONFIG` | Path for the web config file (usually in the dist folder) | - | +| `VISUAL_TEST` | Run the visual regression comparison while running the acceptance tests | - | +| `UPDATE_VRT_SCREENSHOTS` | Update the baseline snapshots with the latest images for visual regression tests | - | + +## Tips + +### too many open files + +If tests were running fine and then suddenly start to fail your system might run into open file limits. +In that case you will see messages in the oCIS log output that look like this: + +`2020-05-12 11:33:43.974552 I | http: Accept error: accept tcp [::]:9200: accept4: too many open files; retrying in 1s` + +In that case increase the open file limits, how to do that would be beyond the scope of this documentation. + +## Acceptance Tests in CI + +In the CI we run the UI tests using different backends on different repos. We use commit IDs to indicate the version of the backend or testrunner we want to use. These commit IDs should be regularly updated in the `.drone.star` file to keep the CI up to date. +We run web UI tests in the following repos in the CI. + +### 1. web Repo + +In the `owncloud/web` repo, we run the tests using both the oc10 backend and the oCIS backend. +For the oc10 backend, we use the `owncloudci/core` docker image which runs the latest `daily-master-qa` version of owncloud. + +For the oCIS backend, we use the Commit ID from the `owncloud/ocis` repo to indicate which version of backend to use. This can be specified in the `.drone.env` file. +``` + # The version of oCIS to use in pipelines that test against oCIS + OCIS_COMMITID=352034d9eba8be8c4bc4b80421f3c0093e7d472c + OCIS_BRANCH=master +``` +If the version you want to run is on a different branch from master, you also need to change the branch name. + +In order to check if new tests are compatible with oCIS, after changing the commit id and the branch name, we can create a draft PR in `owncloud/web` which triggers the CI, and we can see the result there. + +### 2. oCIS Repo + +We follow the same approach in the `owncloud/ocis` repo too. In order to run the UI tests in CI we use commit IDs from web which can be changed in the `.drone.env` file. + +``` + # The test runner source for UI tests + WEB_COMMITID=3cab4e32bca513f14f59127a0387b44a409763a3 + WEB_BRANCH=master +``` +This is the commit ID of web indicating the version of testrunner we want to use. If the version is on a branch other than master, we will also need to change the branch name. diff --git a/docs/testing.md b/docs/testing.md index db286aa9d44..39441e2b31b 100644 --- a/docs/testing.md +++ b/docs/testing.md @@ -1,6 +1,6 @@ --- title: "Running acceptance tests" -date: 2020-04-15T00:00:00+00:00 +date: 2021-07-27T00:00:00+00:00 weight: 60 geekdocRepo: https://github.com/owncloud/web geekdocEditPath: edit/master/docs @@ -8,171 +8,81 @@ geekdocFilePath: testing.md --- {{< toc >}} +## Introduction -## Setup Selenium +In order to allow us to make changes quickly, often and with a high level of confidence, we heavily rely on tests within the `web` repository. -There are multiple ways to run Selenium: +All the steps below require you to have the `web` repo cloned locally and dependencies installed. +This can be achieved by running -- [Setup using Docker](#setup-using-docker) -- [Setup using Docker Desktop for Mac](#setup-using-docker-desktop-for-mac) -- [Setup using a standalone Selenium server](#setup-using-standalone-selenium-server) - -### Setup using Docker - -- Set the environment variables `SELENIUM_HOST` as `localhost` and `SERVER_HOST` in the format `http://:9100`. -- If you are a Linux user, run `docker run --rm -d --network="host" -v /dev/shm:/dev/shm -v ${REMOTE_UPLOAD_DIR:-$PWD/tests/acceptance/filesForUpload}:${LOCAL_UPLOAD_DIR:-/uploads}:ro --name web-tests-selenium selenium/standalone-chrome-debug` -- If you are a Mac user, run `docker run --rm -d -p ${SELENIUM_PORT:-4444}:4444 -p 5900:5900 -v /dev/shm:/dev/shm -v ${REMOTE_UPLOAD_DIR:-$PWD/tests/acceptance/filesForUpload}:${LOCAL_UPLOAD_DIR:-/uploads}:ro --name web-tests-selenium selenium/standalone-chrome-debug` - - This command creates a docker container which uses port forwarding instead of host networking [which is not supported on Mac](https://docs.docker.com/network/host/) - - If you are running selenium with these docker commands, you can run these commands from the `web` folder, then you wont need to set `REMOTE_UPLOAD_DIR`. - -### Setup using Docker Desktop for Mac - -In order to run acceptance tests with selenium running in Docker Desktop for Mac while having ownCloud Server and Web running as services -on the host machine, `localhost` will not work as URL. Use the Docker host ip `172.17.0.1` or its alias `host.docker.internal` instead. -This requires adjusting all relevant config files to use `host.docker.internal` instead of `localhost` (config.json in Web and -config/config.php in oC10) and changing the web OIDC-callback url. Set the `SERVER_HOST` and `BACKEND_HOST` environment variables -accordingly. In order to use the same url for development on the host machine, define it as an alias to `127.0.0.1` in `/etc/hosts`. -After all these changes Web will be accessible at `http://host.docker.internal:9100` for both development and acceptance tests. - -### Setup using standalone Selenium server - -When running a standalone Selenium server, make sure to set the environment variable `SELENIUM_HOST`, `SELENIUM_PORT` and `LOCAL_UPLOAD_DIR` accordingly. - -## Setup backend - -### ownCloud 10 - -- set up the [ownCloud 10 backend]({{< ref "backend-oc10.md" >}}) -- clone and install the [testing app](http://github.com/owncloud/testing) into ownCloud - -### oCIS -In order to run the acceptance tests you need to run ocis using the ocis storage driver. Also, you need to enable basic auth on the server with these environment variables. - -`PROXY_ENABLE_BASIC_AUTH=true STORAGE_HOME_DRIVER=owncloud STORAGE_USERS_DRIVER=owncloud` - -- set up the [oCIS backend]({{< ref "backend-ocis.md" >}}) - - if you are a Mac user, you need to start the server with additional environment variables: `STORAGE_HOME_DATA_SERVER_URL='http://host.docker.internal:9155/data' STORAGE_DATAGATEWAY_PUBLIC_URL='https://host.docker.internal:9200/data' STORAGE_USERS_DATA_SERVER_URL='http://host.docker.internal:9158/data' STORAGE_FRONTEND_PUBLIC_URL='https://host.docker.internal:9200' PROXY_ENABLE_BASIC_AUTH=true PROXY_OIDC_ISSUER='https://host.docker.internal:9200' IDP_INSECURE='true' IDP_IDENTIFIER_REGISTRATION_CONF='/tests/acceptance/mac-identifier-registration.yml' IDP_ISS='https://host.docker.internal:9200' IDP_TLS='true'` (`` needs to be replaced with the your local clone of ownCloud Web) - -## Setup ownCloud Web - -- [build Web]({{< ref "building.md" >}}) -- [start the Web server]({{< ref "backend-oc10.md#running-web" >}}) -- if you are running web against the oCIS backend, clone the testing app `git clone git@github.com:owncloud/testing.git tests/testing-app` - -## Run tests +```shell +$ git clone https://github.com/owncloud/web.git +$ cd web +$ yarn +``` -- set `SERVER_HOST` to point at the URL where the Web web pages are served, for example "http://localhost:9100" -- set `BACKEND_HOST` to point to the URL of the backend, for example "http://localhost/owncloud/" -- to be able to run federation tests, additional setup is needed: - 1. Install and set up a second ownCloud server-instance that is accessible by a different URL. That second server-instance must have its own database and data directory. - 2. clone and install the testing app into the second ownCloud server-instance from http://github.com/owncloud/testing . - 3. when running the acceptance tests use `REMOTE_BACKEND_HOST` environment variable to define its address, for example, `REMOTE_BACKEND_HOST=http:// yarn test:acceptance:oc10 ` +### Unit & Integration Tests -- set the `SELENIUM_HOST` environment variable to your host that runs selenium, mostly `localhost` -- set the `SELENIUM_PORT` environment variable to your selenium port, mostly `4444` -- set the `TESTING_DATA_DIR` when running the tests on ocis pointing to the testing data that includes data like skeleton directories. The testing directory is available [here](https://github.com/owncloud/testing/tree/master/data). This is handled automatically by the testrunner while running the tests in oc10. +We have a steadily growing coverage of both unit and integration tests. You can run them locally via -The feature files are located in the "tests/acceptance/features" subdirectories. +```shell +$ yarn test:unit +$ yarn test:integration +``` -see [available settings](#available-settings-to-be-set-by-environment-variables) for further setup if needed +You can also specify which tests to run by giving a path param, like so: `yarn test:unit packages//tests/unit/path/to/test.spec.js`. -### with oC10 backend +### Acceptance Tests -- run `yarn test:acceptance:oc10 ` +At ownCloud, we have decided to adopt Docker as the main environment for developing our application. +This also applies for running our acceptance tests. To run the tests without Docker on your local machine, please refer to the [manual testing guide]({{< ref "testing-manual.md" >}}) -### with oCIS backend +#### Prerequisites -- run `yarn test:acceptance:ocis ` -- If you are a mac user, run `STORAGE_HOME_DATA_SERVER_URL='http://host.docker.internal:9155/data' STORAGE_DATAGATEWAY_PUBLIC_URL='https://host.docker.internal:9200/data' STORAGE_USERS_DATA_SERVER_URL='http://host.docker.internal:9158/data' STORAGE_FRONTEND_PUBLIC_URL='https://host.docker.internal:9200' PROXY_ENABLE_BASIC_AUTH=true PROXY_OIDC_ISSUER='https://host.docker.internal:9200' IDP_INSECURE='true' IDP_IDENTIFIER_REGISTRATION_CONF='./tests/acceptance/mac-identifier-registration.yml' IDP_ISS='https://host.docker.internal:9200' IDP_TLS='true' yarn test:acceptance:ocis ` +To run acceptance tests with Docker, please make sure you have the following tools installed: -### Visual Regression Testing +- docker +- docker-compose +- yarn +- node -The test suite consists of snapshots of UI components which can be compared for visual regression testing when running the acceptance tests. These comparisons are done in the existing scenarios. You can check the existing snapshots of the components in the directory `/tests/vrt/baseline`. +Please also make sure to point `http://host.docker.internal/` to `127.0.0.1` by adding it to your hosts. -#### Running the visual regression tests +#### Prepare & start web -When you run the acceptance tests as usual, all the visual regression comparisons are skipped. To run the acceptance test suite with the visual comparison enabled you need to set the env variable, `VISUAL_TEST` to `true` +Bundle the web frontend, which then gets mounted into the respective backends. It also gets recompiled on changes. -eg. -``` -VISUAL_TEST=true SERVER_HOST=http:// BACKEND_HOST=http:// yarn test:acceptance:oc10 +```shell +$ yarn build:w ``` -#### Updating the snapshots +#### Start Docker -If there is some change in the components, and you want to update the snapshots of the components you can run the tests with `UPDATE_VRT_SCREENSHOTS` set to `true`. When this env variable is set, the testrunner will ignore if the visual comparison fails and updates the baseline images with the latest images if the comparison fails. +Using compose, you can start the required Docker containers by running -eg. -``` -VISUAL_TEST=true UPDATE_VRT_SCREENSHOTS=true SERVER_HOST=http:// BACKEND_HOST=http:// yarn test:acceptance:oc10 +```shell +$ docker compose up oc10 ocis vnc selenium ``` -**note** Visual regression testing may not be completely reliable every time as small changes such as window size and screen resolution may affect the result. For better results it is recommended that you run the tests using the `selenium/standalone-chrome-debug` image of selenium and window size of `1280x1024` - -see [available settings](#available-settings-to-be-set-by-environment-variables) for further setup if needed - -## Available settings to be set by environment variables - -These values can be set using the environment variables to configure `yarn test:acceptance:oc10` and `yarn test:acceptance:ocis` to match your local test environment. - -| setting | meaning | default | -|-------------------- | -----------------------------------------------------------------------| ----------------------| -| `SERVER_HOST` | web URL | http://localhost:9100 | -| `BACKEND_HOST` | ownCloud server URL (or reva service url for running with OCIS) | http://localhost:8080 | -| `BACKEND_USERNAME` | ownCloud administrator username | admin | -| `BACKEND_PASSWORD` | ownCloud administrator password | admin | -| `SELENIUM_HOST` | selenium server host, if not set yarn will start selenium automatically
if running the selenium docker container as mentioned above set to `localhost` | | -| `SELENIUM_PORT` | port of selenium server | 4444 | -| `SCREEN_RESOLUTION` | width and height in px to set the browser resolution to e.g. 375x812 | empty = fullscreen | -| `REMOTE_UPLOAD_DIR` | path to `filesForUpload` directory, used when uploading files through api | `./tests/acceptance/filesForUpload` | -| `LOCAL_UPLOAD_DIR` | `filesForUpload` directory available for selenium for direct uploads
If using selenium-docker and example above, set it as `/uploads`.
If running local selenium, set value same as `REMOTE_UPLOAD_DIR` (please, remember to use absolute path)| `/uploads` | -| `REMOTE_BACKEND_HOST` | ownCloud remote server URL | http://localhost:8080 | -| `RUN_ON_OCIS` | Running the tests using the OCIS backend | false | -| `OCIS_REVA_DATA_ROOT` | Data directory of OCIS | /var/tmp/reva | -| `TESTING_DATA_DIR` | Testing data directory for new users | - | -| `WEB_UI_CONFIG` | Path for the web config file (usually in the dist folder) | - | -| `VISUAL_TEST` | Run the visual regression comparison while running the acceptance tests | - | -| `UPDATE_VRT_SCREENSHOTS` | Update the baseline snapshots with the latest images for visual regression tests | - | - -## Tips - -### too many open files +and make sure there are no conflicting ports and everything runs smoothly. You can check if everything has worked by opening [https://host.docker.internal:9200](https://host.docker.internal:9200) (oCIS) and [http://host.docker.internal:8080](http://host.docker.internal:8080) (OC10) and logging in using the demo user (admin/admin). -If tests were running fine and then suddenly start to fail your system might run into open file limits. -In that case you will see messages in the OCIS log output that look like this: +If you're using a M1 Mac, you need to use `seleniarm/standalone-chromium:4.0.0-beta-1-20210215`for now. To do so, export `SELENIUM_IMAGE=seleniarm/standalone-chromium:4.0.0-beta-1-20210215`. -`2020-05-12 11:33:43.974552 I | http: Accept error: accept tcp [::]:9200: accept4: too many open files; retrying in 1s` +#### Run acceptance tests -In that case increase the open file limits, how to do that would be beyond the scope of this documentation. +Depending on the backend you're running the tests on, you can either run -## Acceptance Tests in CI - -In the CI we run the UI tests using different backends on different repos. We use commit IDs to indicate the version of the backend or testrunner we want to use. These commit IDs should be regularly updated in the `.drone.star` file to keep the CI up to date. -We run web UI tests in the following repos in the CI. - -### 1. web Repo - -In the `owncloud/web` repo, we run the tests using both the oc10 backend and the OCIS backend. -For the oc10 backend, we use the `owncloudci/core` docker image which runs the latest `daily-master-qa` version of owncloud. - -For the OCIS backend, we use the Commit ID from the `owncloud/ocis` repo to indicate which version of backend to use. This can be specified in the `.drone.env` file. +```shell +$ yarn test:acceptance:oc10 tests/acceptance/features/path/to/test ``` - # The version of OCIS to use in pipelines that test against OCIS - OCIS_COMMITID=352034d9eba8be8c4bc4b80421f3c0093e7d472c - OCIS_BRANCH=master -``` -If the version you want to run is on a different branch from master, you also need to change the branch name. -In order to check if new tests are compatible with OCIS, after changing the commit id and the branch name, we can create a draft PR in `owncloud/web` which triggers the CI, and we can see the result there. +for ownCloud 10.X or -### 2. ocis Repo +```shell +$ yarn test:acceptance:ocis tests/acceptance/features/path/to/test +``` -We follow the same approach in the `owncloud/ocis` repo too. In order to run the UI tests in CI we use commit IDs from web which can be changed in the `.drone.env` file. +for oCIS acceptance tests. +#### Watch the test run -``` - # The test runner source for UI tests - WEB_COMMITID=3cab4e32bca513f14f59127a0387b44a409763a3 - WEB_BRANCH=master -``` -This is the commit ID of web indicating the version of testrunner we want to use. If the version is on a branch other than master, we will also need to change the branch name. +To watch the tests while running, open [http://host.docker.internal:6080/](http://host.docker.internal:6080/) in the browser to access your VNC client. diff --git a/nightwatch.conf.js b/nightwatch.conf.js index 17cec8b7fbe..6a4fbdecae2 100644 --- a/nightwatch.conf.js +++ b/nightwatch.conf.js @@ -5,10 +5,14 @@ const withHttp = url => (/^https?:\/\//i.test(url) ? url : `http://${url}`) const RUN_WITH_LDAP = !!process.env.RUN_WITH_LDAP const RUN_ON_OCIS = !!process.env.RUN_ON_OCIS const LOCAL_LAUNCH_URL = withHttp( - process.env.SERVER_HOST || (RUN_ON_OCIS ? 'https://localhost:9200' : 'http://localhost:9100') + process.env.SERVER_HOST || + (RUN_ON_OCIS + ? 'https://host.docker.internal:9200' + : 'http://host.docker.internal:8080/index.php/apps/web/index.html') ) const LOCAL_BACKEND_URL = withHttp( - process.env.BACKEND_HOST || (RUN_ON_OCIS ? 'https://localhost:9200' : 'http://localhost:8080') + process.env.BACKEND_HOST || + (RUN_ON_OCIS ? 'https://host.docker.internal:9200' : 'http://host.docker.internal:8080') ) const REMOTE_BACKEND_URL = process.env.REMOTE_BACKEND_HOST ? withHttp(process.env.REMOTE_BACKEND_HOST || 'http://localhost:8080') @@ -36,6 +40,7 @@ const SCREENSHOTS = !!process.env.SCREENSHOTS const VISUAL_TEST = !!process.env.VISUAL_TEST const UPDATE_VRT_SCREENSHOTS = !!process.env.UPDATE_VRT_SCREENSHOTS + function generateScreenshotFilePath(nightwatchClient, basePath, imagePath) { return path.join(process.cwd(), basePath, imagePath) } diff --git a/package.json b/package.json index 4f59a7d125c..708c76546b6 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "version": "3.4.1", + "version": "4.0.0", "private": true, "homepage": "https://github.com/owncloud/web", "license": "AGPL-3.0", @@ -9,6 +9,7 @@ "packages/web-app-files", "packages/web-app-markdown-editor", "packages/web-app-media-viewer", + "packages/web-app-search", "packages/web-pkg", "packages/web-runtime" ], @@ -40,17 +41,19 @@ "@rollup/plugin-commonjs": "^17.0.0", "@rollup/plugin-html": "^0.2.0", "@rollup/plugin-json": "^4.1.0", - "@rollup/plugin-typescript": "^8.2.1", + "@rollup/plugin-typescript": "^8.2.5", "@testing-library/jest-dom": "^5.13.0", "@testing-library/vue": "^5.6.2", "@types/jest": "^26.0.23", "@types/jest-axe": "^3.5.2", "@typescript-eslint/eslint-plugin": "^4.28.3", "@typescript-eslint/parser": "^4.28.3", + "@types/lodash-es": "^4.17.4", + "@types/vue": "^2.0.0", "@vue/test-utils": "^1.1.2", "archiver": "^3.0.0", "autoprefixer": "^10.2.4", - "axe-core": "^4.2.0", + "axe-core": "^4.3.2", "babel-core": "^7.0.0-bridge.0", "babel-eslint": "^10.1.0", "babel-jest": "^27.0.6", @@ -69,7 +72,7 @@ "eslint-plugin-prettier": "^3.4.0", "eslint-plugin-promise": "^5.1.0", "eslint-plugin-vue": "^7.13.0", - "eslint-plugin-vuejs-accessibility": "^0.6.1", + "eslint-plugin-vuejs-accessibility": "^0.7.1", "focus-trap": "^6.4.0", "focus-trap-vue": "^1.1.1", "fs-extra": "^9.0.1", @@ -105,7 +108,7 @@ "rollup-plugin-serve": "^1.1.0", "rollup-plugin-terser": "^7.0.2", "rollup-plugin-ts": "^1.4.0", - "rollup-plugin-visualizer": "^5.5.1", + "rollup-plugin-visualizer": "^5.5.2", "rollup-plugin-vue": "^5.1.4", "sync-fetch": "^0.3.0", "ts-jest": "^26.5.6", diff --git a/packages/web-app-draw-io/l10n/translations.json b/packages/web-app-draw-io/l10n/translations.json index 0d3c742fbc0..b1b9ffcd7c5 100644 --- a/packages/web-app-draw-io/l10n/translations.json +++ b/packages/web-app-draw-io/l10n/translations.json @@ -1 +1 @@ -{"cs":{},"de":{"Diagram imported":"Diagramm importiert","Draw.io editor":"Draw.io Editor","Loading media":"Lade Daten","New draw.io document…":"Neues draw.io Dokument...","The diagram could not be loaded…":"Das Diagramm konnte nicht geladen werden..."},"es":{},"fr":{},"gl":{},"it":{}} \ No newline at end of file +{"cs":{},"de":{"Diagram imported":"Diagramm importiert","Draw.io editor":"Draw.io Editor","Loading media":"Lade Daten","New draw.io document…":"Neues draw.io Dokument...","The diagram could not be loaded…":"Das Diagramm konnte nicht geladen werden..."},"es":{"Diagram imported":"Diagrama importado","Draw.io editor":"Editor Draw.io","Loading media":"Cargando medios","New draw.io document…":"Nuevo documento Draw.io ...","The diagram could not be loaded…":"El diagrama no puede cargarse ..."},"fr":{"Diagram imported":"Diagramme importé","New draw.io document…":"Nouveau document draw.io …"},"gl":{},"it":{}} \ No newline at end of file diff --git a/packages/web-app-files/l10n/translations.json b/packages/web-app-files/l10n/translations.json index fdf3a1f327d..7060a9823fe 100644 --- a/packages/web-app-files/l10n/translations.json +++ b/packages/web-app-files/l10n/translations.json @@ -1 +1 @@ -{"cs":{"%{file} was successfully deleted":"%{file} byl úspěšně odstraněn","%{name} already exists":"%{name} již existuje","Accept":"Přijmout","Accepted":"Přijato","Actions":"Akce","Add new person by name, email or federation ID's":"Přidat novou osobu podle jména, emailu nebo federačního ID","Add people":"Přidat lidi","Adding People":"Přidávání lidí","Advanced permissions":"Pokročilá oprávnění","All files":"Všechny soubory","Allow creating":"Povolit vytváření","Allow deleting":"Povolit mazání","Allow editing":"Povolit úpravy","An error occurred while loading the public link":"Při načítání veřejného odkazu došlo k chybě","An error occurred while resolving the private link":"Při načítání odkazu nastala chyba","Cancel":"Zrušit","Confirm":"Potvrdit","Continue":"Pokračovat","Contributor":"Přispěvatel","Copy":"Kopírovat","Create":"Vytvořit","Creating file failed…":"Vytváření souboru selhalo...","Creating folder failed…":"Vytváření složky selhalo...","Decline":"Odmítnout","Declined":"Odmítnuto","Delete":"Odstranit","Delete public link":"Smazat veřejný odkaz","Deletion of %{file} failed":"Odstranění %{file} selhalo","Do you want to overwrite it?":"Opravdu si přejete přepsat tento soubor?","Download":"Stáhnout","Download and preview":"Stáhnout a zobrazit","Drag and drop to upload content into current folder":"Přetáhněte soubor, abyste ho nahráli do aktuální složky","Drop files here to upload or click to select file":"Sem přetáhněte soubory, které chcete nahrát, nebo kliknutím vyberte soubor","Edit public link":"Upravit veřejný odkaz","Edit, download and preview":"Upravit, stáhnout a zobrazit","Editor":"Editor","Error while deleting \"%{file}\"":"Chyba při odstraňování \"%{file}\"","Error while deleting \"%{file}\" - the file is locked":"Chyba při odstraňování \"%{file}\" - tento soubor je zamčený","Error while renaming \"%{file}\" to \"%{newName}\" - the file is locked":"Chyba při přejmenování \"%{file}\" na \"%{newName}\" - tento soubor je zamčený","Error while searching.":"Hledání selhalo.","Error while sharing.":"Sdílení selhalo.","Expiration date":"Datum vypršení","Favorites":"Oblíbené","File name":"Název souboru","File name cannot be empty":"Jméno souboru nemůže být prázdné","File name cannot be equal to \"..\"":"Název souboru nemůže být \"..\"","File name cannot be equal to \".\"":"Název souboru nemůže být \".\"","File name cannot contain \"/\"":"Název souboru nemůže obsahovat \"/\"","File name cannot end with whitespace":"Název souboru nemůže končit mezerou","File upload failed…":"Nahrávání souboru selhalo...","Files":"Soubory","Folder %{folder} already exists.":"Složka s názvem %{folder} již existuje","Folder name":"Jméno složky","Folder name cannot be empty":"Jméno složky nemůže být prázdný","Folder name cannot be equal to \"..\"":"Název složky nemůže být \"..\"","Folder name cannot be equal to \".\"":"Název složky nemůže být \".\"","Folder name cannot contain \"/\"":"Název složky nemůže obsahovat \"/\"","Folder name cannot end with whitespace":"Název složky nemůže končit mezerou","Group":"Skupina","Links":"Odkazy","Loading public link…":"Načítání veřejného odkazu...","Mail recipients":"Příjemci pošty","Mark as favorite":"Označit jako oblíbené","Move":{"Action in the files list row to initiate move of a single resource":"Přesunout","":"Přesunout"},"Move here":{"Confirm action in the location picker for move":"Přesunout sem"},"Name":"Název","New":"Nový","New file":"Nový soubor","New folder":"Nová složka","No Versions available for this file":"Pro tento soubor nejsou dostupné žádné verze","Overwrite":"Přepsat","Owner":"Vlastník","Password":"Heslo","Pending":"Čekající","Personal note":"Soukromá poznámka","Public link":"Veřejný odkaz","Public Links":"Veřejné odkazy","Recipients can view and download contents.":"Příjemci mohou prohlížet a stahovat obsah.","Recipients can view, download and upload contents.":"Příjemci mohou prohlížet, stahovat a nahrávat obsah.","Recipients can view, download, edit, delete and upload contents.":"Příjemci mohou prohlížet, stahovat, upravovat, mazat a nahrávat obsah.","Remove password":"Odstranit heslo","Rename":"Přejmenovat","Rename file %{name}":"Přejmenovat soubor %{name}","Rename folder %{name}":"Přejmenovat složku %{name}","Resolving private link…":"Načítání soukromého odkazu...","Restoration of %{file} failed":"Obnovení %{file} selhalo","Restore":"Obnovit","Role":"Role","Save":"Uložit","Send a copy to myself":"Pošlete mi kopii","Set detailed permissions":"Nastavit podrobná oprávnění","Share":"Sdílet","Shared with me":"Sdíleno se mnou","Show Details":"Zobrazit detaily","The name \"%{name}\" is already taken":"Jméno \"%{name}\" je již obsazeno","The name cannot be equal to \"..\"":"Název nemůže být \"..\"","The name cannot be equal to \".\"":"Název nemůže být \".\"","The name cannot contain \"/\"":"Název nemůže obsahovat \"/\"","The name cannot end with whitespace":"Název nemůže končit mezerou","The private link has been copied to your clipboard.":"Soukromý odkaz byl úspěšně zkopírován","This resource is password-protected.":"Tento zdroj je chráněný heslem.","title":"název","Unmark as favorite":"Odznačit jako oblíbené","Upload complete":"Nahrávání dokončeno","Upload failed":"Nahrávání selhalo","Upload File":"Nahrát soubor","Upload Folder":"Nahrát složku","Upload of a folder is not supported in Internet Explorer.":"Nahrávání složky není v aplikaci Internet Explorer podporováno.","Upload, edit, delete, download and preview":"Nahrát, upravit, smazat, stáhnout a zobrazit","Uploader":"Nahrál","User":"Uživatel","Versions":"Verze","Viewer":"Divák","You have no permission to upload!":"Nemáte oprávnění nahrávat soubory.","You have not enough space left to upload!":"Nemáte dostatek místa pro nahrátí."},"de":{"(me)":"(ich)","(Opens in new window)":"(Öffnet in neuem Fenster)","%{ amount } item selected. Actions are available above the table.":["%{ amount } Element ausgewählt. Aktionen sind oberhalb der Tabelle verfügbar.","%{ amount } Elemente ausgewählt. Aktionen sind oberhalb der Tabelle verfügbar."],"%{ amount } selected item":["%{ amount } ausgewähltes Element","%{ amount } ausgewählte Elemente"],"%{ amount } selected item - %{ size }":["%{ amount } ausgewähltes Element - %{ size }","%{ amount } ausgewählte Elemente - %{ size }"],"%{ filesCount } file":["%{ filesCount } Datei","%{ filesCount } Dateien"],"%{ foldersCount } folder":["%{ foldersCount } Ordner","%{ foldersCount } Ordner"],"%{ itemsCount } item in total (%{ filesStr}, %{foldersStr})":["%{ itemsCount } Datei insgesamt (%{ filesStr}, %{foldersStr})","%{ itemsCount } Dateien insgesamt (%{ filesStr}, %{foldersStr})"],"%{ itemsCount } item with %{ itemSize } in total (%{ filesStr}, %{foldersStr})":["%{ itemsCount } Datei mit %{ itemSize } insgesamt (%{ filesStr}, %{foldersStr})","%{ itemsCount } Dateien mit %{ itemSize } insgesamt (%{ filesStr}, %{foldersStr})"],"%{count} resource could not be copied":["%{count} Ressource konnte nicht kopiert werden","%{count} Dateien konnten nicht kopiert werden"],"%{count} resource could not be moved":["%{count} Ressource konnte nicht verschoben werden","%{count} Dateien konnten nicht verschoben werden"],"%{file} was restored successfully":"%{file} wurde erfolgreich wiederhergestellt","%{file} was successfully deleted":"%{file} wurde erfolgreich gelöscht","%{name} already exists":"%{name} existiert bereits","%{owner} shared this folder with you for uploading":"%{owner} hat diesen Ordner zum Upload geteilt.","%{resource} was restored successfully":"%{resource} erfolgreich wiederhergestellt","Accept":"Annehmen","Accept share":"Freigabe annehmen","Accepted":"Angenommen","action":"Aktion","Actions":"Aktionen","Add files or folders":"Dateien oder Ordner hinzufügen","Add new person by name, email or federation ID's":"Eine neue Person durch Name, E-Mail oder Federation-ID hinzufügen","Add people":"Personen hinzufügen","Adding People":"Personen werden hinzugefügt","Additional permissions":"Zusätzliche Rechte","Advanced permissions":"Zusätzliche Rechte","All":"Alle","All deleted files were removed":"Alle gelöschten Dateien wurden entfernt","All files":"Alle Dateien","Allow creating":"Erstellen erlauben","Allow deleting":"Löschen erlauben","Allow editing":"Editieren erlauben","Allow sharing":"Teilen erlauben","An error occurred while copying %{resource}":"Beim Kopieren von %{resource} ist ein Fehler aufgetreten","An error occurred while copying several resources":"Beim Kopieren von mehreren Dateien ist ein Fehler aufgetreten","An error occurred while loading the public link":"Beim Laden des öffentlichen Links ist ein Fehler aufgetreten","An error occurred while moving %{resource}":"Beim Verschieben von %{resource} ist ein Fehler aufgetreten","An error occurred while moving several resources":"Beim Verschieben von mehreren Dateien ist ein Fehler aufgetreten","An error occurred while resolving the private link":"Beim Auflösen des privaten Links ist ein Fehler aufgetreten.","Any external person with the respective link can access this resource. No sign-in\n required. Assign a password to avoid unintended document exposure.":"Externe Personen mit einem Link können auf diese Datei oder diesen Ordner zugreifen. Ein Login ist nicht erforderlich. Um unbeabsichtigte Zugriffe zu verhindern, sollte ein Passwort vergeben werden.","Are you sure you want to delete all selected resources?":"Sollen die gewählten Dateien wirklich gelöscht werden?","Are you sure you want to delete all selected resources? All their content will be permanently removed. This action cannot be undone.":"Sollen die gewählten Dateien wirklich gelöscht werden? Der gesamte Inhalt wird endgültig gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.","Are you sure you want to delete this file?":"Soll diese Datei wirklich gelöscht werden?","Are you sure you want to delete this file? All it’s content will be permanently removed. This action cannot be undone.":"Soll diese Datei wirklich gelöscht werden? Der gesamte Inhalt wird endgültig gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.","Are you sure you want to delete this folder?":"Soll dieser Ordner wirklich gelöscht werden?","Are you sure you want to delete this folder? All it’s content will be permanently removed. This action cannot be undone.":"Soll dieser Ordner wirklich gelöscht werden? Der gesamte Inhalt wird endgültig gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.","Are you sure you want to delete this link? Recreating the same link again is not possible.":"Soll der ausgewählte Link wirklich gelöscht werden? Derselbe Link kann danach nicht wieder erzeugt werden.","Cancel":"Abbrechen","Clear selection":"Auswahl aufheben","Click row to toggle upload progress details":"Zeile anklicken für Uploaddetails","Click to mark this file as favorite":"Klicken Sie um diese Datei als Favorit zu markieren.","Click to remove this file from your favorites":"Klicken Sie um diese Datei als Favorit abzuwählen.","Close file sidebar":"Seitenleiste schließen","Confirm":"Bestätigen","Continue":"Weiter","Contributor":"Mitarbeiter","Copy":"Kopieren","Copy into »%{ target }«":"Nach »%{ target }« kopieren","Copy link to clipboard":"Link in die Zwischenablage kopieren","Copy private link to clipboard":"Privaten Link in die Zwischenablage kopieren","Could not delete files":"Dateien konnten nicht gelöscht werden","Create":"Erstellen","Create a new file":"Neue Datei erstellen","Create a new folder":"Neuen Ordner erstellen","Create and copy public link":"Öffentlichen Link erstellen und kopieren","Create new public link":"Neuen öffentlichen Link erstellen","Creating":"Erstelle","Creating file failed…":"Erstellen der Datei fehlgeschlagen…","Creating folder failed…":"Erstellen des Ordners fehlgeschlagen…","Creating Public Link":"Erstelle den öffentlichen Link","Decline":"Ablehnen","Decline share":"Freigabe ablehnen","Declined":"Abgelehnt","Delete":"Löschen","Delete file %{name}":"Datei %{name} löschen","Delete folder %{name}":"Ordner %{name} löschen","Delete public link":"Lösche den öffentlichen Link","Delete selected resource?":["Ausgewählte Ressource löschen?","%{amount} ausgewählte Dateien löschen?"],"Delete share":"Freigabe entfernen","Delete share with %{ currentCollaborator }":"%{ currentCollaborator } die Freigabe entziehen","Deleted files":"Gelöschte Dateien","Deletion of %{file} failed":"Löschen von %{file} ist fehlgeschlagen","Details":"Details","Display customization options of the files list":"Anpassungsoptionen für die Dateienliste anzeigen","Do you want to create a new version?":"Soll eine neue Version erstellt werden?","Do you want to overwrite it?":"Soll es überschrieben werden?","Download":"Herunterladen","Download and preview":"Herunterladen und Vorschau","Download older version":"Ältere Version herunterladen","Download, preview and share":"Herunterladen, Vorschau und Teilen","Drag and drop to upload content into current folder":"Ziehen Sie Inhalte per Drag & Drop in den aktuellen Ordner","Drag files and folders here or use the \"+ New\" button to upload":"Dateien und Ordner hierher ziehen oder den \"+Neu\"-Button zum Hochladen nutzen","Drop files here to upload or click to select file":"Dateien hier fallenlassen oder anklicken zum Selektieren","Edit public link":"Bearbeite öffentlichen Link","Edit share with %{ currentCollaborator }":"Freigabe für %{ currentCollaborator } bearbeiten","Edit, download and preview":"Bearbeiten, Herunterladen und Vorschau","Edit, download, preview and share":"Bearbeiten, Herunterladen, Vorschau und Teilen","Editing share with %{ currentCollaborator }":"Freigabe für %{ currentCollaborator } bearbeiten","Editor":"Editor","Empty trash bin":"Papierkorb leeren","Enter password for public link":"Passworteingabe für öffentlichen Link","Error while accepting the selected share.":["Fehler beim Annehmen der ausgewählten Freigabe.","Fehler beim Annehmen der ausgewählten Freigaben."],"Error while declining the selected share.":["Fehler beim Ablehnen der ausgewählten Freigabe.","Fehler beim Ablehnen der ausgewählten Freigaben."],"Error while deleting \"%{file}\"":"Fehler beim Löschen von \"%{file}\"","Error while deleting \"%{file}\" - the file is locked":"Fehler beim Löschen von \"%{file}\" - Datei ist gesperrt","Error while renaming \"%{file}\" to \"%{newName}\"":"Fehler beim Umbennen von \"%{file}\" zu \"%{newName}\"","Error while renaming \"%{file}\" to \"%{newName}\" - the file is locked":"Fehler beim Umbennen von \"%{file}\" zu \"%{newName}\" - Datei ist gesperrt","Error while searching.":"Fehler beim Suchen.","Error while sharing.":"Fehler beim Teilen.","Error while starring \"%{file}\"":"Fehler beim hinzufügen von \"%{file}\" zu den Favoriten","Expiration date":"Ablaufdatum","Expiration date (required)":"Verfallsdatum (erforderlich)","Expires %{expires}":"Läuft ab: %{expires}","Favorite files":"Favorisierte Dateien","Favorites":"Favoriten","File %{file} already exists":"Datei %{file} bereits vorhanden","File name":"Dateiname","File name cannot be empty":"Der Dateiname darf nicht leer sein.","File name cannot be equal to \"..\"":"Der Dateiname darf nicht \"..\" sein.","File name cannot be equal to \".\"":"Der Dateiname darf nicht \".\" sein.","File name cannot contain \"/\"":"Der Dateiname darf kein \"/\" enthalten.","File name cannot end with whitespace":"Der Dateiname darf nicht mit einem Leerzeichen enden.","File owner":"Besitzer","File upload failed…":"Datei konnte nicht hochgeladen werden…","Files":"Dateien","Files shared via link":"Per Link geteilte Dateien","Files shared with me":"Mit mir geteilte Dateien","Files shared with others":"Mit anderen geteilten Dateien","Folder %{folder} already exists.":"Der Ordner %{folder} existiert bereits..","Folder name":"Ordnername","Folder name cannot be empty":"Der Ordnername darf nicht leer sein.","Folder name cannot be equal to \"..\"":"Der Ordnername darf nicht \"..\" sein.","Folder name cannot be equal to \".\"":"Der Ordnername darf nicht \".\" sein.","Folder name cannot contain \"/\"":"Der Ordnername darf kein \"/\" enthalten.","Folder name cannot end with whitespace":"Der Ordnername darf nicht mit einem Leerzeichen enden.","Go to »All files«":"Gehe zu \"Alle Dateien\"","Group":"Gruppe","Guest":"Gast","Hide Details":"Details verstecken","Incorrect password":"Falsches Kennwort","Items per page":"Dateien pro Seite","Last modified:":"Zuletzt bearbeitet:","Links":"Links","Loading list of file links":"Lade Dateilinks","Loading people list":"Lade Personen","Loading public link…":"Lade öffentlichen Link…","Mail recipients":"E-Mail Empfänger","Mark as favorite":"Als Favorit markieren","Move":{"Action in the files list row to initiate move of a single resource":"Verschieben","":"Verschieben"},"Move here":{"Confirm action in the location picker for move":"Hierher verschieben"},"Move into »%{ target }«":"Nach »%{ target }« verschieben","msg":"Nachricht","Multiple files already exists":"Mehrere Dateien bereits vorhanden","Name":"Name","Navigate into the desired folder and copy selected resources into it.\n You can navigate into a folder by clicking on its name.\n To navigate back, you can click on the breadcrumbs.\n Resources will be copied into the folder where you are currently located.":"Navigieren Sie in den gewünschten Ordner und kopieren Sie die ausgewählten Datei dorthin.\nSie können in einen Ordner navigieren, indem Sie auf seinen Namen klicken.\nUm zurück zu navigieren, können Sie auf die Brotkrümelnavigation klicken.\nDie Dateien werden in den Ordner kopiert, in dem Sie sich gerade befinden.","Navigate into the desired folder and move selected resources into it.\n You can navigate into a folder by clicking on its name.\n To navigate back, you can click on the breadcrumbs.\n Resources will be moved into the folder where you are currently located.":"Navigieren Sie in den gewünschten Ordner und kopieren Sie die ausgewählten Datei dorthin.\nSie können in einen Ordner navigieren, indem Sie auf seinen Namen klicken.\nUm zurück zu navigieren, können Sie auf die Brotkrümelnavigation klicken.\nDie Dateien werden in den Ordner kopiert, in dem Sie sich gerade befinden.","Navigate to the parent":"Zum übergeordneten Ordner wechseln","New":"Neu","New file":"Neue Datei","New folder":"Neuer Ordner","New folder…":"Neuer Ordner…","No information to display":"Keine Informationen anzeigbar","No items selected.":"Keine Elemente ausgewählt.","No matching role found":"Keine passende Rolle gefunden","No public links":"Keine öffentlichen Links","No Versions available for this file":"Für diese Datei sind keine Versionen verfügbar. ","Only invited people can use this link.":"Nur eingeladene Personen können diesen Link öffnen.","Open folder":{"Action in the files list row to open a folder":"Ordner öffnen"},"Open in %{app}":"In %{app} öffnen","Open in browser":"Im Browser öffnen","Overview of the information about the selected file":"Übersicht der Informationen für die ausgewählte Datei","Overwrite":"Überschreiben","Owner":"Besitzer","Owner:":"Besitzer:","Password":"Passwort","Password (required)":"Passwort (erforderlich)","Password protected":"Geschützt durch Passwort","Paste here":{"Confirm action in the location picker for copy":"Hier einfügen"},"Pending":"Ausstehend","People":"Personen","Permanently delete file %{name}":"Datei %{name} endgültig löschen?","Permanently delete folder %{name}":"Ordner %{name} endgültig löschen?","Permanently delete selected resource?":["Ausgewählte Ressource endgültig löschen?","%{amount} ausgewählte Dateien endgültig löschen?"],"Person was added":"Person hinzugefügt","Personal note":"Persönliche Notiz","Please, accept this share first to display available actions":"Um die verfügbaren Aktionen anzuzeigen, muss diese Freigabe zuerst akzeptiert werden.","Private Link":"Privater Link","Private link copied":"Privater Link kopiert","Public file upload":"Öffentlicher Datei-Upload","Public files":"Öffentliche Dateien","Public link":"Öffentlicher Link","Public link copied":"Öffentlicher Link kopiert","Public link created":"Öffentlicher Link erstellt","Public link has been successfully created and copied into your clipboard.":"Der öffentliche Link wurde erfolgreich erstellt und in die Zwischenablage kopiert.","Public link was successfully deleted":"Der öffentliche Link wurde erfolgreich gelöscht","Public Links":"Öffentliche Links","Recipients can upload but existing contents are not revealed.":"Empfänger können hochladen, aber existierende Inhalte werden nicht angezeigt.","Recipients can view and download contents.":"Empfänger können Inhalte sehen und herunterladen.","Recipients can view, download and upload contents.":"Empfänger können Inhalte sehen, herunterladen und hochladen.","Recipients can view, download, edit, delete and upload contents.":"Empfänger können Inhalte sehen, herunterladen, hochladen, editieren und löschen.","Reload public link":"Öffentlichen Link neu laden","Remote user":"Remote-Benutzer","Remove expiration date":"Entferne Ablaufdatum","Remove password":"Entferne Passwort","Removing person":"Entferne Person","Removing public link":"Entferne öffentlichen Link","Rename":"Umbenennen","Rename file %{name}":"Datei %{name} umbenennen","Rename folder %{name}":"Ordner %{name} umbenennen","Resharer":"Weiter-Verteiler","Resolving private link":"Privater Link wird aufgelöst","Resolving private link…":"Auflösen des privaten Links…","Resolving public link":"Öffentlicher Link wird aufgelöst","Resource not found":"Datei nicht gefunden","Resource with name %{name} already exists":"Datei oder Ordner mit dem Namen %{name} ist bereits vorhanden","Restoration of %{file} failed":"Wiederherstellen von %{fileName} ist fehlgeschlagen.","Restoration of %{resource} failed":"%{resource} konnte nicht wiederhergestellt werden","Restore":"Wiederherstellen","Restore older version":"Ältere Version wiederherstellen","Role":"Rolle","Save":"Speichern","Save Share":"Freigabe speichern","Saving":"Speichern","Saving Public Link":"Speichere den öffentlichen Link","Saving Share":"Speichere Freigabe","See all versions":"Alle Versionen ansehen","Select a person to add":"Person zum hinzufügen auswählen","Selected people":"Ausgewählte Personen","Send a copy to myself":"Eine Kopie an mich schicken","Set detailed permissions":"Detaillierte Rechte festlegen","Share":"Teilen","Share receivers":"Empfänger der Freigabe","Shared by":"Geteilt von","Shared by %{resharer}":"Geteilt von %{resharer}","Shared via link":"Per Link geteilt","Shared with me":"Mit mir geteilt","Shared with others":"Mit anderen geteilt","Shared:":"Geteilt:","Show Details":"Details ansehen","Show hidden files":"Versteckte Dateien anzeigen","Show invited people":"Zeige eingeladene Personen","Show links":"Zeige Links","Size:":"Größe:","Tags":"Schlagwörter","The name \"%{name}\" is already taken":"Der Name \"%{name}\" ist bereits vergeben","The name cannot be empty":"Der Name darf nicht leer sein","The name cannot be equal to \"..\"":"Der Name darf nicht \"..\" sein.","The name cannot be equal to \".\"":"Der Name darf nicht \".\" sein.","The name cannot contain \"/\"":"Der Name darf kein \"/\" enthalten.","The name cannot end with whitespace":"Der Name darf nicht mit einem Leerzeichen enden","The private link has been copied to your clipboard.":"Der private Link wurde in die Zwichenablage kopiert.","The public link \"%{linkName}\" has been copied to your clipboard.":"Der öffentliche Link \"%{linkName}\" wurde in die Zwischenablage kopiert.","There are no resources in this folder":"Dieser Ordner hat keinen Inhalt","There are no resources in this folder.":"Dieser Ordner hat keinen Inhalt.","There are no resources marked as favorite":"Nichts zum favorisieren ausgewählt","There are no resources with a public link at the moment":"Aktuell gibt es keine Dateien mit öffentlichen Links","this":"dies","This file has been shared.":"Diese Datei wurde geteilt.","This folder contains %{ itemCount } item.":["Dieser Ordner enthält %{ itemCount } Element.","Dieser Ordner enthält %{ itemCount } Elemente."],"This folder has been shared.":"Dieser Ordner wurde geteilt.","This folder has no content.":"Dieser Ordner ist leer.","This item is directly shared via links.":"Dieses Element wurde direkt über Links geteilt.","This item is directly shared with others.":"Dieses Element wurde direkt mit anderen Personen geteilt.","This item is shared via links through one of the parent folders.":"Dieses Element wurde durch einen übergeordneten Ordner über Links geteilt.","This item is shared with others through one of the parent folders.":"Dieses Element wurde durch einen übergeordneten Ordner mit anderen Personen geteilt.","This resource is password-protected.":"Diese Datei ist passwortgeschützt.","title":"Titel","Unknown Role":"Unbekannte Rolle","Unknown type":"Unbekannter Typ","Unmark as favorite":"Favorit abwählen","Upload complete":"Hochladen abgeschlossen","Upload failed":"Hochladen fehlgeschlagen","Upload File":"Datei hochladen","Upload Folder":"Ordner hochladen","Upload of a folder is not supported in Internet Explorer.":"Das Hochladen eines Ordners wird im Internet Explorer nicht unterstützt.","Upload, edit, delete, download and preview":"Hochladen, Bearbeiten, Löschen, Herunterladen und Vorschau","Upload, edit, delete, download, preview and share":"Hochladen, Bearbeiten, Löschen, Herunterladen, Vorschau und Teilen","Uploader":"Nur hochladen","Uploading \"%{ fileName }\"":"Hochladen \"%{ fileName }\"","Uploading %{ count } item":["Hochladen von %{ count } Element","Hochladen von %{ count } Elementen"],"Uploading file \"%{fileName}\"":"Lade Datei \"%{ fileName }\" hoch","User":"Benutzer","Versions":"Versionen","Versions:":"Versionen:","Via %{folderName}":"Durch %{folderName}","View":"Ansicht","Viewer":"Betrachter","We went looking everywhere, but were unable to find the selected resource.":"Wir haben überall gesucht, konnten die ausgewählte Datei aber nicht finden.","You are currently not collaborating on any of your resources with other people":"Es sind keine Inhalte mit anderen Personen zur Zusammenarbeit geteilt","You are currently not collaborating on other people's resources":"Es gibt keine Einladungen zur Zusammenarbeit für Inhalte anderer Personen","You are the file owner":"Sie sind der Besitzer","You don't have permission to share this file.":"Keine Berechtigung diese Datei zu teilen.","You don't have permission to share this folder.":"Keine Berechtigung diesen Ordner zu teilen.","You have no deleted files":"Keine gelöschte Dateien","You have no permission to upload!":"Sie haben keine Berechtigung zum Hochladen!","You have not enough space left to upload!":"Sie haben zum Hochladen nicht genügend Speicherplatz zur Verfügung."},"es":{"(me)":"(yo)","%{ amount } selected item":["%{ amount } elemento seleccionado","%{ amount } elementos seleccionados"],"%{file} was restored successfully":"%{file} fue restaurado con éxito","%{file} was successfully deleted":"%{file} fue eliminado exitosamente","%{name} already exists":"%{name} ya existe","%{owner} shared this folder with you for uploading":"%{owner} compartió esta carpeta con usted para subir archivos.","Accept":"Aceptar","Actions":"Acciones","Advanced permissions":"Permisos avanzados","All files":"Todos los archivos","Allow creating":"Permitir crear","Allow deleting":"Permitir eliminar","Allow editing":"Permitir editar","An error occurred while loading the public link":"Se ha producido un error al cargar el enlace público","An error occurred while resolving the private link":"Un error ocurrió resolviendo el enlace privado ","Cancel":"Cancelar","Continue":"Continuar","Contributor":"Colaborador","Create":"Crear","Creating":"Creando","Creating file failed…":"Falló la creación de archivo...","Creating folder failed…":"Falló la creación de la carpeta...","Creating Public Link":"Creando Enlace Público","Decline":"Rechazar","Declined":"Rechazado","Delete":"Eliminar","Delete public link":"Eliminar enlace público","Deleted files":"Archivos borrados","Deletion of %{file} failed":"Borrado de %{file} falló","Do you want to create a new version?":"¿Quieres crear una nueva versión?","Do you want to overwrite it?":"¿Quieres sobreescribirlo?","Download":"Descargar","Download and preview":"Descargar y previsualizar","Drag and drop to upload content into current folder":"Arrastre y suelte para subir contenido a la carpeta actual","Drop files here to upload or click to select file":"Arrastra archivos aquí o haz clic para seleccionar un archivo","Edit public link":"Editar enlace público","Edit, download and preview":"Editar, descargar y previsualizar","Editor":"Editor","Empty trash bin":"Vaciar papelera","Error while deleting \"%{file}\"":"Error al eliminar \"%{file}\"","Error while deleting \"%{file}\" - the file is locked":"Error al eliminar \"%{file}\" - el archivo está bloqueado","Error while renaming \"%{file}\" to \"%{newName}\"":"Error al renombrar \"%{file}\" a \"%{newName}\"","Error while renaming \"%{file}\" to \"%{newName}\" - the file is locked":"Error al renombrar \"%{file}\" a \"%{newName}\" - el archivo está bloqueado","Error while searching.":"Error durante la búsqueda.","Error while sharing.":"Error al compartir","Expiration date":"Fecha de expiración","Expires %{expires}":"Expira %{expires}","Favorites":"Favoritos","File name":"Nombre de archivo","File name cannot be empty":"El nombre de archivo no puede ser vacío","File name cannot be equal to \"..\"":"El nombre de archivo no puede ser igual a \"..\"","File name cannot be equal to \".\"":"El nombre de archivo no puede ser igual a \".\"","File name cannot contain \"/\"":"El nombre del archivo no puede contener \"/\"","File name cannot end with whitespace":"El nombre del archivo no puede terminar con un espacio en blanco","File upload failed…":"La subida del archivo falló...","Files":"Archivos","Folder %{folder} already exists.":"La carpeta %{folder} ya existe.","Folder name":"Nombre de carpeta","Folder name cannot be empty":"El nombre de carpeta no puede ser vacío","Folder name cannot be equal to \"..\"":"El nombre de carpeta no puede ser igual a \"..\"","Folder name cannot be equal to \".\"":"El nombre de carpeta no puede ser igual a \".\"","Folder name cannot contain \"/\"":"El nombre de la carpeta no puede contener \"/\"","Folder name cannot end with whitespace":"El nombre de la carpeta no puede terminar con un espacio en blanco","Group":"Grupo","Hide Details":"Ocultar Detalles","Links":"Enlaces","Loading public link…":"Cargando enlace público...","Mail recipients":"Destinatarios de correo","msg":"msg","Name":"Nombre","New file":"Nuevo archivo","New folder":"Nueva carpeta","New folder…":"Nueva carpeta...","No public links":"Ningún enlace público","No Versions available for this file":"No hay versiones disponibles para este archivo","Owner":"Propietario","Password":"Contraseña","Password protected":"Protegido con contraseña","Pending":"Pendiente","Personal note":"Nota personal","Private Link":"Enlace Privado","Public Links":"Enlaces Públicos","Recipients can upload but existing contents are not revealed.":"Los receptores pueden subir archivos pero el contenido existente no será revelado.","Recipients can view and download contents.":"Los destinatarios pueden ver y descargar contenidos.","Recipients can view, download and upload contents.":"Los destinatarios pueden ver, descargar y cargar contenidos.","Recipients can view, download, edit, delete and upload contents.":"Los destinatarios pueden ver, descargar, editar, borrar y cargar contenidos.","Remove expiration date":"Eliminar fecha de vencimiento","Remove password":"Eliminar contraseña","Rename":"Renombrar","Rename file %{name}":"Renombrar archivo %{name}","Rename folder %{name}":"Renombrar carpeta %{name}","Resharer":"Recompartidor","Resolving private link…":"Resolviendo enlace privado...","Restoration of %{file} failed":"Restauración de %{file} falló","Restore":"Restaurar","Role":"Rol","Save":"Guardar","Save Share":"Guardar recurso compartido","Saving":"Guardando","Saving Public Link":"Guardar Enlace Público","Saving Share":"Guardando recurso compartido","Send a copy to myself":"Enviar una copia a mí mismo","Set detailed permissions":"Definir permisos detallados","Shared with me":"Compartido conmigo","Shared with others":"Compartido con otros","Show Details":"Mostrar Detalles","The name \"%{name}\" is already taken":"El nombre \"%{name}\" ya está tomado","The name cannot be equal to \"..\"":"El nombre no puede ser igual a \"..\"","The name cannot be equal to \".\"":"El nombre no puede ser igual a \".\"","The name cannot contain \"/\"":"El nombre no puede contener \"/\"","The name cannot end with whitespace":"El nombre no puede terminar con un espacio en blanco","The private link has been copied to your clipboard.":"El enlace privado ha sido copiado al portapapeles","There are no resources in this folder.":"No hay recursos en esta carpeta.","this":"esto","This resource is password-protected.":"Este recurso está protegido por contraseña.","title":"titulo","Unknown Role":"Rol desconocido","Upload complete":"Subida completa","Upload failed":"Subida fallida","Upload File":"Subir archivo","Upload Folder":"Subir carpeta","Upload of a folder is not supported in Internet Explorer.":"Subir carpetas no esta soportado en Internet Explorer","Upload, edit, delete, download and preview":"Subir, editar, eliminar, descargar y previsualizar","Uploader":"Cargador","Uploading \"%{ fileName }\"":"Subiendo \"%{ fileName }\"","Uploading %{ count } item":["Subiendo %{ count } ítems","Subiendo %{ count } ítems"],"Uploading file \"%{fileName}\"":"Subiendo archivo \"%{fileName}\"","User":"Usuario","Versions":"Versiones","Via %{folderName}":"A través de %{folderName}","Viewer":"Visor","You have no permission to upload!":"No tienes permisos para subir.","You have not enough space left to upload!":"No tiene suficiente espacio para subir."},"fr":{"%{file} was restored successfully":"%{file} a été réstauré avec succès","%{file} was successfully deleted":"%{file} a été supprimé avec succès","%{name} already exists":"%{name} est déjà existant","%{owner} shared this folder with you for uploading":"%{owner} a partagé ce dossier avec vous pour uploader.","Accept":"Accepter","Actions":"Actions","Add new person by name, email or federation ID's":"Ajouter une nouvelle personne par nom, email ou par son ID de Fédération","Add people":"Ajouter des personnes ","Adding People":"Ajout des personnes ","Advanced permissions":"Permissions avancées","All deleted files were removed":"Tous les fichiers supprimés ont été retirés","All files":"Tous les fichiers","Allow creating":"Autoriser la création","Allow deleting":"Autoriser la suppression","Allow editing":"Autoriser les modifications","Allow sharing":"Autoriser le partage","An error occurred while copying %{resource}":"Une erreur est survenue lors de la copie de %{resource}","An error occurred while copying several resources":"Une erreur est survenue lors de la copie de plusieurs fichiers","An error occurred while loading the public link":"Une erreur est apparue lors du chargement du lien public","An error occurred while moving %{resource}":"Une erreur est survenue lors du déplacement de %{resource}","An error occurred while moving several resources":"Une erreur est survenue lors du déplacement de plusieurs fichiers","An error occurred while resolving the private link":"Une erreur est apparue lors de la résolution du lien privé","Are you sure you want to delete all selected resources?":"Êtes vous sûr de vouloir supprimer les ressources selectionnées?","Are you sure you want to delete all selected resources? All their content will be permanently removed. This action cannot be undone.":"Êtes-vous sûr de vouloir supprimer toutes les ressources sélectionnées ? Tout leur contenu sera définitivement supprimé. Cette action ne peut pas être annulée. ","Are you sure you want to delete this file?":"Êtes-vous sûr de vouloir supprimer \"%{file}\"?","Are you sure you want to delete this file? All it’s content will be permanently removed. This action cannot be undone.":"Êtes-vous sûr de vouloir supprimer ce fichier ? Tout son contenu sera supprimé de manière permanente. Cette action ne peut pas être annulée.","Are you sure you want to delete this folder?":"Êtes-vous sûr de vouloir supprimer ce dossier?","Are you sure you want to delete this folder? All it’s content will be permanently removed. This action cannot be undone.":"Êtes-vous sûr de vouloir supprimer ce dossier? Tout son contenu sera supprimé de manière permanente. Cette action ne peut pas être annulée.","Cancel":"Annuler","Clear selection":"Annuler la sélection","Confirm":"Confirmer","Continue":"Continuer","Contributor":"Contributeur","Copy":"Copier","Could not delete files":"Impossible de supprimer les fichiers","Create":"Créer","Create a new file":"Créer un nouveau fichier...","Create a new folder":"Créer un nouveau dossier...","Create new public link":"Créer un nouveau lien public","Creating":"Création en cours","Creating file failed…":"Echec de création de fichier...","Creating folder failed…":"Echec de création de dossier...","Creating Public Link":"Création lien public","Decline":"Décliner","Declined":"Décliné","Delete":"Supprimer","Delete file %{name}":"Supprimer le fichier %{name}","Delete folder %{name}":"Supprimer le dossier %{name}","Delete public link":"Supprimer lien public","Delete selected resource?":[" Supprimer la ressource sélectionnée?"," Supprimer les %{amount} ressources sélectionnées?"],"Deleted files":"Fichiers supprimés","Deletion of %{file} failed":"Echec de la suppression de %{file}","Do you want to create a new version?":"Voulez-vous creer une nouvelle version ?","Do you want to overwrite it?":"Voulez-vous l'écraser ?","Download":"Télécharger","Download and preview":"Téléchargé et visualiser","Download, preview and share":"Téléchargé, visualiser et partager","Drag and drop to upload content into current folder":"Glisser et déplacer pour uploader du contenu dans le dossier courant","Drop files here to upload or click to select file":"Déposer des fichiers ici pour uploader ou cliquer pour sélectionner des fichiers","Edit public link":"Editer lien public","Edit, download and preview":"Modifier, télécharger et visualiser","Edit, download, preview and share":"Modifier, téléchargé, visualiser et partager","Editor":"Éditeur","Empty trash bin":"Vider la corbeille","Enter password for public link":"Entrer le mot de passe du lien public","Error while deleting \"%{file}\"":"Erreur lors de la suppression de \"%{file}\"","Error while deleting \"%{file}\" - the file is locked":"Erreur lors de la suppression de \"%{file}\" - le fichier est verrouillé","Error while renaming \"%{file}\" to \"%{newName}\"":"Erreur lors du renommage de \"%{file}\" en \"%{newName}\"","Error while renaming \"%{file}\" to \"%{newName}\" - the file is locked":"Erreur lors du renommage de \"%{file}\" en \"%{newName}\" - le fichier est verrouillé","Error while searching.":"Erreur apparue lors de la recherche.","Error while sharing.":"Erreur apparue lors du partage.","Expiration date":"Date d'éxpiration","Favorites":"Favoris","File name":"Nom de fichier","File name cannot be empty":"Nom de fichier ne peut pas être vide","File name cannot be equal to \"..\"":"Le nom du fichier ne peut pas être \"..\"","File name cannot be equal to \".\"":"Le nom du fichier ne peut pas être \".\"","File name cannot contain \"/\"":"Le nom du fichier ne peut pas contenir \"/\"","File name cannot end with whitespace":"Le nom du fichier ne peut pas se terminer avec un espace","File upload failed…":"Échec d'upload du fichier...","Files":"Fichiers","Folder %{folder} already exists.":"Dossier %{folder} existe déjà","Folder name":"Nom de dossier","Folder name cannot be empty":"Nom de dossier ne peut pas être vide","Folder name cannot be equal to \"..\"":"Le nom du dossier ne peut pas être \"..\"","Folder name cannot be equal to \".\"":"Le nom du dossier ne peut pas être \".\"","Folder name cannot contain \"/\"":"Le nom du dossier ne peut pas contenir \"/\"","Folder name cannot end with whitespace":"Le nom du dossier ne peut pas se terminer avec un espace","Go to »All files«":"Aller à »All files« ","Group":"Groupe","Guest":" Invité","Hide Details":"Masquer les détails","Incorrect password":"Mot de passe incorrect","Links":"Liens","Loading public link…":"Chargement du lien public...","Mail recipients":"Destinataires","Move":{"Action in the files list row to initiate move of a single resource":"Déplacer","":"Déplacer"},"Move here":{"Confirm action in the location picker for move":"Déplacer ici"},"msg":"msg","Name":"Nom","New file":"Nouveau fichier","New folder":"Nouveau dossier","New folder…":"Nouveau dossier...","No public links":"Aucun lien public","No Versions available for this file":"Aucune version n'existe pour ce fichier","Only invited people can use this link.":"Seuls les personnes invités peuvent utiliser ce lien.","Open folder":{"Action in the files list row to open a folder":"Ouvrir le dossie"},"Open in browser":"Ouvrir dans le navigateur","Owner":"Propriétaire","Password":"Mot de passe","Password protected":"Protégé par mot de passe","Pending":"En attente","Permanently delete folder %{name}":" Supprimer définitivement le dossier %{name}","Permanently delete selected resource?":["Supprimer définitivement la ressource sélectionnée ?"," Supprimer définitivement les %{amount} ressources sélectionnées?"],"Person was added":"Une personne a été ajoutée","Personal note":"Note personnelle","Please, accept this share first to display available actions":"S’il vous plaît, acceptez ce partage pour afficher les actions disponibles ","Private Link":"Lien privé","Public link":"Lien public","Public link created":"Lien public créé","Public Links":"Liens publics","Recipients can upload but existing contents are not revealed.":"Destinataires peuvent uploader mais le contenu existant n'est pas visible.","Recipients can view and download contents.":"Destinataires peuvent lister et télécharger le contenu.","Recipients can view, download and upload contents.":"Destinataires peuvent lister, télécharger et uploader du contenu.","Recipients can view, download, edit, delete and upload contents.":"Destinataires peuvent lister, télécharger, modifier, supprimer et uploader du contenu.","Reload public link":"Recharger le lien public","Remote user":"Utilisateur distant","Remove expiration date":"Supprimer date d'expiration","Remove password":"Supprimer mot de passe","Rename":"Renommer","Rename file %{name}":"Renommer fichier %{name}","Rename folder %{name}":"Renommer dossier %{name}","Resharer":"Partageur","Resolving private link…":"Résolution du lien privé...","Resource not found":" Ressource introuvable ","Restoration of %{file} failed":"Échec de restauration du fichier %{file}","Restore":"Restaurer","Role":"Role","Save":"Sauvegarder","Save Share":"Enregistrer partage","Saving":"Sauvegarde en cours","Saving Public Link":"Enregistrement lien public","Saving Share":"Enregistrement partage","Send a copy to myself":"M'envoyer une copie","Set detailed permissions":"Définir des permissions détaillées","Shared with me":"Partagé avec moi","Shared with others":"Partagé avec autres","The name \"%{name}\" is already taken":"Le nom \"%{name}\" existe déjà","The name cannot be empty":"Le nom ne peut pas être vide","The name cannot be equal to \"..\"":"Le nom ne peut pas être \"..\"","The name cannot be equal to \".\"":"Le nom ne peut pas être \".\"","The name cannot contain \"/\"":"Le nom ne peut pas contenir \"/\"","The name cannot end with whitespace":"Le nom ne peut pas finir avec un espace","The private link has been copied to your clipboard.":"Le lien privé a été copié dans le presse-papier.","There are no resources in this folder.":"Il n'y a aucune ressource dans ce dossier","This resource is password-protected.":"Cette resource est protégée par mot de passe.","title":"titre","Unknown Role":"Role inconnu","Unknown type":"Type inconnu","Unmark as favorite":"Retirer des favoris","Upload complete":"Upload terminé","Upload failed":"Upload a échoué","Upload File":"Uploader un Fichier","Upload Folder":"Uploader un Dossier","Upload of a folder is not supported in Internet Explorer.":"Upload de dossier n'est pas supporté sur Internet Explorer.","Upload, edit, delete, download and preview":"Uploader, modifier, supprimer, télécharger et visualiser","Upload, edit, delete, download, preview and share":"Uploader, modifier, supprimer, télécharger, visualiser et partager","Uploader":"Uploadeur","Uploading %{ count } item":["Upload fichier \"%{fileName}\"","Upload %{ count } entrées"],"Uploading file \"%{fileName}\"":"Upload fichier \"%{fileName}\"","User":"Utilisateur","Versions":"Versions","Via %{folderName}":"Via %{folderName}","Viewer":"Visionneur","We went looking everywhere, but were unable to find the selected resource.":"Nous avons cherché partout, mais nous n’avons pas pu trouver la ressource sélectionnée.","You don't have permission to share this file.":"Vous n'avez pas la permission de partager ce fichier.","You don't have permission to share this folder.":"Vous n'avez pas la permission de partager ce dossier.","You have no permission to upload!":"Vous n'avez pas la permission d'uploader !","You have not enough space left to upload!":"Vous n'avec pas assez d'espace disponible pour uploader !"},"gl":{"(me)":"(eu)","%{ amount } selected item":["%{ amount } elemento seleccionado","%{ amount } elementos seleccionados"],"%{ amount } selected item - %{ size }":["%{ amount } elemento seleccionado - %{ size }","%{ amount } elementos seleccionados - %{ size }"],"%{count} resource could not be copied":["Non foi posíbel copiar %{count} recurso","Non foi posíbel copiar %{count} recursos"],"%{count} resource could not be moved":["Non foi posíbel mover %{count} recurso","Non foi posíbel mover %{count} recursos"],"%{file} was restored successfully":"%{file} foi restaurado satisfactoriamente","%{file} was successfully deleted":"%{file} foi eliminado satisfactoriamente","%{name} already exists":"%{name} xa existe","%{owner} shared this folder with you for uploading":"%{owner} compartiu este cartafol con vostede para envialo","Accept":"Aceptar","Accepted":"Aceptado","Actions":"Accións","Add new person by name, email or federation ID's":"Engadir unha nova persoa por nome, correo ou ID de federación","Add people":"Engadir xente","Adding People":"Engadindo xente","Additional permissions":"Permisos adicionais","Advanced permissions":"Permisos avanzados","All deleted files were removed":"Retiráronse todos os ficheiros eliminados","All files":"Todos os ficheiros","Allow creating":"Permitir crear","Allow deleting":"Permitir eliminar","Allow editing":"Permitir editar","Allow sharing":"Permitir compartir","An error occurred while copying %{resource}":"Produciuse un erro ao copiar %{resource}","An error occurred while copying several resources":"Produciuse un erro ao copiar varios recursos","An error occurred while loading the public link":"Produciuse un erro ao cargar a ligazón pública","An error occurred while moving %{resource}":"Produciuse un erro ao mover %{resource}","An error occurred while moving several resources":"Produciuse un erro ao mover varios recursos","An error occurred while resolving the private link":"Produciuse un erro ao resolver a ligazón privada","Are you sure you want to delete all selected resources?":"Confirma que quere eliminar todos os recursos seleccionados?","Are you sure you want to delete all selected resources? All their content will be permanently removed. This action cannot be undone.":" \nConfirma que quere eliminar todos os recursos seleccionados? Todo o seu contido eliminarase definitivamente. Esta acción non se pode desfacer.","Are you sure you want to delete this file?":"Confirma que quere eliminar este ficheiro?","Are you sure you want to delete this file? All it’s content will be permanently removed. This action cannot be undone.":"Confirma que quere eliminar este ficheiro? Todo o seu contido eliminarase definitivamente. Esta acción non se pode desfacer.","Are you sure you want to delete this folder?":"Confirma que quere eliminar este cartafol?","Are you sure you want to delete this folder? All it’s content will be permanently removed. This action cannot be undone.":"Confirma que quere eliminar este cartafol? Todo o seu contido eliminarase definitivamente. Esta acción non se pode desfacer.","Cancel":"Cancelar","Clear selection":"Limpar a selección","Confirm":"Confirmar","Continue":"Continuar","Contributor":"Colaborador","Copy":"Copiar","Could not delete files":"Non foi posíbel eliminar os ficheiros","Create":"Crear","Create a new file":"Crear un novo ficheiro","Create a new folder":"Crear un novo cartafol","Create and copy public link":"Crear e copiar unha ligazón pública","Create new public link":"Crear unha nova ligazón pública","Creating":"Creando","Creating file failed…":"Produciuse un fallo ao crear o ficheiro…","Creating folder failed…":"Produciuse un fallo ao crear o cartafol…","Creating Public Link":"Creando a ligazón pública","Decline":"Declinar","Declined":"Declinada","Delete":"Eliminar","Delete file %{name}":"Eliminar o ficheiro %{name}","Delete folder %{name}":"Eliminar o cartafol %{name}","Delete public link":"Eliminar ligazón pública","Delete selected resource?":["Eliminar o recurso seleccionado?","Eliminar os %{amount} recursos seleccionados?"],"Deleted files":"Ficheiros eliminados","Deletion of %{file} failed":"Produciuse un fallo ao eliminar %{file}","Do you want to create a new version?":"Quere crear unha nova versión?","Do you want to overwrite it?":"Quere sobrescribilo?","Download":"Descargar","Download and preview":"Descargar e visionar","Download, preview and share":"Descargar e visionar e compartir","Drag and drop to upload content into current folder":"Arrastre e solte para enviar contido ao cartafol actual","Drop files here to upload or click to select file":"Solte os ficheiros aquí para envialos ou prema para seleccionar ficheiro","Edit public link":"Editar ligazón pública","Edit, download and preview":"Editar, descargar e visionar","Edit, download, preview and share":"Editar, descargar e visionar e compartir","Editor":"Editor","Empty trash bin":"Cesto do lixo baleiro","Enter password for public link":"Introduza o contrasinal para a ligazón pública","Error while deleting \"%{file}\"":"Produciuse un erro ao eliminar «%{file}»","Error while deleting \"%{file}\" - the file is locked":"Produciuse un erro ao eliminar «%{file}» — o ficheiro está bloqueado","Error while renaming \"%{file}\" to \"%{newName}\"":"Produciuse un erro ao cambiar o nome de «%{file}« a «%{newName}»","Error while renaming \"%{file}\" to \"%{newName}\" - the file is locked":"Produciuse un erro ao cambiar o nome de «%{file}« a «%{newName}» — o ficheiro está bloqueado","Error while searching.":"Produciuse un erro durante a busca.","Error while sharing.":"Produciuse un erro durante a compartición.","Error while starring \"%{file}\"":"Produciuse un erro ao destacar «%{file}»","Expiration date":"Data de caducidade","Expires %{expires}":"Caduca %{expires}","Favorites":"Favoritos","File %{file} already exists":"Xa existe o ficheiro %{file}","File name":"Nome de ficheiro","File name cannot be empty":"O nome do ficheiro non pode estar baleiro","File name cannot be equal to \"..\"":"O nome do ficheiro non pode ser igual a «..»","File name cannot be equal to \".\"":"O nome do ficheiro non pode ser igual a «.»","File name cannot contain \"/\"":"O nome do ficheiro non pode conter unha «/»","File name cannot end with whitespace":"O nome do ficheiro non pode rematar cun espazo en branco","File upload failed…":"Produciuse un fallo ao enviar o ficheiro…","Files":"Ficheiros","Folder %{folder} already exists.":"Xa existe o cartafol %{folder}.","Folder name":"Nome do cartafol","Folder name cannot be empty":"O nome do cartafol non pode estar baleiro","Folder name cannot be equal to \"..\"":"O nome do cartafol non pode ser igual a «..»","Folder name cannot be equal to \".\"":"O nome do cartafol non pode ser igual a «.»","Folder name cannot contain \"/\"":"O nome do cartafol non pode conter unha «/»","Folder name cannot end with whitespace":"O nome do cartafol non pode rematar cun espazo en branco","Go to »All files«":"Ir a «Todos os ficheiros»","Group":"Grupo","Guest":"Convidado","Hide Details":"Agochar os detalles","Incorrect password":"Contrasinal incorrecta","Links":"Ligazóns","Loading public link…":"Cargando a ligazón pública…","Mail recipients":"Destinatarios de correo","Mark as favorite":"Marca como favorito","Move":{"Action in the files list row to initiate move of a single resource":"Mover","":"Mover"},"Move here":{"Confirm action in the location picker for move":"Mover aquí"},"msg":"msx","Multiple files already exists":"Xa existen varios ficheiros","Name":"Nome","Navigate to the parent":"Navegar ata o pai","New":"Novo","New file":"Novo ficheiro","New folder":"Novo cartafol","New folder…":"Novo cartafol…","No public links":"Non hai ligazóns públicas","No Versions available for this file":"Non hai versións dispoñíbeis para este ficheiro","Only invited people can use this link.":"Só as persoas convidadas poden usar esta ligazón.","Open folder":{"Action in the files list row to open a folder":"Abrir cartafol"},"Open in browser":"Abrir no navegador","Overwrite":"Sobreescribir","Owner":"Propietario","Password":"Contrasinal","Password protected":"Protexido por contrasinal","Paste here":{"Confirm action in the location picker for copy":"Pegar aquí"},"Pending":"Pendente","People":"Xente","Permanently delete file %{name}":"Eliminar de xeito permanente o ficheiro %{name}","Permanently delete folder %{name}":"Eliminar de xeito permanente o cartafol %{name}","Permanently delete selected resource?":["Eliminar de xeito permanente o recurso seleccionado?","Eliminar de xeito permanente os %{amount} recursos seleccionados?"],"Person was added":"Engadiuse a persoa","Personal note":"Nota persoal","Please, accept this share first to display available actions":"Acepte primeiro esta compartición para amosar as accións dispoñíbeis","Private Link":"Ligazón privada","Public link":"Ligazón pública","Public link created":"Creouse unha ligazón pública","Public link has been successfully created and copied into your clipboard.":"A ligazón pública foi creada e copiada satispactoriamente no portapapeis.","Public Links":"Ligazóns públicas","Recipients can upload but existing contents are not revealed.":"Os destinatarios poden enviar, mais non se revelan os contidos existentes.","Recipients can view and download contents.":"Os destinatarios poden ver e descargar contidos.","Recipients can view, download and upload contents.":"Os destinatarios poden ver, descargar e enviar contidos.","Recipients can view, download, edit, delete and upload contents.":"Os destinatarios poden ver, descargar, editar, eliminar e enviar contidos.","Reload public link":"Volvendo cargar a ligazón pública","Remote user":"Usuario remoto","Remove expiration date":"Retirar a data de caducidade","Remove password":"Retirar o contrasinal","Rename":"Renomear","Rename file %{name}":"Renomear o ficheiro %{name}","Rename folder %{name}":"Renomear o cartafol %{name}","Resharer":"Volver compartir","Resolving private link…":"Resolvendo a ligazón privada…","Resource not found":"Non se atopou o recurso","Resource with name %{name} already exists":"Xa existe o frecurso nome %{name}","Restoration of %{file} failed":"Produciuse un fallo ao restaurar %{file}","Restore":"Restaurar","Role":"Rol","Save":"Gardar","Save Share":"Gardar a compartición","Saving":"Gardando","Saving Public Link":"Gardando ligazón pública","Saving Share":"Gardando compartición","Send a copy to myself":"Envíame unha copia","Set detailed permissions":"Estabelecer os permisos detallados","Share":"Compartir","Shared by %{resharer}":"Compartido por %{resharer}","Shared with me":"Compartido comigo","Shared with others":"Compartido con outros","Show Details":"Amosar os detalles","The name \"%{name}\" is already taken":"O nome «%{name}» xa está ocupado","The name cannot be empty":"O nome non pode estar baleiro","The name cannot be equal to \"..\"":"O nome non pode ser igual a «..»","The name cannot be equal to \".\"":"O nome non pode ser igual a «.»","The name cannot contain \"/\"":"O nome non pode conter unha «/»","The name cannot end with whitespace":"O nome non pode rematar cun espazo en branco","The private link has been copied to your clipboard.":"A ligazón privada foi copiada no portapapeis.","There are no resources in this folder.":"Non hai recursos neste cartafol.","this":"este","This resource is password-protected.":"Este recurso está protexido por contrasinal.","title":"título","Unknown Role":"Rol descoñecido","Unknown type":"Tipo descoñecido","Unmark as favorite":"Retirar a marca de favorito","Upload complete":"Envío completado","Upload failed":"Produciuse un fallo no envío","Upload File":"Enviar ficheiro","Upload Folder":"Enviar cartafol","Upload of a folder is not supported in Internet Explorer.":"O envío dun cartafol non é compatíbel co Internet Explorer.","Upload, edit, delete, download and preview":"Enviar, editar, eliminar, descargar e visionar","Upload, edit, delete, download, preview and share":"Enviar, editar, eliminar, descargar visionar e compartir","Uploader":"Xestor de envíos","Uploading \"%{ fileName }\"":"Enviando «%{ fileName }»","Uploading %{ count } item":["Enviando %{ count } elemento","Enviando %{ count } elementos"],"Uploading file \"%{fileName}\"":"Enviando o ficheiro «%{fileName}»","User":"Usuario","Versions":"Versións","Via %{folderName}":"Mediante %{folderName}","Viewer":"Visor","We went looking everywhere, but were unable to find the selected resource.":"Buscamos por todas partes, mais non puidemos atopar o recurso seleccionado.","You don't have permission to share this file.":"Non ten permiso para compartir este ficheiro.","You don't have permission to share this folder.":"Non ten permiso para compartir este cartafol.","You have no permission to upload!":"Non ten permiso para facer envíos!","You have not enough space left to upload!":"Non dispón de espazo abondo para facer un envío!"},"it":{}} \ No newline at end of file +{"cs":{"%{file} was successfully deleted":"%{file} byl úspěšně odstraněn","%{name} already exists":"%{name} již existuje","Accept":"Přijmout","Accepted":"Přijato","Actions":"Akce","Add people":"Přidat lidi","Adding People":"Přidávání lidí","Advanced permissions":"Pokročilá oprávnění","All files":"Všechny soubory","Allow creating":"Povolit vytváření","Allow deleting":"Povolit mazání","Allow editing":"Povolit úpravy","An error occurred while loading the public link":"Při načítání veřejného odkazu došlo k chybě","An error occurred while resolving the private link":"Při načítání odkazu nastala chyba","Cancel":"Zrušit","Confirm":"Potvrdit","Continue":"Pokračovat","Contributor":"Přispěvatel","Copy":"Kopírovat","Create":"Vytvořit","Creating file failed…":"Vytváření souboru selhalo...","Creating folder failed…":"Vytváření složky selhalo...","Decline":"Odmítnout","Declined":"Odmítnuto","Delete":"Odstranit","Delete public link":"Smazat veřejný odkaz","Deletion of %{file} failed":"Odstranění %{file} selhalo","Do you want to overwrite it?":"Opravdu si přejete přepsat tento soubor?","Download":"Stáhnout","Download and preview":"Stáhnout a zobrazit","Drag and drop to upload content into current folder":"Přetáhněte soubor, abyste ho nahráli do aktuální složky","Drop files here to upload or click to select file":"Sem přetáhněte soubory, které chcete nahrát, nebo kliknutím vyberte soubor","Edit public link":"Upravit veřejný odkaz","Edit, download and preview":"Upravit, stáhnout a zobrazit","Editor":"Editor","Error while deleting \"%{file}\"":"Chyba při odstraňování \"%{file}\"","Error while deleting \"%{file}\" - the file is locked":"Chyba při odstraňování \"%{file}\" - tento soubor je zamčený","Error while renaming \"%{file}\" to \"%{newName}\" - the file is locked":"Chyba při přejmenování \"%{file}\" na \"%{newName}\" - tento soubor je zamčený","Error while sharing.":"Sdílení selhalo.","Expiration date":"Datum vypršení","Favorites":"Oblíbené","File name":"Název souboru","File name cannot be empty":"Jméno souboru nemůže být prázdné","File name cannot be equal to \"..\"":"Název souboru nemůže být \"..\"","File name cannot be equal to \".\"":"Název souboru nemůže být \".\"","File name cannot contain \"/\"":"Název souboru nemůže obsahovat \"/\"","File name cannot end with whitespace":"Název souboru nemůže končit mezerou","File upload failed…":"Nahrávání souboru selhalo...","Files":"Soubory","Folder %{folder} already exists.":"Složka s názvem %{folder} již existuje","Folder name":"Jméno složky","Folder name cannot be empty":"Jméno složky nemůže být prázdný","Folder name cannot be equal to \"..\"":"Název složky nemůže být \"..\"","Folder name cannot be equal to \".\"":"Název složky nemůže být \".\"","Folder name cannot contain \"/\"":"Název složky nemůže obsahovat \"/\"","Folder name cannot end with whitespace":"Název složky nemůže končit mezerou","Group":"Skupina","Links":"Odkazy","Loading public link…":"Načítání veřejného odkazu...","Mail recipients":"Příjemci pošty","Move":{"Action in the files list row to initiate move of a single resource":"Přesunout","":"Přesunout"},"Move here":{"Confirm action in the location picker for move":"Přesunout sem"},"Name":"Název","New":"Nový","New file":"Nový soubor","New folder":"Nová složka","No Versions available for this file":"Pro tento soubor nejsou dostupné žádné verze","Overwrite":"Přepsat","Owner":"Vlastník","Password":"Heslo","Pending":"Čekající","Personal note":"Soukromá poznámka","Public link":"Veřejný odkaz","Public Links":"Veřejné odkazy","Recipients can view and download contents.":"Příjemci mohou prohlížet a stahovat obsah.","Recipients can view, download and upload contents.":"Příjemci mohou prohlížet, stahovat a nahrávat obsah.","Recipients can view, download, edit, delete and upload contents.":"Příjemci mohou prohlížet, stahovat, upravovat, mazat a nahrávat obsah.","Remove password":"Odstranit heslo","Rename":"Přejmenovat","Rename file %{name}":"Přejmenovat soubor %{name}","Rename folder %{name}":"Přejmenovat složku %{name}","Resolving private link…":"Načítání soukromého odkazu...","Restoration of %{file} failed":"Obnovení %{file} selhalo","Restore":"Obnovit","Role":"Role","Save":"Uložit","Send a copy to myself":"Pošlete mi kopii","Set detailed permissions":"Nastavit podrobná oprávnění","Share":"Sdílet","Shared with me":"Sdíleno se mnou","Show Details":"Zobrazit detaily","The name \"%{name}\" is already taken":"Jméno \"%{name}\" je již obsazeno","The name cannot be equal to \"..\"":"Název nemůže být \"..\"","The name cannot be equal to \".\"":"Název nemůže být \".\"","The name cannot contain \"/\"":"Název nemůže obsahovat \"/\"","The name cannot end with whitespace":"Název nemůže končit mezerou","The private link has been copied to your clipboard.":"Soukromý odkaz byl úspěšně zkopírován","This resource is password-protected.":"Tento zdroj je chráněný heslem.","title":"název","Upload complete":"Nahrávání dokončeno","Upload failed":"Nahrávání selhalo","Upload File":"Nahrát soubor","Upload Folder":"Nahrát složku","Upload of a folder is not supported in Internet Explorer.":"Nahrávání složky není v aplikaci Internet Explorer podporováno.","Upload, edit, delete, download and preview":"Nahrát, upravit, smazat, stáhnout a zobrazit","Uploader":"Nahrál","User":"Uživatel","Versions":"Verze","Viewer":"Divák","You have no permission to upload!":"Nemáte oprávnění nahrávat soubory.","You have not enough space left to upload!":"Nemáte dostatek místa pro nahrátí."},"de":{"(me)":"(ich)","(Opens in new window)":"(Öffnet in neuem Fenster)","%{ amount } item selected. Actions are available above the table.":["%{ amount } Element ausgewählt. Aktionen sind oberhalb der Tabelle verfügbar.","%{ amount } Elemente ausgewählt. Aktionen sind oberhalb der Tabelle verfügbar."],"%{ amount } selected item":["%{ amount } ausgewähltes Element","%{ amount } ausgewählte Elemente"],"%{ amount } selected item - %{ size }":["%{ amount } ausgewähltes Element - %{ size }","%{ amount } ausgewählte Elemente - %{ size }"],"%{ filesCount } file":["%{ filesCount } Datei","%{ filesCount } Dateien"],"%{ foldersCount } folder":["%{ foldersCount } Ordner","%{ foldersCount } Ordner"],"%{ itemsCount } item in total (%{ filesStr}, %{foldersStr})":["%{ itemsCount } Datei insgesamt (%{ filesStr}, %{foldersStr})","%{ itemsCount } Elemente insgesamt (%{ filesStr}, %{foldersStr})"],"%{ itemsCount } item with %{ itemSize } in total (%{ filesStr}, %{foldersStr})":["%{ itemsCount } Element mit %{ itemSize } insgesamt (%{ filesStr}, %{foldersStr})","%{ itemsCount } Elemente mit %{ itemSize } insgesamt (%{ filesStr}, %{foldersStr})"],"%{count} resource could not be copied":["%{count} Ressource konnte nicht kopiert werden","%{count} Dateien konnten nicht kopiert werden"],"%{count} resource could not be moved":["%{count} Ressource konnte nicht verschoben werden","%{count} Dateien konnten nicht verschoben werden"],"%{file} was restored successfully":"%{file} wurde erfolgreich wiederhergestellt","%{file} was successfully deleted":"%{file} wurde erfolgreich gelöscht","%{name} already exists":"%{name} existiert bereits","%{owner} shared this folder with you for uploading":"%{owner} hat diesen Ordner zum Upload geteilt.","%{resource} was restored successfully":"%{resource} erfolgreich wiederhergestellt","Accept":"Annehmen","Accept share":"Freigabe annehmen","Accepted":"Angenommen","action":"Aktion","Actions":"Aktionen","Add files or folders":"Dateien oder Ordner hinzufügen","Add new person by name, email or federation IDs":"Neue Person per Name, Email oder Federation-ID hinzufügen","Add people":"Personen hinzufügen","Add to favorites":"Zu Favoriten hinzufügen","Adding People":"Personen werden hinzugefügt","Additional permissions":"Zusätzliche Rechte","Advanced permissions":"Zusätzliche Rechte","All":"Alle","All Actions":"Alle Interaktionen","All deleted files were removed":"Alle gelöschten Dateien wurden entfernt","All files":"Alle Dateien","Allow creating":"Erstellen erlauben","Allow deleting":"Löschen erlauben","Allow editing":"Editieren erlauben","Allow sharing":"Teilen erlauben","An error occurred while copying %{resource}":"Beim Kopieren von %{resource} ist ein Fehler aufgetreten","An error occurred while copying several resources":"Beim Kopieren von mehreren Dateien ist ein Fehler aufgetreten","An error occurred while loading the public link":"Beim Laden des öffentlichen Links ist ein Fehler aufgetreten","An error occurred while moving %{resource}":"Beim Verschieben von %{resource} ist ein Fehler aufgetreten","An error occurred while moving several resources":"Beim Verschieben von mehreren Dateien ist ein Fehler aufgetreten","An error occurred while resolving the private link":"Beim Auflösen des privaten Links ist ein Fehler aufgetreten.","Any external person with the respective link can access this resource. No sign-in\n required. Assign a password to avoid unintended document exposure.":"Externe Personen mit einem Link können auf diese Datei oder diesen Ordner zugreifen. Ein Login ist nicht erforderlich. Um unbeabsichtigte Zugriffe zu verhindern, sollte ein Passwort vergeben werden.","Are you sure you want to delete all selected resources?":"Sollen die gewählten Dateien wirklich gelöscht werden?","Are you sure you want to delete all selected resources? All their content will be permanently removed. This action cannot be undone.":"Sollen die gewählten Dateien wirklich gelöscht werden? Der gesamte Inhalt wird endgültig gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.","Are you sure you want to delete this file?":"Soll diese Datei wirklich gelöscht werden?","Are you sure you want to delete this file? All it’s content will be permanently removed. This action cannot be undone.":"Soll diese Datei wirklich gelöscht werden? Der gesamte Inhalt wird endgültig gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.","Are you sure you want to delete this folder?":"Soll dieser Ordner wirklich gelöscht werden?","Are you sure you want to delete this folder? All it’s content will be permanently removed. This action cannot be undone.":"Soll dieser Ordner wirklich gelöscht werden? Der gesamte Inhalt wird endgültig gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.","Are you sure you want to delete this link? Recreating the same link again is not possible.":"Soll der ausgewählte Link wirklich gelöscht werden? Derselbe Link kann danach nicht wieder erzeugt werden.","Back to %{panel} panel":"Zurück zum %{panel} Panel","Cancel":"Abbrechen","Clear selection":"Auswahl aufheben","Click row to toggle upload progress details":"Zeile anklicken für Uploaddetails","Click to mark this file as favorite":"Klicken Sie um diese Datei als Favorit zu markieren.","Click to remove this file from your favorites":"Klicken Sie um diese Datei als Favorit abzuwählen.","Close file sidebar":"Seitenleiste schließen","Confirm":"Bestätigen","Continue":"Weiter","Contributor":"Mitarbeiter","Copy":"Kopieren","Copy into »%{ target }«":"Nach »%{ target }« kopieren","Copy link to clipboard":"Link in die Zwischenablage kopieren","Copy private link to clipboard":"Privaten Link in die Zwischenablage kopieren","Could not delete files":"Dateien konnten nicht gelöscht werden","Create":"Erstellen","Create & copy public link":"Öffentlichen Link erzeugen & kopieren","Create a new file":"Neue Datei erstellen","Create a new folder":"Neuen Ordner erstellen","Create and copy public link":"Öffentlichen Link erstellen und kopieren","Create new public link":"Neuen öffentlichen Link erstellen","Creating":"Erstelle","Creating file failed…":"Erstellen der Datei fehlgeschlagen…","Creating folder failed…":"Erstellen des Ordners fehlgeschlagen…","Creating Public Link":"Erstelle den öffentlichen Link","Decline":"Ablehnen","Decline share":"Freigabe ablehnen","Declined":"Abgelehnt","Delete":"Löschen","Delete file %{name}":"Datei %{name} löschen","Delete folder %{name}":"Ordner %{name} löschen","Delete public link":"Lösche den öffentlichen Link","Delete selected resource?":["Ausgewählte Ressource löschen?","%{amount} ausgewählte Dateien löschen?"],"Delete share with %{ currentCollaborator }":"%{ currentCollaborator } die Freigabe entziehen","Deleted files":"Gelöschte Dateien","Deletion of %{file} failed":"Löschen von %{file} ist fehlgeschlagen","Deselect %{name}":"Auswahl für %{name} aufheben","Details":"Details","Display customization options of the files list":"Anpassungsoptionen für die Dateienliste anzeigen","Do you want to create a new version?":"Soll eine neue Version erstellt werden?","Do you want to overwrite it?":"Soll es überschrieben werden?","Download":"Herunterladen","Download and preview":"Herunterladen und Vorschau","Download older version":"Ältere Version herunterladen","Download, preview and share":"Herunterladen, Vorschau und Teilen","Drag and drop to upload content into current folder":"Ziehen Sie Inhalte per Drag & Drop in den aktuellen Ordner","Drag files and folders here or use the \"+ New\" button to upload":"Dateien und Ordner hierher ziehen oder den \"+Neu\"-Button zum Hochladen nutzen","Drop files here to upload or click to select file":"Dateien hier fallenlassen oder anklicken zum Selektieren","Edit public link":"Bearbeite öffentlichen Link","Edit share with %{ currentCollaborator }":"Freigabe für %{ currentCollaborator } bearbeiten","Edit, download and preview":"Bearbeiten, Herunterladen und Vorschau","Edit, download, preview and share":"Bearbeiten, Herunterladen, Vorschau und Teilen","Editing share with %{ currentCollaborator }":"Freigabe für %{ currentCollaborator } bearbeiten","Editor":"Editor","Empty trash bin":"Papierkorb leeren","Enter password for public link":"Passworteingabe für öffentlichen Link","Error while accepting the selected share.":["Fehler beim Annehmen der ausgewählten Freigabe.","Fehler beim Annehmen der ausgewählten Freigaben."],"Error while declining the selected share.":["Fehler beim Ablehnen der ausgewählten Freigabe.","Fehler beim Ablehnen der ausgewählten Freigaben."],"Error while deleting \"%{file}\"":"Fehler beim Löschen von \"%{file}\"","Error while deleting \"%{file}\" - the file is locked":"Fehler beim Löschen von \"%{file}\" - Datei ist gesperrt","Error while renaming \"%{file}\" to \"%{newName}\"":"Fehler beim Umbennen von \"%{file}\" zu \"%{newName}\"","Error while renaming \"%{file}\" to \"%{newName}\" - the file is locked":"Fehler beim Umbennen von \"%{file}\" zu \"%{newName}\" - Datei ist gesperrt","Error while sharing.":"Fehler beim Teilen.","Error while starring \"%{file}\"":"Fehler beim hinzufügen von \"%{file}\" zu den Favoriten","Expiration date":"Ablaufdatum","Expiration date (required)":"Verfallsdatum (erforderlich)","Expires %{expires}":"Läuft ab: %{expires}","Favorite files":"Favorisierte Dateien","Favorites":"Favoriten","File %{file} already exists":"Datei %{file} bereits vorhanden","File name":"Dateiname","File name cannot be empty":"Der Dateiname darf nicht leer sein.","File name cannot be equal to \"..\"":"Der Dateiname darf nicht \"..\" sein.","File name cannot be equal to \".\"":"Der Dateiname darf nicht \".\" sein.","File name cannot contain \"/\"":"Der Dateiname darf kein \"/\" enthalten.","File name cannot end with whitespace":"Der Dateiname darf nicht mit einem Leerzeichen enden.","File owner":"Besitzer","File upload failed…":"Datei konnte nicht hochgeladen werden…","Files":"Dateien","Files shared via link":"Per Link geteilte Dateien","Files shared with me":"Mit mir geteilte Dateien","Files shared with others":"Mit anderen geteilten Dateien","Folder %{folder} already exists.":"Der Ordner %{folder} existiert bereits..","Folder name":"Ordnername","Folder name cannot be empty":"Der Ordnername darf nicht leer sein.","Folder name cannot be equal to \"..\"":"Der Ordnername darf nicht \"..\" sein.","Folder name cannot be equal to \".\"":"Der Ordnername darf nicht \".\" sein.","Folder name cannot contain \"/\"":"Der Ordnername darf kein \"/\" enthalten.","Folder name cannot end with whitespace":"Der Ordnername darf nicht mit einem Leerzeichen enden.","Go to »All files«":"Gehe zu \"Alle Dateien\"","Group":"Gruppe","Guest":"Gast","Guest user":"Gastnutzer","Hide Details":"Details verstecken","Incorrect password":"Falsches Kennwort","Invite":"Einladen","Items per page":"Dateien pro Seite","Last modified:":"Zuletzt bearbeitet:","Links":"Links","Loading list of file links":"Lade Dateilinks","Loading people list":"Lade Personen","Loading public link…":"Lade öffentlichen Link…","Mail recipients":"E-Mail Empfänger","Move":{"Action in the files list row to initiate move of a single resource":"Verschieben","":"Verschieben"},"Move here":{"Confirm action in the location picker for move":"Hierher verschieben"},"Move into »%{ target }«":"Nach »%{ target }« verschieben","msg":"Nachricht","Multiple files already exists":"Mehrere Dateien bereits vorhanden","Name":"Name","Navigate into the desired folder and copy selected resources into it.\n You can navigate into a folder by clicking on its name.\n To navigate back, you can click on the breadcrumbs.\n Resources will be copied into the folder where you are currently located.":"Navigieren Sie in den gewünschten Ordner und kopieren Sie die ausgewählten Datei dorthin.\nSie können in einen Ordner navigieren, indem Sie auf seinen Namen klicken.\nUm zurück zu navigieren, können Sie auf die Brotkrümelnavigation klicken.\nDie Dateien werden in den Ordner kopiert, in dem Sie sich gerade befinden.","Navigate into the desired folder and move selected resources into it.\n You can navigate into a folder by clicking on its name.\n To navigate back, you can click on the breadcrumbs.\n Resources will be moved into the folder where you are currently located.":"Navigieren Sie in den gewünschten Ordner und kopieren Sie die ausgewählten Datei dorthin.\nSie können in einen Ordner navigieren, indem Sie auf seinen Namen klicken.\nUm zurück zu navigieren, können Sie auf die Brotkrümelnavigation klicken.\nDie Dateien werden in den Ordner kopiert, in dem Sie sich gerade befinden.","Navigate to the parent":"Zum übergeordneten Ordner wechseln","New":"Neu","New file":"Neue Datei","New folder":"Neuer Ordner","New folder…":"Neuer Ordner…","No information to display":"Keine Informationen anzeigbar","No items selected.":"Keine Elemente ausgewählt.","No matching role found":"Keine passende Rolle gefunden","No public links":"Keine öffentlichen Links","No resource found":"Keine Dateien gefunden","No search term entered":"Kein Suchbegriff eingegeben","No users or groups found.":"Keine Benutzer oder Gruppen gefunden.","No Versions available for this file":"Für diese Datei sind keine Versionen verfügbar. ","Only invited people can use this link.":"Nur eingeladene Personen können diesen Link öffnen.","Open folder":{"Action in the files list row to open a folder":"Ordner öffnen"},"Open in %{app}":"In %{app} öffnen","Open in browser":"Im Browser öffnen","Overview of the information about the selected file":"Übersicht der Informationen für die ausgewählte Datei","Overwrite":"Überschreiben","Owner":"Besitzer","Owner:":"Besitzer:","Password":"Passwort","Password (required)":"Passwort (erforderlich)","Password protected":"Geschützt durch Passwort","Paste here":{"Confirm action in the location picker for copy":"Hier einfügen"},"Pending":"Ausstehend","People":"Personen","Permanently delete file %{name}":"Datei %{name} endgültig löschen?","Permanently delete folder %{name}":"Ordner %{name} endgültig löschen?","Permanently delete selected resource?":["Ausgewählte Ressource endgültig löschen?","%{amount} ausgewählte Dateien endgültig löschen?"],"Person was added":"Person hinzugefügt","Personal note":"Persönliche Notiz","Please, accept this share first to display available actions":"Um die verfügbaren Aktionen anzuzeigen, muss diese Freigabe zuerst akzeptiert werden.","Private Link":"Privater Link","Private link copied":"Privater Link kopiert","Public file upload":"Öffentlicher Datei-Upload","Public files":"Öffentliche Dateien","Public link":"Öffentlicher Link","Public link copied":"Öffentlicher Link kopiert","Public link created":"Öffentlicher Link erstellt","Public link has been successfully created and copied into your clipboard.":"Der öffentliche Link wurde erfolgreich erstellt und in die Zwischenablage kopiert.","Public link was successfully deleted":"Der öffentliche Link wurde erfolgreich gelöscht","Public Links":"Öffentliche Links","Recipients can upload but existing contents are not revealed.":"Empfänger können hochladen, aber existierende Inhalte werden nicht angezeigt.","Recipients can view and download contents.":"Empfänger können Inhalte sehen und herunterladen.","Recipients can view, download and upload contents.":"Empfänger können Inhalte sehen, herunterladen und hochladen.","Recipients can view, download, edit, delete and upload contents.":"Empfänger können Inhalte sehen, herunterladen, hochladen, editieren und löschen.","Reload public link":"Öffentlichen Link neu laden","Remote user":"Remote-Benutzer","Remove expiration date":"Entferne Ablaufdatum","Remove from favorites":"Von Favoriten entfernen","Remove password":"Entferne Passwort","Removing person":"Entferne Person","Removing public link":"Entferne öffentlichen Link","Rename":"Umbenennen","Rename file %{name}":"Datei %{name} umbenennen","Rename folder %{name}":"Ordner %{name} umbenennen","Resharer":"Weiter-Verteiler","Resolving private link":"Privater Link wird aufgelöst","Resolving private link…":"Auflösen des privaten Links…","Resolving public link":"Öffentlicher Link wird aufgelöst","Resource not found":"Datei nicht gefunden","Resource with name %{name} already exists":"Datei oder Ordner mit dem Namen %{name} ist bereits vorhanden","Restoration of %{file} failed":"Wiederherstellen von %{fileName} ist fehlgeschlagen.","Restoration of %{resource} failed":"%{resource} konnte nicht wiederhergestellt werden","Restore":"Wiederherstellen","Restore older version":"Ältere Version wiederherstellen","Role":"Rolle","Save":"Speichern","Save Share":"Freigabe speichern","Saving":"Speichern","Saving Public Link":"Speichere den öffentlichen Link","Saving Share":"Speichere Freigabe","See all versions":"Alle Versionen ansehen","Send a copy to myself":"Eine Kopie an mich schicken","Set detailed permissions":"Detaillierte Rechte festlegen","Share":"Teilen","Share receivers":"Empfänger der Freigabe","Shared by":"Geteilt von","Shared by %{resharer}":"Geteilt von %{resharer}","Shared via link":"Per Link geteilt","Shared with me":"Mit mir geteilt","Shared with others":"Mit anderen geteilt","Shared:":"Geteilt:","Show Details":"Details ansehen","Show hidden files":"Versteckte Dateien anzeigen","Show invited people":"Zeige eingeladene Personen","Show links":"Zeige Links","Size:":"Größe:","Tags":"Schlagwörter","The name \"%{name}\" is already taken":"Der Name \"%{name}\" ist bereits vergeben","The name cannot be empty":"Der Name darf nicht leer sein","The name cannot be equal to \"..\"":"Der Name darf nicht \"..\" sein.","The name cannot be equal to \".\"":"Der Name darf nicht \".\" sein.","The name cannot contain \"/\"":"Der Name darf kein \"/\" enthalten.","The name cannot end with whitespace":"Der Name darf nicht mit einem Leerzeichen enden","The private link has been copied to your clipboard.":"Der private Link wurde in die Zwichenablage kopiert.","The public link \"%{linkName}\" has been copied to your clipboard.":"Der öffentliche Link \"%{linkName}\" wurde in die Zwischenablage kopiert.","There are no resources in this folder":"Dieser Ordner hat keinen Inhalt","There are no resources in this folder.":"Dieser Ordner hat keinen Inhalt.","There are no resources marked as favorite":"Nichts zum favorisieren ausgewählt","There are no resources with a public link at the moment":"Aktuell gibt es keine Dateien mit öffentlichen Links","this":"dies","This file has been shared.":"Diese Datei wurde geteilt.","This folder contains %{ itemCount } item.":["Dieser Ordner enthält %{ itemCount } Element.","Dieser Ordner enthält %{ itemCount } Elemente."],"This folder has been shared.":"Dieser Ordner wurde geteilt.","This folder has no content.":"Dieser Ordner ist leer.","This item is directly shared via links.":"Dieses Element wurde direkt über Links geteilt.","This item is directly shared with others.":"Dieses Element wurde direkt mit anderen Personen geteilt.","This item is shared via links through one of the parent folders.":"Dieses Element wurde durch einen übergeordneten Ordner über Links geteilt.","This item is shared with others through one of the parent folders.":"Dieses Element wurde durch einen übergeordneten Ordner mit anderen Personen geteilt.","This resource is password-protected.":"Diese Datei ist passwortgeschützt.","title":"Titel","Unknown Role":"Unbekannte Rolle","Unknown type":"Unbekannter Typ","Upload complete":"Hochladen abgeschlossen","Upload failed":"Hochladen fehlgeschlagen","Upload File":"Datei hochladen","Upload Folder":"Ordner hochladen","Upload of a folder is not supported in Internet Explorer.":"Das Hochladen eines Ordners wird im Internet Explorer nicht unterstützt.","Upload, edit, delete, download and preview":"Hochladen, Bearbeiten, Löschen, Herunterladen und Vorschau","Upload, edit, delete, download, preview and share":"Hochladen, Bearbeiten, Löschen, Herunterladen, Vorschau und Teilen","Uploader":"Nur hochladen","Uploading \"%{ fileName }\"":"Hochladen \"%{ fileName }\"","Uploading %{ count } item":["Hochladen von %{ count } Element","Hochladen von %{ count } Elementen"],"Uploading file \"%{fileName}\"":"Lade Datei \"%{ fileName }\" hoch","User":"Benutzer","Versions":"Versionen","Versions:":"Versionen:","Via %{folderName}":"Durch %{folderName}","View":"Ansicht","Viewer":"Betrachter","We went looking everywhere, but were unable to find the selected resource.":"Wir haben überall gesucht, konnten die ausgewählte Datei aber nicht finden.","You are currently not collaborating on any of your resources with other people":"Es sind keine Inhalte mit anderen Personen zur Zusammenarbeit geteilt","You are currently not collaborating on other people's resources":"Es gibt keine Einladungen zur Zusammenarbeit für Inhalte anderer Personen","You are the file owner":"Sie sind der Besitzer","You don't have permission to share this file.":"Keine Berechtigung diese Datei zu teilen.","You don't have permission to share this folder.":"Keine Berechtigung diesen Ordner zu teilen.","You have no deleted files":"Keine gelöschte Dateien","You have no permission to upload!":"Sie haben keine Berechtigung zum Hochladen!","You have not enough space left to upload!":"Sie haben zum Hochladen nicht genügend Speicherplatz zur Verfügung."},"es":{"(me)":"(yo)","%{ amount } selected item":["%{ amount } elemento seleccionado","%{ amount } elementos seleccionados"],"%{file} was restored successfully":"%{file} fue restaurado con éxito","%{file} was successfully deleted":"%{file} fue eliminado exitosamente","%{name} already exists":"%{name} ya existe","%{owner} shared this folder with you for uploading":"%{owner} compartió esta carpeta con usted para subir archivos.","Accept":"Aceptar","Actions":"Acciones","Advanced permissions":"Permisos avanzados","All files":"Todos los archivos","Allow creating":"Permitir crear","Allow deleting":"Permitir eliminar","Allow editing":"Permitir editar","An error occurred while loading the public link":"Se ha producido un error al cargar el enlace público","An error occurred while resolving the private link":"Un error ocurrió resolviendo el enlace privado ","Cancel":"Cancelar","Continue":"Continuar","Contributor":"Colaborador","Create":"Crear","Creating":"Creando","Creating file failed…":"Falló la creación de archivo...","Creating folder failed…":"Falló la creación de la carpeta...","Creating Public Link":"Creando Enlace Público","Decline":"Rechazar","Declined":"Rechazado","Delete":"Eliminar","Delete public link":"Eliminar enlace público","Deleted files":"Archivos borrados","Deletion of %{file} failed":"Borrado de %{file} falló","Do you want to create a new version?":"¿Quieres crear una nueva versión?","Do you want to overwrite it?":"¿Quieres sobreescribirlo?","Download":"Descargar","Download and preview":"Descargar y previsualizar","Drag and drop to upload content into current folder":"Arrastre y suelte para subir contenido a la carpeta actual","Drop files here to upload or click to select file":"Arrastra archivos aquí o haz clic para seleccionar un archivo","Edit public link":"Editar enlace público","Edit, download and preview":"Editar, descargar y previsualizar","Editor":"Editor","Empty trash bin":"Vaciar papelera","Error while deleting \"%{file}\"":"Error al eliminar \"%{file}\"","Error while deleting \"%{file}\" - the file is locked":"Error al eliminar \"%{file}\" - el archivo está bloqueado","Error while renaming \"%{file}\" to \"%{newName}\"":"Error al renombrar \"%{file}\" a \"%{newName}\"","Error while renaming \"%{file}\" to \"%{newName}\" - the file is locked":"Error al renombrar \"%{file}\" a \"%{newName}\" - el archivo está bloqueado","Error while sharing.":"Error al compartir","Expiration date":"Fecha de expiración","Expires %{expires}":"Expira %{expires}","Favorites":"Favoritos","File name":"Nombre de archivo","File name cannot be empty":"El nombre de archivo no puede ser vacío","File name cannot be equal to \"..\"":"El nombre de archivo no puede ser igual a \"..\"","File name cannot be equal to \".\"":"El nombre de archivo no puede ser igual a \".\"","File name cannot contain \"/\"":"El nombre del archivo no puede contener \"/\"","File name cannot end with whitespace":"El nombre del archivo no puede terminar con un espacio en blanco","File upload failed…":"La subida del archivo falló...","Files":"Archivos","Folder %{folder} already exists.":"La carpeta %{folder} ya existe.","Folder name":"Nombre de carpeta","Folder name cannot be empty":"El nombre de carpeta no puede ser vacío","Folder name cannot be equal to \"..\"":"El nombre de carpeta no puede ser igual a \"..\"","Folder name cannot be equal to \".\"":"El nombre de carpeta no puede ser igual a \".\"","Folder name cannot contain \"/\"":"El nombre de la carpeta no puede contener \"/\"","Folder name cannot end with whitespace":"El nombre de la carpeta no puede terminar con un espacio en blanco","Group":"Grupo","Hide Details":"Ocultar Detalles","Links":"Enlaces","Loading public link…":"Cargando enlace público...","Mail recipients":"Destinatarios de correo","msg":"msg","Name":"Nombre","New file":"Nuevo archivo","New folder":"Nueva carpeta","New folder…":"Nueva carpeta...","No public links":"Ningún enlace público","No Versions available for this file":"No hay versiones disponibles para este archivo","Owner":"Propietario","Password":"Contraseña","Password protected":"Protegido con contraseña","Pending":"Pendiente","Personal note":"Nota personal","Private Link":"Enlace Privado","Public Links":"Enlaces Públicos","Recipients can upload but existing contents are not revealed.":"Los receptores pueden subir archivos pero el contenido existente no será revelado.","Recipients can view and download contents.":"Los destinatarios pueden ver y descargar contenidos.","Recipients can view, download and upload contents.":"Los destinatarios pueden ver, descargar y cargar contenidos.","Recipients can view, download, edit, delete and upload contents.":"Los destinatarios pueden ver, descargar, editar, borrar y cargar contenidos.","Remove expiration date":"Eliminar fecha de vencimiento","Remove password":"Eliminar contraseña","Rename":"Renombrar","Rename file %{name}":"Renombrar archivo %{name}","Rename folder %{name}":"Renombrar carpeta %{name}","Resharer":"Recompartidor","Resolving private link…":"Resolviendo enlace privado...","Restoration of %{file} failed":"Restauración de %{file} falló","Restore":"Restaurar","Role":"Rol","Save":"Guardar","Save Share":"Guardar recurso compartido","Saving":"Guardando","Saving Public Link":"Guardar Enlace Público","Saving Share":"Guardando recurso compartido","Send a copy to myself":"Enviar una copia a mí mismo","Set detailed permissions":"Definir permisos detallados","Shared with me":"Compartido conmigo","Shared with others":"Compartido con otros","Show Details":"Mostrar Detalles","The name \"%{name}\" is already taken":"El nombre \"%{name}\" ya está tomado","The name cannot be equal to \"..\"":"El nombre no puede ser igual a \"..\"","The name cannot be equal to \".\"":"El nombre no puede ser igual a \".\"","The name cannot contain \"/\"":"El nombre no puede contener \"/\"","The name cannot end with whitespace":"El nombre no puede terminar con un espacio en blanco","The private link has been copied to your clipboard.":"El enlace privado ha sido copiado al portapapeles","There are no resources in this folder.":"No hay recursos en esta carpeta.","this":"esto","This resource is password-protected.":"Este recurso está protegido por contraseña.","title":"titulo","Unknown Role":"Rol desconocido","Upload complete":"Subida completa","Upload failed":"Subida fallida","Upload File":"Subir archivo","Upload Folder":"Subir carpeta","Upload of a folder is not supported in Internet Explorer.":"Subir carpetas no esta soportado en Internet Explorer","Upload, edit, delete, download and preview":"Subir, editar, eliminar, descargar y previsualizar","Uploader":"Cargador","Uploading \"%{ fileName }\"":"Subiendo \"%{ fileName }\"","Uploading %{ count } item":["Subiendo %{ count } ítems","Subiendo %{ count } ítems"],"Uploading file \"%{fileName}\"":"Subiendo archivo \"%{fileName}\"","User":"Usuario","Versions":"Versiones","Via %{folderName}":"A través de %{folderName}","Viewer":"Visor","You have no permission to upload!":"No tienes permisos para subir.","You have not enough space left to upload!":"No tiene suficiente espacio para subir."},"fr":{"(me)":"(moi)","(Opens in new window)":"(ouvre dans une nouvelle fenêtre)","%{ amount } selected item":["%{ amount } élément sélectionné","%{ amount } éléments sélectionnés"],"%{ foldersCount } folder":["%{ foldersCount } dossier","%{ foldersCount } dossiers"],"%{file} was restored successfully":"%{file} a été réstauré avec succès","%{file} was successfully deleted":"%{file} a été supprimé avec succès","%{name} already exists":"%{name} est déjà existant","%{owner} shared this folder with you for uploading":"%{owner} a partagé ce dossier avec vous pour uploader.","%{resource} was restored successfully":"%{resource} a été restauré avec succès","Accept":"Accepter","Accept share":"Accepter le partage","Accepted":"Accepté","action":"action","Actions":"Actions","Add files or folders":"Ajouter des fichiers ou des dossiers","Add people":"Ajouter des personnes ","Add to favorites":"Ajouter aux favoris","Adding People":"Ajout des personnes ","Advanced permissions":"Permissions avancées","All":"Tout","All Actions":"Toutes les actions","All deleted files were removed":"Tous les fichiers supprimés ont été retirés","All files":"Tous les fichiers","Allow creating":"Autoriser la création","Allow deleting":"Autoriser la suppression","Allow editing":"Autoriser les modifications","Allow sharing":"Autoriser le partage","An error occurred while copying %{resource}":"Une erreur est survenue lors de la copie de %{resource}","An error occurred while copying several resources":"Une erreur est survenue lors de la copie de plusieurs fichiers","An error occurred while loading the public link":"Une erreur est apparue lors du chargement du lien public","An error occurred while moving %{resource}":"Une erreur est survenue lors du déplacement de %{resource}","An error occurred while moving several resources":"Une erreur est survenue lors du déplacement de plusieurs fichiers","An error occurred while resolving the private link":"Une erreur est apparue lors de la résolution du lien privé","Are you sure you want to delete all selected resources?":"Êtes vous sûr de vouloir supprimer les ressources selectionnées?","Are you sure you want to delete all selected resources? All their content will be permanently removed. This action cannot be undone.":"Êtes-vous sûr de vouloir supprimer toutes les ressources sélectionnées ? Tout leur contenu sera définitivement supprimé. Cette action ne peut pas être annulée. ","Are you sure you want to delete this file?":"Êtes-vous sûr de vouloir supprimer \"%{file}\"?","Are you sure you want to delete this file? All it’s content will be permanently removed. This action cannot be undone.":"Êtes-vous sûr de vouloir supprimer ce fichier ? Tout son contenu sera supprimé de manière permanente. Cette action ne peut pas être annulée.","Are you sure you want to delete this folder?":"Êtes-vous sûr de vouloir supprimer ce dossier?","Are you sure you want to delete this folder? All it’s content will be permanently removed. This action cannot be undone.":"Êtes-vous sûr de vouloir supprimer ce dossier? Tout son contenu sera supprimé de manière permanente. Cette action ne peut pas être annulée.","Cancel":"Annuler","Clear selection":"Annuler la sélection","Confirm":"Confirmer","Continue":"Continuer","Contributor":"Contributeur","Copy":"Copier","Could not delete files":"Impossible de supprimer les fichiers","Create":"Créer","Create a new file":"Créer un nouveau fichier...","Create a new folder":"Créer un nouveau dossier...","Create and copy public link":"Créer et copier un nouveau lien public","Create new public link":"Créer un nouveau lien public","Creating":"Création en cours","Creating file failed…":"Echec de création de fichier...","Creating folder failed…":"Echec de création de dossier...","Creating Public Link":"Création lien public","Decline":"Décliner","Decline share":"Refuser le partage","Declined":"Décliné","Delete":"Supprimer","Delete file %{name}":"Supprimer le fichier %{name}","Delete folder %{name}":"Supprimer le dossier %{name}","Delete public link":"Supprimer lien public","Delete selected resource?":[" Supprimer la ressource sélectionnée?"," Supprimer les %{amount} ressources sélectionnées?"],"Deleted files":"Fichiers supprimés","Deletion of %{file} failed":"Echec de la suppression de %{file}","Details":"Détails","Do you want to create a new version?":"Voulez-vous creer une nouvelle version ?","Do you want to overwrite it?":"Voulez-vous l'écraser ?","Download":"Télécharger","Download and preview":"Téléchargé et visualiser","Download, preview and share":"Téléchargé, visualiser et partager","Drag and drop to upload content into current folder":"Glisser et déplacer pour uploader du contenu dans le dossier courant","Drag files and folders here or use the \"+ New\" button to upload":"Glissez des fichiers ou dossiers ici ou utilisez le bouton \"+ Nouveau\" pour en ajouter.","Drop files here to upload or click to select file":"Déposer des fichiers ici pour uploader ou cliquer pour sélectionner des fichiers","Edit public link":"Editer lien public","Edit, download and preview":"Modifier, télécharger et visualiser","Edit, download, preview and share":"Modifier, téléchargé, visualiser et partager","Editor":"Éditeur","Empty trash bin":"Vider la corbeille","Enter password for public link":"Entrer le mot de passe du lien public","Error while deleting \"%{file}\"":"Erreur lors de la suppression de \"%{file}\"","Error while deleting \"%{file}\" - the file is locked":"Erreur lors de la suppression de \"%{file}\" - le fichier est verrouillé","Error while renaming \"%{file}\" to \"%{newName}\"":"Erreur lors du renommage de \"%{file}\" en \"%{newName}\"","Error while renaming \"%{file}\" to \"%{newName}\" - the file is locked":"Erreur lors du renommage de \"%{file}\" en \"%{newName}\" - le fichier est verrouillé","Error while sharing.":"Erreur apparue lors du partage.","Expiration date":"Date d'éxpiration","Expiration date (required)":"Date d'expiration (obligatoire)","Expires %{expires}":"Expire le %{expires}","Favorite files":"Fichiers favoris","Favorites":"Favoris","File name":"Nom de fichier","File name cannot be empty":"Nom de fichier ne peut pas être vide","File name cannot be equal to \"..\"":"Le nom du fichier ne peut pas être \"..\"","File name cannot be equal to \".\"":"Le nom du fichier ne peut pas être \".\"","File name cannot contain \"/\"":"Le nom du fichier ne peut pas contenir \"/\"","File name cannot end with whitespace":"Le nom du fichier ne peut pas se terminer avec un espace","File owner":"Propriétaire du fichier","File upload failed…":"Échec d'upload du fichier...","Files":"Fichiers","Files shared with me":"Fichiers partagés avec moi","Files shared with others":"Fichiers partagés avec d'autres personnes","Folder %{folder} already exists.":"Dossier %{folder} existe déjà","Folder name":"Nom de dossier","Folder name cannot be empty":"Nom de dossier ne peut pas être vide","Folder name cannot be equal to \"..\"":"Le nom du dossier ne peut pas être \"..\"","Folder name cannot be equal to \".\"":"Le nom du dossier ne peut pas être \".\"","Folder name cannot contain \"/\"":"Le nom du dossier ne peut pas contenir \"/\"","Folder name cannot end with whitespace":"Le nom du dossier ne peut pas se terminer avec un espace","Go to »All files«":"Aller à »All files« ","Group":"Groupe","Guest":" Invité","Guest user":"Utilisateur invité","Hide Details":"Masquer les détails","Incorrect password":"Mot de passe incorrect","Items per page":"Éléments par page","Last modified:":"Dernière modification le :","Links":"Liens","Loading public link…":"Chargement du lien public...","Mail recipients":"Destinataires","Move":{"Action in the files list row to initiate move of a single resource":"Déplacer","":"Déplacer"},"Move here":{"Confirm action in the location picker for move":"Déplacer ici"},"msg":"msg","Name":"Nom","New":"Nouveau","New file":"Nouveau fichier","New folder":"Nouveau dossier","New folder…":"Nouveau dossier...","No public links":"Aucun lien public","No Versions available for this file":"Aucune version n'existe pour ce fichier","Only invited people can use this link.":"Seuls les personnes invités peuvent utiliser ce lien.","Open folder":{"Action in the files list row to open a folder":"Ouvrir le dossie"},"Open in %{app}":"Ouvrir avec %{app}","Open in browser":"Ouvrir dans le navigateur","Overwrite":"Écraser","Owner":"Propriétaire","Owner:":"Propriétaire :","Password":"Mot de passe","Password (required)":"Mot de passe (obligatoire)","Password protected":"Protégé par mot de passe","Paste here":{"Confirm action in the location picker for copy":"Coller ici"},"Pending":"En attente","Permanently delete folder %{name}":" Supprimer définitivement le dossier %{name}","Permanently delete selected resource?":["Supprimer définitivement la ressource sélectionnée ?"," Supprimer définitivement les %{amount} ressources sélectionnées?"],"Person was added":"Une personne a été ajoutée","Personal note":"Note personnelle","Please, accept this share first to display available actions":"S’il vous plaît, acceptez ce partage pour afficher les actions disponibles ","Private Link":"Lien privé","Private link copied":"Lien privé copié","Public files":"Fichiers publics","Public link":"Lien public","Public link created":"Lien public créé","Public Links":"Liens publics","Recipients can upload but existing contents are not revealed.":"Destinataires peuvent uploader mais le contenu existant n'est pas visible.","Recipients can view and download contents.":"Destinataires peuvent lister et télécharger le contenu.","Recipients can view, download and upload contents.":"Destinataires peuvent lister, télécharger et uploader du contenu.","Recipients can view, download, edit, delete and upload contents.":"Destinataires peuvent lister, télécharger, modifier, supprimer et uploader du contenu.","Reload public link":"Recharger le lien public","Remote user":"Utilisateur distant","Remove expiration date":"Supprimer date d'expiration","Remove from favorites":"Retirer des favoris","Remove password":"Supprimer mot de passe","Removing public link":"Supprimer le lien public","Rename":"Renommer","Rename file %{name}":"Renommer fichier %{name}","Rename folder %{name}":"Renommer dossier %{name}","Resharer":"Partageur","Resolving private link…":"Résolution du lien privé...","Resource not found":" Ressource introuvable ","Restoration of %{file} failed":"Échec de restauration du fichier %{file}","Restore":"Restaurer","Restore older version":"Restaurer une ancienne version","Role":"Role","Save":"Sauvegarder","Save Share":"Enregistrer partage","Saving":"Sauvegarde en cours","Saving Public Link":"Enregistrement lien public","Saving Share":"Enregistrement partage","Send a copy to myself":"M'envoyer une copie","Set detailed permissions":"Définir des permissions détaillées","Share":"Partager","Shared by":"Partagé par","Shared by %{resharer}":"Partagé par %{resharer}","Shared with me":"Partagé avec moi","Shared with others":"Partagé avec autres","Show Details":"Afficher les détails","Show hidden files":"Afficher les fichiers masqués","Show links":"Afficher les liens","Size:":"Taille :","Tags":"Étiquettes","The name \"%{name}\" is already taken":"Le nom \"%{name}\" existe déjà","The name cannot be empty":"Le nom ne peut pas être vide","The name cannot be equal to \"..\"":"Le nom ne peut pas être \"..\"","The name cannot be equal to \".\"":"Le nom ne peut pas être \".\"","The name cannot contain \"/\"":"Le nom ne peut pas contenir \"/\"","The name cannot end with whitespace":"Le nom ne peut pas finir avec un espace","The private link has been copied to your clipboard.":"Le lien privé a été copié dans le presse-papier.","There are no resources in this folder.":"Il n'y a aucune ressource dans ce dossier","This folder contains %{ itemCount } item.":["Ce dossier contient %{ itemCount } élément.","Ce dossier contient %{ itemCount } éléments."],"This folder has been shared.":"Ce dossier est partagé.","This folder has no content.":"Ce dossier est vide.","This resource is password-protected.":"Cette resource est protégée par mot de passe.","title":"titre","Unknown Role":"Role inconnu","Unknown type":"Type inconnu","Upload complete":"Upload terminé","Upload failed":"Upload a échoué","Upload File":"Uploader un Fichier","Upload Folder":"Uploader un Dossier","Upload of a folder is not supported in Internet Explorer.":"Upload de dossier n'est pas supporté sur Internet Explorer.","Upload, edit, delete, download and preview":"Uploader, modifier, supprimer, télécharger et visualiser","Upload, edit, delete, download, preview and share":"Uploader, modifier, supprimer, télécharger, visualiser et partager","Uploader":"Uploadeur","Uploading %{ count } item":["Upload fichier \"%{fileName}\"","Upload %{ count } entrées"],"Uploading file \"%{fileName}\"":"Upload fichier \"%{fileName}\"","User":"Utilisateur","Versions":"Versions","Versions:":"Versions :","Via %{folderName}":"Via %{folderName}","Viewer":"Visionneur","We went looking everywhere, but were unable to find the selected resource.":"Nous avons cherché partout, mais nous n’avons pas pu trouver la ressource sélectionnée.","You don't have permission to share this file.":"Vous n'avez pas la permission de partager ce fichier.","You don't have permission to share this folder.":"Vous n'avez pas la permission de partager ce dossier.","You have no permission to upload!":"Vous n'avez pas la permission d'uploader !","You have not enough space left to upload!":"Vous n'avec pas assez d'espace disponible pour uploader !"},"gl":{"(me)":"(eu)","%{ amount } selected item":["%{ amount } elemento seleccionado","%{ amount } elementos seleccionados"],"%{ amount } selected item - %{ size }":["%{ amount } elemento seleccionado - %{ size }","%{ amount } elementos seleccionados - %{ size }"],"%{count} resource could not be copied":["Non foi posíbel copiar %{count} recurso","Non foi posíbel copiar %{count} recursos"],"%{count} resource could not be moved":["Non foi posíbel mover %{count} recurso","Non foi posíbel mover %{count} recursos"],"%{file} was restored successfully":"%{file} foi restaurado satisfactoriamente","%{file} was successfully deleted":"%{file} foi eliminado satisfactoriamente","%{name} already exists":"%{name} xa existe","%{owner} shared this folder with you for uploading":"%{owner} compartiu este cartafol con vostede para envialo","Accept":"Aceptar","Accepted":"Aceptado","Actions":"Accións","Add people":"Engadir xente","Adding People":"Engadindo xente","Additional permissions":"Permisos adicionais","Advanced permissions":"Permisos avanzados","All deleted files were removed":"Retiráronse todos os ficheiros eliminados","All files":"Todos os ficheiros","Allow creating":"Permitir crear","Allow deleting":"Permitir eliminar","Allow editing":"Permitir editar","Allow sharing":"Permitir compartir","An error occurred while copying %{resource}":"Produciuse un erro ao copiar %{resource}","An error occurred while copying several resources":"Produciuse un erro ao copiar varios recursos","An error occurred while loading the public link":"Produciuse un erro ao cargar a ligazón pública","An error occurred while moving %{resource}":"Produciuse un erro ao mover %{resource}","An error occurred while moving several resources":"Produciuse un erro ao mover varios recursos","An error occurred while resolving the private link":"Produciuse un erro ao resolver a ligazón privada","Are you sure you want to delete all selected resources?":"Confirma que quere eliminar todos os recursos seleccionados?","Are you sure you want to delete all selected resources? All their content will be permanently removed. This action cannot be undone.":" \nConfirma que quere eliminar todos os recursos seleccionados? Todo o seu contido eliminarase definitivamente. Esta acción non se pode desfacer.","Are you sure you want to delete this file?":"Confirma que quere eliminar este ficheiro?","Are you sure you want to delete this file? All it’s content will be permanently removed. This action cannot be undone.":"Confirma que quere eliminar este ficheiro? Todo o seu contido eliminarase definitivamente. Esta acción non se pode desfacer.","Are you sure you want to delete this folder?":"Confirma que quere eliminar este cartafol?","Are you sure you want to delete this folder? All it’s content will be permanently removed. This action cannot be undone.":"Confirma que quere eliminar este cartafol? Todo o seu contido eliminarase definitivamente. Esta acción non se pode desfacer.","Cancel":"Cancelar","Clear selection":"Limpar a selección","Confirm":"Confirmar","Continue":"Continuar","Contributor":"Colaborador","Copy":"Copiar","Could not delete files":"Non foi posíbel eliminar os ficheiros","Create":"Crear","Create a new file":"Crear un novo ficheiro","Create a new folder":"Crear un novo cartafol","Create and copy public link":"Crear e copiar unha ligazón pública","Create new public link":"Crear unha nova ligazón pública","Creating":"Creando","Creating file failed…":"Produciuse un fallo ao crear o ficheiro…","Creating folder failed…":"Produciuse un fallo ao crear o cartafol…","Creating Public Link":"Creando a ligazón pública","Decline":"Declinar","Declined":"Declinada","Delete":"Eliminar","Delete file %{name}":"Eliminar o ficheiro %{name}","Delete folder %{name}":"Eliminar o cartafol %{name}","Delete public link":"Eliminar ligazón pública","Delete selected resource?":["Eliminar o recurso seleccionado?","Eliminar os %{amount} recursos seleccionados?"],"Deleted files":"Ficheiros eliminados","Deletion of %{file} failed":"Produciuse un fallo ao eliminar %{file}","Do you want to create a new version?":"Quere crear unha nova versión?","Do you want to overwrite it?":"Quere sobrescribilo?","Download":"Descargar","Download and preview":"Descargar e visionar","Download, preview and share":"Descargar e visionar e compartir","Drag and drop to upload content into current folder":"Arrastre e solte para enviar contido ao cartafol actual","Drop files here to upload or click to select file":"Solte os ficheiros aquí para envialos ou prema para seleccionar ficheiro","Edit public link":"Editar ligazón pública","Edit, download and preview":"Editar, descargar e visionar","Edit, download, preview and share":"Editar, descargar e visionar e compartir","Editor":"Editor","Empty trash bin":"Cesto do lixo baleiro","Enter password for public link":"Introduza o contrasinal para a ligazón pública","Error while deleting \"%{file}\"":"Produciuse un erro ao eliminar «%{file}»","Error while deleting \"%{file}\" - the file is locked":"Produciuse un erro ao eliminar «%{file}» — o ficheiro está bloqueado","Error while renaming \"%{file}\" to \"%{newName}\"":"Produciuse un erro ao cambiar o nome de «%{file}« a «%{newName}»","Error while renaming \"%{file}\" to \"%{newName}\" - the file is locked":"Produciuse un erro ao cambiar o nome de «%{file}« a «%{newName}» — o ficheiro está bloqueado","Error while sharing.":"Produciuse un erro durante a compartición.","Error while starring \"%{file}\"":"Produciuse un erro ao destacar «%{file}»","Expiration date":"Data de caducidade","Expires %{expires}":"Caduca %{expires}","Favorites":"Favoritos","File %{file} already exists":"Xa existe o ficheiro %{file}","File name":"Nome de ficheiro","File name cannot be empty":"O nome do ficheiro non pode estar baleiro","File name cannot be equal to \"..\"":"O nome do ficheiro non pode ser igual a «..»","File name cannot be equal to \".\"":"O nome do ficheiro non pode ser igual a «.»","File name cannot contain \"/\"":"O nome do ficheiro non pode conter unha «/»","File name cannot end with whitespace":"O nome do ficheiro non pode rematar cun espazo en branco","File upload failed…":"Produciuse un fallo ao enviar o ficheiro…","Files":"Ficheiros","Folder %{folder} already exists.":"Xa existe o cartafol %{folder}.","Folder name":"Nome do cartafol","Folder name cannot be empty":"O nome do cartafol non pode estar baleiro","Folder name cannot be equal to \"..\"":"O nome do cartafol non pode ser igual a «..»","Folder name cannot be equal to \".\"":"O nome do cartafol non pode ser igual a «.»","Folder name cannot contain \"/\"":"O nome do cartafol non pode conter unha «/»","Folder name cannot end with whitespace":"O nome do cartafol non pode rematar cun espazo en branco","Go to »All files«":"Ir a «Todos os ficheiros»","Group":"Grupo","Guest":"Convidado","Hide Details":"Agochar os detalles","Incorrect password":"Contrasinal incorrecta","Links":"Ligazóns","Loading public link…":"Cargando a ligazón pública…","Mail recipients":"Destinatarios de correo","Move":{"Action in the files list row to initiate move of a single resource":"Mover","":"Mover"},"Move here":{"Confirm action in the location picker for move":"Mover aquí"},"msg":"msx","Multiple files already exists":"Xa existen varios ficheiros","Name":"Nome","Navigate to the parent":"Navegar ata o pai","New":"Novo","New file":"Novo ficheiro","New folder":"Novo cartafol","New folder…":"Novo cartafol…","No public links":"Non hai ligazóns públicas","No Versions available for this file":"Non hai versións dispoñíbeis para este ficheiro","Only invited people can use this link.":"Só as persoas convidadas poden usar esta ligazón.","Open folder":{"Action in the files list row to open a folder":"Abrir cartafol"},"Open in browser":"Abrir no navegador","Overwrite":"Sobreescribir","Owner":"Propietario","Password":"Contrasinal","Password protected":"Protexido por contrasinal","Paste here":{"Confirm action in the location picker for copy":"Pegar aquí"},"Pending":"Pendente","People":"Xente","Permanently delete file %{name}":"Eliminar de xeito permanente o ficheiro %{name}","Permanently delete folder %{name}":"Eliminar de xeito permanente o cartafol %{name}","Permanently delete selected resource?":["Eliminar de xeito permanente o recurso seleccionado?","Eliminar de xeito permanente os %{amount} recursos seleccionados?"],"Person was added":"Engadiuse a persoa","Personal note":"Nota persoal","Please, accept this share first to display available actions":"Acepte primeiro esta compartición para amosar as accións dispoñíbeis","Private Link":"Ligazón privada","Public link":"Ligazón pública","Public link created":"Creouse unha ligazón pública","Public link has been successfully created and copied into your clipboard.":"A ligazón pública foi creada e copiada satispactoriamente no portapapeis.","Public Links":"Ligazóns públicas","Recipients can upload but existing contents are not revealed.":"Os destinatarios poden enviar, mais non se revelan os contidos existentes.","Recipients can view and download contents.":"Os destinatarios poden ver e descargar contidos.","Recipients can view, download and upload contents.":"Os destinatarios poden ver, descargar e enviar contidos.","Recipients can view, download, edit, delete and upload contents.":"Os destinatarios poden ver, descargar, editar, eliminar e enviar contidos.","Reload public link":"Volvendo cargar a ligazón pública","Remote user":"Usuario remoto","Remove expiration date":"Retirar a data de caducidade","Remove password":"Retirar o contrasinal","Rename":"Renomear","Rename file %{name}":"Renomear o ficheiro %{name}","Rename folder %{name}":"Renomear o cartafol %{name}","Resharer":"Volver compartir","Resolving private link…":"Resolvendo a ligazón privada…","Resource not found":"Non se atopou o recurso","Resource with name %{name} already exists":"Xa existe o frecurso nome %{name}","Restoration of %{file} failed":"Produciuse un fallo ao restaurar %{file}","Restore":"Restaurar","Role":"Rol","Save":"Gardar","Save Share":"Gardar a compartición","Saving":"Gardando","Saving Public Link":"Gardando ligazón pública","Saving Share":"Gardando compartición","Send a copy to myself":"Envíame unha copia","Set detailed permissions":"Estabelecer os permisos detallados","Share":"Compartir","Shared by %{resharer}":"Compartido por %{resharer}","Shared with me":"Compartido comigo","Shared with others":"Compartido con outros","Show Details":"Amosar os detalles","The name \"%{name}\" is already taken":"O nome «%{name}» xa está ocupado","The name cannot be empty":"O nome non pode estar baleiro","The name cannot be equal to \"..\"":"O nome non pode ser igual a «..»","The name cannot be equal to \".\"":"O nome non pode ser igual a «.»","The name cannot contain \"/\"":"O nome non pode conter unha «/»","The name cannot end with whitespace":"O nome non pode rematar cun espazo en branco","The private link has been copied to your clipboard.":"A ligazón privada foi copiada no portapapeis.","There are no resources in this folder.":"Non hai recursos neste cartafol.","this":"este","This resource is password-protected.":"Este recurso está protexido por contrasinal.","title":"título","Unknown Role":"Rol descoñecido","Unknown type":"Tipo descoñecido","Upload complete":"Envío completado","Upload failed":"Produciuse un fallo no envío","Upload File":"Enviar ficheiro","Upload Folder":"Enviar cartafol","Upload of a folder is not supported in Internet Explorer.":"O envío dun cartafol non é compatíbel co Internet Explorer.","Upload, edit, delete, download and preview":"Enviar, editar, eliminar, descargar e visionar","Upload, edit, delete, download, preview and share":"Enviar, editar, eliminar, descargar visionar e compartir","Uploader":"Xestor de envíos","Uploading \"%{ fileName }\"":"Enviando «%{ fileName }»","Uploading %{ count } item":["Enviando %{ count } elemento","Enviando %{ count } elementos"],"Uploading file \"%{fileName}\"":"Enviando o ficheiro «%{fileName}»","User":"Usuario","Versions":"Versións","Via %{folderName}":"Mediante %{folderName}","Viewer":"Visor","We went looking everywhere, but were unable to find the selected resource.":"Buscamos por todas partes, mais non puidemos atopar o recurso seleccionado.","You don't have permission to share this file.":"Non ten permiso para compartir este ficheiro.","You don't have permission to share this folder.":"Non ten permiso para compartir este cartafol.","You have no permission to upload!":"Non ten permiso para facer envíos!","You have not enough space left to upload!":"Non dispón de espazo abondo para facer un envío!"},"it":{}} \ No newline at end of file diff --git a/packages/web-app-files/package.json b/packages/web-app-files/package.json index c587904de2e..8eb24e03362 100644 --- a/packages/web-app-files/package.json +++ b/packages/web-app-files/package.json @@ -7,6 +7,7 @@ "copy-to-clipboard": "^3.3.1", "filesize": "^6.4.0", "filter-obj": "^2.0.1", + "fuse.js": "^6.4.6", "lodash-es": "^4.17.21", "p-queue": "^6.6.2", "query-string": "^6.8.3", diff --git a/packages/web-app-files/src/components/AppBar/AppBar.vue b/packages/web-app-files/src/components/AppBar/AppBar.vue index 47462e8ce6f..eed17714793 100644 --- a/packages/web-app-files/src/components/AppBar/AppBar.vue +++ b/packages/web-app-files/src/components/AppBar/AppBar.vue @@ -141,7 +141,7 @@ export default { computed: { ...mapGetters(['getToken', 'configuration', 'newFileHandlers', 'quota', 'user']), ...mapGetters('Files', [ - 'activeFiles', + 'files', 'inProgress', 'currentFolder', 'davProperties', @@ -397,7 +397,7 @@ export default { return this.$gettext('Folder name cannot end with whitespace') } - const exists = this.activeFiles.find(file => file.name === folderName) + const exists = this.files.find(file => file.name === folderName) if (exists) { const translated = this.$gettext('%{name} already exists') @@ -486,7 +486,7 @@ export default { return this.$gettext('File name cannot end with whitespace') } - const exists = this.activeFiles.find(file => file.name === fileName) + const exists = this.files.find(file => file.name === fileName) if (exists) { const translated = this.$gettext('%{name} already exists') diff --git a/packages/web-app-files/src/components/FilesList/ContextActions.vue b/packages/web-app-files/src/components/FilesList/ContextActions.vue index 9100a4fdf65..f0a34e2a660 100644 --- a/packages/web-app-files/src/components/FilesList/ContextActions.vue +++ b/packages/web-app-files/src/components/FilesList/ContextActions.vue @@ -1,21 +1,28 @@ @@ -23,10 +30,36 @@ import { mapGetters } from 'vuex' import FileActions from '../../mixins/fileActions' +import Copy from '../../mixins/actions/copy' +import CreatePublicLink from '../../mixins/actions/createPublicLink' +import Delete from '../../mixins/actions/delete' +import Download from '../../mixins/actions/download' +import Favorite from '../../mixins/actions/favorite' +import Move from '../../mixins/actions/move' +import Navigate from '../../mixins/actions/navigate' +import Rename from '../../mixins/actions/rename' +import Restore from '../../mixins/actions/restore' +import ShowActions from '../../mixins/actions/showActions' +import ShowDetails from '../../mixins/actions/showDetails' +import ShowShares from '../../mixins/actions/showShares' export default { name: 'ContextActions', - mixins: [FileActions], + mixins: [ + FileActions, + Copy, + CreatePublicLink, + Delete, + Download, + Favorite, + Move, + Navigate, + Rename, + Restore, + ShowActions, + ShowDetails, + ShowShares + ], props: { item: { @@ -38,25 +71,90 @@ export default { computed: { ...mapGetters('Files', ['currentFolder']), - filteredActions() { - const actions = this.$_fileActions_editorActions.concat(this.$_fileActions_systemActions) - - return actions.filter(action => - action.isEnabled({ - resource: this.item, - parent: this.currentFolder + menuSections() { + const sections = [] + if (this.menuItemsContext.length) { + sections.push({ + name: 'context', + items: this.menuItemsContext + }) + } + if (this.menuItemsActions.length) { + sections.push({ + name: 'actions', + items: this.menuItemsActions }) + } + if (this.menuItemsSidebar.length) { + sections.push({ + name: 'sidebar', + items: this.menuItemsSidebar + }) + } + return sections + }, + + filterParams() { + return { + resource: this.item, + parent: this.currentFolder + } + }, + + menuItemsContext() { + const menuItems = [] + + // `open` and `open with` + const openActions = [ + ...this.$_navigate_items, + ...this.$_fetch_items, + ...this.$_fileActions_editorActions + ].filter(item => item.isEnabled(this.filterParams)) + if (openActions.length > 0) { + menuItems.push(openActions[0]) + } + if (openActions.length > 1) { + // TODO: sub nav item with all remaining open actions + } + + menuItems.push( + ...[ + ...this.$_download_items, + ...this.$_createPublicLink_items, + ...this.$_showShares_items, + ...this.$_favorite_items.map(action => { + action.keepOpen = true + return action + }) + ].filter(item => item.isEnabled(this.filterParams)) ) + + return menuItems + }, + + menuItemsActions() { + return [ + ...this.$_rename_items, + ...this.$_move_items, + ...this.$_copy_items, + ...this.$_restore_items, + ...this.$_delete_items, + ...this.$_showActions_items + ].filter(item => item.isEnabled(this.filterParams)) + }, + + menuItemsSidebar() { + return [...this.$_showDetails_items].filter(item => item.isEnabled(this.filterParams)) } }, methods: { - getComponentProps(action, target) { + getComponentProps(action, resource) { if (action.componentType === 'router-link' && action.route) { return { to: { name: action.route, params: { - item: target.path + item: resource.path } } } @@ -65,6 +163,25 @@ export default { return { appearance: 'raw' } + }, + + getComponentListeners(action, resource) { + if (action.handler === undefined || action.componentType !== 'oc-button') { + return {} + } + + const callback = () => action.handler(resource, action.handlerData) + if (action.keepOpen) { + return { + click: event => { + event.stopPropagation() + callback() + } + } + } + return { + click: callback + } } } } @@ -73,14 +190,20 @@ export default { diff --git a/packages/web-app-files/src/components/Search/List.vue b/packages/web-app-files/src/components/Search/List.vue new file mode 100644 index 00000000000..5db7e9ad56f --- /dev/null +++ b/packages/web-app-files/src/components/Search/List.vue @@ -0,0 +1,121 @@ + + + diff --git a/packages/web-app-files/src/components/Search/Preview.vue b/packages/web-app-files/src/components/Search/Preview.vue new file mode 100644 index 00000000000..3a57f454678 --- /dev/null +++ b/packages/web-app-files/src/components/Search/Preview.vue @@ -0,0 +1,89 @@ + + + + + diff --git a/packages/web-app-files/src/components/SideBar/Details/FileDetailsMultiple.vue b/packages/web-app-files/src/components/SideBar/Details/FileDetailsMultiple.vue new file mode 100644 index 00000000000..9eb28f344a6 --- /dev/null +++ b/packages/web-app-files/src/components/SideBar/Details/FileDetailsMultiple.vue @@ -0,0 +1,115 @@ + + + diff --git a/packages/web-app-files/src/components/SideBar/Shares/Collaborators/AutocompleteItem.vue b/packages/web-app-files/src/components/SideBar/Shares/Collaborators/AutocompleteItem.vue index 2d7bdf08e7c..8ddfb21dd2d 100644 --- a/packages/web-app-files/src/components/SideBar/Shares/Collaborators/AutocompleteItem.vue +++ b/packages/web-app-files/src/components/SideBar/Shares/Collaborators/AutocompleteItem.vue @@ -1,5 +1,5 @@