summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.htaccess2
-rw-r--r--apps/dav/l10n/bg.js1
-rw-r--r--apps/dav/l10n/bg.json1
-rw-r--r--apps/dav/l10n/cs.js2
-rw-r--r--apps/dav/l10n/cs.json2
-rw-r--r--apps/dav/l10n/de.js2
-rw-r--r--apps/dav/l10n/de.json2
-rw-r--r--apps/dav/l10n/de_DE.js1
-rw-r--r--apps/dav/l10n/de_DE.json1
-rw-r--r--apps/dav/l10n/en_GB.js1
-rw-r--r--apps/dav/l10n/en_GB.json1
-rw-r--r--apps/dav/l10n/es.js2
-rw-r--r--apps/dav/l10n/es.json2
-rw-r--r--apps/dav/l10n/eu.js1
-rw-r--r--apps/dav/l10n/eu.json1
-rw-r--r--apps/dav/l10n/fr.js2
-rw-r--r--apps/dav/l10n/fr.json2
-rw-r--r--apps/dav/l10n/hu.js1
-rw-r--r--apps/dav/l10n/hu.json1
-rw-r--r--apps/dav/l10n/pt_BR.js2
-rw-r--r--apps/dav/l10n/pt_BR.json2
-rw-r--r--apps/dav/l10n/tr.js2
-rw-r--r--apps/dav/l10n/tr.json2
-rw-r--r--apps/dav/l10n/uk.js1
-rw-r--r--apps/dav/l10n/uk.json1
-rw-r--r--apps/dav/l10n/zh_HK.js1
-rw-r--r--apps/dav/l10n/zh_HK.json1
-rw-r--r--apps/dav/l10n/zh_TW.js2
-rw-r--r--apps/dav/l10n/zh_TW.json2
-rw-r--r--apps/dav/lib/CalDAV/Schedule/IMipService.php2
-rw-r--r--apps/files/l10n/af.js4
-rw-r--r--apps/files/l10n/af.json4
-rw-r--r--apps/files/l10n/ar.js4
-rw-r--r--apps/files/l10n/ar.json4
-rw-r--r--apps/files/l10n/bg.js6
-rw-r--r--apps/files/l10n/bg.json6
-rw-r--r--apps/files/l10n/br.js4
-rw-r--r--apps/files/l10n/br.json4
-rw-r--r--apps/files/l10n/ca.js4
-rw-r--r--apps/files/l10n/ca.json4
-rw-r--r--apps/files/l10n/cs.js7
-rw-r--r--apps/files/l10n/cs.json7
-rw-r--r--apps/files/l10n/da.js6
-rw-r--r--apps/files/l10n/da.json6
-rw-r--r--apps/files/l10n/de.js6
-rw-r--r--apps/files/l10n/de.json6
-rw-r--r--apps/files/l10n/de_DE.js6
-rw-r--r--apps/files/l10n/de_DE.json6
-rw-r--r--apps/files/l10n/el.js4
-rw-r--r--apps/files/l10n/el.json4
-rw-r--r--apps/files/l10n/en_GB.js6
-rw-r--r--apps/files/l10n/en_GB.json6
-rw-r--r--apps/files/l10n/eo.js4
-rw-r--r--apps/files/l10n/eo.json4
-rw-r--r--apps/files/l10n/es.js7
-rw-r--r--apps/files/l10n/es.json7
-rw-r--r--apps/files/l10n/es_419.js4
-rw-r--r--apps/files/l10n/es_419.json4
-rw-r--r--apps/files/l10n/es_AR.js4
-rw-r--r--apps/files/l10n/es_AR.json4
-rw-r--r--apps/files/l10n/es_CL.js4
-rw-r--r--apps/files/l10n/es_CL.json4
-rw-r--r--apps/files/l10n/es_CO.js4
-rw-r--r--apps/files/l10n/es_CO.json4
-rw-r--r--apps/files/l10n/es_CR.js4
-rw-r--r--apps/files/l10n/es_CR.json4
-rw-r--r--apps/files/l10n/es_DO.js4
-rw-r--r--apps/files/l10n/es_DO.json4
-rw-r--r--apps/files/l10n/es_EC.js4
-rw-r--r--apps/files/l10n/es_EC.json4
-rw-r--r--apps/files/l10n/es_GT.js4
-rw-r--r--apps/files/l10n/es_GT.json4
-rw-r--r--apps/files/l10n/es_HN.js4
-rw-r--r--apps/files/l10n/es_HN.json4
-rw-r--r--apps/files/l10n/es_MX.js6
-rw-r--r--apps/files/l10n/es_MX.json6
-rw-r--r--apps/files/l10n/es_NI.js4
-rw-r--r--apps/files/l10n/es_NI.json4
-rw-r--r--apps/files/l10n/es_PA.js4
-rw-r--r--apps/files/l10n/es_PA.json4
-rw-r--r--apps/files/l10n/es_PE.js4
-rw-r--r--apps/files/l10n/es_PE.json4
-rw-r--r--apps/files/l10n/es_PR.js4
-rw-r--r--apps/files/l10n/es_PR.json4
-rw-r--r--apps/files/l10n/es_PY.js4
-rw-r--r--apps/files/l10n/es_PY.json4
-rw-r--r--apps/files/l10n/es_SV.js4
-rw-r--r--apps/files/l10n/es_SV.json4
-rw-r--r--apps/files/l10n/es_UY.js4
-rw-r--r--apps/files/l10n/es_UY.json4
-rw-r--r--apps/files/l10n/et_EE.js5
-rw-r--r--apps/files/l10n/et_EE.json5
-rw-r--r--apps/files/l10n/eu.js6
-rw-r--r--apps/files/l10n/eu.json6
-rw-r--r--apps/files/l10n/fa.js4
-rw-r--r--apps/files/l10n/fa.json4
-rw-r--r--apps/files/l10n/fi.js8
-rw-r--r--apps/files/l10n/fi.json8
-rw-r--r--apps/files/l10n/fr.js7
-rw-r--r--apps/files/l10n/fr.json7
-rw-r--r--apps/files/l10n/gl.js4
-rw-r--r--apps/files/l10n/gl.json4
-rw-r--r--apps/files/l10n/he.js4
-rw-r--r--apps/files/l10n/he.json4
-rw-r--r--apps/files/l10n/hr.js4
-rw-r--r--apps/files/l10n/hr.json4
-rw-r--r--apps/files/l10n/hu.js6
-rw-r--r--apps/files/l10n/hu.json6
-rw-r--r--apps/files/l10n/ia.js4
-rw-r--r--apps/files/l10n/ia.json4
-rw-r--r--apps/files/l10n/id.js4
-rw-r--r--apps/files/l10n/id.json4
-rw-r--r--apps/files/l10n/is.js4
-rw-r--r--apps/files/l10n/is.json4
-rw-r--r--apps/files/l10n/it.js6
-rw-r--r--apps/files/l10n/it.json6
-rw-r--r--apps/files/l10n/ja.js6
-rw-r--r--apps/files/l10n/ja.json6
-rw-r--r--apps/files/l10n/ka_GE.js4
-rw-r--r--apps/files/l10n/ka_GE.json4
-rw-r--r--apps/files/l10n/ko.js4
-rw-r--r--apps/files/l10n/ko.json4
-rw-r--r--apps/files/l10n/lt_LT.js4
-rw-r--r--apps/files/l10n/lt_LT.json4
-rw-r--r--apps/files/l10n/lv.js4
-rw-r--r--apps/files/l10n/lv.json4
-rw-r--r--apps/files/l10n/mk.js4
-rw-r--r--apps/files/l10n/mk.json4
-rw-r--r--apps/files/l10n/nb.js4
-rw-r--r--apps/files/l10n/nb.json4
-rw-r--r--apps/files/l10n/nl.js4
-rw-r--r--apps/files/l10n/nl.json4
-rw-r--r--apps/files/l10n/pl.js6
-rw-r--r--apps/files/l10n/pl.json6
-rw-r--r--apps/files/l10n/pt_BR.js6
-rw-r--r--apps/files/l10n/pt_BR.json6
-rw-r--r--apps/files/l10n/pt_PT.js4
-rw-r--r--apps/files/l10n/pt_PT.json4
-rw-r--r--apps/files/l10n/ro.js5
-rw-r--r--apps/files/l10n/ro.json5
-rw-r--r--apps/files/l10n/ru.js4
-rw-r--r--apps/files/l10n/ru.json4
-rw-r--r--apps/files/l10n/sc.js4
-rw-r--r--apps/files/l10n/sc.json4
-rw-r--r--apps/files/l10n/sk.js4
-rw-r--r--apps/files/l10n/sk.json4
-rw-r--r--apps/files/l10n/sl.js4
-rw-r--r--apps/files/l10n/sl.json4
-rw-r--r--apps/files/l10n/sq.js4
-rw-r--r--apps/files/l10n/sq.json4
-rw-r--r--apps/files/l10n/sr.js4
-rw-r--r--apps/files/l10n/sr.json4
-rw-r--r--apps/files/l10n/sv.js6
-rw-r--r--apps/files/l10n/sv.json6
-rw-r--r--apps/files/l10n/th.js6
-rw-r--r--apps/files/l10n/th.json6
-rw-r--r--apps/files/l10n/tr.js7
-rw-r--r--apps/files/l10n/tr.json7
-rw-r--r--apps/files/l10n/uk.js6
-rw-r--r--apps/files/l10n/uk.json6
-rw-r--r--apps/files/l10n/vi.js4
-rw-r--r--apps/files/l10n/vi.json4
-rw-r--r--apps/files/l10n/zh_CN.js4
-rw-r--r--apps/files/l10n/zh_CN.json4
-rw-r--r--apps/files/l10n/zh_HK.js6
-rw-r--r--apps/files/l10n/zh_HK.json6
-rw-r--r--apps/files/l10n/zh_TW.js7
-rw-r--r--apps/files/l10n/zh_TW.json7
-rw-r--r--apps/files/src/views/Settings.vue4
-rw-r--r--apps/files_sharing/l10n/nl.js5
-rw-r--r--apps/files_sharing/l10n/nl.json5
-rw-r--r--apps/files_trashbin/lib/Trashbin.php24
-rw-r--r--apps/files_trashbin/src/filelist.js24
-rw-r--r--apps/files_versions/lib/Storage.php14
-rw-r--r--apps/settings/l10n/et_EE.js2
-rw-r--r--apps/settings/l10n/et_EE.json2
-rw-r--r--apps/settings/l10n/hu.js2
-rw-r--r--apps/settings/l10n/hu.json2
-rw-r--r--apps/settings/l10n/nl.js1
-rw-r--r--apps/settings/l10n/nl.json1
-rw-r--r--apps/settings/lib/Controller/CheckSetupController.php2
-rw-r--r--apps/sharebymail/l10n/cs.js2
-rw-r--r--apps/sharebymail/l10n/cs.json2
-rw-r--r--apps/sharebymail/l10n/nl.js1
-rw-r--r--apps/sharebymail/l10n/nl.json1
-rw-r--r--apps/theming/l10n/cs.js1
-rw-r--r--apps/theming/l10n/cs.json1
-rw-r--r--apps/theming/l10n/es.js1
-rw-r--r--apps/theming/l10n/es.json1
-rw-r--r--apps/theming/l10n/fr.js1
-rw-r--r--apps/theming/l10n/fr.json1
-rw-r--r--apps/theming/l10n/pt_BR.js1
-rw-r--r--apps/theming/l10n/pt_BR.json1
-rw-r--r--apps/theming/l10n/tr.js1
-rw-r--r--apps/theming/l10n/tr.json1
-rw-r--r--apps/theming/l10n/zh_HK.js1
-rw-r--r--apps/theming/l10n/zh_HK.json1
-rw-r--r--apps/theming/l10n/zh_TW.js1
-rw-r--r--apps/theming/l10n/zh_TW.json1
-rw-r--r--build/integration/features/carddav.feature4
-rw-r--r--build/integration/features/dav-v2.feature2
-rw-r--r--build/integration/features/webdav-related.feature4
-rw-r--r--build/psalm-baseline.xml19
-rw-r--r--core/Controller/LoginController.php4
-rw-r--r--core/js/setupchecks.js4
-rw-r--r--core/js/tests/specs/setupchecksSpec.js89
-rw-r--r--core/l10n/cs.js1
-rw-r--r--core/l10n/cs.json1
-rw-r--r--core/l10n/es.js2
-rw-r--r--core/l10n/es.json2
-rw-r--r--core/l10n/fr.js1
-rw-r--r--core/l10n/fr.json1
-rw-r--r--core/l10n/hu.js6
-rw-r--r--core/l10n/hu.json6
-rw-r--r--core/l10n/pt_BR.js1
-rw-r--r--core/l10n/pt_BR.json1
-rw-r--r--core/l10n/tr.js2
-rw-r--r--core/l10n/tr.json2
-rw-r--r--core/l10n/zh_TW.js1
-rw-r--r--core/l10n/zh_TW.json1
-rw-r--r--core/src/views/ContactsMenu.vue10
-rw-r--r--dist/core-main.js4
-rw-r--r--dist/core-main.js.map2
-rw-r--r--dist/files-main.js4
-rw-r--r--dist/files-main.js.map2
-rw-r--r--dist/files_trashbin-files_trashbin.js4
-rw-r--r--dist/files_trashbin-files_trashbin.js.map2
-rw-r--r--lib/composer/composer/autoload_classmap.php2
-rw-r--r--lib/composer/composer/autoload_static.php2
-rw-r--r--lib/l10n/et_EE.js11
-rw-r--r--lib/l10n/et_EE.json11
-rw-r--r--lib/l10n/hu.js2
-rw-r--r--lib/l10n/hu.json2
-rw-r--r--lib/l10n/nl.js2
-rw-r--r--lib/l10n/nl.json2
-rw-r--r--lib/private/AppFramework/App.php22
-rw-r--r--lib/private/Config.php7
-rw-r--r--lib/private/Contacts/ContactsMenu/ContactsStore.php8
-rw-r--r--lib/private/DB/BacktraceDebugStack.php1
-rw-r--r--lib/private/Files/Config/MountProviderCollection.php38
-rw-r--r--lib/private/Files/Config/UserMountCache.php12
-rw-r--r--lib/private/Files/SetupManager.php39
-rw-r--r--lib/private/Memcache/WithLocalCache.php54
-rw-r--r--lib/private/Preview/IMagickSupport.php40
-rw-r--r--lib/private/PreviewManager.php14
-rw-r--r--lib/private/Route/CachingRouter.php27
-rw-r--r--lib/private/Route/Router.php39
-rw-r--r--lib/private/Server.php22
-rw-r--r--lib/private/User/Manager.php3
-rw-r--r--lib/private/legacy/OC_Response.php2
-rw-r--r--lib/public/AppFramework/Controller.php3
-rw-r--r--lib/public/AppFramework/Http/Response.php2
-rw-r--r--tests/data/setUploadLimit/htaccess2
-rw-r--r--tests/lib/AppFramework/Controller/ControllerTest.php2
-rw-r--r--tests/lib/AppFramework/Http/DataResponseTest.php2
-rw-r--r--tests/lib/AppFramework/Http/ResponseTest.php2
-rw-r--r--tests/lib/AppFramework/Routing/RoutingTest.php52
-rw-r--r--tests/lib/Contacts/ContactsMenu/ContactsStoreTest.php2
-rw-r--r--tests/lib/Files/Config/UserMountCacheTest.php3
-rw-r--r--tests/lib/Route/RouterTest.php12
260 files changed, 850 insertions, 588 deletions
diff --git a/.htaccess b/.htaccess
index b7ee2318a7d..dd0fce231e8 100644
--- a/.htaccess
+++ b/.htaccess
@@ -31,7 +31,7 @@
Header always set X-Permitted-Cross-Domain-Policies "none"
Header onsuccess unset X-Robots-Tag
- Header always set X-Robots-Tag "none"
+ Header always set X-Robots-Tag "noindex, nofollow"
Header onsuccess unset X-XSS-Protection
Header always set X-XSS-Protection "1; mode=block"
diff --git a/apps/dav/l10n/bg.js b/apps/dav/l10n/bg.js
index 85fba41fc61..0e4ec5c9459 100644
--- a/apps/dav/l10n/bg.js
+++ b/apps/dav/l10n/bg.js
@@ -74,7 +74,6 @@ OC.L10N.register(
"Cancelled: %1$s" : "Отказан: %1$s",
"\"%1$s\" has been canceled" : "„%1$s“ е отказано",
"Re: %1$s" : "Re: %1$s",
- "%1$s has responded your invitation" : "%1$s отговори на вашата покана",
"Invitation: %1$s" : "Покана: %1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s желае да ви покани на „%2$s“",
"Organizer:" : "Organizer/организатор/:",
diff --git a/apps/dav/l10n/bg.json b/apps/dav/l10n/bg.json
index 7fe1597b807..cf32f83fd7e 100644
--- a/apps/dav/l10n/bg.json
+++ b/apps/dav/l10n/bg.json
@@ -72,7 +72,6 @@
"Cancelled: %1$s" : "Отказан: %1$s",
"\"%1$s\" has been canceled" : "„%1$s“ е отказано",
"Re: %1$s" : "Re: %1$s",
- "%1$s has responded your invitation" : "%1$s отговори на вашата покана",
"Invitation: %1$s" : "Покана: %1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s желае да ви покани на „%2$s“",
"Organizer:" : "Organizer/организатор/:",
diff --git a/apps/dav/l10n/cs.js b/apps/dav/l10n/cs.js
index 869065e72cd..fa814d575e0 100644
--- a/apps/dav/l10n/cs.js
+++ b/apps/dav/l10n/cs.js
@@ -74,7 +74,7 @@ OC.L10N.register(
"Cancelled: %1$s" : "Zrušeno: %1$s",
"\"%1$s\" has been canceled" : "„%1$s“ bylo zrušeno",
"Re: %1$s" : "Odp.: %1$s",
- "%1$s has responded your invitation" : "%1$s odpověděl(a) na vaši pozvánku",
+ "%1$s has responded to your invitation" : "%1$s odpověděl(a) na vaši pozvánku",
"Invitation: %1$s" : "Pozvánka: %1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s by vás ráda pozval(a) na „%2$s“",
"Organizer:" : "Organizátor:",
diff --git a/apps/dav/l10n/cs.json b/apps/dav/l10n/cs.json
index d19552b5837..9234e5b9d99 100644
--- a/apps/dav/l10n/cs.json
+++ b/apps/dav/l10n/cs.json
@@ -72,7 +72,7 @@
"Cancelled: %1$s" : "Zrušeno: %1$s",
"\"%1$s\" has been canceled" : "„%1$s“ bylo zrušeno",
"Re: %1$s" : "Odp.: %1$s",
- "%1$s has responded your invitation" : "%1$s odpověděl(a) na vaši pozvánku",
+ "%1$s has responded to your invitation" : "%1$s odpověděl(a) na vaši pozvánku",
"Invitation: %1$s" : "Pozvánka: %1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s by vás ráda pozval(a) na „%2$s“",
"Organizer:" : "Organizátor:",
diff --git a/apps/dav/l10n/de.js b/apps/dav/l10n/de.js
index 2efac85aa93..0765e4406e5 100644
--- a/apps/dav/l10n/de.js
+++ b/apps/dav/l10n/de.js
@@ -74,7 +74,7 @@ OC.L10N.register(
"Cancelled: %1$s" : "Abgesagt: %1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" wurde abgebrochen.",
"Re: %1$s" : "Re: %1$s",
- "%1$s has responded your invitation" : "%1$s hat auf deine Einladunge geantwortet.",
+ "%1$s has responded to your invitation" : "%1$s hat auf deine Einladung geantwortet.",
"Invitation: %1$s" : "Einladung: %1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s möchte dich zu \"%2$s\" einladen.",
"Organizer:" : "Organisator:",
diff --git a/apps/dav/l10n/de.json b/apps/dav/l10n/de.json
index 48b182bd607..368950ad5d1 100644
--- a/apps/dav/l10n/de.json
+++ b/apps/dav/l10n/de.json
@@ -72,7 +72,7 @@
"Cancelled: %1$s" : "Abgesagt: %1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" wurde abgebrochen.",
"Re: %1$s" : "Re: %1$s",
- "%1$s has responded your invitation" : "%1$s hat auf deine Einladunge geantwortet.",
+ "%1$s has responded to your invitation" : "%1$s hat auf deine Einladung geantwortet.",
"Invitation: %1$s" : "Einladung: %1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s möchte dich zu \"%2$s\" einladen.",
"Organizer:" : "Organisator:",
diff --git a/apps/dav/l10n/de_DE.js b/apps/dav/l10n/de_DE.js
index 7d7dfbbfa93..56108080714 100644
--- a/apps/dav/l10n/de_DE.js
+++ b/apps/dav/l10n/de_DE.js
@@ -74,7 +74,6 @@ OC.L10N.register(
"Cancelled: %1$s" : "Abgesagt: %1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" wurde abgebrochen",
"Re: %1$s" : "Re: %1$s",
- "%1$s has responded your invitation" : "%1$s hat auf Ihre Einladung geantwortet",
"Invitation: %1$s" : "Einladung: %1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s möchte Sie zu \"%2$s\" einladen",
"Organizer:" : "Organisator:",
diff --git a/apps/dav/l10n/de_DE.json b/apps/dav/l10n/de_DE.json
index 7576cf997a1..e35fe2889d0 100644
--- a/apps/dav/l10n/de_DE.json
+++ b/apps/dav/l10n/de_DE.json
@@ -72,7 +72,6 @@
"Cancelled: %1$s" : "Abgesagt: %1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" wurde abgebrochen",
"Re: %1$s" : "Re: %1$s",
- "%1$s has responded your invitation" : "%1$s hat auf Ihre Einladung geantwortet",
"Invitation: %1$s" : "Einladung: %1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s möchte Sie zu \"%2$s\" einladen",
"Organizer:" : "Organisator:",
diff --git a/apps/dav/l10n/en_GB.js b/apps/dav/l10n/en_GB.js
index 30685eff91b..98799a3bac3 100644
--- a/apps/dav/l10n/en_GB.js
+++ b/apps/dav/l10n/en_GB.js
@@ -74,7 +74,6 @@ OC.L10N.register(
"Cancelled: %1$s" : "Cancelled: %1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" has been cancelled",
"Re: %1$s" : "Re: %1$s",
- "%1$s has responded your invitation" : "%1$s has responded to your invitation",
"Invitation: %1$s" : "Invitation: %1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s would like to invite you to \"%2$s\"",
"Organizer:" : "Organiser:",
diff --git a/apps/dav/l10n/en_GB.json b/apps/dav/l10n/en_GB.json
index a00e2eec923..e74237ba962 100644
--- a/apps/dav/l10n/en_GB.json
+++ b/apps/dav/l10n/en_GB.json
@@ -72,7 +72,6 @@
"Cancelled: %1$s" : "Cancelled: %1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" has been cancelled",
"Re: %1$s" : "Re: %1$s",
- "%1$s has responded your invitation" : "%1$s has responded to your invitation",
"Invitation: %1$s" : "Invitation: %1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s would like to invite you to \"%2$s\"",
"Organizer:" : "Organiser:",
diff --git a/apps/dav/l10n/es.js b/apps/dav/l10n/es.js
index 3099a51ac17..507b822cb20 100644
--- a/apps/dav/l10n/es.js
+++ b/apps/dav/l10n/es.js
@@ -74,7 +74,7 @@ OC.L10N.register(
"Cancelled: %1$s" : "Cancelado: %1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" ha sido cancelada",
"Re: %1$s" : "Re: %1$s",
- "%1$s has responded your invitation" : "%1$s ha respondido a su invitación",
+ "%1$s has responded to your invitation" : "%1$s ha respondido a su invitación",
"Invitation: %1$s" : "Invitación: %1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s desea invitarle a \"%2$s\"",
"Organizer:" : "Organizador:",
diff --git a/apps/dav/l10n/es.json b/apps/dav/l10n/es.json
index ec7652108c3..d0b55436281 100644
--- a/apps/dav/l10n/es.json
+++ b/apps/dav/l10n/es.json
@@ -72,7 +72,7 @@
"Cancelled: %1$s" : "Cancelado: %1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" ha sido cancelada",
"Re: %1$s" : "Re: %1$s",
- "%1$s has responded your invitation" : "%1$s ha respondido a su invitación",
+ "%1$s has responded to your invitation" : "%1$s ha respondido a su invitación",
"Invitation: %1$s" : "Invitación: %1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s desea invitarle a \"%2$s\"",
"Organizer:" : "Organizador:",
diff --git a/apps/dav/l10n/eu.js b/apps/dav/l10n/eu.js
index fb89e2531a3..fbc0f4f196f 100644
--- a/apps/dav/l10n/eu.js
+++ b/apps/dav/l10n/eu.js
@@ -74,7 +74,6 @@ OC.L10N.register(
"Cancelled: %1$s" : "Utzita: %1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" bertan behera utzi da",
"Re: %1$s" : "Er: %1$s",
- "%1$s has responded your invitation" : "%1$s-k zure gonbidapena erantzun du",
"Invitation: %1$s" : "Gonbidapena: %1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s-k \"%2$s\"-ra gonbidatu nahi zaitu",
"Organizer:" : "Antolatzailea:",
diff --git a/apps/dav/l10n/eu.json b/apps/dav/l10n/eu.json
index 08654610fec..88f2cfd40d2 100644
--- a/apps/dav/l10n/eu.json
+++ b/apps/dav/l10n/eu.json
@@ -72,7 +72,6 @@
"Cancelled: %1$s" : "Utzita: %1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" bertan behera utzi da",
"Re: %1$s" : "Er: %1$s",
- "%1$s has responded your invitation" : "%1$s-k zure gonbidapena erantzun du",
"Invitation: %1$s" : "Gonbidapena: %1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s-k \"%2$s\"-ra gonbidatu nahi zaitu",
"Organizer:" : "Antolatzailea:",
diff --git a/apps/dav/l10n/fr.js b/apps/dav/l10n/fr.js
index fba1e4d2a04..97a417a8609 100644
--- a/apps/dav/l10n/fr.js
+++ b/apps/dav/l10n/fr.js
@@ -74,7 +74,7 @@ OC.L10N.register(
"Cancelled: %1$s" : "Annulé : %1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" a été annulé(e)",
"Re: %1$s" : "Re : %1$s",
- "%1$s has responded your invitation" : "\"1%1$s\" a répondu à votre invitation",
+ "%1$s has responded to your invitation" : "%1$s a répondu à votre invitation",
"Invitation: %1$s" : "Invitation : %1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s souhaite vous inviter à \"%2$s\"",
"Organizer:" : "Organisateur :",
diff --git a/apps/dav/l10n/fr.json b/apps/dav/l10n/fr.json
index e78bd7c0ec2..f07134e100f 100644
--- a/apps/dav/l10n/fr.json
+++ b/apps/dav/l10n/fr.json
@@ -72,7 +72,7 @@
"Cancelled: %1$s" : "Annulé : %1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" a été annulé(e)",
"Re: %1$s" : "Re : %1$s",
- "%1$s has responded your invitation" : "\"1%1$s\" a répondu à votre invitation",
+ "%1$s has responded to your invitation" : "%1$s a répondu à votre invitation",
"Invitation: %1$s" : "Invitation : %1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s souhaite vous inviter à \"%2$s\"",
"Organizer:" : "Organisateur :",
diff --git a/apps/dav/l10n/hu.js b/apps/dav/l10n/hu.js
index 9c3f9ecdc9d..d47163cf8f5 100644
--- a/apps/dav/l10n/hu.js
+++ b/apps/dav/l10n/hu.js
@@ -74,7 +74,6 @@ OC.L10N.register(
"Cancelled: %1$s" : "Lemondva: %1$s",
"\"%1$s\" has been canceled" : "A következőt le lett mondva: „%1$s”",
"Re: %1$s" : "Vá: %1$s",
- "%1$s has responded your invitation" : "%1$s válaszolt a meghívására",
"Invitation: %1$s" : "Meghívó: %1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s meg szeretné hívni a következőre: „%2$s”",
"Organizer:" : "Szervező:",
diff --git a/apps/dav/l10n/hu.json b/apps/dav/l10n/hu.json
index 65b14219d26..60ef5e10029 100644
--- a/apps/dav/l10n/hu.json
+++ b/apps/dav/l10n/hu.json
@@ -72,7 +72,6 @@
"Cancelled: %1$s" : "Lemondva: %1$s",
"\"%1$s\" has been canceled" : "A következőt le lett mondva: „%1$s”",
"Re: %1$s" : "Vá: %1$s",
- "%1$s has responded your invitation" : "%1$s válaszolt a meghívására",
"Invitation: %1$s" : "Meghívó: %1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s meg szeretné hívni a következőre: „%2$s”",
"Organizer:" : "Szervező:",
diff --git a/apps/dav/l10n/pt_BR.js b/apps/dav/l10n/pt_BR.js
index b30e5d9d19f..802d9531aba 100644
--- a/apps/dav/l10n/pt_BR.js
+++ b/apps/dav/l10n/pt_BR.js
@@ -74,7 +74,7 @@ OC.L10N.register(
"Cancelled: %1$s" : "Cancelado: %1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" foi cancelado",
"Re: %1$s" : "Remetente: %1$s",
- "%1$s has responded your invitation" : "%1$s respondeu ao seu convite",
+ "%1$s has responded to your invitation" : "%1$s respondeu ao seu convite",
"Invitation: %1$s" : "Convite: %1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s gostaria de convidá-lo para \"%2$s\"",
"Organizer:" : "Organizador:",
diff --git a/apps/dav/l10n/pt_BR.json b/apps/dav/l10n/pt_BR.json
index 1653ffc0fa9..4224071d29d 100644
--- a/apps/dav/l10n/pt_BR.json
+++ b/apps/dav/l10n/pt_BR.json
@@ -72,7 +72,7 @@
"Cancelled: %1$s" : "Cancelado: %1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" foi cancelado",
"Re: %1$s" : "Remetente: %1$s",
- "%1$s has responded your invitation" : "%1$s respondeu ao seu convite",
+ "%1$s has responded to your invitation" : "%1$s respondeu ao seu convite",
"Invitation: %1$s" : "Convite: %1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s gostaria de convidá-lo para \"%2$s\"",
"Organizer:" : "Organizador:",
diff --git a/apps/dav/l10n/tr.js b/apps/dav/l10n/tr.js
index 266b7430c0c..88f4d527f24 100644
--- a/apps/dav/l10n/tr.js
+++ b/apps/dav/l10n/tr.js
@@ -74,7 +74,7 @@ OC.L10N.register(
"Cancelled: %1$s" : "İptal edildi: %1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" iptal edildi",
"Re: %1$s" : "Ynt: %1$s",
- "%1$s has responded your invitation" : "%1$s çağrınızı yanıtladı",
+ "%1$s has responded to your invitation" : "%1$s çağrınızı yanıtladı",
"Invitation: %1$s" : "Çağrı: %1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s, size \"%2$s\" için çağrı gönderdi",
"Organizer:" : "Düzenleyen:",
diff --git a/apps/dav/l10n/tr.json b/apps/dav/l10n/tr.json
index 4d30723a0c1..204a5e4e861 100644
--- a/apps/dav/l10n/tr.json
+++ b/apps/dav/l10n/tr.json
@@ -72,7 +72,7 @@
"Cancelled: %1$s" : "İptal edildi: %1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" iptal edildi",
"Re: %1$s" : "Ynt: %1$s",
- "%1$s has responded your invitation" : "%1$s çağrınızı yanıtladı",
+ "%1$s has responded to your invitation" : "%1$s çağrınızı yanıtladı",
"Invitation: %1$s" : "Çağrı: %1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s, size \"%2$s\" için çağrı gönderdi",
"Organizer:" : "Düzenleyen:",
diff --git a/apps/dav/l10n/uk.js b/apps/dav/l10n/uk.js
index 7cddc8ebbe2..a1eba24d182 100644
--- a/apps/dav/l10n/uk.js
+++ b/apps/dav/l10n/uk.js
@@ -74,7 +74,6 @@ OC.L10N.register(
"Cancelled: %1$s" : "Скасовано: %1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" скасовано",
"Re: %1$s" : "Re: %1$s",
- "%1$s has responded your invitation" : "%1$s відповів на ваше запрошення",
"Invitation: %1$s" : "Запрошення: %1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s запрошує вас до \"%2$s\"",
"Organizer:" : "Організатор:",
diff --git a/apps/dav/l10n/uk.json b/apps/dav/l10n/uk.json
index 40f426ceb88..592573e44ec 100644
--- a/apps/dav/l10n/uk.json
+++ b/apps/dav/l10n/uk.json
@@ -72,7 +72,6 @@
"Cancelled: %1$s" : "Скасовано: %1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" скасовано",
"Re: %1$s" : "Re: %1$s",
- "%1$s has responded your invitation" : "%1$s відповів на ваше запрошення",
"Invitation: %1$s" : "Запрошення: %1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s запрошує вас до \"%2$s\"",
"Organizer:" : "Організатор:",
diff --git a/apps/dav/l10n/zh_HK.js b/apps/dav/l10n/zh_HK.js
index 1f23f3152d2..92f05baa83a 100644
--- a/apps/dav/l10n/zh_HK.js
+++ b/apps/dav/l10n/zh_HK.js
@@ -74,7 +74,6 @@ OC.L10N.register(
"Cancelled: %1$s" : "已取消:%1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" 已被取消",
"Re: %1$s" : "關於: %1$s",
- "%1$s has responded your invitation" : "%1$s 已回應您的邀請",
"Invitation: %1$s" : "邀請:%1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s 想邀請您加入“%2$s”",
"Organizer:" : "主辦單位:",
diff --git a/apps/dav/l10n/zh_HK.json b/apps/dav/l10n/zh_HK.json
index 9b9268c1c80..e8916101bb2 100644
--- a/apps/dav/l10n/zh_HK.json
+++ b/apps/dav/l10n/zh_HK.json
@@ -72,7 +72,6 @@
"Cancelled: %1$s" : "已取消:%1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" 已被取消",
"Re: %1$s" : "關於: %1$s",
- "%1$s has responded your invitation" : "%1$s 已回應您的邀請",
"Invitation: %1$s" : "邀請:%1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s 想邀請您加入“%2$s”",
"Organizer:" : "主辦單位:",
diff --git a/apps/dav/l10n/zh_TW.js b/apps/dav/l10n/zh_TW.js
index 609d977a68b..38f38a0e42e 100644
--- a/apps/dav/l10n/zh_TW.js
+++ b/apps/dav/l10n/zh_TW.js
@@ -74,7 +74,7 @@ OC.L10N.register(
"Cancelled: %1$s" : "已取消:%1$s",
"\"%1$s\" has been canceled" : "「%1$s」已取消",
"Re: %1$s" : "回覆:%1$s",
- "%1$s has responded your invitation" : "%1$s 已回應您的邀請",
+ "%1$s has responded to your invitation" : "%1$s 已回應您的邀請",
"Invitation: %1$s" : "邀請:%1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s 想邀請您加入「%2$s」",
"Organizer:" : "組織者:",
diff --git a/apps/dav/l10n/zh_TW.json b/apps/dav/l10n/zh_TW.json
index 335fcef9623..86fd67cc337 100644
--- a/apps/dav/l10n/zh_TW.json
+++ b/apps/dav/l10n/zh_TW.json
@@ -72,7 +72,7 @@
"Cancelled: %1$s" : "已取消:%1$s",
"\"%1$s\" has been canceled" : "「%1$s」已取消",
"Re: %1$s" : "回覆:%1$s",
- "%1$s has responded your invitation" : "%1$s 已回應您的邀請",
+ "%1$s has responded to your invitation" : "%1$s 已回應您的邀請",
"Invitation: %1$s" : "邀請:%1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s 想邀請您加入「%2$s」",
"Organizer:" : "組織者:",
diff --git a/apps/dav/lib/CalDAV/Schedule/IMipService.php b/apps/dav/lib/CalDAV/Schedule/IMipService.php
index 88f8bb8f54e..3e8e72bd2e4 100644
--- a/apps/dav/lib/CalDAV/Schedule/IMipService.php
+++ b/apps/dav/lib/CalDAV/Schedule/IMipService.php
@@ -369,7 +369,7 @@ class IMipService {
} elseif ($method === IMipPlugin::METHOD_REPLY) {
// TRANSLATORS Subject for email, when an invitation is replied to. Ex: "Re: {{Event Name}}"
$template->setSubject($this->l10n->t('Re: %1$s', [$summary]));
- $template->addHeading($this->l10n->t('%1$s has responded your invitation', [$sender]));
+ $template->addHeading($this->l10n->t('%1$s has responded to your invitation', [$sender]));
} else {
// TRANSLATORS Subject for email, when an invitation is sent. Ex: "Invitation: {{Event Name}}"
$template->setSubject($this->l10n->t('Invitation: %1$s', [$summary]));
diff --git a/apps/files/l10n/af.js b/apps/files/l10n/af.js
index d5e9a4efb74..824a32a3333 100644
--- a/apps/files/l10n/af.js
+++ b/apps/files/l10n/af.js
@@ -110,6 +110,7 @@ OC.L10N.register(
"File Management" : "Lêerbestuur",
"Unknown error" : "Onbekende fout",
"Show hidden files" : "Vertoon verborge lêers ",
+ "WebDAV" : "WebDAV",
"Cancel" : "Kanselleer",
"Create" : "Skep",
"No files in here" : "Geen lêers hierbinne nie",
@@ -133,7 +134,6 @@ OC.L10N.register(
"Unlimited" : "Onbeperkte",
"%s used" : "%s gebruik",
"%1$s of %2$s used" : "%1$s van %2$s gebruik",
- "Settings" : "Instellings",
- "WebDAV" : "WebDAV"
+ "Settings" : "Instellings"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/af.json b/apps/files/l10n/af.json
index fc4e6deaef7..ad82bf4233f 100644
--- a/apps/files/l10n/af.json
+++ b/apps/files/l10n/af.json
@@ -108,6 +108,7 @@
"File Management" : "Lêerbestuur",
"Unknown error" : "Onbekende fout",
"Show hidden files" : "Vertoon verborge lêers ",
+ "WebDAV" : "WebDAV",
"Cancel" : "Kanselleer",
"Create" : "Skep",
"No files in here" : "Geen lêers hierbinne nie",
@@ -131,7 +132,6 @@
"Unlimited" : "Onbeperkte",
"%s used" : "%s gebruik",
"%1$s of %2$s used" : "%1$s van %2$s gebruik",
- "Settings" : "Instellings",
- "WebDAV" : "WebDAV"
+ "Settings" : "Instellings"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/ar.js b/apps/files/l10n/ar.js
index 1e71ece30bc..c05e42eb606 100644
--- a/apps/files/l10n/ar.js
+++ b/apps/files/l10n/ar.js
@@ -170,6 +170,7 @@ OC.L10N.register(
"Show hidden files" : "عرض الملفات المخفية",
"Crop image previews" : "اقتصاص صورة العروض",
"Additional settings" : "الإعدادات المتقدمة",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "نسخ الرابط",
"Use this address to access your Files via WebDAV" : "استخدم هذا العنوان للوصول للملفات عبر WebDAV",
"Unable to change the favourite state of the file" : "لم نستطع تغير الحالة المفضلة للملف",
@@ -212,7 +213,6 @@ OC.L10N.register(
"Cannot transfer ownership of a file or folder you don't own" : "لا يمكنك تحويل ملكية ملف أو مجلد ليس ملكك",
"%s used" : "%s مُستخدَم",
"%1$s of %2$s used" : "تم استخدام %1$s من %2$s",
- "Settings" : "الإعدادات",
- "WebDAV" : "WebDAV"
+ "Settings" : "الإعدادات"
},
"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;");
diff --git a/apps/files/l10n/ar.json b/apps/files/l10n/ar.json
index 544ee78740b..880a7d01340 100644
--- a/apps/files/l10n/ar.json
+++ b/apps/files/l10n/ar.json
@@ -168,6 +168,7 @@
"Show hidden files" : "عرض الملفات المخفية",
"Crop image previews" : "اقتصاص صورة العروض",
"Additional settings" : "الإعدادات المتقدمة",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "نسخ الرابط",
"Use this address to access your Files via WebDAV" : "استخدم هذا العنوان للوصول للملفات عبر WebDAV",
"Unable to change the favourite state of the file" : "لم نستطع تغير الحالة المفضلة للملف",
@@ -210,7 +211,6 @@
"Cannot transfer ownership of a file or folder you don't own" : "لا يمكنك تحويل ملكية ملف أو مجلد ليس ملكك",
"%s used" : "%s مُستخدَم",
"%1$s of %2$s used" : "تم استخدام %1$s من %2$s",
- "Settings" : "الإعدادات",
- "WebDAV" : "WebDAV"
+ "Settings" : "الإعدادات"
},"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"
} \ No newline at end of file
diff --git a/apps/files/l10n/bg.js b/apps/files/l10n/bg.js
index b4958a4e117..b14ebfb3316 100644
--- a/apps/files/l10n/bg.js
+++ b/apps/files/l10n/bg.js
@@ -187,11 +187,10 @@ OC.L10N.register(
"Show hidden files" : "Показвай и скрити файлове",
"Crop image previews" : "Изрязване на визуализациите на изображение",
"Additional settings" : "Допълнителни настройки",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Копиране в клипборда",
"Use this address to access your Files via WebDAV" : "Ползвайте този адрес за достъп до файловете си чрез WebDAV",
"Clipboard is not available" : "Клипбордът не е достъпен",
- "Webdav URL copied to clipboard" : "Webdav URL адрес е копиран в клипборда",
"Unable to change the favourite state of the file" : "Не може да се промени състоянието за предпочитане на файла",
"Error while loading the file data" : "Грешка при зареждането на файловете.",
"Pick a template for {name}" : "Избор на шаблон за {name}",
@@ -233,7 +232,6 @@ OC.L10N.register(
"%s used" : "%s използвани",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s от %2$s използвани",
- "Settings" : "Настройки",
- "WebDAV" : "WebDAV"
+ "Settings" : "Настройки"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/bg.json b/apps/files/l10n/bg.json
index 5069275f9af..23134c49c5c 100644
--- a/apps/files/l10n/bg.json
+++ b/apps/files/l10n/bg.json
@@ -185,11 +185,10 @@
"Show hidden files" : "Показвай и скрити файлове",
"Crop image previews" : "Изрязване на визуализациите на изображение",
"Additional settings" : "Допълнителни настройки",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Копиране в клипборда",
"Use this address to access your Files via WebDAV" : "Ползвайте този адрес за достъп до файловете си чрез WebDAV",
"Clipboard is not available" : "Клипбордът не е достъпен",
- "Webdav URL copied to clipboard" : "Webdav URL адрес е копиран в клипборда",
"Unable to change the favourite state of the file" : "Не може да се промени състоянието за предпочитане на файла",
"Error while loading the file data" : "Грешка при зареждането на файловете.",
"Pick a template for {name}" : "Избор на шаблон за {name}",
@@ -231,7 +230,6 @@
"%s used" : "%s използвани",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s от %2$s използвани",
- "Settings" : "Настройки",
- "WebDAV" : "WebDAV"
+ "Settings" : "Настройки"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/br.js b/apps/files/l10n/br.js
index 109d7f89163..fda7fa2c417 100644
--- a/apps/files/l10n/br.js
+++ b/apps/files/l10n/br.js
@@ -152,6 +152,7 @@ OC.L10N.register(
"Ownership transfer request sent" : "Kaset eo bet ar goulenn treuzkas perc'henniezh",
"Show hidden files" : "Diskouez ar restroù koachet",
"Additional settings" : "Stummoù ouzhpenn",
+ "WebDAV" : "WebDAV",
"Use this address to access your Files via WebDAV" : "Implijit ar chomlec'h-mañ evit tizhout ho restroù dre WebDAV",
"Unable to change the favourite state of the file" : "Dibosupl eo cheñch stad pennroll ar restr",
"Error while loading the file data" : "Ur fazi zo bet en ur gargañ roadennoùar restr",
@@ -184,7 +185,6 @@ OC.L10N.register(
"Cannot transfer ownership of a file or folder you don't own" : "N'hallit ket treuzkas perc'henniezh ur restr pe un teuliad ma n'oc'h ket e berc'henn",
"%s used" : "%s implijet",
"%1$s of %2$s used" : "%1$s diwar%2$s implijet",
- "Settings" : "Arventennoù",
- "WebDAV" : "WebDAV"
+ "Settings" : "Arventennoù"
},
"nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);");
diff --git a/apps/files/l10n/br.json b/apps/files/l10n/br.json
index 2a3c42bbf75..65387729de4 100644
--- a/apps/files/l10n/br.json
+++ b/apps/files/l10n/br.json
@@ -150,6 +150,7 @@
"Ownership transfer request sent" : "Kaset eo bet ar goulenn treuzkas perc'henniezh",
"Show hidden files" : "Diskouez ar restroù koachet",
"Additional settings" : "Stummoù ouzhpenn",
+ "WebDAV" : "WebDAV",
"Use this address to access your Files via WebDAV" : "Implijit ar chomlec'h-mañ evit tizhout ho restroù dre WebDAV",
"Unable to change the favourite state of the file" : "Dibosupl eo cheñch stad pennroll ar restr",
"Error while loading the file data" : "Ur fazi zo bet en ur gargañ roadennoùar restr",
@@ -182,7 +183,6 @@
"Cannot transfer ownership of a file or folder you don't own" : "N'hallit ket treuzkas perc'henniezh ur restr pe un teuliad ma n'oc'h ket e berc'henn",
"%s used" : "%s implijet",
"%1$s of %2$s used" : "%1$s diwar%2$s implijet",
- "Settings" : "Arventennoù",
- "WebDAV" : "WebDAV"
+ "Settings" : "Arventennoù"
},"pluralForm" :"nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);"
} \ No newline at end of file
diff --git a/apps/files/l10n/ca.js b/apps/files/l10n/ca.js
index f291044999f..d89ca341bac 100644
--- a/apps/files/l10n/ca.js
+++ b/apps/files/l10n/ca.js
@@ -181,6 +181,7 @@ OC.L10N.register(
"Show hidden files" : "Mostra els fitxers ocults",
"Crop image previews" : "Retalla les previsualitzacions de les imatges",
"Additional settings" : "Paràmetres addicionals",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copia-ho al porta-retalls",
"Use this address to access your Files via WebDAV" : "Utilitzeu aquesta adreça per a accedir als vostres fitxers mitjançant WebDAV",
"Clipboard is not available" : "El porta-retalls no està disponible",
@@ -225,7 +226,6 @@ OC.L10N.register(
"%s used" : "%s en ús",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s de %2$s en ús",
- "Settings" : "Paràmetres",
- "WebDAV" : "WebDAV"
+ "Settings" : "Paràmetres"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/ca.json b/apps/files/l10n/ca.json
index 56b79a79468..29db7646b50 100644
--- a/apps/files/l10n/ca.json
+++ b/apps/files/l10n/ca.json
@@ -179,6 +179,7 @@
"Show hidden files" : "Mostra els fitxers ocults",
"Crop image previews" : "Retalla les previsualitzacions de les imatges",
"Additional settings" : "Paràmetres addicionals",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copia-ho al porta-retalls",
"Use this address to access your Files via WebDAV" : "Utilitzeu aquesta adreça per a accedir als vostres fitxers mitjançant WebDAV",
"Clipboard is not available" : "El porta-retalls no està disponible",
@@ -223,7 +224,6 @@
"%s used" : "%s en ús",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s de %2$s en ús",
- "Settings" : "Paràmetres",
- "WebDAV" : "WebDAV"
+ "Settings" : "Paràmetres"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/cs.js b/apps/files/l10n/cs.js
index dff77963bf7..3c0ccaaba39 100644
--- a/apps/files/l10n/cs.js
+++ b/apps/files/l10n/cs.js
@@ -187,11 +187,11 @@ OC.L10N.register(
"Show hidden files" : "Zobrazit skryté soubory",
"Crop image previews" : "Oříznout náhledy obrázků",
"Additional settings" : "Další nastavení",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Zkopírovat do schránky",
"Use this address to access your Files via WebDAV" : "Tuto adresu použijte pro přístup k vašim souborům prostřednictvím protokolu WebDAV",
"Clipboard is not available" : "Schránka není k dispozici",
- "Webdav URL copied to clipboard" : "Webdav URL zkopírována do schránky",
+ "WebDAV URL copied to clipboard" : "WebDAV URL zkopírována do schránky",
"Unable to change the favourite state of the file" : "Nedaří se změnit stav „oblíbené“ souboru",
"Error while loading the file data" : "Chyba při načítání dat souboru",
"Pick a template for {name}" : "Vyberte si šablonu pro {name}",
@@ -233,7 +233,6 @@ OC.L10N.register(
"%s used" : "%s použito",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s z %2$s použito",
- "Settings" : "Nastavení",
- "WebDAV" : "WebDAV"
+ "Settings" : "Nastavení"
},
"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;");
diff --git a/apps/files/l10n/cs.json b/apps/files/l10n/cs.json
index 0ff955bc4d6..469735b4768 100644
--- a/apps/files/l10n/cs.json
+++ b/apps/files/l10n/cs.json
@@ -185,11 +185,11 @@
"Show hidden files" : "Zobrazit skryté soubory",
"Crop image previews" : "Oříznout náhledy obrázků",
"Additional settings" : "Další nastavení",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Zkopírovat do schránky",
"Use this address to access your Files via WebDAV" : "Tuto adresu použijte pro přístup k vašim souborům prostřednictvím protokolu WebDAV",
"Clipboard is not available" : "Schránka není k dispozici",
- "Webdav URL copied to clipboard" : "Webdav URL zkopírována do schránky",
+ "WebDAV URL copied to clipboard" : "WebDAV URL zkopírována do schránky",
"Unable to change the favourite state of the file" : "Nedaří se změnit stav „oblíbené“ souboru",
"Error while loading the file data" : "Chyba při načítání dat souboru",
"Pick a template for {name}" : "Vyberte si šablonu pro {name}",
@@ -231,7 +231,6 @@
"%s used" : "%s použito",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s z %2$s použito",
- "Settings" : "Nastavení",
- "WebDAV" : "WebDAV"
+ "Settings" : "Nastavení"
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
} \ No newline at end of file
diff --git a/apps/files/l10n/da.js b/apps/files/l10n/da.js
index 3a866dcd9c6..2bd2068d91b 100644
--- a/apps/files/l10n/da.js
+++ b/apps/files/l10n/da.js
@@ -187,11 +187,10 @@ OC.L10N.register(
"Show hidden files" : "Vis skjulte filer",
"Crop image previews" : "Beskær forhåndsvisninger af billeder",
"Additional settings" : "Yderligere indstillinger",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopier til udklipsholder",
"Use this address to access your Files via WebDAV" : "Brug denne adresse til at få adgang til dine filer via WebDAV",
"Clipboard is not available" : "Udklipsholderen er ikke tilgængelig",
- "Webdav URL copied to clipboard" : "Webdav URL er kopieret til udklipsholderen",
"Unable to change the favourite state of the file" : "Kan ikke ændre favorittilstanden for filen",
"Error while loading the file data" : "Fejl under indlæsning af fildata",
"Pick a template for {name}" : "Vælg en skabelon til {name}",
@@ -233,7 +232,6 @@ OC.L10N.register(
"%s used" : "%s brugt",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s af %2$s brugt",
- "Settings" : "Indstillinger",
- "WebDAV" : "WebDAV"
+ "Settings" : "Indstillinger"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/da.json b/apps/files/l10n/da.json
index dd13459c6f3..0e1a1b75999 100644
--- a/apps/files/l10n/da.json
+++ b/apps/files/l10n/da.json
@@ -185,11 +185,10 @@
"Show hidden files" : "Vis skjulte filer",
"Crop image previews" : "Beskær forhåndsvisninger af billeder",
"Additional settings" : "Yderligere indstillinger",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopier til udklipsholder",
"Use this address to access your Files via WebDAV" : "Brug denne adresse til at få adgang til dine filer via WebDAV",
"Clipboard is not available" : "Udklipsholderen er ikke tilgængelig",
- "Webdav URL copied to clipboard" : "Webdav URL er kopieret til udklipsholderen",
"Unable to change the favourite state of the file" : "Kan ikke ændre favorittilstanden for filen",
"Error while loading the file data" : "Fejl under indlæsning af fildata",
"Pick a template for {name}" : "Vælg en skabelon til {name}",
@@ -231,7 +230,6 @@
"%s used" : "%s brugt",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s af %2$s brugt",
- "Settings" : "Indstillinger",
- "WebDAV" : "WebDAV"
+ "Settings" : "Indstillinger"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js
index 3d559248f71..db88cb19b4b 100644
--- a/apps/files/l10n/de.js
+++ b/apps/files/l10n/de.js
@@ -187,11 +187,10 @@ OC.L10N.register(
"Show hidden files" : "Versteckte Dateien anzeigen",
"Crop image previews" : "Bildvorschauen zuschneiden",
"Additional settings" : "Zusätzliche Einstellungen",
- "Webdav" : "WebDAV",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "In die Zwischenablage kopieren",
"Use this address to access your Files via WebDAV" : "Diese Adresse benutzen, um über WebDAV auf deine Dateien zuzugreifen",
"Clipboard is not available" : "Zwischenablage ist nicht verfügbar",
- "Webdav URL copied to clipboard" : "WebDAV-URL in die Zwischenablage kopiert",
"Unable to change the favourite state of the file" : "Der favorisierte Status der Datei konnte nicht geändert werden",
"Error while loading the file data" : "Fehler beim Laden der Datei-Daten",
"Pick a template for {name}" : "Eine Vorlage für {name} wählen",
@@ -233,7 +232,6 @@ OC.L10N.register(
"%s used" : "%s verwendet",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s von %2$s verwendet",
- "Settings" : "Einstellungen",
- "WebDAV" : "WebDAV"
+ "Settings" : "Einstellungen"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json
index d8e7a36dfcd..7b990001cdd 100644
--- a/apps/files/l10n/de.json
+++ b/apps/files/l10n/de.json
@@ -185,11 +185,10 @@
"Show hidden files" : "Versteckte Dateien anzeigen",
"Crop image previews" : "Bildvorschauen zuschneiden",
"Additional settings" : "Zusätzliche Einstellungen",
- "Webdav" : "WebDAV",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "In die Zwischenablage kopieren",
"Use this address to access your Files via WebDAV" : "Diese Adresse benutzen, um über WebDAV auf deine Dateien zuzugreifen",
"Clipboard is not available" : "Zwischenablage ist nicht verfügbar",
- "Webdav URL copied to clipboard" : "WebDAV-URL in die Zwischenablage kopiert",
"Unable to change the favourite state of the file" : "Der favorisierte Status der Datei konnte nicht geändert werden",
"Error while loading the file data" : "Fehler beim Laden der Datei-Daten",
"Pick a template for {name}" : "Eine Vorlage für {name} wählen",
@@ -231,7 +230,6 @@
"%s used" : "%s verwendet",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s von %2$s verwendet",
- "Settings" : "Einstellungen",
- "WebDAV" : "WebDAV"
+ "Settings" : "Einstellungen"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js
index ad9c6846fac..e51ef04688f 100644
--- a/apps/files/l10n/de_DE.js
+++ b/apps/files/l10n/de_DE.js
@@ -187,11 +187,10 @@ OC.L10N.register(
"Show hidden files" : "Versteckte Dateien anzeigen",
"Crop image previews" : "Bildvorschauen zuschneiden",
"Additional settings" : "Zusätzliche Einstellungen",
- "Webdav" : "WebDAV",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "In die Zwischenablage kopieren",
"Use this address to access your Files via WebDAV" : "Benutzen Sie diese Adresse, um via WebDAV auf Ihre Dateien zuzugreifen",
"Clipboard is not available" : "Zwischenablage ist nicht verfügbar",
- "Webdav URL copied to clipboard" : "WebDAV-URL in die Zwischenablage kopiert",
"Unable to change the favourite state of the file" : "Der favorisierte Status der Datei kann nicht geändert werden",
"Error while loading the file data" : "Fehler beim Laden der Datei-Daten",
"Pick a template for {name}" : "Eine Vorlage für {name} wählen",
@@ -233,7 +232,6 @@ OC.L10N.register(
"%s used" : "%s verwendet",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s von %2$s verwendet",
- "Settings" : "Einstellungen",
- "WebDAV" : "WebDAV"
+ "Settings" : "Einstellungen"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json
index 85f548bd8e0..06e30623727 100644
--- a/apps/files/l10n/de_DE.json
+++ b/apps/files/l10n/de_DE.json
@@ -185,11 +185,10 @@
"Show hidden files" : "Versteckte Dateien anzeigen",
"Crop image previews" : "Bildvorschauen zuschneiden",
"Additional settings" : "Zusätzliche Einstellungen",
- "Webdav" : "WebDAV",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "In die Zwischenablage kopieren",
"Use this address to access your Files via WebDAV" : "Benutzen Sie diese Adresse, um via WebDAV auf Ihre Dateien zuzugreifen",
"Clipboard is not available" : "Zwischenablage ist nicht verfügbar",
- "Webdav URL copied to clipboard" : "WebDAV-URL in die Zwischenablage kopiert",
"Unable to change the favourite state of the file" : "Der favorisierte Status der Datei kann nicht geändert werden",
"Error while loading the file data" : "Fehler beim Laden der Datei-Daten",
"Pick a template for {name}" : "Eine Vorlage für {name} wählen",
@@ -231,7 +230,6 @@
"%s used" : "%s verwendet",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s von %2$s verwendet",
- "Settings" : "Einstellungen",
- "WebDAV" : "WebDAV"
+ "Settings" : "Einstellungen"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/el.js b/apps/files/l10n/el.js
index 9079f9d4d26..f4408917228 100644
--- a/apps/files/l10n/el.js
+++ b/apps/files/l10n/el.js
@@ -181,6 +181,7 @@ OC.L10N.register(
"Show hidden files" : "Εμφάνιση κρυφών αρχείων",
"Crop image previews" : "Περικοπή προεπισκόπησης εικόνας",
"Additional settings" : "Επιπρόσθετες ρυθμίσεις",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Αντιγραφή στο πρόχειρο",
"Use this address to access your Files via WebDAV" : "Χρήση αυτής της διεύθυνση για πρόσβαση στα Αρχεία σας μέσω WebDAV",
"Clipboard is not available" : "Το πρόχειρο δεν είναι διαθέσιμο",
@@ -225,7 +226,6 @@ OC.L10N.register(
"%s used" : "%s σε χρήση",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "χρησιμοποιούνται %1$s από %2$s",
- "Settings" : "Ρυθμίσεις",
- "WebDAV" : "WebDAV"
+ "Settings" : "Ρυθμίσεις"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/el.json b/apps/files/l10n/el.json
index 221786a2690..e51578ceb6b 100644
--- a/apps/files/l10n/el.json
+++ b/apps/files/l10n/el.json
@@ -179,6 +179,7 @@
"Show hidden files" : "Εμφάνιση κρυφών αρχείων",
"Crop image previews" : "Περικοπή προεπισκόπησης εικόνας",
"Additional settings" : "Επιπρόσθετες ρυθμίσεις",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Αντιγραφή στο πρόχειρο",
"Use this address to access your Files via WebDAV" : "Χρήση αυτής της διεύθυνση για πρόσβαση στα Αρχεία σας μέσω WebDAV",
"Clipboard is not available" : "Το πρόχειρο δεν είναι διαθέσιμο",
@@ -223,7 +224,6 @@
"%s used" : "%s σε χρήση",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "χρησιμοποιούνται %1$s από %2$s",
- "Settings" : "Ρυθμίσεις",
- "WebDAV" : "WebDAV"
+ "Settings" : "Ρυθμίσεις"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/en_GB.js b/apps/files/l10n/en_GB.js
index 03ed36b91af..abadbfd20f0 100644
--- a/apps/files/l10n/en_GB.js
+++ b/apps/files/l10n/en_GB.js
@@ -187,11 +187,10 @@ OC.L10N.register(
"Show hidden files" : "Show hidden files",
"Crop image previews" : "Crop image previews",
"Additional settings" : "Additional settings",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copy to clipboard",
"Use this address to access your Files via WebDAV" : "Use this address to access your Files via WebDAV",
"Clipboard is not available" : "Clipboard is not available",
- "Webdav URL copied to clipboard" : "Webdav URL copied to clipboard",
"Unable to change the favourite state of the file" : "Unable to change the favourite state of the file",
"Error while loading the file data" : "Error while loading the file data",
"Pick a template for {name}" : "Pick a template for {name}",
@@ -233,7 +232,6 @@ OC.L10N.register(
"%s used" : "%s used",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s of %2$s used",
- "Settings" : "Settings",
- "WebDAV" : "WebDAV"
+ "Settings" : "Settings"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/en_GB.json b/apps/files/l10n/en_GB.json
index 24f16e88f23..a9a54818597 100644
--- a/apps/files/l10n/en_GB.json
+++ b/apps/files/l10n/en_GB.json
@@ -185,11 +185,10 @@
"Show hidden files" : "Show hidden files",
"Crop image previews" : "Crop image previews",
"Additional settings" : "Additional settings",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copy to clipboard",
"Use this address to access your Files via WebDAV" : "Use this address to access your Files via WebDAV",
"Clipboard is not available" : "Clipboard is not available",
- "Webdav URL copied to clipboard" : "Webdav URL copied to clipboard",
"Unable to change the favourite state of the file" : "Unable to change the favourite state of the file",
"Error while loading the file data" : "Error while loading the file data",
"Pick a template for {name}" : "Pick a template for {name}",
@@ -231,7 +230,6 @@
"%s used" : "%s used",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s of %2$s used",
- "Settings" : "Settings",
- "WebDAV" : "WebDAV"
+ "Settings" : "Settings"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/eo.js b/apps/files/l10n/eo.js
index b45e903909b..e2f3cc10fb6 100644
--- a/apps/files/l10n/eo.js
+++ b/apps/files/l10n/eo.js
@@ -134,6 +134,7 @@ OC.L10N.register(
"Unknown error" : "Nekonata eraro",
"Show hidden files" : "Montri kaŝitajn dosierojn",
"Additional settings" : "Plia agordo",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopii tondejen",
"Unable to change the favourite state of the file" : "Ne eblas ŝanĝi la staton pri pliŝatataĵo de la dosiero",
"Error while loading the file data" : "Eraro dum ŝargo de la dosierdatumoj",
@@ -166,7 +167,6 @@ OC.L10N.register(
"Unlimited" : "Senlima",
"%s used" : "%s uzataj",
"%1$s of %2$s used" : "%1$s uzataj el %2$s",
- "Settings" : "Agordo",
- "WebDAV" : "WebDAV"
+ "Settings" : "Agordo"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/eo.json b/apps/files/l10n/eo.json
index 8ea0970b551..a2f3e6654d2 100644
--- a/apps/files/l10n/eo.json
+++ b/apps/files/l10n/eo.json
@@ -132,6 +132,7 @@
"Unknown error" : "Nekonata eraro",
"Show hidden files" : "Montri kaŝitajn dosierojn",
"Additional settings" : "Plia agordo",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopii tondejen",
"Unable to change the favourite state of the file" : "Ne eblas ŝanĝi la staton pri pliŝatataĵo de la dosiero",
"Error while loading the file data" : "Eraro dum ŝargo de la dosierdatumoj",
@@ -164,7 +165,6 @@
"Unlimited" : "Senlima",
"%s used" : "%s uzataj",
"%1$s of %2$s used" : "%1$s uzataj el %2$s",
- "Settings" : "Agordo",
- "WebDAV" : "WebDAV"
+ "Settings" : "Agordo"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/es.js b/apps/files/l10n/es.js
index 09cb7629d87..462ea60857e 100644
--- a/apps/files/l10n/es.js
+++ b/apps/files/l10n/es.js
@@ -187,11 +187,11 @@ OC.L10N.register(
"Show hidden files" : "Mostrar archivos ocultos",
"Crop image previews" : "Recortar la previsualización de las imágenes",
"Additional settings" : "Configuración adicional",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Use this address to access your Files via WebDAV" : "Use esta dirección para acceder a tus archivos vía WebDAV",
"Clipboard is not available" : "El portapapeles no está disponible",
- "Webdav URL copied to clipboard" : "El URL Webdav URL fue copiado al portapapeles",
+ "WebDAV URL copied to clipboard" : "El URL Webdav URL fue copiado al portapapeles",
"Unable to change the favourite state of the file" : "No se ha podido cambiar el estado de favorito del fichero",
"Error while loading the file data" : "Error al cargar los datos del archivo",
"Pick a template for {name}" : "Elija una plantilla para {name}",
@@ -233,7 +233,6 @@ OC.L10N.register(
"%s used" : "usado %s",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Ajustes",
- "WebDAV" : "WebDAV"
+ "Settings" : "Ajustes"
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/files/l10n/es.json b/apps/files/l10n/es.json
index 2eb74c36093..09d9273463e 100644
--- a/apps/files/l10n/es.json
+++ b/apps/files/l10n/es.json
@@ -185,11 +185,11 @@
"Show hidden files" : "Mostrar archivos ocultos",
"Crop image previews" : "Recortar la previsualización de las imágenes",
"Additional settings" : "Configuración adicional",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Use this address to access your Files via WebDAV" : "Use esta dirección para acceder a tus archivos vía WebDAV",
"Clipboard is not available" : "El portapapeles no está disponible",
- "Webdav URL copied to clipboard" : "El URL Webdav URL fue copiado al portapapeles",
+ "WebDAV URL copied to clipboard" : "El URL Webdav URL fue copiado al portapapeles",
"Unable to change the favourite state of the file" : "No se ha podido cambiar el estado de favorito del fichero",
"Error while loading the file data" : "Error al cargar los datos del archivo",
"Pick a template for {name}" : "Elija una plantilla para {name}",
@@ -231,7 +231,6 @@
"%s used" : "usado %s",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Ajustes",
- "WebDAV" : "WebDAV"
+ "Settings" : "Ajustes"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/l10n/es_419.js b/apps/files/l10n/es_419.js
index 93e052541d5..459488bb7d2 100644
--- a/apps/files/l10n/es_419.js
+++ b/apps/files/l10n/es_419.js
@@ -108,6 +108,7 @@ OC.L10N.register(
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -134,7 +135,6 @@ OC.L10N.register(
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/files/l10n/es_419.json b/apps/files/l10n/es_419.json
index 1eeaa07da0d..6fc05fe77d2 100644
--- a/apps/files/l10n/es_419.json
+++ b/apps/files/l10n/es_419.json
@@ -106,6 +106,7 @@
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -132,7 +133,6 @@
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/l10n/es_AR.js b/apps/files/l10n/es_AR.js
index db605f9c910..d93cb97bb66 100644
--- a/apps/files/l10n/es_AR.js
+++ b/apps/files/l10n/es_AR.js
@@ -113,6 +113,7 @@ OC.L10N.register(
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -140,7 +141,6 @@ OC.L10N.register(
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/files/l10n/es_AR.json b/apps/files/l10n/es_AR.json
index 903eed42513..c9a42dc5c8c 100644
--- a/apps/files/l10n/es_AR.json
+++ b/apps/files/l10n/es_AR.json
@@ -111,6 +111,7 @@
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -138,7 +139,6 @@
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/l10n/es_CL.js b/apps/files/l10n/es_CL.js
index a343647c7ee..575b077da64 100644
--- a/apps/files/l10n/es_CL.js
+++ b/apps/files/l10n/es_CL.js
@@ -118,6 +118,7 @@ OC.L10N.register(
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -144,7 +145,6 @@ OC.L10N.register(
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/files/l10n/es_CL.json b/apps/files/l10n/es_CL.json
index d6a1ada3b69..a43faea3a93 100644
--- a/apps/files/l10n/es_CL.json
+++ b/apps/files/l10n/es_CL.json
@@ -116,6 +116,7 @@
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -142,7 +143,6 @@
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/l10n/es_CO.js b/apps/files/l10n/es_CO.js
index ca373276799..84ac03618a9 100644
--- a/apps/files/l10n/es_CO.js
+++ b/apps/files/l10n/es_CO.js
@@ -118,6 +118,7 @@ OC.L10N.register(
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -144,7 +145,6 @@ OC.L10N.register(
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/files/l10n/es_CO.json b/apps/files/l10n/es_CO.json
index 9c7bfeafa91..2ee87425147 100644
--- a/apps/files/l10n/es_CO.json
+++ b/apps/files/l10n/es_CO.json
@@ -116,6 +116,7 @@
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -142,7 +143,6 @@
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/l10n/es_CR.js b/apps/files/l10n/es_CR.js
index a3ce3c85e3a..060c65c3104 100644
--- a/apps/files/l10n/es_CR.js
+++ b/apps/files/l10n/es_CR.js
@@ -117,6 +117,7 @@ OC.L10N.register(
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -143,7 +144,6 @@ OC.L10N.register(
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/files/l10n/es_CR.json b/apps/files/l10n/es_CR.json
index e59f563bbe2..b042c438f32 100644
--- a/apps/files/l10n/es_CR.json
+++ b/apps/files/l10n/es_CR.json
@@ -115,6 +115,7 @@
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -141,7 +142,6 @@
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/l10n/es_DO.js b/apps/files/l10n/es_DO.js
index a3ce3c85e3a..060c65c3104 100644
--- a/apps/files/l10n/es_DO.js
+++ b/apps/files/l10n/es_DO.js
@@ -117,6 +117,7 @@ OC.L10N.register(
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -143,7 +144,6 @@ OC.L10N.register(
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/files/l10n/es_DO.json b/apps/files/l10n/es_DO.json
index e59f563bbe2..b042c438f32 100644
--- a/apps/files/l10n/es_DO.json
+++ b/apps/files/l10n/es_DO.json
@@ -115,6 +115,7 @@
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -141,7 +142,6 @@
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/l10n/es_EC.js b/apps/files/l10n/es_EC.js
index a3ce3c85e3a..060c65c3104 100644
--- a/apps/files/l10n/es_EC.js
+++ b/apps/files/l10n/es_EC.js
@@ -117,6 +117,7 @@ OC.L10N.register(
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -143,7 +144,6 @@ OC.L10N.register(
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/files/l10n/es_EC.json b/apps/files/l10n/es_EC.json
index e59f563bbe2..b042c438f32 100644
--- a/apps/files/l10n/es_EC.json
+++ b/apps/files/l10n/es_EC.json
@@ -115,6 +115,7 @@
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -141,7 +142,6 @@
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/l10n/es_GT.js b/apps/files/l10n/es_GT.js
index a3ce3c85e3a..060c65c3104 100644
--- a/apps/files/l10n/es_GT.js
+++ b/apps/files/l10n/es_GT.js
@@ -117,6 +117,7 @@ OC.L10N.register(
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -143,7 +144,6 @@ OC.L10N.register(
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/files/l10n/es_GT.json b/apps/files/l10n/es_GT.json
index e59f563bbe2..b042c438f32 100644
--- a/apps/files/l10n/es_GT.json
+++ b/apps/files/l10n/es_GT.json
@@ -115,6 +115,7 @@
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -141,7 +142,6 @@
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/l10n/es_HN.js b/apps/files/l10n/es_HN.js
index 93e052541d5..459488bb7d2 100644
--- a/apps/files/l10n/es_HN.js
+++ b/apps/files/l10n/es_HN.js
@@ -108,6 +108,7 @@ OC.L10N.register(
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -134,7 +135,6 @@ OC.L10N.register(
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/files/l10n/es_HN.json b/apps/files/l10n/es_HN.json
index 1eeaa07da0d..6fc05fe77d2 100644
--- a/apps/files/l10n/es_HN.json
+++ b/apps/files/l10n/es_HN.json
@@ -106,6 +106,7 @@
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -132,7 +133,6 @@
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/l10n/es_MX.js b/apps/files/l10n/es_MX.js
index ada8b124964..d033f9e02f9 100644
--- a/apps/files/l10n/es_MX.js
+++ b/apps/files/l10n/es_MX.js
@@ -187,11 +187,10 @@ OC.L10N.register(
"Show hidden files" : "Mostrar archivos ocultos",
"Crop image previews" : "Recortar la previsualización de las imágenes",
"Additional settings" : "Configuraciones adicionales",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Use this address to access your Files via WebDAV" : "Use esta dirección para acceder a tus archivos vía WebDAV",
"Clipboard is not available" : "El portapapeles no está disponible",
- "Webdav URL copied to clipboard" : "El URL Webdav fue copiado al portapapeles",
"Unable to change the favourite state of the file" : "No se ha podido cambiar el estado de favorito del fichero",
"Error while loading the file data" : "Error al cargar los datos del archivo",
"Pick a template for {name}" : "Elija una plantilla para {name}",
@@ -233,7 +232,6 @@ OC.L10N.register(
"%s used" : "%s usado",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/files/l10n/es_MX.json b/apps/files/l10n/es_MX.json
index 8fb622065fa..51b508fb43d 100644
--- a/apps/files/l10n/es_MX.json
+++ b/apps/files/l10n/es_MX.json
@@ -185,11 +185,10 @@
"Show hidden files" : "Mostrar archivos ocultos",
"Crop image previews" : "Recortar la previsualización de las imágenes",
"Additional settings" : "Configuraciones adicionales",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Use this address to access your Files via WebDAV" : "Use esta dirección para acceder a tus archivos vía WebDAV",
"Clipboard is not available" : "El portapapeles no está disponible",
- "Webdav URL copied to clipboard" : "El URL Webdav fue copiado al portapapeles",
"Unable to change the favourite state of the file" : "No se ha podido cambiar el estado de favorito del fichero",
"Error while loading the file data" : "Error al cargar los datos del archivo",
"Pick a template for {name}" : "Elija una plantilla para {name}",
@@ -231,7 +230,6 @@
"%s used" : "%s usado",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/l10n/es_NI.js b/apps/files/l10n/es_NI.js
index 93e052541d5..459488bb7d2 100644
--- a/apps/files/l10n/es_NI.js
+++ b/apps/files/l10n/es_NI.js
@@ -108,6 +108,7 @@ OC.L10N.register(
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -134,7 +135,6 @@ OC.L10N.register(
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/files/l10n/es_NI.json b/apps/files/l10n/es_NI.json
index 1eeaa07da0d..6fc05fe77d2 100644
--- a/apps/files/l10n/es_NI.json
+++ b/apps/files/l10n/es_NI.json
@@ -106,6 +106,7 @@
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -132,7 +133,6 @@
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/l10n/es_PA.js b/apps/files/l10n/es_PA.js
index 93e052541d5..459488bb7d2 100644
--- a/apps/files/l10n/es_PA.js
+++ b/apps/files/l10n/es_PA.js
@@ -108,6 +108,7 @@ OC.L10N.register(
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -134,7 +135,6 @@ OC.L10N.register(
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/files/l10n/es_PA.json b/apps/files/l10n/es_PA.json
index 1eeaa07da0d..6fc05fe77d2 100644
--- a/apps/files/l10n/es_PA.json
+++ b/apps/files/l10n/es_PA.json
@@ -106,6 +106,7 @@
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -132,7 +133,6 @@
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/l10n/es_PE.js b/apps/files/l10n/es_PE.js
index 71f95fd12bd..0f389aa0953 100644
--- a/apps/files/l10n/es_PE.js
+++ b/apps/files/l10n/es_PE.js
@@ -132,6 +132,7 @@ OC.L10N.register(
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -158,7 +159,6 @@ OC.L10N.register(
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/files/l10n/es_PE.json b/apps/files/l10n/es_PE.json
index 27a1a045736..94350399a63 100644
--- a/apps/files/l10n/es_PE.json
+++ b/apps/files/l10n/es_PE.json
@@ -130,6 +130,7 @@
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -156,7 +157,6 @@
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/l10n/es_PR.js b/apps/files/l10n/es_PR.js
index 93e052541d5..459488bb7d2 100644
--- a/apps/files/l10n/es_PR.js
+++ b/apps/files/l10n/es_PR.js
@@ -108,6 +108,7 @@ OC.L10N.register(
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -134,7 +135,6 @@ OC.L10N.register(
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/files/l10n/es_PR.json b/apps/files/l10n/es_PR.json
index 1eeaa07da0d..6fc05fe77d2 100644
--- a/apps/files/l10n/es_PR.json
+++ b/apps/files/l10n/es_PR.json
@@ -106,6 +106,7 @@
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -132,7 +133,6 @@
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/l10n/es_PY.js b/apps/files/l10n/es_PY.js
index 50cb9a5cb39..193aea9f370 100644
--- a/apps/files/l10n/es_PY.js
+++ b/apps/files/l10n/es_PY.js
@@ -123,6 +123,7 @@ OC.L10N.register(
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -149,7 +150,6 @@ OC.L10N.register(
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/files/l10n/es_PY.json b/apps/files/l10n/es_PY.json
index 94797d13e8c..a04f2b72a8e 100644
--- a/apps/files/l10n/es_PY.json
+++ b/apps/files/l10n/es_PY.json
@@ -121,6 +121,7 @@
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -147,7 +148,6 @@
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/l10n/es_SV.js b/apps/files/l10n/es_SV.js
index a3ce3c85e3a..060c65c3104 100644
--- a/apps/files/l10n/es_SV.js
+++ b/apps/files/l10n/es_SV.js
@@ -117,6 +117,7 @@ OC.L10N.register(
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -143,7 +144,6 @@ OC.L10N.register(
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/files/l10n/es_SV.json b/apps/files/l10n/es_SV.json
index e59f563bbe2..b042c438f32 100644
--- a/apps/files/l10n/es_SV.json
+++ b/apps/files/l10n/es_SV.json
@@ -115,6 +115,7 @@
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -141,7 +142,6 @@
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/l10n/es_UY.js b/apps/files/l10n/es_UY.js
index 93e052541d5..459488bb7d2 100644
--- a/apps/files/l10n/es_UY.js
+++ b/apps/files/l10n/es_UY.js
@@ -108,6 +108,7 @@ OC.L10N.register(
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -134,7 +135,6 @@ OC.L10N.register(
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/files/l10n/es_UY.json b/apps/files/l10n/es_UY.json
index 1eeaa07da0d..6fc05fe77d2 100644
--- a/apps/files/l10n/es_UY.json
+++ b/apps/files/l10n/es_UY.json
@@ -106,6 +106,7 @@
"Unknown error" : "Se presentó un error desconocido",
"Show hidden files" : "Mostrar archivos ocultos",
"Additional settings" : "Configuraciones adicionales",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Cancel" : "Cancelar",
"Create" : "Crear",
@@ -132,7 +133,6 @@
"Unlimited" : "Ilimitado",
"%s used" : "%s usado",
"%1$s of %2$s used" : "%1$s de %2$s usados",
- "Settings" : "Configuraciones ",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configuraciones "
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/l10n/et_EE.js b/apps/files/l10n/et_EE.js
index a94a76f2e66..22510b7ac8c 100644
--- a/apps/files/l10n/et_EE.js
+++ b/apps/files/l10n/et_EE.js
@@ -114,9 +114,11 @@ OC.L10N.register(
"Unknown error" : "Tundmatu viga",
"Show hidden files" : "Näita peidetud faile",
"Additional settings" : "Lisaseaded",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopeeri lõikepuhvrisse",
"Cancel" : "Loobu",
"Create" : "Loo",
+ "Templates" : "Mallid",
"No files in here" : "Siin ei ole faile",
"Upload some content or sync with your devices!" : "Laadi sisu üles või süngi oma seadmetega!",
"No entries found in this folder" : "Selles kaustast ei leitud kirjeid",
@@ -142,7 +144,6 @@ OC.L10N.register(
"Unlimited" : "Piiramatult",
"%s used" : "Kasutatud %s",
"%1$s of %2$s used" : "Kasutatud %1$s/%2$s",
- "Settings" : "Seaded",
- "WebDAV" : "WebDAV"
+ "Settings" : "Seaded"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/et_EE.json b/apps/files/l10n/et_EE.json
index 5d1bba7b5aa..5923315ef70 100644
--- a/apps/files/l10n/et_EE.json
+++ b/apps/files/l10n/et_EE.json
@@ -112,9 +112,11 @@
"Unknown error" : "Tundmatu viga",
"Show hidden files" : "Näita peidetud faile",
"Additional settings" : "Lisaseaded",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopeeri lõikepuhvrisse",
"Cancel" : "Loobu",
"Create" : "Loo",
+ "Templates" : "Mallid",
"No files in here" : "Siin ei ole faile",
"Upload some content or sync with your devices!" : "Laadi sisu üles või süngi oma seadmetega!",
"No entries found in this folder" : "Selles kaustast ei leitud kirjeid",
@@ -140,7 +142,6 @@
"Unlimited" : "Piiramatult",
"%s used" : "Kasutatud %s",
"%1$s of %2$s used" : "Kasutatud %1$s/%2$s",
- "Settings" : "Seaded",
- "WebDAV" : "WebDAV"
+ "Settings" : "Seaded"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/eu.js b/apps/files/l10n/eu.js
index ecfc926dfac..81c62509690 100644
--- a/apps/files/l10n/eu.js
+++ b/apps/files/l10n/eu.js
@@ -187,11 +187,10 @@ OC.L10N.register(
"Show hidden files" : "Erakutsi ezkutuko fitxategiak",
"Crop image previews" : "Moztu irudien aurrebistak",
"Additional settings" : "Ezarpen gehiago",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopiatu arbelera",
"Use this address to access your Files via WebDAV" : "Erabili helbide hau WebDAV bidez zure fitxategietara sartzeko",
"Clipboard is not available" : "Arbela ez dago erabilgarri",
- "Webdav URL copied to clipboard" : "Webdav URLa arbelean kopiatu da",
"Unable to change the favourite state of the file" : "Ezin da fitxategiaren gogoko egoera aldatu",
"Error while loading the file data" : "Errorea fitxategiaren datuak kargatzerakoan",
"Pick a template for {name}" : "Hautatu {name}(r)entzako txantiloia",
@@ -233,7 +232,6 @@ OC.L10N.register(
"%s used" : "%s erabilita",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s / %2$s erabilita",
- "Settings" : "Ezarpenak",
- "WebDAV" : "WebDAV"
+ "Settings" : "Ezarpenak"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/eu.json b/apps/files/l10n/eu.json
index b74d50d0d8d..b0aca492915 100644
--- a/apps/files/l10n/eu.json
+++ b/apps/files/l10n/eu.json
@@ -185,11 +185,10 @@
"Show hidden files" : "Erakutsi ezkutuko fitxategiak",
"Crop image previews" : "Moztu irudien aurrebistak",
"Additional settings" : "Ezarpen gehiago",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopiatu arbelera",
"Use this address to access your Files via WebDAV" : "Erabili helbide hau WebDAV bidez zure fitxategietara sartzeko",
"Clipboard is not available" : "Arbela ez dago erabilgarri",
- "Webdav URL copied to clipboard" : "Webdav URLa arbelean kopiatu da",
"Unable to change the favourite state of the file" : "Ezin da fitxategiaren gogoko egoera aldatu",
"Error while loading the file data" : "Errorea fitxategiaren datuak kargatzerakoan",
"Pick a template for {name}" : "Hautatu {name}(r)entzako txantiloia",
@@ -231,7 +230,6 @@
"%s used" : "%s erabilita",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s / %2$s erabilita",
- "Settings" : "Ezarpenak",
- "WebDAV" : "WebDAV"
+ "Settings" : "Ezarpenak"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/fa.js b/apps/files/l10n/fa.js
index b50988f47c7..ae86ffd793b 100644
--- a/apps/files/l10n/fa.js
+++ b/apps/files/l10n/fa.js
@@ -107,6 +107,7 @@ OC.L10N.register(
"Files settings" : "تنظیمات پرونده‌ها",
"Show hidden files" : "نمایش پرونده‌های مخفی",
"Additional settings" : "تنظیمات اضافی",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "رونوشت به تخته‌گیره",
"Clipboard is not available" : "تخته گیره موحود نیست",
"Cancel" : "لغو",
@@ -137,7 +138,6 @@ OC.L10N.register(
"Copied!" : "کپی انجام شد!",
"Unlimited" : "نامحدود",
"%1$s of %2$s used" : "%1$s از %2$s استفاده شده ",
- "Settings" : "تنظیمات",
- "WebDAV" : "WebDAV"
+ "Settings" : "تنظیمات"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files/l10n/fa.json b/apps/files/l10n/fa.json
index 9c51ee96a56..69fa8c07d8d 100644
--- a/apps/files/l10n/fa.json
+++ b/apps/files/l10n/fa.json
@@ -105,6 +105,7 @@
"Files settings" : "تنظیمات پرونده‌ها",
"Show hidden files" : "نمایش پرونده‌های مخفی",
"Additional settings" : "تنظیمات اضافی",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "رونوشت به تخته‌گیره",
"Clipboard is not available" : "تخته گیره موحود نیست",
"Cancel" : "لغو",
@@ -135,7 +136,6 @@
"Copied!" : "کپی انجام شد!",
"Unlimited" : "نامحدود",
"%1$s of %2$s used" : "%1$s از %2$s استفاده شده ",
- "Settings" : "تنظیمات",
- "WebDAV" : "WebDAV"
+ "Settings" : "تنظیمات"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/fi.js b/apps/files/l10n/fi.js
index 764ab0b917d..7dec3002189 100644
--- a/apps/files/l10n/fi.js
+++ b/apps/files/l10n/fi.js
@@ -58,6 +58,7 @@ OC.L10N.register(
"Could not copy \"{file}\"" : "Tiedostoa \"{file}\" ei voitu kopioida",
"Copied {origin} inside {destination}" : "Kopioitu {origin} kohteeseen {destination}",
"Copied {origin} and {nbfiles} other files inside {destination}" : "Kopioitu {origin} ja {nbfiles} muuta tiedostoa kohteeseen {destination}",
+ "Failed to redirect to client" : "Uudelleenohjaus asiakkaaseen epäonnistui",
"{newName} already exists" : "{newName} on jo olemassa",
"Could not rename \"{fileName}\", it does not exist any more" : "Tiedoston \"{fileName}\" nimeäminen uudelleen ei onnistunut, koska sitä ei ole enää olemassa",
"The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Nimi \"{targetName}\" on jo käytössä kansiossa \"{dir}\". Valitse toinen nimi.",
@@ -168,6 +169,7 @@ OC.L10N.register(
"Storage informations" : "Tallennustilan tietoja",
"{usedQuotaByte} used" : "{usedQuotaByte} käytetty",
"{relative}% used" : "{relative} % käytetty",
+ "Could not refresh storage stats" : "Tallennustilan tilastoja ei voitu päivittää",
"Transfer ownership of a file or folder" : "Siirrä tiedoston tai kansion omistajuus",
"Choose file or folder to transfer" : "Valitse siirrettävä tiedosto tai kansio",
"Change" : "Muuta",
@@ -185,10 +187,11 @@ OC.L10N.register(
"Show hidden files" : "Näytä piilotetut tiedostot",
"Crop image previews" : "Rajaa kuvien esikatseluja",
"Additional settings" : "Lisäasetukset",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopioi leikepöydälle",
"Use this address to access your Files via WebDAV" : "Käytä tätä osoitetta yhdistääksesi tiedostosi WebDAV:in kautta",
"Clipboard is not available" : "Leikepöytä ei ole käytettävissä",
- "Webdav URL copied to clipboard" : "Webdav-URL-osoite kopioitu leikepöydälle",
+ "WebDAV URL copied to clipboard" : "WebDAV-osoite kopioitu leikepöydälle",
"Unable to change the favourite state of the file" : "Suosikki-tilan muuttaminen epäonnistui.",
"Error while loading the file data" : "Virhe tiedostoa ladatessa",
"Pick a template for {name}" : "Valtise mallipohja tiedostolle {name}",
@@ -229,7 +232,6 @@ OC.L10N.register(
"%s used" : "%s käytetty",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s/%2$s käytetty",
- "Settings" : "Asetukset",
- "WebDAV" : "WebDAV"
+ "Settings" : "Asetukset"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/fi.json b/apps/files/l10n/fi.json
index 3a986ccff71..fd721376a3c 100644
--- a/apps/files/l10n/fi.json
+++ b/apps/files/l10n/fi.json
@@ -56,6 +56,7 @@
"Could not copy \"{file}\"" : "Tiedostoa \"{file}\" ei voitu kopioida",
"Copied {origin} inside {destination}" : "Kopioitu {origin} kohteeseen {destination}",
"Copied {origin} and {nbfiles} other files inside {destination}" : "Kopioitu {origin} ja {nbfiles} muuta tiedostoa kohteeseen {destination}",
+ "Failed to redirect to client" : "Uudelleenohjaus asiakkaaseen epäonnistui",
"{newName} already exists" : "{newName} on jo olemassa",
"Could not rename \"{fileName}\", it does not exist any more" : "Tiedoston \"{fileName}\" nimeäminen uudelleen ei onnistunut, koska sitä ei ole enää olemassa",
"The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Nimi \"{targetName}\" on jo käytössä kansiossa \"{dir}\". Valitse toinen nimi.",
@@ -166,6 +167,7 @@
"Storage informations" : "Tallennustilan tietoja",
"{usedQuotaByte} used" : "{usedQuotaByte} käytetty",
"{relative}% used" : "{relative} % käytetty",
+ "Could not refresh storage stats" : "Tallennustilan tilastoja ei voitu päivittää",
"Transfer ownership of a file or folder" : "Siirrä tiedoston tai kansion omistajuus",
"Choose file or folder to transfer" : "Valitse siirrettävä tiedosto tai kansio",
"Change" : "Muuta",
@@ -183,10 +185,11 @@
"Show hidden files" : "Näytä piilotetut tiedostot",
"Crop image previews" : "Rajaa kuvien esikatseluja",
"Additional settings" : "Lisäasetukset",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopioi leikepöydälle",
"Use this address to access your Files via WebDAV" : "Käytä tätä osoitetta yhdistääksesi tiedostosi WebDAV:in kautta",
"Clipboard is not available" : "Leikepöytä ei ole käytettävissä",
- "Webdav URL copied to clipboard" : "Webdav-URL-osoite kopioitu leikepöydälle",
+ "WebDAV URL copied to clipboard" : "WebDAV-osoite kopioitu leikepöydälle",
"Unable to change the favourite state of the file" : "Suosikki-tilan muuttaminen epäonnistui.",
"Error while loading the file data" : "Virhe tiedostoa ladatessa",
"Pick a template for {name}" : "Valtise mallipohja tiedostolle {name}",
@@ -227,7 +230,6 @@
"%s used" : "%s käytetty",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s/%2$s käytetty",
- "Settings" : "Asetukset",
- "WebDAV" : "WebDAV"
+ "Settings" : "Asetukset"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js
index aafe3f3dc45..fa73ac8d867 100644
--- a/apps/files/l10n/fr.js
+++ b/apps/files/l10n/fr.js
@@ -187,11 +187,11 @@ OC.L10N.register(
"Show hidden files" : "Afficher les fichiers masqués",
"Crop image previews" : "Afficher en miniatures carrées",
"Additional settings" : "Paramètres supplémentaires",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copier dans le presse-papiers",
"Use this address to access your Files via WebDAV" : "Utilisez cette adresse pour accéder à vos fichiers via WebDAV",
"Clipboard is not available" : "Le presse-papiers n'est pas disponible",
- "Webdav URL copied to clipboard" : "URL Webdav copiée dans le presse-papiers",
+ "WebDAV URL copied to clipboard" : "URL WebDAV copiée dans le presse-papier",
"Unable to change the favourite state of the file" : "Impossible de modifier l'état favori du fichier",
"Error while loading the file data" : "Erreur lors du chargement du fichier de données",
"Pick a template for {name}" : "Choisissez un modèle pour {name}",
@@ -233,7 +233,6 @@ OC.L10N.register(
"%s used" : "%s utilisés",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s utilisés sur %2$s",
- "Settings" : "Paramètres",
- "WebDAV" : "WebDAV"
+ "Settings" : "Paramètres"
},
"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json
index 125ce9ef644..1f75b33392d 100644
--- a/apps/files/l10n/fr.json
+++ b/apps/files/l10n/fr.json
@@ -185,11 +185,11 @@
"Show hidden files" : "Afficher les fichiers masqués",
"Crop image previews" : "Afficher en miniatures carrées",
"Additional settings" : "Paramètres supplémentaires",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copier dans le presse-papiers",
"Use this address to access your Files via WebDAV" : "Utilisez cette adresse pour accéder à vos fichiers via WebDAV",
"Clipboard is not available" : "Le presse-papiers n'est pas disponible",
- "Webdav URL copied to clipboard" : "URL Webdav copiée dans le presse-papiers",
+ "WebDAV URL copied to clipboard" : "URL WebDAV copiée dans le presse-papier",
"Unable to change the favourite state of the file" : "Impossible de modifier l'état favori du fichier",
"Error while loading the file data" : "Erreur lors du chargement du fichier de données",
"Pick a template for {name}" : "Choisissez un modèle pour {name}",
@@ -231,7 +231,6 @@
"%s used" : "%s utilisés",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s utilisés sur %2$s",
- "Settings" : "Paramètres",
- "WebDAV" : "WebDAV"
+ "Settings" : "Paramètres"
},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/l10n/gl.js b/apps/files/l10n/gl.js
index 3f0bcbe9148..fc2df8b733b 100644
--- a/apps/files/l10n/gl.js
+++ b/apps/files/l10n/gl.js
@@ -180,6 +180,7 @@ OC.L10N.register(
"Show hidden files" : "Amosar os ficheiros agochados",
"Crop image previews" : "Recortar a vista previa das imaxes",
"Additional settings" : "Axustes adicionais",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar no portapapeis.",
"Use this address to access your Files via WebDAV" : "Empregue este enderezo para acceder ao seu Ficheiros mediante WebDAV",
"Unable to change the favourite state of the file" : "Non é posíbel cambiar o estado favorito do ficheiro",
@@ -223,7 +224,6 @@ OC.L10N.register(
"%s used" : "%s utilizado",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%s de %s utilizado",
- "Settings" : "Axustes",
- "WebDAV" : "WebDAV"
+ "Settings" : "Axustes"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/gl.json b/apps/files/l10n/gl.json
index 09e3d3965ae..ff5831bee68 100644
--- a/apps/files/l10n/gl.json
+++ b/apps/files/l10n/gl.json
@@ -178,6 +178,7 @@
"Show hidden files" : "Amosar os ficheiros agochados",
"Crop image previews" : "Recortar a vista previa das imaxes",
"Additional settings" : "Axustes adicionais",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar no portapapeis.",
"Use this address to access your Files via WebDAV" : "Empregue este enderezo para acceder ao seu Ficheiros mediante WebDAV",
"Unable to change the favourite state of the file" : "Non é posíbel cambiar o estado favorito do ficheiro",
@@ -221,7 +222,6 @@
"%s used" : "%s utilizado",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%s de %s utilizado",
- "Settings" : "Axustes",
- "WebDAV" : "WebDAV"
+ "Settings" : "Axustes"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/he.js b/apps/files/l10n/he.js
index 3ce434fb57f..8a50076eedf 100644
--- a/apps/files/l10n/he.js
+++ b/apps/files/l10n/he.js
@@ -157,6 +157,7 @@ OC.L10N.register(
"Show hidden files" : "הצגת קבצים נסתרים",
"Crop image previews" : "חיתוך תצוגות מקדימות של תמונות",
"Additional settings" : "הגדרות נוספות",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "העתקה ללוח הגזירים",
"Use this address to access your Files via WebDAV" : "יש להשתמש בכתובת הזאת כדי לגשת לקבצים שלך דרך WebDAV",
"Unable to change the favourite state of the file" : "לא ניתן לשנות את מצב ההעדפה של הקובץ",
@@ -190,7 +191,6 @@ OC.L10N.register(
"Cannot transfer ownership of a file or folder you don't own" : "אין לך אפשרות להעביר בעלות על קובץ או תיקייה שאין לך בעלות עליהם",
"%s used" : "%s בשימוש",
"%1$s of %2$s used" : "%1$s מתוך %2$s בשימוש",
- "Settings" : "הגדרות",
- "WebDAV" : "WebDAV"
+ "Settings" : "הגדרות"
},
"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;");
diff --git a/apps/files/l10n/he.json b/apps/files/l10n/he.json
index 472ca2ece59..a1dc395547c 100644
--- a/apps/files/l10n/he.json
+++ b/apps/files/l10n/he.json
@@ -155,6 +155,7 @@
"Show hidden files" : "הצגת קבצים נסתרים",
"Crop image previews" : "חיתוך תצוגות מקדימות של תמונות",
"Additional settings" : "הגדרות נוספות",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "העתקה ללוח הגזירים",
"Use this address to access your Files via WebDAV" : "יש להשתמש בכתובת הזאת כדי לגשת לקבצים שלך דרך WebDAV",
"Unable to change the favourite state of the file" : "לא ניתן לשנות את מצב ההעדפה של הקובץ",
@@ -188,7 +189,6 @@
"Cannot transfer ownership of a file or folder you don't own" : "אין לך אפשרות להעביר בעלות על קובץ או תיקייה שאין לך בעלות עליהם",
"%s used" : "%s בשימוש",
"%1$s of %2$s used" : "%1$s מתוך %2$s בשימוש",
- "Settings" : "הגדרות",
- "WebDAV" : "WebDAV"
+ "Settings" : "הגדרות"
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;"
} \ No newline at end of file
diff --git a/apps/files/l10n/hr.js b/apps/files/l10n/hr.js
index 57f925df4b7..e4caf61f22c 100644
--- a/apps/files/l10n/hr.js
+++ b/apps/files/l10n/hr.js
@@ -167,6 +167,7 @@ OC.L10N.register(
"Show hidden files" : "Prikaz skrivenih datoteka",
"Crop image previews" : "Obreži pretpreglede slika",
"Additional settings" : "Dodatne postavke",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopiraj u međuspremnik",
"Use this address to access your Files via WebDAV" : "Upotrijebite ovu adresu za pristupanje svojim datotekama putem WebDAVa",
"Unable to change the favourite state of the file" : "Nije moguće promijeniti status favorita datoteke",
@@ -209,7 +210,6 @@ OC.L10N.register(
"Cannot transfer ownership of a file or folder you don't own" : "Ne možete prenijeti vlasništvo nad datotekom ili mapom koja nije u vašem vlasništvu",
"%s used" : "Iskorišteno %s",
"%1$s of %2$s used" : "Iskorišteno %1$s od %2$s",
- "Settings" : "Postavke",
- "WebDAV" : "WebDAV"
+ "Settings" : "Postavke"
},
"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;");
diff --git a/apps/files/l10n/hr.json b/apps/files/l10n/hr.json
index 72cbe099f36..e7b2342eff0 100644
--- a/apps/files/l10n/hr.json
+++ b/apps/files/l10n/hr.json
@@ -165,6 +165,7 @@
"Show hidden files" : "Prikaz skrivenih datoteka",
"Crop image previews" : "Obreži pretpreglede slika",
"Additional settings" : "Dodatne postavke",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopiraj u međuspremnik",
"Use this address to access your Files via WebDAV" : "Upotrijebite ovu adresu za pristupanje svojim datotekama putem WebDAVa",
"Unable to change the favourite state of the file" : "Nije moguće promijeniti status favorita datoteke",
@@ -207,7 +208,6 @@
"Cannot transfer ownership of a file or folder you don't own" : "Ne možete prenijeti vlasništvo nad datotekom ili mapom koja nije u vašem vlasništvu",
"%s used" : "Iskorišteno %s",
"%1$s of %2$s used" : "Iskorišteno %1$s od %2$s",
- "Settings" : "Postavke",
- "WebDAV" : "WebDAV"
+ "Settings" : "Postavke"
},"pluralForm" :"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/l10n/hu.js b/apps/files/l10n/hu.js
index 4348b7292b1..593d095f944 100644
--- a/apps/files/l10n/hu.js
+++ b/apps/files/l10n/hu.js
@@ -187,11 +187,10 @@ OC.L10N.register(
"Show hidden files" : "Rejtett fájlok megjelenítése",
"Crop image previews" : "Kép előnézetek vágása",
"Additional settings" : "További beállítások",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Másolás a vágólapra",
"Use this address to access your Files via WebDAV" : "Ezzel a címmel férhet hozzá a Fájlokhoz a WebDAV-on keresztül",
"Clipboard is not available" : "A vágólap nem érhető el",
- "Webdav URL copied to clipboard" : "A WebDAV-cím a vágólapra másolva",
"Unable to change the favourite state of the file" : "Nem lehet megváltoztatni a fájl kedvenc állapotát",
"Error while loading the file data" : "Hiba történt a fájladatok betöltése közben",
"Pick a template for {name}" : "Válassz sablont a(z) {name} fájlnak",
@@ -233,7 +232,6 @@ OC.L10N.register(
"%s used" : "%s használt",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s / %2$s felhasználva",
- "Settings" : "Beállítások",
- "WebDAV" : "WebDAV"
+ "Settings" : "Beállítások"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/hu.json b/apps/files/l10n/hu.json
index 29f4c1a07bf..3791e99f0c5 100644
--- a/apps/files/l10n/hu.json
+++ b/apps/files/l10n/hu.json
@@ -185,11 +185,10 @@
"Show hidden files" : "Rejtett fájlok megjelenítése",
"Crop image previews" : "Kép előnézetek vágása",
"Additional settings" : "További beállítások",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Másolás a vágólapra",
"Use this address to access your Files via WebDAV" : "Ezzel a címmel férhet hozzá a Fájlokhoz a WebDAV-on keresztül",
"Clipboard is not available" : "A vágólap nem érhető el",
- "Webdav URL copied to clipboard" : "A WebDAV-cím a vágólapra másolva",
"Unable to change the favourite state of the file" : "Nem lehet megváltoztatni a fájl kedvenc állapotát",
"Error while loading the file data" : "Hiba történt a fájladatok betöltése közben",
"Pick a template for {name}" : "Válassz sablont a(z) {name} fájlnak",
@@ -231,7 +230,6 @@
"%s used" : "%s használt",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s / %2$s felhasználva",
- "Settings" : "Beállítások",
- "WebDAV" : "WebDAV"
+ "Settings" : "Beállítások"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/ia.js b/apps/files/l10n/ia.js
index fd51aaf5f2a..7a3e9d6c22d 100644
--- a/apps/files/l10n/ia.js
+++ b/apps/files/l10n/ia.js
@@ -95,6 +95,7 @@ OC.L10N.register(
"in %s" : "in %s",
"Unknown error" : "Error incognite",
"Show hidden files" : "Monstrar files occultate",
+ "WebDAV" : "WebDAV",
"Cancel" : "Cancellar",
"Create" : "Crear",
"No files in here" : "Nulle files ci",
@@ -118,7 +119,6 @@ OC.L10N.register(
"Copied!" : "Copiate!",
"Unlimited" : "Ilimitate",
"%1$s of %2$s used" : "%1$s de %2$s usate",
- "Settings" : "Configurationes",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configurationes"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/ia.json b/apps/files/l10n/ia.json
index 41c61621422..ced94ad21da 100644
--- a/apps/files/l10n/ia.json
+++ b/apps/files/l10n/ia.json
@@ -93,6 +93,7 @@
"in %s" : "in %s",
"Unknown error" : "Error incognite",
"Show hidden files" : "Monstrar files occultate",
+ "WebDAV" : "WebDAV",
"Cancel" : "Cancellar",
"Create" : "Crear",
"No files in here" : "Nulle files ci",
@@ -116,7 +117,6 @@
"Copied!" : "Copiate!",
"Unlimited" : "Ilimitate",
"%1$s of %2$s used" : "%1$s de %2$s usate",
- "Settings" : "Configurationes",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configurationes"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/id.js b/apps/files/l10n/id.js
index 8d8d10d8b1a..886a39bccca 100644
--- a/apps/files/l10n/id.js
+++ b/apps/files/l10n/id.js
@@ -148,6 +148,7 @@ OC.L10N.register(
"Show hidden files" : "Lihat berkas tersembunyi",
"Crop image previews" : "Pangkas pratinjau gambar",
"Additional settings" : "Setelan tambahan",
+ "WebDAV" : "WebDAV",
"Use this address to access your Files via WebDAV" : "Gunakan alamat ini untuk mengakses Berkas Anda via WebDAV",
"Unable to change the favourite state of the file" : "Gagal mengubah status favorit berkas",
"Error while loading the file data" : "Galat pemuatan data berkas",
@@ -180,7 +181,6 @@ OC.L10N.register(
"Cannot transfer ownership of a file or folder you don't own" : "Tidak dapat melakukan transfer kepemilikan dari berkas dan folder yang tidak Anda miliki",
"%s used" : "%s digunakan",
"%1$s of %2$s used" : "%1$s dari %2$s sudah digunakan",
- "Settings" : "Pengaturan",
- "WebDAV" : "WebDAV"
+ "Settings" : "Pengaturan"
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/id.json b/apps/files/l10n/id.json
index e1618faf9d3..f4e9f86641b 100644
--- a/apps/files/l10n/id.json
+++ b/apps/files/l10n/id.json
@@ -146,6 +146,7 @@
"Show hidden files" : "Lihat berkas tersembunyi",
"Crop image previews" : "Pangkas pratinjau gambar",
"Additional settings" : "Setelan tambahan",
+ "WebDAV" : "WebDAV",
"Use this address to access your Files via WebDAV" : "Gunakan alamat ini untuk mengakses Berkas Anda via WebDAV",
"Unable to change the favourite state of the file" : "Gagal mengubah status favorit berkas",
"Error while loading the file data" : "Galat pemuatan data berkas",
@@ -178,7 +179,6 @@
"Cannot transfer ownership of a file or folder you don't own" : "Tidak dapat melakukan transfer kepemilikan dari berkas dan folder yang tidak Anda miliki",
"%s used" : "%s digunakan",
"%1$s of %2$s used" : "%1$s dari %2$s sudah digunakan",
- "Settings" : "Pengaturan",
- "WebDAV" : "WebDAV"
+ "Settings" : "Pengaturan"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files/l10n/is.js b/apps/files/l10n/is.js
index bc80cbea4df..3332fa20e92 100644
--- a/apps/files/l10n/is.js
+++ b/apps/files/l10n/is.js
@@ -146,6 +146,7 @@ OC.L10N.register(
"Show hidden files" : "Sýna faldar skrár",
"Crop image previews" : "Skera utan af forskoðun mynda",
"Additional settings" : "Valfrjálsar stillingar",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Afrita á klippispjald",
"Use this address to access your Files via WebDAV" : "Notaðu þetta vistfang til að nálgast skrárnar þínar með WebDAV",
"Error while loading the file data" : "Villa við að hlaða inn skráagögnum",
@@ -185,7 +186,6 @@ OC.L10N.register(
"Cannot transfer ownership of a file or folder you don't own" : "Ekki er hægt að millifæra eignarhald á skrá eða möppu sem þú átt ekki",
"%s used" : "%s notað",
"%1$s of %2$s used" : "%1$s af %2$s notað",
- "Settings" : "Stillingar",
- "WebDAV" : "WebDAV"
+ "Settings" : "Stillingar"
},
"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);");
diff --git a/apps/files/l10n/is.json b/apps/files/l10n/is.json
index 4f9cd71ed6d..8b25a473493 100644
--- a/apps/files/l10n/is.json
+++ b/apps/files/l10n/is.json
@@ -144,6 +144,7 @@
"Show hidden files" : "Sýna faldar skrár",
"Crop image previews" : "Skera utan af forskoðun mynda",
"Additional settings" : "Valfrjálsar stillingar",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Afrita á klippispjald",
"Use this address to access your Files via WebDAV" : "Notaðu þetta vistfang til að nálgast skrárnar þínar með WebDAV",
"Error while loading the file data" : "Villa við að hlaða inn skráagögnum",
@@ -183,7 +184,6 @@
"Cannot transfer ownership of a file or folder you don't own" : "Ekki er hægt að millifæra eignarhald á skrá eða möppu sem þú átt ekki",
"%s used" : "%s notað",
"%1$s of %2$s used" : "%1$s af %2$s notað",
- "Settings" : "Stillingar",
- "WebDAV" : "WebDAV"
+ "Settings" : "Stillingar"
},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"
} \ No newline at end of file
diff --git a/apps/files/l10n/it.js b/apps/files/l10n/it.js
index 78e51b1118a..8d4f7a49c9f 100644
--- a/apps/files/l10n/it.js
+++ b/apps/files/l10n/it.js
@@ -187,11 +187,10 @@ OC.L10N.register(
"Show hidden files" : "Mostra i file nascosti",
"Crop image previews" : "Ritaglia le anteprime delle immagini",
"Additional settings" : "Impostazioni aggiuntive",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copia negli appunti",
"Use this address to access your Files via WebDAV" : "Usa questo indirizzo per accedere ai tuoi file con WebDAV",
"Clipboard is not available" : "Appunti non disponibili",
- "Webdav URL copied to clipboard" : "URL Webdav copiato negli appunti",
"Unable to change the favourite state of the file" : "Impossibile cambiare lo stato di preferito del file",
"Error while loading the file data" : "Errore durante il caricamento del file di dati",
"Pick a template for {name}" : "Scegli un modello per {name}",
@@ -233,7 +232,6 @@ OC.L10N.register(
"%s used" : "%s utilizzato",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s di %2$s utilizzati",
- "Settings" : "Impostazioni",
- "WebDAV" : "WebDAV"
+ "Settings" : "Impostazioni"
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/files/l10n/it.json b/apps/files/l10n/it.json
index d178cf8c572..41542d08a36 100644
--- a/apps/files/l10n/it.json
+++ b/apps/files/l10n/it.json
@@ -185,11 +185,10 @@
"Show hidden files" : "Mostra i file nascosti",
"Crop image previews" : "Ritaglia le anteprime delle immagini",
"Additional settings" : "Impostazioni aggiuntive",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copia negli appunti",
"Use this address to access your Files via WebDAV" : "Usa questo indirizzo per accedere ai tuoi file con WebDAV",
"Clipboard is not available" : "Appunti non disponibili",
- "Webdav URL copied to clipboard" : "URL Webdav copiato negli appunti",
"Unable to change the favourite state of the file" : "Impossibile cambiare lo stato di preferito del file",
"Error while loading the file data" : "Errore durante il caricamento del file di dati",
"Pick a template for {name}" : "Scegli un modello per {name}",
@@ -231,7 +230,6 @@
"%s used" : "%s utilizzato",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s di %2$s utilizzati",
- "Settings" : "Impostazioni",
- "WebDAV" : "WebDAV"
+ "Settings" : "Impostazioni"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/l10n/ja.js b/apps/files/l10n/ja.js
index 5e1538198b8..d283e91319c 100644
--- a/apps/files/l10n/ja.js
+++ b/apps/files/l10n/ja.js
@@ -182,11 +182,10 @@ OC.L10N.register(
"Show hidden files" : "隠しファイルを表示",
"Crop image previews" : "プレビュー画像を切り抜く",
"Additional settings" : "追加設定",
- "Webdav" : "WebDAV",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "クリップボードにコピー",
"Use this address to access your Files via WebDAV" : "このアドレスを使用すれば、WebDAV経由でファイルにアクセスできます",
"Clipboard is not available" : "クリップボードは利用できません",
- "Webdav URL copied to clipboard" : "WebDAVのURLがクリップボードにコピーされました",
"Unable to change the favourite state of the file" : "ファイルのお気に入りの状態を変更できません",
"Error while loading the file data" : "ファイルデータの読み込み中にエラーが発生しました",
"Pick a template for {name}" : "{name} のテンプレートを選択してください",
@@ -228,7 +227,6 @@ OC.L10N.register(
"%s used" : "%s 使用中",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%2$s 中%1$s 使用中",
- "Settings" : "設定",
- "WebDAV" : "WebDAV"
+ "Settings" : "設定"
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/ja.json b/apps/files/l10n/ja.json
index 83ed0254962..2300be350d8 100644
--- a/apps/files/l10n/ja.json
+++ b/apps/files/l10n/ja.json
@@ -180,11 +180,10 @@
"Show hidden files" : "隠しファイルを表示",
"Crop image previews" : "プレビュー画像を切り抜く",
"Additional settings" : "追加設定",
- "Webdav" : "WebDAV",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "クリップボードにコピー",
"Use this address to access your Files via WebDAV" : "このアドレスを使用すれば、WebDAV経由でファイルにアクセスできます",
"Clipboard is not available" : "クリップボードは利用できません",
- "Webdav URL copied to clipboard" : "WebDAVのURLがクリップボードにコピーされました",
"Unable to change the favourite state of the file" : "ファイルのお気に入りの状態を変更できません",
"Error while loading the file data" : "ファイルデータの読み込み中にエラーが発生しました",
"Pick a template for {name}" : "{name} のテンプレートを選択してください",
@@ -226,7 +225,6 @@
"%s used" : "%s 使用中",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%2$s 中%1$s 使用中",
- "Settings" : "設定",
- "WebDAV" : "WebDAV"
+ "Settings" : "設定"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files/l10n/ka_GE.js b/apps/files/l10n/ka_GE.js
index 7c28c3f24af..868ec834987 100644
--- a/apps/files/l10n/ka_GE.js
+++ b/apps/files/l10n/ka_GE.js
@@ -117,6 +117,7 @@ OC.L10N.register(
"Unknown error" : "უცნობი შეცდომა",
"Show hidden files" : "დამალული ფაილების ჩვენება",
"Additional settings" : "დამატებითი პარამეტრები",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "კოპირება ბუფერში",
"Cancel" : "უარყოფა",
"Create" : "შექმნა",
@@ -143,7 +144,6 @@ OC.L10N.register(
"Unlimited" : "ულიმიტო",
"%s used" : "%s მოხმარებულია",
"%1$s of %2$s used" : "გამოყენებულია %1$s სულ %2$s-იდან ",
- "Settings" : "პარამეტრები",
- "WebDAV" : "WebDAV"
+ "Settings" : "პარამეტრები"
},
"nplurals=2; plural=(n!=1);");
diff --git a/apps/files/l10n/ka_GE.json b/apps/files/l10n/ka_GE.json
index 24fe601bd3c..bed7408c875 100644
--- a/apps/files/l10n/ka_GE.json
+++ b/apps/files/l10n/ka_GE.json
@@ -115,6 +115,7 @@
"Unknown error" : "უცნობი შეცდომა",
"Show hidden files" : "დამალული ფაილების ჩვენება",
"Additional settings" : "დამატებითი პარამეტრები",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "კოპირება ბუფერში",
"Cancel" : "უარყოფა",
"Create" : "შექმნა",
@@ -141,7 +142,6 @@
"Unlimited" : "ულიმიტო",
"%s used" : "%s მოხმარებულია",
"%1$s of %2$s used" : "გამოყენებულია %1$s სულ %2$s-იდან ",
- "Settings" : "პარამეტრები",
- "WebDAV" : "WebDAV"
+ "Settings" : "პარამეტრები"
},"pluralForm" :"nplurals=2; plural=(n!=1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/ko.js b/apps/files/l10n/ko.js
index de08246e031..349b3a87bd7 100644
--- a/apps/files/l10n/ko.js
+++ b/apps/files/l10n/ko.js
@@ -176,6 +176,7 @@ OC.L10N.register(
"Files settings" : "파일 설정",
"Show hidden files" : "숨김 파일 보이기",
"Additional settings" : "고급 설정",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "클립보드로 복사",
"Use this address to access your Files via WebDAV" : "이 주소를 사용하여 WebDAV를 통해 내 파일에 접근하십시오",
"Unable to change the favourite state of the file" : "파일의 즐겨찾기 상태를 변경할 수 없음",
@@ -217,7 +218,6 @@ OC.L10N.register(
"Cannot transfer ownership of a file or folder you don't own" : "내가 소유하지 않은 파일이나 폴더의 소유권을 이전할 수 없음",
"%s used" : "%s 사용함",
"%1$s of %2$s used" : "%2$s 중 %1$s 사용됨",
- "Settings" : "설정",
- "WebDAV" : "WebDAV"
+ "Settings" : "설정"
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/ko.json b/apps/files/l10n/ko.json
index 142703030c4..07212169ee3 100644
--- a/apps/files/l10n/ko.json
+++ b/apps/files/l10n/ko.json
@@ -174,6 +174,7 @@
"Files settings" : "파일 설정",
"Show hidden files" : "숨김 파일 보이기",
"Additional settings" : "고급 설정",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "클립보드로 복사",
"Use this address to access your Files via WebDAV" : "이 주소를 사용하여 WebDAV를 통해 내 파일에 접근하십시오",
"Unable to change the favourite state of the file" : "파일의 즐겨찾기 상태를 변경할 수 없음",
@@ -215,7 +216,6 @@
"Cannot transfer ownership of a file or folder you don't own" : "내가 소유하지 않은 파일이나 폴더의 소유권을 이전할 수 없음",
"%s used" : "%s 사용함",
"%1$s of %2$s used" : "%2$s 중 %1$s 사용됨",
- "Settings" : "설정",
- "WebDAV" : "WebDAV"
+ "Settings" : "설정"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files/l10n/lt_LT.js b/apps/files/l10n/lt_LT.js
index 47e060730b0..06b1428a5fd 100644
--- a/apps/files/l10n/lt_LT.js
+++ b/apps/files/l10n/lt_LT.js
@@ -167,6 +167,7 @@ OC.L10N.register(
"Show hidden files" : "Rodyti paslėptus failus",
"Crop image previews" : "Apkirpti paveikslų peržiūras",
"Additional settings" : "Papildomi nustatymai",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopijuoti į iškarpinę",
"Use this address to access your Files via WebDAV" : "Naudokite šį adresą norėdami pasiekti failus per WebDAV",
"Clipboard is not available" : "Iškarpinė neprieinama",
@@ -208,7 +209,6 @@ OC.L10N.register(
"%s used" : "%s panaudota",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "naudojama %1$s iš %2$s",
- "Settings" : "Nustatymai",
- "WebDAV" : "WebDAV"
+ "Settings" : "Nustatymai"
},
"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);");
diff --git a/apps/files/l10n/lt_LT.json b/apps/files/l10n/lt_LT.json
index cac0cd3be06..d537854bfe9 100644
--- a/apps/files/l10n/lt_LT.json
+++ b/apps/files/l10n/lt_LT.json
@@ -165,6 +165,7 @@
"Show hidden files" : "Rodyti paslėptus failus",
"Crop image previews" : "Apkirpti paveikslų peržiūras",
"Additional settings" : "Papildomi nustatymai",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopijuoti į iškarpinę",
"Use this address to access your Files via WebDAV" : "Naudokite šį adresą norėdami pasiekti failus per WebDAV",
"Clipboard is not available" : "Iškarpinė neprieinama",
@@ -206,7 +207,6 @@
"%s used" : "%s panaudota",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "naudojama %1$s iš %2$s",
- "Settings" : "Nustatymai",
- "WebDAV" : "WebDAV"
+ "Settings" : "Nustatymai"
},"pluralForm" :"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);"
} \ No newline at end of file
diff --git a/apps/files/l10n/lv.js b/apps/files/l10n/lv.js
index d5f70fec0b9..d5d9d96cd67 100644
--- a/apps/files/l10n/lv.js
+++ b/apps/files/l10n/lv.js
@@ -112,6 +112,7 @@ OC.L10N.register(
"Show hidden files" : "Rādīt slēptās datnes",
"Crop image previews" : "Apgriezt attēlu priekšskatījumus",
"Additional settings" : "Papildu iestatījumi",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopēt starpliktuvē",
"Use this address to access your Files via WebDAV" : "Izmantojiet šo adresi, lai piekļūtu savām datnēm, izmantojot WebDAV",
"Cancel" : "Atcelt",
@@ -141,7 +142,6 @@ OC.L10N.register(
"Unlimited" : "Neierobežota",
"%s used" : "%s izmantoti",
"%1$s of %2$s used" : "%1$s no %2$s lietoti",
- "Settings" : "Iestatījumi",
- "WebDAV" : "WebDAV"
+ "Settings" : "Iestatījumi"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);");
diff --git a/apps/files/l10n/lv.json b/apps/files/l10n/lv.json
index 6401f0bc5a9..db6542cf6ef 100644
--- a/apps/files/l10n/lv.json
+++ b/apps/files/l10n/lv.json
@@ -110,6 +110,7 @@
"Show hidden files" : "Rādīt slēptās datnes",
"Crop image previews" : "Apgriezt attēlu priekšskatījumus",
"Additional settings" : "Papildu iestatījumi",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopēt starpliktuvē",
"Use this address to access your Files via WebDAV" : "Izmantojiet šo adresi, lai piekļūtu savām datnēm, izmantojot WebDAV",
"Cancel" : "Atcelt",
@@ -139,7 +140,6 @@
"Unlimited" : "Neierobežota",
"%s used" : "%s izmantoti",
"%1$s of %2$s used" : "%1$s no %2$s lietoti",
- "Settings" : "Iestatījumi",
- "WebDAV" : "WebDAV"
+ "Settings" : "Iestatījumi"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files/l10n/mk.js b/apps/files/l10n/mk.js
index 59ddc09be03..ae5552381ca 100644
--- a/apps/files/l10n/mk.js
+++ b/apps/files/l10n/mk.js
@@ -181,6 +181,7 @@ OC.L10N.register(
"Show hidden files" : "Прикажи сокриени датотеки",
"Crop image previews" : "Исечи ја сликата за преглед",
"Additional settings" : "Дополнителни параметри",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Копирај во клипборд",
"Use this address to access your Files via WebDAV" : "Користи ја оваа адреса за пристап до вашите датотеки преку WebDAV",
"Clipboard is not available" : "Клипбордот не е достапен",
@@ -225,7 +226,6 @@ OC.L10N.register(
"%s used" : "Искористено %s",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "Искористено %1$s од %2$s",
- "Settings" : "Параметри",
- "WebDAV" : "WebDAV"
+ "Settings" : "Параметри"
},
"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;");
diff --git a/apps/files/l10n/mk.json b/apps/files/l10n/mk.json
index cc54ff70899..154898a2436 100644
--- a/apps/files/l10n/mk.json
+++ b/apps/files/l10n/mk.json
@@ -179,6 +179,7 @@
"Show hidden files" : "Прикажи сокриени датотеки",
"Crop image previews" : "Исечи ја сликата за преглед",
"Additional settings" : "Дополнителни параметри",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Копирај во клипборд",
"Use this address to access your Files via WebDAV" : "Користи ја оваа адреса за пристап до вашите датотеки преку WebDAV",
"Clipboard is not available" : "Клипбордот не е достапен",
@@ -223,7 +224,6 @@
"%s used" : "Искористено %s",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "Искористено %1$s од %2$s",
- "Settings" : "Параметри",
- "WebDAV" : "WebDAV"
+ "Settings" : "Параметри"
},"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"
} \ No newline at end of file
diff --git a/apps/files/l10n/nb.js b/apps/files/l10n/nb.js
index 7a0d1123464..c7d06aafa05 100644
--- a/apps/files/l10n/nb.js
+++ b/apps/files/l10n/nb.js
@@ -171,6 +171,7 @@ OC.L10N.register(
"Show hidden files" : "Vis skjulte filer",
"Crop image previews" : "Beskjær forhåndsvisninger av bilder",
"Additional settings" : "Flere innstillinger",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopiert til utklippstavlen",
"Use this address to access your Files via WebDAV" : "Bruk denne adressen for tilgang til filene dine via WebDAV",
"Unable to change the favourite state of the file" : "Kan ikke endre favorittstatus til filen",
@@ -205,7 +206,6 @@ OC.L10N.register(
"Cannot transfer ownership of a file or folder you don't own" : "Kan ikke overføre eierskap til en fil eller mappe du ikke eier",
"%s used" : "%s brukt",
"%1$s of %2$s used" : "%1$s av %2$s brukt",
- "Settings" : "Innstillinger",
- "WebDAV" : "WebDAV"
+ "Settings" : "Innstillinger"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/nb.json b/apps/files/l10n/nb.json
index a6cb786085f..c53c3d1802f 100644
--- a/apps/files/l10n/nb.json
+++ b/apps/files/l10n/nb.json
@@ -169,6 +169,7 @@
"Show hidden files" : "Vis skjulte filer",
"Crop image previews" : "Beskjær forhåndsvisninger av bilder",
"Additional settings" : "Flere innstillinger",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopiert til utklippstavlen",
"Use this address to access your Files via WebDAV" : "Bruk denne adressen for tilgang til filene dine via WebDAV",
"Unable to change the favourite state of the file" : "Kan ikke endre favorittstatus til filen",
@@ -203,7 +204,6 @@
"Cannot transfer ownership of a file or folder you don't own" : "Kan ikke overføre eierskap til en fil eller mappe du ikke eier",
"%s used" : "%s brukt",
"%1$s of %2$s used" : "%1$s av %2$s brukt",
- "Settings" : "Innstillinger",
- "WebDAV" : "WebDAV"
+ "Settings" : "Innstillinger"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/nl.js b/apps/files/l10n/nl.js
index 01e4da15edd..962dd69cb57 100644
--- a/apps/files/l10n/nl.js
+++ b/apps/files/l10n/nl.js
@@ -182,6 +182,7 @@ OC.L10N.register(
"Show hidden files" : "Toon verborgen bestanden",
"Crop image previews" : "Snij afbeeldingvoorbeelden bij",
"Additional settings" : "Aanvullende instellingen",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopiëren naar het klembord",
"Use this address to access your Files via WebDAV" : "Gebruik dit adres om je bestanden via WebDAV te benaderen",
"Unable to change the favourite state of the file" : "Niet mogelijk om favoriet status van het bestand te wijzigen",
@@ -225,7 +226,6 @@ OC.L10N.register(
"%s used" : "%s gebruikt",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s van %2$s gebruikt",
- "Settings" : "Instellingen",
- "WebDAV" : "WebDAV"
+ "Settings" : "Instellingen"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/nl.json b/apps/files/l10n/nl.json
index d3be816fd5f..e55a3e21c5d 100644
--- a/apps/files/l10n/nl.json
+++ b/apps/files/l10n/nl.json
@@ -180,6 +180,7 @@
"Show hidden files" : "Toon verborgen bestanden",
"Crop image previews" : "Snij afbeeldingvoorbeelden bij",
"Additional settings" : "Aanvullende instellingen",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopiëren naar het klembord",
"Use this address to access your Files via WebDAV" : "Gebruik dit adres om je bestanden via WebDAV te benaderen",
"Unable to change the favourite state of the file" : "Niet mogelijk om favoriet status van het bestand te wijzigen",
@@ -223,7 +224,6 @@
"%s used" : "%s gebruikt",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s van %2$s gebruikt",
- "Settings" : "Instellingen",
- "WebDAV" : "WebDAV"
+ "Settings" : "Instellingen"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/pl.js b/apps/files/l10n/pl.js
index 97c922b1f62..a86d397df9c 100644
--- a/apps/files/l10n/pl.js
+++ b/apps/files/l10n/pl.js
@@ -187,11 +187,10 @@ OC.L10N.register(
"Show hidden files" : "Pokaż ukryte pliki",
"Crop image previews" : "Przytnij podglądy obrazów",
"Additional settings" : "Ustawienia dodatkowe",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopiuj do schowka",
"Use this address to access your Files via WebDAV" : "Użyj tego adresu, aby uzyskać dostęp do plików poprzez WebDAV",
"Clipboard is not available" : "Schowek jest niedostępny",
- "Webdav URL copied to clipboard" : "Adres URL Webdav został skopiowany do schowka",
"Unable to change the favourite state of the file" : "Nie można zmienić ulubionego stanu pliku",
"Error while loading the file data" : "Błąd podczas ładowania danych pliku",
"Pick a template for {name}" : "Wybierz szablon dla {name}",
@@ -233,7 +232,6 @@ OC.L10N.register(
"%s used" : "Wykorzystane: %s",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "Wykorzystane: %1$s z %2$s",
- "Settings" : "Ustawienia",
- "WebDAV" : "WebDAV"
+ "Settings" : "Ustawienia"
},
"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);");
diff --git a/apps/files/l10n/pl.json b/apps/files/l10n/pl.json
index 84575e09617..d5f1e00e655 100644
--- a/apps/files/l10n/pl.json
+++ b/apps/files/l10n/pl.json
@@ -185,11 +185,10 @@
"Show hidden files" : "Pokaż ukryte pliki",
"Crop image previews" : "Przytnij podglądy obrazów",
"Additional settings" : "Ustawienia dodatkowe",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopiuj do schowka",
"Use this address to access your Files via WebDAV" : "Użyj tego adresu, aby uzyskać dostęp do plików poprzez WebDAV",
"Clipboard is not available" : "Schowek jest niedostępny",
- "Webdav URL copied to clipboard" : "Adres URL Webdav został skopiowany do schowka",
"Unable to change the favourite state of the file" : "Nie można zmienić ulubionego stanu pliku",
"Error while loading the file data" : "Błąd podczas ładowania danych pliku",
"Pick a template for {name}" : "Wybierz szablon dla {name}",
@@ -231,7 +230,6 @@
"%s used" : "Wykorzystane: %s",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "Wykorzystane: %1$s z %2$s",
- "Settings" : "Ustawienia",
- "WebDAV" : "WebDAV"
+ "Settings" : "Ustawienia"
},"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"
} \ No newline at end of file
diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js
index c684af3dfc8..639b97016ff 100644
--- a/apps/files/l10n/pt_BR.js
+++ b/apps/files/l10n/pt_BR.js
@@ -187,11 +187,10 @@ OC.L10N.register(
"Show hidden files" : "Mostrar arquivos ocultos",
"Crop image previews" : "Cortar visualizações de imagem",
"Additional settings" : "Configurações adicionais",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar para área de transferência",
"Use this address to access your Files via WebDAV" : "Use este endereço para acessar seus Arquivos via WebDAV",
"Clipboard is not available" : "A área de transferência não está disponível",
- "Webdav URL copied to clipboard" : "URL do Webdav copiado para a área de transferência",
"Unable to change the favourite state of the file" : "Não foi possível alterar o estado favorito do arquivo",
"Error while loading the file data" : "Erro ao carregar os dados do arquivo",
"Pick a template for {name}" : "Escolha um modelo para {name}",
@@ -233,7 +232,6 @@ OC.L10N.register(
"%s used" : "%s usado",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s usados de %2$s",
- "Settings" : "Configurações",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configurações"
},
"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json
index cc2c61bffcc..c85cd65ad82 100644
--- a/apps/files/l10n/pt_BR.json
+++ b/apps/files/l10n/pt_BR.json
@@ -185,11 +185,10 @@
"Show hidden files" : "Mostrar arquivos ocultos",
"Crop image previews" : "Cortar visualizações de imagem",
"Additional settings" : "Configurações adicionais",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar para área de transferência",
"Use this address to access your Files via WebDAV" : "Use este endereço para acessar seus Arquivos via WebDAV",
"Clipboard is not available" : "A área de transferência não está disponível",
- "Webdav URL copied to clipboard" : "URL do Webdav copiado para a área de transferência",
"Unable to change the favourite state of the file" : "Não foi possível alterar o estado favorito do arquivo",
"Error while loading the file data" : "Erro ao carregar os dados do arquivo",
"Pick a template for {name}" : "Escolha um modelo para {name}",
@@ -231,7 +230,6 @@
"%s used" : "%s usado",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s usados de %2$s",
- "Settings" : "Configurações",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configurações"
},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/l10n/pt_PT.js b/apps/files/l10n/pt_PT.js
index ea2cc943151..a2ca61f38be 100644
--- a/apps/files/l10n/pt_PT.js
+++ b/apps/files/l10n/pt_PT.js
@@ -142,6 +142,7 @@ OC.L10N.register(
"Unknown error" : "Erro desconhecido",
"Show hidden files" : "Mostrar ficheiros ocultos",
"Additional settings" : "Definições adicionais",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar para área de transferência",
"Cancel" : "Cancelar",
"Create" : "Criar",
@@ -169,7 +170,6 @@ OC.L10N.register(
"Unlimited" : "Ilimitado",
"%s used" : "%s utilizado",
"%1$s of %2$s used" : "Usado %1$s de %2$s",
- "Settings" : "Configurações",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configurações"
},
"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/files/l10n/pt_PT.json b/apps/files/l10n/pt_PT.json
index e5b5c0191da..f21d11c8fda 100644
--- a/apps/files/l10n/pt_PT.json
+++ b/apps/files/l10n/pt_PT.json
@@ -140,6 +140,7 @@
"Unknown error" : "Erro desconhecido",
"Show hidden files" : "Mostrar ficheiros ocultos",
"Additional settings" : "Definições adicionais",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiar para área de transferência",
"Cancel" : "Cancelar",
"Create" : "Criar",
@@ -167,7 +168,6 @@
"Unlimited" : "Ilimitado",
"%s used" : "%s utilizado",
"%1$s of %2$s used" : "Usado %1$s de %2$s",
- "Settings" : "Configurações",
- "WebDAV" : "WebDAV"
+ "Settings" : "Configurações"
},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/files/l10n/ro.js b/apps/files/l10n/ro.js
index 7a07fda786c..44bcea1a433 100644
--- a/apps/files/l10n/ro.js
+++ b/apps/files/l10n/ro.js
@@ -176,7 +176,7 @@ OC.L10N.register(
"Show hidden files" : "Arată fișierele ascunse",
"Crop image previews" : "Previzualizarea imaginii decupate",
"Additional settings" : "Setări adiționale",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiază în clipboard",
"Use this address to access your Files via WebDAV" : "Folosiți această adresă pentru a accesa fișierele dumneavoastră folosind WebDAV",
"Unable to change the favourite state of the file" : "Nu s-a putut schimba starea fișierelor favorite",
@@ -219,7 +219,6 @@ OC.L10N.register(
"Cannot transfer ownership of a file or folder you don't own" : "Nu se poate transfera proprietatea unui fișier sau dosar ce nu le deții",
"%s used" : "%s folosiți",
"%1$s of %2$s used" : "%1$s din %2$s utilizat",
- "Settings" : "Setări",
- "WebDAV" : "WebDAV"
+ "Settings" : "Setări"
},
"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));");
diff --git a/apps/files/l10n/ro.json b/apps/files/l10n/ro.json
index 24da595ecca..0c1d8e0e081 100644
--- a/apps/files/l10n/ro.json
+++ b/apps/files/l10n/ro.json
@@ -174,7 +174,7 @@
"Show hidden files" : "Arată fișierele ascunse",
"Crop image previews" : "Previzualizarea imaginii decupate",
"Additional settings" : "Setări adiționale",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Copiază în clipboard",
"Use this address to access your Files via WebDAV" : "Folosiți această adresă pentru a accesa fișierele dumneavoastră folosind WebDAV",
"Unable to change the favourite state of the file" : "Nu s-a putut schimba starea fișierelor favorite",
@@ -217,7 +217,6 @@
"Cannot transfer ownership of a file or folder you don't own" : "Nu se poate transfera proprietatea unui fișier sau dosar ce nu le deții",
"%s used" : "%s folosiți",
"%1$s of %2$s used" : "%1$s din %2$s utilizat",
- "Settings" : "Setări",
- "WebDAV" : "WebDAV"
+ "Settings" : "Setări"
},"pluralForm" :"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));"
} \ No newline at end of file
diff --git a/apps/files/l10n/ru.js b/apps/files/l10n/ru.js
index 28db96d9314..5652f10d5fe 100644
--- a/apps/files/l10n/ru.js
+++ b/apps/files/l10n/ru.js
@@ -181,6 +181,7 @@ OC.L10N.register(
"Show hidden files" : "Показывать скрытые файлы",
"Crop image previews" : "Обрезать пред. просмотр",
"Additional settings" : "Дополнительные параметры",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Копировать в буфер",
"Use this address to access your Files via WebDAV" : "Используйте этот адрес для подключения WebDAV",
"Clipboard is not available" : "Буфер обмена недоступен",
@@ -225,7 +226,6 @@ OC.L10N.register(
"%s used" : "%s использовано",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "использовано %1$s из %2$s ",
- "Settings" : "Настройки",
- "WebDAV" : "WebDAV"
+ "Settings" : "Настройки"
},
"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);");
diff --git a/apps/files/l10n/ru.json b/apps/files/l10n/ru.json
index 5b54e132a87..5ced37241de 100644
--- a/apps/files/l10n/ru.json
+++ b/apps/files/l10n/ru.json
@@ -179,6 +179,7 @@
"Show hidden files" : "Показывать скрытые файлы",
"Crop image previews" : "Обрезать пред. просмотр",
"Additional settings" : "Дополнительные параметры",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Копировать в буфер",
"Use this address to access your Files via WebDAV" : "Используйте этот адрес для подключения WebDAV",
"Clipboard is not available" : "Буфер обмена недоступен",
@@ -223,7 +224,6 @@
"%s used" : "%s использовано",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "использовано %1$s из %2$s ",
- "Settings" : "Настройки",
- "WebDAV" : "WebDAV"
+ "Settings" : "Настройки"
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
} \ No newline at end of file
diff --git a/apps/files/l10n/sc.js b/apps/files/l10n/sc.js
index 415aa24bfd8..f172163421b 100644
--- a/apps/files/l10n/sc.js
+++ b/apps/files/l10n/sc.js
@@ -169,6 +169,7 @@ OC.L10N.register(
"Show hidden files" : "Mustra archìvios cuados",
"Crop image previews" : "Retàllia anteprimas de s'imàgine",
"Additional settings" : "Impostatziones in agiunta",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Còpia in is punta de billete",
"Use this address to access your Files via WebDAV" : "Imprea custu indiritzu pro intrare in archìvios tràmite WebDAV",
"Unable to change the favourite state of the file" : "Non faghet a cambiare s'istadu de preferidu de s'archìviu",
@@ -211,7 +212,6 @@ OC.L10N.register(
"Cannot transfer ownership of a file or folder you don't own" : "Non faghet a tramudare sa propriedade de un'archìviu o cartella de is chi non ses mere",
"%s used" : "%s impreadu",
"%1$s of %2$s used" : "%1$s de %2$s impreadu",
- "Settings" : "Impostatziones",
- "WebDAV" : "WebDAV"
+ "Settings" : "Impostatziones"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/sc.json b/apps/files/l10n/sc.json
index 7eb5961c3ad..2a358b538c6 100644
--- a/apps/files/l10n/sc.json
+++ b/apps/files/l10n/sc.json
@@ -167,6 +167,7 @@
"Show hidden files" : "Mustra archìvios cuados",
"Crop image previews" : "Retàllia anteprimas de s'imàgine",
"Additional settings" : "Impostatziones in agiunta",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Còpia in is punta de billete",
"Use this address to access your Files via WebDAV" : "Imprea custu indiritzu pro intrare in archìvios tràmite WebDAV",
"Unable to change the favourite state of the file" : "Non faghet a cambiare s'istadu de preferidu de s'archìviu",
@@ -209,7 +210,6 @@
"Cannot transfer ownership of a file or folder you don't own" : "Non faghet a tramudare sa propriedade de un'archìviu o cartella de is chi non ses mere",
"%s used" : "%s impreadu",
"%1$s of %2$s used" : "%1$s de %2$s impreadu",
- "Settings" : "Impostatziones",
- "WebDAV" : "WebDAV"
+ "Settings" : "Impostatziones"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/sk.js b/apps/files/l10n/sk.js
index 9596c399f2a..3c2c9486d81 100644
--- a/apps/files/l10n/sk.js
+++ b/apps/files/l10n/sk.js
@@ -181,6 +181,7 @@ OC.L10N.register(
"Show hidden files" : "Zobraziť skryté súbory",
"Crop image previews" : "Orezať náhľady obrázkov",
"Additional settings" : "Ďalšie nastavenia",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Skopírovať do schránky",
"Use this address to access your Files via WebDAV" : "Táto adresa sa používa na prístup k vašim súborom prostredníctvom WebDAV",
"Clipboard is not available" : "Schránka nie je prístupná",
@@ -225,7 +226,6 @@ OC.L10N.register(
"%s used" : "%s použitých",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "Využité: %1$s z %2$s",
- "Settings" : "Nastavenia",
- "WebDAV" : "WebDAV"
+ "Settings" : "Nastavenia"
},
"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);");
diff --git a/apps/files/l10n/sk.json b/apps/files/l10n/sk.json
index f1ff8e71afc..c57d23af37f 100644
--- a/apps/files/l10n/sk.json
+++ b/apps/files/l10n/sk.json
@@ -179,6 +179,7 @@
"Show hidden files" : "Zobraziť skryté súbory",
"Crop image previews" : "Orezať náhľady obrázkov",
"Additional settings" : "Ďalšie nastavenia",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Skopírovať do schránky",
"Use this address to access your Files via WebDAV" : "Táto adresa sa používa na prístup k vašim súborom prostredníctvom WebDAV",
"Clipboard is not available" : "Schránka nie je prístupná",
@@ -223,7 +224,6 @@
"%s used" : "%s použitých",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "Využité: %1$s z %2$s",
- "Settings" : "Nastavenia",
- "WebDAV" : "WebDAV"
+ "Settings" : "Nastavenia"
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);"
} \ No newline at end of file
diff --git a/apps/files/l10n/sl.js b/apps/files/l10n/sl.js
index cbf660c6d0b..ff133922aee 100644
--- a/apps/files/l10n/sl.js
+++ b/apps/files/l10n/sl.js
@@ -169,6 +169,7 @@ OC.L10N.register(
"Show hidden files" : "Pokaži skrite datoteke",
"Crop image previews" : "Obreži slike predogleda",
"Additional settings" : "Dodatne nastavitve",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopiraj v odložišče",
"Use this address to access your Files via WebDAV" : "Uporabite ta naslov za dostop do datotek z uporabo WebDAV",
"Unable to change the favourite state of the file" : "Ni mogoče spremeniti stanja priljubljenosti datoteke",
@@ -211,7 +212,6 @@ OC.L10N.register(
"Cannot transfer ownership of a file or folder you don't own" : "Ni mogoče prenesti lastništva datotek in map, katerih niste lastnik",
"%s used" : "Uporabljeno %s",
"%1$s of %2$s used" : "Uporabljeno %1$s od %2$s",
- "Settings" : "Nastavitve",
- "WebDAV" : "WebDAV"
+ "Settings" : "Nastavitve"
},
"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);");
diff --git a/apps/files/l10n/sl.json b/apps/files/l10n/sl.json
index 481fd00c6c7..cf2cb82ae43 100644
--- a/apps/files/l10n/sl.json
+++ b/apps/files/l10n/sl.json
@@ -167,6 +167,7 @@
"Show hidden files" : "Pokaži skrite datoteke",
"Crop image previews" : "Obreži slike predogleda",
"Additional settings" : "Dodatne nastavitve",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopiraj v odložišče",
"Use this address to access your Files via WebDAV" : "Uporabite ta naslov za dostop do datotek z uporabo WebDAV",
"Unable to change the favourite state of the file" : "Ni mogoče spremeniti stanja priljubljenosti datoteke",
@@ -209,7 +210,6 @@
"Cannot transfer ownership of a file or folder you don't own" : "Ni mogoče prenesti lastništva datotek in map, katerih niste lastnik",
"%s used" : "Uporabljeno %s",
"%1$s of %2$s used" : "Uporabljeno %1$s od %2$s",
- "Settings" : "Nastavitve",
- "WebDAV" : "WebDAV"
+ "Settings" : "Nastavitve"
},"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"
} \ No newline at end of file
diff --git a/apps/files/l10n/sq.js b/apps/files/l10n/sq.js
index 08d809bae3d..e1c2d1fb654 100644
--- a/apps/files/l10n/sq.js
+++ b/apps/files/l10n/sq.js
@@ -100,6 +100,7 @@ OC.L10N.register(
"Unknown error" : "Gabim i panjohur",
"Show hidden files" : "Shfaq kartela të fshehura",
"Additional settings" : "Konfigurime shtesë",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopjo në dërrasë ",
"Cancel" : "Anullo",
"Create" : "Krijo",
@@ -127,7 +128,6 @@ OC.L10N.register(
"Unlimited" : "E palimituar",
"%s used" : "%s të përdorura",
"%1$s of %2$s used" : "%1$s e %2$s përdorur",
- "Settings" : "Rregullime",
- "WebDAV" : "WebDAV"
+ "Settings" : "Rregullime"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/sq.json b/apps/files/l10n/sq.json
index 8229f593034..5b9c5dc2dc2 100644
--- a/apps/files/l10n/sq.json
+++ b/apps/files/l10n/sq.json
@@ -98,6 +98,7 @@
"Unknown error" : "Gabim i panjohur",
"Show hidden files" : "Shfaq kartela të fshehura",
"Additional settings" : "Konfigurime shtesë",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopjo në dërrasë ",
"Cancel" : "Anullo",
"Create" : "Krijo",
@@ -125,7 +126,6 @@
"Unlimited" : "E palimituar",
"%s used" : "%s të përdorura",
"%1$s of %2$s used" : "%1$s e %2$s përdorur",
- "Settings" : "Rregullime",
- "WebDAV" : "WebDAV"
+ "Settings" : "Rregullime"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/sr.js b/apps/files/l10n/sr.js
index 066030a1d3b..f8cbd4ccdce 100644
--- a/apps/files/l10n/sr.js
+++ b/apps/files/l10n/sr.js
@@ -157,6 +157,7 @@ OC.L10N.register(
"Ownership transfer request sent" : "Послат захтев за пренос власништва",
"Show hidden files" : "Прикажи скривене фајлове",
"Additional settings" : "Додатне поставке",
+ "WebDAV" : "ВебДАВ",
"Copy to clipboard" : "Копирај у оставу",
"Use this address to access your Files via WebDAV" : "Користи ову адресу да приступате Вашим фајловима преко ВебДАВа",
"Unable to change the favourite state of the file" : "Неуспела промена стања омиљености фајла",
@@ -190,7 +191,6 @@ OC.L10N.register(
"Cannot transfer ownership of a file or folder you don't own" : "Не можете пренети власништво фајла или фасцикле које нису Ваше",
"%s used" : "%s искоришћено",
"%1$s of %2$s used" : "Заузето %1$s од %2$s",
- "Settings" : "Поставке",
- "WebDAV" : "ВебДАВ"
+ "Settings" : "Поставке"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files/l10n/sr.json b/apps/files/l10n/sr.json
index c0f80d7ee64..e366401a03a 100644
--- a/apps/files/l10n/sr.json
+++ b/apps/files/l10n/sr.json
@@ -155,6 +155,7 @@
"Ownership transfer request sent" : "Послат захтев за пренос власништва",
"Show hidden files" : "Прикажи скривене фајлове",
"Additional settings" : "Додатне поставке",
+ "WebDAV" : "ВебДАВ",
"Copy to clipboard" : "Копирај у оставу",
"Use this address to access your Files via WebDAV" : "Користи ову адресу да приступате Вашим фајловима преко ВебДАВа",
"Unable to change the favourite state of the file" : "Неуспела промена стања омиљености фајла",
@@ -188,7 +189,6 @@
"Cannot transfer ownership of a file or folder you don't own" : "Не можете пренети власништво фајла или фасцикле које нису Ваше",
"%s used" : "%s искоришћено",
"%1$s of %2$s used" : "Заузето %1$s од %2$s",
- "Settings" : "Поставке",
- "WebDAV" : "ВебДАВ"
+ "Settings" : "Поставке"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/files/l10n/sv.js b/apps/files/l10n/sv.js
index 95721c60ae5..8859b2b5cae 100644
--- a/apps/files/l10n/sv.js
+++ b/apps/files/l10n/sv.js
@@ -187,11 +187,10 @@ OC.L10N.register(
"Show hidden files" : "Visa dolda filer",
"Crop image previews" : "Beskär förhandsgranskningar för bilder",
"Additional settings" : "Övriga inställningar",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopiera till urklipp",
"Use this address to access your Files via WebDAV" : "Använd denna adress för att komma åt dina filer med WebDAV",
"Clipboard is not available" : "Urklipp är inte tillgängligt",
- "Webdav URL copied to clipboard" : "Webdav URL kopierad till urklipp",
"Unable to change the favourite state of the file" : "Kan inte ändra filens favoritstatus",
"Error while loading the file data" : "Fel vid inläsning av fildata",
"Pick a template for {name}" : "Välj en mall för {name}",
@@ -233,7 +232,6 @@ OC.L10N.register(
"%s used" : "%s använt",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s av %2$s använt",
- "Settings" : "Inställningar",
- "WebDAV" : "WebDAV"
+ "Settings" : "Inställningar"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/sv.json b/apps/files/l10n/sv.json
index 8bc83328837..f9a587d46e1 100644
--- a/apps/files/l10n/sv.json
+++ b/apps/files/l10n/sv.json
@@ -185,11 +185,10 @@
"Show hidden files" : "Visa dolda filer",
"Crop image previews" : "Beskär förhandsgranskningar för bilder",
"Additional settings" : "Övriga inställningar",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Kopiera till urklipp",
"Use this address to access your Files via WebDAV" : "Använd denna adress för att komma åt dina filer med WebDAV",
"Clipboard is not available" : "Urklipp är inte tillgängligt",
- "Webdav URL copied to clipboard" : "Webdav URL kopierad till urklipp",
"Unable to change the favourite state of the file" : "Kan inte ändra filens favoritstatus",
"Error while loading the file data" : "Fel vid inläsning av fildata",
"Pick a template for {name}" : "Välj en mall för {name}",
@@ -231,7 +230,6 @@
"%s used" : "%s använt",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "%1$s av %2$s använt",
- "Settings" : "Inställningar",
- "WebDAV" : "WebDAV"
+ "Settings" : "Inställningar"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/th.js b/apps/files/l10n/th.js
index a608e197390..1c451de01b5 100644
--- a/apps/files/l10n/th.js
+++ b/apps/files/l10n/th.js
@@ -187,11 +187,10 @@ OC.L10N.register(
"Show hidden files" : "แสดงไฟล์ที่ซ่อนอยู่",
"Crop image previews" : "ครอปตัดรูปภาพตัวอย่าง",
"Additional settings" : "การตั้งค่าเพิ่มเติม",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "คัดลอกไปยังคลิปบอร์ด",
"Use this address to access your Files via WebDAV" : "ใช้ที่อยู่นี้เพื่อเข้าถึงไฟล์ของคุณผ่าน WebDAV",
"Clipboard is not available" : "คลิปบอร์ดไม่พร้อมใช้งาน",
- "Webdav URL copied to clipboard" : "คัดลอก URL Webdav ไปยังคลิปบอร์ดแล้ว",
"Unable to change the favourite state of the file" : "ไม่สามารถเปลี่ยนสถานะรายการโปรดของไฟล์",
"Error while loading the file data" : "ข้อผิดพลาดขณะโหลดข้อมูลไฟล์",
"Pick a template for {name}" : "เลือกเทมเพลตสำหรับ {name}",
@@ -233,7 +232,6 @@ OC.L10N.register(
"%s used" : "ใช้ไป %s",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "ใช้ไป %1$s จาก %2$s",
- "Settings" : "การตั้งค่า",
- "WebDAV" : "WebDAV"
+ "Settings" : "การตั้งค่า"
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/th.json b/apps/files/l10n/th.json
index 6d7d9b8805b..fb4a42fb2dd 100644
--- a/apps/files/l10n/th.json
+++ b/apps/files/l10n/th.json
@@ -185,11 +185,10 @@
"Show hidden files" : "แสดงไฟล์ที่ซ่อนอยู่",
"Crop image previews" : "ครอปตัดรูปภาพตัวอย่าง",
"Additional settings" : "การตั้งค่าเพิ่มเติม",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "คัดลอกไปยังคลิปบอร์ด",
"Use this address to access your Files via WebDAV" : "ใช้ที่อยู่นี้เพื่อเข้าถึงไฟล์ของคุณผ่าน WebDAV",
"Clipboard is not available" : "คลิปบอร์ดไม่พร้อมใช้งาน",
- "Webdav URL copied to clipboard" : "คัดลอก URL Webdav ไปยังคลิปบอร์ดแล้ว",
"Unable to change the favourite state of the file" : "ไม่สามารถเปลี่ยนสถานะรายการโปรดของไฟล์",
"Error while loading the file data" : "ข้อผิดพลาดขณะโหลดข้อมูลไฟล์",
"Pick a template for {name}" : "เลือกเทมเพลตสำหรับ {name}",
@@ -231,7 +230,6 @@
"%s used" : "ใช้ไป %s",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "ใช้ไป %1$s จาก %2$s",
- "Settings" : "การตั้งค่า",
- "WebDAV" : "WebDAV"
+ "Settings" : "การตั้งค่า"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files/l10n/tr.js b/apps/files/l10n/tr.js
index c066da7ff9a..874c31f29fb 100644
--- a/apps/files/l10n/tr.js
+++ b/apps/files/l10n/tr.js
@@ -187,11 +187,11 @@ OC.L10N.register(
"Show hidden files" : "Gizli dosyaları görüntüle",
"Crop image previews" : "Görsel ön izlemeleri kırpılsın",
"Additional settings" : "Ek ayarlar",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Panoya kopyala",
"Use this address to access your Files via WebDAV" : "Dosyalarınıza WebDAV üzerinden erişmek için bu adresi kullanın",
"Clipboard is not available" : "Pano kullanılamıyor",
- "Webdav URL copied to clipboard" : "Webdav adresi panoya kopyalandı",
+ "WebDAV URL copied to clipboard" : "WebDAV adresi panoya kopyalandı",
"Unable to change the favourite state of the file" : "Dosyanın sık kullanılan durumu değiştirilemedi",
"Error while loading the file data" : "Dosya verileri yüklenirken sorun çıktı",
"Pick a template for {name}" : "{name} için bir kalıp seçin",
@@ -233,7 +233,6 @@ OC.L10N.register(
"%s used" : "%s kullanılıyor",
"%s%%" : "%%%s",
"%1$s of %2$s used" : "%1$s / %2$s kullanıldı",
- "Settings" : "Ayarlar",
- "WebDAV" : "WebDAV"
+ "Settings" : "Ayarlar"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/files/l10n/tr.json b/apps/files/l10n/tr.json
index de35dc045b7..d3e9584651b 100644
--- a/apps/files/l10n/tr.json
+++ b/apps/files/l10n/tr.json
@@ -185,11 +185,11 @@
"Show hidden files" : "Gizli dosyaları görüntüle",
"Crop image previews" : "Görsel ön izlemeleri kırpılsın",
"Additional settings" : "Ek ayarlar",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Panoya kopyala",
"Use this address to access your Files via WebDAV" : "Dosyalarınıza WebDAV üzerinden erişmek için bu adresi kullanın",
"Clipboard is not available" : "Pano kullanılamıyor",
- "Webdav URL copied to clipboard" : "Webdav adresi panoya kopyalandı",
+ "WebDAV URL copied to clipboard" : "WebDAV adresi panoya kopyalandı",
"Unable to change the favourite state of the file" : "Dosyanın sık kullanılan durumu değiştirilemedi",
"Error while loading the file data" : "Dosya verileri yüklenirken sorun çıktı",
"Pick a template for {name}" : "{name} için bir kalıp seçin",
@@ -231,7 +231,6 @@
"%s used" : "%s kullanılıyor",
"%s%%" : "%%%s",
"%1$s of %2$s used" : "%1$s / %2$s kullanıldı",
- "Settings" : "Ayarlar",
- "WebDAV" : "WebDAV"
+ "Settings" : "Ayarlar"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/uk.js b/apps/files/l10n/uk.js
index 71efadddf33..db8dc1a9945 100644
--- a/apps/files/l10n/uk.js
+++ b/apps/files/l10n/uk.js
@@ -187,11 +187,10 @@ OC.L10N.register(
"Show hidden files" : "Показувати приховані файли",
"Crop image previews" : "Кадрування попереднього перегляду зображень",
"Additional settings" : "Додаткові налаштування",
- "Webdav" : "WebDAV",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Скопіювати до буферу обміну ",
"Use this address to access your Files via WebDAV" : "Адреса для доступу до файлів за допомогою протоколу WebDAV",
"Clipboard is not available" : "Буфер обміну недоступний",
- "Webdav URL copied to clipboard" : "Посилання WebDAV скопійовано",
"Unable to change the favourite state of the file" : "Неможливо змінити стан \"вподобано\" для цього файла",
"Error while loading the file data" : "Помилка під час завантаження даних про файл",
"Pick a template for {name}" : "Вибрати шаблон для {name}",
@@ -233,7 +232,6 @@ OC.L10N.register(
"%s used" : "%s використано",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "Використано %1$s із %2$s",
- "Settings" : "Налаштування",
- "WebDAV" : "WebDAV"
+ "Settings" : "Налаштування"
},
"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);");
diff --git a/apps/files/l10n/uk.json b/apps/files/l10n/uk.json
index 4bb26ff5000..40e3ce00027 100644
--- a/apps/files/l10n/uk.json
+++ b/apps/files/l10n/uk.json
@@ -185,11 +185,10 @@
"Show hidden files" : "Показувати приховані файли",
"Crop image previews" : "Кадрування попереднього перегляду зображень",
"Additional settings" : "Додаткові налаштування",
- "Webdav" : "WebDAV",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "Скопіювати до буферу обміну ",
"Use this address to access your Files via WebDAV" : "Адреса для доступу до файлів за допомогою протоколу WebDAV",
"Clipboard is not available" : "Буфер обміну недоступний",
- "Webdav URL copied to clipboard" : "Посилання WebDAV скопійовано",
"Unable to change the favourite state of the file" : "Неможливо змінити стан \"вподобано\" для цього файла",
"Error while loading the file data" : "Помилка під час завантаження даних про файл",
"Pick a template for {name}" : "Вибрати шаблон для {name}",
@@ -231,7 +230,6 @@
"%s used" : "%s використано",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "Використано %1$s із %2$s",
- "Settings" : "Налаштування",
- "WebDAV" : "WebDAV"
+ "Settings" : "Налаштування"
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"
} \ No newline at end of file
diff --git a/apps/files/l10n/vi.js b/apps/files/l10n/vi.js
index 34e5bf8ebdb..b1d5453518b 100644
--- a/apps/files/l10n/vi.js
+++ b/apps/files/l10n/vi.js
@@ -168,6 +168,7 @@ OC.L10N.register(
"Ownership transfer request sent" : "‎Yêu cầu chuyển quyền sở hữu đã được gửi‎",
"Show hidden files" : "Hiển thị các file bị ẩn",
"Crop image previews" : "‎Xén ảnh ‎bản xem trước",
+ "WebDAV" : "WebDAV",
"Use this address to access your Files via WebDAV" : "‎Sử dụng địa chỉ này để truy cập tệp của bạn thông qua WebDAV‎",
"Unable to change the favourite state of the file" : "‎Không thể thay đổi trạng thái yêu thích của tệp‎",
"Error while loading the file data" : "‎Lỗi xảy ra trong khi tải dữ liệu tệp‎",
@@ -208,7 +209,6 @@ OC.L10N.register(
"Cannot transfer ownership of a file or folder you don't own" : "‎Không thể chuyển quyền sở hữu tệp hoặc thư mục bạn không sở hữu‎",
"%s used" : "%s ‎đã sử dụng‎",
"%1$s of %2$s used" : "%1$s trên %2$s đã sử dụng",
- "Settings" : "Cài đặt",
- "WebDAV" : "WebDAV"
+ "Settings" : "Cài đặt"
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/vi.json b/apps/files/l10n/vi.json
index 2c71d79d0dd..27c1212025a 100644
--- a/apps/files/l10n/vi.json
+++ b/apps/files/l10n/vi.json
@@ -166,6 +166,7 @@
"Ownership transfer request sent" : "‎Yêu cầu chuyển quyền sở hữu đã được gửi‎",
"Show hidden files" : "Hiển thị các file bị ẩn",
"Crop image previews" : "‎Xén ảnh ‎bản xem trước",
+ "WebDAV" : "WebDAV",
"Use this address to access your Files via WebDAV" : "‎Sử dụng địa chỉ này để truy cập tệp của bạn thông qua WebDAV‎",
"Unable to change the favourite state of the file" : "‎Không thể thay đổi trạng thái yêu thích của tệp‎",
"Error while loading the file data" : "‎Lỗi xảy ra trong khi tải dữ liệu tệp‎",
@@ -206,7 +207,6 @@
"Cannot transfer ownership of a file or folder you don't own" : "‎Không thể chuyển quyền sở hữu tệp hoặc thư mục bạn không sở hữu‎",
"%s used" : "%s ‎đã sử dụng‎",
"%1$s of %2$s used" : "%1$s trên %2$s đã sử dụng",
- "Settings" : "Cài đặt",
- "WebDAV" : "WebDAV"
+ "Settings" : "Cài đặt"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files/l10n/zh_CN.js b/apps/files/l10n/zh_CN.js
index 7e1136745c8..e9524c75850 100644
--- a/apps/files/l10n/zh_CN.js
+++ b/apps/files/l10n/zh_CN.js
@@ -181,6 +181,7 @@ OC.L10N.register(
"Show hidden files" : "显示隐藏文件",
"Crop image previews" : "裁剪图片预览",
"Additional settings" : "其他设置",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "复制到剪贴板",
"Use this address to access your Files via WebDAV" : "使用此地址通过 WebDAV 访问您的文件",
"Unable to change the favourite state of the file" : "无法修改文件的收藏状态",
@@ -224,7 +225,6 @@ OC.L10N.register(
"%s used" : "已使用 %s",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "已使用 %2$s 中的 %1$s",
- "Settings" : "设置",
- "WebDAV" : "WebDAV"
+ "Settings" : "设置"
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/zh_CN.json b/apps/files/l10n/zh_CN.json
index ac44bd1bd32..2e1e9160ee7 100644
--- a/apps/files/l10n/zh_CN.json
+++ b/apps/files/l10n/zh_CN.json
@@ -179,6 +179,7 @@
"Show hidden files" : "显示隐藏文件",
"Crop image previews" : "裁剪图片预览",
"Additional settings" : "其他设置",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "复制到剪贴板",
"Use this address to access your Files via WebDAV" : "使用此地址通过 WebDAV 访问您的文件",
"Unable to change the favourite state of the file" : "无法修改文件的收藏状态",
@@ -222,7 +223,6 @@
"%s used" : "已使用 %s",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "已使用 %2$s 中的 %1$s",
- "Settings" : "设置",
- "WebDAV" : "WebDAV"
+ "Settings" : "设置"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files/l10n/zh_HK.js b/apps/files/l10n/zh_HK.js
index f68972a8455..228028682a5 100644
--- a/apps/files/l10n/zh_HK.js
+++ b/apps/files/l10n/zh_HK.js
@@ -187,11 +187,10 @@ OC.L10N.register(
"Show hidden files" : "顯示隱藏檔",
"Crop image previews" : "圖片裁剪預覽",
"Additional settings" : "其他設定",
- "Webdav" : "WebDAV",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "複製到剪貼板",
"Use this address to access your Files via WebDAV" : "用這位址使用 WebDAV 存取你的檔案。",
"Clipboard is not available" : "剪貼板不可用",
- "Webdav URL copied to clipboard" : "WebDAV 連結已複製到剪貼板",
"Unable to change the favourite state of the file" : "無法更改檔案的最愛狀態",
"Error while loading the file data" : "載入檔案資料失敗",
"Pick a template for {name}" : "為 {name} 選擇一個模板",
@@ -233,7 +232,6 @@ OC.L10N.register(
"%s used" : "使用了 %s 的存儲空間",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "在 %2$s 中使用了 %1$s",
- "Settings" : "設定",
- "WebDAV" : "WebDAV"
+ "Settings" : "設定"
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/zh_HK.json b/apps/files/l10n/zh_HK.json
index 490ab547c92..f175273edb8 100644
--- a/apps/files/l10n/zh_HK.json
+++ b/apps/files/l10n/zh_HK.json
@@ -185,11 +185,10 @@
"Show hidden files" : "顯示隱藏檔",
"Crop image previews" : "圖片裁剪預覽",
"Additional settings" : "其他設定",
- "Webdav" : "WebDAV",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "複製到剪貼板",
"Use this address to access your Files via WebDAV" : "用這位址使用 WebDAV 存取你的檔案。",
"Clipboard is not available" : "剪貼板不可用",
- "Webdav URL copied to clipboard" : "WebDAV 連結已複製到剪貼板",
"Unable to change the favourite state of the file" : "無法更改檔案的最愛狀態",
"Error while loading the file data" : "載入檔案資料失敗",
"Pick a template for {name}" : "為 {name} 選擇一個模板",
@@ -231,7 +230,6 @@
"%s used" : "使用了 %s 的存儲空間",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "在 %2$s 中使用了 %1$s",
- "Settings" : "設定",
- "WebDAV" : "WebDAV"
+ "Settings" : "設定"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files/l10n/zh_TW.js b/apps/files/l10n/zh_TW.js
index 2cac6477faa..318dc6cd1eb 100644
--- a/apps/files/l10n/zh_TW.js
+++ b/apps/files/l10n/zh_TW.js
@@ -187,11 +187,11 @@ OC.L10N.register(
"Show hidden files" : "顯示隱藏檔",
"Crop image previews" : "圖片裁剪預覽",
"Additional settings" : "其他設定",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "複製到剪貼簿",
"Use this address to access your Files via WebDAV" : "使用此位置透過 WebDAV 存取您的檔案",
"Clipboard is not available" : "剪貼簿無法使用",
- "Webdav URL copied to clipboard" : "已將 Webdav URL 複製到剪貼簿",
+ "WebDAV URL copied to clipboard" : "WebDAV URL 已複製到剪貼簿",
"Unable to change the favourite state of the file" : "無法更改檔案的最愛狀態",
"Error while loading the file data" : "載入檔案資料時發生錯誤",
"Pick a template for {name}" : "為 {name} 挑選範本",
@@ -233,7 +233,6 @@ OC.L10N.register(
"%s used" : "%s 已使用",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "在 %2$s 中使用了 %1$s ",
- "Settings" : "設定",
- "WebDAV" : "WebDAV"
+ "Settings" : "設定"
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/zh_TW.json b/apps/files/l10n/zh_TW.json
index 2f29110708a..c1c817962d5 100644
--- a/apps/files/l10n/zh_TW.json
+++ b/apps/files/l10n/zh_TW.json
@@ -185,11 +185,11 @@
"Show hidden files" : "顯示隱藏檔",
"Crop image previews" : "圖片裁剪預覽",
"Additional settings" : "其他設定",
- "Webdav" : "Webdav",
+ "WebDAV" : "WebDAV",
"Copy to clipboard" : "複製到剪貼簿",
"Use this address to access your Files via WebDAV" : "使用此位置透過 WebDAV 存取您的檔案",
"Clipboard is not available" : "剪貼簿無法使用",
- "Webdav URL copied to clipboard" : "已將 Webdav URL 複製到剪貼簿",
+ "WebDAV URL copied to clipboard" : "WebDAV URL 已複製到剪貼簿",
"Unable to change the favourite state of the file" : "無法更改檔案的最愛狀態",
"Error while loading the file data" : "載入檔案資料時發生錯誤",
"Pick a template for {name}" : "為 {name} 挑選範本",
@@ -231,7 +231,6 @@
"%s used" : "%s 已使用",
"%s%%" : "%s%%",
"%1$s of %2$s used" : "在 %2$s 中使用了 %1$s ",
- "Settings" : "設定",
- "WebDAV" : "WebDAV"
+ "Settings" : "設定"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files/src/views/Settings.vue b/apps/files/src/views/Settings.vue
index 9a63fea4924..1319b1f1808 100644
--- a/apps/files/src/views/Settings.vue
+++ b/apps/files/src/views/Settings.vue
@@ -46,7 +46,7 @@
</NcAppSettingsSection>
<!-- Webdav URL-->
- <NcAppSettingsSection id="webdav" :title="t('files', 'Webdav')">
+ <NcAppSettingsSection id="webdav" :title="t('files', 'WebDAV')">
<NcInputField id="webdav-url-input"
:show-trailing-button="true"
:success="webdavUrlCopied"
@@ -156,7 +156,7 @@ export default {
await navigator.clipboard.writeText(this.webdavUrl)
this.webdavUrlCopied = true
- showSuccess(t('files', 'Webdav URL copied to clipboard'))
+ showSuccess(t('files', 'WebDAV URL copied to clipboard'))
setTimeout(() => {
this.webdavUrlCopied = false
}, 5000)
diff --git a/apps/files_sharing/l10n/nl.js b/apps/files_sharing/l10n/nl.js
index 4ffe18b53be..54be2901167 100644
--- a/apps/files_sharing/l10n/nl.js
+++ b/apps/files_sharing/l10n/nl.js
@@ -100,6 +100,7 @@ OC.L10N.register(
"Files" : "Bestanden",
"A file or folder has been <strong>shared</strong>" : "Een bestand of map is <strong>gedeeld</strong>",
"Shared link" : "Gedeeld link",
+ "Wrong share ID, share does not exist" : "Onjuist deel-ID, de gedeelde folder bestaat niet",
"Could not delete share" : "Kan gedeelde folder niet verwijderen",
"Please specify a file or folder path" : "Geef een bestand of pad van een map op",
"Wrong path, file/folder does not exist" : "slecht path, file/folder bestaat niet",
@@ -151,6 +152,7 @@ OC.L10N.register(
"Read only" : "Alleen lezen",
"Allow upload and editing" : "Uploaden en bewerken toestaan",
"File drop (upload only)" : "Bestand droppen (alleen uploaden)",
+ "Custom permissions" : "Aangepaste machtigingen",
"Read" : "Lezen",
"Upload" : "Uploaden",
"Edit" : "Bewerk",
@@ -175,6 +177,7 @@ OC.L10N.register(
"Via “{folder}”" : "Via “{folder}”",
"Internal link" : "Interne link",
"Cannot copy, please copy the link manually" : "Kan niet kopiëren, kopieer de link handmatig",
+ "Copy internal link to clipboard" : "Kopieer interne link naar klembord",
"Only works for users with access to this folder" : "Dit werkt alleen voor gebruikers met toegang tot deze map",
"Only works for users with access to this file" : "Dit werkt alleen voor gebruikers met toegang tot dit bestand",
"Link copied" : "Link gekopieerd",
@@ -188,6 +191,8 @@ OC.L10N.register(
"Share label" : "Deel het label",
"Hide download" : "Verberg download",
"Password protect" : "Beveiligen met wachtwoord",
+ "Password expires {passwordExpirationTime}" : "Wachtwoord vervalt {passwordExpirationTime}",
+ "Password expired" : "Wachtwoord is vervallen",
"Video verification" : "Video verificatie",
"Enter a note for the share recipient" : "Geef een notitie op voor de share-ontvanger",
"Add another link" : "Nog een link toevoegen ",
diff --git a/apps/files_sharing/l10n/nl.json b/apps/files_sharing/l10n/nl.json
index 9cbdf7cc183..7da38601e83 100644
--- a/apps/files_sharing/l10n/nl.json
+++ b/apps/files_sharing/l10n/nl.json
@@ -98,6 +98,7 @@
"Files" : "Bestanden",
"A file or folder has been <strong>shared</strong>" : "Een bestand of map is <strong>gedeeld</strong>",
"Shared link" : "Gedeeld link",
+ "Wrong share ID, share does not exist" : "Onjuist deel-ID, de gedeelde folder bestaat niet",
"Could not delete share" : "Kan gedeelde folder niet verwijderen",
"Please specify a file or folder path" : "Geef een bestand of pad van een map op",
"Wrong path, file/folder does not exist" : "slecht path, file/folder bestaat niet",
@@ -149,6 +150,7 @@
"Read only" : "Alleen lezen",
"Allow upload and editing" : "Uploaden en bewerken toestaan",
"File drop (upload only)" : "Bestand droppen (alleen uploaden)",
+ "Custom permissions" : "Aangepaste machtigingen",
"Read" : "Lezen",
"Upload" : "Uploaden",
"Edit" : "Bewerk",
@@ -173,6 +175,7 @@
"Via “{folder}”" : "Via “{folder}”",
"Internal link" : "Interne link",
"Cannot copy, please copy the link manually" : "Kan niet kopiëren, kopieer de link handmatig",
+ "Copy internal link to clipboard" : "Kopieer interne link naar klembord",
"Only works for users with access to this folder" : "Dit werkt alleen voor gebruikers met toegang tot deze map",
"Only works for users with access to this file" : "Dit werkt alleen voor gebruikers met toegang tot dit bestand",
"Link copied" : "Link gekopieerd",
@@ -186,6 +189,8 @@
"Share label" : "Deel het label",
"Hide download" : "Verberg download",
"Password protect" : "Beveiligen met wachtwoord",
+ "Password expires {passwordExpirationTime}" : "Wachtwoord vervalt {passwordExpirationTime}",
+ "Password expired" : "Wachtwoord is vervallen",
"Video verification" : "Video verificatie",
"Enter a note for the share recipient" : "Geef een notitie op voor de share-ontvanger",
"Add another link" : "Nog een link toevoegen ",
diff --git a/apps/files_trashbin/lib/Trashbin.php b/apps/files_trashbin/lib/Trashbin.php
index 46a2b07fc07..00e6b35cc62 100644
--- a/apps/files_trashbin/lib/Trashbin.php
+++ b/apps/files_trashbin/lib/Trashbin.php
@@ -69,13 +69,6 @@ class Trashbin {
public const DEFAULTMAXSIZE = 50;
/**
- * Whether versions have already be rescanned during this PHP request
- *
- * @var bool
- */
- private static $scannedVersions = false;
-
- /**
* Ensure we don't need to scan the file during the move to trash
* by triggering the scan in the pre-hook
*
@@ -980,23 +973,6 @@ class Trashbin {
/** @var \OC\Files\Storage\Storage $storage */
[$storage,] = $view->resolvePath('/');
- //force rescan of versions, local storage may not have updated the cache
- $waitstart = time();
- while (!self::$scannedVersions) {
- try {
- $storage->getScanner()->scan('files_trashbin/versions');
- self::$scannedVersions = true;
- } catch (LockedException $e) {
- /* a concurrent remove/restore from trash occurred,
- * retry with a maximum wait time of approx. 15 seconds
- */
- if (time() - $waitstart > 15) {
- throw $e;
- }
- usleep(50000 + rand(0, 10000));
- }
- }
-
$pattern = \OC::$server->getDatabaseConnection()->escapeLikeParameter(basename($filename));
if ($timestamp) {
// fetch for old versions
diff --git a/apps/files_trashbin/src/filelist.js b/apps/files_trashbin/src/filelist.js
index 8920dcbf8b9..e113b0f0ffa 100644
--- a/apps/files_trashbin/src/filelist.js
+++ b/apps/files_trashbin/src/filelist.js
@@ -25,6 +25,9 @@
*
*/
+// eslint-disable-next-line import/no-unresolved, node/no-missing-import
+import PQueue from 'p-queue'
+
/* eslint-disable */
(function() {
var DELETED_REGEXP = new RegExp(/^(.+)\.d[0-9]+$/)
@@ -61,6 +64,7 @@
var FileList = function($el, options) {
this.client = options.client
this.initialize($el, options)
+ this.deleteOperationQueue = new PQueue({ concurrency: 4 })
}
FileList.prototype = _.extend({}, OCA.Files.FileList.prototype,
/** @lends OCA.Trashbin.FileList.prototype */ {
@@ -185,12 +189,10 @@
this.fileMultiSelectMenu.toggleLoading('restore', true)
var restorePromises = files.map(function(file) {
- return self.client.move(OC.joinPaths('trash', self.getCurrentDirectory(), file), OC.joinPaths('restore', file), true)
- .then(
- function() {
- self._removeCallback([file])
- }
- )
+ return self.deleteOperationQueue.add(async () => {
+ self.client.move(OC.joinPaths('trash', self.getCurrentDirectory(), file), OC.joinPaths('restore', file), true)
+ self._removeCallback([file])
+ })
})
return Promise.all(restorePromises).then(
function() {
@@ -226,12 +228,10 @@
} else {
this.fileMultiSelectMenu.toggleLoading('delete', true)
var deletePromises = files.map(function(file) {
- return self.client.remove(OC.joinPaths('trash', self.getCurrentDirectory(), file))
- .then(
- function() {
- self._removeCallback([file])
- }
- )
+ return self.deleteOperationQueue.add(async () => {
+ await self.client.remove(OC.joinPaths('trash', self.getCurrentDirectory(), file))
+ self._removeCallback([file])
+ })
})
return Promise.all(deletePromises).then(
function() {
diff --git a/apps/files_versions/lib/Storage.php b/apps/files_versions/lib/Storage.php
index 2fd208cd364..75ca7e4bcee 100644
--- a/apps/files_versions/lib/Storage.php
+++ b/apps/files_versions/lib/Storage.php
@@ -52,6 +52,7 @@ use OCA\Files_Versions\Command\Expire;
use OCA\Files_Versions\Db\VersionsMapper;
use OCA\Files_Versions\Events\CreateVersionEvent;
use OCA\Files_Versions\Versions\IVersionManager;
+use OCP\AppFramework\Db\DoesNotExistException;
use OCP\Files\FileInfo;
use OCP\Files\Folder;
use OCP\Files\IRootFolder;
@@ -592,11 +593,16 @@ class Storage {
// Check that the version does not have a label.
$path = $versionsRoot->getRelativePath($info->getPath());
$node = $userFolder->get(substr($path, 0, -strlen('.v'.$version)));
- $versionEntity = $versionsMapper->findVersionForFileId($node->getId(), $version);
- $versionEntities[$info->getId()] = $versionEntity;
+ try {
+ $versionEntity = $versionsMapper->findVersionForFileId($node->getId(), $version);
+ $versionEntities[$info->getId()] = $versionEntity;
- if ($versionEntity->getLabel() !== '') {
- return false;
+ if ($versionEntity->getLabel() !== '') {
+ return false;
+ }
+ } catch (DoesNotExistException $ex) {
+ // Version on FS can have no equivalent in the DB if they were created before the version naming feature.
+ // So we ignore DoesNotExistException.
}
// Check that the version's timestamp is lower than $threshold
diff --git a/apps/settings/l10n/et_EE.js b/apps/settings/l10n/et_EE.js
index 5323ee4cbe9..6ca93ca77d8 100644
--- a/apps/settings/l10n/et_EE.js
+++ b/apps/settings/l10n/et_EE.js
@@ -183,7 +183,9 @@ OC.L10N.register(
"Profile picture" : "Profiili pilt",
"About" : "Info",
"Full name" : "Täielik nimi",
+ "Organisation" : "Organisatsioon",
"Phone number" : "Telefoninumber",
+ "Role" : "Roll",
"Twitter" : "Twitter",
"Website" : "Veebileht",
"Disabled apps" : "Keelatud rakendused",
diff --git a/apps/settings/l10n/et_EE.json b/apps/settings/l10n/et_EE.json
index 027914f00c5..dd09a94bcaf 100644
--- a/apps/settings/l10n/et_EE.json
+++ b/apps/settings/l10n/et_EE.json
@@ -181,7 +181,9 @@
"Profile picture" : "Profiili pilt",
"About" : "Info",
"Full name" : "Täielik nimi",
+ "Organisation" : "Organisatsioon",
"Phone number" : "Telefoninumber",
+ "Role" : "Roll",
"Twitter" : "Twitter",
"Website" : "Veebileht",
"Disabled apps" : "Keelatud rakendused",
diff --git a/apps/settings/l10n/hu.js b/apps/settings/l10n/hu.js
index 148abf01736..3720cb9c40f 100644
--- a/apps/settings/l10n/hu.js
+++ b/apps/settings/l10n/hu.js
@@ -144,7 +144,7 @@ OC.L10N.register(
"MySQL version \"%s\" is used. Nextcloud 21 and higher do not support this version and require MySQL 8.0 or MariaDB 10.2 or higher." : "A MySQL következő verziója van használatban: „%s”. A Nextcloud 21 és az újabb verziók már nem támogatják ezt a verziót, legalább a MySQL 8.0-s vagy a MariaDB 10.2-es verziója szükséges.",
"PostgreSQL version \"%s\" is used. Nextcloud 21 and higher do not support this version and require PostgreSQL 9.6 or higher." : "A PostgreSQL következő verziója van használatban: „%s”. A Nextcloud 21 és az újabb verziók már nem támogatják ezt a verziót, legalább a PostgreSQL 9.6-os verziója szükséges.",
"Profile information" : "Profilinformációk",
- "Profile picture, full name, email, phone number, address, website, Twitter, organisation, role, headline, biography, and whether your profile is enabled" : "Profilkép, teljes név, e-mail-cím, telefonszám, cím, weboldal, Twitter-fiók, szervezet, szerepkör, fejléc, életrajz és hogy engedélyezett-e",
+ "Profile picture, full name, email, phone number, address, website, Twitter, organisation, role, headline, biography, and whether your profile is enabled" : "Profilkép, teljes név, e-mail-cím, telefonszám, cím, weboldal, Twitter-fiók, szervezet, szerepkör, címsor, életrajz és hogy engedélyezett-e",
"Nextcloud settings" : "Nextcloud beállítások",
"Here you can decide which group can access certain sections of the administration settings." : "Itt eldöntheti, hogy mely csoportok érhetik el a rendszergazdai beállítások bizonyos szakaszait.",
"None" : "Egyik sem",
diff --git a/apps/settings/l10n/hu.json b/apps/settings/l10n/hu.json
index 179010a5b65..96e288cb7af 100644
--- a/apps/settings/l10n/hu.json
+++ b/apps/settings/l10n/hu.json
@@ -142,7 +142,7 @@
"MySQL version \"%s\" is used. Nextcloud 21 and higher do not support this version and require MySQL 8.0 or MariaDB 10.2 or higher." : "A MySQL következő verziója van használatban: „%s”. A Nextcloud 21 és az újabb verziók már nem támogatják ezt a verziót, legalább a MySQL 8.0-s vagy a MariaDB 10.2-es verziója szükséges.",
"PostgreSQL version \"%s\" is used. Nextcloud 21 and higher do not support this version and require PostgreSQL 9.6 or higher." : "A PostgreSQL következő verziója van használatban: „%s”. A Nextcloud 21 és az újabb verziók már nem támogatják ezt a verziót, legalább a PostgreSQL 9.6-os verziója szükséges.",
"Profile information" : "Profilinformációk",
- "Profile picture, full name, email, phone number, address, website, Twitter, organisation, role, headline, biography, and whether your profile is enabled" : "Profilkép, teljes név, e-mail-cím, telefonszám, cím, weboldal, Twitter-fiók, szervezet, szerepkör, fejléc, életrajz és hogy engedélyezett-e",
+ "Profile picture, full name, email, phone number, address, website, Twitter, organisation, role, headline, biography, and whether your profile is enabled" : "Profilkép, teljes név, e-mail-cím, telefonszám, cím, weboldal, Twitter-fiók, szervezet, szerepkör, címsor, életrajz és hogy engedélyezett-e",
"Nextcloud settings" : "Nextcloud beállítások",
"Here you can decide which group can access certain sections of the administration settings." : "Itt eldöntheti, hogy mely csoportok érhetik el a rendszergazdai beállítások bizonyos szakaszait.",
"None" : "Egyik sem",
diff --git a/apps/settings/l10n/nl.js b/apps/settings/l10n/nl.js
index b2f63c3c5b6..fb928b8edae 100644
--- a/apps/settings/l10n/nl.js
+++ b/apps/settings/l10n/nl.js
@@ -179,6 +179,7 @@ OC.L10N.register(
"Rename" : "Hernoemen",
"Revoke" : "Intrekken",
"Wipe device" : "Apparaat wissen",
+ "Revoking this token might prevent the wiping of your device if it has not started the wipe yet." : "Intrekken van deze token kan het wissen van uw apparaat voorkomen als het nog niet is begonnen met wissen.",
"Internet Explorer" : "Internet Explorer",
"Edge" : "Edge",
"Firefox" : "Firefox",
diff --git a/apps/settings/l10n/nl.json b/apps/settings/l10n/nl.json
index 6d76313254a..f3d5ec88547 100644
--- a/apps/settings/l10n/nl.json
+++ b/apps/settings/l10n/nl.json
@@ -177,6 +177,7 @@
"Rename" : "Hernoemen",
"Revoke" : "Intrekken",
"Wipe device" : "Apparaat wissen",
+ "Revoking this token might prevent the wiping of your device if it has not started the wipe yet." : "Intrekken van deze token kan het wissen van uw apparaat voorkomen als het nog niet is begonnen met wissen.",
"Internet Explorer" : "Internet Explorer",
"Edge" : "Edge",
"Firefox" : "Firefox",
diff --git a/apps/settings/lib/Controller/CheckSetupController.php b/apps/settings/lib/Controller/CheckSetupController.php
index a5c158d2602..a6f4d7a0d41 100644
--- a/apps/settings/lib/Controller/CheckSetupController.php
+++ b/apps/settings/lib/Controller/CheckSetupController.php
@@ -499,6 +499,8 @@ Raw output
}
} elseif (!$isPermitted) {
$recommendations[] = $this->l10n->t('Nextcloud is not allowed to use the OPcache API. It is highly recommended to include all Nextcloud directories with <code>opcache.restrict_api</code> or unset this setting to disable OPcache API restrictions, to prevent errors during Nextcloud core or app upgrades.');
+ } elseif ($this->iniGetWrapper->getBool('opcache.file_cache_only')) {
+ $recommendations[] = $this->l10n->t('The shared memory based OPcache is disabled. For better performance, it is recommended to apply <code>opcache.file_cache_only=0</code> to your PHP configuration and use the file cache as second level cache only.');
} else {
// Check whether opcache_get_status has been explicitly disabled an in case skip usage based checks
$disabledFunctions = $this->iniGetWrapper->getString('disable_functions');
diff --git a/apps/sharebymail/l10n/cs.js b/apps/sharebymail/l10n/cs.js
index 03f07358745..5595dc19fa3 100644
--- a/apps/sharebymail/l10n/cs.js
+++ b/apps/sharebymail/l10n/cs.js
@@ -32,7 +32,7 @@ OC.L10N.register(
"%1$s shared »%2$s« with you and wants to add:" : "%1$s sdílí „%2$s“ a dodává:",
"%1$s shared »%2$s« with you and wants to add" : "%1$s sdílí „%2$s“ a dodává",
"»%s« added a note to a file shared with you" : "„%s“ dodává poznámku k nasdílenému souboru",
- "You just shared »%1$s« with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Právě jste s „%1$s“ nasdílel(a) %2$s. Sdílení bylo již příjemci zasláno. Kvůli bezpečnostní politice nastavené administrátorem %3$s musí být každé sdílení chráněno heslem a toto heslo nemůže být příjemci zasláno přímo. Kvůli tomu ho budete muset ručně přeposlat.",
+ "You just shared »%1$s« with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Právě jste s „%1$s“ nasdílel(a) %2$s. Sdílení bylo už příjemci zasláno. Kvůli bezpečnostní politice nastavené administrátorem %3$s musí být každé sdílení chráněno heslem a toto heslo nemůže být příjemci zasláno přímo. Kvůli tomu ho budete muset ručně přeposlat.",
"Password to access »%1$s« shared by you with %2$s" : "Heslo pro přístup k „%1$s“ nasdílenému vámi pro %2$s",
"This is the password:" : "Toto je heslo:",
"You can choose a different password at any time in the share dialog." : "V dialogu sdílení můžete kdykoliv vybrat jiné heslo.",
diff --git a/apps/sharebymail/l10n/cs.json b/apps/sharebymail/l10n/cs.json
index 934a704e8b3..018baa0da3c 100644
--- a/apps/sharebymail/l10n/cs.json
+++ b/apps/sharebymail/l10n/cs.json
@@ -30,7 +30,7 @@
"%1$s shared »%2$s« with you and wants to add:" : "%1$s sdílí „%2$s“ a dodává:",
"%1$s shared »%2$s« with you and wants to add" : "%1$s sdílí „%2$s“ a dodává",
"»%s« added a note to a file shared with you" : "„%s“ dodává poznámku k nasdílenému souboru",
- "You just shared »%1$s« with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Právě jste s „%1$s“ nasdílel(a) %2$s. Sdílení bylo již příjemci zasláno. Kvůli bezpečnostní politice nastavené administrátorem %3$s musí být každé sdílení chráněno heslem a toto heslo nemůže být příjemci zasláno přímo. Kvůli tomu ho budete muset ručně přeposlat.",
+ "You just shared »%1$s« with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Právě jste s „%1$s“ nasdílel(a) %2$s. Sdílení bylo už příjemci zasláno. Kvůli bezpečnostní politice nastavené administrátorem %3$s musí být každé sdílení chráněno heslem a toto heslo nemůže být příjemci zasláno přímo. Kvůli tomu ho budete muset ručně přeposlat.",
"Password to access »%1$s« shared by you with %2$s" : "Heslo pro přístup k „%1$s“ nasdílenému vámi pro %2$s",
"This is the password:" : "Toto je heslo:",
"You can choose a different password at any time in the share dialog." : "V dialogu sdílení můžete kdykoliv vybrat jiné heslo.",
diff --git a/apps/sharebymail/l10n/nl.js b/apps/sharebymail/l10n/nl.js
index 5822829d278..e18f13d180f 100644
--- a/apps/sharebymail/l10n/nl.js
+++ b/apps/sharebymail/l10n/nl.js
@@ -16,6 +16,7 @@ OC.L10N.register(
"Share by mail" : "Delen via email",
"Sharing %1$s failed, because this item is already shared with user %2$s" : "Delen van %1$s is mislukt omdat het object al wordt gedeeld met gebruiker %2$s",
"We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "We kunnen je geen automatisch gegenereerd wachtwoord toesturen. Vermeld een geldig e-mailadres in je persoonlijke instellingen en probeer het nogmaals.",
+ "Failed to send share by email. Got an invalid email address" : "Het delen van het bestand per e-mail is mislukt. Ongeldig e-mailadres",
"Failed to send share by email" : "Versturen share per e-mail is mislukt",
"%1$s shared »%2$s« with you" : "%1$s deelde \"%2$s\" met jou",
"%1$s shared »%2$s« with you." : "%1$s deelde \"%2$s\" met jou.",
diff --git a/apps/sharebymail/l10n/nl.json b/apps/sharebymail/l10n/nl.json
index 12445f1d265..c8d8d251a23 100644
--- a/apps/sharebymail/l10n/nl.json
+++ b/apps/sharebymail/l10n/nl.json
@@ -14,6 +14,7 @@
"Share by mail" : "Delen via email",
"Sharing %1$s failed, because this item is already shared with user %2$s" : "Delen van %1$s is mislukt omdat het object al wordt gedeeld met gebruiker %2$s",
"We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "We kunnen je geen automatisch gegenereerd wachtwoord toesturen. Vermeld een geldig e-mailadres in je persoonlijke instellingen en probeer het nogmaals.",
+ "Failed to send share by email. Got an invalid email address" : "Het delen van het bestand per e-mail is mislukt. Ongeldig e-mailadres",
"Failed to send share by email" : "Versturen share per e-mail is mislukt",
"%1$s shared »%2$s« with you" : "%1$s deelde \"%2$s\" met jou",
"%1$s shared »%2$s« with you." : "%1$s deelde \"%2$s\" met jou.",
diff --git a/apps/theming/l10n/cs.js b/apps/theming/l10n/cs.js
index 16740a04d46..405e44d2b76 100644
--- a/apps/theming/l10n/cs.js
+++ b/apps/theming/l10n/cs.js
@@ -22,6 +22,7 @@ OC.L10N.register(
"A PHP extension stopped the file upload" : "PHP rozšíření zastavilo nahrávání souboru",
"No file uploaded" : "Nenahrán žádný soubor",
"Failed to clean up the old administration theming images folder" : "Nepodařilo se uklidit v původní složce s obrázky motivu vzhledu, určovaným správcem",
+ "Failed to clean up the old administration image folder" : "Nepodařilo se uklidit v původní složce s obrázky určovanými správcem",
"You are already using a custom theme. Theming app settings might be overwritten by that." : "Už používáte svůj vlastní motiv vzhledu. Nastavení aplikace pro změnu motivu vzhledu tím mohou být přepsána.",
"Theming" : "Motiv vzhledu",
"Appearance and accessibility" : "Vzhled a zpřístupnění",
diff --git a/apps/theming/l10n/cs.json b/apps/theming/l10n/cs.json
index 7883b109683..782ad07e7cc 100644
--- a/apps/theming/l10n/cs.json
+++ b/apps/theming/l10n/cs.json
@@ -20,6 +20,7 @@
"A PHP extension stopped the file upload" : "PHP rozšíření zastavilo nahrávání souboru",
"No file uploaded" : "Nenahrán žádný soubor",
"Failed to clean up the old administration theming images folder" : "Nepodařilo se uklidit v původní složce s obrázky motivu vzhledu, určovaným správcem",
+ "Failed to clean up the old administration image folder" : "Nepodařilo se uklidit v původní složce s obrázky určovanými správcem",
"You are already using a custom theme. Theming app settings might be overwritten by that." : "Už používáte svůj vlastní motiv vzhledu. Nastavení aplikace pro změnu motivu vzhledu tím mohou být přepsána.",
"Theming" : "Motiv vzhledu",
"Appearance and accessibility" : "Vzhled a zpřístupnění",
diff --git a/apps/theming/l10n/es.js b/apps/theming/l10n/es.js
index 7d88c30084e..873306583d7 100644
--- a/apps/theming/l10n/es.js
+++ b/apps/theming/l10n/es.js
@@ -22,6 +22,7 @@ OC.L10N.register(
"A PHP extension stopped the file upload" : "Una extensión PHP ha cancelado la subida de archivos",
"No file uploaded" : "No se ha subido archivo",
"Failed to clean up the old administration theming images folder" : "Fallo al limpiar la carpeta antigua del administrador con las imágenes de temas",
+ "Failed to clean up the old administration image folder" : "Fallo al limpiar la carpeta de imágenes de administración antigua",
"You are already using a custom theme. Theming app settings might be overwritten by that." : "Ya estás usando un tema personalizado. La configuración de la aplicación de temas puede ser sobrescrita por el.",
"Theming" : "Tema",
"Appearance and accessibility" : "Apariencia y accesibilidad",
diff --git a/apps/theming/l10n/es.json b/apps/theming/l10n/es.json
index 9b806cb09a2..46c196993c1 100644
--- a/apps/theming/l10n/es.json
+++ b/apps/theming/l10n/es.json
@@ -20,6 +20,7 @@
"A PHP extension stopped the file upload" : "Una extensión PHP ha cancelado la subida de archivos",
"No file uploaded" : "No se ha subido archivo",
"Failed to clean up the old administration theming images folder" : "Fallo al limpiar la carpeta antigua del administrador con las imágenes de temas",
+ "Failed to clean up the old administration image folder" : "Fallo al limpiar la carpeta de imágenes de administración antigua",
"You are already using a custom theme. Theming app settings might be overwritten by that." : "Ya estás usando un tema personalizado. La configuración de la aplicación de temas puede ser sobrescrita por el.",
"Theming" : "Tema",
"Appearance and accessibility" : "Apariencia y accesibilidad",
diff --git a/apps/theming/l10n/fr.js b/apps/theming/l10n/fr.js
index 94ff2a4f00c..3c6b0649df7 100644
--- a/apps/theming/l10n/fr.js
+++ b/apps/theming/l10n/fr.js
@@ -22,6 +22,7 @@ OC.L10N.register(
"A PHP extension stopped the file upload" : "Une extension PHP a arrêté le téléversement du fichier",
"No file uploaded" : "Aucun fichier téléversé",
"Failed to clean up the old administration theming images folder" : "Échec du nettoyage du dossier d'images de l'ancien thème d'administration",
+ "Failed to clean up the old administration image folder" : "Échec du nettoyage de l'ancien dossier d'images d'administration",
"You are already using a custom theme. Theming app settings might be overwritten by that." : "Vous utilisez déjà un thème personnalisé. Les paramètres de l'application Theming peuvent être remplacés par ceux-ci.",
"Theming" : "Personnaliser l'apparence",
"Appearance and accessibility" : "Apparence et accessibilité",
diff --git a/apps/theming/l10n/fr.json b/apps/theming/l10n/fr.json
index a611efb60bb..c2109585b30 100644
--- a/apps/theming/l10n/fr.json
+++ b/apps/theming/l10n/fr.json
@@ -20,6 +20,7 @@
"A PHP extension stopped the file upload" : "Une extension PHP a arrêté le téléversement du fichier",
"No file uploaded" : "Aucun fichier téléversé",
"Failed to clean up the old administration theming images folder" : "Échec du nettoyage du dossier d'images de l'ancien thème d'administration",
+ "Failed to clean up the old administration image folder" : "Échec du nettoyage de l'ancien dossier d'images d'administration",
"You are already using a custom theme. Theming app settings might be overwritten by that." : "Vous utilisez déjà un thème personnalisé. Les paramètres de l'application Theming peuvent être remplacés par ceux-ci.",
"Theming" : "Personnaliser l'apparence",
"Appearance and accessibility" : "Apparence et accessibilité",
diff --git a/apps/theming/l10n/pt_BR.js b/apps/theming/l10n/pt_BR.js
index 6dd2426713b..6d3173e3d2c 100644
--- a/apps/theming/l10n/pt_BR.js
+++ b/apps/theming/l10n/pt_BR.js
@@ -22,6 +22,7 @@ OC.L10N.register(
"A PHP extension stopped the file upload" : "Uma extensão PHP parou o envio do arquivo",
"No file uploaded" : "Nenhum arquivo enviado",
"Failed to clean up the old administration theming images folder" : "Falha ao limpar a antiga pasta de imagens temáticas da administração",
+ "Failed to clean up the old administration image folder" : "Falha ao limpar a pasta de imagem de administração antiga",
"You are already using a custom theme. Theming app settings might be overwritten by that." : "Você já está usando um tema personalizado. As configurações do aplicativo Theming podem ser sobrescritas por isso.",
"Theming" : "Personalização",
"Appearance and accessibility" : "Aparência e acessibilidade",
diff --git a/apps/theming/l10n/pt_BR.json b/apps/theming/l10n/pt_BR.json
index 906aba50fa9..e8cabcf1a0b 100644
--- a/apps/theming/l10n/pt_BR.json
+++ b/apps/theming/l10n/pt_BR.json
@@ -20,6 +20,7 @@
"A PHP extension stopped the file upload" : "Uma extensão PHP parou o envio do arquivo",
"No file uploaded" : "Nenhum arquivo enviado",
"Failed to clean up the old administration theming images folder" : "Falha ao limpar a antiga pasta de imagens temáticas da administração",
+ "Failed to clean up the old administration image folder" : "Falha ao limpar a pasta de imagem de administração antiga",
"You are already using a custom theme. Theming app settings might be overwritten by that." : "Você já está usando um tema personalizado. As configurações do aplicativo Theming podem ser sobrescritas por isso.",
"Theming" : "Personalização",
"Appearance and accessibility" : "Aparência e acessibilidade",
diff --git a/apps/theming/l10n/tr.js b/apps/theming/l10n/tr.js
index 012e8e7c823..5d6d27de44f 100644
--- a/apps/theming/l10n/tr.js
+++ b/apps/theming/l10n/tr.js
@@ -22,6 +22,7 @@ OC.L10N.register(
"A PHP extension stopped the file upload" : "Bir PHP eklentisi dosyanın yüklenmesini engelledi",
"No file uploaded" : "Henüz bir dosya yüklenmemiş",
"Failed to clean up the old administration theming images folder" : "Eski yönetim temasının images klasörü temizlenemedi",
+ "Failed to clean up the old administration image folder" : "Eski yönetim image klasörü temizlenemedi",
"You are already using a custom theme. Theming app settings might be overwritten by that." : "Zaten özel bir tema kullanıyorsunuz. Tema uygulaması ayarları bu değer ile değiştirilebilir.",
"Theming" : "Tema",
"Appearance and accessibility" : "Görünüm ve erişilebilirlik",
diff --git a/apps/theming/l10n/tr.json b/apps/theming/l10n/tr.json
index 91f123958ce..aa9e841f66b 100644
--- a/apps/theming/l10n/tr.json
+++ b/apps/theming/l10n/tr.json
@@ -20,6 +20,7 @@
"A PHP extension stopped the file upload" : "Bir PHP eklentisi dosyanın yüklenmesini engelledi",
"No file uploaded" : "Henüz bir dosya yüklenmemiş",
"Failed to clean up the old administration theming images folder" : "Eski yönetim temasının images klasörü temizlenemedi",
+ "Failed to clean up the old administration image folder" : "Eski yönetim image klasörü temizlenemedi",
"You are already using a custom theme. Theming app settings might be overwritten by that." : "Zaten özel bir tema kullanıyorsunuz. Tema uygulaması ayarları bu değer ile değiştirilebilir.",
"Theming" : "Tema",
"Appearance and accessibility" : "Görünüm ve erişilebilirlik",
diff --git a/apps/theming/l10n/zh_HK.js b/apps/theming/l10n/zh_HK.js
index 224b1000595..943a0600abe 100644
--- a/apps/theming/l10n/zh_HK.js
+++ b/apps/theming/l10n/zh_HK.js
@@ -22,6 +22,7 @@ OC.L10N.register(
"A PHP extension stopped the file upload" : "一個 PHP 擴充功能終止檔案的上傳",
"No file uploaded" : "未上傳檔案",
"Failed to clean up the old administration theming images folder" : "無法清除舊的管理佈景主題圖像資料夾",
+ "Failed to clean up the old administration image folder" : "無法清除舊的管理圖像資料夾",
"You are already using a custom theme. Theming app settings might be overwritten by that." : "您已經在使用自訂佈景主題。佈景主題應用程式設定可能會被覆寫。",
"Theming" : "佈景主題",
"Appearance and accessibility" : "外觀和可及性",
diff --git a/apps/theming/l10n/zh_HK.json b/apps/theming/l10n/zh_HK.json
index 9084a2bafb3..3d85fd16ad2 100644
--- a/apps/theming/l10n/zh_HK.json
+++ b/apps/theming/l10n/zh_HK.json
@@ -20,6 +20,7 @@
"A PHP extension stopped the file upload" : "一個 PHP 擴充功能終止檔案的上傳",
"No file uploaded" : "未上傳檔案",
"Failed to clean up the old administration theming images folder" : "無法清除舊的管理佈景主題圖像資料夾",
+ "Failed to clean up the old administration image folder" : "無法清除舊的管理圖像資料夾",
"You are already using a custom theme. Theming app settings might be overwritten by that." : "您已經在使用自訂佈景主題。佈景主題應用程式設定可能會被覆寫。",
"Theming" : "佈景主題",
"Appearance and accessibility" : "外觀和可及性",
diff --git a/apps/theming/l10n/zh_TW.js b/apps/theming/l10n/zh_TW.js
index 2b2312d7142..c2363d41465 100644
--- a/apps/theming/l10n/zh_TW.js
+++ b/apps/theming/l10n/zh_TW.js
@@ -22,6 +22,7 @@ OC.L10N.register(
"A PHP extension stopped the file upload" : "一個 PHP 擴充功能終止檔案的上傳",
"No file uploaded" : "未上傳檔案",
"Failed to clean up the old administration theming images folder" : "無法清除舊的管理佈景主題影像資料夾",
+ "Failed to clean up the old administration image folder" : "清除舊的管理影像資料夾失敗",
"You are already using a custom theme. Theming app settings might be overwritten by that." : "您已經在使用自訂佈景主題。佈景主題應用程式設定可能會被覆寫。",
"Theming" : "佈景主題",
"Appearance and accessibility" : "外觀與無障礙存取",
diff --git a/apps/theming/l10n/zh_TW.json b/apps/theming/l10n/zh_TW.json
index 0523f5ce791..cdbdc8dc162 100644
--- a/apps/theming/l10n/zh_TW.json
+++ b/apps/theming/l10n/zh_TW.json
@@ -20,6 +20,7 @@
"A PHP extension stopped the file upload" : "一個 PHP 擴充功能終止檔案的上傳",
"No file uploaded" : "未上傳檔案",
"Failed to clean up the old administration theming images folder" : "無法清除舊的管理佈景主題影像資料夾",
+ "Failed to clean up the old administration image folder" : "清除舊的管理影像資料夾失敗",
"You are already using a custom theme. Theming app settings might be overwritten by that." : "您已經在使用自訂佈景主題。佈景主題應用程式設定可能會被覆寫。",
"Theming" : "佈景主題",
"Appearance and accessibility" : "外觀與無障礙存取",
diff --git a/build/integration/features/carddav.feature b/build/integration/features/carddav.feature
index da02096ae02..e0c11ec8dc1 100644
--- a/build/integration/features/carddav.feature
+++ b/build/integration/features/carddav.feature
@@ -46,7 +46,7 @@ Feature: carddav
|X-Content-Type-Options |nosniff|
|X-Frame-Options|SAMEORIGIN|
|X-Permitted-Cross-Domain-Policies|none|
- |X-Robots-Tag|none|
+ |X-Robots-Tag|noindex, nofollow|
|X-XSS-Protection|1; mode=block|
Scenario: Exporting the picture of ones own contact
@@ -60,5 +60,5 @@ Feature: carddav
|X-Content-Type-Options |nosniff|
|X-Frame-Options|SAMEORIGIN|
|X-Permitted-Cross-Domain-Policies|none|
- |X-Robots-Tag|none|
+ |X-Robots-Tag|noindex, nofollow|
|X-XSS-Protection|1; mode=block|
diff --git a/build/integration/features/dav-v2.feature b/build/integration/features/dav-v2.feature
index 5b5c835e0dd..4dd79ec7b9e 100644
--- a/build/integration/features/dav-v2.feature
+++ b/build/integration/features/dav-v2.feature
@@ -27,7 +27,7 @@ Feature: dav-v2
|X-Content-Type-Options |nosniff|
|X-Frame-Options|SAMEORIGIN|
|X-Permitted-Cross-Domain-Policies|none|
- |X-Robots-Tag|none|
+ |X-Robots-Tag|noindex, nofollow|
|X-XSS-Protection|1; mode=block|
And Downloaded content should start with "Welcome to your Nextcloud account!"
diff --git a/build/integration/features/webdav-related.feature b/build/integration/features/webdav-related.feature
index efaea1a43c4..21e195af115 100644
--- a/build/integration/features/webdav-related.feature
+++ b/build/integration/features/webdav-related.feature
@@ -53,7 +53,7 @@ Feature: webdav-related
And User "user0" moves file "/textfile0.txt" to "/testshare/textfile0.txt"
And the HTTP status code should be "403"
When Downloading file "/testshare/textfile0.txt"
- Then the HTTP status code should be "404"
+ Then the HTTP status code should be "404"
Scenario: Moving a file to overwrite a file in a folder with no permissions
Given using old dav path
@@ -251,7 +251,7 @@ Feature: webdav-related
|X-Content-Type-Options |nosniff|
|X-Frame-Options|SAMEORIGIN|
|X-Permitted-Cross-Domain-Policies|none|
- |X-Robots-Tag|none|
+ |X-Robots-Tag|noindex, nofollow|
|X-XSS-Protection|1; mode=block|
And Downloaded content should start with "Welcome to your Nextcloud account!"
diff --git a/build/psalm-baseline.xml b/build/psalm-baseline.xml
index 64c1e6983ac..c376a1b895f 100644
--- a/build/psalm-baseline.xml
+++ b/build/psalm-baseline.xml
@@ -2323,22 +2323,15 @@
</NullableReturnStatement>
</file>
<file src="lib/private/Files/Node/File.php">
- <InvalidReturnStatement occurrences="2">
+ <InvalidReturnStatement occurrences="1">
<code>$this-&gt;view-&gt;hash($type, $this-&gt;path, $raw)</code>
- <code>new NonExistingFile($this-&gt;root, $this-&gt;view, $path)</code>
</InvalidReturnStatement>
- <InvalidReturnType occurrences="2">
+ <InvalidReturnType occurrences="1">
<code>string</code>
<code>string</code>
</InvalidReturnType>
</file>
<file src="lib/private/Files/Node/Folder.php">
- <InvalidReturnStatement occurrences="1">
- <code>new NonExistingFolder($this-&gt;root, $this-&gt;view, $path)</code>
- </InvalidReturnStatement>
- <InvalidReturnType occurrences="1">
- <code>string</code>
- </InvalidReturnType>
<MoreSpecificImplementedParamType occurrences="1">
<code>$node</code>
</MoreSpecificImplementedParamType>
@@ -2402,15 +2395,11 @@
<InvalidArgument occurrences="1">
<code>'\OCP\Files::' . $hook</code>
</InvalidArgument>
- <InvalidNullableReturnType occurrences="1">
- <code>int</code>
- </InvalidNullableReturnType>
+ <InvalidNullableReturnType occurrences="1"/>
<InvalidReturnType occurrences="1">
<code>getChecksum</code>
</InvalidReturnType>
- <NullableReturnStatement occurrences="1">
- <code>$this-&gt;getFileInfo()-&gt;getId()</code>
- </NullableReturnStatement>
+ <NullableReturnStatement occurrences="1"/>
<ParamNameMismatch occurrences="1">
<code>$type</code>
</ParamNameMismatch>
diff --git a/core/Controller/LoginController.php b/core/Controller/LoginController.php
index b93c6002ed5..d3873d1329e 100644
--- a/core/Controller/LoginController.php
+++ b/core/Controller/LoginController.php
@@ -291,8 +291,8 @@ class LoginController extends Controller {
*/
#[UseSession]
public function tryLogin(Chain $loginChain,
- string $user,
- string $password,
+ string $user = '',
+ string $password = '',
string $redirect_url = null,
string $timezone = '',
string $timezone_offset = ''): RedirectResponse {
diff --git a/core/js/setupchecks.js b/core/js/setupchecks.js
index 73896f9fc91..b2d021c6265 100644
--- a/core/js/setupchecks.js
+++ b/core/js/setupchecks.js
@@ -628,13 +628,13 @@
if (xhr.status === 200) {
var securityHeaders = {
'X-Content-Type-Options': ['nosniff'],
- 'X-Robots-Tag': ['none'],
+ 'X-Robots-Tag': ['noindex, nofollow'],
'X-Frame-Options': ['SAMEORIGIN', 'DENY'],
'X-Permitted-Cross-Domain-Policies': ['none'],
};
for (var header in securityHeaders) {
var option = securityHeaders[header][0];
- if(!xhr.getResponseHeader(header) || xhr.getResponseHeader(header).toLowerCase() !== option.toLowerCase()) {
+ if(!xhr.getResponseHeader(header) || xhr.getResponseHeader(header).replace(/, /, ',').toLowerCase() !== option.replace(/, /, ',').toLowerCase()) {
var msg = t('core', 'The "{header}" HTTP header is not set to "{expected}". This is a potential security or privacy risk, as it is recommended to adjust this setting accordingly.', {header: header, expected: option});
if(xhr.getResponseHeader(header) && securityHeaders[header].length > 1 && xhr.getResponseHeader(header).toLowerCase() === securityHeaders[header][1].toLowerCase()) {
msg = t('core', 'The "{header}" HTTP header is not set to "{expected}". Some features might not work correctly, as it is recommended to adjust this setting accordingly.', {header: header, expected: option});
diff --git a/core/js/tests/specs/setupchecksSpec.js b/core/js/tests/specs/setupchecksSpec.js
index 4532ac457b6..57536c59569 100644
--- a/core/js/tests/specs/setupchecksSpec.js
+++ b/core/js/tests/specs/setupchecksSpec.js
@@ -1569,7 +1569,7 @@ describe('OC.SetupChecks tests', function() {
msg: 'The "X-Content-Type-Options" HTTP header is not set to "nosniff". This is a potential security or privacy risk, as it is recommended to adjust this setting accordingly.',
type: OC.SetupChecks.MESSAGE_TYPE_WARNING
}, {
- msg: 'The "X-Robots-Tag" HTTP header is not set to "none". This is a potential security or privacy risk, as it is recommended to adjust this setting accordingly.',
+ msg: 'The "X-Robots-Tag" HTTP header is not set to "noindex, nofollow". This is a potential security or privacy risk, as it is recommended to adjust this setting accordingly.',
type: OC.SetupChecks.MESSAGE_TYPE_WARNING
}, {
msg: 'The "X-Frame-Options" HTTP header is not set to "SAMEORIGIN". This is a potential security or privacy risk, as it is recommended to adjust this setting accordingly.',
@@ -1596,7 +1596,7 @@ describe('OC.SetupChecks tests', function() {
suite.server.requests[0].respond(
200,
{
- 'X-Robots-Tag': 'none',
+ 'X-Robots-Tag': 'noindex, nofollow',
'X-Frame-Options': 'SAMEORIGIN',
'Strict-Transport-Security': 'max-age=15768000;preload',
'X-Permitted-Cross-Domain-Policies': 'none',
@@ -1627,7 +1627,7 @@ describe('OC.SetupChecks tests', function() {
{
'X-XSS-Protection': '1; mode=block',
'X-Content-Type-Options': 'nosniff',
- 'X-Robots-Tag': 'none',
+ 'X-Robots-Tag': 'noindex, nofollow',
'X-Frame-Options': 'SAMEORIGIN',
'Strict-Transport-Security': 'max-age=15768000',
'X-Permitted-Cross-Domain-Policies': 'none',
@@ -1641,6 +1641,49 @@ describe('OC.SetupChecks tests', function() {
});
});
+ describe('check X-Robots-Tag header', function() {
+ it('should return no message if X-Robots-Tag is set to noindex,nofollow without space', function(done) {
+ protocolStub.returns('https');
+ var result = OC.SetupChecks.checkGeneric();
+ suite.server.requests[0].respond(200, {
+ 'Strict-Transport-Security': 'max-age=15768000',
+ 'X-XSS-Protection': '1; mode=block',
+ 'X-Content-Type-Options': 'nosniff',
+ 'X-Robots-Tag': 'noindex,nofollow',
+ 'X-Frame-Options': 'SAMEORIGIN',
+ 'X-Permitted-Cross-Domain-Policies': 'none',
+ 'Referrer-Policy': 'no-referrer',
+ });
+ result.done(function( data, s, x ){
+ expect(data).toEqual([]);
+ done();
+ });
+ });
+
+ it('should return a message if X-Robots-Tag is set to none', function(done) {
+ protocolStub.returns('https');
+ var result = OC.SetupChecks.checkGeneric();
+ suite.server.requests[0].respond(200, {
+ 'Strict-Transport-Security': 'max-age=15768000',
+ 'X-XSS-Protection': '1; mode=block',
+ 'X-Content-Type-Options': 'nosniff',
+ 'X-Robots-Tag': 'none',
+ 'X-Frame-Options': 'SAMEORIGIN',
+ 'X-Permitted-Cross-Domain-Policies': 'none',
+ 'Referrer-Policy': 'no-referrer',
+ });
+ result.done(function( data, s, x ){
+ expect(data).toEqual([
+ {
+ msg: 'The "X-Robots-Tag" HTTP header is not set to "noindex, nofollow". This is a potential security or privacy risk, as it is recommended to adjust this setting accordingly.',
+ type: OC.SetupChecks.MESSAGE_TYPE_WARNING
+ }
+ ]);
+ done();
+ });
+ });
+ });
+
describe('check X-XSS-Protection header', function() {
it('should return no message if X-XSS-Protection is set to 1; mode=block; report=https://example.com', function(done) {
protocolStub.returns('https');
@@ -1650,7 +1693,7 @@ describe('OC.SetupChecks tests', function() {
'Strict-Transport-Security': 'max-age=15768000',
'X-XSS-Protection': '1; mode=block; report=https://example.com',
'X-Content-Type-Options': 'nosniff',
- 'X-Robots-Tag': 'none',
+ 'X-Robots-Tag': 'noindex, nofollow',
'X-Frame-Options': 'SAMEORIGIN',
'X-Permitted-Cross-Domain-Policies': 'none',
'Referrer-Policy': 'no-referrer',
@@ -1670,7 +1713,7 @@ describe('OC.SetupChecks tests', function() {
'Strict-Transport-Security': 'max-age=15768000',
'X-XSS-Protection': '1; mode=block',
'X-Content-Type-Options': 'nosniff',
- 'X-Robots-Tag': 'none',
+ 'X-Robots-Tag': 'noindex, nofollow',
'X-Frame-Options': 'SAMEORIGIN',
'X-Permitted-Cross-Domain-Policies': 'none',
'Referrer-Policy': 'no-referrer',
@@ -1690,7 +1733,7 @@ describe('OC.SetupChecks tests', function() {
'Strict-Transport-Security': 'max-age=15768000',
'X-XSS-Protection': '1',
'X-Content-Type-Options': 'nosniff',
- 'X-Robots-Tag': 'none',
+ 'X-Robots-Tag': 'noindex, nofollow',
'X-Frame-Options': 'SAMEORIGIN',
'X-Permitted-Cross-Domain-Policies': 'none',
'Referrer-Policy': 'no-referrer',
@@ -1715,7 +1758,7 @@ describe('OC.SetupChecks tests', function() {
'Strict-Transport-Security': 'max-age=15768000',
'X-XSS-Protection': '0',
'X-Content-Type-Options': 'nosniff',
- 'X-Robots-Tag': 'none',
+ 'X-Robots-Tag': 'noindex, nofollow',
'X-Frame-Options': 'SAMEORIGIN',
'X-Permitted-Cross-Domain-Policies': 'none',
'Referrer-Policy': 'no-referrer',
@@ -1742,7 +1785,7 @@ describe('OC.SetupChecks tests', function() {
'Strict-Transport-Security': 'max-age=15768000',
'X-XSS-Protection': '1; mode=block',
'X-Content-Type-Options': 'nosniff',
- 'X-Robots-Tag': 'none',
+ 'X-Robots-Tag': 'noindex, nofollow',
'X-Frame-Options': 'SAMEORIGIN',
'X-Permitted-Cross-Domain-Policies': 'none',
'Referrer-Policy': 'no-referrer',
@@ -1762,7 +1805,7 @@ describe('OC.SetupChecks tests', function() {
'Strict-Transport-Security': 'max-age=15768000',
'X-XSS-Protection': '1; mode=block',
'X-Content-Type-Options': 'nosniff',
- 'X-Robots-Tag': 'none',
+ 'X-Robots-Tag': 'noindex, nofollow',
'X-Frame-Options': 'SAMEORIGIN',
'X-Permitted-Cross-Domain-Policies': 'none',
'Referrer-Policy': 'no-referrer-when-downgrade',
@@ -1782,7 +1825,7 @@ describe('OC.SetupChecks tests', function() {
'Strict-Transport-Security': 'max-age=15768000',
'X-XSS-Protection': '1; mode=block',
'X-Content-Type-Options': 'nosniff',
- 'X-Robots-Tag': 'none',
+ 'X-Robots-Tag': 'noindex, nofollow',
'X-Frame-Options': 'SAMEORIGIN',
'X-Permitted-Cross-Domain-Policies': 'none',
'Referrer-Policy': 'strict-origin',
@@ -1802,7 +1845,7 @@ describe('OC.SetupChecks tests', function() {
'Strict-Transport-Security': 'max-age=15768000',
'X-XSS-Protection': '1; mode=block',
'X-Content-Type-Options': 'nosniff',
- 'X-Robots-Tag': 'none',
+ 'X-Robots-Tag': 'noindex, nofollow',
'X-Frame-Options': 'SAMEORIGIN',
'X-Permitted-Cross-Domain-Policies': 'none',
'Referrer-Policy': 'strict-origin-when-cross-origin',
@@ -1822,7 +1865,7 @@ describe('OC.SetupChecks tests', function() {
'Strict-Transport-Security': 'max-age=15768000',
'X-XSS-Protection': '1; mode=block',
'X-Content-Type-Options': 'nosniff',
- 'X-Robots-Tag': 'none',
+ 'X-Robots-Tag': 'noindex, nofollow',
'X-Frame-Options': 'SAMEORIGIN',
'X-Permitted-Cross-Domain-Policies': 'none',
'Referrer-Policy': 'same-origin',
@@ -1842,7 +1885,7 @@ describe('OC.SetupChecks tests', function() {
'Strict-Transport-Security': 'max-age=15768000',
'X-XSS-Protection': '1; mode=block',
'X-Content-Type-Options': 'nosniff',
- 'X-Robots-Tag': 'none',
+ 'X-Robots-Tag': 'noindex, nofollow',
'X-Frame-Options': 'SAMEORIGIN',
'X-Permitted-Cross-Domain-Policies': 'none',
'Referrer-Policy': 'origin',
@@ -1867,7 +1910,7 @@ describe('OC.SetupChecks tests', function() {
'Strict-Transport-Security': 'max-age=15768000',
'X-XSS-Protection': '1; mode=block',
'X-Content-Type-Options': 'nosniff',
- 'X-Robots-Tag': 'none',
+ 'X-Robots-Tag': 'noindex, nofollow',
'X-Frame-Options': 'SAMEORIGIN',
'X-Permitted-Cross-Domain-Policies': 'none',
'Referrer-Policy': 'origin-when-cross-origin',
@@ -1892,7 +1935,7 @@ describe('OC.SetupChecks tests', function() {
'Strict-Transport-Security': 'max-age=15768000',
'X-XSS-Protection': '1; mode=block',
'X-Content-Type-Options': 'nosniff',
- 'X-Robots-Tag': 'none',
+ 'X-Robots-Tag': 'noindex, nofollow',
'X-Frame-Options': 'SAMEORIGIN',
'X-Permitted-Cross-Domain-Policies': 'none',
'Referrer-Policy': 'unsafe-url',
@@ -1919,7 +1962,7 @@ describe('OC.SetupChecks tests', function() {
{
'X-XSS-Protection': '1; mode=block',
'X-Content-Type-Options': 'nosniff',
- 'X-Robots-Tag': 'none',
+ 'X-Robots-Tag': 'noindex, nofollow',
'X-Frame-Options': 'SAMEORIGIN',
'X-Permitted-Cross-Domain-Policies': 'none',
'Referrer-Policy': 'no-referrer',
@@ -1965,7 +2008,7 @@ describe('OC.SetupChecks tests', function() {
{
'X-XSS-Protection': '1; mode=block',
'X-Content-Type-Options': 'nosniff',
- 'X-Robots-Tag': 'none',
+ 'X-Robots-Tag': 'noindex, nofollow',
'X-Frame-Options': 'SAMEORIGIN',
'X-Permitted-Cross-Domain-Policies': 'none',
'Referrer-Policy': 'no-referrer',
@@ -1990,7 +2033,7 @@ describe('OC.SetupChecks tests', function() {
'Strict-Transport-Security': 'max-age=15551999',
'X-XSS-Protection': '1; mode=block',
'X-Content-Type-Options': 'nosniff',
- 'X-Robots-Tag': 'none',
+ 'X-Robots-Tag': 'noindex, nofollow',
'X-Frame-Options': 'SAMEORIGIN',
'X-Permitted-Cross-Domain-Policies': 'none',
'Referrer-Policy': 'no-referrer',
@@ -2015,7 +2058,7 @@ describe('OC.SetupChecks tests', function() {
'Strict-Transport-Security': 'iAmABogusHeader342',
'X-XSS-Protection': '1; mode=block',
'X-Content-Type-Options': 'nosniff',
- 'X-Robots-Tag': 'none',
+ 'X-Robots-Tag': 'noindex, nofollow',
'X-Frame-Options': 'SAMEORIGIN',
'X-Permitted-Cross-Domain-Policies': 'none',
'Referrer-Policy': 'no-referrer',
@@ -2039,7 +2082,7 @@ describe('OC.SetupChecks tests', function() {
'Strict-Transport-Security': 'max-age=15768000',
'X-XSS-Protection': '1; mode=block',
'X-Content-Type-Options': 'nosniff',
- 'X-Robots-Tag': 'none',
+ 'X-Robots-Tag': 'noindex, nofollow',
'X-Frame-Options': 'SAMEORIGIN',
'X-Permitted-Cross-Domain-Policies': 'none',
'Referrer-Policy': 'no-referrer',
@@ -2059,7 +2102,7 @@ describe('OC.SetupChecks tests', function() {
'Strict-Transport-Security': 'max-age=99999999',
'X-XSS-Protection': '1; mode=block',
'X-Content-Type-Options': 'nosniff',
- 'X-Robots-Tag': 'none',
+ 'X-Robots-Tag': 'noindex, nofollow',
'X-Frame-Options': 'SAMEORIGIN',
'X-Permitted-Cross-Domain-Policies': 'none',
'Referrer-Policy': 'no-referrer',
@@ -2079,7 +2122,7 @@ describe('OC.SetupChecks tests', function() {
'Strict-Transport-Security': 'max-age=99999999; includeSubDomains',
'X-XSS-Protection': '1; mode=block',
'X-Content-Type-Options': 'nosniff',
- 'X-Robots-Tag': 'none',
+ 'X-Robots-Tag': 'noindex, nofollow',
'X-Frame-Options': 'SAMEORIGIN',
'X-Permitted-Cross-Domain-Policies': 'none',
'Referrer-Policy': 'no-referrer',
@@ -2099,7 +2142,7 @@ describe('OC.SetupChecks tests', function() {
'Strict-Transport-Security': 'max-age=99999999; preload; includeSubDomains',
'X-XSS-Protection': '1; mode=block',
'X-Content-Type-Options': 'nosniff',
- 'X-Robots-Tag': 'none',
+ 'X-Robots-Tag': 'noindex, nofollow',
'X-Frame-Options': 'SAMEORIGIN',
'X-Permitted-Cross-Domain-Policies': 'none',
'Referrer-Policy': 'no-referrer',
diff --git a/core/l10n/cs.js b/core/l10n/cs.js
index 5459a49e4b3..9cece640433 100644
--- a/core/l10n/cs.js
+++ b/core/l10n/cs.js
@@ -352,6 +352,7 @@ OC.L10N.register(
"Skip to main content" : "Přeskočit a přejít k hlavnímu obsahu",
"Skip to navigation of app" : "Přeskočit na navigaci aplikace",
"Get your own free account" : "Získejte svůj vlastní účet zdarma",
+ "%s homepage" : "Domovská stránka %s",
"Confirm your password" : "Potvrdit heslo",
"%s's homepage" : "Domovská stránka uživatele %s",
"Connect to your account" : "Propojit s vaším účtem",
diff --git a/core/l10n/cs.json b/core/l10n/cs.json
index f49259f8705..edb0a4468c2 100644
--- a/core/l10n/cs.json
+++ b/core/l10n/cs.json
@@ -350,6 +350,7 @@
"Skip to main content" : "Přeskočit a přejít k hlavnímu obsahu",
"Skip to navigation of app" : "Přeskočit na navigaci aplikace",
"Get your own free account" : "Získejte svůj vlastní účet zdarma",
+ "%s homepage" : "Domovská stránka %s",
"Confirm your password" : "Potvrdit heslo",
"%s's homepage" : "Domovská stránka uživatele %s",
"Connect to your account" : "Propojit s vaším účtem",
diff --git a/core/l10n/es.js b/core/l10n/es.js
index b95e6d6bffc..f754743469b 100644
--- a/core/l10n/es.js
+++ b/core/l10n/es.js
@@ -102,6 +102,7 @@ OC.L10N.register(
"This instance is missing some recommended PHP modules. For improved performance and better compatibility it is highly recommended to install them." : "A esta instancia le faltan algunos módulos PHP recomendados. Para mejorar el rendimiento y aumentar la compatibilidad, se recomienda encarecidamente instalarlos.",
"The PHP module \"imagick\" is not enabled although the theming app is. For favicon generation to work correctly, you need to install and enable this module." : "El módulo PHP \"imagick\" no está habilitado, y la aplicación Temas sí lo está. Para que la generación de favicon funcione correctamente, es necesario instalar y habilitar este módulo.",
"The PHP modules \"gmp\" and/or \"bcmath\" are not enabled. If you use WebAuthn passwordless authentication, these modules are required." : "Los módulos PHP \"gmp\" y/o \"bcmath\" no están habilitados. Si usas la autenticación sin contraseña WebAuthn, estos módulos son necesarios.",
+ "It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page ↗{linkend} about this." : "Parece que está ejecutando una versión de PHP de 32 bits. Nextcloud necesita 64 bits para su correcto funcionamiento. ¡Por favor, actualice su sistema operativo y PHP a 64 bits! Puede leer más detalles acerca de esto en {linkstart}la página de documentación correspondiente ↗{linkend}.",
"Module php-imagick in this instance has no SVG support. For better compatibility it is recommended to install it." : "El módulo php-imagick de esta instancia no tiene soporte para SVG. Para una mejor compatibilidad es recomendable instalarlo.",
"Some columns in the database are missing a conversion to big int. Due to the fact that changing column types on big tables could take some time they were not changed automatically. By running \"occ db:convert-filecache-bigint\" those pending changes could be applied manually. This operation needs to be made while the instance is offline. For further details read {linkstart}the documentation page about this ↗{linkend}." : "A algunas columnas de la base de datos les falta convertirse a \"big int\". Debido a que cambiar los tipos de columna en tablas grandes podría tardar mucho tiempo no fueron cambiadas automáticamente. Ejecutando 'occ db:convert-filecache-bigint' se pueden aplicar estos cambios pendientes de manera manual. Esta operación debe realizarse cuando el servidor esté sin conexión. Para más detalles, consulte {linkstart}la página de documentación ↗{linkend}.",
"SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "Actualmente se está usando SQLite como base de datos. Para instalaciones más largas recomendamos cambiar a un motor de bases de datos diferente.",
@@ -351,6 +352,7 @@ OC.L10N.register(
"Skip to main content" : "Saltar al contenido principal",
"Skip to navigation of app" : "Saltar a la navegación de la app",
"Get your own free account" : "Consigue tu propia cuenta gratuita",
+ "%s homepage" : "Página de inicio de %s",
"Confirm your password" : "Confirme su contraseña",
"%s's homepage" : "%s página de inicio",
"Connect to your account" : "Conectar a cuenta",
diff --git a/core/l10n/es.json b/core/l10n/es.json
index ddfddd04276..bec184d61d8 100644
--- a/core/l10n/es.json
+++ b/core/l10n/es.json
@@ -100,6 +100,7 @@
"This instance is missing some recommended PHP modules. For improved performance and better compatibility it is highly recommended to install them." : "A esta instancia le faltan algunos módulos PHP recomendados. Para mejorar el rendimiento y aumentar la compatibilidad, se recomienda encarecidamente instalarlos.",
"The PHP module \"imagick\" is not enabled although the theming app is. For favicon generation to work correctly, you need to install and enable this module." : "El módulo PHP \"imagick\" no está habilitado, y la aplicación Temas sí lo está. Para que la generación de favicon funcione correctamente, es necesario instalar y habilitar este módulo.",
"The PHP modules \"gmp\" and/or \"bcmath\" are not enabled. If you use WebAuthn passwordless authentication, these modules are required." : "Los módulos PHP \"gmp\" y/o \"bcmath\" no están habilitados. Si usas la autenticación sin contraseña WebAuthn, estos módulos son necesarios.",
+ "It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page ↗{linkend} about this." : "Parece que está ejecutando una versión de PHP de 32 bits. Nextcloud necesita 64 bits para su correcto funcionamiento. ¡Por favor, actualice su sistema operativo y PHP a 64 bits! Puede leer más detalles acerca de esto en {linkstart}la página de documentación correspondiente ↗{linkend}.",
"Module php-imagick in this instance has no SVG support. For better compatibility it is recommended to install it." : "El módulo php-imagick de esta instancia no tiene soporte para SVG. Para una mejor compatibilidad es recomendable instalarlo.",
"Some columns in the database are missing a conversion to big int. Due to the fact that changing column types on big tables could take some time they were not changed automatically. By running \"occ db:convert-filecache-bigint\" those pending changes could be applied manually. This operation needs to be made while the instance is offline. For further details read {linkstart}the documentation page about this ↗{linkend}." : "A algunas columnas de la base de datos les falta convertirse a \"big int\". Debido a que cambiar los tipos de columna en tablas grandes podría tardar mucho tiempo no fueron cambiadas automáticamente. Ejecutando 'occ db:convert-filecache-bigint' se pueden aplicar estos cambios pendientes de manera manual. Esta operación debe realizarse cuando el servidor esté sin conexión. Para más detalles, consulte {linkstart}la página de documentación ↗{linkend}.",
"SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "Actualmente se está usando SQLite como base de datos. Para instalaciones más largas recomendamos cambiar a un motor de bases de datos diferente.",
@@ -349,6 +350,7 @@
"Skip to main content" : "Saltar al contenido principal",
"Skip to navigation of app" : "Saltar a la navegación de la app",
"Get your own free account" : "Consigue tu propia cuenta gratuita",
+ "%s homepage" : "Página de inicio de %s",
"Confirm your password" : "Confirme su contraseña",
"%s's homepage" : "%s página de inicio",
"Connect to your account" : "Conectar a cuenta",
diff --git a/core/l10n/fr.js b/core/l10n/fr.js
index c335aea598f..c3c9f8fce86 100644
--- a/core/l10n/fr.js
+++ b/core/l10n/fr.js
@@ -352,6 +352,7 @@ OC.L10N.register(
"Skip to main content" : "Passer au contenu principal",
"Skip to navigation of app" : "Passer à la navigation d'application",
"Get your own free account" : "Obtenez votre compte personnel gratuit",
+ "%s homepage" : "Page d'accueil de %s",
"Confirm your password" : "Confirmer votre mot de passe",
"%s's homepage" : "Page personnelle de %s",
"Connect to your account" : "Connectez vous à votre compte",
diff --git a/core/l10n/fr.json b/core/l10n/fr.json
index 73007359e03..3eed05f2202 100644
--- a/core/l10n/fr.json
+++ b/core/l10n/fr.json
@@ -350,6 +350,7 @@
"Skip to main content" : "Passer au contenu principal",
"Skip to navigation of app" : "Passer à la navigation d'application",
"Get your own free account" : "Obtenez votre compte personnel gratuit",
+ "%s homepage" : "Page d'accueil de %s",
"Confirm your password" : "Confirmer votre mot de passe",
"%s's homepage" : "Page personnelle de %s",
"Connect to your account" : "Connectez vous à votre compte",
diff --git a/core/l10n/hu.js b/core/l10n/hu.js
index 6ce3a217bb7..ea66c4f3d09 100644
--- a/core/l10n/hu.js
+++ b/core/l10n/hu.js
@@ -25,10 +25,11 @@ OC.L10N.register(
"State token does not match" : "Az állapottoken nem megfelelő",
"Invalid app password" : "Érvénytelen alkalmazásjelszó",
"Could not complete login" : "A bejelentkezés nem fejezhető be",
+ "State token missing" : "Az állapottoken hiányzik",
"Your login token is invalid or has expired" : "A bejelentkezési token érvénytelen vagy lejárt",
"This community release of Nextcloud is unsupported and push notifications are limited." : "A Nextcloud e közösségi kiadása nem támogatott, és a leküldéses értesítések korlátozottak.",
"Login" : "Bejelentkezés",
- "Please try again" : "Kérjük próbálja újra",
+ "Please try again" : "Próbálja újra",
"Password reset is disabled" : "Jelszó visszaállítás letiltva",
"Could not reset password because the token is expired" : "A jelszót nem lehet visszaállítani, mert a token lejárt",
"Could not reset password because the token is invalid" : "A jelszót nem lehet visszaállítani, mert a token érvénytelen",
@@ -101,6 +102,7 @@ OC.L10N.register(
"This instance is missing some recommended PHP modules. For improved performance and better compatibility it is highly recommended to install them." : "Ennél a példánynál hiányzik néhány javasolt PHP modul. A jobb teljesítmény és nagyobb kompatibilitás miatt ezek telepítése erősen javallott.",
"The PHP module \"imagick\" is not enabled although the theming app is. For favicon generation to work correctly, you need to install and enable this module." : "Az „imagick” PHP-modul nem engedélyezett, de a témázó alkalmazás igen. A webhelyikonok előállításához telepítenie és engedélyeznie kell ezt a modult.",
"The PHP modules \"gmp\" and/or \"bcmath\" are not enabled. If you use WebAuthn passwordless authentication, these modules are required." : "A „gmp” vagy a „bcmath” PHP modulok nem engedélyezettek. Ha WebAuthn jelszó nélküli hitelesítést használ, akkor szükség van ezekre a modulokra.",
+ "It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page ↗{linkend} about this." : "Úgy tűnik, hogy 32 bites PHP verziót használ. A Nextcloud megfelelő futtatásához 64 bites szükséges. Frissítse 64 bitesre az operációs rendszerét és a PHP-ját. További részletekért olvassa el az {linkstart}erről szóló dokumentációs oldalt ↗{linkend}.",
"Module php-imagick in this instance has no SVG support. For better compatibility it is recommended to install it." : "A php-imagick modul ebben az esetben nem rendelkezik SVG támogatással. A jobb kompatibilitás érdekében ajánlott telepíteni.",
"Some columns in the database are missing a conversion to big int. Due to the fact that changing column types on big tables could take some time they were not changed automatically. By running \"occ db:convert-filecache-bigint\" those pending changes could be applied manually. This operation needs to be made while the instance is offline. For further details read {linkstart}the documentation page about this ↗{linkend}." : "Az adatbázis egyes oszlopaiból hiányzik a big int átalakítás. MIvel a nagy táblák oszloptípusainak megváltoztatása eltarthat egy ideig, azok nem lettek automatikusan megváltoztatva. Az „occ db: convert-filecache-bigint” futtatásával ezek a függőben lévő módosítások kézileg is alkalmazhatók. Ezt a műveletet offline állapotban kell végrehajtani. További részletekért olvassa el a {linkstart}erről szóló dokumentációs oldalt ↗{linkend}.",
"SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "Jelenleg SQLite van háttéradatbázisként használva. Nagyobb telepítésekhez javasoljuk, hogy váltson más háttéradatbázisra. ",
@@ -188,7 +190,7 @@ OC.L10N.register(
"Back" : "Vissza",
"Login form is disabled." : "A bejelentkezési űrlap letiltva.",
"Edit Profile" : "Profil szerkesztése",
- "The headline and about sections will show up here" : "A fejléc és a névjegy szakaszok itt fognak megjelenni",
+ "The headline and about sections will show up here" : "A címsor és a névjegy szakaszok itt fognak megjelenni",
"You have not added any info yet" : "Még nem adott meg semmilyen információt",
"{user} has not added any info yet" : "{user} még nem adott meg semmilyen információt",
"Error opening the user status modal, try hard refreshing the page" : "Hiba a felhasználói állapot párbeszédablak megnyitásakor, próbálja meg az oldal kényszerített újratöltését",
diff --git a/core/l10n/hu.json b/core/l10n/hu.json
index 63289b5764b..89ea4a4ef4e 100644
--- a/core/l10n/hu.json
+++ b/core/l10n/hu.json
@@ -23,10 +23,11 @@
"State token does not match" : "Az állapottoken nem megfelelő",
"Invalid app password" : "Érvénytelen alkalmazásjelszó",
"Could not complete login" : "A bejelentkezés nem fejezhető be",
+ "State token missing" : "Az állapottoken hiányzik",
"Your login token is invalid or has expired" : "A bejelentkezési token érvénytelen vagy lejárt",
"This community release of Nextcloud is unsupported and push notifications are limited." : "A Nextcloud e közösségi kiadása nem támogatott, és a leküldéses értesítések korlátozottak.",
"Login" : "Bejelentkezés",
- "Please try again" : "Kérjük próbálja újra",
+ "Please try again" : "Próbálja újra",
"Password reset is disabled" : "Jelszó visszaállítás letiltva",
"Could not reset password because the token is expired" : "A jelszót nem lehet visszaállítani, mert a token lejárt",
"Could not reset password because the token is invalid" : "A jelszót nem lehet visszaállítani, mert a token érvénytelen",
@@ -99,6 +100,7 @@
"This instance is missing some recommended PHP modules. For improved performance and better compatibility it is highly recommended to install them." : "Ennél a példánynál hiányzik néhány javasolt PHP modul. A jobb teljesítmény és nagyobb kompatibilitás miatt ezek telepítése erősen javallott.",
"The PHP module \"imagick\" is not enabled although the theming app is. For favicon generation to work correctly, you need to install and enable this module." : "Az „imagick” PHP-modul nem engedélyezett, de a témázó alkalmazás igen. A webhelyikonok előállításához telepítenie és engedélyeznie kell ezt a modult.",
"The PHP modules \"gmp\" and/or \"bcmath\" are not enabled. If you use WebAuthn passwordless authentication, these modules are required." : "A „gmp” vagy a „bcmath” PHP modulok nem engedélyezettek. Ha WebAuthn jelszó nélküli hitelesítést használ, akkor szükség van ezekre a modulokra.",
+ "It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page ↗{linkend} about this." : "Úgy tűnik, hogy 32 bites PHP verziót használ. A Nextcloud megfelelő futtatásához 64 bites szükséges. Frissítse 64 bitesre az operációs rendszerét és a PHP-ját. További részletekért olvassa el az {linkstart}erről szóló dokumentációs oldalt ↗{linkend}.",
"Module php-imagick in this instance has no SVG support. For better compatibility it is recommended to install it." : "A php-imagick modul ebben az esetben nem rendelkezik SVG támogatással. A jobb kompatibilitás érdekében ajánlott telepíteni.",
"Some columns in the database are missing a conversion to big int. Due to the fact that changing column types on big tables could take some time they were not changed automatically. By running \"occ db:convert-filecache-bigint\" those pending changes could be applied manually. This operation needs to be made while the instance is offline. For further details read {linkstart}the documentation page about this ↗{linkend}." : "Az adatbázis egyes oszlopaiból hiányzik a big int átalakítás. MIvel a nagy táblák oszloptípusainak megváltoztatása eltarthat egy ideig, azok nem lettek automatikusan megváltoztatva. Az „occ db: convert-filecache-bigint” futtatásával ezek a függőben lévő módosítások kézileg is alkalmazhatók. Ezt a műveletet offline állapotban kell végrehajtani. További részletekért olvassa el a {linkstart}erről szóló dokumentációs oldalt ↗{linkend}.",
"SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "Jelenleg SQLite van háttéradatbázisként használva. Nagyobb telepítésekhez javasoljuk, hogy váltson más háttéradatbázisra. ",
@@ -186,7 +188,7 @@
"Back" : "Vissza",
"Login form is disabled." : "A bejelentkezési űrlap letiltva.",
"Edit Profile" : "Profil szerkesztése",
- "The headline and about sections will show up here" : "A fejléc és a névjegy szakaszok itt fognak megjelenni",
+ "The headline and about sections will show up here" : "A címsor és a névjegy szakaszok itt fognak megjelenni",
"You have not added any info yet" : "Még nem adott meg semmilyen információt",
"{user} has not added any info yet" : "{user} még nem adott meg semmilyen információt",
"Error opening the user status modal, try hard refreshing the page" : "Hiba a felhasználói állapot párbeszédablak megnyitásakor, próbálja meg az oldal kényszerített újratöltését",
diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js
index 359ae221820..615cc8eeefd 100644
--- a/core/l10n/pt_BR.js
+++ b/core/l10n/pt_BR.js
@@ -352,6 +352,7 @@ OC.L10N.register(
"Skip to main content" : "Ir ao conteúdo principal",
"Skip to navigation of app" : "Ir à navegação do aplicativo",
"Get your own free account" : "Obtenha uma conta grátis",
+ "%s homepage" : "%s homepage",
"Confirm your password" : "Confirme sua senha",
"%s's homepage" : "Página inicial de%s",
"Connect to your account" : "Conectar à sua conta",
diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json
index 4adf6fe8c98..33b53a987dc 100644
--- a/core/l10n/pt_BR.json
+++ b/core/l10n/pt_BR.json
@@ -350,6 +350,7 @@
"Skip to main content" : "Ir ao conteúdo principal",
"Skip to navigation of app" : "Ir à navegação do aplicativo",
"Get your own free account" : "Obtenha uma conta grátis",
+ "%s homepage" : "%s homepage",
"Confirm your password" : "Confirme sua senha",
"%s's homepage" : "Página inicial de%s",
"Connect to your account" : "Conectar à sua conta",
diff --git a/core/l10n/tr.js b/core/l10n/tr.js
index 43e33e79b51..1fc89d4a081 100644
--- a/core/l10n/tr.js
+++ b/core/l10n/tr.js
@@ -102,6 +102,7 @@ OC.L10N.register(
"This instance is missing some recommended PHP modules. For improved performance and better compatibility it is highly recommended to install them." : "Bu kopyada önerilen bazı PHP modülleri eksik. Daha iyi başarım ve uyumluluk için bu modüllerin kurulması önemle önerilir.",
"The PHP module \"imagick\" is not enabled although the theming app is. For favicon generation to work correctly, you need to install and enable this module." : "Tema uygulamasında olmasına rağmen \"imagick\" PHP modülü etkinleştirilmemiş. Favicon oluşturma işleminin doğru çalışması için bu modülü kurmanız ve etkinleştirmeniz gerekir.",
"The PHP modules \"gmp\" and/or \"bcmath\" are not enabled. If you use WebAuthn passwordless authentication, these modules are required." : "\"gmp\" ve/veya \"bcmath\" PHP modülleri etkinleştirilmemiş. WebAuthn parolasız kimlik doğrulaması kullanıyorsanız, bu modüller gereklidir.",
+ "It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page ↗{linkend} about this." : "32 bit bir PHP sürümü çalıştırıyorsunuz gibi görünüyor. Nextcloud uygulamasının iyi çalışması için 64 bit bir PHP sürümü kullanılmalıdır. Lütfen işletim sisteminizi ve PHP sürümünüzü 64 bit olacak şekilde yükseltin! Ayrıntılı bilgi almak için {linkstart}belgeler sayfasına bakabilirsiniz ↗{linkend}.",
"Module php-imagick in this instance has no SVG support. For better compatibility it is recommended to install it." : "Bu kopyadaki php-imagick modülünde SVG desteği yok. Daha iyi başarım ve uyumluluk için bu modülün kurulması önemle önerilir.",
"Some columns in the database are missing a conversion to big int. Due to the fact that changing column types on big tables could take some time they were not changed automatically. By running \"occ db:convert-filecache-bigint\" those pending changes could be applied manually. This operation needs to be made while the instance is offline. For further details read {linkstart}the documentation page about this ↗{linkend}." : "Veri tabanında büyük tamsayıya dönüştürülecek bazı sütunlar eksik. Sütun türlerini büyük tablolara dönüştürme işlemi uzun sürebileceğinden bu işlem otomatik olarak yapılmaz. Sunucunuz normal çalışırken bekleyen değişiklikleri el ile uygulamak için \"occ db:convert-filecache-bigint\" komutunu yürütün. Bu işlem yapılırken Nextcloud kopyası çevrimdışı olur. Ayrıntılı bilgi almak için {linkstart}belgeler ↗{linkend} bölümüne bakabilirsiniz.",
"SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "Şu anda veri tabanı olarak SQLite kullanılıyor. Daha büyük kurulumlar için farklı bir veri tabanı arka ucuna geçmenizi öneriyoruz.",
@@ -351,6 +352,7 @@ OC.L10N.register(
"Skip to main content" : "Ana içeriğe geç",
"Skip to navigation of app" : "Uygulama gezinmesine geç",
"Get your own free account" : "Ücretsiz hesabınızı açın",
+ "%s homepage" : "%s web sitesi",
"Confirm your password" : "Parolanızı onaylayın",
"%s's homepage" : "%s web sitesi",
"Connect to your account" : "Hesabınızı bağlayın",
diff --git a/core/l10n/tr.json b/core/l10n/tr.json
index 68bfdf25a0e..d20a967f3a9 100644
--- a/core/l10n/tr.json
+++ b/core/l10n/tr.json
@@ -100,6 +100,7 @@
"This instance is missing some recommended PHP modules. For improved performance and better compatibility it is highly recommended to install them." : "Bu kopyada önerilen bazı PHP modülleri eksik. Daha iyi başarım ve uyumluluk için bu modüllerin kurulması önemle önerilir.",
"The PHP module \"imagick\" is not enabled although the theming app is. For favicon generation to work correctly, you need to install and enable this module." : "Tema uygulamasında olmasına rağmen \"imagick\" PHP modülü etkinleştirilmemiş. Favicon oluşturma işleminin doğru çalışması için bu modülü kurmanız ve etkinleştirmeniz gerekir.",
"The PHP modules \"gmp\" and/or \"bcmath\" are not enabled. If you use WebAuthn passwordless authentication, these modules are required." : "\"gmp\" ve/veya \"bcmath\" PHP modülleri etkinleştirilmemiş. WebAuthn parolasız kimlik doğrulaması kullanıyorsanız, bu modüller gereklidir.",
+ "It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page ↗{linkend} about this." : "32 bit bir PHP sürümü çalıştırıyorsunuz gibi görünüyor. Nextcloud uygulamasının iyi çalışması için 64 bit bir PHP sürümü kullanılmalıdır. Lütfen işletim sisteminizi ve PHP sürümünüzü 64 bit olacak şekilde yükseltin! Ayrıntılı bilgi almak için {linkstart}belgeler sayfasına bakabilirsiniz ↗{linkend}.",
"Module php-imagick in this instance has no SVG support. For better compatibility it is recommended to install it." : "Bu kopyadaki php-imagick modülünde SVG desteği yok. Daha iyi başarım ve uyumluluk için bu modülün kurulması önemle önerilir.",
"Some columns in the database are missing a conversion to big int. Due to the fact that changing column types on big tables could take some time they were not changed automatically. By running \"occ db:convert-filecache-bigint\" those pending changes could be applied manually. This operation needs to be made while the instance is offline. For further details read {linkstart}the documentation page about this ↗{linkend}." : "Veri tabanında büyük tamsayıya dönüştürülecek bazı sütunlar eksik. Sütun türlerini büyük tablolara dönüştürme işlemi uzun sürebileceğinden bu işlem otomatik olarak yapılmaz. Sunucunuz normal çalışırken bekleyen değişiklikleri el ile uygulamak için \"occ db:convert-filecache-bigint\" komutunu yürütün. Bu işlem yapılırken Nextcloud kopyası çevrimdışı olur. Ayrıntılı bilgi almak için {linkstart}belgeler ↗{linkend} bölümüne bakabilirsiniz.",
"SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "Şu anda veri tabanı olarak SQLite kullanılıyor. Daha büyük kurulumlar için farklı bir veri tabanı arka ucuna geçmenizi öneriyoruz.",
@@ -349,6 +350,7 @@
"Skip to main content" : "Ana içeriğe geç",
"Skip to navigation of app" : "Uygulama gezinmesine geç",
"Get your own free account" : "Ücretsiz hesabınızı açın",
+ "%s homepage" : "%s web sitesi",
"Confirm your password" : "Parolanızı onaylayın",
"%s's homepage" : "%s web sitesi",
"Connect to your account" : "Hesabınızı bağlayın",
diff --git a/core/l10n/zh_TW.js b/core/l10n/zh_TW.js
index 51b91e4fd0b..9b7deb30218 100644
--- a/core/l10n/zh_TW.js
+++ b/core/l10n/zh_TW.js
@@ -352,6 +352,7 @@ OC.L10N.register(
"Skip to main content" : "跳到主內容",
"Skip to navigation of app" : "跳到應用程式導覽",
"Get your own free account" : "取得免費帳號",
+ "%s homepage" : "%s 的首頁",
"Confirm your password" : "確認密碼",
"%s's homepage" : "%s 的首頁",
"Connect to your account" : "連結您的帳號",
diff --git a/core/l10n/zh_TW.json b/core/l10n/zh_TW.json
index b621f4df323..a8134c09f23 100644
--- a/core/l10n/zh_TW.json
+++ b/core/l10n/zh_TW.json
@@ -350,6 +350,7 @@
"Skip to main content" : "跳到主內容",
"Skip to navigation of app" : "跳到應用程式導覽",
"Get your own free account" : "取得免費帳號",
+ "%s homepage" : "%s 的首頁",
"Confirm your password" : "確認密碼",
"%s's homepage" : "%s 的首頁",
"Connect to your account" : "連結您的帳號",
diff --git a/core/src/views/ContactsMenu.vue b/core/src/views/ContactsMenu.vue
index f03652bb477..5d034785558 100644
--- a/core/src/views/ContactsMenu.vue
+++ b/core/src/views/ContactsMenu.vue
@@ -133,19 +133,15 @@ export default {
.body {
flex-grow: 1;
padding-left: 8px;
+ min-width: 0;
div {
position: relative;
width: 100%;
- }
-
- .full-name, .last-message {
- /* TODO: don't use fixed width */
- max-width: 204px;
- overflow: hidden;
- white-space: nowrap;
+ overflow-x: hidden;
text-overflow: ellipsis;
}
+
.last-message, .email-address {
color: var(--color-text-maxcontrast);
}
diff --git a/dist/core-main.js b/dist/core-main.js
index b4dc6af69b8..92a98487b97 100644
--- a/dist/core-main.js
+++ b/dist/core-main.js
@@ -1,3 +1,3 @@
/*! For license information please see core-main.js.LICENSE.txt */
-!function(){var e,o={530:function(e,o,i){"use strict";var a={};i.r(a),i.d(a,{deleteKey:function(){return P},getApps:function(){return w},getKeys:function(){return y},getValue:function(){return x},setValue:function(){return k}});var r={};i.r(r),i.d(r,{formatLinksPlain:function(){return ln},formatLinksRich:function(){return sn},plainToRich:function(){return an},richToPlain:function(){return rn}});var s={};i.r(s),i.d(s,{dismiss:function(){return un},query:function(){return cn}});var l=i(19755),c=i.n(l),u=(i(28594),i(35666),i(35202),i(78595)),d=i(79753),A={},p=[],f=i(18181),h=i(26932),m={updatableNotification:null,getDefaultNotificationFunction:null,setDefault:function(t){this.getDefaultNotificationFunction=t},hide:function(t,e){f.ZP.isFunction(t)&&(e=t,t=void 0),t?(t.each((function(){c()(this)[0].toastify?c()(this)[0].toastify.hideToast():console.error("cannot hide toast because object is not set"),this===this.updatableNotification&&(this.updatableNotification=null)})),e&&e.call(),this.getDefaultNotificationFunction&&this.getDefaultNotificationFunction()):console.error("Missing argument $row in OC.Notification.hide() call, caller needs to be adjusted to only dismiss its own notification")},showHtml:function(t,e){(e=e||{}).isHTML=!0,e.timeout=e.timeout?e.timeout:h.Rl;var n=(0,h.PV)(t,e);return n.toastElement.toastify=n,c()(n.toastElement)},show:function(t,e){(e=e||{}).timeout=e.timeout?e.timeout:h.Rl;var n=(0,h.PV)(function(t){return t.toString().split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;").split('"').join("&quot;").split("'").join("&#039;")}(t),e);return n.toastElement.toastify=n,c()(n.toastElement)},showUpdate:function(t){return this.updatableNotification&&this.updatableNotification.hideToast(),this.updatableNotification=(0,h.PV)(t,{timeout:h.Rl}),this.updatableNotification.toastElement.toastify=this.updatableNotification,c()(this.updatableNotification.toastElement)},showTemporary:function(t,e){(e=e||{}).timeout=e.timeout||h.TN;var n=(0,h.PV)(t,e);return n.toastElement.toastify=n,c()(n.toastElement)},isHidden:function(){return!c()("#content").find(".toastify").length}},g=f.ZP.throttle((function(){m.showTemporary(t("core","Connection to server lost"))}),7e3,{trailing:!1}),v=!1,C={enableDynamicSlideToggle:function(){v=!0},showAppSidebar:function(t){(t||c()("#app-sidebar")).removeClass("disappear").show(),c()("#app-content").trigger(new(c().Event)("appresized"))},hideAppSidebar:function(t){(t||c()("#app-sidebar")).hide().addClass("disappear"),c()("#app-content").trigger(new(c().Event)("appresized"))}};function b(t,e,n){"post"!==t&&"delete"!==t||!Wt.PasswordConfirmation.requiresPasswordConfirmation()?(n=n||{},c().ajax({type:t.toUpperCase(),url:(0,d.generateOcsUrl)("apps/provisioning_api/api/v1/config/apps")+e,data:n.data||{},success:n.success,error:n.error})):Wt.PasswordConfirmation.requirePasswordConfirmation(_.bind(b,this,t,e,n))}function w(t){b("get","",t)}function y(t,e){b("get","/"+t,e)}function x(t,e,n,o){(o=o||{}).data={defaultValue:n},b("get","/"+t+"/"+e,o)}function k(t,e,n,o){(o=o||{}).data={value:n},b("post","/"+t+"/"+e,o)}function P(t,e,n){b("delete","/"+t+"/"+e,n)}var E=window.oc_appconfig||{},B={getValue:function(t,e,n,o){x(t,e,n,{success:o})},setValue:function(t,e,n){k(t,e,n)},getApps:function(t){w({success:t})},getKeys:function(t,e){y(t,{success:e})},deleteKey:function(t,e){P(t,e)}},O=void 0!==window._oc_appswebroots&&window._oc_appswebroots,D=i(72316),T=i.n(D),j=i(76591),I={create:"POST",update:"PROPPATCH",patch:"PROPPATCH",delete:"DELETE",read:"PROPFIND"};function z(t,e){if(f.ZP.isArray(t))return f.ZP.map(t,(function(t){return z(t,e)}));var n={href:t.href};return f.ZP.each(t.propStat,(function(t){if("HTTP/1.1 200 OK"===t.status)for(var o in t.properties){var i=o;o in e&&(i=e[o]),n[i]=t.properties[o]}})),n.id||(n.id=S(n.href)),n}function S(t){var e=t.indexOf("?");e>0&&(t=t.substr(0,e));var n,o=t.split("/");do{n=o[o.length-1],o.pop()}while(!n&&o.length>0);return n}function N(t){return t>=200&&t<=299}function U(t,e,n,o){return t.propPatch(e.url,function(t,e){var n,o={};for(n in t){var i=e[n],a=t[n];i||(console.warn('No matching DAV property for property "'+n),i=n),(f.ZP.isBoolean(a)||f.ZP.isNumber(a))&&(a=""+a),o[i]=a}return o}(n.changed,e.davProperties),o).then((function(t){N(t.status)?f.ZP.isFunction(e.success)&&e.success(n.toJSON()):f.ZP.isFunction(e.error)&&e.error(t)}))}var M=T().noConflict();Object.assign(M,{davCall:function(t,e){var n=new j.dav.Client({baseUrl:t.url,xmlNamespaces:f.ZP.extend({"DAV:":"d","http://owncloud.org/ns":"oc"},t.xmlNamespaces||{})});n.resolveUrl=function(){return t.url};var o=f.ZP.extend({"X-Requested-With":"XMLHttpRequest",requesttoken:OC.requestToken},t.headers);return"PROPFIND"===t.type?function(t,e,n,o){return t.propFind(e.url,f.ZP.values(e.davProperties)||[],e.depth,o).then((function(t){if(N(t.status)){if(f.ZP.isFunction(e.success)){var n=f.ZP.invert(e.davProperties),o=z(t.body,n);e.depth>0&&o.shift(),e.success(o)}}else f.ZP.isFunction(e.error)&&e.error(t)}))}(n,t,0,o):"PROPPATCH"===t.type?U(n,t,e,o):"MKCOL"===t.type?function(t,e,n,o){return t.request(e.type,e.url,o,null).then((function(i){N(i.status)?U(t,e,n,o):f.ZP.isFunction(e.error)&&e.error(i)}))}(n,t,e,o):function(t,e,n,o){return o["Content-Type"]="application/json",t.request(e.type,e.url,o,e.data).then((function(t){if(N(t.status)){if(f.ZP.isFunction(e.success)){if("PUT"===e.type||"POST"===e.type||"MKCOL"===e.type){var o=t.body||n.toJSON(),i=t.xhr.getResponseHeader("Content-Location");return"POST"===e.type&&i&&(o.id=S(i)),void e.success(o)}if(207===t.status){var a=f.ZP.invert(e.davProperties);e.success(z(t.body,a))}else e.success(t.body)}}else f.ZP.isFunction(e.error)&&e.error(t)}))}(n,t,e,o)},davSync:function(t){return function(e,n,o){var i={type:I[e]||e},a=n instanceof t.Collection;if("update"===e&&(n.hasInnerCollection?i.type="MKCOL":(n.usePUT||n.collection&&n.collection.usePUT)&&(i.type="PUT")),o.url||(i.url=f.ZP.result(n,"url")||function(){throw new Error('A "url" property or function must be specified')}()),null!=o.data||!n||"create"!==e&&"update"!==e&&"patch"!==e||(i.data=JSON.stringify(o.attrs||n.toJSON(o))),"PROPFIND"!==i.type&&(i.processData=!1),"PROPFIND"===i.type||"PROPPATCH"===i.type){var r=n.davProperties;!r&&n.model&&(r=n.model.prototype.davProperties),r&&(f.ZP.isFunction(r)?i.davProperties=r.call(n):i.davProperties=r),i.davProperties=f.ZP.extend(i.davProperties||{},o.davProperties),f.ZP.isUndefined(o.depth)&&(o.depth=a?1:0)}var s=o.error;o.error=function(t,e,n){o.textStatus=e,o.errorThrown=n,s&&s.call(o.context,t,e,n)};var l=o.xhr=t.davCall(f.ZP.extend(i,o),n);return n.trigger("request",n,l,o),l}}(M)});var L=M,F=i(65358),R=window._oc_config||{},Q=D.Model.extend({defaults:{fullName:"",lastMessage:"",actions:[],hasOneAction:!1,hasTwoActions:!1,hasManyActions:!1},initialize:function(){0===this.get("actions").length?this.set("hasOneAction",!0):1===this.get("actions").length?(this.set("hasTwoActions",!0),this.set("secondAction",this.get("actions")[0])):this.set("hasManyActions",!0)}}),G=D.Collection.extend({model:Q}),H=D.View.extend({_collection:void 0,_subViews:[],initialize:function(t){this._collection=t.collection},render:function(){var t=this;return t.$el.html(""),t._subViews=[],t._collection.forEach((function(e){var n=new K({model:e});n.render(),t.$el.append(n.$el),n.on("toggle:actionmenu",t._onChildActionMenuToggle,t),t._subViews.push(n)})),t},_onChildActionMenuToggle:function(t){this._subViews.forEach((function(e){e.trigger("parent:toggle:actionmenu",t)}))}}),K=D.View.extend({className:"contact",_template:void 0,_model:void 0,_actionMenuShown:!1,events:{"click .icon-more":"_onToggleActionsMenu"},contactTemplate:i(10944),template:function(t){return this.contactTemplate(t)},initialize:function(t){this._model=t.model,this.on("parent:toggle:actionmenu",this._onOtherActionMenuOpened,this)},render:function(){return this.$el.html(this.template({contact:this._model.toJSON()})),this.delegateEvents(),this.$("div.avatar").imageplaceholder(this._model.get("fullName")),this.$(".top-action").tooltip({placement:"left"}),this.$(".second-action").tooltip({placement:"left"}),this},_onToggleActionsMenu:function(){this._actionMenuShown=!this._actionMenuShown,this._actionMenuShown?this.$(".menu").show():this.$(".menu").hide(),this.trigger("toggle:actionmenu",this.$el)},_onOtherActionMenuOpened:function(t){this.$el.is(t)||(this._actionMenuShown=!1,this.$(".menu").hide())}}),Z=D.View.extend({_loadingTemplate:void 0,_errorTemplate:void 0,_contentTemplate:void 0,_contactsTemplate:void 0,_contacts:void 0,_searchTerm:"",events:{"input #contactsmenu-search":"_onSearch"},templates:{loading:i(95386),error:i(20421),menu:i(66115),list:i(34083)},_onSearch:f.ZP.debounce((function(t){var e=this.$("#contactsmenu-search").val();e!==this._searchTerm&&(this.trigger("search",this.$("#contactsmenu-search").val()),this._searchTerm=e)}),700),loadingTemplate:function(t){return this.templates.loading(t)},errorTemplate:function(e){return this.templates.error(f.ZP.extend({couldNotLoadText:t("core","Could not load your contacts")},e))},contentTemplate:function(e){return this.templates.menu(f.ZP.extend({searchContactsText:t("core","Search contacts …")},e))},contactsTemplate:function(e){return this.templates.list(f.ZP.extend({noContactsFoundText:t("core","No contacts found"),showAllContactsText:t("core","Show all contacts …"),contactsAppMgmtText:t("core","Install the Contacts app")},e))},initialize:function(t){this.options=t},showLoading:function(t){this.render(),this._contacts=void 0,this.$(".content").html(this.loadingTemplate({loadingText:t}))},showError:function(){this.render(),this._contacts=void 0,this.$(".content").html(this.errorTemplate())},showContacts:function(t,e){this._contacts=t.contacts,this.render({contacts:t.contacts});var n=new H({collection:t.contacts});n.render(),this.$(".content").html(this.contactsTemplate({contacts:t.contacts,searchTerm:e,contactsAppEnabled:t.contactsAppEnabled,contactsAppURL:Wt.generateUrl("/apps/contacts"),canInstallApp:Wt.isUserAdmin(),contactsAppMgmtURL:Wt.generateUrl("/settings/apps/social/contacts")})),this.$("#contactsmenu-contacts").html(n.$el)},render:function(t){var e=this.$("#contactsmenu-search").val();return this.$el.html(this.contentTemplate(t)),this.$("#contactsmenu-search").val(e),this.$("#contactsmenu-search").focus(),this}}),Y=function(t){this.initialize(t)};Y.prototype={$el:void 0,_view:void 0,_contactsPromise:void 0,initialize:function(t){this.$el=c()(t.el),this._view=new Z({el:this.$el}),this._view.on("search",(function(t){this.loadContacts(t)}),this)},_getContacts:function(t){var e=Wt.generateUrl("/contactsmenu/contacts");return Promise.resolve(c().ajax(e,{method:"POST",data:{filter:t}}))},loadContacts:function(e){var n=this;return n._contactsPromise||(n._contactsPromise=n._getContacts(e)),f.ZP.isUndefined(e)||""===e?n._view.showLoading(t("core","Loading your contacts …")):n._view.showLoading(t("core","Looking for {term} …",{term:e})),n._contactsPromise.then((function(t){t.contacts=new G(t.contacts),n._view.showContacts(t,e)}),(function(t){n._view.showError(),console.error("There was an error loading your contacts",t)})).then((function(){delete n._contactsPromise})).catch(console.error.bind(this))}};var q=Y,W=document.getElementsByTagName("head")[0].getAttribute("data-user"),J=document.getElementsByTagName("head")[0].getAttribute("data-user-displayname"),V=void 0!==W&&W;function X(t){return X="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},X(t)}function $(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,(void 0,i=function(t,e){if("object"!==X(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var o=n.call(t,e);if("object"!==X(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(o.key,"string"),"symbol"===X(i)?i:String(i)),o)}var i}function tt(t,e,n){return e&&$(t.prototype,e),n&&$(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}var et={Search:tt((function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),console.warn("OCA.Search is deprecated. Please use the unified search API instead")}))},nt=function(t){return"click"===t.type||"keydown"===t.type&&"Enter"===t.key};function ot(t,e,n,o,i,a,r){try{var s=t[a](r),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(o,i)}function it(t){return function(){var e=this,n=arguments;return new Promise((function(o,i){var a=t.apply(e,n);function r(t){ot(a,o,i,r,s,"next",t)}function s(t){ot(a,o,i,r,s,"throw",t)}r(void 0)}))}}function at(t){return at="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},at(t)}var rt,st,lt,ct,ut={YES_NO_BUTTONS:70,OK_BUTTONS:71,FILEPICKER_TYPE_CHOOSE:1,FILEPICKER_TYPE_MOVE:2,FILEPICKER_TYPE_COPY:3,FILEPICKER_TYPE_COPY_MOVE:4,FILEPICKER_TYPE_CUSTOM:5,dialogsCounter:0,alert:function(t,e,n,o){this.message(t,e,"alert",ut.OK_BUTTON,n,o)},info:function(t,e,n,o){this.message(t,e,"info",ut.OK_BUTTON,n,o)},confirm:function(t,e,n,o){return this.message(t,e,"notice",ut.YES_NO_BUTTONS,n,o)},confirmDestructive:function(t,e,n,o,i){return this.message(t,e,"none",n,o,void 0===i||i)},confirmHtml:function(t,e,n,o){return this.message(t,e,"notice",ut.YES_NO_BUTTONS,n,o,!0)},prompt:function(e,n,o,i,a,r){return c().when(this._getMessageTemplate()).then((function(s){var l="oc-dialog-"+ut.dialogsCounter+"-content",u="#"+l,d=s.octemplate({dialog_name:l,title:n,message:e,type:"notice"}),A=c()("<input/>");A.attr("type",r?"password":"text").attr("id",l+"-input").attr("placeholder",a);var p=c()("<label/>").attr("for",l+"-input").text(a+": ");d.append(p),d.append(A),void 0===i&&(i=!1),c()("body").append(d),void 0!==o&&(o=f.ZP.once(o));var h=[{text:t("core","No"),click:function(){void 0!==o&&o(!1,A.val()),c()(u).ocdialog("close")}},{text:t("core","Yes"),click:function(){void 0!==o&&o(!0,A.val()),c()(u).ocdialog("close")},defaultButton:!0}];c()(u).ocdialog({closeOnEscape:!0,modal:i,buttons:h,close:function(){void 0!==o&&o(!1,A.val())}}),A.focus(),ut.dialogsCounter++}))},filepicker:function(e,n,o,i,a,r,s,l){var u=this;if(this.filepicker.sortField="name",this.filepicker.sortOrder="asc",!this.filepicker.loading){void 0===r&&(r=this.FILEPICKER_TYPE_CHOOSE);var d=t("core","No files in here"),A=t("files","New folder");r!==this.FILEPICKER_TYPE_COPY&&r!==this.FILEPICKER_TYPE_MOVE&&r!==this.FILEPICKER_TYPE_COPY_MOVE||(d=t("core","No more subfolders in here")),this.filepicker.loading=!0,this.filepicker.filesClient=et.Sharing&&et.Sharing.PublicApp&&et.Sharing.PublicApp.fileList?et.Sharing.PublicApp.fileList.filesClient:Wt.Files.getClient(),this.filelist=null,s=s||"",l=Object.assign({allowDirectoryChooser:!1},l),c().when(this._getFilePickerTemplate()).then((function(p){u.filepicker.loading=!1,u.$filePicker&&u.$filePicker.ocdialog("close"),null==i&&(i=[]),"string"==typeof i&&(i=[i]),u.$filePicker=p.octemplate({dialog_name:"oc-dialog-filepicker-content",title:e,emptytext:d,newtext:A,nameCol:t("core","Name"),sizeCol:t("core","Size"),modifiedCol:t("core","Modified")}).data("path",s).data("multiselect",o).data("mimetype",i).data("allowDirectoryChooser",l.allowDirectoryChooser),"function"==typeof l.filter&&u.$filePicker.data("filter",l.filter),void 0===a&&(a=!1),void 0===o&&(o=!1),c()("body").prepend(u.$filePicker),u.$showGridView=c()("button#picker-showgridview"),u.$showGridView.on("click keydown",(function(t){nt(t)&&u._onGridviewChange()})),u._getGridSettings();var f=u.$filePicker.find(".actions.creatable .button-add");r!==u.FILEPICKER_TYPE_CHOOSE||l.allowDirectoryChooser||u.$filePicker.find(".actions.creatable").hide(),f.on("focus",(function(){u.$filePicker.ocdialog("setEnterCallback",(function(t){t.stopImmediatePropagation(),t.preventDefault(),f.click()}))})),f.on("blur",(function(){u.$filePicker.ocdialog("unsetEnterCallback")})),Wt.registerMenu(f,u.$filePicker.find(".menu"),(function(){m.tooltip("hide"),m.focus(),u.$filePicker.ocdialog("setEnterCallback",(function(t){t.stopImmediatePropagation(),t.preventDefault(),u.$filePicker.submit()}));var t=m.val(),e=t.lastIndexOf(".");-1===e&&(e=t.length),m.selectRange(0,e)}));var h=u.$filePicker.find(".filenameform"),m=h.find("input[type='text']"),g=h.find("input[type='submit']");m.on("keydown",(function(t){nt(t)&&(t.stopImmediatePropagation(),t.preventDefault(),h.submit())})),g.on("click",(function(t){t.stopImmediatePropagation(),t.preventDefault(),h.submit()}));h.on("submit",(function(e){if(e.stopPropagation(),e.preventDefault(),function(){var e=m.val();try{if(function(e){var n=e.trim();if("."===n||".."===n)throw t("files",'"{name}" is an invalid file name.',{name:e});if(0===n.length)throw t("files","File name cannot be empty.");if(-1!==n.indexOf("/"))throw t("files",'"/" is not allowed inside a file name.');if(n.match(Wt.config.blacklist_files_regex))throw t("files",'"{name}" is not an allowed filetype',{name:e});return!0}(e)){if(u.filelist.find((function(t){return t.name===this}),e))throw t("files","{newName} already exists",{newName:e},void 0,{escape:!1});return!0}}catch(t){m.attr("title",t),m.tooltip({placement:"right",trigger:"manual",container:".newFolderMenu"}),m.tooltip("_fixTitle"),m.tooltip("show"),m.addClass("error")}return!1}()){var n=m.val();u.filepicker.filesClient.createDirectory(u.$filePicker.data("path")+"/"+n).always((function(t){u._fillFilePicker(u.$filePicker.data("path")+"/"+n,r)})),Wt.hideMenus(),u.$filePicker.ocdialog("unsetEnterCallback"),u.$filePicker.click(),m.val(A)}})),m.on("input",(function(t){m.tooltip("hide")})),u.$filePicker.ready((function(){u.$fileListHeader=u.$filePicker.find(".filelist thead tr"),u.$filelist=u.$filePicker.find(".filelist tbody"),u.$filelistContainer=u.$filePicker.find(".filelist-container"),u.$dirTree=u.$filePicker.find(".dirtree"),u.$dirTree.on("click keydown","div:not(:last-child)",u,(function(t){nt(t)&&u._handleTreeListSelect(t,r)})),u.$filelist.on("click keydown","tr",(function(t){nt(t)&&u._handlePickerClick(t,c()(this),r)})),u.$fileListHeader.on("click keydown","a",(function(t){if(nt(t)){var e=u.$filePicker.data("path");u.filepicker.sortField=c()(t.currentTarget).data("sort"),u.filepicker.sortOrder="asc"===u.filepicker.sortOrder?"desc":"asc",u._fillFilePicker(e,r)}})),u._fillFilePicker(s,r)}));var v=function(t){if(void 0!==n){var e;if(!0===o)e=[],u.$filelist.find("tr.filepicker_element_selected").each((function(t,n){e.push(u.$filePicker.data("path")+"/"+c()(n).data("entryname"))}));else{e=u.$filePicker.data("path");var i=u.$filelist.find("tr.filepicker_element_selected").data("entryname");i&&(e+="/"+i)}n(e,t),u.$filePicker.ocdialog("close")}},C=[];r===ut.FILEPICKER_TYPE_CHOOSE?C.push({text:t("core","Choose"),click:function(){v(ut.FILEPICKER_TYPE_CHOOSE)},defaultButton:!0}):r===ut.FILEPICKER_TYPE_CUSTOM?l.buttons.forEach((function(t){C.push({text:t.text,click:function(){v(t.type)},defaultButton:t.defaultButton})})):(r!==ut.FILEPICKER_TYPE_COPY&&r!==ut.FILEPICKER_TYPE_COPY_MOVE||C.push({text:t("core","Copy"),click:function(){v(ut.FILEPICKER_TYPE_COPY)},defaultButton:!1}),r!==ut.FILEPICKER_TYPE_MOVE&&r!==ut.FILEPICKER_TYPE_COPY_MOVE||C.push({text:t("core","Move"),click:function(){v(ut.FILEPICKER_TYPE_MOVE)},defaultButton:!0})),u.$filePicker.ocdialog({closeOnEscape:!0,width:600,height:500,modal:a,buttons:C,style:{buttons:"aside"},close:function(){try{c()(this).ocdialog("destroy").remove()}catch(t){}u.$filePicker=null}});var b=u.$filePicker.closest(".oc-dialog").find(".primary");-1!==u.$filePicker.data("mimetype").indexOf("httpd/unix-directory")||u.$filePicker.data("allowDirectoryChooser")?b.prop("disabled",!1):b.prop("disabled",!0)})).fail((function(e,n){u.filepicker.loading=!1,0!==e&&alert(t("core","Error loading file picker template: {error}",{error:n}))}))}},message:function(e,n,o,i,a,r,s){return c().when(this._getMessageTemplate()).then((function(l){var u="oc-dialog-"+ut.dialogsCounter+"-content",d="#"+u,A=l.octemplate({dialog_name:u,title:n,message:e,type:o},s?{escapeFunction:""}:{});void 0===r&&(r=!1),c()("body").append(A);var p=[];switch(i){case ut.YES_NO_BUTTONS:p=[{text:t("core","No"),click:function(){void 0!==a&&a(!1),c()(d).ocdialog("close")}},{text:t("core","Yes"),click:function(){void 0!==a&&a(!0),c()(d).ocdialog("close")},defaultButton:!0}];break;case ut.OK_BUTTON:p[0]={text:t("core","OK"),click:function(){c()(d).ocdialog("close"),void 0!==a&&a()},defaultButton:!0};break;default:"object"===at(i)&&i.type===ut.YES_NO_BUTTONS&&(p=[{text:i.cancel||t("core","No"),click:function(){void 0!==a&&a(!1),c()(d).ocdialog("close")}},{text:i.confirm||t("core","Yes"),click:function(){void 0!==a&&a(!0),c()(d).ocdialog("close")},defaultButton:!0,classes:i.confirmClasses}])}c()(d).ocdialog({closeOnEscape:!0,closeCallback:function(){a&&a(!1)},modal:r,buttons:p}),ut.dialogsCounter++})).fail((function(o,i){0===o?alert(n+": "+e):alert(t("core","Error loading message template: {error}",{error:i}))}))},_fileexistsshown:!1,fileexists:function(e,o,i,a){var r=this,s=new(c().Deferred),l=function(t,e,n,o,i){o=Math.round(o),i=Math.round(i);for(var a=t.getContext("2d").getImageData(0,0,e,n),r=t.getContext("2d").getImageData(0,0,o,i),s=a.data,l=r.data,c=e/o,u=n/i,d=Math.ceil(c/2),A=Math.ceil(u/2),p=0;p<i;p++)for(var f=0;f<o;f++){for(var h=4*(f+p*o),m=0,g=0,v=0,C=0,b=0,w=0,y=0,x=(p+.5)*u,k=Math.floor(p*u);k<(p+1)*u;k++)for(var P=Math.abs(x-(k+.5))/A,E=(f+.5)*c,B=P*P,O=Math.floor(f*c);O<(f+1)*c;O++){var _=Math.abs(E-(O+.5))/d,D=Math.sqrt(B+_*_);D>=-1&&D<=1&&(m=2*D*D*D-3*D*D+1)>0&&(y+=m*s[3+(_=4*(O+k*e))],v+=m,s[_+3]<255&&(m=m*s[_+3]/250),C+=m*s[_],b+=m*s[_+1],w+=m*s[_+2],g+=m)}l[h]=C/g,l[h+1]=b/g,l[h+2]=w/g,l[h+3]=y/v}t.getContext("2d").clearRect(0,0,Math.max(e,o),Math.max(n,i)),t.width=o,t.height=i,t.getContext("2d").putImageData(r,0,0)},u=function(n,o,i){var a=n.find(".template").clone().removeClass("template").addClass("conflict"),r=a.find(".original"),s=a.find(".replacement");a.data("data",e),a.find(".filename").text(o.name),r.find(".size").text(Wt.Util.humanFileSize(o.size)),r.find(".mtime").text(Wt.Util.formatDate(o.mtime)),i.size&&i.lastModified&&(s.find(".size").text(Wt.Util.humanFileSize(i.size)),s.find(".mtime").text(Wt.Util.formatDate(i.lastModified)));var u=o.directory+"/"+o.name,d={file:u,x:96,y:96,c:o.etag,forceIcon:0},A=Files.generatePreviewUrl(d);A=A.replace(/'/g,"%27"),r.find(".icon").css({"background-image":"url('"+A+"')"}),function(t){var e=new(c().Deferred),n=t.type&&t.type.split("/").shift();if(window.FileReader&&"image"===n){var o=new FileReader;o.onload=function(t){var n=new Blob([t.target.result]);window.URL=window.URL||window.webkitURL;var o=window.URL.createObjectURL(n),i=new Image;i.src=o,i.onload=function(){var t,n,o,a,r,s,c,u=(t=i,r=document.createElement("canvas"),s=t.width,c=t.height,s>c?(o=0,n=(s-c)/2):(o=(c-s)/2,n=0),a=Math.min(s,c),r.width=a,r.height=a,r.getContext("2d").drawImage(t,n,o,a,a,0,0,a,a),l(r,a,a,96,96),r.toDataURL("image/png",.7));e.resolve(u)}},o.readAsArrayBuffer(t)}else e.reject();return e}(i).then((function(t){s.find(".icon").css("background-image","url("+t+")")}),(function(){u=Wt.MimeType.getIconUrl(i.type),s.find(".icon").css("background-image","url("+u+")")}));var p=n.find(".conflict").length;r.find("input:checkbox").attr("id","checkbox_original_"+p),s.find("input:checkbox").attr("id","checkbox_replacement_"+p),n.append(a),i.lastModified>o.mtime?s.find(".mtime").css("font-weight","bold"):i.lastModified<o.mtime&&r.find(".mtime").css("font-weight","bold"),i.size&&i.size>o.size?s.find(".size").css("font-weight","bold"):i.size&&i.size<o.size&&r.find(".size").css("font-weight","bold"),"readonly"===o.status&&(r.addClass("readonly").find('input[type="checkbox"]').prop("checked",!0).prop("disabled",!0),r.find(".message").text(t("core","read-only")))},d="oc-dialog-fileexists-content",A="#"+d;if(this._fileexistsshown){var p=c()(A+" .conflicts");u(p,o,i);var f=c()(A+" .conflict").length,h=n("core","{count} file conflict","{count} file conflicts",f,{count:f});c()(A).parent().children(".oc-dialog-title").text(h),c()(window).trigger("resize"),s.resolve()}else this._fileexistsshown=!0,c().when(this._getFileExistsTemplate()).then((function(n){var l=t("core","One file conflict"),p=n.octemplate({dialog_name:d,title:l,type:"fileexists",allnewfiles:t("core","New Files"),allexistingfiles:t("core","Already existing files"),why:t("core","Which files do you want to keep?"),what:t("core","If you select both versions, the copied file will have a number added to its name.")});if(c()("body").append(p),o&&i){var f=p.find(".conflicts");u(f,o,i)}var h=[{text:t("core","Cancel"),classes:"cancel",click:function(){void 0!==a.onCancel&&a.onCancel(e),c()(A).ocdialog("close")}},{text:t("core","Continue"),classes:"continue",click:function(){void 0!==a.onContinue&&a.onContinue(c()(A+" .conflict")),c()(A).ocdialog("close")}}];c()(A).ocdialog({width:500,closeOnEscape:!0,modal:!0,buttons:h,closeButton:null,close:function(){r._fileexistsshown=!1;try{c()(this).ocdialog("destroy").remove()}catch(t){}}}),c()(A).css("height","auto");var m=p.closest(".oc-dialog").find("button.continue");function g(){var t=p.find(".conflicts .checkbox:checked").length;m.prop("disabled",0===t)}m.prop("disabled",!0),c()(A).find(".allnewfiles").on("click",(function(){c()(A).find('.conflict .replacement input[type="checkbox"]').prop("checked",c()(this).prop("checked"))})),c()(A).find(".allexistingfiles").on("click",(function(){c()(A).find('.conflict .original:not(.readonly) input[type="checkbox"]').prop("checked",c()(this).prop("checked"))})),c()(A).find(".conflicts").on("click",".replacement,.original:not(.readonly)",(function(){var t=c()(this).find('input[type="checkbox"]');t.prop("checked",!t.prop("checked"))})),c()(A).find(".conflicts").on("click",'.replacement input[type="checkbox"],.original:not(.readonly) input[type="checkbox"]',(function(){var t=c()(this);t.prop("checked",!t.prop("checked"))})),c()(A).on("click",".replacement,.allnewfiles",(function(){var e=c()(A).find('.conflict .replacement input[type="checkbox"]:checked').length;e===c()(A+" .conflict").length?(c()(A).find(".allnewfiles").prop("checked",!0),c()(A).find(".allnewfiles + .count").text(t("core","(all selected)"))):e>0?(c()(A).find(".allnewfiles").prop("checked",!1),c()(A).find(".allnewfiles + .count").text(t("core","({count} selected)",{count:e}))):(c()(A).find(".allnewfiles").prop("checked",!1),c()(A).find(".allnewfiles + .count").text("")),g()})),c()(A).on("click",".original,.allexistingfiles",(function(){var e=c()(A).find('.conflict .original input[type="checkbox"]:checked').length;e===c()(A+" .conflict").length?(c()(A).find(".allexistingfiles").prop("checked",!0),c()(A).find(".allexistingfiles + .count").text(t("core","(all selected)"))):e>0?(c()(A).find(".allexistingfiles").prop("checked",!1),c()(A).find(".allexistingfiles + .count").text(t("core","({count} selected)",{count:e}))):(c()(A).find(".allexistingfiles").prop("checked",!1),c()(A).find(".allexistingfiles + .count").text("")),g()})),s.resolve()})).fail((function(){s.reject(),alert(t("core","Error loading file exists template"))}));return s.promise()},_getGridSettings:function(){var e=this;c().get(Wt.generateUrl("/apps/files/api/v1/showgridview"),(function(n){e.$showGridView.removeClass("icon-toggle-filelist icon-toggle-pictures").addClass(n.gridview?"icon-toggle-filelist":"icon-toggle-pictures"),e.$showGridView.attr("aria-label",n.gridview?t("files","Show list view"):t("files","Show grid view")),c()(".list-container").toggleClass("view-grid",n.gridview)}))},_onGridviewChange:function(){var e=this.$showGridView.hasClass("icon-toggle-filelist");Wt.currentUser&&c().post(Wt.generateUrl("/apps/files/api/v1/showgridview"),{show:!e}),this.$showGridView.removeClass("icon-toggle-filelist icon-toggle-pictures").addClass(e?"icon-toggle-pictures":"icon-toggle-filelist"),this.$showGridView.attr("aria-label",e?t("files","Show grid view"):t("files","Show list view")),this.$filePicker.find(".list-container").toggleClass("view-grid",!e)},_getFilePickerTemplate:function(){var t=c().Deferred();if(this.$filePickerTemplate)t.resolve(this.$filePickerTemplate);else{var e=this;c().get(Wt.filePath("core","templates","filepicker.html"),(function(n){e.$filePickerTemplate=c()(n),e.$listTmpl=e.$filePickerTemplate.find(".filelist tbody tr:first-child").detach(),t.resolve(e.$filePickerTemplate)})).fail((function(e,n,o){t.reject(e.status,o)}))}return t.promise()},_getMessageTemplate:function(){var t=c().Deferred();if(this.$messageTemplate)t.resolve(this.$messageTemplate);else{var e=this;c().get(Wt.filePath("core","templates","message.html"),(function(n){e.$messageTemplate=c()(n),t.resolve(e.$messageTemplate)})).fail((function(e,n,o){t.reject(e.status,o)}))}return t.promise()},_getFileExistsTemplate:function(){var t=c().Deferred();if(this.$fileexistsTemplate)t.resolve(this.$fileexistsTemplate);else{var e=this;c().get(Wt.filePath("files","templates","fileexists.html"),(function(n){e.$fileexistsTemplate=c()(n),t.resolve(e.$fileexistsTemplate)})).fail((function(){t.reject()}))}return t.promise()},_fillFilePicker:(rt=it(regeneratorRuntime.mark((function e(n,o){var i,a,r,s,l,u,d,A;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=this,this.$filelist.empty(),this.$filePicker.find(".emptycontent").hide(),this.$filelistContainer.addClass("icon-loading"),this.$filePicker.data("path",n),a=this.$filePicker.data("mimetype"),r=this.$filePicker.data("filter"),"string"==typeof a&&(a=[a]),i.$fileListHeader.find(".sort-indicator").addClass("hidden").removeClass("icon-triangle-n").removeClass("icon-triangle-s"),i.$fileListHeader.find("[data-sort="+i.filepicker.sortField+"] .sort-indicator").removeClass("hidden"),"asc"===i.filepicker.sortOrder?i.$fileListHeader.find("[data-sort="+i.filepicker.sortField+"] .sort-indicator").addClass("icon-triangle-n"):i.$fileListHeader.find("[data-sort="+i.filepicker.sortField+"] .sort-indicator").addClass("icon-triangle-s"),s=function(){var t=it(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",i.filepicker.filesClient.getFolderContents(e).then((function(t,e){return e})));case 1:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),e.prev=12,e.next=15,s(n);case 15:l=e.sent,e.next=26;break;case 18:return e.prev=18,e.t0=e.catch(12),console.error("Requested path does not exists, falling back to root"),e.next=23,s("/");case 23:l=e.sent,this.$filePicker.data("path","/"),this._changeButtonsText(o,"");case 26:i.filelist=l,a&&a.length>0&&-1===a.indexOf("*")&&(l=l.filter((function(t){return"dir"===t.type||-1!==a.indexOf(t.mimetype)}))),r&&(l=l.filter(r)),null===(u=document.getElementById("showHiddenFiles"))||"1"===u.value||(l=l.filter((function(t){return!t.name.startsWith(".")}))),A=(d={name:function(t,e){return"dir"===t.type&&"dir"!==e.type?-1:"dir"!==t.type&&"dir"===e.type?1:Wt.Util.naturalSortCompare(t.name,e.name)},size:function(t,e){return t.size-e.size},mtime:function(t,e){return t.mtime-e.mtime}})[i.filepicker.sortField]||d.name,l=l.sort((function(t,e){var n=function(t){return t.tags&&t.tags.indexOf(Wt.TAG_FAVORITE)>=0};return n(t)&&!n(e)?-1:!n(t)&&n(e)?1:"asc"===i.filepicker.sortOrder?A(t,e):-A(t,e)})),i._fillSlug(),0===l.length?(i.$filePicker.find(".emptycontent").show(),i.$fileListHeader.hide()):(i.$filePicker.find(".emptycontent").hide(),i.$fileListHeader.show()),i.$filelist.empty(),c().each(l,(function(e,o){var a,r;if(o.isEncrypted&&"httpd/unix-directory"===o.mimetype?o.icon=Wt.MimeType.getIconUrl("dir-encrypted"):o.icon=Wt.MimeType.getIconUrl(o.mimetype),void 0!==o.size&&o.size>=0?(a=Wt.Util.humanFileSize(parseInt(o.size,10),!0),r=Math.round(160-Math.pow(o.size/1048576,2))):(a=t("files","Pending"),r=80),o.name.length>=10)var s=Math.min(Math.floor(o.name.length/2),10),l=o.name.substr(0,o.name.length-s),u=o.name.substr(o.name.length-s);else l=o.name,u="";var d=i.$listTmpl.octemplate({type:o.type,dir:n,filename:o.name,filename1:l,filename2:u,date:Wt.Util.relativeModifiedDate(o.mtime),size:a,sizeColor:r,icon:o.icon});if("file"===o.type){var A={file:n+"/"+o.name,x:100,y:100},p=new Image,f=Wt.generateUrl("/core/preview.png?")+c().param(A);p.onload=function(){p.width>5&&d.find("td.filename").attr("style","background-image:url("+f+")")},p.src=f}i.$filelist.append(d)})),i.$filelistContainer.removeClass("icon-loading");case 40:case"end":return e.stop()}}),e,this,[[12,18]])}))),function(t,e){return rt.apply(this,arguments)}),_fillSlug:function(){var t=this.$dirTree.find(".actions.creatable").detach();this.$dirTree.empty();var e=this;e.$dirTree.append(t);var n=this.$filePicker.data("path"),o=c()('<div data-dir="{dir}" tabindex="0"><a>{name}</a></div>').addClass("crumb");if(n){var i=n.split("/");c().each(i,(function(t,n){if(""===(n=i.pop()))return!1;e.$dirTree.prepend(o.octemplate({dir:i.join("/")+"/"+n,name:n}))}))}o.octemplate({dir:"",name:""},{escapeFunction:null}).prependTo(this.$dirTree)},_handleTreeListSelect:function(t,e){var n=t.data,o=c()(t.target).closest(".crumb").data("dir");n._fillFilePicker(o,e);var i=t.target.closest(".oc-dialog"),a=c()(".primary",i);this._changeButtonsText(e,o.split(/[/]+/).pop()),-1!==this.$filePicker.data("mimetype").indexOf("httpd/unix-directory")||this.$filePicker.data("allowDirectoryChooser")?a.prop("disabled",!1):a.prop("disabled",!0)},_handlePickerClick:function(t,e,n){var o=this.$filePicker.closest(".oc-dialog").find(".primary");"file"===e.data("type")?(!0===this.$filePicker.data("multiselect")&&t.ctrlKey||this.$filelist.find(".filepicker_element_selected").removeClass("filepicker_element_selected"),e.toggleClass("filepicker_element_selected"),o.prop("disabled",!1)):"dir"===e.data("type")&&(this._fillFilePicker(this.$filePicker.data("path")+"/"+e.data("entryname"),n),this._changeButtonsText(n,e.data("entryname")),-1!==this.$filePicker.data("mimetype").indexOf("httpd/unix-directory")||this.$filePicker.data("allowDirectoryChooser")?o.prop("disabled",!1):o.prop("disabled",!0))},_changeButtonsText:function(e,n){var o=""===n?t("core","Copy"):t("core","Copy to {folder}",{folder:n}),i=""===n?t("core","Move"):t("core","Move to {folder}",{folder:n}),a=c()(".oc-dialog-buttonrow button");switch(e){case this.FILEPICKER_TYPE_CHOOSE:case this.FILEPICKER_TYPE_CUSTOM:break;case this.FILEPICKER_TYPE_COPY:a.text(o);break;case this.FILEPICKER_TYPE_MOVE:a.text(i);break;case this.FILEPICKER_TYPE_COPY_MOVE:a.eq(0).text(o),a.eq(1).text(i)}}},dt=ut,At=(st=document,lt=u.j8,ct=st.getElementsByTagName("head")[0].getAttribute("data-requesttoken"),{getToken:function(){return ct},setToken:function(t){lt("csrf-token-update",{token:ct=t})}}),pt=At.getToken,ft=At.setToken,ht=function t(e,n){var o,i,a="";if(this.typelessListeners=[],this.closed=!1,this.listeners={},n)for(o in n)a+=o+"="+encodeURIComponent(n[o])+"&";if(a+="requesttoken="+encodeURIComponent(pt()),this.useFallBack||"undefined"==typeof EventSource){var r="oc_eventsource_iframe_"+t.iframeCount;t.fallBackSources[t.iframeCount]=this,this.iframe=c()("<iframe></iframe>"),this.iframe.attr("id",r),this.iframe.hide(),i="&",-1===e.indexOf("?")&&(i="?"),this.iframe.attr("src",e+i+"fallback=true&fallback_id="+t.iframeCount+"&"+a),c()("body").append(this.iframe),this.useFallBack=!0,t.iframeCount++}else i="&",-1===e.indexOf("?")&&(i="?"),this.source=new EventSource(e+i+a),this.source.onmessage=function(t){for(var e=0;e<this.typelessListeners.length;e++)this.typelessListeners[e](JSON.parse(t.data))}.bind(this);this.listen("__internal__",function(t){"close"===t&&this.close()}.bind(this))};ht.fallBackSources=[],ht.iframeCount=0,ht.fallBackCallBack=function(t,e,n){ht.fallBackSources[t].fallBackCallBack(e,n)},ht.prototype={typelessListeners:[],iframe:null,listeners:{},useFallBack:!1,fallBackCallBack:function(t,e){var n;if(!this.closed)if(t){if(void 0!==this.listeners.done)for(n=0;n<this.listeners[t].length;n++)this.listeners[t][n](e)}else for(n=0;n<this.typelessListeners.length;n++)this.typelessListeners[n](e)},lastLength:0,listen:function(t,e){e&&e.call&&(t?this.useFallBack?(this.listeners[t]||(this.listeners[t]=[]),this.listeners[t].push(e)):this.source.addEventListener(t,(function(t){void 0!==t.data?e(JSON.parse(t.data)):e("")}),!1):this.typelessListeners.push(e))},close:function(){this.closed=!0,void 0!==this.source&&this.source.close()}};var mt=ht,gt=i(42515),vt=null,Ct=null,bt=function(t){if(vt){var e=vt;vt.trigger(new(c().Event)("beforeHide")),vt.slideUp(50,(function(){e.trigger(new(c().Event)("afterHide")),t&&t.apply(this,arguments)}))}c()(".menutoggle").attr("aria-expanded",!1),Ct&&Ct.attr("aria-expanded",!1),c()(".openedMenu").removeClass("openedMenu"),vt=null,Ct=null},wt=!!window._oc_isadmin,yt=i(27856),xt=i.n(yt),kt=i(86834),Pt=i.n(kt),Et=i(46488),Bt=i.n(Et),Ot=i(95573),_t=i.n(Ot);window._oc_l10n_registry_translations=window._oc_l10n_registry_translations||{},window._oc_l10n_registry_plural_functions=window._oc_l10n_registry_plural_functions||{};var Dt=function(t){return void 0!==window._oc_l10n_registry_translations[t]&&void 0!==window._oc_l10n_registry_plural_functions[t]},Tt=function(t){return{translations:window._oc_l10n_registry_translations[t]||{},pluralFunction:window._oc_l10n_registry_plural_functions[t]}};function jt(t){return jt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},jt(t)}var It={load:function(t,e){if(Dt(t)||"en"===Wt.getLocale()){var n=c().Deferred(),o=n.promise();return o.then(e),n.resolve(),o}var i=this,a=(0,d.generateFilePath)(t,"l10n",Wt.getLocale()+".json");return c().get(a).then((function(e){e.translations&&i.register(t,e.translations,e.pluralForm)})).then(e)},register:function(t,e){var n,o,i;n=t,o=e,i=this._getPlural,Dt(n)?function(t,e,n){window._oc_l10n_registry_translations[t]=Object.assign(window._oc_l10n_registry_translations[t],e),window._oc_l10n_registry_plural_functions[t]=n}(n,o,i):function(t,e,n){window._oc_l10n_registry_translations[t]=e,window._oc_l10n_registry_plural_functions[t]=n}(n,o,i)},_unregister:function(t){delete window._oc_l10n_registry_translations[t],delete window._oc_l10n_registry_plural_functions[t]},translate:function(t,e,n,o,i){var a=i||{};f.ZP.defaults(a,{escape:!0,sanitize:!0});var r=a.sanitize?xt().sanitize:Bt(),s=a.escape?_t():Bt(),l=e,c=Tt(t).translations[e];return void 0!==c&&(l=c),"object"===jt(n)||void 0!==o?r(function(t,e,n){return t.replace(/%n/g,n).replace(/{([^{}]*)}/g,(function(t,n){var o=e[n];return r("string"==typeof o||"number"==typeof o?s(o):t)}))}(l,n,o)):r(l)},translatePlural:function(t,e,n,o,i,a){var r="_"+e+"_::_"+n+"_",s=Tt(t),l=s.translations[r];if(void 0!==l){var u=l;if(c().isArray(u)){var d=s.pluralFunction(o);return this.translate(t,u[d],i,o,a)}}return 1===o?this.translate(t,e,i,o,a):this.translate(t,n,i,o,a)},_getPlural:function(t){var e=Wt.getLanguage();if("pt-BR"===e&&(e="xbr"),void 0===e||""===e)return 1===t?0:1;switch(e.length>3&&(e=e.substring(0,e.lastIndexOf("-"))),e){case"az":case"bo":case"dz":case"id":case"ja":case"jv":case"ka":case"km":case"kn":case"ko":case"ms":case"th":case"tr":case"vi":case"zh":default:return 0;case"af":case"bn":case"bg":case"ca":case"da":case"de":case"el":case"en":case"eo":case"es":case"et":case"eu":case"fa":case"fi":case"fo":case"fur":case"fy":case"gl":case"gu":case"ha":case"he":case"hu":case"is":case"it":case"ku":case"lb":case"ml":case"mn":case"mr":case"nah":case"nb":case"ne":case"nl":case"nn":case"no":case"oc":case"om":case"or":case"pa":case"pap":case"ps":case"pt":case"so":case"sq":case"sv":case"sw":case"ta":case"te":case"tk":case"ur":case"zu":return 1===t?0:1;case"am":case"bh":case"fil":case"fr":case"gun":case"hi":case"hy":case"ln":case"mg":case"nso":case"xbr":case"ti":case"wa":return 0===t||1===t?0:1;case"be":case"bs":case"hr":case"ru":case"sh":case"sr":case"uk":return t%10==1&&t%100!=11?0:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?1:2;case"cs":case"sk":return 1===t?0:t>=2&&t<=4?1:2;case"ga":return 1===t?0:2===t?1:2;case"lt":return t%10==1&&t%100!=11?0:t%10>=2&&(t%100<10||t%100>=20)?1:2;case"sl":return t%100==1?0:t%100==2?1:t%100==3||t%100==4?2:3;case"mk":return t%10==1?0:1;case"mt":return 1===t?0:0===t||t%100>1&&t%100<11?1:t%100>10&&t%100<20?2:3;case"lv":return 0===t?0:t%10==1&&t%100!=11?1:2;case"pl":return 1===t?0:t%10>=2&&t%10<=4&&(t%100<12||t%100>14)?1:2;case"cy":return 1===t?0:2===t?1:8===t||11===t?2:3;case"ro":return 1===t?0:0===t||t%100>0&&t%100<20?1:2;case"ar":return 0===t?0:1===t?1:2===t?2:t%100>=3&&t%100<=10?3:t%100>=11&&t%100<=99?4:5}}},zt=It;Pt().registerHelper("t",(function(t,e){return It.translate(t,e)}));var St=i(31352),Nt={startSaving:function(e){this.startAction(e,t("core","Saving …"))},startAction:function(t,e){c()(t).text(e).removeClass("success").removeClass("error").stop(!0,!0).show()},finishedSaving:function(t,e){this.finishedAction(t,e)},finishedAction:function(t,e){"success"===e.status?this.finishedSuccess(t,e.data.message):this.finishedError(t,e.data.message)},finishedSuccess:function(t,e){c()(t).text(e).addClass("success").removeClass("error").stop(!0,!0).delay(3e3).fadeOut(900).show()},finishedError:function(t,e){c()(t).text(e).addClass("error").removeClass("success").show()}},Ut=i(30381),Mt=i.n(Ut),Lt={callback:null,pageLoadTime:null,init:function(){c()(".password-confirm-required").on("click",f.ZP.bind(this.requirePasswordConfirmation,this)),this.pageLoadTime=Mt().now()},requiresPasswordConfirmation:function(){var t=this.pageLoadTime-1e3*window.nc_pageLoad,e=Mt().now()-(t+1e3*window.nc_lastLogin);return window.backendAllowsPasswordConfirmation&&e>18e5},requirePasswordConfirmation:function(e,n,o){n=void 0!==n?n:{};var i={title:t("core","Authentication required"),text:t("core","This action requires you to confirm your password"),confirm:t("core","Confirm"),label:t("core","Password"),error:""},a=f.ZP.extend(i,n),r=this;this.requiresPasswordConfirmation()&&Wt.dialogs.prompt(a.text,a.title,(function(t,e){t&&""!==e?r._confirmPassword(e,a):f.ZP.isFunction(o)&&o()}),!0,a.label,!0).then((function(){var t=c()(".oc-dialog:visible");if(t.find(".ui-icon").remove(),t.addClass("password-confirmation"),""!==a.error){var e=c()("<p></p>").addClass("msg warning").text(a.error);t.find(".oc-dialog-content").append(e)}t.find(".oc-dialog-buttonrow").addClass("aside");var n=t.find("button");n.eq(0).hide(),n.eq(1).text(a.confirm)})),this.callback=e},_confirmPassword:function(e,n){var o=this;c().ajax({url:(0,d.generateUrl)("/login/confirm"),data:{password:e},type:"POST",success:function(t){window.nc_lastLogin=t.lastLogin,f.ZP.isFunction(o.callback)&&o.callback()},error:function(){n.error=t("core","Failed to authenticate, try again"),Wt.PasswordConfirmation.requirePasswordConfirmation(o.callback,n)}})}},Ft=window._theme||{},Rt={_handlers:[],_pushState:function(t,e,n){var o;if(o="string"==typeof t?t:Wt.buildQueryString(t),window.history.pushState){if(e=e||location.pathname+"?"+o,navigator.userAgent.toLowerCase().indexOf("firefox")>-1&&parseInt(navigator.userAgent.split("/").pop())<51)for(var i,a=document.querySelectorAll('[fill^="url(#"], [stroke^="url(#"], [filter^="url(#invert"]'),r=0,s=a.length;r<s;r++)(i=a[r]).style.fill=i.style.fill,i.style.stroke=i.style.stroke,i.removeAttribute("filter"),i.setAttribute("filter","url(#invert)");n?window.history.replaceState(t,"",e):window.history.pushState(t,"",e)}else window.location.hash="?"+o,this._cancelPop=!0},pushState:function(t,e){this._pushState(t,e,!1)},replaceState:function(t,e){this._pushState(t,e,!0)},addOnPopStateHandler:function(t){this._handlers.push(t)},_parseHashQuery:function(){var t=window.location.hash,e=t.indexOf("?");return e>=0?t.substr(e+1):t.length?t.substr(1):""},_decodeQuery:function(t){return t.replace(/\+/g," ")},parseUrlQuery:function(){var t,e=this._parseHashQuery();return e&&(t=Wt.parseQueryString(this._decodeQuery(e))),(t=f.ZP.extend(t||{},Wt.parseQueryString(this._decodeQuery(location.search))))||{}},_onPopState:function(t){var e;if(this._cancelPop)this._cancelPop=!1;else if(this._handlers.length){e=t&&t.state,f.ZP.isString(e)?e=Wt.parseQueryString(e):e||(e=this.parseUrlQuery()||{});for(var n=0;n<this._handlers.length;n++)this._handlers[n](e)}}};function Qt(t){for(var e,n=[],o=0,i=-1,a=0;o<t.length;){e=t.charAt(o);var r=!a&&"."===e||e>="0"&&e<="9";r!==a&&(n[++i]="",a=r),n[i]+=e,o++}return n}var Gt={History:Rt,humanFileSize:i(91770).sS,computerFileSize:function(t){if("string"!=typeof t)return null;var e=t.toLowerCase().trim(),n=null,o=e.match(/^[\s+]?([0-9]*)(\.([0-9]+))?( +)?([kmgtp]?b?)$/i);return null===o?null:(n=parseFloat(e),isFinite(n)?(o[5]&&(n*={b:1,k:1024,kb:1024,mb:1048576,m:1048576,gb:1073741824,g:1073741824,tb:1099511627776,t:1099511627776,pb:0x4000000000000,p:0x4000000000000}[o[5]]),n=Math.round(n)):null)},formatDate:function(t,e){return void 0===window.TESTING&&console.warn("OC.Util.formatDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment"),e=e||"LLL",Mt()(t).format(e)},relativeModifiedDate:function(e){void 0===window.TESTING&&console.warn("OC.Util.relativeModifiedDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment");var n=Mt()().diff(Mt()(e));return n>=0&&n<45e3?t("core","seconds ago"):Mt()(e).fromNow()},getScrollBarWidth:function(){if(this._scrollBarWidth)return this._scrollBarWidth;var t=document.createElement("p");t.style.width="100%",t.style.height="200px";var e=document.createElement("div");e.style.position="absolute",e.style.top="0px",e.style.left="0px",e.style.visibility="hidden",e.style.width="200px",e.style.height="150px",e.style.overflow="hidden",e.appendChild(t),document.body.appendChild(e);var n=t.offsetWidth;e.style.overflow="scroll";var o=t.offsetWidth;return n===o&&(o=e.clientWidth),document.body.removeChild(e),this._scrollBarWidth=n-o,this._scrollBarWidth},stripTime:function(t){return new Date(t.getFullYear(),t.getMonth(),t.getDate())},naturalSortCompare:function(t,e){var n,o=Qt(t),i=Qt(e);for(n=0;o[n]&&i[n];n++)if(o[n]!==i[n]){var a=Number(o[n]),r=Number(i[n]);return a==o[n]&&r==i[n]?a-r:o[n].localeCompare(i[n],Wt.getLanguage())}return o.length-i.length},waitFor:function(t,e){!function n(){!0!==t()&&setTimeout(n,e)}()},isCookieSetToValue:function(t,e){for(var n=document.cookie.split(";"),o=0;o<n.length;o++){var i=n[o].split("=");if(i[0].trim()===t&&i[1].trim()===e)return!0}return!1}},Ht=window._oc_debug,Kt=window._oc_webroot;if(void 0===Kt){var Zt=(Kt=location.pathname).indexOf("/index.php/");Kt=-1!==Zt?Kt.substr(0,Zt):Kt.substr(0,Kt.lastIndexOf("/"))}var Yt,qt=Kt,Wt={coreApps:["","admin","log","core/search","core","3rdparty"],menuSpeed:50,PERMISSION_ALL:31,PERMISSION_CREATE:4,PERMISSION_DELETE:8,PERMISSION_NONE:0,PERMISSION_READ:1,PERMISSION_SHARE:16,PERMISSION_UPDATE:2,TAG_FAVORITE:"_$!<Favorite>!$_",fileIsBlacklisted:function(t){return!!t.match(R.blacklist_files_regex)},addScript:function(t,e,n){var o;console.warn("OC.addScript is deprecated, use OCP.Loader.loadScript instead");var i=(0,d.generateFilePath)(t,"js",e+".js");return A[i]?n&&n():(o=c().Deferred(),c().getScript(i,(function(){return o.resolve()})),A[i]=o),A[i]},addStyle:function(t,e){console.warn("OC.addStyle is deprecated, use OCP.Loader.loadStylesheet instead");var n=(0,d.generateFilePath)(t,"css",e+".css");-1===p.indexOf(n)&&(p.push(n),document.createStyleSheet?document.createStyleSheet(n):(e=c()('<link rel="stylesheet" type="text/css" href="'+n+'"/>'),c()("head").append(e)))},Apps:C,AppConfig:B,appConfig:E,appSettings:function(e){if(console.warn("OC.appSettings is deprecated and will be removed with Nextcloud 18"),void 0===e||void 0===e.appid)throw{name:"MissingParameter",message:"The parameter appid is missing"};var n={scriptName:"settings.php",cache:!0};c().extend(n,e);var o=c()("#appsettings");if(0===o.length)throw{name:"MissingDOMElement",message:'There has be be an element with id "appsettings" for the popup to show.'};var i=c()("#appsettings_popup");if(0===i.length&&(c()("body").prepend('<div class="popup hidden" id="appsettings_popup"></div>'),(i=c()("#appsettings_popup")).addClass(o.hasClass("topright")?"topright":"bottomleft")),i.is(":visible"))i.hide().remove();else{var a=o.hasClass("topright")?"up":"left";c().get((0,d.generateFilePath)(n.appid,"",n.scriptName),(function(e){i.html(e).ready((function(){if(i.prepend('<span class="arrow '+a+'"></span><h2>'+t("core","Settings")+'</h2><a class="close"></a>').show(),i.find(".close").bind("click",(function(){i.remove()})),void 0!==n.loadJS){var e;if(!0===n.loadJS)e="settings.js";else{if("string"!=typeof n.loadJS)throw{name:"InvalidParameter",message:'The "loadJS" parameter must be either boolean or a string.'};e=n.loadJS}n.cache&&c().ajaxSetup({cache:!0}),c().getScript((0,d.generateFilePath)(n.appid,"js",e)).fail((function(t,e,n){throw n}))}})).show()}),"html")}},appswebroots:O,Backbone:L,ContactsMenu:q,config:R,currentUser:V,dialogs:dt,EventSource:mt,getCurrentUser:function(){return{uid:V,displayName:J}},isUserAdmin:function(){return wt},L10N:zt,_ajaxConnectionLostHandler:g,_processAjaxError:function(t){(0!==t.status||"abort"!==t.statusText&&"timeout"!==t.statusText&&!Wt._reloadCalled)&&(f.ZP.contains([302,303,307,401],t.status)&&Wt.currentUser?setTimeout((function(){if(!Wt._userIsNavigatingAway&&!Wt._reloadCalled){var t=0,e=setInterval((function(){m.showUpdate(n("core","Problem loading page, reloading in %n second","Problem loading page, reloading in %n seconds",5-t)),t>=5&&(clearInterval(e),Wt.reload()),t++}),1e3);Wt._reloadCalled=!0}}),100):0===t.status&&setTimeout((function(){Wt._userIsNavigatingAway||Wt._reloadCalled||Wt._ajaxConnectionLostHandler()}),100))},registerXHRForErrorProcessing:function(t){t.addEventListener&&(t.addEventListener("load",(function(){4===t.readyState&&(t.status>=200&&t.status<300||304===t.status||c()(document).trigger(new(c().Event)("ajaxError"),t))})),t.addEventListener("error",(function(){c()(document).trigger(new(c().Event)("ajaxError"),t)})))},getCapabilities:function(){return console.warn("OC.getCapabilities is deprecated and will be removed in Nextcloud 21. See @nextcloud/capabilities"),(0,gt.getCapabilities)()},hideMenus:bt,registerMenu:function(t,e,n,o){e.addClass("menu");var i="A"===t.prop("tagName")||"BUTTON"===t.prop("tagName");t.on(i?"click.menu":"click.menu keyup.menu",(function(i){i.preventDefault(),i.key&&"Enter"!==i.key||(e.is(vt)?bt():(vt&&bt(),!0===o&&e.parent().addClass("openedMenu"),t.attr("aria-expanded",!0),e.slideToggle(50,n),vt=e,Ct=t))}))},showMenu:function(t,e,n){e.is(vt)||(bt(),vt=e,Ct=t,e.trigger(new(c().Event)("beforeShow")),e.show(),e.trigger(new(c().Event)("afterShow")),f.ZP.isFunction(n)&&n())},unregisterMenu:function(t,e){e.is(vt)&&bt(),t.off("click.menu").removeClass("menutoggle"),e.removeClass("menu")},basename:F.EZ,encodePath:F.Ec,dirname:F.XX,isSamePath:F.Mg,joinPaths:F.RQ,getHost:function(){return window.location.host},getHostName:function(){return window.location.hostname},getPort:function(){return window.location.port},getProtocol:function(){return window.location.protocol.split(":")[0]},getCanonicalLocale:St.aj,getLocale:function(){var t;return null!==(t=c()("html").data("locale"))&&void 0!==t?t:"en"},getLanguage:function(){return c()("html").prop("lang")},addTranslations:zt.load,buildQueryString:function(t){return t?c().map(t,(function(t,e){var n=encodeURIComponent(e);return null!=t&&(n+="="+encodeURIComponent(t)),n})).join("&"):""},parseQueryString:function(t){var e,n,o,i={};if(!t)return null;(e=t.indexOf("?"))>=0&&(t=t.substr(e+1));for(var a=t.replace(/\+/g,"%20").split("&"),r=0;r<a.length;r++){var s=a[r];(n=(e=s.indexOf("="))>=0?[s.substr(0,e),s.substr(e+1)]:[s]).length&&(o=decodeURIComponent(n[0]))&&(i[o]=n.length>1?decodeURIComponent(n[1]):null)}return i},msg:Nt,Notification:m,PasswordConfirmation:Lt,Plugins:{_plugins:{},register:function(t,e){var n=this._plugins[t];n||(n=this._plugins[t]=[]),n.push(e)},getPlugins:function(t){return this._plugins[t]||[]},attach:function(t,e,n){for(var o=this.getPlugins(t),i=0;i<o.length;i++)o[i].attach&&o[i].attach(e,n)},detach:function(t,e,n){for(var o=this.getPlugins(t),i=0;i<o.length;i++)o[i].detach&&o[i].detach(e,n)}},theme:Ft,Util:Gt,debug:Ht,filePath:d.generateFilePath,generateUrl:d.generateUrl,get:(Yt=window,function(t){for(var e=t.split("."),n=e.pop(),o=0;o<e.length;o++)if(!(Yt=Yt[e[o]]))return!1;return Yt[n]}),set:function(t){return function(e,n){for(var o=e.split("."),i=o.pop(),a=0;a<o.length;a++)t[o[a]]||(t[o[a]]={}),t=t[o[a]];return t[i]=n,n}}(window),getRootPath:d.getRootUrl,imagePath:d.imagePath,redirect:function(t){window.location=t},reload:function(){window.location.reload()},requestToken:pt(),linkTo:d.linkTo,linkToOCS:function(t,e){return(0,d.generateOcsUrl)(t,{},{ocsVersion:e||1})+"/"},linkToRemote:d.generateRemoteUrl,linkToRemoteBase:function(t){return(0,d.getRootUrl)()+"/remote.php/"+t},webroot:qt};(0,u.Ld)("csrf-token-update",(function(t){OC.requestToken=t.token,console.info("OC.requestToken changed",t.token)}));var Jt=i(79954),Vt=i(45994);function Xt(t,e,n,o,i,a,r){try{var s=t[a](r),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(o,i)}function $t(t){return function(){var e=this,n=arguments;return new Promise((function(o,i){var a=t.apply(e,n);function r(t){Xt(a,o,i,r,s,"next",t)}function s(t){Xt(a,o,i,r,s,"throw",t)}r(void 0)}))}}var te=null,ee=function(){var t=$t(regeneratorRuntime.mark((function t(){var e,n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=(0,d.generateUrl)("/csrftoken"),t.next=3,c().get(e);case 3:return n=t.sent,t.abrupt("return",n.token);case 5:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),ne=function(){var t=$t(regeneratorRuntime.mark((function t(){var e;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,ee();case 3:e=t.sent,ft(e),t.next=10;break;case 7:t.prev=7,t.t0=t.catch(0),console.error("session heartbeat failed",t.t0);case 10:case"end":return t.stop()}}),t,null,[[0,7]])})));return function(){return t.apply(this,arguments)}}(),oe=function(){var t=setInterval(ne,1e3*function(){var t=NaN;return te.session_lifetime&&(t=Math.floor(te.session_lifetime/2)),Math.min(86400,Math.max(60,isNaN(t)?900:t))}());return console.info("session heartbeat polling started"),t},ie=i(20144),ae=i(85750),re=i.n(ae),se={name:"ContactsMenu",components:{Contacts:i(12050).Z,NcHeaderMenu:re()},data:function(){return{contactsMenu:null}},mounted:function(){this.contactsMenu=new Wt.ContactsMenu({el:"#contactsmenu-menu"})},methods:{handleOpen:function(){var t;null===(t=this.contactsMenu)||void 0===t||t.loadContacts()}}},le=i(93379),ce=i.n(le),ue=i(7795),de=i.n(ue),Ae=i(90569),pe=i.n(Ae),fe=i(3565),he=i.n(fe),me=i(19216),ge=i.n(me),ve=i(44589),Ce=i.n(ve),be=i(23287),we={};we.styleTagTransform=Ce(),we.setAttributes=he(),we.insert=pe().bind(null,"head"),we.domAPI=de(),we.insertStyleElement=ge(),ce()(be.Z,we),be.Z&&be.Z.locals&&be.Z.locals;var ye=i(51900),xe=(0,ye.Z)(se,(function(){var t=this,e=t._self._c;return e("NcHeaderMenu",{attrs:{id:"contactsmenu","aria-label":t.t("core","Search contacts")},on:{open:t.handleOpen},scopedSlots:t._u([{key:"trigger",fn:function(){return[e("Contacts",{attrs:{size:20}})]},proxy:!0}])},[t._v(" "),e("div",{attrs:{id:"contactsmenu-menu"}})])}),[],!1,null,"e32bb484",null).exports,ke=i(12945),Pe=i.n(ke),Ee=i(76212),Be=i.n(Ee),Oe={name:"AppMenu",components:{NcActions:Pe(),NcActionLink:Be()},data:function(){return{apps:(0,Jt.j)("core","apps",{}),appLimit:0,observer:null}},computed:{appList:function(){return Object.values(this.apps)},mainAppList:function(){return this.appList.slice(0,this.appLimit)},popoverAppList:function(){return this.appList.slice(this.appLimit)},appLabel:function(){return function(e){return e.name+(e.active?" ("+t("core","Currently open")+")":"")+(e.unread>0?" ("+n("core","{count} notification","{count} notifications",e.unread,{count:e.unread})+")":"")}}},mounted:function(){this.observer=new ResizeObserver(this.resize),this.observer.observe(this.$el),this.resize(),(0,u.Ld)("nextcloud:app-menu.refresh",this.setApps)},beforeDestroy:function(){this.observer.disconnect(),(0,u.r1)("nextcloud:app-menu.refresh",this.setApps)},methods:{setNavigationCounter:function(t,e){this.$set(this.apps[t],"unread",e)},setApps:function(t){var e=t.apps;this.apps=e},resize:function(){var t=this.$el.offsetWidth,e=Math.floor(t/50)-1;1==this.appList.length-e&&e--,e<1&&(e=0),this.appLimit=e}}},_e=Oe,De=i(9572),Te={};Te.styleTagTransform=Ce(),Te.setAttributes=he(),Te.insert=pe().bind(null,"head"),Te.domAPI=de(),Te.insertStyleElement=ge(),ce()(De.Z,Te),De.Z&&De.Z.locals&&De.Z.locals;var je=(0,ye.Z)(_e,(function(){var t=this,e=t._self._c;return e("nav",{staticClass:"app-menu"},[e("ul",{staticClass:"app-menu-main"},t._l(t.mainAppList,(function(n){return e("li",{key:n.id,staticClass:"app-menu-entry",class:{"app-menu-entry__active":n.active},attrs:{"data-app-id":n.id}},[e("a",{class:{"has-unread":n.unread>0},attrs:{href:n.href,"aria-label":t.appLabel(n),title:n.name,"aria-current":!!n.active&&"page",target:n.target?"_blank":void 0,rel:n.target?"noopener noreferrer":void 0}},[e("img",{attrs:{src:n.icon,alt:""}}),t._v(" "),e("div",{staticClass:"app-menu-entry--label"},[t._v("\n\t\t\t\t\t"+t._s(n.name)+"\n\t\t\t\t\t"),n.unread>0?e("span",{staticClass:"hidden-visually unread-counter"},[t._v(t._s(n.unread))]):t._e()])])])})),0),t._v(" "),e("NcActions",{staticClass:"app-menu-more",attrs:{"aria-label":t.t("core","More apps")}},t._l(t.popoverAppList,(function(n){return e("NcActionLink",{key:n.id,staticClass:"app-menu-popover-entry",attrs:{"aria-label":t.appLabel(n),"aria-current":!!n.active&&"page",href:n.href},scopedSlots:t._u([{key:"icon",fn:function(){return[e("div",{staticClass:"app-icon",class:{"has-unread":n.unread>0}},[e("img",{attrs:{src:n.icon,alt:""}})])]},proxy:!0}],null,!0)},[t._v("\n\t\t\t"+t._s(n.name)+"\n\t\t\t"),n.unread>0?e("span",{staticClass:"hidden-visually unread-counter"},[t._v(t._s(n.unread))]):t._e()])})),1)],1)}),[],!1,null,"44a795f6",null).exports,Ie=i(75925),ze=i.n(Ie),Se=i(64192),Ne=i.n(Se),Ue=(0,Jt.j)("core","versionHash",""),Me={name:"UserMenuEntry",components:{NcLoadingIcon:Ne()},props:{id:{type:String,required:!0},name:{type:String,required:!0},href:{type:String,required:!0},active:{type:Boolean,required:!0},icon:{type:String,required:!0}},data:function(){return{loading:!1}},computed:{cachedIcon:function(){return"".concat(this.icon,"?v=").concat(Ue)}},methods:{handleClick:function(){this.loading=!0}}},Le=i(88951),Fe={};Fe.styleTagTransform=Ce(),Fe.setAttributes=he(),Fe.insert=pe().bind(null,"head"),Fe.domAPI=de(),Fe.insertStyleElement=ge(),ce()(Le.Z,Fe),Le.Z&&Le.Z.locals&&Le.Z.locals;var Re=(0,ye.Z)(Me,(function(){var t=this,e=t._self._c;return e("li",{staticClass:"menu-entry",attrs:{id:t.id}},[t.href?e("a",{class:{active:t.active},attrs:{href:t.href},on:{click:function(e){return e.ctrlKey||e.shiftKey||e.altKey||e.metaKey?null:t.handleClick.apply(null,arguments)}}},[t.loading?e("NcLoadingIcon",{staticClass:"menu-entry__loading-icon",attrs:{size:18}}):e("img",{attrs:{src:t.cachedIcon,alt:""}}),t._v("\n\t\t"+t._s(t.name)+"\n\t")],1):e("button",[e("img",{attrs:{src:t.cachedIcon,alt:""}}),t._v("\n\t\t"+t._s(t.name)+"\n\t")])])}),[],!1,null,"6e59d13c",null),Qe=Re.exports,Ge=(0,Jt.j)("core","settingsNavEntries",[]),He={name:"UserMenu",components:{NcAvatar:ze(),NcHeaderMenu:re(),UserMenuEntry:Qe},data:function(){var t;return{settingsNavEntries:Ge,userId:null===(t=(0,Vt.ts)())||void 0===t?void 0:t.uid}},mounted:function(){(0,u.j8)("core:user-menu:mounted")}},Ke=i(71445),Ze={};Ze.styleTagTransform=Ce(),Ze.setAttributes=he(),Ze.insert=pe().bind(null,"head"),Ze.domAPI=de(),Ze.insertStyleElement=ge(),ce()(Ke.Z,Ze),Ke.Z&&Ke.Z.locals&&Ke.Z.locals;var Ye=(0,ye.Z)(He,(function(){var t=this,e=t._self._c;return e("NcHeaderMenu",{staticClass:"user-menu",attrs:{id:"user-menu","aria-label":t.t("core","Open settings menu")},scopedSlots:t._u([{key:"trigger",fn:function(){return[e("NcAvatar",{staticClass:"user-menu__avatar",attrs:{"disable-menu":!0,"disable-tooltip":!0,user:t.userId}})]},proxy:!0}])},[t._v(" "),e("nav",{staticClass:"user-menu__nav",attrs:{"aria-label":t.t("core","Settings menu")}},[e("ul",t._l(t.settingsNavEntries,(function(n){return e("UserMenuEntry",t._b({key:n.id},"UserMenuEntry",n,!1))})),1)])])}),[],!1,null,"6a818bbc",null).exports,qe={zh:"zh-cn",zh_Hans:"zh-cn",zh_Hans_CN:"zh-cn",zh_Hans_HK:"zh-cn",zh_Hans_MO:"zh-cn",zh_Hans_SG:"zh-cn",zh_Hant:"zh-hk",zh_Hant_HK:"zh-hk",zh_Hant_MO:"zh-mo",zh_Hant_TW:"zh-tw"},We=Wt.getLocale();Object.prototype.hasOwnProperty.call(qe,We)&&(We=qe[We]),Mt().locale(We);var Je,Ve=function(){var t;if(c()(window).on("unload.main",(function(){Wt._unloadCalled=!0})),c()(window).on("beforeunload.main",(function(){setTimeout((function(){Wt._userIsNavigatingAway=!0,setTimeout((function(){Wt._unloadCalled||(Wt._userIsNavigatingAway=!1)}),1e4)}),1)})),c()(document).on("ajaxError.main",(function(t,e,n){n&&n.allowAuthErrors||Wt._processAjaxError(e)})),function(){if(function(){try{te=(0,Jt.j)("core","config")}catch(t){te=Wt.config}}(),function(){if(te.auto_logout&&(0,Vt.ts)()){var t=Date.now();window.addEventListener("mousemove",(function(e){t=Date.now(),localStorage.setItem("lastActive",t)})),window.addEventListener("touchstart",(function(e){t=Date.now(),localStorage.setItem("lastActive",t)})),window.addEventListener("storage",(function(e){"lastActive"===e.key&&(t=e.newValue)})),setInterval((function(){var e=Date.now()-1e3*te.session_lifetime;if(t<e){console.info("Inactivity timout reached, logging out");var n=(0,d.generateUrl)("/logout")+"?requesttoken="+encodeURIComponent(pt());window.location=n}}),1e3)}}(),void 0===te.session_keepalive||te.session_keepalive){var t=oe();window.addEventListener("online",$t(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return console.info("browser is online again, resuming heartbeat"),t=oe(),e.prev=2,e.next=5,ne();case 5:console.info("session token successfully updated after resuming network"),(0,u.j8)("networkOnline",{success:!0}),e.next=13;break;case 9:e.prev=9,e.t0=e.catch(2),console.error("could not update session token after resuming network",e.t0),(0,u.j8)("networkOnline",{success:!1});case 13:case"end":return e.stop()}}),e,null,[[2,9]])})))),window.addEventListener("offline",(function(){console.info("browser is offline, stopping heartbeat"),(0,u.j8)("networkOffline",{}),clearInterval(t),console.info("session heartbeat polling stopped")}))}else console.info("session heartbeat disabled")}(),Wt.registerMenu(c()("#expand"),c()("#expanddiv"),!1,!0),c()(document).on("mouseup.closemenus",(function(t){var e=c()(t.target);if(e.closest(".menu").length||e.closest(".menutoggle").length)return!1;Wt.hideMenus()})),function(){ie.ZP.mixin({methods:{t:St.Iu,n:St.uN}});var t=document.getElementById("header-left__appmenu");if(t){var e=new(ie.ZP.extend(je))({}).$mount(t);Object.assign(OC,{setNavigationCounter:function(t,n){e.setNavigationCounter(t,n)}})}}(),(t=document.getElementById("user-menu"))&&new ie.ZP({el:t,render:function(t){return t(Ye)}}),function(){var t=document.getElementById("contactsmenu");t&&new ie.ZP({el:t,render:function(t){return t(xe)}})}(),c()("#app-navigation").length&&!c()("html").hasClass("lte9")&&!c()("#app-content").hasClass("no-snapper")){var e=new Snap({element:document.getElementById("app-content"),disable:"right",maxPosition:300,minDragDistance:100});c()("#app-content").prepend('<div id="app-navigation-toggle" class="icon-menu" style="display:none" tabindex="0"></div>');var n=!1;e.on("animating",(function(){n=!0})),e.on("animated",(function(){n=!1})),e.on("start",(function(){n=!0})),e.on("end",(function(){n=!1}));var o=e.open,i=e.close,a=function(){n||"closed"!==e.state().state||o("left")},r=function(){n||"closed"===e.state().state||i()};window.TESTING||(e.open=function(){f.ZP.defer(a)},e.close=function(){f.ZP.defer(r)}),c()("#app-navigation-toggle").click((function(t){"left"!==e.state().state&&e.open()})),c()("#app-navigation-toggle").keypress((function(t){"left"===e.state().state?e.close():e.open()})),c()("#app-navigation").delegate("a, :button","click",(function(t){var n=c()(t.target);n.is(".app-navigation-noclose")||n.closest(".app-navigation-noclose").length||n.is(".app-navigation-entry-utils-menu-button")||n.closest(".app-navigation-entry-utils-menu-button").length||n.is(".add-new")||n.closest(".add-new").length||n.is("#app-settings")||n.closest("#app-settings").length||e.close()}));var s=!1,l=!0,A=!1;Wt.allowNavigationBarSlideGesture=function(){l=!0,A&&(e.enable(),s=!0,A=!1)},Wt.disallowNavigationBarSlideGesture=function(){l=!1,s&&(e.disable(!0),s=!1,A=!0)};var p=function(){c()(window).width()>1024?(e.close(),e.disable(),s=!1,A=!1):l?(e.enable(),s=!0,A=!1):A=!0};c()(window).resize(f.ZP.debounce(p,250)),p()}setInterval((function(){c()(".live-relative-timestamp").each((function(){var t=parseInt(c()(this).attr("data-timestamp"),10);c()(this).text(Mt()(t).fromNow())}))}),3e4),Lt.init()},Xe=(i(49226),i(41704),i(78312),i(22634),i(3682));c().prototype.tooltip=(Je=c().prototype.tooltip,function(t){try{return Je.call(this,t)}catch(e){if(e instanceof TypeError&&"destroy"===t)return void 0===window.TESTING&&console.error("Deprecated call $.tooltip('destroy') has been deprecated and should be removed"),Je.call(this,"dispose");if(e instanceof TypeError&&"fixTitle"===t)return void 0===window.TESTING&&console.error("Deprecated call $.tooltip('fixTitle') has been deprecated and should be removed"),Je.call(this,"_fixTitle")}});var $e=i(42152),tn=i.n($e),en=i(99560),nn=i.n(en),on=(i(18553),i(34140),i(75693),i(99205),i(38554),/(\s|^)(https?:\/\/)((?:[-A-Z0-9+_]+\.)+[-A-Z]+(?:\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*)(\s|$)/gi);function an(t){return this.formatLinksRich(t)}function rn(t){return this.formatLinksPlain(t)}function sn(t){return t.replace(on,(function(t,e,n,o,i){var a=o;return n?"http://"===n&&(a=n+o):n="https://",e+'<a class="external" target="_blank" rel="noopener noreferrer" href="'+n+o+'">'+a+"</a>"+i}))}function ln(t){var e=c()("<div></div>").html(t);return e.find("a").each((function(){var t=c()(this);t.html(t.attr("href"))})),e.html()}function cn(e){var n=(e=e||{}).dismiss||{};c().ajax({type:"GET",url:e.url||(0,d.generateOcsUrl)("core/whatsnew?format=json"),success:e.success||function(e,o,i){!function(e,n,o,i){if(console.debug("querying Whats New data was successful: "+n),console.debug(e),200===o.status){var a,r,s,l,c=document.createElement("div");c.classList.add("popovermenu","open","whatsNewPopover","menu-left");var u=document.createElement("ul");for(var d in a=document.createElement("li"),(r=document.createElement("span")).className="menuitem",(s=document.createElement("span")).innerText=t("core","New in")+" "+e.ocs.data.product,s.className="caption",r.appendChild(s),(l=document.createElement("span")).className="icon-close",l.onclick=function(){un(e.ocs.data.version,i)},r.appendChild(l),a.appendChild(r),u.appendChild(a),e.ocs.data.whatsNew.regular){var A=e.ocs.data.whatsNew.regular[d];a=document.createElement("li"),(r=document.createElement("span")).className="menuitem",(l=document.createElement("span")).className="icon-checkmark",r.appendChild(l),(s=document.createElement("p")).innerHTML=f.ZP.escape(A),r.appendChild(s),a.appendChild(r),u.appendChild(a)}f.ZP.isUndefined(e.ocs.data.changelogURL)||(a=document.createElement("li"),(r=document.createElement("a")).href=e.ocs.data.changelogURL,r.rel="noreferrer noopener",r.target="_blank",(l=document.createElement("span")).className="icon-link",r.appendChild(l),(s=document.createElement("span")).innerText=t("core","View changelog"),r.appendChild(s),a.appendChild(r),u.appendChild(a)),c.appendChild(u),document.body.appendChild(c)}}(e,o,i,n)},error:e.error||dn})}function un(t,e){e=e||{},c().ajax({type:"POST",url:e.url||(0,d.generateOcsUrl)("core/whatsnew"),data:{version:encodeURIComponent(t)},success:e.success||An,error:e.error||pn}),c()(".whatsNewPopover").remove()}function dn(t,e,n){console.debug("querying Whats New Data resulted in an error: "+e+n),console.debug(t)}function An(t){}function pn(t){console.debug("dismissing Whats New data resulted in an error: "+t)}var fn,hn,mn,gn,vn={},Cn={},bn={},wn={loadScript:function(t,e){var n=t+e;return Object.prototype.hasOwnProperty.call(Cn,n)?Promise.resolve():(Cn[n]=!0,new Promise((function(n,o){var i=OC.filePath(t,"js",e),a=document.createElement("script");a.src=i,a.setAttribute("nonce",btoa(OC.requestToken)),a.onload=function(){return n()},a.onerror=function(){return o(new Error("Failed to load script from ".concat(i)))},document.head.appendChild(a)})))},loadStylesheet:function(t,e){var n=t+e;return Object.prototype.hasOwnProperty.call(bn,n)?Promise.resolve():(bn[n]=!0,new Promise((function(n,o){var i=OC.filePath(t,"css",e),a=document.createElement("link");a.href=i,a.type="text/css",a.rel="stylesheet",a.onload=function(){return n()},a.onerror=function(){return o(new Error("Failed to load stylesheet from ".concat(i)))},document.head.appendChild(a)})))}},yn={success:function(t,e){return(0,h.s$)(t,e)},warning:function(t,e){return(0,h.K2)(t,e)},error:function(t,e){return(0,h.x2)(t,e)},info:function(t,e){return(0,h.JQ)(t,e)},message:function(t,e){return(0,h.PV)(t,e)}},xn={Accessibility:{disableKeyboardShortcuts:function(){return(0,Jt.j)("theming","shortcutsDisabled",!1)}},AppConfig:a,Collaboration:{registerType:function(t,e){vn[t]=e},trigger:function(t){return vn[t].action()},getTypes:function(){return Object.keys(vn)},getIcon:function(t){return vn[t].typeIconClass||""},getLabel:function(t){return _t()(vn[t].typeString||t)},getLink:function(t,e){return void 0!==vn[t]?vn[t].link(e):""}},Comments:r,InitialState:{loadState:Jt.j},Loader:wn,Toast:yn,WhatsNew:s},kn=function(){void 0===window.TESTING&&console.warn.apply(console,arguments)},Pn=function(t,e,n){(Array.isArray(t)?t:[t]).forEach((function(t){void 0!==window[t]&&delete window[t],Object.defineProperty(window,t,{get:function(){return kn(n?"".concat(t," is deprecated: ").concat(n):"".concat(t," is deprecated")),e()}})}))};window._=f.ZP,Pn(["$","jQuery"],(function(){return c()}),"The global jQuery is deprecated. It will be removed in a later versions without another warning. Please ship your own."),Pn("autosize",(function(){return Xe.Z}),"please ship your own, this will be removed in Nextcloud 20"),Pn("Backbone",(function(){return T()}),"please ship your own, this will be removed in Nextcloud 20"),Pn(["Clipboard","ClipboardJS"],(function(){return tn()}),"please ship your own, this will be removed in Nextcloud 20"),window.dav=j.dav,Pn("Handlebars",(function(){return Pt()}),"please ship your own, this will be removed in Nextcloud 20"),Pn("md5",(function(){return nn()}),"please ship your own, this will be removed in Nextcloud 20"),Pn("moment",(function(){return Mt()}),"please ship your own, this will be removed in Nextcloud 20"),window.OC=Wt,Pn("initCore",(function(){return Ve}),"this is an internal function"),Pn("oc_appswebroots",(function(){return Wt.appswebroots}),"use OC.appswebroots instead, this will be removed in Nextcloud 20"),Pn("oc_config",(function(){return Wt.config}),"use OC.config instead, this will be removed in Nextcloud 20"),Pn("oc_current_user",(function(){return Wt.getCurrentUser().uid}),"use OC.getCurrentUser().uid instead, this will be removed in Nextcloud 20"),Pn("oc_debug",(function(){return Wt.debug}),"use OC.debug instead, this will be removed in Nextcloud 20"),Pn("oc_defaults",(function(){return Wt.theme}),"use OC.theme instead, this will be removed in Nextcloud 20"),Pn("oc_isadmin",Wt.isUserAdmin,"use OC.isUserAdmin() instead, this will be removed in Nextcloud 20"),Pn("oc_requesttoken",(function(){return pt()}),"use OC.requestToken instead, this will be removed in Nextcloud 20"),Pn("oc_webroot",(function(){return Wt.webroot}),"use OC.getRootPath() instead, this will be removed in Nextcloud 20"),Pn("OCDialogs",(function(){return Wt.dialogs}),"use OC.dialogs instead, this will be removed in Nextcloud 20"),window.OCP=xn,window.OCA=et,c().fn.select2=(fn=c().fn.select2,hn="select2",19,mn=fn,gn=function(){return kn("The ".concat(hn," library is deprecated! It will be removed in nextcloud ").concat(19,".")),mn.apply(this,arguments)},Object.assign(gn,mn),gn),window.t=f.ZP.bind(Wt.L10N.translate,Wt.L10N),window.n=f.ZP.bind(Wt.L10N.translatePlural,Wt.L10N),c().fn.avatar=function(t,e,n,o,i,a){var r=function(t){t.imageplaceholder("?"),t.css("background-color","#b9b9b9")};if(void 0!==t&&(t=String(t)),void 0!==a&&(a=String(a)),void 0===e&&(e=this.height()>0?this.height():this.data("size")>0?this.data("size"):64),this.height(e),this.width(e),void 0===t){if(void 0===this.data("user"))return void r(this);t=this.data("user")}t=String(t).replace(/\//g,"");var s,l=this;s=t===Wt.getCurrentUser().uid?Wt.generateUrl("/avatar/{user}/{size}?v={version}",{user:t,size:Math.ceil(e*window.devicePixelRatio),version:oc_userconfig.avatar.version}):Wt.generateUrl("/avatar/{user}/{size}",{user:t,size:Math.ceil(e*window.devicePixelRatio)});var c=new Image;c.onload=function(){l.clearimageplaceholder(),l.append(c),"function"==typeof i&&i()},c.onerror=function(){l.clearimageplaceholder(),void 0!==a?l.imageplaceholder(t,a):r(l),"function"==typeof i&&i()},e<32?l.addClass("icon-loading-small"):l.addClass("icon-loading"),c.width=e,c.height=e,c.src=s,c.alt=""};var En=i(47078);c().fn.contactsMenu=function(e,n,o){if(-1!==[0,4,6].indexOf(n)){var i=this;o.append('<div class="menu popovermenu menu-left hidden contactsmenu-popover"> <ul> <li> <a> <span class="icon-loading-small"></span> </a> </li> </ul></div>');var a=o.find("div.contactsmenu-popover");i.on("click keydown",(function(o){if(nt(o)){if(!a.hasClass("hidden"))return a.addClass("hidden"),void a.hide();a.removeClass("hidden"),a.show(),a.hasClass("loaded")||(a.addClass("loaded"),c().ajax(Wt.generateUrl("/contactsmenu/findOne"),{method:"POST",data:{shareType:n,shareWith:e}}).then((function(e){a.find("ul").find("li").addClass("hidden"),(e.topAction?[e.topAction].concat(e.actions):[{hyperlink:"#",title:t("core","No action available")}]).forEach((function(t){a.find("ul").append(En(t))})),i.trigger("load")}),(function(e){var n;a.find("ul").find("li").addClass("hidden"),n=404===e.status?t("core","No action available"):t("core","Error fetching contact actions"),a.find("ul").append(En({hyperlink:"#",title:n})),i.trigger("loaderror",e)})))}})),c()(document).click((function(t){var e=a.has(t.target).length>0,n=i.has(t.target).length>0;i.each((function(){c()(this).is(t.target)&&(n=!0)})),e||n||(a.addClass("hidden"),a.hide())}))}},c().fn.exists=function(){return this.length>0},c().fn.filterAttr=function(t,e){return this.filter((function(){return c()(this).attr(t)===e}))},c().widget("oc.ocdialog",{options:{width:"auto",height:"auto",closeButton:!0,closeOnEscape:!0,closeCallback:null,modal:!1},_create:function(){var t=this;this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,height:this.element[0].style.height},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this.$dialog=c()('<div class="oc-dialog"></div>').attr({tabIndex:-1,role:"dialog"}).insertBefore(this.element),this.$dialog.append(this.element.detach()),this.element.removeAttr("title").addClass("oc-dialog-content").appendTo(this.$dialog),1===t.element.find("input").length&&t.element.find("input").on("keydown",(function(e){if(nt(e)&&t.$buttonrow){var n=t.$buttonrow.find("button.primary");n&&!n.prop("disabled")&&n.click()}})),this.$dialog.css({display:"inline-block",position:"fixed"}),this.enterCallback=null,c()(document).on("keydown keyup",(function(e){if(e.target===t.$dialog.get(0)||0!==t.$dialog.find(c()(e.target)).length)return 27===e.keyCode&&"keydown"===e.type&&t.options.closeOnEscape?(e.stopImmediatePropagation(),t.close(),!1):13===e.keyCode?(e.stopImmediatePropagation(),null!==t.enterCallback?(t.enterCallback(),e.preventDefault(),!1):"keyup"===e.type&&(e.preventDefault(),!1)):void 0})),this._setOptions(this.options),this._createOverlay()},_init:function(){this.$dialog.focus(),this._trigger("open")},_setOption:function(t,e){var n=this;switch(t){case"title":if(this.$title)this.$title.text(e);else{var o=c()('<h2 class="oc-dialog-title">'+e+"</h2>");this.$title=o.prependTo(this.$dialog)}this._setSizes();break;case"buttons":if(this.$buttonrow)this.$buttonrow.empty();else{var i=c()('<div class="oc-dialog-buttonrow"></div>');this.$buttonrow=i.appendTo(this.$dialog)}1===e.length?this.$buttonrow.addClass("onebutton"):2===e.length?this.$buttonrow.addClass("twobuttons"):3===e.length&&this.$buttonrow.addClass("threebuttons"),c().each(e,(function(t,e){var o=c()("<button>").text(e.text);e.classes&&o.addClass(e.classes),e.defaultButton&&(o.addClass("primary"),n.$defaultButton=o),n.$buttonrow.append(o),o.on("click keydown",(function(t){nt(t)&&e.click.apply(n.element[0],arguments)}))})),this.$buttonrow.find("button").on("focus",(function(t){n.$buttonrow.find("button").removeClass("primary"),c()(this).addClass("primary")})),this._setSizes();break;case"style":void 0!==e.buttons&&this.$buttonrow.addClass(e.buttons);break;case"closeButton":if(e){var a=c()('<a class="oc-dialog-close" tabindex="0"></a>');this.$dialog.prepend(a),a.on("click keydown",(function(t){nt(t)&&(n.options.closeCallback&&n.options.closeCallback(),n.close())}))}else this.$dialog.find(".oc-dialog-close").remove();break;case"width":this.$dialog.css("width",e);break;case"height":this.$dialog.css("height",e);break;case"close":this.closeCB=e}c().Widget.prototype._setOption.apply(this,arguments)},_setOptions:function(t){c().Widget.prototype._setOptions.apply(this,arguments)},_setSizes:function(){var t=0;this.$title&&(t+=this.$title.outerHeight(!0)),this.$buttonrow&&(t+=this.$buttonrow.outerHeight(!0)),this.element.css({height:"calc(100% - "+t+"px)"})},_createOverlay:function(){if(this.options.modal){var t=this,e=c()("#content");0===e.length&&(e=c()(".content")),this.overlay=c()("<div>").addClass("oc-dialog-dim").appendTo(e),this.overlay.on("click keydown keyup",(function(e){e.target!==t.$dialog.get(0)&&0===t.$dialog.find(c()(e.target)).length&&(e.preventDefault(),e.stopPropagation())}))}},_destroyOverlay:function(){this.options.modal&&this.overlay&&(this.overlay.off("click keydown keyup"),this.overlay.remove(),this.overlay=null)},widget:function(){return this.$dialog},setEnterCallback:function(t){this.enterCallback=t},unsetEnterCallback:function(){this.enterCallback=null},close:function(){this._destroyOverlay();var t=this;setTimeout((function(){t._trigger("close",t)}),200),t.$dialog.remove(),this.destroy()},destroy:function(){this.$title&&this.$title.remove(),this.$buttonrow&&this.$buttonrow.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),this.element.removeClass("oc-dialog-content").css(this.originalCss).detach().insertBefore(this.$dialog),this.$dialog.remove()}});var Bn={init:function(t,e,n){if(this.vars=t,this.options=c().extend({},this.options,e),this.elem=n,"function"==typeof this.options.escapeFunction)for(var o=Object.keys(this.vars),i=0;i<o.length;i++)"string"==typeof this.vars[o[i]]&&(this.vars[o[i]]=this.options.escapeFunction(this.vars[o[i]]));var a=this._build(this.vars);return c()(a)},_build:function(t){var e="text/template"===this.elem.attr("type")?this.elem.html():this.elem.get(0).outerHTML;try{return e.replace(/{([^{}]*)}/g,(function(e,n){var o=t[n];return"string"==typeof o||"number"==typeof o?o:e}))}catch(t){console.error(t,"data:",e)}},options:{escapeFunction:_t()}};c().fn.octemplate=function(t,e){if(t=t||{},this.length)return Object.create(Bn).init(t,e,this)};var On=function(t){var e=t.toLowerCase();function n(t,e,n){this.r=t,this.g=e,this.b=n}function o(t,e,o){var i=[];i.push(e);for(var a=function(t,e){var n=new Array(3);return n[0]=(e[1].r-e[0].r)/t,n[1]=(e[1].g-e[0].g)/t,n[2]=(e[1].b-e[0].b)/t,n}(t,[e,o]),r=1;r<t;r++){var s=parseInt(e.r+a[0]*r),l=parseInt(e.g+a[1]*r),c=parseInt(e.b+a[2]*r);i.push(new n(s,l,c))}return i}null===e.match(/^([0-9a-f]{4}-?){8}$/)&&(e=nn()(e)),e=e.replace(/[^0-9a-f]/g,"");var i=new n(182,70,157),a=new n(221,203,85),r=new n(0,130,201),s=o(6,i,a),l=o(6,a,r),c=o(6,r,i);return s.concat(l).concat(c)[function(t,e){for(var n=0,o=[],i=0;i<t.length;i++)o.push(parseInt(t.charAt(i),16)%16);for(var a in o)n+=o[a];return parseInt(parseInt(n)%18)}(e)]};String.prototype.toRgb=function(){return console.warn("String.prototype.toRgb is deprecated! It will be removed in Nextcloud 22."),On(this)},c().fn.imageplaceholder=function(t,e,n){e=e||t;var o=On(t);this.css("background-color","rgb("+o.r+", "+o.g+", "+o.b+")");var i=this.height()||n||32;if(this.height(i),this.width(i),this.css("color","#fff"),this.css("font-weight","normal"),this.css("text-align","center"),this.css("line-height",i+"px"),this.css("font-size",.55*i+"px"),null!==t&&t.length){var a=e.replace(/\s+/g," ").trim().split(" ",2).map((function(t){return t[0].toUpperCase()})).join("");this.html(a)}},c().fn.clearimageplaceholder=function(){this.css("background-color",""),this.css("color",""),this.css("font-weight",""),this.css("text-align",""),this.css("line-height",""),this.css("font-size",""),this.html(""),this.removeClass("icon-loading"),this.removeClass("icon-loading-small")},c()(document).on("ajaxSend",(function(t,e,n){!1===n.crossDomain&&(e.setRequestHeader("requesttoken",pt()),e.setRequestHeader("OCS-APIREQUEST","true"))})),c().fn.selectRange=function(t,e){return this.each((function(){if(this.setSelectionRange)this.focus(),this.setSelectionRange(t,e);else if(this.createTextRange){var n=this.createTextRange();n.collapse(!0),n.moveEnd("character",e),n.moveStart("character",t),n.select()}}))},c().fn.extend({showPassword:function(t){var e={fn:null,args:{}};e.fn=t;var n=function(t,e){e.val(t.val())},o=function(t,e,o){t.is(":checked")?(n(e,o),o.show(),e.hide()):(n(o,e),o.hide(),e.show())};return this.each((function(){var t=c()(this),i=c()(t.data("typetoggle")),a=function(t){var e=c()(t),n=c()("<input />");return n.attr({type:"text",class:e.attr("class"),style:e.attr("style"),size:e.attr("size"),name:e.attr("name")+"-clone",tabindex:e.attr("tabindex"),autocomplete:"off"}),void 0!==e.attr("placeholder")&&n.attr("placeholder",e.attr("placeholder")),n}(t);a.insertAfter(t),e.fn&&(e.args.input=t,e.args.checkbox=i,e.args.clone=a),i.bind("click",(function(){o(i,t,a)})),t.bind("keyup",(function(){n(t,a)})),a.bind("keyup",(function(){n(a,t),t.trigger("keyup")})),a.bind("blur",(function(){t.trigger("focusout")})),o(i,t,a),a.closest("form").submit((function(t){a.prop("type","password")})),e.fn&&e.fn(e.args)}))}}),c().ui.autocomplete.prototype._resizeMenu=function(){this.menu.element.outerWidth(this.element.outerWidth())};var _n=i(12448),Dn={};Dn.styleTagTransform=Ce(),Dn.setAttributes=he(),Dn.insert=pe().bind(null,"head"),Dn.domAPI=de(),Dn.insertStyleElement=ge(),ce()(_n.Z,Dn),_n.Z&&_n.Z.locals&&_n.Z.locals;var Tn=i(72417),jn={};jn.styleTagTransform=Ce(),jn.setAttributes=he(),jn.insert=pe().bind(null,"head"),jn.domAPI=de(),jn.insertStyleElement=ge(),ce()(Tn.Z,jn),Tn.Z&&Tn.Z.locals&&Tn.Z.locals,c().ajaxSetup({contents:{script:!1}}),c().globalEval=function(){},window.addEventListener("DOMContentLoaded",(function(){var t;Ve(),0===(t=c()("[data-apps-slide-toggle]")).length&&c()("#app-navigation").addClass("without-app-settings"),c()(document).click((function(e){v&&(t=c()("[data-apps-slide-toggle]")),t.each((function(t,n){var o=c()(n).data("apps-slide-toggle"),i=c()(o);function a(){i.slideUp(4*OC.menuSpeed,(function(){i.trigger(new(c().Event)("hide"))})),i.removeClass("opened"),c()(n).removeClass("opened")}if(!i.is(":animated"))if(c()(n).is(c()(e.target).closest("[data-apps-slide-toggle]")))i.is(":visible")?a():function(){i.slideDown(4*OC.menuSpeed,(function(){i.trigger(new(c().Event)("show"))})),i.addClass("opened"),c()(n).addClass("opened");var t=c()(o+" [autofocus]");1===t.length&&t.focus()}();else{var r=c()(e.target).closest(o);i.is(":visible")&&r[0]!==i[0]&&a()}}))})),window.history.pushState?window.onpopstate=_.bind(Wt.Util.History._onPopState,Wt.Util.History):c()(window).on("hashchange",_.bind(Wt.Util.History._onPopState,Wt.Util.History))}))},12448:function(t,e,n){"use strict";var o=n(87537),i=n.n(o),a=n(23645),r=n.n(a),s=n(61667),l=n.n(s),c=new URL(n(58188),n.b),u=new URL(n(40337),n.b),d=new URL(n(33178),n.b),A=new URL(n(12081),n.b),p=new URL(n(47868),n.b),f=r()(i()),h=l()(c),m=l()(u),g=l()(d),v=l()(A),C=l()(p);f.push([t.id,".ui-widget-content{border:1px solid var(--color-border);background:var(--color-main-background) none;color:var(--color-main-text)}.ui-widget-content a{color:var(--color-main-text)}.ui-widget-header{border:none;color:var(--color-main-text);background-image:none}.ui-widget-header a{color:var(--color-main-text)}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid var(--color-border);background:var(--color-main-background) none;font-weight:bold;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #ddd;background:var(--color-main-background) none;font-weight:bold;color:var(--color-main-text)}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:var(--color-main-text)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid var(--color-primary);background:var(--color-main-background) none;font-weight:bold;color:var(--color-main-text)}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:var(--color-main-text)}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid var(--color-main-background);background:var(--color-main-background) none;color:var(--color-text-light);font-weight:600}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:var(--color-text-lighter)}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:var(--color-error);background:var(--color-error) none;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-state-default .ui-icon{background-image:url("+h+")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("+h+")}.ui-state-active .ui-icon{background-image:url("+h+")}.ui-state-highlight .ui-icon{background-image:url("+m+")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("+g+")}.ui-icon.ui-icon-none{display:none}.ui-widget-overlay{background:#666 url("+v+") 50% 50% repeat;opacity:.5}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url("+C+") 50% 50% repeat-x;opacity:.2;border-radius:5px}.ui-tabs{border:none}.ui-tabs .ui-tabs-nav.ui-corner-all{border-bottom-left-radius:0;border-bottom-right-radius:0}.ui-tabs .ui-tabs-nav{background:none;margin-bottom:15px}.ui-tabs .ui-tabs-nav .ui-state-default{border:none;border-bottom:1px solid rgba(0,0,0,0);font-weight:normal;margin:0 !important;padding:0 !important}.ui-tabs .ui-tabs-nav .ui-state-hover,.ui-tabs .ui-tabs-nav .ui-state-active{border:none;border-bottom:1px solid var(--color-main-text);color:var(--color-main-text)}.ui-tabs .ui-tabs-nav .ui-state-hover a,.ui-tabs .ui-tabs-nav .ui-state-hover a:link,.ui-tabs .ui-tabs-nav .ui-state-hover a:hover,.ui-tabs .ui-tabs-nav .ui-state-hover a:visited,.ui-tabs .ui-tabs-nav .ui-state-active a,.ui-tabs .ui-tabs-nav .ui-state-active a:link,.ui-tabs .ui-tabs-nav .ui-state-active a:hover,.ui-tabs .ui-tabs-nav .ui-state-active a:visited{color:var(--color-main-text)}.ui-tabs .ui-tabs-nav .ui-state-active{font-weight:bold}.ui-autocomplete.ui-menu{padding:0}.ui-autocomplete.ui-menu.item-count-1,.ui-autocomplete.ui-menu.item-count-2{overflow-y:hidden}.ui-autocomplete.ui-menu .ui-menu-item a{color:var(--color-text-lighter);display:block;padding:4px 4px 4px 14px}.ui-autocomplete.ui-menu .ui-menu-item a.ui-state-focus,.ui-autocomplete.ui-menu .ui-menu-item a.ui-state-active{box-shadow:inset 4px 0 var(--color-primary-element);color:var(--color-main-text)}.ui-autocomplete.ui-widget-content{background:var(--color-main-background);border-top:none}.ui-autocomplete.ui-corner-all{border-radius:0;border-bottom-left-radius:var(--border-radius);border-bottom-right-radius:var(--border-radius)}.ui-autocomplete .ui-state-hover,.ui-autocomplete .ui-widget-content .ui-state-hover,.ui-autocomplete .ui-widget-header .ui-state-hover,.ui-autocomplete .ui-state-focus,.ui-autocomplete .ui-widget-content .ui-state-focus,.ui-autocomplete .ui-widget-header .ui-state-focus{border:1px solid rgba(0,0,0,0);background:inherit;color:var(--color-primary-element)}.ui-autocomplete .ui-menu-item a{border-radius:0 !important}.ui-button.primary{background-color:var(--color-primary);color:var(--color-primary-text);border:1px solid var(--color-primary-text)}.ui-button:hover{font-weight:bold !important}.ui-draggable-handle,.ui-selectable{touch-action:pan-y}","",{version:3,sources:["webpack://./core/src/jquery/css/jquery-ui-fixes.scss"],names:[],mappings:"AAEA,mBACC,oCAAA,CACA,4CAAA,CACA,4BAAA,CAED,qBACC,4BAAA,CAED,kBACC,WAAA,CACA,4BAAA,CACA,qBAAA,CAED,oBACC,4BAAA,CAKD,2FAGC,oCAAA,CACA,4CAAA,CACA,gBAAA,CACA,UAAA,CAED,yEAGC,UAAA,CAED,0KAMC,qBAAA,CACA,4CAAA,CACA,gBAAA,CACA,4BAAA,CAED,2FAIC,4BAAA,CAED,wFAGC,qCAAA,CACA,4CAAA,CACA,gBAAA,CACA,4BAAA,CAED,sEAGC,4BAAA,CAKD,iGAGC,6CAAA,CACA,4CAAA,CACA,6BAAA,CACA,eAAA,CAED,uGAGC,+BAAA,CAED,qFAGC,yBAAA,CACA,kCAAA,CACA,UAAA,CAED,2FAGC,UAAA,CAED,oGAGC,UAAA,CAKD,2BACC,wDAAA,CAED,kDAEC,wDAAA,CAED,0BACC,wDAAA,CAED,6BACC,wDAAA,CAED,uDAEC,wDAAA,CAED,sBACC,YAAA,CAMD,mBACC,sEAAA,CACA,UAAA,CAED,kBACC,oBAAA,CACA,WAAA,CACA,wEAAA,CACA,UAAA,CACA,iBAAA,CAID,SACC,WAAA,CAEA,oCACC,2BAAA,CACA,4BAAA,CAGD,sBACC,eAAA,CACA,kBAAA,CAEA,wCACC,WAAA,CACA,qCAAA,CACA,kBAAA,CACA,mBAAA,CACA,oBAAA,CAGD,6EAEC,WAAA,CACA,8CAAA,CACA,4BAAA,CACA,0WACC,4BAAA,CAGF,uCACC,gBAAA,CAOF,yBACC,SAAA,CAIA,4EAEC,iBAAA,CAGD,yCACC,+BAAA,CACA,aAAA,CACA,wBAAA,CAEA,iHACC,mDAAA,CACA,4BAAA,CAKH,mCACC,uCAAA,CACA,eAAA,CAGD,+BACC,eAAA,CACA,8CAAA,CACA,+CAAA,CAGD,gRAKC,8BAAA,CACA,kBAAA,CACA,kCAAA,CAIA,iCACC,0BAAA,CAKH,mBACC,qCAAA,CACA,+BAAA,CACA,0CAAA,CAID,iBACI,2BAAA,CAKJ,oCAEC,kBAAA",sourcesContent:["/* Component containers\n----------------------------------*/\n.ui-widget-content {\n\tborder: 1px solid var(--color-border);\n\tbackground: var(--color-main-background) none;\n\tcolor: var(--color-main-text);\n}\n.ui-widget-content a {\n\tcolor: var(--color-main-text);\n}\n.ui-widget-header {\n\tborder: none;\n\tcolor: var(--color-main-text);\n\tbackground-image: none;\n}\n.ui-widget-header a {\n\tcolor: var(--color-main-text);\n}\n\n/* Interaction states\n----------------------------------*/\n.ui-state-default,\n.ui-widget-content .ui-state-default,\n.ui-widget-header .ui-state-default {\n\tborder: 1px solid var(--color-border);\n\tbackground: var(--color-main-background) none;\n\tfont-weight: bold;\n\tcolor: #555;\n}\n.ui-state-default a,\n.ui-state-default a:link,\n.ui-state-default a:visited {\n\tcolor: #555;\n}\n.ui-state-hover,\n.ui-widget-content .ui-state-hover,\n.ui-widget-header .ui-state-hover,\n.ui-state-focus,\n.ui-widget-content .ui-state-focus,\n.ui-widget-header .ui-state-focus {\n\tborder: 1px solid #ddd;\n\tbackground: var(--color-main-background) none;\n\tfont-weight: bold;\n\tcolor: var(--color-main-text);\n}\n.ui-state-hover a,\n.ui-state-hover a:hover,\n.ui-state-hover a:link,\n.ui-state-hover a:visited {\n\tcolor: var(--color-main-text);\n}\n.ui-state-active,\n.ui-widget-content .ui-state-active,\n.ui-widget-header .ui-state-active {\n\tborder: 1px solid var(--color-primary);\n\tbackground: var(--color-main-background) none;\n\tfont-weight: bold;\n\tcolor: var(--color-main-text);\n}\n.ui-state-active a,\n.ui-state-active a:link,\n.ui-state-active a:visited {\n\tcolor: var(--color-main-text);\n}\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-highlight,\n.ui-widget-content .ui-state-highlight,\n.ui-widget-header .ui-state-highlight {\n\tborder: 1px solid var(--color-main-background);\n\tbackground: var(--color-main-background) none;\n\tcolor: var(--color-text-light);\n\tfont-weight: 600;\n}\n.ui-state-highlight a,\n.ui-widget-content .ui-state-highlight a,\n.ui-widget-header .ui-state-highlight a {\n\tcolor: var(--color-text-lighter);\n}\n.ui-state-error,\n.ui-widget-content .ui-state-error,\n.ui-widget-header .ui-state-error {\n\tborder: var(--color-error);\n\tbackground: var(--color-error) none;\n\tcolor: #ffffff;\n}\n.ui-state-error a,\n.ui-widget-content .ui-state-error a,\n.ui-widget-header .ui-state-error a {\n\tcolor: #ffffff;\n}\n.ui-state-error-text,\n.ui-widget-content .ui-state-error-text,\n.ui-widget-header .ui-state-error-text {\n\tcolor: #ffffff;\n}\n\n/* Icons\n----------------------------------*/\n.ui-state-default .ui-icon {\n\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\n}\n.ui-state-hover .ui-icon,\n.ui-state-focus .ui-icon {\n\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\n}\n.ui-state-active .ui-icon {\n\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\n}\n.ui-state-highlight .ui-icon {\n\tbackground-image: url('images/ui-icons_ffffff_256x240.png');\n}\n.ui-state-error .ui-icon,\n.ui-state-error-text .ui-icon {\n\tbackground-image: url('images/ui-icons_ffd27a_256x240.png');\n}\n.ui-icon.ui-icon-none {\n\tdisplay: none;\n}\n\n/* Misc visuals\n----------------------------------*/\n/* Overlays */\n.ui-widget-overlay {\n\tbackground: #666666 url('images/ui-bg_diagonals-thick_20_666666_40x40.png') 50% 50% repeat;\n\topacity: .5;\n}\n.ui-widget-shadow {\n\tmargin: -5px 0 0 -5px;\n\tpadding: 5px;\n\tbackground: #000000 url('images/ui-bg_flat_10_000000_40x100.png') 50% 50% repeat-x;\n\topacity: .2;\n\tborder-radius: 5px;\n}\n\n/* Tabs customizations */\n.ui-tabs {\n\tborder: none;\n\n\t.ui-tabs-nav.ui-corner-all {\n\t\tborder-bottom-left-radius: 0;\n\t\tborder-bottom-right-radius: 0;\n\t}\n\n\t.ui-tabs-nav {\n\t\tbackground: none;\n\t\tmargin-bottom: 15px;\n\n\t\t.ui-state-default {\n\t\t\tborder: none;\n\t\t\tborder-bottom: 1px solid transparent;\n\t\t\tfont-weight: normal;\n\t\t\tmargin: 0 !important;\n\t\t\tpadding: 0 !important;\n\t\t}\n\n\t\t.ui-state-hover,\n\t\t.ui-state-active {\n\t\t\tborder: none;\n\t\t\tborder-bottom: 1px solid var(--color-main-text);\n\t\t\tcolor: var(--color-main-text);\n\t\t\ta, a:link, a:hover, a:visited {\n\t\t\t\tcolor: var(--color-main-text);\n\t\t\t}\n\t\t}\n\t\t.ui-state-active {\n\t\t\tfont-weight: bold;\n\t\t}\n\t}\n}\n\n/* Select menus */\n.ui-autocomplete {\n\t&.ui-menu {\n\t\tpadding: 0;\n\n\t\t/* scrolling starts from three items,\n\t\t * so hide overflow and scrollbars for a clean layout */\n\t\t&.item-count-1,\n\t\t&.item-count-2 {\n\t\t\toverflow-y: hidden;\n\t\t}\n\n\t\t.ui-menu-item a {\n\t\t\tcolor: var(--color-text-lighter);\n\t\t\tdisplay: block;\n\t\t\tpadding: 4px 4px 4px 14px;\n\n\t\t\t&.ui-state-focus, &.ui-state-active {\n\t\t\t\tbox-shadow: inset 4px 0 var(--color-primary-element);\n\t\t\t\tcolor: var(--color-main-text);\n\t\t\t}\n\t\t}\n\t}\n\n\t&.ui-widget-content {\n\t\tbackground: var(--color-main-background);\n\t\tborder-top: none;\n\t}\n\n\t&.ui-corner-all {\n\t\tborder-radius: 0;\n\t\tborder-bottom-left-radius: var(--border-radius);\n\t\tborder-bottom-right-radius: var(--border-radius);\n\t}\n\n\t.ui-state-hover, .ui-widget-content .ui-state-hover,\n\t.ui-widget-header .ui-state-hover,\n\t.ui-state-focus,\n\t.ui-widget-content .ui-state-focus,\n\t.ui-widget-header .ui-state-focus {\n\t\tborder: 1px solid transparent;\n\t\tbackground: inherit;\n\t\tcolor: var(--color-primary-element);\n\t}\n\n\t.ui-menu-item {\n\t\ta {\n\t\t\tborder-radius: 0 !important;\n\t\t}\n\t}\n}\n\n.ui-button.primary {\n\tbackground-color: var(--color-primary);\n\tcolor: var(--color-primary-text);\n\tborder: 1px solid var(--color-primary-text);\n}\n\n// fix ui-buttons on hover\n.ui-button:hover {\n font-weight:bold !important;\n}\n\n\n/* DRAGGABLE */\n.ui-draggable-handle,\n.ui-selectable {\n\ttouch-action: pan-y;\n}\n"],sourceRoot:""}]),e.Z=f},72417:function(t,e,n){"use strict";var o=n(87537),i=n.n(o),a=n(23645),r=n.n(a)()(i());r.push([t.id,".oc-dialog{background:var(--color-main-background);color:var(--color-text-light);border-radius:var(--border-radius-large);box-shadow:0 0 30px var(--color-box-shadow);padding:24px;z-index:10000;font-size:100%;box-sizing:border-box;min-width:200px;top:50%;left:50%;transform:translate(-50%, -50%);max-height:calc(100% - 20px);max-width:calc(100% - 20px);overflow:auto}.oc-dialog-title{background:var(--color-main-background)}.oc-dialog-buttonrow{position:relative;display:flex;background:rgba(0,0,0,0);right:0;bottom:0;padding:0;padding-top:10px;box-sizing:border-box;width:100%;background-image:linear-gradient(rgba(255, 255, 255, 0), var(--color-main-background))}.oc-dialog-buttonrow.twobuttons{justify-content:space-between}.oc-dialog-buttonrow.onebutton,.oc-dialog-buttonrow.twobuttons.aside{justify-content:flex-end}.oc-dialog-buttonrow button{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:44px;min-width:44px}.oc-dialog-close{position:absolute;top:0;right:0;padding:25px;background:var(--icon-close-dark) no-repeat center;opacity:.5;border-radius:var(--border-radius-pill)}.oc-dialog-close:hover,.oc-dialog-close:focus,.oc-dialog-close:active{opacity:1}.oc-dialog-dim{background-color:#000;opacity:.2;z-index:9999;position:fixed;top:0;left:0;width:100%;height:100%}body.theme--dark .oc-dialog-dim{opacity:.8}.oc-dialog-content{width:100%;max-width:550px}.oc-dialog.password-confirmation .oc-dialog-content{width:auto}.oc-dialog.password-confirmation .oc-dialog-content input[type=password]{width:100%}.oc-dialog.password-confirmation .oc-dialog-content label{display:none}","",{version:3,sources:["webpack://./core/src/jquery/css/jquery.ocdialog.scss"],names:[],mappings:"AAAA,WACC,uCAAA,CACA,6BAAA,CACA,wCAAA,CACA,2CAAA,CACA,YAAA,CACA,aAAA,CACA,cAAA,CACA,qBAAA,CACA,eAAA,CACA,OAAA,CACA,QAAA,CACA,+BAAA,CACA,4BAAA,CACA,2BAAA,CACA,aAAA,CAED,iBACC,uCAAA,CAED,qBACC,iBAAA,CACA,YAAA,CACA,wBAAA,CACA,OAAA,CACA,QAAA,CACA,SAAA,CACA,gBAAA,CACA,qBAAA,CACA,UAAA,CACA,sFAAA,CAEA,gCACO,6BAAA,CAGP,qEAEC,wBAAA,CAGD,4BACI,kBAAA,CACA,eAAA,CACH,sBAAA,CACA,WAAA,CACA,cAAA,CAIF,iBACC,iBAAA,CACA,KAAA,CACA,OAAA,CACA,YAAA,CACA,kDAAA,CACA,UAAA,CACA,uCAAA,CAEA,sEAGC,SAAA,CAIF,eACC,qBAAA,CACA,UAAA,CACA,YAAA,CACA,cAAA,CACA,KAAA,CACA,MAAA,CACA,UAAA,CACA,WAAA,CAGD,gCACC,UAAA,CAGD,mBACC,UAAA,CACA,eAAA,CAIA,oDACC,UAAA,CAEA,yEACC,UAAA,CAED,0DACC,YAAA",sourcesContent:[".oc-dialog {\n\tbackground: var(--color-main-background);\n\tcolor: var(--color-text-light);\n\tborder-radius: var(--border-radius-large);\n\tbox-shadow: 0 0 30px var(--color-box-shadow);\n\tpadding: 24px;\n\tz-index: 10000;\n\tfont-size: 100%;\n\tbox-sizing: border-box;\n\tmin-width: 200px;\n\ttop: 50%;\n\tleft: 50%;\n\ttransform: translate(-50%, -50%);\n\tmax-height: calc(100% - 20px);\n\tmax-width: calc(100% - 20px);\n\toverflow: auto;\n}\n.oc-dialog-title {\n\tbackground: var(--color-main-background);\n}\n.oc-dialog-buttonrow {\n\tposition: relative;\n\tdisplay: flex;\n\tbackground: transparent;\n\tright: 0;\n\tbottom: 0;\n\tpadding: 0;\n\tpadding-top: 10px;\n\tbox-sizing: border-box;\n\twidth: 100%;\n\tbackground-image: linear-gradient(rgba(255, 255, 255, 0.0), var(--color-main-background));\n\n\t&.twobuttons {\n justify-content: space-between;\n }\n\n\t&.onebutton,\n\t&.twobuttons.aside {\n\t\tjustify-content: flex-end;\n\t}\n\n\tbutton {\n\t white-space: nowrap;\n\t overflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\theight: 44px;\n\t\tmin-width: 44px;\n\t}\n}\n\n.oc-dialog-close {\n\tposition: absolute;\n\ttop: 0;\n\tright: 0;\n\tpadding: 25px;\n\tbackground: var(--icon-close-dark) no-repeat center;\n\topacity: .5;\n\tborder-radius: var(--border-radius-pill);\n\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\topacity: 1;\n\t}\n}\n\n.oc-dialog-dim {\n\tbackground-color: #000;\n\topacity: .2;\n\tz-index: 9999;\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n}\n\nbody.theme--dark .oc-dialog-dim {\n\topacity: .8;\n}\n\n.oc-dialog-content {\n\twidth: 100%;\n\tmax-width: 550px;\n}\n\n.oc-dialog.password-confirmation {\n\t.oc-dialog-content {\n\t\twidth: auto;\n\n\t\tinput[type=password] {\n\t\t\twidth: 100%;\n\t\t}\n\t\tlabel {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),e.Z=r},9572:function(t,e,n){"use strict";var o=n(87537),i=n.n(o),a=n(23645),r=n.n(a)()(i());r.push([t.id,'.app-menu[data-v-44a795f6]{width:100%;display:flex;flex-shrink:1;flex-wrap:wrap}.app-menu-main[data-v-44a795f6]{display:flex;flex-wrap:nowrap}.app-menu-main .app-menu-entry[data-v-44a795f6]{width:50px;height:50px;position:relative;display:flex;opacity:.7;filter:var(--background-image-invert-if-bright)}.app-menu-main .app-menu-entry.app-menu-entry__active[data-v-44a795f6]{opacity:1}.app-menu-main .app-menu-entry.app-menu-entry__active[data-v-44a795f6]::before{content:" ";position:absolute;pointer-events:none;border-bottom-color:var(--color-main-background);transform:translateX(-50%);width:12px;height:5px;border-radius:3px;background-color:var(--color-primary-text);left:50%;bottom:6px;display:block;transition:all .1s ease-in-out;opacity:1}.app-menu-main .app-menu-entry.app-menu-entry__active .app-menu-entry--label[data-v-44a795f6]{font-weight:bold}.app-menu-main .app-menu-entry a[data-v-44a795f6]{width:calc(100% - 4px);height:calc(100% - 4px);margin:2px;color:var(--color-primary-text);position:relative}.app-menu-main .app-menu-entry img[data-v-44a795f6]{transition:margin .1s ease-in-out;width:20px;height:20px;padding:calc((100% - 20px)/2);box-sizing:content-box}.app-menu-main .app-menu-entry .app-menu-entry--label[data-v-44a795f6]{opacity:0;position:absolute;font-size:12px;color:var(--color-primary-text);text-align:center;bottom:-5px;left:50%;top:45%;display:block;min-width:100%;transform:translateX(-50%);transition:all .1s ease-in-out;width:100%;text-overflow:ellipsis;overflow:hidden;letter-spacing:-0.5px}.app-menu-main .app-menu-entry[data-v-44a795f6]:hover,.app-menu-main .app-menu-entry[data-v-44a795f6]:focus-within{opacity:1}.app-menu-main .app-menu-entry:hover .app-menu-entry--label[data-v-44a795f6],.app-menu-main .app-menu-entry:focus-within .app-menu-entry--label[data-v-44a795f6]{opacity:1;font-weight:bolder;bottom:0;width:100%;text-overflow:ellipsis;overflow:hidden}.app-menu-main[data-v-44a795f6]:hover,.app-menu-main[data-v-44a795f6]:focus-within,.app-menu-main .app-menu-entry[data-v-44a795f6]:hover,.app-menu-main .app-menu-entry[data-v-44a795f6]:focus{opacity:1}.app-menu-main:hover img[data-v-44a795f6],.app-menu-main:focus-within img[data-v-44a795f6],.app-menu-main .app-menu-entry:hover img[data-v-44a795f6],.app-menu-main .app-menu-entry:focus img[data-v-44a795f6]{margin-top:-8px}.app-menu-main:hover .app-menu-entry--label[data-v-44a795f6],.app-menu-main:focus-within .app-menu-entry--label[data-v-44a795f6],.app-menu-main .app-menu-entry:hover .app-menu-entry--label[data-v-44a795f6],.app-menu-main .app-menu-entry:focus .app-menu-entry--label[data-v-44a795f6]{opacity:1;bottom:0}.app-menu-main[data-v-44a795f6]:hover::before,.app-menu-main:hover .app-menu-entry[data-v-44a795f6]::before,.app-menu-main[data-v-44a795f6]:focus-within::before,.app-menu-main:focus-within .app-menu-entry[data-v-44a795f6]::before,.app-menu-main .app-menu-entry[data-v-44a795f6]:hover::before,.app-menu-main .app-menu-entry:hover .app-menu-entry[data-v-44a795f6]::before,.app-menu-main .app-menu-entry[data-v-44a795f6]:focus::before,.app-menu-main .app-menu-entry:focus .app-menu-entry[data-v-44a795f6]::before{opacity:0}[data-v-44a795f6] .app-menu-more .button-vue--vue-tertiary{color:var(--color-primary-text);opacity:.7;margin:3px;filter:var(--background-image-invert-if-bright)}[data-v-44a795f6] .app-menu-more .button-vue--vue-tertiary:hover{opacity:1;background-color:rgba(0,0,0,0) !important}[data-v-44a795f6] .app-menu-more .button-vue--vue-tertiary:focus-visible{opacity:1;outline:none !important}.app-menu-popover-entry .app-icon[data-v-44a795f6]{position:relative;height:44px}.app-menu-popover-entry .app-icon.has-unread[data-v-44a795f6]::after{background-color:var(--color-main-text)}.app-menu-popover-entry .app-icon img[data-v-44a795f6]{width:20px;height:20px;padding:15px}.has-unread[data-v-44a795f6]::after{content:"";width:8px;height:8px;background-color:var(--color-primary-text);border-radius:50%;position:absolute;display:block;top:10px;right:10px}.unread-counter[data-v-44a795f6]{display:none}',"",{version:3,sources:["webpack://./core/src/components/AppMenu.vue"],names:[],mappings:"AAGA,2BACC,UAAA,CACA,YAAA,CACA,aAAA,CACA,cAAA,CAED,gCACC,YAAA,CACA,gBAAA,CAEA,gDACC,UAAA,CACA,WAAA,CACA,iBAAA,CACA,YAAA,CACA,UAAA,CACA,+CAAA,CAEA,uEACC,SAAA,CAEA,+EACC,WAAA,CACA,iBAAA,CACA,mBAAA,CACA,gDAAA,CACA,0BAAA,CACA,UAAA,CACA,UAAA,CACA,iBAAA,CACA,0CAAA,CACA,QAAA,CACA,UAAA,CACA,aAAA,CACA,8BAAA,CACA,SAAA,CAGD,8FACC,gBAAA,CAIF,kDACC,sBAAA,CACA,uBAAA,CACA,UAAA,CACA,+BAAA,CACA,iBAAA,CAGD,oDACC,iCAAA,CACA,UAvDgB,CAwDhB,WAxDgB,CAyDhB,6BAAA,CACA,sBAAA,CAGD,uEACC,SAAA,CACA,iBAAA,CACA,cAAA,CACA,+BAAA,CACA,iBAAA,CACA,WAAA,CACA,QAAA,CACA,OAAA,CACA,aAAA,CACA,cAAA,CACA,0BAAA,CACA,8BAAA,CACA,UAAA,CACA,sBAAA,CACA,eAAA,CACA,qBAAA,CAGD,mHAEC,SAAA,CACA,iKACC,SAAA,CACA,kBAAA,CACA,QAAA,CACA,UAAA,CACA,sBAAA,CACA,eAAA,CAOH,+LAIC,SAAA,CAEA,+MACC,eAAA,CAGD,2RACC,SAAA,CACA,QAAA,CAGD,8fACC,SAAA,CAKH,2DACC,+BAAA,CACA,UAAA,CACA,UAAA,CACA,+CAAA,CAEA,iEACC,SAAA,CACA,yCAAA,CAGD,yEACC,SAAA,CACA,uBAAA,CAKD,mDACC,iBAAA,CACA,WAAA,CAEA,qEACC,uCAAA,CAGD,uDACC,UAhJgB,CAiJhB,WAjJgB,CAkJhB,YAAA,CAKH,oCACC,UAAA,CACA,SAAA,CACA,UAAA,CACA,0CAAA,CACA,iBAAA,CACA,iBAAA,CACA,aAAA,CACA,QAAA,CACA,UAAA,CAGD,iCACC,YAAA",sourcesContent:['\n$header-icon-size: 20px;\n\n.app-menu {\n\twidth: 100%;\n\tdisplay: flex;\n\tflex-shrink: 1;\n\tflex-wrap: wrap;\n}\n.app-menu-main {\n\tdisplay: flex;\n\tflex-wrap: nowrap;\n\n\t.app-menu-entry {\n\t\twidth: 50px;\n\t\theight: 50px;\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t\topacity: .7;\n\t\tfilter: var(--background-image-invert-if-bright);\n\n\t\t&.app-menu-entry__active {\n\t\t\topacity: 1;\n\n\t\t\t&::before {\n\t\t\t\tcontent: " ";\n\t\t\t\tposition: absolute;\n\t\t\t\tpointer-events: none;\n\t\t\t\tborder-bottom-color: var(--color-main-background);\n\t\t\t\ttransform: translateX(-50%);\n\t\t\t\twidth: 12px;\n\t\t\t\theight: 5px;\n\t\t\t\tborder-radius: 3px;\n\t\t\t\tbackground-color: var(--color-primary-text);\n\t\t\t\tleft: 50%;\n\t\t\t\tbottom: 6px;\n\t\t\t\tdisplay: block;\n\t\t\t\ttransition: all 0.1s ease-in-out;\n\t\t\t\topacity: 1;\n\t\t\t}\n\n\t\t\t.app-menu-entry--label {\n\t\t\t\tfont-weight: bold;\n\t\t\t}\n\t\t}\n\n\t\ta {\n\t\t\twidth: calc(100% - 4px);\n\t\t\theight: calc(100% - 4px);\n\t\t\tmargin: 2px;\n\t\t\tcolor: var(--color-primary-text);\n\t\t\tposition: relative;\n\t\t}\n\n\t\timg {\n\t\t\ttransition: margin 0.1s ease-in-out;\n\t\t\twidth: $header-icon-size;\n\t\t\theight: $header-icon-size;\n\t\t\tpadding: calc((100% - $header-icon-size) / 2);\n\t\t\tbox-sizing: content-box;\n\t\t}\n\n\t\t.app-menu-entry--label {\n\t\t\topacity: 0;\n\t\t\tposition: absolute;\n\t\t\tfont-size: 12px;\n\t\t\tcolor: var(--color-primary-text);\n\t\t\ttext-align: center;\n\t\t\tbottom: -5px;\n\t\t\tleft: 50%;\n\t\t\ttop: 45%;\n\t\t\tdisplay: block;\n\t\t\tmin-width: 100%;\n\t\t\ttransform: translateX(-50%);\n\t\t\ttransition: all 0.1s ease-in-out;\n\t\t\twidth: 100%;\n\t\t\ttext-overflow: ellipsis;\n\t\t\toverflow: hidden;\n\t\t\tletter-spacing: -0.5px;\n\t\t}\n\n\t\t&:hover,\n\t\t&:focus-within {\n\t\t\topacity: 1;\n\t\t\t.app-menu-entry--label {\n\t\t\t\topacity: 1;\n\t\t\t\tfont-weight: bolder;\n\t\t\t\tbottom: 0;\n\t\t\t\twidth: 100%;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t}\n\n\t}\n\n\t// Show labels\n\t&:hover,\n\t&:focus-within,\n\t.app-menu-entry:hover,\n\t.app-menu-entry:focus {\n\t\topacity: 1;\n\n\t\timg {\n\t\t\tmargin-top: -8px;\n\t\t}\n\n\t\t.app-menu-entry--label {\n\t\t\topacity: 1;\n\t\t\tbottom: 0;\n\t\t}\n\n\t\t&::before, .app-menu-entry::before {\n\t\t\topacity: 0;\n\t\t}\n\t}\n}\n\n::v-deep .app-menu-more .button-vue--vue-tertiary {\n\tcolor: var(--color-primary-text);\n\topacity: .7;\n\tmargin: 3px;\n\tfilter: var(--background-image-invert-if-bright);\n\n\t&:hover {\n\t\topacity: 1;\n\t\tbackground-color: transparent !important;\n\t}\n\n\t&:focus-visible {\n\t\topacity: 1;\n\t\toutline: none !important;\n\t}\n}\n\n.app-menu-popover-entry {\n\t.app-icon {\n\t\tposition: relative;\n\t\theight: 44px;\n\n\t\t&.has-unread::after {\n\t\t\tbackground-color: var(--color-main-text);\n\t\t}\n\n\t\timg {\n\t\t\twidth: $header-icon-size;\n\t\t\theight: $header-icon-size;\n\t\t\tpadding: calc((50px - $header-icon-size) / 2);\n\t\t}\n\t}\n}\n\n.has-unread::after {\n\tcontent: "";\n\twidth: 8px;\n\theight: 8px;\n\tbackground-color: var(--color-primary-text);\n\tborder-radius: 50%;\n\tposition: absolute;\n\tdisplay: block;\n\ttop: 10px;\n\tright: 10px;\n}\n\n.unread-counter {\n\tdisplay: none;\n}\n'],sourceRoot:""}]),e.Z=r},88951:function(t,e,n){"use strict";var o=n(87537),i=n.n(o),a=n(23645),r=n.n(a)()(i());r.push([t.id,".menu-entry__loading-icon[data-v-6e59d13c]{margin-right:8px}","",{version:3,sources:["webpack://./core/src/components/UserMenu/UserMenuEntry.vue"],names:[],mappings:"AAEC,2CACC,gBAAA",sourcesContent:["\n.menu-entry {\n\t&__loading-icon {\n\t\tmargin-right: 8px;\n\t}\n}\n"],sourceRoot:""}]),e.Z=r},23287:function(t,e,n){"use strict";var o=n(87537),i=n.n(o),a=n(23645),r=n.n(a)()(i());r.push([t.id,"#contactsmenu-menu[data-v-e32bb484]{height:calc(100vh - 150px);max-height:302px;min-height:175px;width:350px}#contactsmenu-menu[data-v-e32bb484] .emptycontent{margin-top:5vh !important;margin-bottom:1.5vh}#contactsmenu-menu[data-v-e32bb484] .emptycontent .icon-loading,#contactsmenu-menu[data-v-e32bb484] .emptycontent .icon-search{display:inline-block}#contactsmenu-menu[data-v-e32bb484] #contactsmenu-search{width:calc(100% - 16px);margin:8px;height:34px}#contactsmenu-menu[data-v-e32bb484] .content{height:calc(100vh - 150px - 50px);max-height:250px;min-height:125px;overflow-y:auto}#contactsmenu-menu[data-v-e32bb484] .content .footer{text-align:center}#contactsmenu-menu[data-v-e32bb484] .content .footer a{display:block;width:100%;padding:12px 0;opacity:.5}#contactsmenu-menu[data-v-e32bb484] a{padding:2px}#contactsmenu-menu[data-v-e32bb484] a:focus-visible{box-shadow:inset 0 0 0 2px var(--color-main-text) !important}#contactsmenu-menu[data-v-e32bb484] .contact{display:flex;position:relative;align-items:center;padding:3px 3px 3px 10px}#contactsmenu-menu[data-v-e32bb484] .contact .avatar{height:32px;width:32px;display:inline-block}#contactsmenu-menu[data-v-e32bb484] .contact .body{flex-grow:1;padding-left:8px}#contactsmenu-menu[data-v-e32bb484] .contact .body div{position:relative;width:100%}#contactsmenu-menu[data-v-e32bb484] .contact .body .full-name,#contactsmenu-menu[data-v-e32bb484] .contact .body .last-message{max-width:204px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}#contactsmenu-menu[data-v-e32bb484] .contact .body .last-message,#contactsmenu-menu[data-v-e32bb484] .contact .body .email-address{color:var(--color-text-maxcontrast)}#contactsmenu-menu[data-v-e32bb484] .contact .top-action,#contactsmenu-menu[data-v-e32bb484] .contact .second-action,#contactsmenu-menu[data-v-e32bb484] .contact .other-actions{width:16px;height:16px;opacity:.5;cursor:pointer}#contactsmenu-menu[data-v-e32bb484] .contact .top-action:not(button),#contactsmenu-menu[data-v-e32bb484] .contact .second-action:not(button),#contactsmenu-menu[data-v-e32bb484] .contact .other-actions:not(button){padding:14px}#contactsmenu-menu[data-v-e32bb484] .contact .top-action img,#contactsmenu-menu[data-v-e32bb484] .contact .second-action img,#contactsmenu-menu[data-v-e32bb484] .contact .other-actions img{filter:var(--background-invert-if-dark)}#contactsmenu-menu[data-v-e32bb484] .contact .top-action:hover,#contactsmenu-menu[data-v-e32bb484] .contact .top-action:active,#contactsmenu-menu[data-v-e32bb484] .contact .top-action:focus,#contactsmenu-menu[data-v-e32bb484] .contact .second-action:hover,#contactsmenu-menu[data-v-e32bb484] .contact .second-action:active,#contactsmenu-menu[data-v-e32bb484] .contact .second-action:focus,#contactsmenu-menu[data-v-e32bb484] .contact .other-actions:hover,#contactsmenu-menu[data-v-e32bb484] .contact .other-actions:active,#contactsmenu-menu[data-v-e32bb484] .contact .other-actions:focus{opacity:1}#contactsmenu-menu[data-v-e32bb484] .contact button.other-actions{width:44px}#contactsmenu-menu[data-v-e32bb484] .contact button.other-actions:focus{border-color:rgba(0,0,0,0);box-shadow:0 0 0 2px var(--color-main-text)}#contactsmenu-menu[data-v-e32bb484] .contact button.other-actions:focus-visible{border-radius:var(--border-radius-pill)}#contactsmenu-menu[data-v-e32bb484] .contact .menu{top:47px;margin-right:13px}#contactsmenu-menu[data-v-e32bb484] .contact .popovermenu::after{right:2px}","",{version:3,sources:["webpack://./core/src/views/ContactsMenu.vue"],names:[],mappings:"AACA,oCAEC,0BAAA,CACA,gBAAA,CACA,gBAAA,CACA,WAAA,CAGC,kDACC,yBAAA,CACA,mBAAA,CACA,+HAEC,oBAAA,CAIF,yDACC,uBAAA,CACA,UAAA,CACA,WAAA,CAGD,6CAEC,iCAAA,CACA,gBAAA,CACA,gBAAA,CACA,eAAA,CAEA,qDACC,iBAAA,CAEA,uDACC,aAAA,CACA,UAAA,CACA,cAAA,CACA,UAAA,CAKH,sCACC,WAAA,CAEA,oDACC,4DAAA,CAIF,6CACC,YAAA,CACA,iBAAA,CACA,kBAAA,CACA,wBAAA,CAEA,qDACC,WAAA,CACA,UAAA,CACA,oBAAA,CAGD,mDACC,WAAA,CACA,gBAAA,CAEA,uDACC,iBAAA,CACA,UAAA,CAGD,+HAEC,eAAA,CACA,eAAA,CACA,kBAAA,CACA,sBAAA,CAED,mIACC,mCAAA,CAIF,iLACC,UAAA,CACA,WAAA,CACA,UAAA,CACA,cAAA,CAEA,qNACC,YAAA,CAED,6LACC,uCAAA,CAGD,4kBAGC,SAAA,CAIF,kEACC,UAAA,CAEA,wEACC,0BAAA,CACA,2CAAA,CAGD,gFACC,uCAAA,CAKF,mDACC,QAAA,CACA,iBAAA,CAED,iEACC,SAAA",sourcesContent:["\n#contactsmenu-menu {\n\t/* show 2.5 to 4.5 entries depending on the screen height */\n\theight: calc(100vh - 50px * 3);\n\tmax-height: calc(50px * 6 + 2px);\n\tmin-height: calc(50px * 3.5);\n\twidth: 350px;\n\n\t&:deep {\n\t\t.emptycontent {\n\t\t\tmargin-top: 5vh !important;\n\t\t\tmargin-bottom: 1.5vh;\n\t\t\t.icon-loading,\n\t\t\t.icon-search {\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\t\t}\n\n\t\t#contactsmenu-search {\n\t\t\twidth: calc(100% - 16px);\n\t\t\tmargin: 8px;\n\t\t\theight: 34px;\n\t\t}\n\n\t\t.content {\n\t\t\t/* fixed max height of the parent container without the search input */\n\t\t\theight: calc(100vh - 50px * 3 - 50px);\n\t\t\tmax-height: calc(50px * 5);\n\t\t\tmin-height: calc(50px * 3.5 - 50px);\n\t\t\toverflow-y: auto;\n\n\t\t\t.footer {\n\t\t\t\ttext-align: center;\n\n\t\t\t\ta {\n\t\t\t\t\tdisplay: block;\n\t\t\t\t\twidth: 100%;\n\t\t\t\t\tpadding: 12px 0;\n\t\t\t\t\topacity: .5;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ta {\n\t\t\tpadding: 2px;\n\n\t\t\t&:focus-visible {\n\t\t\t\tbox-shadow: inset 0 0 0 2px var(--color-main-text) !important; // override rule in core/css/headers.scss #header a:focus-visible\n\t\t\t}\n\t\t}\n\n\t\t.contact {\n\t\t\tdisplay: flex;\n\t\t\tposition: relative;\n\t\t\talign-items: center;\n\t\t\tpadding: 3px 3px 3px 10px;\n\n\t\t\t.avatar {\n\t\t\t\theight: 32px;\n\t\t\t\twidth: 32px;\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\n\t\t\t.body {\n\t\t\t\tflex-grow: 1;\n\t\t\t\tpadding-left: 8px;\n\n\t\t\t\tdiv {\n\t\t\t\t\tposition: relative;\n\t\t\t\t\twidth: 100%;\n\t\t\t\t}\n\n\t\t\t\t.full-name, .last-message {\n\t\t\t\t\t/* TODO: don't use fixed width */\n\t\t\t\t\tmax-width: 204px;\n\t\t\t\t\toverflow: hidden;\n\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\t}\n\t\t\t\t.last-message, .email-address {\n\t\t\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.top-action, .second-action, .other-actions {\n\t\t\t\twidth: 16px;\n\t\t\t\theight: 16px;\n\t\t\t\topacity: .5;\n\t\t\t\tcursor: pointer;\n\n\t\t\t\t&:not(button) {\n\t\t\t\t\tpadding: 14px;\n\t\t\t\t}\n\t\t\t\timg {\n\t\t\t\t\tfilter: var(--background-invert-if-dark);\n\t\t\t\t}\n\n\t\t\t\t&:hover,\n\t\t\t\t&:active,\n\t\t\t\t&:focus {\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbutton.other-actions {\n\t\t\t\twidth: 44px;\n\n\t\t\t\t&:focus {\n\t\t\t\t\tborder-color: transparent;\n\t\t\t\t\tbox-shadow: 0 0 0 2px var(--color-main-text);\n\t\t\t\t}\n\n\t\t\t\t&:focus-visible {\n\t\t\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/* actions menu */\n\t\t\t.menu {\n\t\t\t\ttop: 47px;\n\t\t\t\tmargin-right: 13px;\n\t\t\t}\n\t\t\t.popovermenu::after {\n\t\t\t\tright: 2px;\n\t\t\t}\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),e.Z=r},71445:function(t,e,n){"use strict";var o=n(87537),i=n.n(o),a=n(23645),r=n.n(a)()(i());r.push([t.id,".user-menu[data-v-6a818bbc]{margin-right:12px}.user-menu[data-v-6a818bbc] .header-menu__trigger{opacity:1 !important}.user-menu[data-v-6a818bbc] .header-menu__trigger:focus-visible .user-menu__avatar{border:2px solid var(--color-primary-text)}.user-menu[data-v-6a818bbc] .header-menu__carret{display:none !important}.user-menu[data-v-6a818bbc] .header-menu__content{width:fit-content !important}.user-menu__avatar[data-v-6a818bbc]:active,.user-menu__avatar[data-v-6a818bbc]:focus,.user-menu__avatar[data-v-6a818bbc]:hover{border:2px solid var(--color-primary-text)}.user-menu__nav[data-v-6a818bbc]{display:flex;width:100%}.user-menu__nav ul[data-v-6a818bbc]{display:flex;flex-direction:column;gap:2px}.user-menu__nav ul[data-v-6a818bbc] li a,.user-menu__nav ul[data-v-6a818bbc] li button{border-radius:6px;display:inline-flex;align-items:center;height:var(--header-menu-item-height);color:var(--color-main-text);padding:10px 8px;box-sizing:border-box;white-space:nowrap;position:relative;width:100%}.user-menu__nav ul[data-v-6a818bbc] li a:hover,.user-menu__nav ul[data-v-6a818bbc] li button:hover{background-color:var(--color-background-hover)}.user-menu__nav ul[data-v-6a818bbc] li a:focus-visible,.user-menu__nav ul[data-v-6a818bbc] li button:focus-visible{background-color:var(--color-background-hover) !important;box-shadow:inset 0 0 0 2px var(--color-primary) !important;outline:none !important}.user-menu__nav ul[data-v-6a818bbc] li a:active,.user-menu__nav ul[data-v-6a818bbc] li a.active,.user-menu__nav ul[data-v-6a818bbc] li button:active,.user-menu__nav ul[data-v-6a818bbc] li button.active{background-color:var(--color-primary-light)}.user-menu__nav ul[data-v-6a818bbc] li a span,.user-menu__nav ul[data-v-6a818bbc] li button span{padding-bottom:0;color:var(--color-main-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:110px}.user-menu__nav ul[data-v-6a818bbc] li a img,.user-menu__nav ul[data-v-6a818bbc] li button img{width:16px;height:16px;margin-right:10px}.user-menu__nav ul[data-v-6a818bbc] li a img,.user-menu__nav ul[data-v-6a818bbc] li a svg,.user-menu__nav ul[data-v-6a818bbc] li button img,.user-menu__nav ul[data-v-6a818bbc] li button svg{opacity:.7;filter:var(--background-invert-if-dark)}.user-menu__nav ul[data-v-6a818bbc] li button{background-color:rgba(0,0,0,0);border:none;font-weight:normal;margin:0}","",{version:3,sources:["webpack://./core/src/views/UserMenu.vue"],names:[],mappings:"AACA,4BACC,iBAAA,CAIE,kDACC,oBAAA,CAEC,mFACC,0CAAA,CAKH,iDACC,uBAAA,CAGD,kDACC,4BAAA,CAMF,+HAGC,0CAAA,CAIF,iCACC,YAAA,CACA,UAAA,CAEA,oCACC,YAAA,CACA,qBAAA,CACA,OAAA,CAIE,uFAEC,iBAAA,CACA,mBAAA,CACA,kBAAA,CACA,qCAAA,CACA,4BAAA,CACA,gBAAA,CACA,qBAAA,CACA,kBAAA,CACA,iBAAA,CACA,UAAA,CAEA,mGACC,8CAAA,CAGD,mHACC,yDAAA,CACA,0DAAA,CACA,uBAAA,CAGD,0MAEC,2CAAA,CAGD,iGACC,gBAAA,CACA,4BAAA,CACA,kBAAA,CACA,eAAA,CACA,sBAAA,CACA,eAAA,CAGD,+FACC,UAAA,CACA,WAAA,CACA,iBAAA,CAGD,8LAEC,UAAA,CACA,uCAAA,CAKF,8CACC,8BAAA,CACA,WAAA,CACA,kBAAA,CACA,QAAA",sourcesContent:["\n.user-menu {\n\tmargin-right: 12px;\n\n\t&:deep {\n\t\t.header-menu {\n\t\t\t&__trigger {\n\t\t\t\topacity: 1 !important;\n\t\t\t\t&:focus-visible {\n\t\t\t\t\t.user-menu__avatar {\n\t\t\t\t\t\tborder: 2px solid var(--color-primary-text);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&__carret {\n\t\t\t\tdisplay: none !important;\n\t\t\t}\n\n\t\t\t&__content {\n\t\t\t\twidth: fit-content !important;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__avatar {\n\t\t&:active,\n\t\t&:focus,\n\t\t&:hover {\n\t\t\tborder: 2px solid var(--color-primary-text);\n\t\t}\n\t}\n\n\t&__nav {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\n\t\tul {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tgap: 2px;\n\n\t\t\t&:deep {\n\t\t\t\tli {\n\t\t\t\t\ta,\n\t\t\t\t\tbutton {\n\t\t\t\t\t\tborder-radius: 6px;\n\t\t\t\t\t\tdisplay: inline-flex;\n\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\theight: var(--header-menu-item-height);\n\t\t\t\t\t\tcolor: var(--color-main-text);\n\t\t\t\t\t\tpadding: 10px 8px;\n\t\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\twidth: 100%;\n\n\t\t\t\t\t\t&:hover {\n\t\t\t\t\t\t\tbackground-color: var(--color-background-hover);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t&:focus-visible {\n\t\t\t\t\t\t\tbackground-color: var(--color-background-hover) !important;\n\t\t\t\t\t\t\tbox-shadow: inset 0 0 0 2px var(--color-primary) !important;\n\t\t\t\t\t\t\toutline: none !important;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t&:active,\n\t\t\t\t\t\t&.active {\n\t\t\t\t\t\t\tbackground-color: var(--color-primary-light);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tspan {\n\t\t\t\t\t\t\tpadding-bottom: 0;\n\t\t\t\t\t\t\tcolor: var(--color-main-text);\n\t\t\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\t\t\t\tmax-width: 110px;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\timg {\n\t\t\t\t\t\t\twidth: 16px;\n\t\t\t\t\t\t\theight: 16px;\n\t\t\t\t\t\t\tmargin-right: 10px;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\timg,\n\t\t\t\t\t\tsvg {\n\t\t\t\t\t\t\topacity: .7;\n\t\t\t\t\t\t\tfilter: var(--background-invert-if-dark);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override global button styles\n\t\t\t\t\tbutton {\n\t\t\t\t\t\tbackground-color: transparent;\n\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\tmargin: 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),e.Z=r},10944:function(t,e,n){var o=n(40202);t.exports=(o.default||o).template({1:function(t,e,n,o,i){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(a=r(n,"if").call(null!=e?e:t.nullContext||{},null!=(a=null!=e?r(e,"contact"):e)?r(a,"profileUrl"):a,{name:"if",hash:{},fn:t.program(2,i,0),inverse:t.program(5,i,0),data:i,loc:{start:{line:2,column:1},end:{line:10,column:8}}}))?a:""},2:function(t,e,n,o,i){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(a=r(n,"if").call(null!=e?e:t.nullContext||{},null!=(a=null!=e?r(e,"contact"):e)?r(a,"profileTitle"):a,{name:"if",hash:{},fn:t.program(3,i,0),inverse:t.noop,data:i,loc:{start:{line:3,column:2},end:{line:7,column:9}}}))?a:""},3:function(t,e,n,o,i){var a,r=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t\t\t<a class="profile-link--avatar" href="'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"profileUrl"):a,e))+'">\n\t\t\t\t<img src="'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+'&size=32" class="avatar" srcset="'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+"&size=32 1x, "+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+"&size=64 2x, "+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+'&size=128 4x" alt="">\n\t\t\t</a>\n'},5:function(t,e,n,o,i){var a,r=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t\t<img src="'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+'&size=32" class="avatar" srcset="'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+"&size=32 1x, "+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+"&size=64 2x, "+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+'&size=128 4x" alt="">\n'},7:function(t,e,n,o,i){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(a=r(n,"if").call(null!=e?e:t.nullContext||{},null!=(a=null!=e?r(e,"contact"):e)?r(a,"profileUrl"):a,{name:"if",hash:{},fn:t.program(8,i,0),inverse:t.program(11,i,0),data:i,loc:{start:{line:12,column:1},end:{line:20,column:8}}}))?a:""},8:function(t,e,n,o,i){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(a=r(n,"if").call(null!=e?e:t.nullContext||{},null!=(a=null!=e?r(e,"contact"):e)?r(a,"profileTitle"):a,{name:"if",hash:{},fn:t.program(9,i,0),inverse:t.noop,data:i,loc:{start:{line:13,column:2},end:{line:17,column:9}}}))?a:""},9:function(t,e,n,o,i){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t\t\t<a class="profile-link--avatar" href="'+t.escapeExpression(t.lambda(null!=(a=null!=e?r(e,"contact"):e)?r(a,"profileUrl"):a,e))+'">\n\t\t\t\t<div class="avatar"></div>\n\t\t\t</a>\n'},11:function(t,e,n,o,i){return'\t\t<div class="avatar"></div>\n'},13:function(t,e,n,o,i){var a,r=null!=e?e:t.nullContext||{},s=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return(null!=(a=s(n,"if").call(r,null!=(a=null!=e?s(e,"contact"):e)?s(a,"profileTitle"):a,{name:"if",hash:{},fn:t.program(14,i,0),inverse:t.noop,data:i,loc:{start:{line:23,column:1},end:{line:29,column:8}}}))?a:"")+(null!=(a=s(n,"if").call(r,null!=(a=null!=e?s(e,"contact"):e)?s(a,"topAction"):a,{name:"if",hash:{},fn:t.program(16,i,0),inverse:t.noop,data:i,loc:{start:{line:30,column:1},end:{line:34,column:8}}}))?a:"")},14:function(t,e,n,o,i){var a,r=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t\t<a class="body profile-link--full-name" href="'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"profileUrl"):a,e))+'">\n\t\t\t<div class="full-name">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"fullName"):a,e))+'</div>\n\t\t\t<div class="last-message">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"lastMessage"):a,e))+'</div>\n\t\t\t<div class="email-address">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"emailAddresses"):a,e))+"</div>\n\t\t</a>\n"},16:function(t,e,n,o,i){var a,r=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t\t<a class="top-action" href="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"hyperlink"):a,e))+'" title="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"title"):a,e))+'">\n\t\t\t<img src="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"icon"):a,e))+'" alt="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"title"):a,e))+'">\n\t\t</a>\n'},18:function(t,e,n,o,i){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(a=r(n,"if").call(null!=e?e:t.nullContext||{},null!=(a=null!=e?r(e,"contact"):e)?r(a,"topAction"):a,{name:"if",hash:{},fn:t.program(19,i,0),inverse:t.program(21,i,0),data:i,loc:{start:{line:35,column:0},end:{line:50,column:0}}}))?a:""},19:function(t,e,n,o,i){var a,r=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t<a class="body" href="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"hyperlink"):a,e))+'">\n\t\t<div class="full-name">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"fullName"):a,e))+'</div>\n\t\t<div class="last-message">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"lastMessage"):a,e))+'</div>\n\t\t<div class="email-address">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"emailAddresses"):a,e))+'</div>\n\t</a>\n \t<a class="top-action" href="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"hyperlink"):a,e))+'" title="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"title"):a,e))+'">\n \t\t<img src="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"icon"):a,e))+'" alt="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"title"):a,e))+'">\n\t</a>\n'},21:function(t,e,n,o,i){var a,r=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t<div class="body">\n\t\t<div class="full-name">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"fullName"):a,e))+'</div>\n\t\t<div class="last-message">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"lastMessage"):a,e))+'</div>\n\t\t<div class="email-address">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"emailAddresses"):a,e))+"</div>\n\t</div>\n"},23:function(t,e,n,o,i){var a,r=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<a class="second-action" href="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"secondAction"):a)?l(a,"hyperlink"):a,e))+'" title="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"secondAction"):a)?l(a,"title"):a,e))+'">\n\t<img src="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"secondAction"):a)?l(a,"icon"):a,e))+'" alt="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"secondAction"):a)?l(a,"title"):a,e))+'">\n</a>\n'},25:function(t,e,n,o,i){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t<button class="other-actions icon-more"></button>\n\t<div class="menu popovermenu">\n\t\t<ul>\n'+(null!=(a=r(n,"each").call(null!=e?e:t.nullContext||{},null!=(a=null!=e?r(e,"contact"):e)?r(a,"actions"):a,{name:"each",hash:{},fn:t.program(26,i,0),inverse:t.noop,data:i,loc:{start:{line:60,column:3},end:{line:67,column:12}}}))?a:"")+"\t\t</ul>\n\t</div>\n"},26:function(t,e,n,o,i){var a,r=null!=e?e:t.nullContext||{},s=t.hooks.helperMissing,l="function",c=t.escapeExpression,u=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t\t\t<li>\n\t\t\t\t<a href="'+c(typeof(a=null!=(a=u(n,"hyperlink")||(null!=e?u(e,"hyperlink"):e))?a:s)===l?a.call(r,{name:"hyperlink",hash:{},data:i,loc:{start:{line:62,column:13},end:{line:62,column:26}}}):a)+'">\n\t\t\t\t\t<img src="'+c(typeof(a=null!=(a=u(n,"icon")||(null!=e?u(e,"icon"):e))?a:s)===l?a.call(r,{name:"icon",hash:{},data:i,loc:{start:{line:63,column:15},end:{line:63,column:23}}}):a)+'" alt="">\n\t\t\t\t\t<span>'+c(typeof(a=null!=(a=u(n,"title")||(null!=e?u(e,"title"):e))?a:s)===l?a.call(r,{name:"title",hash:{},data:i,loc:{start:{line:64,column:11},end:{line:64,column:20}}}):a)+"</span>\n\t\t\t\t</a>\n\t\t\t</li>\n"},compiler:[8,">= 4.3.0"],main:function(t,e,n,o,i){var a,r=null!=e?e:t.nullContext||{},s=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return(null!=(a=s(n,"if").call(r,null!=(a=null!=e?s(e,"contact"):e)?s(a,"avatar"):a,{name:"if",hash:{},fn:t.program(1,i,0),inverse:t.program(7,i,0),data:i,loc:{start:{line:1,column:0},end:{line:21,column:7}}}))?a:"")+(null!=(a=s(n,"if").call(r,null!=(a=null!=e?s(e,"contact"):e)?s(a,"profileUrl"):a,{name:"if",hash:{},fn:t.program(13,i,0),inverse:t.program(18,i,0),data:i,loc:{start:{line:22,column:0},end:{line:50,column:7}}}))?a:"")+(null!=(a=s(n,"if").call(r,null!=(a=null!=e?s(e,"contact"):e)?s(a,"hasTwoActions"):a,{name:"if",hash:{},fn:t.program(23,i,0),inverse:t.noop,data:i,loc:{start:{line:51,column:0},end:{line:55,column:7}}}))?a:"")+(null!=(a=s(n,"if").call(r,null!=(a=null!=e?s(e,"contact"):e)?s(a,"hasManyActions"):a,{name:"if",hash:{},fn:t.program(25,i,0),inverse:t.noop,data:i,loc:{start:{line:56,column:0},end:{line:70,column:7}}}))?a:"")},useData:!0})},20421:function(t,e,n){var o=n(40202);t.exports=(o.default||o).template({compiler:[8,">= 4.3.0"],main:function(t,e,n,o,i){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<div class="emptycontent">\n\t<div class="icon-search"></div>\n\t<h2>'+t.escapeExpression("function"==typeof(a=null!=(a=r(n,"couldNotLoadText")||(null!=e?r(e,"couldNotLoadText"):e))?a:t.hooks.helperMissing)?a.call(null!=e?e:t.nullContext||{},{name:"couldNotLoadText",hash:{},data:i,loc:{start:{line:3,column:5},end:{line:3,column:25}}}):a)+"</h2>\n</div>\n"},useData:!0})},34083:function(t,e,n){var o=n(40202);t.exports=(o.default||o).template({1:function(t,e,n,o,i){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<div class="emptycontent">\n\t<div class="icon-search"></div>\n\t<h2>'+t.escapeExpression("function"==typeof(a=null!=(a=r(n,"noContactsFoundText")||(null!=e?r(e,"noContactsFoundText"):e))?a:t.hooks.helperMissing)?a.call(null!=e?e:t.nullContext||{},{name:"noContactsFoundText",hash:{},data:i,loc:{start:{line:4,column:5},end:{line:4,column:28}}}):a)+"</h2>\n</div>\n"},3:function(t,e,n,o,i){var a,r=null!=e?e:t.nullContext||{},s=t.hooks.helperMissing,l="function",c=t.escapeExpression,u=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<div class="footer"><a href="'+c(typeof(a=null!=(a=u(n,"contactsAppURL")||(null!=e?u(e,"contactsAppURL"):e))?a:s)===l?a.call(r,{name:"contactsAppURL",hash:{},data:i,loc:{start:{line:9,column:29},end:{line:9,column:47}}}):a)+'">'+c(typeof(a=null!=(a=u(n,"showAllContactsText")||(null!=e?u(e,"showAllContactsText"):e))?a:s)===l?a.call(r,{name:"showAllContactsText",hash:{},data:i,loc:{start:{line:9,column:49},end:{line:9,column:72}}}):a)+"</a></div>\n"},5:function(t,e,n,o,i){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(a=r(n,"if").call(null!=e?e:t.nullContext||{},null!=e?r(e,"canInstallApp"):e,{name:"if",hash:{},fn:t.program(6,i,0),inverse:t.noop,data:i,loc:{start:{line:10,column:0},end:{line:12,column:0}}}))?a:""},6:function(t,e,n,o,i){var a,r=null!=e?e:t.nullContext||{},s=t.hooks.helperMissing,l="function",c=t.escapeExpression,u=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<div class="footer"><a href="'+c(typeof(a=null!=(a=u(n,"contactsAppMgmtURL")||(null!=e?u(e,"contactsAppMgmtURL"):e))?a:s)===l?a.call(r,{name:"contactsAppMgmtURL",hash:{},data:i,loc:{start:{line:11,column:29},end:{line:11,column:51}}}):a)+'">'+c(typeof(a=null!=(a=u(n,"contactsAppMgmtText")||(null!=e?u(e,"contactsAppMgmtText"):e))?a:s)===l?a.call(r,{name:"contactsAppMgmtText",hash:{},data:i,loc:{start:{line:11,column:53},end:{line:11,column:76}}}):a)+"</a></div>\n"},compiler:[8,">= 4.3.0"],main:function(t,e,n,o,i){var a,r=null!=e?e:t.nullContext||{},s=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return(null!=(a=s(n,"unless").call(r,null!=(a=null!=e?s(e,"contacts"):e)?s(a,"length"):a,{name:"unless",hash:{},fn:t.program(1,i,0),inverse:t.noop,data:i,loc:{start:{line:1,column:0},end:{line:6,column:11}}}))?a:"")+'<div id="contactsmenu-contacts"></div>\n'+(null!=(a=s(n,"if").call(r,null!=e?s(e,"contactsAppEnabled"):e,{name:"if",hash:{},fn:t.program(3,i,0),inverse:t.program(5,i,0),data:i,loc:{start:{line:8,column:0},end:{line:12,column:7}}}))?a:"")},useData:!0})},95386:function(t,e,n){var o=n(40202);t.exports=(o.default||o).template({compiler:[8,">= 4.3.0"],main:function(t,e,n,o,i){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<div class="emptycontent">\n\t<div class="icon-loading"></div>\n\t<h2>'+t.escapeExpression("function"==typeof(a=null!=(a=r(n,"loadingText")||(null!=e?r(e,"loadingText"):e))?a:t.hooks.helperMissing)?a.call(null!=e?e:t.nullContext||{},{name:"loadingText",hash:{},data:i,loc:{start:{line:3,column:5},end:{line:3,column:20}}}):a)+"</h2>\n</div>\n"},useData:!0})},66115:function(t,e,n){var o=n(40202);t.exports=(o.default||o).template({compiler:[8,">= 4.3.0"],main:function(t,e,n,o,i){var a,r=null!=e?e:t.nullContext||{},s=t.hooks.helperMissing,l="function",c=t.escapeExpression,u=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<label class="hidden-visually" for="contactsmenu-search">'+c(typeof(a=null!=(a=u(n,"searchContactsText")||(null!=e?u(e,"searchContactsText"):e))?a:s)===l?a.call(r,{name:"searchContactsText",hash:{},data:i,loc:{start:{line:1,column:57},end:{line:1,column:79}}}):a)+'</label>\n<input id="contactsmenu-search" type="search" placeholder="'+c(typeof(a=null!=(a=u(n,"searchContactsText")||(null!=e?u(e,"searchContactsText"):e))?a:s)===l?a.call(r,{name:"searchContactsText",hash:{},data:i,loc:{start:{line:2,column:59},end:{line:2,column:81}}}):a)+'" value="'+c(typeof(a=null!=(a=u(n,"searchTerm")||(null!=e?u(e,"searchTerm"):e))?a:s)===l?a.call(r,{name:"searchTerm",hash:{},data:i,loc:{start:{line:2,column:90},end:{line:2,column:104}}}):a)+'">\n<div class="content">\n</div>\n'},useData:!0})},47078:function(t,e,n){var o=n(40202);t.exports=(o.default||o).template({1:function(t,e,n,o,i){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<img src="'+t.escapeExpression("function"==typeof(a=null!=(a=r(n,"icon")||(null!=e?r(e,"icon"):e))?a:t.hooks.helperMissing)?a.call(null!=e?e:t.nullContext||{},{name:"icon",hash:{},data:i,loc:{start:{line:3,column:24},end:{line:3,column:32}}}):a)+'">'},compiler:[8,">= 4.3.0"],main:function(t,e,n,o,i){var a,r,s=null!=e?e:t.nullContext||{},l=t.hooks.helperMissing,c="function",u=t.escapeExpression,d=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<li>\n\t<a href="'+u(typeof(r=null!=(r=d(n,"hyperlink")||(null!=e?d(e,"hyperlink"):e))?r:l)===c?r.call(s,{name:"hyperlink",hash:{},data:i,loc:{start:{line:2,column:10},end:{line:2,column:23}}}):r)+'">\n\t\t'+(null!=(a=d(n,"if").call(s,null!=e?d(e,"icon"):e,{name:"if",hash:{},fn:t.program(1,i,0),inverse:t.noop,data:i,loc:{start:{line:3,column:2},end:{line:3,column:41}}}))?a:"")+"\n\t\t<span>"+u(typeof(r=null!=(r=d(n,"title")||(null!=e?d(e,"title"):e))?r:l)===c?r.call(s,{name:"title",hash:{},data:i,loc:{start:{line:4,column:8},end:{line:4,column:17}}}):r)+"</span>\n\t</a>\n</li>\n"},useData:!0})},46700:function(t,e,n){var o={"./af":42786,"./af.js":42786,"./ar":30867,"./ar-dz":14130,"./ar-dz.js":14130,"./ar-kw":96135,"./ar-kw.js":96135,"./ar-ly":56440,"./ar-ly.js":56440,"./ar-ma":47702,"./ar-ma.js":47702,"./ar-sa":16040,"./ar-sa.js":16040,"./ar-tn":37100,"./ar-tn.js":37100,"./ar.js":30867,"./az":31083,"./az.js":31083,"./be":9808,"./be.js":9808,"./bg":68338,"./bg.js":68338,"./bm":67438,"./bm.js":67438,"./bn":8905,"./bn-bd":76225,"./bn-bd.js":76225,"./bn.js":8905,"./bo":11560,"./bo.js":11560,"./br":1278,"./br.js":1278,"./bs":80622,"./bs.js":80622,"./ca":2468,"./ca.js":2468,"./cs":5822,"./cs.js":5822,"./cv":50877,"./cv.js":50877,"./cy":47373,"./cy.js":47373,"./da":24780,"./da.js":24780,"./de":59740,"./de-at":60217,"./de-at.js":60217,"./de-ch":60894,"./de-ch.js":60894,"./de.js":59740,"./dv":5300,"./dv.js":5300,"./el":50837,"./el.js":50837,"./en-au":78348,"./en-au.js":78348,"./en-ca":77925,"./en-ca.js":77925,"./en-gb":22243,"./en-gb.js":22243,"./en-ie":46436,"./en-ie.js":46436,"./en-il":47207,"./en-il.js":47207,"./en-in":44175,"./en-in.js":44175,"./en-nz":76319,"./en-nz.js":76319,"./en-sg":31662,"./en-sg.js":31662,"./eo":92915,"./eo.js":92915,"./es":55655,"./es-do":55251,"./es-do.js":55251,"./es-mx":96112,"./es-mx.js":96112,"./es-us":71146,"./es-us.js":71146,"./es.js":55655,"./et":5603,"./et.js":5603,"./eu":77763,"./eu.js":77763,"./fa":76959,"./fa.js":76959,"./fi":11897,"./fi.js":11897,"./fil":42549,"./fil.js":42549,"./fo":94694,"./fo.js":94694,"./fr":94470,"./fr-ca":63049,"./fr-ca.js":63049,"./fr-ch":52330,"./fr-ch.js":52330,"./fr.js":94470,"./fy":5044,"./fy.js":5044,"./ga":29295,"./ga.js":29295,"./gd":2101,"./gd.js":2101,"./gl":38794,"./gl.js":38794,"./gom-deva":27884,"./gom-deva.js":27884,"./gom-latn":23168,"./gom-latn.js":23168,"./gu":95349,"./gu.js":95349,"./he":24206,"./he.js":24206,"./hi":30094,"./hi.js":30094,"./hr":30316,"./hr.js":30316,"./hu":22138,"./hu.js":22138,"./hy-am":11423,"./hy-am.js":11423,"./id":29218,"./id.js":29218,"./is":90135,"./is.js":90135,"./it":90626,"./it-ch":10150,"./it-ch.js":10150,"./it.js":90626,"./ja":39183,"./ja.js":39183,"./jv":24286,"./jv.js":24286,"./ka":12105,"./ka.js":12105,"./kk":47772,"./kk.js":47772,"./km":18758,"./km.js":18758,"./kn":79282,"./kn.js":79282,"./ko":33730,"./ko.js":33730,"./ku":1408,"./ku.js":1408,"./ky":33291,"./ky.js":33291,"./lb":36841,"./lb.js":36841,"./lo":55466,"./lo.js":55466,"./lt":57010,"./lt.js":57010,"./lv":37595,"./lv.js":37595,"./me":39861,"./me.js":39861,"./mi":35493,"./mi.js":35493,"./mk":95966,"./mk.js":95966,"./ml":87341,"./ml.js":87341,"./mn":5115,"./mn.js":5115,"./mr":10370,"./mr.js":10370,"./ms":9847,"./ms-my":41237,"./ms-my.js":41237,"./ms.js":9847,"./mt":72126,"./mt.js":72126,"./my":56165,"./my.js":56165,"./nb":64924,"./nb.js":64924,"./ne":16744,"./ne.js":16744,"./nl":93901,"./nl-be":59814,"./nl-be.js":59814,"./nl.js":93901,"./nn":83877,"./nn.js":83877,"./oc-lnc":92135,"./oc-lnc.js":92135,"./pa-in":15858,"./pa-in.js":15858,"./pl":64495,"./pl.js":64495,"./pt":89520,"./pt-br":57971,"./pt-br.js":57971,"./pt.js":89520,"./ro":96459,"./ro.js":96459,"./ru":21793,"./ru.js":21793,"./sd":40950,"./sd.js":40950,"./se":10490,"./se.js":10490,"./si":90124,"./si.js":90124,"./sk":64249,"./sk.js":64249,"./sl":14985,"./sl.js":14985,"./sq":51104,"./sq.js":51104,"./sr":49131,"./sr-cyrl":79915,"./sr-cyrl.js":79915,"./sr.js":49131,"./ss":85893,"./ss.js":85893,"./sv":98760,"./sv.js":98760,"./sw":91172,"./sw.js":91172,"./ta":27333,"./ta.js":27333,"./te":23110,"./te.js":23110,"./tet":52095,"./tet.js":52095,"./tg":27321,"./tg.js":27321,"./th":9041,"./th.js":9041,"./tk":19005,"./tk.js":19005,"./tl-ph":75768,"./tl-ph.js":75768,"./tlh":89444,"./tlh.js":89444,"./tr":72397,"./tr.js":72397,"./tzl":28254,"./tzl.js":28254,"./tzm":51106,"./tzm-latn":30699,"./tzm-latn.js":30699,"./tzm.js":51106,"./ug-cn":9288,"./ug-cn.js":9288,"./uk":67691,"./uk.js":67691,"./ur":13795,"./ur.js":13795,"./uz":6791,"./uz-latn":60588,"./uz-latn.js":60588,"./uz.js":6791,"./vi":65666,"./vi.js":65666,"./x-pseudo":14378,"./x-pseudo.js":14378,"./yo":75805,"./yo.js":75805,"./zh-cn":83839,"./zh-cn.js":83839,"./zh-hk":55726,"./zh-hk.js":55726,"./zh-mo":99807,"./zh-mo.js":99807,"./zh-tw":74152,"./zh-tw.js":74152};function i(t){var e=a(t);return n(e)}function a(t){if(!n.o(o,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return o[t]}i.keys=function(){return Object.keys(o)},i.resolve=a,t.exports=i,i.id=46700},12081:function(t){"use strict";t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoAQMAAAC2MCouAAAABlBMVEVmZmZ1dXVT6N0BAAAAUklEQVQIW8XNsQ3AIAwF0bMoKBmBURgNj8YojEBJEcXwu2yQ+p507BTeWDnozPISjPpY4O0W6CqEisUtiG/EF+IT8YG4fznihnhCPCNeEK/89D1Gd22TNOyXVAAAAABJRU5ErkJggg=="},47868:function(t){"use strict";t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAABkAQMAAADOquA5AAAAA1BMVEUAAACnej3aAAAADklEQVQYGWMYBaOABgAAAlgAARbiVEcAAAAASUVORK5CYII="},58188:function(t){"use strict";t.exports="data:image/png;base64,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"},33178:function(t){"use strict";t.exports="data:image/png;base64,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"},40337:function(t){"use strict";t.exports="data:image/png;base64,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"},98811:function(t){"use strict";t.exports="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"},27373:function(t){"use strict";t.exports="data:image/gif;base64,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"}},i={};function a(t){var e=i[t];if(void 0!==e)return e.exports;var n=i[t]={id:t,loaded:!1,exports:{}};return o[t].call(n.exports,n,n.exports,a),n.loaded=!0,n.exports}a.m=o,e=[],a.O=function(t,n,o,i){if(!n){var r=1/0;for(u=0;u<e.length;u++){n=e[u][0],o=e[u][1],i=e[u][2];for(var s=!0,l=0;l<n.length;l++)(!1&i||r>=i)&&Object.keys(a.O).every((function(t){return a.O[t](n[l])}))?n.splice(l--,1):(s=!1,i<r&&(r=i));if(s){e.splice(u--,1);var c=o();void 0!==c&&(t=c)}}return t}i=i||0;for(var u=e.length;u>0&&e[u-1][2]>i;u--)e[u]=e[u-1];e[u]=[n,o,i]},a.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,{a:e}),e},a.d=function(t,e){for(var n in e)a.o(e,n)&&!a.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},a.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},a.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},a.j=2943,function(){a.b=document.baseURI||self.location.href;var t={2943:0};a.O.j=function(e){return 0===t[e]};var e=function(e,n){var o,i,r=n[0],s=n[1],l=n[2],c=0;if(r.some((function(e){return 0!==t[e]}))){for(o in s)a.o(s,o)&&(a.m[o]=s[o]);if(l)var u=l(a)}for(e&&e(n);c<r.length;c++)i=r[c],a.o(t,i)&&t[i]&&t[i][0](),t[i]=0;return a.O(u)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))}(),a.nc=void 0;var r=a.O(void 0,[7874],(function(){return a(530)}));r=a.O(r)}();
-//# sourceMappingURL=core-main.js.map?v=c6b9e7cdfc8bfdd6f402 \ No newline at end of file
+!function(){var e,o={71461:function(e,o,i){"use strict";var a={};i.r(a),i.d(a,{deleteKey:function(){return P},getApps:function(){return w},getKeys:function(){return y},getValue:function(){return x},setValue:function(){return k}});var r={};i.r(r),i.d(r,{formatLinksPlain:function(){return ln},formatLinksRich:function(){return sn},plainToRich:function(){return an},richToPlain:function(){return rn}});var s={};i.r(s),i.d(s,{dismiss:function(){return un},query:function(){return cn}});var l=i(19755),c=i.n(l),u=(i(28594),i(35666),i(35202),i(78595)),d=i(79753),A={},p=[],f=i(18181),h=i(26932),m={updatableNotification:null,getDefaultNotificationFunction:null,setDefault:function(t){this.getDefaultNotificationFunction=t},hide:function(t,e){f.ZP.isFunction(t)&&(e=t,t=void 0),t?(t.each((function(){c()(this)[0].toastify?c()(this)[0].toastify.hideToast():console.error("cannot hide toast because object is not set"),this===this.updatableNotification&&(this.updatableNotification=null)})),e&&e.call(),this.getDefaultNotificationFunction&&this.getDefaultNotificationFunction()):console.error("Missing argument $row in OC.Notification.hide() call, caller needs to be adjusted to only dismiss its own notification")},showHtml:function(t,e){(e=e||{}).isHTML=!0,e.timeout=e.timeout?e.timeout:h.Rl;var n=(0,h.PV)(t,e);return n.toastElement.toastify=n,c()(n.toastElement)},show:function(t,e){(e=e||{}).timeout=e.timeout?e.timeout:h.Rl;var n=(0,h.PV)(function(t){return t.toString().split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;").split('"').join("&quot;").split("'").join("&#039;")}(t),e);return n.toastElement.toastify=n,c()(n.toastElement)},showUpdate:function(t){return this.updatableNotification&&this.updatableNotification.hideToast(),this.updatableNotification=(0,h.PV)(t,{timeout:h.Rl}),this.updatableNotification.toastElement.toastify=this.updatableNotification,c()(this.updatableNotification.toastElement)},showTemporary:function(t,e){(e=e||{}).timeout=e.timeout||h.TN;var n=(0,h.PV)(t,e);return n.toastElement.toastify=n,c()(n.toastElement)},isHidden:function(){return!c()("#content").find(".toastify").length}},g=f.ZP.throttle((function(){m.showTemporary(t("core","Connection to server lost"))}),7e3,{trailing:!1}),v=!1,C={enableDynamicSlideToggle:function(){v=!0},showAppSidebar:function(t){(t||c()("#app-sidebar")).removeClass("disappear").show(),c()("#app-content").trigger(new(c().Event)("appresized"))},hideAppSidebar:function(t){(t||c()("#app-sidebar")).hide().addClass("disappear"),c()("#app-content").trigger(new(c().Event)("appresized"))}};function b(t,e,n){"post"!==t&&"delete"!==t||!Wt.PasswordConfirmation.requiresPasswordConfirmation()?(n=n||{},c().ajax({type:t.toUpperCase(),url:(0,d.generateOcsUrl)("apps/provisioning_api/api/v1/config/apps")+e,data:n.data||{},success:n.success,error:n.error})):Wt.PasswordConfirmation.requirePasswordConfirmation(_.bind(b,this,t,e,n))}function w(t){b("get","",t)}function y(t,e){b("get","/"+t,e)}function x(t,e,n,o){(o=o||{}).data={defaultValue:n},b("get","/"+t+"/"+e,o)}function k(t,e,n,o){(o=o||{}).data={value:n},b("post","/"+t+"/"+e,o)}function P(t,e,n){b("delete","/"+t+"/"+e,n)}var E=window.oc_appconfig||{},B={getValue:function(t,e,n,o){x(t,e,n,{success:o})},setValue:function(t,e,n){k(t,e,n)},getApps:function(t){w({success:t})},getKeys:function(t,e){y(t,{success:e})},deleteKey:function(t,e){P(t,e)}},O=void 0!==window._oc_appswebroots&&window._oc_appswebroots,D=i(72316),T=i.n(D),j=i(76591),I={create:"POST",update:"PROPPATCH",patch:"PROPPATCH",delete:"DELETE",read:"PROPFIND"};function z(t,e){if(f.ZP.isArray(t))return f.ZP.map(t,(function(t){return z(t,e)}));var n={href:t.href};return f.ZP.each(t.propStat,(function(t){if("HTTP/1.1 200 OK"===t.status)for(var o in t.properties){var i=o;o in e&&(i=e[o]),n[i]=t.properties[o]}})),n.id||(n.id=S(n.href)),n}function S(t){var e=t.indexOf("?");e>0&&(t=t.substr(0,e));var n,o=t.split("/");do{n=o[o.length-1],o.pop()}while(!n&&o.length>0);return n}function N(t){return t>=200&&t<=299}function U(t,e,n,o){return t.propPatch(e.url,function(t,e){var n,o={};for(n in t){var i=e[n],a=t[n];i||(console.warn('No matching DAV property for property "'+n),i=n),(f.ZP.isBoolean(a)||f.ZP.isNumber(a))&&(a=""+a),o[i]=a}return o}(n.changed,e.davProperties),o).then((function(t){N(t.status)?f.ZP.isFunction(e.success)&&e.success(n.toJSON()):f.ZP.isFunction(e.error)&&e.error(t)}))}var M=T().noConflict();Object.assign(M,{davCall:function(t,e){var n=new j.dav.Client({baseUrl:t.url,xmlNamespaces:f.ZP.extend({"DAV:":"d","http://owncloud.org/ns":"oc"},t.xmlNamespaces||{})});n.resolveUrl=function(){return t.url};var o=f.ZP.extend({"X-Requested-With":"XMLHttpRequest",requesttoken:OC.requestToken},t.headers);return"PROPFIND"===t.type?function(t,e,n,o){return t.propFind(e.url,f.ZP.values(e.davProperties)||[],e.depth,o).then((function(t){if(N(t.status)){if(f.ZP.isFunction(e.success)){var n=f.ZP.invert(e.davProperties),o=z(t.body,n);e.depth>0&&o.shift(),e.success(o)}}else f.ZP.isFunction(e.error)&&e.error(t)}))}(n,t,0,o):"PROPPATCH"===t.type?U(n,t,e,o):"MKCOL"===t.type?function(t,e,n,o){return t.request(e.type,e.url,o,null).then((function(i){N(i.status)?U(t,e,n,o):f.ZP.isFunction(e.error)&&e.error(i)}))}(n,t,e,o):function(t,e,n,o){return o["Content-Type"]="application/json",t.request(e.type,e.url,o,e.data).then((function(t){if(N(t.status)){if(f.ZP.isFunction(e.success)){if("PUT"===e.type||"POST"===e.type||"MKCOL"===e.type){var o=t.body||n.toJSON(),i=t.xhr.getResponseHeader("Content-Location");return"POST"===e.type&&i&&(o.id=S(i)),void e.success(o)}if(207===t.status){var a=f.ZP.invert(e.davProperties);e.success(z(t.body,a))}else e.success(t.body)}}else f.ZP.isFunction(e.error)&&e.error(t)}))}(n,t,e,o)},davSync:function(t){return function(e,n,o){var i={type:I[e]||e},a=n instanceof t.Collection;if("update"===e&&(n.hasInnerCollection?i.type="MKCOL":(n.usePUT||n.collection&&n.collection.usePUT)&&(i.type="PUT")),o.url||(i.url=f.ZP.result(n,"url")||function(){throw new Error('A "url" property or function must be specified')}()),null!=o.data||!n||"create"!==e&&"update"!==e&&"patch"!==e||(i.data=JSON.stringify(o.attrs||n.toJSON(o))),"PROPFIND"!==i.type&&(i.processData=!1),"PROPFIND"===i.type||"PROPPATCH"===i.type){var r=n.davProperties;!r&&n.model&&(r=n.model.prototype.davProperties),r&&(f.ZP.isFunction(r)?i.davProperties=r.call(n):i.davProperties=r),i.davProperties=f.ZP.extend(i.davProperties||{},o.davProperties),f.ZP.isUndefined(o.depth)&&(o.depth=a?1:0)}var s=o.error;o.error=function(t,e,n){o.textStatus=e,o.errorThrown=n,s&&s.call(o.context,t,e,n)};var l=o.xhr=t.davCall(f.ZP.extend(i,o),n);return n.trigger("request",n,l,o),l}}(M)});var L=M,F=i(65358),R=window._oc_config||{},Q=D.Model.extend({defaults:{fullName:"",lastMessage:"",actions:[],hasOneAction:!1,hasTwoActions:!1,hasManyActions:!1},initialize:function(){0===this.get("actions").length?this.set("hasOneAction",!0):1===this.get("actions").length?(this.set("hasTwoActions",!0),this.set("secondAction",this.get("actions")[0])):this.set("hasManyActions",!0)}}),G=D.Collection.extend({model:Q}),H=D.View.extend({_collection:void 0,_subViews:[],initialize:function(t){this._collection=t.collection},render:function(){var t=this;return t.$el.html(""),t._subViews=[],t._collection.forEach((function(e){var n=new K({model:e});n.render(),t.$el.append(n.$el),n.on("toggle:actionmenu",t._onChildActionMenuToggle,t),t._subViews.push(n)})),t},_onChildActionMenuToggle:function(t){this._subViews.forEach((function(e){e.trigger("parent:toggle:actionmenu",t)}))}}),K=D.View.extend({className:"contact",_template:void 0,_model:void 0,_actionMenuShown:!1,events:{"click .icon-more":"_onToggleActionsMenu"},contactTemplate:i(10944),template:function(t){return this.contactTemplate(t)},initialize:function(t){this._model=t.model,this.on("parent:toggle:actionmenu",this._onOtherActionMenuOpened,this)},render:function(){return this.$el.html(this.template({contact:this._model.toJSON()})),this.delegateEvents(),this.$("div.avatar").imageplaceholder(this._model.get("fullName")),this.$(".top-action").tooltip({placement:"left"}),this.$(".second-action").tooltip({placement:"left"}),this},_onToggleActionsMenu:function(){this._actionMenuShown=!this._actionMenuShown,this._actionMenuShown?this.$(".menu").show():this.$(".menu").hide(),this.trigger("toggle:actionmenu",this.$el)},_onOtherActionMenuOpened:function(t){this.$el.is(t)||(this._actionMenuShown=!1,this.$(".menu").hide())}}),Z=D.View.extend({_loadingTemplate:void 0,_errorTemplate:void 0,_contentTemplate:void 0,_contactsTemplate:void 0,_contacts:void 0,_searchTerm:"",events:{"input #contactsmenu-search":"_onSearch"},templates:{loading:i(95386),error:i(20421),menu:i(66115),list:i(34083)},_onSearch:f.ZP.debounce((function(t){var e=this.$("#contactsmenu-search").val();e!==this._searchTerm&&(this.trigger("search",this.$("#contactsmenu-search").val()),this._searchTerm=e)}),700),loadingTemplate:function(t){return this.templates.loading(t)},errorTemplate:function(e){return this.templates.error(f.ZP.extend({couldNotLoadText:t("core","Could not load your contacts")},e))},contentTemplate:function(e){return this.templates.menu(f.ZP.extend({searchContactsText:t("core","Search contacts …")},e))},contactsTemplate:function(e){return this.templates.list(f.ZP.extend({noContactsFoundText:t("core","No contacts found"),showAllContactsText:t("core","Show all contacts …"),contactsAppMgmtText:t("core","Install the Contacts app")},e))},initialize:function(t){this.options=t},showLoading:function(t){this.render(),this._contacts=void 0,this.$(".content").html(this.loadingTemplate({loadingText:t}))},showError:function(){this.render(),this._contacts=void 0,this.$(".content").html(this.errorTemplate())},showContacts:function(t,e){this._contacts=t.contacts,this.render({contacts:t.contacts});var n=new H({collection:t.contacts});n.render(),this.$(".content").html(this.contactsTemplate({contacts:t.contacts,searchTerm:e,contactsAppEnabled:t.contactsAppEnabled,contactsAppURL:Wt.generateUrl("/apps/contacts"),canInstallApp:Wt.isUserAdmin(),contactsAppMgmtURL:Wt.generateUrl("/settings/apps/social/contacts")})),this.$("#contactsmenu-contacts").html(n.$el)},render:function(t){var e=this.$("#contactsmenu-search").val();return this.$el.html(this.contentTemplate(t)),this.$("#contactsmenu-search").val(e),this.$("#contactsmenu-search").focus(),this}}),Y=function(t){this.initialize(t)};Y.prototype={$el:void 0,_view:void 0,_contactsPromise:void 0,initialize:function(t){this.$el=c()(t.el),this._view=new Z({el:this.$el}),this._view.on("search",(function(t){this.loadContacts(t)}),this)},_getContacts:function(t){var e=Wt.generateUrl("/contactsmenu/contacts");return Promise.resolve(c().ajax(e,{method:"POST",data:{filter:t}}))},loadContacts:function(e){var n=this;return n._contactsPromise||(n._contactsPromise=n._getContacts(e)),f.ZP.isUndefined(e)||""===e?n._view.showLoading(t("core","Loading your contacts …")):n._view.showLoading(t("core","Looking for {term} …",{term:e})),n._contactsPromise.then((function(t){t.contacts=new G(t.contacts),n._view.showContacts(t,e)}),(function(t){n._view.showError(),console.error("There was an error loading your contacts",t)})).then((function(){delete n._contactsPromise})).catch(console.error.bind(this))}};var q=Y,W=document.getElementsByTagName("head")[0].getAttribute("data-user"),J=document.getElementsByTagName("head")[0].getAttribute("data-user-displayname"),V=void 0!==W&&W;function X(t){return X="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},X(t)}function $(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,(void 0,i=function(t,e){if("object"!==X(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var o=n.call(t,e);if("object"!==X(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(o.key,"string"),"symbol"===X(i)?i:String(i)),o)}var i}function tt(t,e,n){return e&&$(t.prototype,e),n&&$(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}var et={Search:tt((function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),console.warn("OCA.Search is deprecated. Please use the unified search API instead")}))},nt=function(t){return"click"===t.type||"keydown"===t.type&&"Enter"===t.key};function ot(t,e,n,o,i,a,r){try{var s=t[a](r),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(o,i)}function it(t){return function(){var e=this,n=arguments;return new Promise((function(o,i){var a=t.apply(e,n);function r(t){ot(a,o,i,r,s,"next",t)}function s(t){ot(a,o,i,r,s,"throw",t)}r(void 0)}))}}function at(t){return at="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},at(t)}var rt,st,lt,ct,ut={YES_NO_BUTTONS:70,OK_BUTTONS:71,FILEPICKER_TYPE_CHOOSE:1,FILEPICKER_TYPE_MOVE:2,FILEPICKER_TYPE_COPY:3,FILEPICKER_TYPE_COPY_MOVE:4,FILEPICKER_TYPE_CUSTOM:5,dialogsCounter:0,alert:function(t,e,n,o){this.message(t,e,"alert",ut.OK_BUTTON,n,o)},info:function(t,e,n,o){this.message(t,e,"info",ut.OK_BUTTON,n,o)},confirm:function(t,e,n,o){return this.message(t,e,"notice",ut.YES_NO_BUTTONS,n,o)},confirmDestructive:function(t,e,n,o,i){return this.message(t,e,"none",n,o,void 0===i||i)},confirmHtml:function(t,e,n,o){return this.message(t,e,"notice",ut.YES_NO_BUTTONS,n,o,!0)},prompt:function(e,n,o,i,a,r){return c().when(this._getMessageTemplate()).then((function(s){var l="oc-dialog-"+ut.dialogsCounter+"-content",u="#"+l,d=s.octemplate({dialog_name:l,title:n,message:e,type:"notice"}),A=c()("<input/>");A.attr("type",r?"password":"text").attr("id",l+"-input").attr("placeholder",a);var p=c()("<label/>").attr("for",l+"-input").text(a+": ");d.append(p),d.append(A),void 0===i&&(i=!1),c()("body").append(d),void 0!==o&&(o=f.ZP.once(o));var h=[{text:t("core","No"),click:function(){void 0!==o&&o(!1,A.val()),c()(u).ocdialog("close")}},{text:t("core","Yes"),click:function(){void 0!==o&&o(!0,A.val()),c()(u).ocdialog("close")},defaultButton:!0}];c()(u).ocdialog({closeOnEscape:!0,modal:i,buttons:h,close:function(){void 0!==o&&o(!1,A.val())}}),A.focus(),ut.dialogsCounter++}))},filepicker:function(e,n,o,i,a,r,s,l){var u=this;if(this.filepicker.sortField="name",this.filepicker.sortOrder="asc",!this.filepicker.loading){void 0===r&&(r=this.FILEPICKER_TYPE_CHOOSE);var d=t("core","No files in here"),A=t("files","New folder");r!==this.FILEPICKER_TYPE_COPY&&r!==this.FILEPICKER_TYPE_MOVE&&r!==this.FILEPICKER_TYPE_COPY_MOVE||(d=t("core","No more subfolders in here")),this.filepicker.loading=!0,this.filepicker.filesClient=et.Sharing&&et.Sharing.PublicApp&&et.Sharing.PublicApp.fileList?et.Sharing.PublicApp.fileList.filesClient:Wt.Files.getClient(),this.filelist=null,s=s||"",l=Object.assign({allowDirectoryChooser:!1},l),c().when(this._getFilePickerTemplate()).then((function(p){u.filepicker.loading=!1,u.$filePicker&&u.$filePicker.ocdialog("close"),null==i&&(i=[]),"string"==typeof i&&(i=[i]),u.$filePicker=p.octemplate({dialog_name:"oc-dialog-filepicker-content",title:e,emptytext:d,newtext:A,nameCol:t("core","Name"),sizeCol:t("core","Size"),modifiedCol:t("core","Modified")}).data("path",s).data("multiselect",o).data("mimetype",i).data("allowDirectoryChooser",l.allowDirectoryChooser),"function"==typeof l.filter&&u.$filePicker.data("filter",l.filter),void 0===a&&(a=!1),void 0===o&&(o=!1),c()("body").prepend(u.$filePicker),u.$showGridView=c()("button#picker-showgridview"),u.$showGridView.on("click keydown",(function(t){nt(t)&&u._onGridviewChange()})),u._getGridSettings();var f=u.$filePicker.find(".actions.creatable .button-add");r!==u.FILEPICKER_TYPE_CHOOSE||l.allowDirectoryChooser||u.$filePicker.find(".actions.creatable").hide(),f.on("focus",(function(){u.$filePicker.ocdialog("setEnterCallback",(function(t){t.stopImmediatePropagation(),t.preventDefault(),f.click()}))})),f.on("blur",(function(){u.$filePicker.ocdialog("unsetEnterCallback")})),Wt.registerMenu(f,u.$filePicker.find(".menu"),(function(){m.tooltip("hide"),m.focus(),u.$filePicker.ocdialog("setEnterCallback",(function(t){t.stopImmediatePropagation(),t.preventDefault(),u.$filePicker.submit()}));var t=m.val(),e=t.lastIndexOf(".");-1===e&&(e=t.length),m.selectRange(0,e)}));var h=u.$filePicker.find(".filenameform"),m=h.find("input[type='text']"),g=h.find("input[type='submit']");m.on("keydown",(function(t){nt(t)&&(t.stopImmediatePropagation(),t.preventDefault(),h.submit())})),g.on("click",(function(t){t.stopImmediatePropagation(),t.preventDefault(),h.submit()}));h.on("submit",(function(e){if(e.stopPropagation(),e.preventDefault(),function(){var e=m.val();try{if(function(e){var n=e.trim();if("."===n||".."===n)throw t("files",'"{name}" is an invalid file name.',{name:e});if(0===n.length)throw t("files","File name cannot be empty.");if(-1!==n.indexOf("/"))throw t("files",'"/" is not allowed inside a file name.');if(n.match(Wt.config.blacklist_files_regex))throw t("files",'"{name}" is not an allowed filetype',{name:e});return!0}(e)){if(u.filelist.find((function(t){return t.name===this}),e))throw t("files","{newName} already exists",{newName:e},void 0,{escape:!1});return!0}}catch(t){m.attr("title",t),m.tooltip({placement:"right",trigger:"manual",container:".newFolderMenu"}),m.tooltip("_fixTitle"),m.tooltip("show"),m.addClass("error")}return!1}()){var n=m.val();u.filepicker.filesClient.createDirectory(u.$filePicker.data("path")+"/"+n).always((function(t){u._fillFilePicker(u.$filePicker.data("path")+"/"+n,r)})),Wt.hideMenus(),u.$filePicker.ocdialog("unsetEnterCallback"),u.$filePicker.click(),m.val(A)}})),m.on("input",(function(t){m.tooltip("hide")})),u.$filePicker.ready((function(){u.$fileListHeader=u.$filePicker.find(".filelist thead tr"),u.$filelist=u.$filePicker.find(".filelist tbody"),u.$filelistContainer=u.$filePicker.find(".filelist-container"),u.$dirTree=u.$filePicker.find(".dirtree"),u.$dirTree.on("click keydown","div:not(:last-child)",u,(function(t){nt(t)&&u._handleTreeListSelect(t,r)})),u.$filelist.on("click keydown","tr",(function(t){nt(t)&&u._handlePickerClick(t,c()(this),r)})),u.$fileListHeader.on("click keydown","a",(function(t){if(nt(t)){var e=u.$filePicker.data("path");u.filepicker.sortField=c()(t.currentTarget).data("sort"),u.filepicker.sortOrder="asc"===u.filepicker.sortOrder?"desc":"asc",u._fillFilePicker(e,r)}})),u._fillFilePicker(s,r)}));var v=function(t){if(void 0!==n){var e;if(!0===o)e=[],u.$filelist.find("tr.filepicker_element_selected").each((function(t,n){e.push(u.$filePicker.data("path")+"/"+c()(n).data("entryname"))}));else{e=u.$filePicker.data("path");var i=u.$filelist.find("tr.filepicker_element_selected").data("entryname");i&&(e+="/"+i)}n(e,t),u.$filePicker.ocdialog("close")}},C=[];r===ut.FILEPICKER_TYPE_CHOOSE?C.push({text:t("core","Choose"),click:function(){v(ut.FILEPICKER_TYPE_CHOOSE)},defaultButton:!0}):r===ut.FILEPICKER_TYPE_CUSTOM?l.buttons.forEach((function(t){C.push({text:t.text,click:function(){v(t.type)},defaultButton:t.defaultButton})})):(r!==ut.FILEPICKER_TYPE_COPY&&r!==ut.FILEPICKER_TYPE_COPY_MOVE||C.push({text:t("core","Copy"),click:function(){v(ut.FILEPICKER_TYPE_COPY)},defaultButton:!1}),r!==ut.FILEPICKER_TYPE_MOVE&&r!==ut.FILEPICKER_TYPE_COPY_MOVE||C.push({text:t("core","Move"),click:function(){v(ut.FILEPICKER_TYPE_MOVE)},defaultButton:!0})),u.$filePicker.ocdialog({closeOnEscape:!0,width:600,height:500,modal:a,buttons:C,style:{buttons:"aside"},close:function(){try{c()(this).ocdialog("destroy").remove()}catch(t){}u.$filePicker=null}});var b=u.$filePicker.closest(".oc-dialog").find(".primary");-1!==u.$filePicker.data("mimetype").indexOf("httpd/unix-directory")||u.$filePicker.data("allowDirectoryChooser")?b.prop("disabled",!1):b.prop("disabled",!0)})).fail((function(e,n){u.filepicker.loading=!1,0!==e&&alert(t("core","Error loading file picker template: {error}",{error:n}))}))}},message:function(e,n,o,i,a,r,s){return c().when(this._getMessageTemplate()).then((function(l){var u="oc-dialog-"+ut.dialogsCounter+"-content",d="#"+u,A=l.octemplate({dialog_name:u,title:n,message:e,type:o},s?{escapeFunction:""}:{});void 0===r&&(r=!1),c()("body").append(A);var p=[];switch(i){case ut.YES_NO_BUTTONS:p=[{text:t("core","No"),click:function(){void 0!==a&&a(!1),c()(d).ocdialog("close")}},{text:t("core","Yes"),click:function(){void 0!==a&&a(!0),c()(d).ocdialog("close")},defaultButton:!0}];break;case ut.OK_BUTTON:p[0]={text:t("core","OK"),click:function(){c()(d).ocdialog("close"),void 0!==a&&a()},defaultButton:!0};break;default:"object"===at(i)&&i.type===ut.YES_NO_BUTTONS&&(p=[{text:i.cancel||t("core","No"),click:function(){void 0!==a&&a(!1),c()(d).ocdialog("close")}},{text:i.confirm||t("core","Yes"),click:function(){void 0!==a&&a(!0),c()(d).ocdialog("close")},defaultButton:!0,classes:i.confirmClasses}])}c()(d).ocdialog({closeOnEscape:!0,closeCallback:function(){a&&a(!1)},modal:r,buttons:p}),ut.dialogsCounter++})).fail((function(o,i){0===o?alert(n+": "+e):alert(t("core","Error loading message template: {error}",{error:i}))}))},_fileexistsshown:!1,fileexists:function(e,o,i,a){var r=this,s=new(c().Deferred),l=function(t,e,n,o,i){o=Math.round(o),i=Math.round(i);for(var a=t.getContext("2d").getImageData(0,0,e,n),r=t.getContext("2d").getImageData(0,0,o,i),s=a.data,l=r.data,c=e/o,u=n/i,d=Math.ceil(c/2),A=Math.ceil(u/2),p=0;p<i;p++)for(var f=0;f<o;f++){for(var h=4*(f+p*o),m=0,g=0,v=0,C=0,b=0,w=0,y=0,x=(p+.5)*u,k=Math.floor(p*u);k<(p+1)*u;k++)for(var P=Math.abs(x-(k+.5))/A,E=(f+.5)*c,B=P*P,_=Math.floor(f*c);_<(f+1)*c;_++){var O=Math.abs(E-(_+.5))/d,D=Math.sqrt(B+O*O);D>=-1&&D<=1&&(m=2*D*D*D-3*D*D+1)>0&&(y+=m*s[3+(O=4*(_+k*e))],v+=m,s[O+3]<255&&(m=m*s[O+3]/250),C+=m*s[O],b+=m*s[O+1],w+=m*s[O+2],g+=m)}l[h]=C/g,l[h+1]=b/g,l[h+2]=w/g,l[h+3]=y/v}t.getContext("2d").clearRect(0,0,Math.max(e,o),Math.max(n,i)),t.width=o,t.height=i,t.getContext("2d").putImageData(r,0,0)},u=function(n,o,i){var a=n.find(".template").clone().removeClass("template").addClass("conflict"),r=a.find(".original"),s=a.find(".replacement");a.data("data",e),a.find(".filename").text(o.name),r.find(".size").text(Wt.Util.humanFileSize(o.size)),r.find(".mtime").text(Wt.Util.formatDate(o.mtime)),i.size&&i.lastModified&&(s.find(".size").text(Wt.Util.humanFileSize(i.size)),s.find(".mtime").text(Wt.Util.formatDate(i.lastModified)));var u=o.directory+"/"+o.name,d={file:u,x:96,y:96,c:o.etag,forceIcon:0},A=Files.generatePreviewUrl(d);A=A.replace(/'/g,"%27"),r.find(".icon").css({"background-image":"url('"+A+"')"}),function(t){var e=new(c().Deferred),n=t.type&&t.type.split("/").shift();if(window.FileReader&&"image"===n){var o=new FileReader;o.onload=function(t){var n=new Blob([t.target.result]);window.URL=window.URL||window.webkitURL;var o=window.URL.createObjectURL(n),i=new Image;i.src=o,i.onload=function(){var t,n,o,a,r,s,c,u=(t=i,r=document.createElement("canvas"),s=t.width,c=t.height,s>c?(o=0,n=(s-c)/2):(o=(c-s)/2,n=0),a=Math.min(s,c),r.width=a,r.height=a,r.getContext("2d").drawImage(t,n,o,a,a,0,0,a,a),l(r,a,a,96,96),r.toDataURL("image/png",.7));e.resolve(u)}},o.readAsArrayBuffer(t)}else e.reject();return e}(i).then((function(t){s.find(".icon").css("background-image","url("+t+")")}),(function(){u=Wt.MimeType.getIconUrl(i.type),s.find(".icon").css("background-image","url("+u+")")}));var p=n.find(".conflict").length;r.find("input:checkbox").attr("id","checkbox_original_"+p),s.find("input:checkbox").attr("id","checkbox_replacement_"+p),n.append(a),i.lastModified>o.mtime?s.find(".mtime").css("font-weight","bold"):i.lastModified<o.mtime&&r.find(".mtime").css("font-weight","bold"),i.size&&i.size>o.size?s.find(".size").css("font-weight","bold"):i.size&&i.size<o.size&&r.find(".size").css("font-weight","bold"),"readonly"===o.status&&(r.addClass("readonly").find('input[type="checkbox"]').prop("checked",!0).prop("disabled",!0),r.find(".message").text(t("core","read-only")))},d="oc-dialog-fileexists-content",A="#"+d;if(this._fileexistsshown){var p=c()(A+" .conflicts");u(p,o,i);var f=c()(A+" .conflict").length,h=n("core","{count} file conflict","{count} file conflicts",f,{count:f});c()(A).parent().children(".oc-dialog-title").text(h),c()(window).trigger("resize"),s.resolve()}else this._fileexistsshown=!0,c().when(this._getFileExistsTemplate()).then((function(n){var l=t("core","One file conflict"),p=n.octemplate({dialog_name:d,title:l,type:"fileexists",allnewfiles:t("core","New Files"),allexistingfiles:t("core","Already existing files"),why:t("core","Which files do you want to keep?"),what:t("core","If you select both versions, the copied file will have a number added to its name.")});if(c()("body").append(p),o&&i){var f=p.find(".conflicts");u(f,o,i)}var h=[{text:t("core","Cancel"),classes:"cancel",click:function(){void 0!==a.onCancel&&a.onCancel(e),c()(A).ocdialog("close")}},{text:t("core","Continue"),classes:"continue",click:function(){void 0!==a.onContinue&&a.onContinue(c()(A+" .conflict")),c()(A).ocdialog("close")}}];c()(A).ocdialog({width:500,closeOnEscape:!0,modal:!0,buttons:h,closeButton:null,close:function(){r._fileexistsshown=!1;try{c()(this).ocdialog("destroy").remove()}catch(t){}}}),c()(A).css("height","auto");var m=p.closest(".oc-dialog").find("button.continue");function g(){var t=p.find(".conflicts .checkbox:checked").length;m.prop("disabled",0===t)}m.prop("disabled",!0),c()(A).find(".allnewfiles").on("click",(function(){c()(A).find('.conflict .replacement input[type="checkbox"]').prop("checked",c()(this).prop("checked"))})),c()(A).find(".allexistingfiles").on("click",(function(){c()(A).find('.conflict .original:not(.readonly) input[type="checkbox"]').prop("checked",c()(this).prop("checked"))})),c()(A).find(".conflicts").on("click",".replacement,.original:not(.readonly)",(function(){var t=c()(this).find('input[type="checkbox"]');t.prop("checked",!t.prop("checked"))})),c()(A).find(".conflicts").on("click",'.replacement input[type="checkbox"],.original:not(.readonly) input[type="checkbox"]',(function(){var t=c()(this);t.prop("checked",!t.prop("checked"))})),c()(A).on("click",".replacement,.allnewfiles",(function(){var e=c()(A).find('.conflict .replacement input[type="checkbox"]:checked').length;e===c()(A+" .conflict").length?(c()(A).find(".allnewfiles").prop("checked",!0),c()(A).find(".allnewfiles + .count").text(t("core","(all selected)"))):e>0?(c()(A).find(".allnewfiles").prop("checked",!1),c()(A).find(".allnewfiles + .count").text(t("core","({count} selected)",{count:e}))):(c()(A).find(".allnewfiles").prop("checked",!1),c()(A).find(".allnewfiles + .count").text("")),g()})),c()(A).on("click",".original,.allexistingfiles",(function(){var e=c()(A).find('.conflict .original input[type="checkbox"]:checked').length;e===c()(A+" .conflict").length?(c()(A).find(".allexistingfiles").prop("checked",!0),c()(A).find(".allexistingfiles + .count").text(t("core","(all selected)"))):e>0?(c()(A).find(".allexistingfiles").prop("checked",!1),c()(A).find(".allexistingfiles + .count").text(t("core","({count} selected)",{count:e}))):(c()(A).find(".allexistingfiles").prop("checked",!1),c()(A).find(".allexistingfiles + .count").text("")),g()})),s.resolve()})).fail((function(){s.reject(),alert(t("core","Error loading file exists template"))}));return s.promise()},_getGridSettings:function(){var e=this;c().get(Wt.generateUrl("/apps/files/api/v1/showgridview"),(function(n){e.$showGridView.removeClass("icon-toggle-filelist icon-toggle-pictures").addClass(n.gridview?"icon-toggle-filelist":"icon-toggle-pictures"),e.$showGridView.attr("aria-label",n.gridview?t("files","Show list view"):t("files","Show grid view")),c()(".list-container").toggleClass("view-grid",n.gridview)}))},_onGridviewChange:function(){var e=this.$showGridView.hasClass("icon-toggle-filelist");Wt.currentUser&&c().post(Wt.generateUrl("/apps/files/api/v1/showgridview"),{show:!e}),this.$showGridView.removeClass("icon-toggle-filelist icon-toggle-pictures").addClass(e?"icon-toggle-pictures":"icon-toggle-filelist"),this.$showGridView.attr("aria-label",e?t("files","Show grid view"):t("files","Show list view")),this.$filePicker.find(".list-container").toggleClass("view-grid",!e)},_getFilePickerTemplate:function(){var t=c().Deferred();if(this.$filePickerTemplate)t.resolve(this.$filePickerTemplate);else{var e=this;c().get(Wt.filePath("core","templates","filepicker.html"),(function(n){e.$filePickerTemplate=c()(n),e.$listTmpl=e.$filePickerTemplate.find(".filelist tbody tr:first-child").detach(),t.resolve(e.$filePickerTemplate)})).fail((function(e,n,o){t.reject(e.status,o)}))}return t.promise()},_getMessageTemplate:function(){var t=c().Deferred();if(this.$messageTemplate)t.resolve(this.$messageTemplate);else{var e=this;c().get(Wt.filePath("core","templates","message.html"),(function(n){e.$messageTemplate=c()(n),t.resolve(e.$messageTemplate)})).fail((function(e,n,o){t.reject(e.status,o)}))}return t.promise()},_getFileExistsTemplate:function(){var t=c().Deferred();if(this.$fileexistsTemplate)t.resolve(this.$fileexistsTemplate);else{var e=this;c().get(Wt.filePath("files","templates","fileexists.html"),(function(n){e.$fileexistsTemplate=c()(n),t.resolve(e.$fileexistsTemplate)})).fail((function(){t.reject()}))}return t.promise()},_fillFilePicker:(rt=it(regeneratorRuntime.mark((function e(n,o){var i,a,r,s,l,u,d,A;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=this,this.$filelist.empty(),this.$filePicker.find(".emptycontent").hide(),this.$filelistContainer.addClass("icon-loading"),this.$filePicker.data("path",n),a=this.$filePicker.data("mimetype"),r=this.$filePicker.data("filter"),"string"==typeof a&&(a=[a]),i.$fileListHeader.find(".sort-indicator").addClass("hidden").removeClass("icon-triangle-n").removeClass("icon-triangle-s"),i.$fileListHeader.find("[data-sort="+i.filepicker.sortField+"] .sort-indicator").removeClass("hidden"),"asc"===i.filepicker.sortOrder?i.$fileListHeader.find("[data-sort="+i.filepicker.sortField+"] .sort-indicator").addClass("icon-triangle-n"):i.$fileListHeader.find("[data-sort="+i.filepicker.sortField+"] .sort-indicator").addClass("icon-triangle-s"),s=function(){var t=it(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",i.filepicker.filesClient.getFolderContents(e).then((function(t,e){return e})));case 1:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),e.prev=12,e.next=15,s(n);case 15:l=e.sent,e.next=26;break;case 18:return e.prev=18,e.t0=e.catch(12),console.error("Requested path does not exists, falling back to root"),e.next=23,s("/");case 23:l=e.sent,this.$filePicker.data("path","/"),this._changeButtonsText(o,"");case 26:i.filelist=l,a&&a.length>0&&-1===a.indexOf("*")&&(l=l.filter((function(t){return"dir"===t.type||-1!==a.indexOf(t.mimetype)}))),r&&(l=l.filter(r)),null===(u=document.getElementById("showHiddenFiles"))||"1"===u.value||(l=l.filter((function(t){return!t.name.startsWith(".")}))),A=(d={name:function(t,e){return"dir"===t.type&&"dir"!==e.type?-1:"dir"!==t.type&&"dir"===e.type?1:Wt.Util.naturalSortCompare(t.name,e.name)},size:function(t,e){return t.size-e.size},mtime:function(t,e){return t.mtime-e.mtime}})[i.filepicker.sortField]||d.name,l=l.sort((function(t,e){var n=function(t){return t.tags&&t.tags.indexOf(Wt.TAG_FAVORITE)>=0};return n(t)&&!n(e)?-1:!n(t)&&n(e)?1:"asc"===i.filepicker.sortOrder?A(t,e):-A(t,e)})),i._fillSlug(),0===l.length?(i.$filePicker.find(".emptycontent").show(),i.$fileListHeader.hide()):(i.$filePicker.find(".emptycontent").hide(),i.$fileListHeader.show()),i.$filelist.empty(),c().each(l,(function(e,o){var a,r;if(o.isEncrypted&&"httpd/unix-directory"===o.mimetype?o.icon=Wt.MimeType.getIconUrl("dir-encrypted"):o.icon=Wt.MimeType.getIconUrl(o.mimetype),void 0!==o.size&&o.size>=0?(a=Wt.Util.humanFileSize(parseInt(o.size,10),!0),r=Math.round(160-Math.pow(o.size/1048576,2))):(a=t("files","Pending"),r=80),o.name.length>=10)var s=Math.min(Math.floor(o.name.length/2),10),l=o.name.substr(0,o.name.length-s),u=o.name.substr(o.name.length-s);else l=o.name,u="";var d=i.$listTmpl.octemplate({type:o.type,dir:n,filename:o.name,filename1:l,filename2:u,date:Wt.Util.relativeModifiedDate(o.mtime),size:a,sizeColor:r,icon:o.icon});if("file"===o.type){var A={file:n+"/"+o.name,x:100,y:100},p=new Image,f=Wt.generateUrl("/core/preview.png?")+c().param(A);p.onload=function(){p.width>5&&d.find("td.filename").attr("style","background-image:url("+f+")")},p.src=f}i.$filelist.append(d)})),i.$filelistContainer.removeClass("icon-loading");case 40:case"end":return e.stop()}}),e,this,[[12,18]])}))),function(t,e){return rt.apply(this,arguments)}),_fillSlug:function(){var t=this.$dirTree.find(".actions.creatable").detach();this.$dirTree.empty();var e=this;e.$dirTree.append(t);var n=this.$filePicker.data("path"),o=c()('<div data-dir="{dir}" tabindex="0"><a>{name}</a></div>').addClass("crumb");if(n){var i=n.split("/");c().each(i,(function(t,n){if(""===(n=i.pop()))return!1;e.$dirTree.prepend(o.octemplate({dir:i.join("/")+"/"+n,name:n}))}))}o.octemplate({dir:"",name:""},{escapeFunction:null}).prependTo(this.$dirTree)},_handleTreeListSelect:function(t,e){var n=t.data,o=c()(t.target).closest(".crumb").data("dir");n._fillFilePicker(o,e);var i=t.target.closest(".oc-dialog"),a=c()(".primary",i);this._changeButtonsText(e,o.split(/[/]+/).pop()),-1!==this.$filePicker.data("mimetype").indexOf("httpd/unix-directory")||this.$filePicker.data("allowDirectoryChooser")?a.prop("disabled",!1):a.prop("disabled",!0)},_handlePickerClick:function(t,e,n){var o=this.$filePicker.closest(".oc-dialog").find(".primary");"file"===e.data("type")?(!0===this.$filePicker.data("multiselect")&&t.ctrlKey||this.$filelist.find(".filepicker_element_selected").removeClass("filepicker_element_selected"),e.toggleClass("filepicker_element_selected"),o.prop("disabled",!1)):"dir"===e.data("type")&&(this._fillFilePicker(this.$filePicker.data("path")+"/"+e.data("entryname"),n),this._changeButtonsText(n,e.data("entryname")),-1!==this.$filePicker.data("mimetype").indexOf("httpd/unix-directory")||this.$filePicker.data("allowDirectoryChooser")?o.prop("disabled",!1):o.prop("disabled",!0))},_changeButtonsText:function(e,n){var o=""===n?t("core","Copy"):t("core","Copy to {folder}",{folder:n}),i=""===n?t("core","Move"):t("core","Move to {folder}",{folder:n}),a=c()(".oc-dialog-buttonrow button");switch(e){case this.FILEPICKER_TYPE_CHOOSE:case this.FILEPICKER_TYPE_CUSTOM:break;case this.FILEPICKER_TYPE_COPY:a.text(o);break;case this.FILEPICKER_TYPE_MOVE:a.text(i);break;case this.FILEPICKER_TYPE_COPY_MOVE:a.eq(0).text(o),a.eq(1).text(i)}}},dt=ut,At=(st=document,lt=u.j8,ct=st.getElementsByTagName("head")[0].getAttribute("data-requesttoken"),{getToken:function(){return ct},setToken:function(t){lt("csrf-token-update",{token:ct=t})}}),pt=At.getToken,ft=At.setToken,ht=function t(e,n){var o,i,a="";if(this.typelessListeners=[],this.closed=!1,this.listeners={},n)for(o in n)a+=o+"="+encodeURIComponent(n[o])+"&";if(a+="requesttoken="+encodeURIComponent(pt()),this.useFallBack||"undefined"==typeof EventSource){var r="oc_eventsource_iframe_"+t.iframeCount;t.fallBackSources[t.iframeCount]=this,this.iframe=c()("<iframe></iframe>"),this.iframe.attr("id",r),this.iframe.hide(),i="&",-1===e.indexOf("?")&&(i="?"),this.iframe.attr("src",e+i+"fallback=true&fallback_id="+t.iframeCount+"&"+a),c()("body").append(this.iframe),this.useFallBack=!0,t.iframeCount++}else i="&",-1===e.indexOf("?")&&(i="?"),this.source=new EventSource(e+i+a),this.source.onmessage=function(t){for(var e=0;e<this.typelessListeners.length;e++)this.typelessListeners[e](JSON.parse(t.data))}.bind(this);this.listen("__internal__",function(t){"close"===t&&this.close()}.bind(this))};ht.fallBackSources=[],ht.iframeCount=0,ht.fallBackCallBack=function(t,e,n){ht.fallBackSources[t].fallBackCallBack(e,n)},ht.prototype={typelessListeners:[],iframe:null,listeners:{},useFallBack:!1,fallBackCallBack:function(t,e){var n;if(!this.closed)if(t){if(void 0!==this.listeners.done)for(n=0;n<this.listeners[t].length;n++)this.listeners[t][n](e)}else for(n=0;n<this.typelessListeners.length;n++)this.typelessListeners[n](e)},lastLength:0,listen:function(t,e){e&&e.call&&(t?this.useFallBack?(this.listeners[t]||(this.listeners[t]=[]),this.listeners[t].push(e)):this.source.addEventListener(t,(function(t){void 0!==t.data?e(JSON.parse(t.data)):e("")}),!1):this.typelessListeners.push(e))},close:function(){this.closed=!0,void 0!==this.source&&this.source.close()}};var mt=ht,gt=i(42515),vt=null,Ct=null,bt=function(t){if(vt){var e=vt;vt.trigger(new(c().Event)("beforeHide")),vt.slideUp(50,(function(){e.trigger(new(c().Event)("afterHide")),t&&t.apply(this,arguments)}))}c()(".menutoggle").attr("aria-expanded",!1),Ct&&Ct.attr("aria-expanded",!1),c()(".openedMenu").removeClass("openedMenu"),vt=null,Ct=null},wt=!!window._oc_isadmin,yt=i(27856),xt=i.n(yt),kt=i(86834),Pt=i.n(kt),Et=i(46488),Bt=i.n(Et),_t=i(95573),Ot=i.n(_t);window._oc_l10n_registry_translations=window._oc_l10n_registry_translations||{},window._oc_l10n_registry_plural_functions=window._oc_l10n_registry_plural_functions||{};var Dt=function(t){return void 0!==window._oc_l10n_registry_translations[t]&&void 0!==window._oc_l10n_registry_plural_functions[t]},Tt=function(t){return{translations:window._oc_l10n_registry_translations[t]||{},pluralFunction:window._oc_l10n_registry_plural_functions[t]}};function jt(t){return jt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},jt(t)}var It={load:function(t,e){if(Dt(t)||"en"===Wt.getLocale()){var n=c().Deferred(),o=n.promise();return o.then(e),n.resolve(),o}var i=this,a=(0,d.generateFilePath)(t,"l10n",Wt.getLocale()+".json");return c().get(a).then((function(e){e.translations&&i.register(t,e.translations,e.pluralForm)})).then(e)},register:function(t,e){var n,o,i;n=t,o=e,i=this._getPlural,Dt(n)?function(t,e,n){window._oc_l10n_registry_translations[t]=Object.assign(window._oc_l10n_registry_translations[t],e),window._oc_l10n_registry_plural_functions[t]=n}(n,o,i):function(t,e,n){window._oc_l10n_registry_translations[t]=e,window._oc_l10n_registry_plural_functions[t]=n}(n,o,i)},_unregister:function(t){delete window._oc_l10n_registry_translations[t],delete window._oc_l10n_registry_plural_functions[t]},translate:function(t,e,n,o,i){var a=i||{};f.ZP.defaults(a,{escape:!0,sanitize:!0});var r=a.sanitize?xt().sanitize:Bt(),s=a.escape?Ot():Bt(),l=e,c=Tt(t).translations[e];return void 0!==c&&(l=c),"object"===jt(n)||void 0!==o?r(function(t,e,n){return t.replace(/%n/g,n).replace(/{([^{}]*)}/g,(function(t,n){var o=e[n];return r("string"==typeof o||"number"==typeof o?s(o):t)}))}(l,n,o)):r(l)},translatePlural:function(t,e,n,o,i,a){var r="_"+e+"_::_"+n+"_",s=Tt(t),l=s.translations[r];if(void 0!==l){var u=l;if(c().isArray(u)){var d=s.pluralFunction(o);return this.translate(t,u[d],i,o,a)}}return 1===o?this.translate(t,e,i,o,a):this.translate(t,n,i,o,a)},_getPlural:function(t){var e=Wt.getLanguage();if("pt-BR"===e&&(e="xbr"),void 0===e||""===e)return 1===t?0:1;switch(e.length>3&&(e=e.substring(0,e.lastIndexOf("-"))),e){case"az":case"bo":case"dz":case"id":case"ja":case"jv":case"ka":case"km":case"kn":case"ko":case"ms":case"th":case"tr":case"vi":case"zh":default:return 0;case"af":case"bn":case"bg":case"ca":case"da":case"de":case"el":case"en":case"eo":case"es":case"et":case"eu":case"fa":case"fi":case"fo":case"fur":case"fy":case"gl":case"gu":case"ha":case"he":case"hu":case"is":case"it":case"ku":case"lb":case"ml":case"mn":case"mr":case"nah":case"nb":case"ne":case"nl":case"nn":case"no":case"oc":case"om":case"or":case"pa":case"pap":case"ps":case"pt":case"so":case"sq":case"sv":case"sw":case"ta":case"te":case"tk":case"ur":case"zu":return 1===t?0:1;case"am":case"bh":case"fil":case"fr":case"gun":case"hi":case"hy":case"ln":case"mg":case"nso":case"xbr":case"ti":case"wa":return 0===t||1===t?0:1;case"be":case"bs":case"hr":case"ru":case"sh":case"sr":case"uk":return t%10==1&&t%100!=11?0:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?1:2;case"cs":case"sk":return 1===t?0:t>=2&&t<=4?1:2;case"ga":return 1===t?0:2===t?1:2;case"lt":return t%10==1&&t%100!=11?0:t%10>=2&&(t%100<10||t%100>=20)?1:2;case"sl":return t%100==1?0:t%100==2?1:t%100==3||t%100==4?2:3;case"mk":return t%10==1?0:1;case"mt":return 1===t?0:0===t||t%100>1&&t%100<11?1:t%100>10&&t%100<20?2:3;case"lv":return 0===t?0:t%10==1&&t%100!=11?1:2;case"pl":return 1===t?0:t%10>=2&&t%10<=4&&(t%100<12||t%100>14)?1:2;case"cy":return 1===t?0:2===t?1:8===t||11===t?2:3;case"ro":return 1===t?0:0===t||t%100>0&&t%100<20?1:2;case"ar":return 0===t?0:1===t?1:2===t?2:t%100>=3&&t%100<=10?3:t%100>=11&&t%100<=99?4:5}}},zt=It;Pt().registerHelper("t",(function(t,e){return It.translate(t,e)}));var St=i(31352),Nt={startSaving:function(e){this.startAction(e,t("core","Saving …"))},startAction:function(t,e){c()(t).text(e).removeClass("success").removeClass("error").stop(!0,!0).show()},finishedSaving:function(t,e){this.finishedAction(t,e)},finishedAction:function(t,e){"success"===e.status?this.finishedSuccess(t,e.data.message):this.finishedError(t,e.data.message)},finishedSuccess:function(t,e){c()(t).text(e).addClass("success").removeClass("error").stop(!0,!0).delay(3e3).fadeOut(900).show()},finishedError:function(t,e){c()(t).text(e).addClass("error").removeClass("success").show()}},Ut=i(30381),Mt=i.n(Ut),Lt={callback:null,pageLoadTime:null,init:function(){c()(".password-confirm-required").on("click",f.ZP.bind(this.requirePasswordConfirmation,this)),this.pageLoadTime=Mt().now()},requiresPasswordConfirmation:function(){var t=this.pageLoadTime-1e3*window.nc_pageLoad,e=Mt().now()-(t+1e3*window.nc_lastLogin);return window.backendAllowsPasswordConfirmation&&e>18e5},requirePasswordConfirmation:function(e,n,o){n=void 0!==n?n:{};var i={title:t("core","Authentication required"),text:t("core","This action requires you to confirm your password"),confirm:t("core","Confirm"),label:t("core","Password"),error:""},a=f.ZP.extend(i,n),r=this;this.requiresPasswordConfirmation()&&Wt.dialogs.prompt(a.text,a.title,(function(t,e){t&&""!==e?r._confirmPassword(e,a):f.ZP.isFunction(o)&&o()}),!0,a.label,!0).then((function(){var t=c()(".oc-dialog:visible");if(t.find(".ui-icon").remove(),t.addClass("password-confirmation"),""!==a.error){var e=c()("<p></p>").addClass("msg warning").text(a.error);t.find(".oc-dialog-content").append(e)}t.find(".oc-dialog-buttonrow").addClass("aside");var n=t.find("button");n.eq(0).hide(),n.eq(1).text(a.confirm)})),this.callback=e},_confirmPassword:function(e,n){var o=this;c().ajax({url:(0,d.generateUrl)("/login/confirm"),data:{password:e},type:"POST",success:function(t){window.nc_lastLogin=t.lastLogin,f.ZP.isFunction(o.callback)&&o.callback()},error:function(){n.error=t("core","Failed to authenticate, try again"),Wt.PasswordConfirmation.requirePasswordConfirmation(o.callback,n)}})}},Ft=window._theme||{},Rt={_handlers:[],_pushState:function(t,e,n){var o;if(o="string"==typeof t?t:Wt.buildQueryString(t),window.history.pushState){if(e=e||location.pathname+"?"+o,navigator.userAgent.toLowerCase().indexOf("firefox")>-1&&parseInt(navigator.userAgent.split("/").pop())<51)for(var i,a=document.querySelectorAll('[fill^="url(#"], [stroke^="url(#"], [filter^="url(#invert"]'),r=0,s=a.length;r<s;r++)(i=a[r]).style.fill=i.style.fill,i.style.stroke=i.style.stroke,i.removeAttribute("filter"),i.setAttribute("filter","url(#invert)");n?window.history.replaceState(t,"",e):window.history.pushState(t,"",e)}else window.location.hash="?"+o,this._cancelPop=!0},pushState:function(t,e){this._pushState(t,e,!1)},replaceState:function(t,e){this._pushState(t,e,!0)},addOnPopStateHandler:function(t){this._handlers.push(t)},_parseHashQuery:function(){var t=window.location.hash,e=t.indexOf("?");return e>=0?t.substr(e+1):t.length?t.substr(1):""},_decodeQuery:function(t){return t.replace(/\+/g," ")},parseUrlQuery:function(){var t,e=this._parseHashQuery();return e&&(t=Wt.parseQueryString(this._decodeQuery(e))),(t=f.ZP.extend(t||{},Wt.parseQueryString(this._decodeQuery(location.search))))||{}},_onPopState:function(t){var e;if(this._cancelPop)this._cancelPop=!1;else if(this._handlers.length){e=t&&t.state,f.ZP.isString(e)?e=Wt.parseQueryString(e):e||(e=this.parseUrlQuery()||{});for(var n=0;n<this._handlers.length;n++)this._handlers[n](e)}}};function Qt(t){for(var e,n=[],o=0,i=-1,a=0;o<t.length;){e=t.charAt(o);var r=!a&&"."===e||e>="0"&&e<="9";r!==a&&(n[++i]="",a=r),n[i]+=e,o++}return n}var Gt={History:Rt,humanFileSize:i(91770).sS,computerFileSize:function(t){if("string"!=typeof t)return null;var e=t.toLowerCase().trim(),n=null,o=e.match(/^[\s+]?([0-9]*)(\.([0-9]+))?( +)?([kmgtp]?b?)$/i);return null===o?null:(n=parseFloat(e),isFinite(n)?(o[5]&&(n*={b:1,k:1024,kb:1024,mb:1048576,m:1048576,gb:1073741824,g:1073741824,tb:1099511627776,t:1099511627776,pb:0x4000000000000,p:0x4000000000000}[o[5]]),n=Math.round(n)):null)},formatDate:function(t,e){return void 0===window.TESTING&&console.warn("OC.Util.formatDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment"),e=e||"LLL",Mt()(t).format(e)},relativeModifiedDate:function(e){void 0===window.TESTING&&console.warn("OC.Util.relativeModifiedDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment");var n=Mt()().diff(Mt()(e));return n>=0&&n<45e3?t("core","seconds ago"):Mt()(e).fromNow()},getScrollBarWidth:function(){if(this._scrollBarWidth)return this._scrollBarWidth;var t=document.createElement("p");t.style.width="100%",t.style.height="200px";var e=document.createElement("div");e.style.position="absolute",e.style.top="0px",e.style.left="0px",e.style.visibility="hidden",e.style.width="200px",e.style.height="150px",e.style.overflow="hidden",e.appendChild(t),document.body.appendChild(e);var n=t.offsetWidth;e.style.overflow="scroll";var o=t.offsetWidth;return n===o&&(o=e.clientWidth),document.body.removeChild(e),this._scrollBarWidth=n-o,this._scrollBarWidth},stripTime:function(t){return new Date(t.getFullYear(),t.getMonth(),t.getDate())},naturalSortCompare:function(t,e){var n,o=Qt(t),i=Qt(e);for(n=0;o[n]&&i[n];n++)if(o[n]!==i[n]){var a=Number(o[n]),r=Number(i[n]);return a==o[n]&&r==i[n]?a-r:o[n].localeCompare(i[n],Wt.getLanguage())}return o.length-i.length},waitFor:function(t,e){!function n(){!0!==t()&&setTimeout(n,e)}()},isCookieSetToValue:function(t,e){for(var n=document.cookie.split(";"),o=0;o<n.length;o++){var i=n[o].split("=");if(i[0].trim()===t&&i[1].trim()===e)return!0}return!1}},Ht=window._oc_debug,Kt=window._oc_webroot;if(void 0===Kt){var Zt=(Kt=location.pathname).indexOf("/index.php/");Kt=-1!==Zt?Kt.substr(0,Zt):Kt.substr(0,Kt.lastIndexOf("/"))}var Yt,qt=Kt,Wt={coreApps:["","admin","log","core/search","core","3rdparty"],menuSpeed:50,PERMISSION_ALL:31,PERMISSION_CREATE:4,PERMISSION_DELETE:8,PERMISSION_NONE:0,PERMISSION_READ:1,PERMISSION_SHARE:16,PERMISSION_UPDATE:2,TAG_FAVORITE:"_$!<Favorite>!$_",fileIsBlacklisted:function(t){return!!t.match(R.blacklist_files_regex)},addScript:function(t,e,n){var o;console.warn("OC.addScript is deprecated, use OCP.Loader.loadScript instead");var i=(0,d.generateFilePath)(t,"js",e+".js");return A[i]?n&&n():(o=c().Deferred(),c().getScript(i,(function(){return o.resolve()})),A[i]=o),A[i]},addStyle:function(t,e){console.warn("OC.addStyle is deprecated, use OCP.Loader.loadStylesheet instead");var n=(0,d.generateFilePath)(t,"css",e+".css");-1===p.indexOf(n)&&(p.push(n),document.createStyleSheet?document.createStyleSheet(n):(e=c()('<link rel="stylesheet" type="text/css" href="'+n+'"/>'),c()("head").append(e)))},Apps:C,AppConfig:B,appConfig:E,appSettings:function(e){if(console.warn("OC.appSettings is deprecated and will be removed with Nextcloud 18"),void 0===e||void 0===e.appid)throw{name:"MissingParameter",message:"The parameter appid is missing"};var n={scriptName:"settings.php",cache:!0};c().extend(n,e);var o=c()("#appsettings");if(0===o.length)throw{name:"MissingDOMElement",message:'There has be be an element with id "appsettings" for the popup to show.'};var i=c()("#appsettings_popup");if(0===i.length&&(c()("body").prepend('<div class="popup hidden" id="appsettings_popup"></div>'),(i=c()("#appsettings_popup")).addClass(o.hasClass("topright")?"topright":"bottomleft")),i.is(":visible"))i.hide().remove();else{var a=o.hasClass("topright")?"up":"left";c().get((0,d.generateFilePath)(n.appid,"",n.scriptName),(function(e){i.html(e).ready((function(){if(i.prepend('<span class="arrow '+a+'"></span><h2>'+t("core","Settings")+'</h2><a class="close"></a>').show(),i.find(".close").bind("click",(function(){i.remove()})),void 0!==n.loadJS){var e;if(!0===n.loadJS)e="settings.js";else{if("string"!=typeof n.loadJS)throw{name:"InvalidParameter",message:'The "loadJS" parameter must be either boolean or a string.'};e=n.loadJS}n.cache&&c().ajaxSetup({cache:!0}),c().getScript((0,d.generateFilePath)(n.appid,"js",e)).fail((function(t,e,n){throw n}))}})).show()}),"html")}},appswebroots:O,Backbone:L,ContactsMenu:q,config:R,currentUser:V,dialogs:dt,EventSource:mt,getCurrentUser:function(){return{uid:V,displayName:J}},isUserAdmin:function(){return wt},L10N:zt,_ajaxConnectionLostHandler:g,_processAjaxError:function(t){(0!==t.status||"abort"!==t.statusText&&"timeout"!==t.statusText&&!Wt._reloadCalled)&&(f.ZP.contains([302,303,307,401],t.status)&&Wt.currentUser?setTimeout((function(){if(!Wt._userIsNavigatingAway&&!Wt._reloadCalled){var t=0,e=setInterval((function(){m.showUpdate(n("core","Problem loading page, reloading in %n second","Problem loading page, reloading in %n seconds",5-t)),t>=5&&(clearInterval(e),Wt.reload()),t++}),1e3);Wt._reloadCalled=!0}}),100):0===t.status&&setTimeout((function(){Wt._userIsNavigatingAway||Wt._reloadCalled||Wt._ajaxConnectionLostHandler()}),100))},registerXHRForErrorProcessing:function(t){t.addEventListener&&(t.addEventListener("load",(function(){4===t.readyState&&(t.status>=200&&t.status<300||304===t.status||c()(document).trigger(new(c().Event)("ajaxError"),t))})),t.addEventListener("error",(function(){c()(document).trigger(new(c().Event)("ajaxError"),t)})))},getCapabilities:function(){return console.warn("OC.getCapabilities is deprecated and will be removed in Nextcloud 21. See @nextcloud/capabilities"),(0,gt.getCapabilities)()},hideMenus:bt,registerMenu:function(t,e,n,o){e.addClass("menu");var i="A"===t.prop("tagName")||"BUTTON"===t.prop("tagName");t.on(i?"click.menu":"click.menu keyup.menu",(function(i){i.preventDefault(),i.key&&"Enter"!==i.key||(e.is(vt)?bt():(vt&&bt(),!0===o&&e.parent().addClass("openedMenu"),t.attr("aria-expanded",!0),e.slideToggle(50,n),vt=e,Ct=t))}))},showMenu:function(t,e,n){e.is(vt)||(bt(),vt=e,Ct=t,e.trigger(new(c().Event)("beforeShow")),e.show(),e.trigger(new(c().Event)("afterShow")),f.ZP.isFunction(n)&&n())},unregisterMenu:function(t,e){e.is(vt)&&bt(),t.off("click.menu").removeClass("menutoggle"),e.removeClass("menu")},basename:F.EZ,encodePath:F.Ec,dirname:F.XX,isSamePath:F.Mg,joinPaths:F.RQ,getHost:function(){return window.location.host},getHostName:function(){return window.location.hostname},getPort:function(){return window.location.port},getProtocol:function(){return window.location.protocol.split(":")[0]},getCanonicalLocale:St.aj,getLocale:function(){var t;return null!==(t=c()("html").data("locale"))&&void 0!==t?t:"en"},getLanguage:function(){return c()("html").prop("lang")},addTranslations:zt.load,buildQueryString:function(t){return t?c().map(t,(function(t,e){var n=encodeURIComponent(e);return null!=t&&(n+="="+encodeURIComponent(t)),n})).join("&"):""},parseQueryString:function(t){var e,n,o,i={};if(!t)return null;(e=t.indexOf("?"))>=0&&(t=t.substr(e+1));for(var a=t.replace(/\+/g,"%20").split("&"),r=0;r<a.length;r++){var s=a[r];(n=(e=s.indexOf("="))>=0?[s.substr(0,e),s.substr(e+1)]:[s]).length&&(o=decodeURIComponent(n[0]))&&(i[o]=n.length>1?decodeURIComponent(n[1]):null)}return i},msg:Nt,Notification:m,PasswordConfirmation:Lt,Plugins:{_plugins:{},register:function(t,e){var n=this._plugins[t];n||(n=this._plugins[t]=[]),n.push(e)},getPlugins:function(t){return this._plugins[t]||[]},attach:function(t,e,n){for(var o=this.getPlugins(t),i=0;i<o.length;i++)o[i].attach&&o[i].attach(e,n)},detach:function(t,e,n){for(var o=this.getPlugins(t),i=0;i<o.length;i++)o[i].detach&&o[i].detach(e,n)}},theme:Ft,Util:Gt,debug:Ht,filePath:d.generateFilePath,generateUrl:d.generateUrl,get:(Yt=window,function(t){for(var e=t.split("."),n=e.pop(),o=0;o<e.length;o++)if(!(Yt=Yt[e[o]]))return!1;return Yt[n]}),set:function(t){return function(e,n){for(var o=e.split("."),i=o.pop(),a=0;a<o.length;a++)t[o[a]]||(t[o[a]]={}),t=t[o[a]];return t[i]=n,n}}(window),getRootPath:d.getRootUrl,imagePath:d.imagePath,redirect:function(t){window.location=t},reload:function(){window.location.reload()},requestToken:pt(),linkTo:d.linkTo,linkToOCS:function(t,e){return(0,d.generateOcsUrl)(t,{},{ocsVersion:e||1})+"/"},linkToRemote:d.generateRemoteUrl,linkToRemoteBase:function(t){return(0,d.getRootUrl)()+"/remote.php/"+t},webroot:qt};(0,u.Ld)("csrf-token-update",(function(t){OC.requestToken=t.token,console.info("OC.requestToken changed",t.token)}));var Jt=i(79954),Vt=i(45994);function Xt(t,e,n,o,i,a,r){try{var s=t[a](r),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(o,i)}function $t(t){return function(){var e=this,n=arguments;return new Promise((function(o,i){var a=t.apply(e,n);function r(t){Xt(a,o,i,r,s,"next",t)}function s(t){Xt(a,o,i,r,s,"throw",t)}r(void 0)}))}}var te=null,ee=function(){var t=$t(regeneratorRuntime.mark((function t(){var e,n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=(0,d.generateUrl)("/csrftoken"),t.next=3,c().get(e);case 3:return n=t.sent,t.abrupt("return",n.token);case 5:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),ne=function(){var t=$t(regeneratorRuntime.mark((function t(){var e;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,ee();case 3:e=t.sent,ft(e),t.next=10;break;case 7:t.prev=7,t.t0=t.catch(0),console.error("session heartbeat failed",t.t0);case 10:case"end":return t.stop()}}),t,null,[[0,7]])})));return function(){return t.apply(this,arguments)}}(),oe=function(){var t=setInterval(ne,1e3*function(){var t=NaN;return te.session_lifetime&&(t=Math.floor(te.session_lifetime/2)),Math.min(86400,Math.max(60,isNaN(t)?900:t))}());return console.info("session heartbeat polling started"),t},ie=i(20144),ae=i(85750),re=i.n(ae),se={name:"ContactsMenu",components:{Contacts:i(12050).Z,NcHeaderMenu:re()},data:function(){return{contactsMenu:null}},mounted:function(){this.contactsMenu=new Wt.ContactsMenu({el:"#contactsmenu-menu"})},methods:{handleOpen:function(){var t;null===(t=this.contactsMenu)||void 0===t||t.loadContacts()}}},le=i(93379),ce=i.n(le),ue=i(7795),de=i.n(ue),Ae=i(90569),pe=i.n(Ae),fe=i(3565),he=i.n(fe),me=i(19216),ge=i.n(me),ve=i(44589),Ce=i.n(ve),be=i(50893),we={};we.styleTagTransform=Ce(),we.setAttributes=he(),we.insert=pe().bind(null,"head"),we.domAPI=de(),we.insertStyleElement=ge(),ce()(be.Z,we),be.Z&&be.Z.locals&&be.Z.locals;var ye=i(51900),xe=(0,ye.Z)(se,(function(){var t=this,e=t._self._c;return e("NcHeaderMenu",{attrs:{id:"contactsmenu","aria-label":t.t("core","Search contacts")},on:{open:t.handleOpen},scopedSlots:t._u([{key:"trigger",fn:function(){return[e("Contacts",{attrs:{size:20}})]},proxy:!0}])},[t._v(" "),e("div",{attrs:{id:"contactsmenu-menu"}})])}),[],!1,null,"1563c388",null).exports,ke=i(12945),Pe=i.n(ke),Ee=i(76212),Be=i.n(Ee),_e={name:"AppMenu",components:{NcActions:Pe(),NcActionLink:Be()},data:function(){return{apps:(0,Jt.j)("core","apps",{}),appLimit:0,observer:null}},computed:{appList:function(){return Object.values(this.apps)},mainAppList:function(){return this.appList.slice(0,this.appLimit)},popoverAppList:function(){return this.appList.slice(this.appLimit)},appLabel:function(){return function(e){return e.name+(e.active?" ("+t("core","Currently open")+")":"")+(e.unread>0?" ("+n("core","{count} notification","{count} notifications",e.unread,{count:e.unread})+")":"")}}},mounted:function(){this.observer=new ResizeObserver(this.resize),this.observer.observe(this.$el),this.resize(),(0,u.Ld)("nextcloud:app-menu.refresh",this.setApps)},beforeDestroy:function(){this.observer.disconnect(),(0,u.r1)("nextcloud:app-menu.refresh",this.setApps)},methods:{setNavigationCounter:function(t,e){this.$set(this.apps[t],"unread",e)},setApps:function(t){var e=t.apps;this.apps=e},resize:function(){var t=this.$el.offsetWidth,e=Math.floor(t/50)-1;1==this.appList.length-e&&e--,e<1&&(e=0),this.appLimit=e}}},Oe=_e,De=i(9572),Te={};Te.styleTagTransform=Ce(),Te.setAttributes=he(),Te.insert=pe().bind(null,"head"),Te.domAPI=de(),Te.insertStyleElement=ge(),ce()(De.Z,Te),De.Z&&De.Z.locals&&De.Z.locals;var je=(0,ye.Z)(Oe,(function(){var t=this,e=t._self._c;return e("nav",{staticClass:"app-menu"},[e("ul",{staticClass:"app-menu-main"},t._l(t.mainAppList,(function(n){return e("li",{key:n.id,staticClass:"app-menu-entry",class:{"app-menu-entry__active":n.active},attrs:{"data-app-id":n.id}},[e("a",{class:{"has-unread":n.unread>0},attrs:{href:n.href,"aria-label":t.appLabel(n),title:n.name,"aria-current":!!n.active&&"page",target:n.target?"_blank":void 0,rel:n.target?"noopener noreferrer":void 0}},[e("img",{attrs:{src:n.icon,alt:""}}),t._v(" "),e("div",{staticClass:"app-menu-entry--label"},[t._v("\n\t\t\t\t\t"+t._s(n.name)+"\n\t\t\t\t\t"),n.unread>0?e("span",{staticClass:"hidden-visually unread-counter"},[t._v(t._s(n.unread))]):t._e()])])])})),0),t._v(" "),e("NcActions",{staticClass:"app-menu-more",attrs:{"aria-label":t.t("core","More apps")}},t._l(t.popoverAppList,(function(n){return e("NcActionLink",{key:n.id,staticClass:"app-menu-popover-entry",attrs:{"aria-label":t.appLabel(n),"aria-current":!!n.active&&"page",href:n.href},scopedSlots:t._u([{key:"icon",fn:function(){return[e("div",{staticClass:"app-icon",class:{"has-unread":n.unread>0}},[e("img",{attrs:{src:n.icon,alt:""}})])]},proxy:!0}],null,!0)},[t._v("\n\t\t\t"+t._s(n.name)+"\n\t\t\t"),n.unread>0?e("span",{staticClass:"hidden-visually unread-counter"},[t._v(t._s(n.unread))]):t._e()])})),1)],1)}),[],!1,null,"44a795f6",null).exports,Ie=i(75925),ze=i.n(Ie),Se=i(64192),Ne=i.n(Se),Ue=(0,Jt.j)("core","versionHash",""),Me={name:"UserMenuEntry",components:{NcLoadingIcon:Ne()},props:{id:{type:String,required:!0},name:{type:String,required:!0},href:{type:String,required:!0},active:{type:Boolean,required:!0},icon:{type:String,required:!0}},data:function(){return{loading:!1}},computed:{cachedIcon:function(){return"".concat(this.icon,"?v=").concat(Ue)}},methods:{handleClick:function(){this.loading=!0}}},Le=i(88951),Fe={};Fe.styleTagTransform=Ce(),Fe.setAttributes=he(),Fe.insert=pe().bind(null,"head"),Fe.domAPI=de(),Fe.insertStyleElement=ge(),ce()(Le.Z,Fe),Le.Z&&Le.Z.locals&&Le.Z.locals;var Re=(0,ye.Z)(Me,(function(){var t=this,e=t._self._c;return e("li",{staticClass:"menu-entry",attrs:{id:t.id}},[t.href?e("a",{class:{active:t.active},attrs:{href:t.href},on:{click:function(e){return e.ctrlKey||e.shiftKey||e.altKey||e.metaKey?null:t.handleClick.apply(null,arguments)}}},[t.loading?e("NcLoadingIcon",{staticClass:"menu-entry__loading-icon",attrs:{size:18}}):e("img",{attrs:{src:t.cachedIcon,alt:""}}),t._v("\n\t\t"+t._s(t.name)+"\n\t")],1):e("button",[e("img",{attrs:{src:t.cachedIcon,alt:""}}),t._v("\n\t\t"+t._s(t.name)+"\n\t")])])}),[],!1,null,"6e59d13c",null),Qe=Re.exports,Ge=(0,Jt.j)("core","settingsNavEntries",[]),He={name:"UserMenu",components:{NcAvatar:ze(),NcHeaderMenu:re(),UserMenuEntry:Qe},data:function(){var t;return{settingsNavEntries:Ge,userId:null===(t=(0,Vt.ts)())||void 0===t?void 0:t.uid}},mounted:function(){(0,u.j8)("core:user-menu:mounted")}},Ke=i(71445),Ze={};Ze.styleTagTransform=Ce(),Ze.setAttributes=he(),Ze.insert=pe().bind(null,"head"),Ze.domAPI=de(),Ze.insertStyleElement=ge(),ce()(Ke.Z,Ze),Ke.Z&&Ke.Z.locals&&Ke.Z.locals;var Ye=(0,ye.Z)(He,(function(){var t=this,e=t._self._c;return e("NcHeaderMenu",{staticClass:"user-menu",attrs:{id:"user-menu","aria-label":t.t("core","Open settings menu")},scopedSlots:t._u([{key:"trigger",fn:function(){return[e("NcAvatar",{staticClass:"user-menu__avatar",attrs:{"disable-menu":!0,"disable-tooltip":!0,user:t.userId}})]},proxy:!0}])},[t._v(" "),e("nav",{staticClass:"user-menu__nav",attrs:{"aria-label":t.t("core","Settings menu")}},[e("ul",t._l(t.settingsNavEntries,(function(n){return e("UserMenuEntry",t._b({key:n.id},"UserMenuEntry",n,!1))})),1)])])}),[],!1,null,"6a818bbc",null).exports,qe={zh:"zh-cn",zh_Hans:"zh-cn",zh_Hans_CN:"zh-cn",zh_Hans_HK:"zh-cn",zh_Hans_MO:"zh-cn",zh_Hans_SG:"zh-cn",zh_Hant:"zh-hk",zh_Hant_HK:"zh-hk",zh_Hant_MO:"zh-mo",zh_Hant_TW:"zh-tw"},We=Wt.getLocale();Object.prototype.hasOwnProperty.call(qe,We)&&(We=qe[We]),Mt().locale(We);var Je,Ve=function(){var t;if(c()(window).on("unload.main",(function(){Wt._unloadCalled=!0})),c()(window).on("beforeunload.main",(function(){setTimeout((function(){Wt._userIsNavigatingAway=!0,setTimeout((function(){Wt._unloadCalled||(Wt._userIsNavigatingAway=!1)}),1e4)}),1)})),c()(document).on("ajaxError.main",(function(t,e,n){n&&n.allowAuthErrors||Wt._processAjaxError(e)})),function(){if(function(){try{te=(0,Jt.j)("core","config")}catch(t){te=Wt.config}}(),function(){if(te.auto_logout&&(0,Vt.ts)()){var t=Date.now();window.addEventListener("mousemove",(function(e){t=Date.now(),localStorage.setItem("lastActive",t)})),window.addEventListener("touchstart",(function(e){t=Date.now(),localStorage.setItem("lastActive",t)})),window.addEventListener("storage",(function(e){"lastActive"===e.key&&(t=e.newValue)})),setInterval((function(){var e=Date.now()-1e3*te.session_lifetime;if(t<e){console.info("Inactivity timout reached, logging out");var n=(0,d.generateUrl)("/logout")+"?requesttoken="+encodeURIComponent(pt());window.location=n}}),1e3)}}(),void 0===te.session_keepalive||te.session_keepalive){var t=oe();window.addEventListener("online",$t(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return console.info("browser is online again, resuming heartbeat"),t=oe(),e.prev=2,e.next=5,ne();case 5:console.info("session token successfully updated after resuming network"),(0,u.j8)("networkOnline",{success:!0}),e.next=13;break;case 9:e.prev=9,e.t0=e.catch(2),console.error("could not update session token after resuming network",e.t0),(0,u.j8)("networkOnline",{success:!1});case 13:case"end":return e.stop()}}),e,null,[[2,9]])})))),window.addEventListener("offline",(function(){console.info("browser is offline, stopping heartbeat"),(0,u.j8)("networkOffline",{}),clearInterval(t),console.info("session heartbeat polling stopped")}))}else console.info("session heartbeat disabled")}(),Wt.registerMenu(c()("#expand"),c()("#expanddiv"),!1,!0),c()(document).on("mouseup.closemenus",(function(t){var e=c()(t.target);if(e.closest(".menu").length||e.closest(".menutoggle").length)return!1;Wt.hideMenus()})),function(){ie.ZP.mixin({methods:{t:St.Iu,n:St.uN}});var t=document.getElementById("header-left__appmenu");if(t){var e=new(ie.ZP.extend(je))({}).$mount(t);Object.assign(OC,{setNavigationCounter:function(t,n){e.setNavigationCounter(t,n)}})}}(),(t=document.getElementById("user-menu"))&&new ie.ZP({el:t,render:function(t){return t(Ye)}}),function(){var t=document.getElementById("contactsmenu");t&&new ie.ZP({el:t,render:function(t){return t(xe)}})}(),c()("#app-navigation").length&&!c()("html").hasClass("lte9")&&!c()("#app-content").hasClass("no-snapper")){var e=new Snap({element:document.getElementById("app-content"),disable:"right",maxPosition:300,minDragDistance:100});c()("#app-content").prepend('<div id="app-navigation-toggle" class="icon-menu" style="display:none" tabindex="0"></div>');var n=!1;e.on("animating",(function(){n=!0})),e.on("animated",(function(){n=!1})),e.on("start",(function(){n=!0})),e.on("end",(function(){n=!1}));var o=e.open,i=e.close,a=function(){n||"closed"!==e.state().state||o("left")},r=function(){n||"closed"===e.state().state||i()};window.TESTING||(e.open=function(){f.ZP.defer(a)},e.close=function(){f.ZP.defer(r)}),c()("#app-navigation-toggle").click((function(t){"left"!==e.state().state&&e.open()})),c()("#app-navigation-toggle").keypress((function(t){"left"===e.state().state?e.close():e.open()})),c()("#app-navigation").delegate("a, :button","click",(function(t){var n=c()(t.target);n.is(".app-navigation-noclose")||n.closest(".app-navigation-noclose").length||n.is(".app-navigation-entry-utils-menu-button")||n.closest(".app-navigation-entry-utils-menu-button").length||n.is(".add-new")||n.closest(".add-new").length||n.is("#app-settings")||n.closest("#app-settings").length||e.close()}));var s=!1,l=!0,A=!1;Wt.allowNavigationBarSlideGesture=function(){l=!0,A&&(e.enable(),s=!0,A=!1)},Wt.disallowNavigationBarSlideGesture=function(){l=!1,s&&(e.disable(!0),s=!1,A=!0)};var p=function(){c()(window).width()>1024?(e.close(),e.disable(),s=!1,A=!1):l?(e.enable(),s=!0,A=!1):A=!0};c()(window).resize(f.ZP.debounce(p,250)),p()}setInterval((function(){c()(".live-relative-timestamp").each((function(){var t=parseInt(c()(this).attr("data-timestamp"),10);c()(this).text(Mt()(t).fromNow())}))}),3e4),Lt.init()},Xe=(i(49226),i(41704),i(78312),i(22634),i(3682));c().prototype.tooltip=(Je=c().prototype.tooltip,function(t){try{return Je.call(this,t)}catch(e){if(e instanceof TypeError&&"destroy"===t)return void 0===window.TESTING&&console.error("Deprecated call $.tooltip('destroy') has been deprecated and should be removed"),Je.call(this,"dispose");if(e instanceof TypeError&&"fixTitle"===t)return void 0===window.TESTING&&console.error("Deprecated call $.tooltip('fixTitle') has been deprecated and should be removed"),Je.call(this,"_fixTitle")}});var $e=i(42152),tn=i.n($e),en=i(99560),nn=i.n(en),on=(i(18553),i(34140),i(75693),i(99205),i(38554),/(\s|^)(https?:\/\/)((?:[-A-Z0-9+_]+\.)+[-A-Z]+(?:\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*)(\s|$)/gi);function an(t){return this.formatLinksRich(t)}function rn(t){return this.formatLinksPlain(t)}function sn(t){return t.replace(on,(function(t,e,n,o,i){var a=o;return n?"http://"===n&&(a=n+o):n="https://",e+'<a class="external" target="_blank" rel="noopener noreferrer" href="'+n+o+'">'+a+"</a>"+i}))}function ln(t){var e=c()("<div></div>").html(t);return e.find("a").each((function(){var t=c()(this);t.html(t.attr("href"))})),e.html()}function cn(e){var n=(e=e||{}).dismiss||{};c().ajax({type:"GET",url:e.url||(0,d.generateOcsUrl)("core/whatsnew?format=json"),success:e.success||function(e,o,i){!function(e,n,o,i){if(console.debug("querying Whats New data was successful: "+n),console.debug(e),200===o.status){var a,r,s,l,c=document.createElement("div");c.classList.add("popovermenu","open","whatsNewPopover","menu-left");var u=document.createElement("ul");for(var d in a=document.createElement("li"),(r=document.createElement("span")).className="menuitem",(s=document.createElement("span")).innerText=t("core","New in")+" "+e.ocs.data.product,s.className="caption",r.appendChild(s),(l=document.createElement("span")).className="icon-close",l.onclick=function(){un(e.ocs.data.version,i)},r.appendChild(l),a.appendChild(r),u.appendChild(a),e.ocs.data.whatsNew.regular){var A=e.ocs.data.whatsNew.regular[d];a=document.createElement("li"),(r=document.createElement("span")).className="menuitem",(l=document.createElement("span")).className="icon-checkmark",r.appendChild(l),(s=document.createElement("p")).innerHTML=f.ZP.escape(A),r.appendChild(s),a.appendChild(r),u.appendChild(a)}f.ZP.isUndefined(e.ocs.data.changelogURL)||(a=document.createElement("li"),(r=document.createElement("a")).href=e.ocs.data.changelogURL,r.rel="noreferrer noopener",r.target="_blank",(l=document.createElement("span")).className="icon-link",r.appendChild(l),(s=document.createElement("span")).innerText=t("core","View changelog"),r.appendChild(s),a.appendChild(r),u.appendChild(a)),c.appendChild(u),document.body.appendChild(c)}}(e,o,i,n)},error:e.error||dn})}function un(t,e){e=e||{},c().ajax({type:"POST",url:e.url||(0,d.generateOcsUrl)("core/whatsnew"),data:{version:encodeURIComponent(t)},success:e.success||An,error:e.error||pn}),c()(".whatsNewPopover").remove()}function dn(t,e,n){console.debug("querying Whats New Data resulted in an error: "+e+n),console.debug(t)}function An(t){}function pn(t){console.debug("dismissing Whats New data resulted in an error: "+t)}var fn,hn,mn,gn,vn={},Cn={},bn={},wn={loadScript:function(t,e){var n=t+e;return Object.prototype.hasOwnProperty.call(Cn,n)?Promise.resolve():(Cn[n]=!0,new Promise((function(n,o){var i=OC.filePath(t,"js",e),a=document.createElement("script");a.src=i,a.setAttribute("nonce",btoa(OC.requestToken)),a.onload=function(){return n()},a.onerror=function(){return o(new Error("Failed to load script from ".concat(i)))},document.head.appendChild(a)})))},loadStylesheet:function(t,e){var n=t+e;return Object.prototype.hasOwnProperty.call(bn,n)?Promise.resolve():(bn[n]=!0,new Promise((function(n,o){var i=OC.filePath(t,"css",e),a=document.createElement("link");a.href=i,a.type="text/css",a.rel="stylesheet",a.onload=function(){return n()},a.onerror=function(){return o(new Error("Failed to load stylesheet from ".concat(i)))},document.head.appendChild(a)})))}},yn={success:function(t,e){return(0,h.s$)(t,e)},warning:function(t,e){return(0,h.K2)(t,e)},error:function(t,e){return(0,h.x2)(t,e)},info:function(t,e){return(0,h.JQ)(t,e)},message:function(t,e){return(0,h.PV)(t,e)}},xn={Accessibility:{disableKeyboardShortcuts:function(){return(0,Jt.j)("theming","shortcutsDisabled",!1)}},AppConfig:a,Collaboration:{registerType:function(t,e){vn[t]=e},trigger:function(t){return vn[t].action()},getTypes:function(){return Object.keys(vn)},getIcon:function(t){return vn[t].typeIconClass||""},getLabel:function(t){return Ot()(vn[t].typeString||t)},getLink:function(t,e){return void 0!==vn[t]?vn[t].link(e):""}},Comments:r,InitialState:{loadState:Jt.j},Loader:wn,Toast:yn,WhatsNew:s},kn=function(){void 0===window.TESTING&&console.warn.apply(console,arguments)},Pn=function(t,e,n){(Array.isArray(t)?t:[t]).forEach((function(t){void 0!==window[t]&&delete window[t],Object.defineProperty(window,t,{get:function(){return kn(n?"".concat(t," is deprecated: ").concat(n):"".concat(t," is deprecated")),e()}})}))};window._=f.ZP,Pn(["$","jQuery"],(function(){return c()}),"The global jQuery is deprecated. It will be removed in a later versions without another warning. Please ship your own."),Pn("autosize",(function(){return Xe.Z}),"please ship your own, this will be removed in Nextcloud 20"),Pn("Backbone",(function(){return T()}),"please ship your own, this will be removed in Nextcloud 20"),Pn(["Clipboard","ClipboardJS"],(function(){return tn()}),"please ship your own, this will be removed in Nextcloud 20"),window.dav=j.dav,Pn("Handlebars",(function(){return Pt()}),"please ship your own, this will be removed in Nextcloud 20"),Pn("md5",(function(){return nn()}),"please ship your own, this will be removed in Nextcloud 20"),Pn("moment",(function(){return Mt()}),"please ship your own, this will be removed in Nextcloud 20"),window.OC=Wt,Pn("initCore",(function(){return Ve}),"this is an internal function"),Pn("oc_appswebroots",(function(){return Wt.appswebroots}),"use OC.appswebroots instead, this will be removed in Nextcloud 20"),Pn("oc_config",(function(){return Wt.config}),"use OC.config instead, this will be removed in Nextcloud 20"),Pn("oc_current_user",(function(){return Wt.getCurrentUser().uid}),"use OC.getCurrentUser().uid instead, this will be removed in Nextcloud 20"),Pn("oc_debug",(function(){return Wt.debug}),"use OC.debug instead, this will be removed in Nextcloud 20"),Pn("oc_defaults",(function(){return Wt.theme}),"use OC.theme instead, this will be removed in Nextcloud 20"),Pn("oc_isadmin",Wt.isUserAdmin,"use OC.isUserAdmin() instead, this will be removed in Nextcloud 20"),Pn("oc_requesttoken",(function(){return pt()}),"use OC.requestToken instead, this will be removed in Nextcloud 20"),Pn("oc_webroot",(function(){return Wt.webroot}),"use OC.getRootPath() instead, this will be removed in Nextcloud 20"),Pn("OCDialogs",(function(){return Wt.dialogs}),"use OC.dialogs instead, this will be removed in Nextcloud 20"),window.OCP=xn,window.OCA=et,c().fn.select2=(fn=c().fn.select2,hn="select2",19,mn=fn,gn=function(){return kn("The ".concat(hn," library is deprecated! It will be removed in nextcloud ").concat(19,".")),mn.apply(this,arguments)},Object.assign(gn,mn),gn),window.t=f.ZP.bind(Wt.L10N.translate,Wt.L10N),window.n=f.ZP.bind(Wt.L10N.translatePlural,Wt.L10N),c().fn.avatar=function(t,e,n,o,i,a){var r=function(t){t.imageplaceholder("?"),t.css("background-color","#b9b9b9")};if(void 0!==t&&(t=String(t)),void 0!==a&&(a=String(a)),void 0===e&&(e=this.height()>0?this.height():this.data("size")>0?this.data("size"):64),this.height(e),this.width(e),void 0===t){if(void 0===this.data("user"))return void r(this);t=this.data("user")}t=String(t).replace(/\//g,"");var s,l=this;s=t===Wt.getCurrentUser().uid?Wt.generateUrl("/avatar/{user}/{size}?v={version}",{user:t,size:Math.ceil(e*window.devicePixelRatio),version:oc_userconfig.avatar.version}):Wt.generateUrl("/avatar/{user}/{size}",{user:t,size:Math.ceil(e*window.devicePixelRatio)});var c=new Image;c.onload=function(){l.clearimageplaceholder(),l.append(c),"function"==typeof i&&i()},c.onerror=function(){l.clearimageplaceholder(),void 0!==a?l.imageplaceholder(t,a):r(l),"function"==typeof i&&i()},e<32?l.addClass("icon-loading-small"):l.addClass("icon-loading"),c.width=e,c.height=e,c.src=s,c.alt=""};var En=i(47078);c().fn.contactsMenu=function(e,n,o){if(-1!==[0,4,6].indexOf(n)){var i=this;o.append('<div class="menu popovermenu menu-left hidden contactsmenu-popover"> <ul> <li> <a> <span class="icon-loading-small"></span> </a> </li> </ul></div>');var a=o.find("div.contactsmenu-popover");i.on("click keydown",(function(o){if(nt(o)){if(!a.hasClass("hidden"))return a.addClass("hidden"),void a.hide();a.removeClass("hidden"),a.show(),a.hasClass("loaded")||(a.addClass("loaded"),c().ajax(Wt.generateUrl("/contactsmenu/findOne"),{method:"POST",data:{shareType:n,shareWith:e}}).then((function(e){a.find("ul").find("li").addClass("hidden"),(e.topAction?[e.topAction].concat(e.actions):[{hyperlink:"#",title:t("core","No action available")}]).forEach((function(t){a.find("ul").append(En(t))})),i.trigger("load")}),(function(e){var n;a.find("ul").find("li").addClass("hidden"),n=404===e.status?t("core","No action available"):t("core","Error fetching contact actions"),a.find("ul").append(En({hyperlink:"#",title:n})),i.trigger("loaderror",e)})))}})),c()(document).click((function(t){var e=a.has(t.target).length>0,n=i.has(t.target).length>0;i.each((function(){c()(this).is(t.target)&&(n=!0)})),e||n||(a.addClass("hidden"),a.hide())}))}},c().fn.exists=function(){return this.length>0},c().fn.filterAttr=function(t,e){return this.filter((function(){return c()(this).attr(t)===e}))},c().widget("oc.ocdialog",{options:{width:"auto",height:"auto",closeButton:!0,closeOnEscape:!0,closeCallback:null,modal:!1},_create:function(){var t=this;this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,height:this.element[0].style.height},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this.$dialog=c()('<div class="oc-dialog"></div>').attr({tabIndex:-1,role:"dialog"}).insertBefore(this.element),this.$dialog.append(this.element.detach()),this.element.removeAttr("title").addClass("oc-dialog-content").appendTo(this.$dialog),1===t.element.find("input").length&&t.element.find("input").on("keydown",(function(e){if(nt(e)&&t.$buttonrow){var n=t.$buttonrow.find("button.primary");n&&!n.prop("disabled")&&n.click()}})),this.$dialog.css({display:"inline-block",position:"fixed"}),this.enterCallback=null,c()(document).on("keydown keyup",(function(e){if(e.target===t.$dialog.get(0)||0!==t.$dialog.find(c()(e.target)).length)return 27===e.keyCode&&"keydown"===e.type&&t.options.closeOnEscape?(e.stopImmediatePropagation(),t.close(),!1):13===e.keyCode?(e.stopImmediatePropagation(),null!==t.enterCallback?(t.enterCallback(),e.preventDefault(),!1):"keyup"===e.type&&(e.preventDefault(),!1)):void 0})),this._setOptions(this.options),this._createOverlay()},_init:function(){this.$dialog.focus(),this._trigger("open")},_setOption:function(t,e){var n=this;switch(t){case"title":if(this.$title)this.$title.text(e);else{var o=c()('<h2 class="oc-dialog-title">'+e+"</h2>");this.$title=o.prependTo(this.$dialog)}this._setSizes();break;case"buttons":if(this.$buttonrow)this.$buttonrow.empty();else{var i=c()('<div class="oc-dialog-buttonrow"></div>');this.$buttonrow=i.appendTo(this.$dialog)}1===e.length?this.$buttonrow.addClass("onebutton"):2===e.length?this.$buttonrow.addClass("twobuttons"):3===e.length&&this.$buttonrow.addClass("threebuttons"),c().each(e,(function(t,e){var o=c()("<button>").text(e.text);e.classes&&o.addClass(e.classes),e.defaultButton&&(o.addClass("primary"),n.$defaultButton=o),n.$buttonrow.append(o),o.on("click keydown",(function(t){nt(t)&&e.click.apply(n.element[0],arguments)}))})),this.$buttonrow.find("button").on("focus",(function(t){n.$buttonrow.find("button").removeClass("primary"),c()(this).addClass("primary")})),this._setSizes();break;case"style":void 0!==e.buttons&&this.$buttonrow.addClass(e.buttons);break;case"closeButton":if(e){var a=c()('<a class="oc-dialog-close" tabindex="0"></a>');this.$dialog.prepend(a),a.on("click keydown",(function(t){nt(t)&&(n.options.closeCallback&&n.options.closeCallback(),n.close())}))}else this.$dialog.find(".oc-dialog-close").remove();break;case"width":this.$dialog.css("width",e);break;case"height":this.$dialog.css("height",e);break;case"close":this.closeCB=e}c().Widget.prototype._setOption.apply(this,arguments)},_setOptions:function(t){c().Widget.prototype._setOptions.apply(this,arguments)},_setSizes:function(){var t=0;this.$title&&(t+=this.$title.outerHeight(!0)),this.$buttonrow&&(t+=this.$buttonrow.outerHeight(!0)),this.element.css({height:"calc(100% - "+t+"px)"})},_createOverlay:function(){if(this.options.modal){var t=this,e=c()("#content");0===e.length&&(e=c()(".content")),this.overlay=c()("<div>").addClass("oc-dialog-dim").appendTo(e),this.overlay.on("click keydown keyup",(function(e){e.target!==t.$dialog.get(0)&&0===t.$dialog.find(c()(e.target)).length&&(e.preventDefault(),e.stopPropagation())}))}},_destroyOverlay:function(){this.options.modal&&this.overlay&&(this.overlay.off("click keydown keyup"),this.overlay.remove(),this.overlay=null)},widget:function(){return this.$dialog},setEnterCallback:function(t){this.enterCallback=t},unsetEnterCallback:function(){this.enterCallback=null},close:function(){this._destroyOverlay();var t=this;setTimeout((function(){t._trigger("close",t)}),200),t.$dialog.remove(),this.destroy()},destroy:function(){this.$title&&this.$title.remove(),this.$buttonrow&&this.$buttonrow.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),this.element.removeClass("oc-dialog-content").css(this.originalCss).detach().insertBefore(this.$dialog),this.$dialog.remove()}});var Bn={init:function(t,e,n){if(this.vars=t,this.options=c().extend({},this.options,e),this.elem=n,"function"==typeof this.options.escapeFunction)for(var o=Object.keys(this.vars),i=0;i<o.length;i++)"string"==typeof this.vars[o[i]]&&(this.vars[o[i]]=this.options.escapeFunction(this.vars[o[i]]));var a=this._build(this.vars);return c()(a)},_build:function(t){var e="text/template"===this.elem.attr("type")?this.elem.html():this.elem.get(0).outerHTML;try{return e.replace(/{([^{}]*)}/g,(function(e,n){var o=t[n];return"string"==typeof o||"number"==typeof o?o:e}))}catch(t){console.error(t,"data:",e)}},options:{escapeFunction:Ot()}};c().fn.octemplate=function(t,e){if(t=t||{},this.length)return Object.create(Bn).init(t,e,this)};var _n=function(t){var e=t.toLowerCase();function n(t,e,n){this.r=t,this.g=e,this.b=n}function o(t,e,o){var i=[];i.push(e);for(var a=function(t,e){var n=new Array(3);return n[0]=(e[1].r-e[0].r)/t,n[1]=(e[1].g-e[0].g)/t,n[2]=(e[1].b-e[0].b)/t,n}(t,[e,o]),r=1;r<t;r++){var s=parseInt(e.r+a[0]*r),l=parseInt(e.g+a[1]*r),c=parseInt(e.b+a[2]*r);i.push(new n(s,l,c))}return i}null===e.match(/^([0-9a-f]{4}-?){8}$/)&&(e=nn()(e)),e=e.replace(/[^0-9a-f]/g,"");var i=new n(182,70,157),a=new n(221,203,85),r=new n(0,130,201),s=o(6,i,a),l=o(6,a,r),c=o(6,r,i);return s.concat(l).concat(c)[function(t,e){for(var n=0,o=[],i=0;i<t.length;i++)o.push(parseInt(t.charAt(i),16)%16);for(var a in o)n+=o[a];return parseInt(parseInt(n)%18)}(e)]};String.prototype.toRgb=function(){return console.warn("String.prototype.toRgb is deprecated! It will be removed in Nextcloud 22."),_n(this)},c().fn.imageplaceholder=function(t,e,n){e=e||t;var o=_n(t);this.css("background-color","rgb("+o.r+", "+o.g+", "+o.b+")");var i=this.height()||n||32;if(this.height(i),this.width(i),this.css("color","#fff"),this.css("font-weight","normal"),this.css("text-align","center"),this.css("line-height",i+"px"),this.css("font-size",.55*i+"px"),null!==t&&t.length){var a=e.replace(/\s+/g," ").trim().split(" ",2).map((function(t){return t[0].toUpperCase()})).join("");this.html(a)}},c().fn.clearimageplaceholder=function(){this.css("background-color",""),this.css("color",""),this.css("font-weight",""),this.css("text-align",""),this.css("line-height",""),this.css("font-size",""),this.html(""),this.removeClass("icon-loading"),this.removeClass("icon-loading-small")},c()(document).on("ajaxSend",(function(t,e,n){!1===n.crossDomain&&(e.setRequestHeader("requesttoken",pt()),e.setRequestHeader("OCS-APIREQUEST","true"))})),c().fn.selectRange=function(t,e){return this.each((function(){if(this.setSelectionRange)this.focus(),this.setSelectionRange(t,e);else if(this.createTextRange){var n=this.createTextRange();n.collapse(!0),n.moveEnd("character",e),n.moveStart("character",t),n.select()}}))},c().fn.extend({showPassword:function(t){var e={fn:null,args:{}};e.fn=t;var n=function(t,e){e.val(t.val())},o=function(t,e,o){t.is(":checked")?(n(e,o),o.show(),e.hide()):(n(o,e),o.hide(),e.show())};return this.each((function(){var t=c()(this),i=c()(t.data("typetoggle")),a=function(t){var e=c()(t),n=c()("<input />");return n.attr({type:"text",class:e.attr("class"),style:e.attr("style"),size:e.attr("size"),name:e.attr("name")+"-clone",tabindex:e.attr("tabindex"),autocomplete:"off"}),void 0!==e.attr("placeholder")&&n.attr("placeholder",e.attr("placeholder")),n}(t);a.insertAfter(t),e.fn&&(e.args.input=t,e.args.checkbox=i,e.args.clone=a),i.bind("click",(function(){o(i,t,a)})),t.bind("keyup",(function(){n(t,a)})),a.bind("keyup",(function(){n(a,t),t.trigger("keyup")})),a.bind("blur",(function(){t.trigger("focusout")})),o(i,t,a),a.closest("form").submit((function(t){a.prop("type","password")})),e.fn&&e.fn(e.args)}))}}),c().ui.autocomplete.prototype._resizeMenu=function(){this.menu.element.outerWidth(this.element.outerWidth())};var On=i(12448),Dn={};Dn.styleTagTransform=Ce(),Dn.setAttributes=he(),Dn.insert=pe().bind(null,"head"),Dn.domAPI=de(),Dn.insertStyleElement=ge(),ce()(On.Z,Dn),On.Z&&On.Z.locals&&On.Z.locals;var Tn=i(72417),jn={};jn.styleTagTransform=Ce(),jn.setAttributes=he(),jn.insert=pe().bind(null,"head"),jn.domAPI=de(),jn.insertStyleElement=ge(),ce()(Tn.Z,jn),Tn.Z&&Tn.Z.locals&&Tn.Z.locals,c().ajaxSetup({contents:{script:!1}}),c().globalEval=function(){},window.addEventListener("DOMContentLoaded",(function(){var t;Ve(),0===(t=c()("[data-apps-slide-toggle]")).length&&c()("#app-navigation").addClass("without-app-settings"),c()(document).click((function(e){v&&(t=c()("[data-apps-slide-toggle]")),t.each((function(t,n){var o=c()(n).data("apps-slide-toggle"),i=c()(o);function a(){i.slideUp(4*OC.menuSpeed,(function(){i.trigger(new(c().Event)("hide"))})),i.removeClass("opened"),c()(n).removeClass("opened")}if(!i.is(":animated"))if(c()(n).is(c()(e.target).closest("[data-apps-slide-toggle]")))i.is(":visible")?a():function(){i.slideDown(4*OC.menuSpeed,(function(){i.trigger(new(c().Event)("show"))})),i.addClass("opened"),c()(n).addClass("opened");var t=c()(o+" [autofocus]");1===t.length&&t.focus()}();else{var r=c()(e.target).closest(o);i.is(":visible")&&r[0]!==i[0]&&a()}}))})),window.history.pushState?window.onpopstate=_.bind(Wt.Util.History._onPopState,Wt.Util.History):c()(window).on("hashchange",_.bind(Wt.Util.History._onPopState,Wt.Util.History))}))},12448:function(t,e,n){"use strict";var o=n(87537),i=n.n(o),a=n(23645),r=n.n(a),s=n(61667),l=n.n(s),c=new URL(n(58188),n.b),u=new URL(n(40337),n.b),d=new URL(n(33178),n.b),A=new URL(n(12081),n.b),p=new URL(n(47868),n.b),f=r()(i()),h=l()(c),m=l()(u),g=l()(d),v=l()(A),C=l()(p);f.push([t.id,".ui-widget-content{border:1px solid var(--color-border);background:var(--color-main-background) none;color:var(--color-main-text)}.ui-widget-content a{color:var(--color-main-text)}.ui-widget-header{border:none;color:var(--color-main-text);background-image:none}.ui-widget-header a{color:var(--color-main-text)}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid var(--color-border);background:var(--color-main-background) none;font-weight:bold;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #ddd;background:var(--color-main-background) none;font-weight:bold;color:var(--color-main-text)}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:var(--color-main-text)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid var(--color-primary);background:var(--color-main-background) none;font-weight:bold;color:var(--color-main-text)}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:var(--color-main-text)}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid var(--color-main-background);background:var(--color-main-background) none;color:var(--color-text-light);font-weight:600}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:var(--color-text-lighter)}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:var(--color-error);background:var(--color-error) none;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-state-default .ui-icon{background-image:url("+h+")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("+h+")}.ui-state-active .ui-icon{background-image:url("+h+")}.ui-state-highlight .ui-icon{background-image:url("+m+")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("+g+")}.ui-icon.ui-icon-none{display:none}.ui-widget-overlay{background:#666 url("+v+") 50% 50% repeat;opacity:.5}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url("+C+") 50% 50% repeat-x;opacity:.2;border-radius:5px}.ui-tabs{border:none}.ui-tabs .ui-tabs-nav.ui-corner-all{border-bottom-left-radius:0;border-bottom-right-radius:0}.ui-tabs .ui-tabs-nav{background:none;margin-bottom:15px}.ui-tabs .ui-tabs-nav .ui-state-default{border:none;border-bottom:1px solid rgba(0,0,0,0);font-weight:normal;margin:0 !important;padding:0 !important}.ui-tabs .ui-tabs-nav .ui-state-hover,.ui-tabs .ui-tabs-nav .ui-state-active{border:none;border-bottom:1px solid var(--color-main-text);color:var(--color-main-text)}.ui-tabs .ui-tabs-nav .ui-state-hover a,.ui-tabs .ui-tabs-nav .ui-state-hover a:link,.ui-tabs .ui-tabs-nav .ui-state-hover a:hover,.ui-tabs .ui-tabs-nav .ui-state-hover a:visited,.ui-tabs .ui-tabs-nav .ui-state-active a,.ui-tabs .ui-tabs-nav .ui-state-active a:link,.ui-tabs .ui-tabs-nav .ui-state-active a:hover,.ui-tabs .ui-tabs-nav .ui-state-active a:visited{color:var(--color-main-text)}.ui-tabs .ui-tabs-nav .ui-state-active{font-weight:bold}.ui-autocomplete.ui-menu{padding:0}.ui-autocomplete.ui-menu.item-count-1,.ui-autocomplete.ui-menu.item-count-2{overflow-y:hidden}.ui-autocomplete.ui-menu .ui-menu-item a{color:var(--color-text-lighter);display:block;padding:4px 4px 4px 14px}.ui-autocomplete.ui-menu .ui-menu-item a.ui-state-focus,.ui-autocomplete.ui-menu .ui-menu-item a.ui-state-active{box-shadow:inset 4px 0 var(--color-primary-element);color:var(--color-main-text)}.ui-autocomplete.ui-widget-content{background:var(--color-main-background);border-top:none}.ui-autocomplete.ui-corner-all{border-radius:0;border-bottom-left-radius:var(--border-radius);border-bottom-right-radius:var(--border-radius)}.ui-autocomplete .ui-state-hover,.ui-autocomplete .ui-widget-content .ui-state-hover,.ui-autocomplete .ui-widget-header .ui-state-hover,.ui-autocomplete .ui-state-focus,.ui-autocomplete .ui-widget-content .ui-state-focus,.ui-autocomplete .ui-widget-header .ui-state-focus{border:1px solid rgba(0,0,0,0);background:inherit;color:var(--color-primary-element)}.ui-autocomplete .ui-menu-item a{border-radius:0 !important}.ui-button.primary{background-color:var(--color-primary);color:var(--color-primary-text);border:1px solid var(--color-primary-text)}.ui-button:hover{font-weight:bold !important}.ui-draggable-handle,.ui-selectable{touch-action:pan-y}","",{version:3,sources:["webpack://./core/src/jquery/css/jquery-ui-fixes.scss"],names:[],mappings:"AAEA,mBACC,oCAAA,CACA,4CAAA,CACA,4BAAA,CAED,qBACC,4BAAA,CAED,kBACC,WAAA,CACA,4BAAA,CACA,qBAAA,CAED,oBACC,4BAAA,CAKD,2FAGC,oCAAA,CACA,4CAAA,CACA,gBAAA,CACA,UAAA,CAED,yEAGC,UAAA,CAED,0KAMC,qBAAA,CACA,4CAAA,CACA,gBAAA,CACA,4BAAA,CAED,2FAIC,4BAAA,CAED,wFAGC,qCAAA,CACA,4CAAA,CACA,gBAAA,CACA,4BAAA,CAED,sEAGC,4BAAA,CAKD,iGAGC,6CAAA,CACA,4CAAA,CACA,6BAAA,CACA,eAAA,CAED,uGAGC,+BAAA,CAED,qFAGC,yBAAA,CACA,kCAAA,CACA,UAAA,CAED,2FAGC,UAAA,CAED,oGAGC,UAAA,CAKD,2BACC,wDAAA,CAED,kDAEC,wDAAA,CAED,0BACC,wDAAA,CAED,6BACC,wDAAA,CAED,uDAEC,wDAAA,CAED,sBACC,YAAA,CAMD,mBACC,sEAAA,CACA,UAAA,CAED,kBACC,oBAAA,CACA,WAAA,CACA,wEAAA,CACA,UAAA,CACA,iBAAA,CAID,SACC,WAAA,CAEA,oCACC,2BAAA,CACA,4BAAA,CAGD,sBACC,eAAA,CACA,kBAAA,CAEA,wCACC,WAAA,CACA,qCAAA,CACA,kBAAA,CACA,mBAAA,CACA,oBAAA,CAGD,6EAEC,WAAA,CACA,8CAAA,CACA,4BAAA,CACA,0WACC,4BAAA,CAGF,uCACC,gBAAA,CAOF,yBACC,SAAA,CAIA,4EAEC,iBAAA,CAGD,yCACC,+BAAA,CACA,aAAA,CACA,wBAAA,CAEA,iHACC,mDAAA,CACA,4BAAA,CAKH,mCACC,uCAAA,CACA,eAAA,CAGD,+BACC,eAAA,CACA,8CAAA,CACA,+CAAA,CAGD,gRAKC,8BAAA,CACA,kBAAA,CACA,kCAAA,CAIA,iCACC,0BAAA,CAKH,mBACC,qCAAA,CACA,+BAAA,CACA,0CAAA,CAID,iBACI,2BAAA,CAKJ,oCAEC,kBAAA",sourcesContent:["/* Component containers\n----------------------------------*/\n.ui-widget-content {\n\tborder: 1px solid var(--color-border);\n\tbackground: var(--color-main-background) none;\n\tcolor: var(--color-main-text);\n}\n.ui-widget-content a {\n\tcolor: var(--color-main-text);\n}\n.ui-widget-header {\n\tborder: none;\n\tcolor: var(--color-main-text);\n\tbackground-image: none;\n}\n.ui-widget-header a {\n\tcolor: var(--color-main-text);\n}\n\n/* Interaction states\n----------------------------------*/\n.ui-state-default,\n.ui-widget-content .ui-state-default,\n.ui-widget-header .ui-state-default {\n\tborder: 1px solid var(--color-border);\n\tbackground: var(--color-main-background) none;\n\tfont-weight: bold;\n\tcolor: #555;\n}\n.ui-state-default a,\n.ui-state-default a:link,\n.ui-state-default a:visited {\n\tcolor: #555;\n}\n.ui-state-hover,\n.ui-widget-content .ui-state-hover,\n.ui-widget-header .ui-state-hover,\n.ui-state-focus,\n.ui-widget-content .ui-state-focus,\n.ui-widget-header .ui-state-focus {\n\tborder: 1px solid #ddd;\n\tbackground: var(--color-main-background) none;\n\tfont-weight: bold;\n\tcolor: var(--color-main-text);\n}\n.ui-state-hover a,\n.ui-state-hover a:hover,\n.ui-state-hover a:link,\n.ui-state-hover a:visited {\n\tcolor: var(--color-main-text);\n}\n.ui-state-active,\n.ui-widget-content .ui-state-active,\n.ui-widget-header .ui-state-active {\n\tborder: 1px solid var(--color-primary);\n\tbackground: var(--color-main-background) none;\n\tfont-weight: bold;\n\tcolor: var(--color-main-text);\n}\n.ui-state-active a,\n.ui-state-active a:link,\n.ui-state-active a:visited {\n\tcolor: var(--color-main-text);\n}\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-highlight,\n.ui-widget-content .ui-state-highlight,\n.ui-widget-header .ui-state-highlight {\n\tborder: 1px solid var(--color-main-background);\n\tbackground: var(--color-main-background) none;\n\tcolor: var(--color-text-light);\n\tfont-weight: 600;\n}\n.ui-state-highlight a,\n.ui-widget-content .ui-state-highlight a,\n.ui-widget-header .ui-state-highlight a {\n\tcolor: var(--color-text-lighter);\n}\n.ui-state-error,\n.ui-widget-content .ui-state-error,\n.ui-widget-header .ui-state-error {\n\tborder: var(--color-error);\n\tbackground: var(--color-error) none;\n\tcolor: #ffffff;\n}\n.ui-state-error a,\n.ui-widget-content .ui-state-error a,\n.ui-widget-header .ui-state-error a {\n\tcolor: #ffffff;\n}\n.ui-state-error-text,\n.ui-widget-content .ui-state-error-text,\n.ui-widget-header .ui-state-error-text {\n\tcolor: #ffffff;\n}\n\n/* Icons\n----------------------------------*/\n.ui-state-default .ui-icon {\n\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\n}\n.ui-state-hover .ui-icon,\n.ui-state-focus .ui-icon {\n\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\n}\n.ui-state-active .ui-icon {\n\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\n}\n.ui-state-highlight .ui-icon {\n\tbackground-image: url('images/ui-icons_ffffff_256x240.png');\n}\n.ui-state-error .ui-icon,\n.ui-state-error-text .ui-icon {\n\tbackground-image: url('images/ui-icons_ffd27a_256x240.png');\n}\n.ui-icon.ui-icon-none {\n\tdisplay: none;\n}\n\n/* Misc visuals\n----------------------------------*/\n/* Overlays */\n.ui-widget-overlay {\n\tbackground: #666666 url('images/ui-bg_diagonals-thick_20_666666_40x40.png') 50% 50% repeat;\n\topacity: .5;\n}\n.ui-widget-shadow {\n\tmargin: -5px 0 0 -5px;\n\tpadding: 5px;\n\tbackground: #000000 url('images/ui-bg_flat_10_000000_40x100.png') 50% 50% repeat-x;\n\topacity: .2;\n\tborder-radius: 5px;\n}\n\n/* Tabs customizations */\n.ui-tabs {\n\tborder: none;\n\n\t.ui-tabs-nav.ui-corner-all {\n\t\tborder-bottom-left-radius: 0;\n\t\tborder-bottom-right-radius: 0;\n\t}\n\n\t.ui-tabs-nav {\n\t\tbackground: none;\n\t\tmargin-bottom: 15px;\n\n\t\t.ui-state-default {\n\t\t\tborder: none;\n\t\t\tborder-bottom: 1px solid transparent;\n\t\t\tfont-weight: normal;\n\t\t\tmargin: 0 !important;\n\t\t\tpadding: 0 !important;\n\t\t}\n\n\t\t.ui-state-hover,\n\t\t.ui-state-active {\n\t\t\tborder: none;\n\t\t\tborder-bottom: 1px solid var(--color-main-text);\n\t\t\tcolor: var(--color-main-text);\n\t\t\ta, a:link, a:hover, a:visited {\n\t\t\t\tcolor: var(--color-main-text);\n\t\t\t}\n\t\t}\n\t\t.ui-state-active {\n\t\t\tfont-weight: bold;\n\t\t}\n\t}\n}\n\n/* Select menus */\n.ui-autocomplete {\n\t&.ui-menu {\n\t\tpadding: 0;\n\n\t\t/* scrolling starts from three items,\n\t\t * so hide overflow and scrollbars for a clean layout */\n\t\t&.item-count-1,\n\t\t&.item-count-2 {\n\t\t\toverflow-y: hidden;\n\t\t}\n\n\t\t.ui-menu-item a {\n\t\t\tcolor: var(--color-text-lighter);\n\t\t\tdisplay: block;\n\t\t\tpadding: 4px 4px 4px 14px;\n\n\t\t\t&.ui-state-focus, &.ui-state-active {\n\t\t\t\tbox-shadow: inset 4px 0 var(--color-primary-element);\n\t\t\t\tcolor: var(--color-main-text);\n\t\t\t}\n\t\t}\n\t}\n\n\t&.ui-widget-content {\n\t\tbackground: var(--color-main-background);\n\t\tborder-top: none;\n\t}\n\n\t&.ui-corner-all {\n\t\tborder-radius: 0;\n\t\tborder-bottom-left-radius: var(--border-radius);\n\t\tborder-bottom-right-radius: var(--border-radius);\n\t}\n\n\t.ui-state-hover, .ui-widget-content .ui-state-hover,\n\t.ui-widget-header .ui-state-hover,\n\t.ui-state-focus,\n\t.ui-widget-content .ui-state-focus,\n\t.ui-widget-header .ui-state-focus {\n\t\tborder: 1px solid transparent;\n\t\tbackground: inherit;\n\t\tcolor: var(--color-primary-element);\n\t}\n\n\t.ui-menu-item {\n\t\ta {\n\t\t\tborder-radius: 0 !important;\n\t\t}\n\t}\n}\n\n.ui-button.primary {\n\tbackground-color: var(--color-primary);\n\tcolor: var(--color-primary-text);\n\tborder: 1px solid var(--color-primary-text);\n}\n\n// fix ui-buttons on hover\n.ui-button:hover {\n font-weight:bold !important;\n}\n\n\n/* DRAGGABLE */\n.ui-draggable-handle,\n.ui-selectable {\n\ttouch-action: pan-y;\n}\n"],sourceRoot:""}]),e.Z=f},72417:function(t,e,n){"use strict";var o=n(87537),i=n.n(o),a=n(23645),r=n.n(a)()(i());r.push([t.id,".oc-dialog{background:var(--color-main-background);color:var(--color-text-light);border-radius:var(--border-radius-large);box-shadow:0 0 30px var(--color-box-shadow);padding:24px;z-index:10000;font-size:100%;box-sizing:border-box;min-width:200px;top:50%;left:50%;transform:translate(-50%, -50%);max-height:calc(100% - 20px);max-width:calc(100% - 20px);overflow:auto}.oc-dialog-title{background:var(--color-main-background)}.oc-dialog-buttonrow{position:relative;display:flex;background:rgba(0,0,0,0);right:0;bottom:0;padding:0;padding-top:10px;box-sizing:border-box;width:100%;background-image:linear-gradient(rgba(255, 255, 255, 0), var(--color-main-background))}.oc-dialog-buttonrow.twobuttons{justify-content:space-between}.oc-dialog-buttonrow.onebutton,.oc-dialog-buttonrow.twobuttons.aside{justify-content:flex-end}.oc-dialog-buttonrow button{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:44px;min-width:44px}.oc-dialog-close{position:absolute;top:0;right:0;padding:25px;background:var(--icon-close-dark) no-repeat center;opacity:.5;border-radius:var(--border-radius-pill)}.oc-dialog-close:hover,.oc-dialog-close:focus,.oc-dialog-close:active{opacity:1}.oc-dialog-dim{background-color:#000;opacity:.2;z-index:9999;position:fixed;top:0;left:0;width:100%;height:100%}body.theme--dark .oc-dialog-dim{opacity:.8}.oc-dialog-content{width:100%;max-width:550px}.oc-dialog.password-confirmation .oc-dialog-content{width:auto}.oc-dialog.password-confirmation .oc-dialog-content input[type=password]{width:100%}.oc-dialog.password-confirmation .oc-dialog-content label{display:none}","",{version:3,sources:["webpack://./core/src/jquery/css/jquery.ocdialog.scss"],names:[],mappings:"AAAA,WACC,uCAAA,CACA,6BAAA,CACA,wCAAA,CACA,2CAAA,CACA,YAAA,CACA,aAAA,CACA,cAAA,CACA,qBAAA,CACA,eAAA,CACA,OAAA,CACA,QAAA,CACA,+BAAA,CACA,4BAAA,CACA,2BAAA,CACA,aAAA,CAED,iBACC,uCAAA,CAED,qBACC,iBAAA,CACA,YAAA,CACA,wBAAA,CACA,OAAA,CACA,QAAA,CACA,SAAA,CACA,gBAAA,CACA,qBAAA,CACA,UAAA,CACA,sFAAA,CAEA,gCACO,6BAAA,CAGP,qEAEC,wBAAA,CAGD,4BACI,kBAAA,CACA,eAAA,CACH,sBAAA,CACA,WAAA,CACA,cAAA,CAIF,iBACC,iBAAA,CACA,KAAA,CACA,OAAA,CACA,YAAA,CACA,kDAAA,CACA,UAAA,CACA,uCAAA,CAEA,sEAGC,SAAA,CAIF,eACC,qBAAA,CACA,UAAA,CACA,YAAA,CACA,cAAA,CACA,KAAA,CACA,MAAA,CACA,UAAA,CACA,WAAA,CAGD,gCACC,UAAA,CAGD,mBACC,UAAA,CACA,eAAA,CAIA,oDACC,UAAA,CAEA,yEACC,UAAA,CAED,0DACC,YAAA",sourcesContent:[".oc-dialog {\n\tbackground: var(--color-main-background);\n\tcolor: var(--color-text-light);\n\tborder-radius: var(--border-radius-large);\n\tbox-shadow: 0 0 30px var(--color-box-shadow);\n\tpadding: 24px;\n\tz-index: 10000;\n\tfont-size: 100%;\n\tbox-sizing: border-box;\n\tmin-width: 200px;\n\ttop: 50%;\n\tleft: 50%;\n\ttransform: translate(-50%, -50%);\n\tmax-height: calc(100% - 20px);\n\tmax-width: calc(100% - 20px);\n\toverflow: auto;\n}\n.oc-dialog-title {\n\tbackground: var(--color-main-background);\n}\n.oc-dialog-buttonrow {\n\tposition: relative;\n\tdisplay: flex;\n\tbackground: transparent;\n\tright: 0;\n\tbottom: 0;\n\tpadding: 0;\n\tpadding-top: 10px;\n\tbox-sizing: border-box;\n\twidth: 100%;\n\tbackground-image: linear-gradient(rgba(255, 255, 255, 0.0), var(--color-main-background));\n\n\t&.twobuttons {\n justify-content: space-between;\n }\n\n\t&.onebutton,\n\t&.twobuttons.aside {\n\t\tjustify-content: flex-end;\n\t}\n\n\tbutton {\n\t white-space: nowrap;\n\t overflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\theight: 44px;\n\t\tmin-width: 44px;\n\t}\n}\n\n.oc-dialog-close {\n\tposition: absolute;\n\ttop: 0;\n\tright: 0;\n\tpadding: 25px;\n\tbackground: var(--icon-close-dark) no-repeat center;\n\topacity: .5;\n\tborder-radius: var(--border-radius-pill);\n\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\topacity: 1;\n\t}\n}\n\n.oc-dialog-dim {\n\tbackground-color: #000;\n\topacity: .2;\n\tz-index: 9999;\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n}\n\nbody.theme--dark .oc-dialog-dim {\n\topacity: .8;\n}\n\n.oc-dialog-content {\n\twidth: 100%;\n\tmax-width: 550px;\n}\n\n.oc-dialog.password-confirmation {\n\t.oc-dialog-content {\n\t\twidth: auto;\n\n\t\tinput[type=password] {\n\t\t\twidth: 100%;\n\t\t}\n\t\tlabel {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),e.Z=r},9572:function(t,e,n){"use strict";var o=n(87537),i=n.n(o),a=n(23645),r=n.n(a)()(i());r.push([t.id,'.app-menu[data-v-44a795f6]{width:100%;display:flex;flex-shrink:1;flex-wrap:wrap}.app-menu-main[data-v-44a795f6]{display:flex;flex-wrap:nowrap}.app-menu-main .app-menu-entry[data-v-44a795f6]{width:50px;height:50px;position:relative;display:flex;opacity:.7;filter:var(--background-image-invert-if-bright)}.app-menu-main .app-menu-entry.app-menu-entry__active[data-v-44a795f6]{opacity:1}.app-menu-main .app-menu-entry.app-menu-entry__active[data-v-44a795f6]::before{content:" ";position:absolute;pointer-events:none;border-bottom-color:var(--color-main-background);transform:translateX(-50%);width:12px;height:5px;border-radius:3px;background-color:var(--color-primary-text);left:50%;bottom:6px;display:block;transition:all .1s ease-in-out;opacity:1}.app-menu-main .app-menu-entry.app-menu-entry__active .app-menu-entry--label[data-v-44a795f6]{font-weight:bold}.app-menu-main .app-menu-entry a[data-v-44a795f6]{width:calc(100% - 4px);height:calc(100% - 4px);margin:2px;color:var(--color-primary-text);position:relative}.app-menu-main .app-menu-entry img[data-v-44a795f6]{transition:margin .1s ease-in-out;width:20px;height:20px;padding:calc((100% - 20px)/2);box-sizing:content-box}.app-menu-main .app-menu-entry .app-menu-entry--label[data-v-44a795f6]{opacity:0;position:absolute;font-size:12px;color:var(--color-primary-text);text-align:center;bottom:-5px;left:50%;top:45%;display:block;min-width:100%;transform:translateX(-50%);transition:all .1s ease-in-out;width:100%;text-overflow:ellipsis;overflow:hidden;letter-spacing:-0.5px}.app-menu-main .app-menu-entry[data-v-44a795f6]:hover,.app-menu-main .app-menu-entry[data-v-44a795f6]:focus-within{opacity:1}.app-menu-main .app-menu-entry:hover .app-menu-entry--label[data-v-44a795f6],.app-menu-main .app-menu-entry:focus-within .app-menu-entry--label[data-v-44a795f6]{opacity:1;font-weight:bolder;bottom:0;width:100%;text-overflow:ellipsis;overflow:hidden}.app-menu-main[data-v-44a795f6]:hover,.app-menu-main[data-v-44a795f6]:focus-within,.app-menu-main .app-menu-entry[data-v-44a795f6]:hover,.app-menu-main .app-menu-entry[data-v-44a795f6]:focus{opacity:1}.app-menu-main:hover img[data-v-44a795f6],.app-menu-main:focus-within img[data-v-44a795f6],.app-menu-main .app-menu-entry:hover img[data-v-44a795f6],.app-menu-main .app-menu-entry:focus img[data-v-44a795f6]{margin-top:-8px}.app-menu-main:hover .app-menu-entry--label[data-v-44a795f6],.app-menu-main:focus-within .app-menu-entry--label[data-v-44a795f6],.app-menu-main .app-menu-entry:hover .app-menu-entry--label[data-v-44a795f6],.app-menu-main .app-menu-entry:focus .app-menu-entry--label[data-v-44a795f6]{opacity:1;bottom:0}.app-menu-main[data-v-44a795f6]:hover::before,.app-menu-main:hover .app-menu-entry[data-v-44a795f6]::before,.app-menu-main[data-v-44a795f6]:focus-within::before,.app-menu-main:focus-within .app-menu-entry[data-v-44a795f6]::before,.app-menu-main .app-menu-entry[data-v-44a795f6]:hover::before,.app-menu-main .app-menu-entry:hover .app-menu-entry[data-v-44a795f6]::before,.app-menu-main .app-menu-entry[data-v-44a795f6]:focus::before,.app-menu-main .app-menu-entry:focus .app-menu-entry[data-v-44a795f6]::before{opacity:0}[data-v-44a795f6] .app-menu-more .button-vue--vue-tertiary{color:var(--color-primary-text);opacity:.7;margin:3px;filter:var(--background-image-invert-if-bright)}[data-v-44a795f6] .app-menu-more .button-vue--vue-tertiary:hover{opacity:1;background-color:rgba(0,0,0,0) !important}[data-v-44a795f6] .app-menu-more .button-vue--vue-tertiary:focus-visible{opacity:1;outline:none !important}.app-menu-popover-entry .app-icon[data-v-44a795f6]{position:relative;height:44px}.app-menu-popover-entry .app-icon.has-unread[data-v-44a795f6]::after{background-color:var(--color-main-text)}.app-menu-popover-entry .app-icon img[data-v-44a795f6]{width:20px;height:20px;padding:15px}.has-unread[data-v-44a795f6]::after{content:"";width:8px;height:8px;background-color:var(--color-primary-text);border-radius:50%;position:absolute;display:block;top:10px;right:10px}.unread-counter[data-v-44a795f6]{display:none}',"",{version:3,sources:["webpack://./core/src/components/AppMenu.vue"],names:[],mappings:"AAGA,2BACC,UAAA,CACA,YAAA,CACA,aAAA,CACA,cAAA,CAED,gCACC,YAAA,CACA,gBAAA,CAEA,gDACC,UAAA,CACA,WAAA,CACA,iBAAA,CACA,YAAA,CACA,UAAA,CACA,+CAAA,CAEA,uEACC,SAAA,CAEA,+EACC,WAAA,CACA,iBAAA,CACA,mBAAA,CACA,gDAAA,CACA,0BAAA,CACA,UAAA,CACA,UAAA,CACA,iBAAA,CACA,0CAAA,CACA,QAAA,CACA,UAAA,CACA,aAAA,CACA,8BAAA,CACA,SAAA,CAGD,8FACC,gBAAA,CAIF,kDACC,sBAAA,CACA,uBAAA,CACA,UAAA,CACA,+BAAA,CACA,iBAAA,CAGD,oDACC,iCAAA,CACA,UAvDgB,CAwDhB,WAxDgB,CAyDhB,6BAAA,CACA,sBAAA,CAGD,uEACC,SAAA,CACA,iBAAA,CACA,cAAA,CACA,+BAAA,CACA,iBAAA,CACA,WAAA,CACA,QAAA,CACA,OAAA,CACA,aAAA,CACA,cAAA,CACA,0BAAA,CACA,8BAAA,CACA,UAAA,CACA,sBAAA,CACA,eAAA,CACA,qBAAA,CAGD,mHAEC,SAAA,CACA,iKACC,SAAA,CACA,kBAAA,CACA,QAAA,CACA,UAAA,CACA,sBAAA,CACA,eAAA,CAOH,+LAIC,SAAA,CAEA,+MACC,eAAA,CAGD,2RACC,SAAA,CACA,QAAA,CAGD,8fACC,SAAA,CAKH,2DACC,+BAAA,CACA,UAAA,CACA,UAAA,CACA,+CAAA,CAEA,iEACC,SAAA,CACA,yCAAA,CAGD,yEACC,SAAA,CACA,uBAAA,CAKD,mDACC,iBAAA,CACA,WAAA,CAEA,qEACC,uCAAA,CAGD,uDACC,UAhJgB,CAiJhB,WAjJgB,CAkJhB,YAAA,CAKH,oCACC,UAAA,CACA,SAAA,CACA,UAAA,CACA,0CAAA,CACA,iBAAA,CACA,iBAAA,CACA,aAAA,CACA,QAAA,CACA,UAAA,CAGD,iCACC,YAAA",sourcesContent:['\n$header-icon-size: 20px;\n\n.app-menu {\n\twidth: 100%;\n\tdisplay: flex;\n\tflex-shrink: 1;\n\tflex-wrap: wrap;\n}\n.app-menu-main {\n\tdisplay: flex;\n\tflex-wrap: nowrap;\n\n\t.app-menu-entry {\n\t\twidth: 50px;\n\t\theight: 50px;\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t\topacity: .7;\n\t\tfilter: var(--background-image-invert-if-bright);\n\n\t\t&.app-menu-entry__active {\n\t\t\topacity: 1;\n\n\t\t\t&::before {\n\t\t\t\tcontent: " ";\n\t\t\t\tposition: absolute;\n\t\t\t\tpointer-events: none;\n\t\t\t\tborder-bottom-color: var(--color-main-background);\n\t\t\t\ttransform: translateX(-50%);\n\t\t\t\twidth: 12px;\n\t\t\t\theight: 5px;\n\t\t\t\tborder-radius: 3px;\n\t\t\t\tbackground-color: var(--color-primary-text);\n\t\t\t\tleft: 50%;\n\t\t\t\tbottom: 6px;\n\t\t\t\tdisplay: block;\n\t\t\t\ttransition: all 0.1s ease-in-out;\n\t\t\t\topacity: 1;\n\t\t\t}\n\n\t\t\t.app-menu-entry--label {\n\t\t\t\tfont-weight: bold;\n\t\t\t}\n\t\t}\n\n\t\ta {\n\t\t\twidth: calc(100% - 4px);\n\t\t\theight: calc(100% - 4px);\n\t\t\tmargin: 2px;\n\t\t\tcolor: var(--color-primary-text);\n\t\t\tposition: relative;\n\t\t}\n\n\t\timg {\n\t\t\ttransition: margin 0.1s ease-in-out;\n\t\t\twidth: $header-icon-size;\n\t\t\theight: $header-icon-size;\n\t\t\tpadding: calc((100% - $header-icon-size) / 2);\n\t\t\tbox-sizing: content-box;\n\t\t}\n\n\t\t.app-menu-entry--label {\n\t\t\topacity: 0;\n\t\t\tposition: absolute;\n\t\t\tfont-size: 12px;\n\t\t\tcolor: var(--color-primary-text);\n\t\t\ttext-align: center;\n\t\t\tbottom: -5px;\n\t\t\tleft: 50%;\n\t\t\ttop: 45%;\n\t\t\tdisplay: block;\n\t\t\tmin-width: 100%;\n\t\t\ttransform: translateX(-50%);\n\t\t\ttransition: all 0.1s ease-in-out;\n\t\t\twidth: 100%;\n\t\t\ttext-overflow: ellipsis;\n\t\t\toverflow: hidden;\n\t\t\tletter-spacing: -0.5px;\n\t\t}\n\n\t\t&:hover,\n\t\t&:focus-within {\n\t\t\topacity: 1;\n\t\t\t.app-menu-entry--label {\n\t\t\t\topacity: 1;\n\t\t\t\tfont-weight: bolder;\n\t\t\t\tbottom: 0;\n\t\t\t\twidth: 100%;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t}\n\n\t}\n\n\t// Show labels\n\t&:hover,\n\t&:focus-within,\n\t.app-menu-entry:hover,\n\t.app-menu-entry:focus {\n\t\topacity: 1;\n\n\t\timg {\n\t\t\tmargin-top: -8px;\n\t\t}\n\n\t\t.app-menu-entry--label {\n\t\t\topacity: 1;\n\t\t\tbottom: 0;\n\t\t}\n\n\t\t&::before, .app-menu-entry::before {\n\t\t\topacity: 0;\n\t\t}\n\t}\n}\n\n::v-deep .app-menu-more .button-vue--vue-tertiary {\n\tcolor: var(--color-primary-text);\n\topacity: .7;\n\tmargin: 3px;\n\tfilter: var(--background-image-invert-if-bright);\n\n\t&:hover {\n\t\topacity: 1;\n\t\tbackground-color: transparent !important;\n\t}\n\n\t&:focus-visible {\n\t\topacity: 1;\n\t\toutline: none !important;\n\t}\n}\n\n.app-menu-popover-entry {\n\t.app-icon {\n\t\tposition: relative;\n\t\theight: 44px;\n\n\t\t&.has-unread::after {\n\t\t\tbackground-color: var(--color-main-text);\n\t\t}\n\n\t\timg {\n\t\t\twidth: $header-icon-size;\n\t\t\theight: $header-icon-size;\n\t\t\tpadding: calc((50px - $header-icon-size) / 2);\n\t\t}\n\t}\n}\n\n.has-unread::after {\n\tcontent: "";\n\twidth: 8px;\n\theight: 8px;\n\tbackground-color: var(--color-primary-text);\n\tborder-radius: 50%;\n\tposition: absolute;\n\tdisplay: block;\n\ttop: 10px;\n\tright: 10px;\n}\n\n.unread-counter {\n\tdisplay: none;\n}\n'],sourceRoot:""}]),e.Z=r},88951:function(t,e,n){"use strict";var o=n(87537),i=n.n(o),a=n(23645),r=n.n(a)()(i());r.push([t.id,".menu-entry__loading-icon[data-v-6e59d13c]{margin-right:8px}","",{version:3,sources:["webpack://./core/src/components/UserMenu/UserMenuEntry.vue"],names:[],mappings:"AAEC,2CACC,gBAAA",sourcesContent:["\n.menu-entry {\n\t&__loading-icon {\n\t\tmargin-right: 8px;\n\t}\n}\n"],sourceRoot:""}]),e.Z=r},50893:function(t,e,n){"use strict";var o=n(87537),i=n.n(o),a=n(23645),r=n.n(a)()(i());r.push([t.id,"#contactsmenu-menu[data-v-1563c388]{height:calc(100vh - 150px);max-height:302px;min-height:175px;width:350px}#contactsmenu-menu[data-v-1563c388] .emptycontent{margin-top:5vh !important;margin-bottom:1.5vh}#contactsmenu-menu[data-v-1563c388] .emptycontent .icon-loading,#contactsmenu-menu[data-v-1563c388] .emptycontent .icon-search{display:inline-block}#contactsmenu-menu[data-v-1563c388] #contactsmenu-search{width:calc(100% - 16px);margin:8px;height:34px}#contactsmenu-menu[data-v-1563c388] .content{height:calc(100vh - 150px - 50px);max-height:250px;min-height:125px;overflow-y:auto}#contactsmenu-menu[data-v-1563c388] .content .footer{text-align:center}#contactsmenu-menu[data-v-1563c388] .content .footer a{display:block;width:100%;padding:12px 0;opacity:.5}#contactsmenu-menu[data-v-1563c388] a{padding:2px}#contactsmenu-menu[data-v-1563c388] a:focus-visible{box-shadow:inset 0 0 0 2px var(--color-main-text) !important}#contactsmenu-menu[data-v-1563c388] .contact{display:flex;position:relative;align-items:center;padding:3px 3px 3px 10px}#contactsmenu-menu[data-v-1563c388] .contact .avatar{height:32px;width:32px;display:inline-block}#contactsmenu-menu[data-v-1563c388] .contact .body{flex-grow:1;padding-left:8px;min-width:0}#contactsmenu-menu[data-v-1563c388] .contact .body div{position:relative;width:100%;overflow-x:hidden;text-overflow:ellipsis}#contactsmenu-menu[data-v-1563c388] .contact .body .last-message,#contactsmenu-menu[data-v-1563c388] .contact .body .email-address{color:var(--color-text-maxcontrast)}#contactsmenu-menu[data-v-1563c388] .contact .top-action,#contactsmenu-menu[data-v-1563c388] .contact .second-action,#contactsmenu-menu[data-v-1563c388] .contact .other-actions{width:16px;height:16px;opacity:.5;cursor:pointer}#contactsmenu-menu[data-v-1563c388] .contact .top-action:not(button),#contactsmenu-menu[data-v-1563c388] .contact .second-action:not(button),#contactsmenu-menu[data-v-1563c388] .contact .other-actions:not(button){padding:14px}#contactsmenu-menu[data-v-1563c388] .contact .top-action img,#contactsmenu-menu[data-v-1563c388] .contact .second-action img,#contactsmenu-menu[data-v-1563c388] .contact .other-actions img{filter:var(--background-invert-if-dark)}#contactsmenu-menu[data-v-1563c388] .contact .top-action:hover,#contactsmenu-menu[data-v-1563c388] .contact .top-action:active,#contactsmenu-menu[data-v-1563c388] .contact .top-action:focus,#contactsmenu-menu[data-v-1563c388] .contact .second-action:hover,#contactsmenu-menu[data-v-1563c388] .contact .second-action:active,#contactsmenu-menu[data-v-1563c388] .contact .second-action:focus,#contactsmenu-menu[data-v-1563c388] .contact .other-actions:hover,#contactsmenu-menu[data-v-1563c388] .contact .other-actions:active,#contactsmenu-menu[data-v-1563c388] .contact .other-actions:focus{opacity:1}#contactsmenu-menu[data-v-1563c388] .contact button.other-actions{width:44px}#contactsmenu-menu[data-v-1563c388] .contact button.other-actions:focus{border-color:rgba(0,0,0,0);box-shadow:0 0 0 2px var(--color-main-text)}#contactsmenu-menu[data-v-1563c388] .contact button.other-actions:focus-visible{border-radius:var(--border-radius-pill)}#contactsmenu-menu[data-v-1563c388] .contact .menu{top:47px;margin-right:13px}#contactsmenu-menu[data-v-1563c388] .contact .popovermenu::after{right:2px}","",{version:3,sources:["webpack://./core/src/views/ContactsMenu.vue"],names:[],mappings:"AACA,oCAEC,0BAAA,CACA,gBAAA,CACA,gBAAA,CACA,WAAA,CAGC,kDACC,yBAAA,CACA,mBAAA,CACA,+HAEC,oBAAA,CAIF,yDACC,uBAAA,CACA,UAAA,CACA,WAAA,CAGD,6CAEC,iCAAA,CACA,gBAAA,CACA,gBAAA,CACA,eAAA,CAEA,qDACC,iBAAA,CAEA,uDACC,aAAA,CACA,UAAA,CACA,cAAA,CACA,UAAA,CAKH,sCACC,WAAA,CAEA,oDACC,4DAAA,CAIF,6CACC,YAAA,CACA,iBAAA,CACA,kBAAA,CACA,wBAAA,CAEA,qDACC,WAAA,CACA,UAAA,CACA,oBAAA,CAGD,mDACC,WAAA,CACA,gBAAA,CACA,WAAA,CAEA,uDACC,iBAAA,CACA,UAAA,CACA,iBAAA,CACA,sBAAA,CAGD,mIACC,mCAAA,CAIF,iLACC,UAAA,CACA,WAAA,CACA,UAAA,CACA,cAAA,CAEA,qNACC,YAAA,CAED,6LACC,uCAAA,CAGD,4kBAGC,SAAA,CAIF,kEACC,UAAA,CAEA,wEACC,0BAAA,CACA,2CAAA,CAGD,gFACC,uCAAA,CAKF,mDACC,QAAA,CACA,iBAAA,CAED,iEACC,SAAA",sourcesContent:["\n#contactsmenu-menu {\n\t/* show 2.5 to 4.5 entries depending on the screen height */\n\theight: calc(100vh - 50px * 3);\n\tmax-height: calc(50px * 6 + 2px);\n\tmin-height: calc(50px * 3.5);\n\twidth: 350px;\n\n\t&:deep {\n\t\t.emptycontent {\n\t\t\tmargin-top: 5vh !important;\n\t\t\tmargin-bottom: 1.5vh;\n\t\t\t.icon-loading,\n\t\t\t.icon-search {\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\t\t}\n\n\t\t#contactsmenu-search {\n\t\t\twidth: calc(100% - 16px);\n\t\t\tmargin: 8px;\n\t\t\theight: 34px;\n\t\t}\n\n\t\t.content {\n\t\t\t/* fixed max height of the parent container without the search input */\n\t\t\theight: calc(100vh - 50px * 3 - 50px);\n\t\t\tmax-height: calc(50px * 5);\n\t\t\tmin-height: calc(50px * 3.5 - 50px);\n\t\t\toverflow-y: auto;\n\n\t\t\t.footer {\n\t\t\t\ttext-align: center;\n\n\t\t\t\ta {\n\t\t\t\t\tdisplay: block;\n\t\t\t\t\twidth: 100%;\n\t\t\t\t\tpadding: 12px 0;\n\t\t\t\t\topacity: .5;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ta {\n\t\t\tpadding: 2px;\n\n\t\t\t&:focus-visible {\n\t\t\t\tbox-shadow: inset 0 0 0 2px var(--color-main-text) !important; // override rule in core/css/headers.scss #header a:focus-visible\n\t\t\t}\n\t\t}\n\n\t\t.contact {\n\t\t\tdisplay: flex;\n\t\t\tposition: relative;\n\t\t\talign-items: center;\n\t\t\tpadding: 3px 3px 3px 10px;\n\n\t\t\t.avatar {\n\t\t\t\theight: 32px;\n\t\t\t\twidth: 32px;\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\n\t\t\t.body {\n\t\t\t\tflex-grow: 1;\n\t\t\t\tpadding-left: 8px;\n\t\t\t\tmin-width: 0;\n\n\t\t\t\tdiv {\n\t\t\t\t\tposition: relative;\n\t\t\t\t\twidth: 100%;\n\t\t\t\t\toverflow-x: hidden;\n\t\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\t}\n\n\t\t\t\t.last-message, .email-address {\n\t\t\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.top-action, .second-action, .other-actions {\n\t\t\t\twidth: 16px;\n\t\t\t\theight: 16px;\n\t\t\t\topacity: .5;\n\t\t\t\tcursor: pointer;\n\n\t\t\t\t&:not(button) {\n\t\t\t\t\tpadding: 14px;\n\t\t\t\t}\n\t\t\t\timg {\n\t\t\t\t\tfilter: var(--background-invert-if-dark);\n\t\t\t\t}\n\n\t\t\t\t&:hover,\n\t\t\t\t&:active,\n\t\t\t\t&:focus {\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbutton.other-actions {\n\t\t\t\twidth: 44px;\n\n\t\t\t\t&:focus {\n\t\t\t\t\tborder-color: transparent;\n\t\t\t\t\tbox-shadow: 0 0 0 2px var(--color-main-text);\n\t\t\t\t}\n\n\t\t\t\t&:focus-visible {\n\t\t\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/* actions menu */\n\t\t\t.menu {\n\t\t\t\ttop: 47px;\n\t\t\t\tmargin-right: 13px;\n\t\t\t}\n\t\t\t.popovermenu::after {\n\t\t\t\tright: 2px;\n\t\t\t}\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),e.Z=r},71445:function(t,e,n){"use strict";var o=n(87537),i=n.n(o),a=n(23645),r=n.n(a)()(i());r.push([t.id,".user-menu[data-v-6a818bbc]{margin-right:12px}.user-menu[data-v-6a818bbc] .header-menu__trigger{opacity:1 !important}.user-menu[data-v-6a818bbc] .header-menu__trigger:focus-visible .user-menu__avatar{border:2px solid var(--color-primary-text)}.user-menu[data-v-6a818bbc] .header-menu__carret{display:none !important}.user-menu[data-v-6a818bbc] .header-menu__content{width:fit-content !important}.user-menu__avatar[data-v-6a818bbc]:active,.user-menu__avatar[data-v-6a818bbc]:focus,.user-menu__avatar[data-v-6a818bbc]:hover{border:2px solid var(--color-primary-text)}.user-menu__nav[data-v-6a818bbc]{display:flex;width:100%}.user-menu__nav ul[data-v-6a818bbc]{display:flex;flex-direction:column;gap:2px}.user-menu__nav ul[data-v-6a818bbc] li a,.user-menu__nav ul[data-v-6a818bbc] li button{border-radius:6px;display:inline-flex;align-items:center;height:var(--header-menu-item-height);color:var(--color-main-text);padding:10px 8px;box-sizing:border-box;white-space:nowrap;position:relative;width:100%}.user-menu__nav ul[data-v-6a818bbc] li a:hover,.user-menu__nav ul[data-v-6a818bbc] li button:hover{background-color:var(--color-background-hover)}.user-menu__nav ul[data-v-6a818bbc] li a:focus-visible,.user-menu__nav ul[data-v-6a818bbc] li button:focus-visible{background-color:var(--color-background-hover) !important;box-shadow:inset 0 0 0 2px var(--color-primary) !important;outline:none !important}.user-menu__nav ul[data-v-6a818bbc] li a:active,.user-menu__nav ul[data-v-6a818bbc] li a.active,.user-menu__nav ul[data-v-6a818bbc] li button:active,.user-menu__nav ul[data-v-6a818bbc] li button.active{background-color:var(--color-primary-light)}.user-menu__nav ul[data-v-6a818bbc] li a span,.user-menu__nav ul[data-v-6a818bbc] li button span{padding-bottom:0;color:var(--color-main-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:110px}.user-menu__nav ul[data-v-6a818bbc] li a img,.user-menu__nav ul[data-v-6a818bbc] li button img{width:16px;height:16px;margin-right:10px}.user-menu__nav ul[data-v-6a818bbc] li a img,.user-menu__nav ul[data-v-6a818bbc] li a svg,.user-menu__nav ul[data-v-6a818bbc] li button img,.user-menu__nav ul[data-v-6a818bbc] li button svg{opacity:.7;filter:var(--background-invert-if-dark)}.user-menu__nav ul[data-v-6a818bbc] li button{background-color:rgba(0,0,0,0);border:none;font-weight:normal;margin:0}","",{version:3,sources:["webpack://./core/src/views/UserMenu.vue"],names:[],mappings:"AACA,4BACC,iBAAA,CAIE,kDACC,oBAAA,CAEC,mFACC,0CAAA,CAKH,iDACC,uBAAA,CAGD,kDACC,4BAAA,CAMF,+HAGC,0CAAA,CAIF,iCACC,YAAA,CACA,UAAA,CAEA,oCACC,YAAA,CACA,qBAAA,CACA,OAAA,CAIE,uFAEC,iBAAA,CACA,mBAAA,CACA,kBAAA,CACA,qCAAA,CACA,4BAAA,CACA,gBAAA,CACA,qBAAA,CACA,kBAAA,CACA,iBAAA,CACA,UAAA,CAEA,mGACC,8CAAA,CAGD,mHACC,yDAAA,CACA,0DAAA,CACA,uBAAA,CAGD,0MAEC,2CAAA,CAGD,iGACC,gBAAA,CACA,4BAAA,CACA,kBAAA,CACA,eAAA,CACA,sBAAA,CACA,eAAA,CAGD,+FACC,UAAA,CACA,WAAA,CACA,iBAAA,CAGD,8LAEC,UAAA,CACA,uCAAA,CAKF,8CACC,8BAAA,CACA,WAAA,CACA,kBAAA,CACA,QAAA",sourcesContent:["\n.user-menu {\n\tmargin-right: 12px;\n\n\t&:deep {\n\t\t.header-menu {\n\t\t\t&__trigger {\n\t\t\t\topacity: 1 !important;\n\t\t\t\t&:focus-visible {\n\t\t\t\t\t.user-menu__avatar {\n\t\t\t\t\t\tborder: 2px solid var(--color-primary-text);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&__carret {\n\t\t\t\tdisplay: none !important;\n\t\t\t}\n\n\t\t\t&__content {\n\t\t\t\twidth: fit-content !important;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__avatar {\n\t\t&:active,\n\t\t&:focus,\n\t\t&:hover {\n\t\t\tborder: 2px solid var(--color-primary-text);\n\t\t}\n\t}\n\n\t&__nav {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\n\t\tul {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tgap: 2px;\n\n\t\t\t&:deep {\n\t\t\t\tli {\n\t\t\t\t\ta,\n\t\t\t\t\tbutton {\n\t\t\t\t\t\tborder-radius: 6px;\n\t\t\t\t\t\tdisplay: inline-flex;\n\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\theight: var(--header-menu-item-height);\n\t\t\t\t\t\tcolor: var(--color-main-text);\n\t\t\t\t\t\tpadding: 10px 8px;\n\t\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\twidth: 100%;\n\n\t\t\t\t\t\t&:hover {\n\t\t\t\t\t\t\tbackground-color: var(--color-background-hover);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t&:focus-visible {\n\t\t\t\t\t\t\tbackground-color: var(--color-background-hover) !important;\n\t\t\t\t\t\t\tbox-shadow: inset 0 0 0 2px var(--color-primary) !important;\n\t\t\t\t\t\t\toutline: none !important;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t&:active,\n\t\t\t\t\t\t&.active {\n\t\t\t\t\t\t\tbackground-color: var(--color-primary-light);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tspan {\n\t\t\t\t\t\t\tpadding-bottom: 0;\n\t\t\t\t\t\t\tcolor: var(--color-main-text);\n\t\t\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\t\t\t\tmax-width: 110px;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\timg {\n\t\t\t\t\t\t\twidth: 16px;\n\t\t\t\t\t\t\theight: 16px;\n\t\t\t\t\t\t\tmargin-right: 10px;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\timg,\n\t\t\t\t\t\tsvg {\n\t\t\t\t\t\t\topacity: .7;\n\t\t\t\t\t\t\tfilter: var(--background-invert-if-dark);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override global button styles\n\t\t\t\t\tbutton {\n\t\t\t\t\t\tbackground-color: transparent;\n\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\tmargin: 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),e.Z=r},10944:function(t,e,n){var o=n(40202);t.exports=(o.default||o).template({1:function(t,e,n,o,i){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(a=r(n,"if").call(null!=e?e:t.nullContext||{},null!=(a=null!=e?r(e,"contact"):e)?r(a,"profileUrl"):a,{name:"if",hash:{},fn:t.program(2,i,0),inverse:t.program(5,i,0),data:i,loc:{start:{line:2,column:1},end:{line:10,column:8}}}))?a:""},2:function(t,e,n,o,i){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(a=r(n,"if").call(null!=e?e:t.nullContext||{},null!=(a=null!=e?r(e,"contact"):e)?r(a,"profileTitle"):a,{name:"if",hash:{},fn:t.program(3,i,0),inverse:t.noop,data:i,loc:{start:{line:3,column:2},end:{line:7,column:9}}}))?a:""},3:function(t,e,n,o,i){var a,r=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t\t\t<a class="profile-link--avatar" href="'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"profileUrl"):a,e))+'">\n\t\t\t\t<img src="'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+'&size=32" class="avatar" srcset="'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+"&size=32 1x, "+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+"&size=64 2x, "+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+'&size=128 4x" alt="">\n\t\t\t</a>\n'},5:function(t,e,n,o,i){var a,r=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t\t<img src="'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+'&size=32" class="avatar" srcset="'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+"&size=32 1x, "+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+"&size=64 2x, "+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+'&size=128 4x" alt="">\n'},7:function(t,e,n,o,i){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(a=r(n,"if").call(null!=e?e:t.nullContext||{},null!=(a=null!=e?r(e,"contact"):e)?r(a,"profileUrl"):a,{name:"if",hash:{},fn:t.program(8,i,0),inverse:t.program(11,i,0),data:i,loc:{start:{line:12,column:1},end:{line:20,column:8}}}))?a:""},8:function(t,e,n,o,i){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(a=r(n,"if").call(null!=e?e:t.nullContext||{},null!=(a=null!=e?r(e,"contact"):e)?r(a,"profileTitle"):a,{name:"if",hash:{},fn:t.program(9,i,0),inverse:t.noop,data:i,loc:{start:{line:13,column:2},end:{line:17,column:9}}}))?a:""},9:function(t,e,n,o,i){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t\t\t<a class="profile-link--avatar" href="'+t.escapeExpression(t.lambda(null!=(a=null!=e?r(e,"contact"):e)?r(a,"profileUrl"):a,e))+'">\n\t\t\t\t<div class="avatar"></div>\n\t\t\t</a>\n'},11:function(t,e,n,o,i){return'\t\t<div class="avatar"></div>\n'},13:function(t,e,n,o,i){var a,r=null!=e?e:t.nullContext||{},s=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return(null!=(a=s(n,"if").call(r,null!=(a=null!=e?s(e,"contact"):e)?s(a,"profileTitle"):a,{name:"if",hash:{},fn:t.program(14,i,0),inverse:t.noop,data:i,loc:{start:{line:23,column:1},end:{line:29,column:8}}}))?a:"")+(null!=(a=s(n,"if").call(r,null!=(a=null!=e?s(e,"contact"):e)?s(a,"topAction"):a,{name:"if",hash:{},fn:t.program(16,i,0),inverse:t.noop,data:i,loc:{start:{line:30,column:1},end:{line:34,column:8}}}))?a:"")},14:function(t,e,n,o,i){var a,r=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t\t<a class="body profile-link--full-name" href="'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"profileUrl"):a,e))+'">\n\t\t\t<div class="full-name">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"fullName"):a,e))+'</div>\n\t\t\t<div class="last-message">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"lastMessage"):a,e))+'</div>\n\t\t\t<div class="email-address">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"emailAddresses"):a,e))+"</div>\n\t\t</a>\n"},16:function(t,e,n,o,i){var a,r=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t\t<a class="top-action" href="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"hyperlink"):a,e))+'" title="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"title"):a,e))+'">\n\t\t\t<img src="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"icon"):a,e))+'" alt="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"title"):a,e))+'">\n\t\t</a>\n'},18:function(t,e,n,o,i){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(a=r(n,"if").call(null!=e?e:t.nullContext||{},null!=(a=null!=e?r(e,"contact"):e)?r(a,"topAction"):a,{name:"if",hash:{},fn:t.program(19,i,0),inverse:t.program(21,i,0),data:i,loc:{start:{line:35,column:0},end:{line:50,column:0}}}))?a:""},19:function(t,e,n,o,i){var a,r=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t<a class="body" href="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"hyperlink"):a,e))+'">\n\t\t<div class="full-name">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"fullName"):a,e))+'</div>\n\t\t<div class="last-message">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"lastMessage"):a,e))+'</div>\n\t\t<div class="email-address">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"emailAddresses"):a,e))+'</div>\n\t</a>\n \t<a class="top-action" href="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"hyperlink"):a,e))+'" title="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"title"):a,e))+'">\n \t\t<img src="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"icon"):a,e))+'" alt="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"title"):a,e))+'">\n\t</a>\n'},21:function(t,e,n,o,i){var a,r=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t<div class="body">\n\t\t<div class="full-name">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"fullName"):a,e))+'</div>\n\t\t<div class="last-message">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"lastMessage"):a,e))+'</div>\n\t\t<div class="email-address">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"emailAddresses"):a,e))+"</div>\n\t</div>\n"},23:function(t,e,n,o,i){var a,r=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<a class="second-action" href="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"secondAction"):a)?l(a,"hyperlink"):a,e))+'" title="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"secondAction"):a)?l(a,"title"):a,e))+'">\n\t<img src="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"secondAction"):a)?l(a,"icon"):a,e))+'" alt="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"secondAction"):a)?l(a,"title"):a,e))+'">\n</a>\n'},25:function(t,e,n,o,i){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t<button class="other-actions icon-more"></button>\n\t<div class="menu popovermenu">\n\t\t<ul>\n'+(null!=(a=r(n,"each").call(null!=e?e:t.nullContext||{},null!=(a=null!=e?r(e,"contact"):e)?r(a,"actions"):a,{name:"each",hash:{},fn:t.program(26,i,0),inverse:t.noop,data:i,loc:{start:{line:60,column:3},end:{line:67,column:12}}}))?a:"")+"\t\t</ul>\n\t</div>\n"},26:function(t,e,n,o,i){var a,r=null!=e?e:t.nullContext||{},s=t.hooks.helperMissing,l="function",c=t.escapeExpression,u=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t\t\t<li>\n\t\t\t\t<a href="'+c(typeof(a=null!=(a=u(n,"hyperlink")||(null!=e?u(e,"hyperlink"):e))?a:s)===l?a.call(r,{name:"hyperlink",hash:{},data:i,loc:{start:{line:62,column:13},end:{line:62,column:26}}}):a)+'">\n\t\t\t\t\t<img src="'+c(typeof(a=null!=(a=u(n,"icon")||(null!=e?u(e,"icon"):e))?a:s)===l?a.call(r,{name:"icon",hash:{},data:i,loc:{start:{line:63,column:15},end:{line:63,column:23}}}):a)+'" alt="">\n\t\t\t\t\t<span>'+c(typeof(a=null!=(a=u(n,"title")||(null!=e?u(e,"title"):e))?a:s)===l?a.call(r,{name:"title",hash:{},data:i,loc:{start:{line:64,column:11},end:{line:64,column:20}}}):a)+"</span>\n\t\t\t\t</a>\n\t\t\t</li>\n"},compiler:[8,">= 4.3.0"],main:function(t,e,n,o,i){var a,r=null!=e?e:t.nullContext||{},s=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return(null!=(a=s(n,"if").call(r,null!=(a=null!=e?s(e,"contact"):e)?s(a,"avatar"):a,{name:"if",hash:{},fn:t.program(1,i,0),inverse:t.program(7,i,0),data:i,loc:{start:{line:1,column:0},end:{line:21,column:7}}}))?a:"")+(null!=(a=s(n,"if").call(r,null!=(a=null!=e?s(e,"contact"):e)?s(a,"profileUrl"):a,{name:"if",hash:{},fn:t.program(13,i,0),inverse:t.program(18,i,0),data:i,loc:{start:{line:22,column:0},end:{line:50,column:7}}}))?a:"")+(null!=(a=s(n,"if").call(r,null!=(a=null!=e?s(e,"contact"):e)?s(a,"hasTwoActions"):a,{name:"if",hash:{},fn:t.program(23,i,0),inverse:t.noop,data:i,loc:{start:{line:51,column:0},end:{line:55,column:7}}}))?a:"")+(null!=(a=s(n,"if").call(r,null!=(a=null!=e?s(e,"contact"):e)?s(a,"hasManyActions"):a,{name:"if",hash:{},fn:t.program(25,i,0),inverse:t.noop,data:i,loc:{start:{line:56,column:0},end:{line:70,column:7}}}))?a:"")},useData:!0})},20421:function(t,e,n){var o=n(40202);t.exports=(o.default||o).template({compiler:[8,">= 4.3.0"],main:function(t,e,n,o,i){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<div class="emptycontent">\n\t<div class="icon-search"></div>\n\t<h2>'+t.escapeExpression("function"==typeof(a=null!=(a=r(n,"couldNotLoadText")||(null!=e?r(e,"couldNotLoadText"):e))?a:t.hooks.helperMissing)?a.call(null!=e?e:t.nullContext||{},{name:"couldNotLoadText",hash:{},data:i,loc:{start:{line:3,column:5},end:{line:3,column:25}}}):a)+"</h2>\n</div>\n"},useData:!0})},34083:function(t,e,n){var o=n(40202);t.exports=(o.default||o).template({1:function(t,e,n,o,i){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<div class="emptycontent">\n\t<div class="icon-search"></div>\n\t<h2>'+t.escapeExpression("function"==typeof(a=null!=(a=r(n,"noContactsFoundText")||(null!=e?r(e,"noContactsFoundText"):e))?a:t.hooks.helperMissing)?a.call(null!=e?e:t.nullContext||{},{name:"noContactsFoundText",hash:{},data:i,loc:{start:{line:4,column:5},end:{line:4,column:28}}}):a)+"</h2>\n</div>\n"},3:function(t,e,n,o,i){var a,r=null!=e?e:t.nullContext||{},s=t.hooks.helperMissing,l="function",c=t.escapeExpression,u=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<div class="footer"><a href="'+c(typeof(a=null!=(a=u(n,"contactsAppURL")||(null!=e?u(e,"contactsAppURL"):e))?a:s)===l?a.call(r,{name:"contactsAppURL",hash:{},data:i,loc:{start:{line:9,column:29},end:{line:9,column:47}}}):a)+'">'+c(typeof(a=null!=(a=u(n,"showAllContactsText")||(null!=e?u(e,"showAllContactsText"):e))?a:s)===l?a.call(r,{name:"showAllContactsText",hash:{},data:i,loc:{start:{line:9,column:49},end:{line:9,column:72}}}):a)+"</a></div>\n"},5:function(t,e,n,o,i){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(a=r(n,"if").call(null!=e?e:t.nullContext||{},null!=e?r(e,"canInstallApp"):e,{name:"if",hash:{},fn:t.program(6,i,0),inverse:t.noop,data:i,loc:{start:{line:10,column:0},end:{line:12,column:0}}}))?a:""},6:function(t,e,n,o,i){var a,r=null!=e?e:t.nullContext||{},s=t.hooks.helperMissing,l="function",c=t.escapeExpression,u=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<div class="footer"><a href="'+c(typeof(a=null!=(a=u(n,"contactsAppMgmtURL")||(null!=e?u(e,"contactsAppMgmtURL"):e))?a:s)===l?a.call(r,{name:"contactsAppMgmtURL",hash:{},data:i,loc:{start:{line:11,column:29},end:{line:11,column:51}}}):a)+'">'+c(typeof(a=null!=(a=u(n,"contactsAppMgmtText")||(null!=e?u(e,"contactsAppMgmtText"):e))?a:s)===l?a.call(r,{name:"contactsAppMgmtText",hash:{},data:i,loc:{start:{line:11,column:53},end:{line:11,column:76}}}):a)+"</a></div>\n"},compiler:[8,">= 4.3.0"],main:function(t,e,n,o,i){var a,r=null!=e?e:t.nullContext||{},s=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return(null!=(a=s(n,"unless").call(r,null!=(a=null!=e?s(e,"contacts"):e)?s(a,"length"):a,{name:"unless",hash:{},fn:t.program(1,i,0),inverse:t.noop,data:i,loc:{start:{line:1,column:0},end:{line:6,column:11}}}))?a:"")+'<div id="contactsmenu-contacts"></div>\n'+(null!=(a=s(n,"if").call(r,null!=e?s(e,"contactsAppEnabled"):e,{name:"if",hash:{},fn:t.program(3,i,0),inverse:t.program(5,i,0),data:i,loc:{start:{line:8,column:0},end:{line:12,column:7}}}))?a:"")},useData:!0})},95386:function(t,e,n){var o=n(40202);t.exports=(o.default||o).template({compiler:[8,">= 4.3.0"],main:function(t,e,n,o,i){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<div class="emptycontent">\n\t<div class="icon-loading"></div>\n\t<h2>'+t.escapeExpression("function"==typeof(a=null!=(a=r(n,"loadingText")||(null!=e?r(e,"loadingText"):e))?a:t.hooks.helperMissing)?a.call(null!=e?e:t.nullContext||{},{name:"loadingText",hash:{},data:i,loc:{start:{line:3,column:5},end:{line:3,column:20}}}):a)+"</h2>\n</div>\n"},useData:!0})},66115:function(t,e,n){var o=n(40202);t.exports=(o.default||o).template({compiler:[8,">= 4.3.0"],main:function(t,e,n,o,i){var a,r=null!=e?e:t.nullContext||{},s=t.hooks.helperMissing,l="function",c=t.escapeExpression,u=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<label class="hidden-visually" for="contactsmenu-search">'+c(typeof(a=null!=(a=u(n,"searchContactsText")||(null!=e?u(e,"searchContactsText"):e))?a:s)===l?a.call(r,{name:"searchContactsText",hash:{},data:i,loc:{start:{line:1,column:57},end:{line:1,column:79}}}):a)+'</label>\n<input id="contactsmenu-search" type="search" placeholder="'+c(typeof(a=null!=(a=u(n,"searchContactsText")||(null!=e?u(e,"searchContactsText"):e))?a:s)===l?a.call(r,{name:"searchContactsText",hash:{},data:i,loc:{start:{line:2,column:59},end:{line:2,column:81}}}):a)+'" value="'+c(typeof(a=null!=(a=u(n,"searchTerm")||(null!=e?u(e,"searchTerm"):e))?a:s)===l?a.call(r,{name:"searchTerm",hash:{},data:i,loc:{start:{line:2,column:90},end:{line:2,column:104}}}):a)+'">\n<div class="content">\n</div>\n'},useData:!0})},47078:function(t,e,n){var o=n(40202);t.exports=(o.default||o).template({1:function(t,e,n,o,i){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<img src="'+t.escapeExpression("function"==typeof(a=null!=(a=r(n,"icon")||(null!=e?r(e,"icon"):e))?a:t.hooks.helperMissing)?a.call(null!=e?e:t.nullContext||{},{name:"icon",hash:{},data:i,loc:{start:{line:3,column:24},end:{line:3,column:32}}}):a)+'">'},compiler:[8,">= 4.3.0"],main:function(t,e,n,o,i){var a,r,s=null!=e?e:t.nullContext||{},l=t.hooks.helperMissing,c="function",u=t.escapeExpression,d=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<li>\n\t<a href="'+u(typeof(r=null!=(r=d(n,"hyperlink")||(null!=e?d(e,"hyperlink"):e))?r:l)===c?r.call(s,{name:"hyperlink",hash:{},data:i,loc:{start:{line:2,column:10},end:{line:2,column:23}}}):r)+'">\n\t\t'+(null!=(a=d(n,"if").call(s,null!=e?d(e,"icon"):e,{name:"if",hash:{},fn:t.program(1,i,0),inverse:t.noop,data:i,loc:{start:{line:3,column:2},end:{line:3,column:41}}}))?a:"")+"\n\t\t<span>"+u(typeof(r=null!=(r=d(n,"title")||(null!=e?d(e,"title"):e))?r:l)===c?r.call(s,{name:"title",hash:{},data:i,loc:{start:{line:4,column:8},end:{line:4,column:17}}}):r)+"</span>\n\t</a>\n</li>\n"},useData:!0})},46700:function(t,e,n){var o={"./af":42786,"./af.js":42786,"./ar":30867,"./ar-dz":14130,"./ar-dz.js":14130,"./ar-kw":96135,"./ar-kw.js":96135,"./ar-ly":56440,"./ar-ly.js":56440,"./ar-ma":47702,"./ar-ma.js":47702,"./ar-sa":16040,"./ar-sa.js":16040,"./ar-tn":37100,"./ar-tn.js":37100,"./ar.js":30867,"./az":31083,"./az.js":31083,"./be":9808,"./be.js":9808,"./bg":68338,"./bg.js":68338,"./bm":67438,"./bm.js":67438,"./bn":8905,"./bn-bd":76225,"./bn-bd.js":76225,"./bn.js":8905,"./bo":11560,"./bo.js":11560,"./br":1278,"./br.js":1278,"./bs":80622,"./bs.js":80622,"./ca":2468,"./ca.js":2468,"./cs":5822,"./cs.js":5822,"./cv":50877,"./cv.js":50877,"./cy":47373,"./cy.js":47373,"./da":24780,"./da.js":24780,"./de":59740,"./de-at":60217,"./de-at.js":60217,"./de-ch":60894,"./de-ch.js":60894,"./de.js":59740,"./dv":5300,"./dv.js":5300,"./el":50837,"./el.js":50837,"./en-au":78348,"./en-au.js":78348,"./en-ca":77925,"./en-ca.js":77925,"./en-gb":22243,"./en-gb.js":22243,"./en-ie":46436,"./en-ie.js":46436,"./en-il":47207,"./en-il.js":47207,"./en-in":44175,"./en-in.js":44175,"./en-nz":76319,"./en-nz.js":76319,"./en-sg":31662,"./en-sg.js":31662,"./eo":92915,"./eo.js":92915,"./es":55655,"./es-do":55251,"./es-do.js":55251,"./es-mx":96112,"./es-mx.js":96112,"./es-us":71146,"./es-us.js":71146,"./es.js":55655,"./et":5603,"./et.js":5603,"./eu":77763,"./eu.js":77763,"./fa":76959,"./fa.js":76959,"./fi":11897,"./fi.js":11897,"./fil":42549,"./fil.js":42549,"./fo":94694,"./fo.js":94694,"./fr":94470,"./fr-ca":63049,"./fr-ca.js":63049,"./fr-ch":52330,"./fr-ch.js":52330,"./fr.js":94470,"./fy":5044,"./fy.js":5044,"./ga":29295,"./ga.js":29295,"./gd":2101,"./gd.js":2101,"./gl":38794,"./gl.js":38794,"./gom-deva":27884,"./gom-deva.js":27884,"./gom-latn":23168,"./gom-latn.js":23168,"./gu":95349,"./gu.js":95349,"./he":24206,"./he.js":24206,"./hi":30094,"./hi.js":30094,"./hr":30316,"./hr.js":30316,"./hu":22138,"./hu.js":22138,"./hy-am":11423,"./hy-am.js":11423,"./id":29218,"./id.js":29218,"./is":90135,"./is.js":90135,"./it":90626,"./it-ch":10150,"./it-ch.js":10150,"./it.js":90626,"./ja":39183,"./ja.js":39183,"./jv":24286,"./jv.js":24286,"./ka":12105,"./ka.js":12105,"./kk":47772,"./kk.js":47772,"./km":18758,"./km.js":18758,"./kn":79282,"./kn.js":79282,"./ko":33730,"./ko.js":33730,"./ku":1408,"./ku.js":1408,"./ky":33291,"./ky.js":33291,"./lb":36841,"./lb.js":36841,"./lo":55466,"./lo.js":55466,"./lt":57010,"./lt.js":57010,"./lv":37595,"./lv.js":37595,"./me":39861,"./me.js":39861,"./mi":35493,"./mi.js":35493,"./mk":95966,"./mk.js":95966,"./ml":87341,"./ml.js":87341,"./mn":5115,"./mn.js":5115,"./mr":10370,"./mr.js":10370,"./ms":9847,"./ms-my":41237,"./ms-my.js":41237,"./ms.js":9847,"./mt":72126,"./mt.js":72126,"./my":56165,"./my.js":56165,"./nb":64924,"./nb.js":64924,"./ne":16744,"./ne.js":16744,"./nl":93901,"./nl-be":59814,"./nl-be.js":59814,"./nl.js":93901,"./nn":83877,"./nn.js":83877,"./oc-lnc":92135,"./oc-lnc.js":92135,"./pa-in":15858,"./pa-in.js":15858,"./pl":64495,"./pl.js":64495,"./pt":89520,"./pt-br":57971,"./pt-br.js":57971,"./pt.js":89520,"./ro":96459,"./ro.js":96459,"./ru":21793,"./ru.js":21793,"./sd":40950,"./sd.js":40950,"./se":10490,"./se.js":10490,"./si":90124,"./si.js":90124,"./sk":64249,"./sk.js":64249,"./sl":14985,"./sl.js":14985,"./sq":51104,"./sq.js":51104,"./sr":49131,"./sr-cyrl":79915,"./sr-cyrl.js":79915,"./sr.js":49131,"./ss":85893,"./ss.js":85893,"./sv":98760,"./sv.js":98760,"./sw":91172,"./sw.js":91172,"./ta":27333,"./ta.js":27333,"./te":23110,"./te.js":23110,"./tet":52095,"./tet.js":52095,"./tg":27321,"./tg.js":27321,"./th":9041,"./th.js":9041,"./tk":19005,"./tk.js":19005,"./tl-ph":75768,"./tl-ph.js":75768,"./tlh":89444,"./tlh.js":89444,"./tr":72397,"./tr.js":72397,"./tzl":28254,"./tzl.js":28254,"./tzm":51106,"./tzm-latn":30699,"./tzm-latn.js":30699,"./tzm.js":51106,"./ug-cn":9288,"./ug-cn.js":9288,"./uk":67691,"./uk.js":67691,"./ur":13795,"./ur.js":13795,"./uz":6791,"./uz-latn":60588,"./uz-latn.js":60588,"./uz.js":6791,"./vi":65666,"./vi.js":65666,"./x-pseudo":14378,"./x-pseudo.js":14378,"./yo":75805,"./yo.js":75805,"./zh-cn":83839,"./zh-cn.js":83839,"./zh-hk":55726,"./zh-hk.js":55726,"./zh-mo":99807,"./zh-mo.js":99807,"./zh-tw":74152,"./zh-tw.js":74152};function i(t){var e=a(t);return n(e)}function a(t){if(!n.o(o,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return o[t]}i.keys=function(){return Object.keys(o)},i.resolve=a,t.exports=i,i.id=46700},12081:function(t){"use strict";t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoAQMAAAC2MCouAAAABlBMVEVmZmZ1dXVT6N0BAAAAUklEQVQIW8XNsQ3AIAwF0bMoKBmBURgNj8YojEBJEcXwu2yQ+p507BTeWDnozPISjPpY4O0W6CqEisUtiG/EF+IT8YG4fznihnhCPCNeEK/89D1Gd22TNOyXVAAAAABJRU5ErkJggg=="},47868:function(t){"use strict";t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAABkAQMAAADOquA5AAAAA1BMVEUAAACnej3aAAAADklEQVQYGWMYBaOABgAAAlgAARbiVEcAAAAASUVORK5CYII="},58188:function(t){"use strict";t.exports="data:image/png;base64,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"},33178:function(t){"use strict";t.exports="data:image/png;base64,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"},40337:function(t){"use strict";t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAAb1BMVEUAAAD8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vwLtayQAAAAJHRSTlMAGBAyPwhgIS5RZkqgwEQnYo/NlWydDDAWLB2tgXCZhe+2ft+AEhBBAAANEklEQVR42uyaQW7rMAwFzbvM/c/4AW0C+6FDFG71BZQDZBGTEslnWracXMMwnEBR11+m4HAFqNclqpGCujlvFCQ7EOCecJwgeFgLwvqhIALE+Jvz1pYooFSAeuYDcgZDgKJROJ1rgwKZv5Yg9gJKRjezh/Mn4hagIpx2AADtNaQdIAlEB2zDU2w72BwKGnmhbs6H3RZ++C7gi9ByPqv+L5gHoWEYhmEY/gA/8CR49HNQUf4sDyUFwUL08vcBBdRj9g2SWAIhQDo83amv9SpSgNLN447NUObvGYu5gBK9VM8EWJ9dALnBt4wr3bPgEsGW9ZwOkFXrl94HrNkOWgPmLjAMwzAMw/D/4P3D/Kv52VCAAfgBN/bwvfgAMgEeoB8BPMyky304abMAkYBYJb7MgCVAo1hWkOF4GAmjdlAMII0eX7fLpABiZuEV2HBNIAtkcXfg4b6QDmol8haGTt+sGB/uCfQRuvLimztAHBB7PyPQNrQE7NeAtJ51F/jl8QBcwzAMwzAMyfu/pcLrBHS/6DYWnl8T/nsJSIDw0go8gfvPStTN5FC2gWZNqQJmFI8fh6IAnRvsjUTBOlJhk3/zlwpQEa5vM1UAtH669oIczl2fzxgu7yAWsT/O7XDG9wTCKrtjyP182GN8mlOAhRQYAoRAvQCRQPiHQ28G3T9Lg3wuAQlx2SVQUO0l4C8dM74sYmQBQZ6yMMUiaOdIFsGAWJagX+fLz5GbrwS9hi/DOyDh+PcB/9g51x2nYSAK+5I7WpAqVBbE5c/3/s9I61DG9pDJFgoE4S+bdieuG5+TiRO3Sf1fvyCm0Wg0Go0Dg/udeOwDM7oG8FB9cI8DwGP1o5eAN/UXrnH3JsP6vhotGFT54yDh1ZJCS1W+JxawXoASnC0A2xDk8YEGGPd3p6KiHPY+z0iTEmDmB1VdVPXfZYAHLYqiPGFnAEqOUS6BxCiF5otxPLgTrA1QDmxvcSwDdA3SpOobBuhywD0WTzby1aMz8KqLtK9AqMC+nGDPEKP8QWDf0YK/Z/SKpd9Ilw2HDj6aP/x5TqPRaDQav5fwjx/IKALQ4zkdwq/oP9ZPJdXq5EkkmgYAEFwBZniwH8uiDFgfM3sCgcwg8koBF8hi2L3lgEN9W8X6Z12uHwgOiUsDSCaU49kqLPR6jmUANyyDQhFrA/SAVQWin4PtAvsZoF+fKA3SGaCvV5D4YDfI233A5uaVmOAIqg+Q8sPu/+ZRwOrynRB+LIgNx/zBxFvnAS+H4F6MP6ABd6P1NxqNRqPxQyJAdC+nv+D+FDPwNDuDjztnbnwGS2Ksi+OeHxNM6g2yGiMwOhUXgTB/o6ggkvjUdTOyYAaY1anusn039RBJDIVeiCrO37BujbS6n+h7pt74+nylbFAVCLDoNcrohK7rwkplyFNhQOYA/RUkAwoDwPkLDtaYWwawYQD9CjcD6EOI5AacTif7DgwHeWAbMBYGEi6QuBniw0rWwNLw85WtDGBGni5w6wOQBpYtPgNwFgPCOHaFAc/Pzw6dgTrWC7QBI/A6NwAoDPCByqJEtsLnK5sZ4Geu+r18DhAhOjEgkGZ5uxVkF3j1Kt8FTtde8fJ4g5imuw0Q/fOr19sGiH5uihLZCsdxhM0M8H6G2ecGOJcbEIEo9fkA8OEDbiWsnWBQ+7xhQJr1AjFgcBKyDDPQbRlQr5Axka3wzZs30G9mQPTz7KMYsMbbBrxZYQ39xDhN75h8YUB0UmFOU663rw3oKwMoMmBJ+g0DSsPfJ6qU6/utDIg+EdmImUlzvk9OE4xrOMHKVGWAYcDuLgDF+pJ+ZUAs11edB/DROA+45zAIC2l2ApFRZTwv7fQGWb1eoA1wo+h/CDEOieh+Ghgf+8NJNiOdazQajcZ/w5cvziRAMIohzTaRuDF+n4F8jL2wslTDs3E/FkVVe7rOGZzh7EqGYcj1xygOPPXAx2nOBjsLLJ8xr9qMQP5v5gAsV8AYz0/TtB9X22T4rp4AgU425+KWfJs+wVOlHxhG0Q/iAL5qH3XseHuZPpHrd3MmGBxsCsad0pQJnBxuKmJXxuf+PFG0fxh0AyVcJF5QGedmhiCnjkSAyKYBISGxi1/ZOxfGNGEoCl/DG8Ep3camdWu38/9/4zBUbpJbwpyO+sinrR4TwHt6uTwMdrvaLreFET8KiuhvDajx2t1qM0AAuaO/mzqhxGhPoeEM1qj3l/fzKI06UGOfIlW9+BFBE/0YM6DPOENjj1/4CTN+RPTXBtCOXqniU0qfhgxgTbbmDOD402ENAPRS4veXt4FmwyUl48k1QMRHpz4DOAPSrLvJ+DWAezyuDknEetffeMTEsI6zjlhzu7H+dmQjBijYGUHvHTt5qjySwjxekgZE7LCMn5fnGGDo7eu3+tvrJ3B8mmxSc/xkopyAlZB1zfqQ+6h9BpADiJTi1wVc8G2DItMAIrlKDPI7MdOaOH5RBNkBNagVSqISq8GAfQrlmV4EWooiCqsbhyr2A8Rpb6HFWKFJnXL8YjPIDiijuaCOIiYzgzzkdIP4d4TkPlAgEAgEPpICiLmEo+MTeQDof5KjIz/j+n4/ChURVVDWkAN2YIWiyDJ2IAf2ZNAuEUVYtiPjLQq8UbCWL7CUnyvkqIvixXIAOMeAFDnlSI2JK6rcvfFs0Eicj9urAjml7sENtzsf1TpPoDTcB4Soc3DoiL4h5wlrogovuJgBAFKeQseuf+wEYAPcQApCnAIpjRlg7WpCn4wC2ADao8883lUvS8AwYLvoMBdYda6PGDA5nh6iPYe9TlWAFb8CpAEZyDh8rTl+mSH29EgA3YUzACgoYwNIG2A4nLdtnuesiy5+Klj3CA1Hjxkgd7crJ/4IZg3YIevAxtivtabH1zEDWCpADfoZQIFseEEcvW63i23LH3biBRVRfb4B/gyo7fg5wLzSZIN2EgZKdQNSLAOsVSfr2HZ32P5UozWgbbsVwCqCL0VRI//fNaDmM3CxIoPWPueLao9noDKLm1n2ItgGfP/e3x0DMFoDiqhtW7QQm8H/txWoqQYwyJhsqrLcsELc3RU7AOOBn2aE9zeDyI6M1AAUB9gA5iIGSPrzLzUUnz5wQIdVMV4UKWMdW0cLgmWAER8lEaLuntDUfsD1XrOinp4UMen+oBQpu8jIMy6BQCBwGYqCmGWFjmpJj8MO2A3iM974TI/CEh1LUxDxSwcaNGTwm3dmmJguRYMDDc3GDkoNKfCFDfgy/d1XTIxYHAtZL3g0mugQt5j/TCz7gJe9goFrAKMAN34gnhi4yXqVrAbNy/woA3aAUsDOWLj7HkqUbvw1x87xjw3dTVUKsF4R0crq0HygATHeiIUBMr/5HSujjeMfMUBZKaMHmifg7o4BEZqmQUQzwQFLAwQckukfx39WBsxeBDkBlBpS4IkNeDIzwD8Dbj+7BrCcA1n0VixXo0XQlJz/Z28FGNBsNNBw0q2Pci22ccIA2XoPXzAYb9CxOSmouzIgEAgEAoF5iSHkjKCOvVdIXJ4fP9z4IeSMAGyBNEC3KbNDXKvDL9j+lYMu+07jh7cxEJOtISRimguALXAMYHuAeHh7Ojy7g2WA3S4NsCU0UoLmAj2lNIDt0Y9vkqgG4HSwDKhlTDJiv4TfgJvOAGiuKwPmqgHMVdWAmbcC0FzRVuAKiGHLhzMgEAgEAh8IHvo6KrUn/NoqGgDw/EDfk6tQdwbE4JDzeAPk5ADx/Qen6iulwqYzgFBZrtTCAbiP0Wn6Wgc2KjREv2JqOAWAKqP6oBlwIMnXpLsPw7fx9TienTVsnRxuyZXu3kZ4pgPP/BfKUyBT2I8YsHgDRw2hITQW1/qV4joDOhoouy5UsMOH++130Wn6WlcBqvU2MEXN4YIKZIVtwP0WwRxonhsgt08HxDGs8O/4A9t8B2B3k1fNBwKBQOBM+PqAaS0HUZ2ueX7zaD/y+gC/lsPoTtc8vzn0NEsMLKe0GEh5ohbzm0H7kdcHaK1hvSaA1p3mobQ48DRouJrebef5O8sjV8Pb3hCR1W5rDWk9iRwcjSOsidZr/WSyP7f7NYjG2lmylo8gMnVZlqw1RC3wtwZYT6TWa+/aecMET38SAYn+HkOn3w8B8OlWx39BA1Ki1GOAfPQF5NfTBk1nQEt9/LjcKpCm3jfk1wzrKQMBTGSIR6OlFlpPIq8PkEWNi+DTaJGCq2mkfaRIkqvhadfKp4GWtZe5N2NifjPoKebfkeH5zaP9zL8ry/O7tL6m6x0CgUAgELgZ0HOuvup/ru0FyQFM6Ps2AH4D9I01QH4DCHRbBgAcoNDSIOhfHg0KGXBjBjx4DXj0rUAgEAgEAoFLc61jYyXToyARITo9/gXdCgtanG3AArcb/1kZwPHebvx2BmBxvI0YgCN2vCBb328NiI5w++AX65vKgXMzoO9/u/H/awbcTfznbgVk/PddA6a3/zeXA5wBFwCL/ueG4v+zUTByAQBgAGlfOv28YwAAAABJRU5ErkJggg=="},98811:function(t){"use strict";t.exports="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"},27373:function(t){"use strict";t.exports="data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw=="}},i={};function a(t){var e=i[t];if(void 0!==e)return e.exports;var n=i[t]={id:t,loaded:!1,exports:{}};return o[t].call(n.exports,n,n.exports,a),n.loaded=!0,n.exports}a.m=o,e=[],a.O=function(t,n,o,i){if(!n){var r=1/0;for(u=0;u<e.length;u++){n=e[u][0],o=e[u][1],i=e[u][2];for(var s=!0,l=0;l<n.length;l++)(!1&i||r>=i)&&Object.keys(a.O).every((function(t){return a.O[t](n[l])}))?n.splice(l--,1):(s=!1,i<r&&(r=i));if(s){e.splice(u--,1);var c=o();void 0!==c&&(t=c)}}return t}i=i||0;for(var u=e.length;u>0&&e[u-1][2]>i;u--)e[u]=e[u-1];e[u]=[n,o,i]},a.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,{a:e}),e},a.d=function(t,e){for(var n in e)a.o(e,n)&&!a.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},a.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},a.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},a.j=2943,function(){a.b=document.baseURI||self.location.href;var t={2943:0};a.O.j=function(e){return 0===t[e]};var e=function(e,n){var o,i,r=n[0],s=n[1],l=n[2],c=0;if(r.some((function(e){return 0!==t[e]}))){for(o in s)a.o(s,o)&&(a.m[o]=s[o]);if(l)var u=l(a)}for(e&&e(n);c<r.length;c++)i=r[c],a.o(t,i)&&t[i]&&t[i][0](),t[i]=0;return a.O(u)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))}(),a.nc=void 0;var r=a.O(void 0,[7874],(function(){return a(71461)}));r=a.O(r)}();
+//# sourceMappingURL=core-main.js.map?v=e477bd09ad068209fe64 \ No newline at end of file
diff --git a/dist/core-main.js.map b/dist/core-main.js.map
index 4b2f4cec172..1d1c1738e2b 100644
--- a/dist/core-main.js.map
+++ b/dist/core-main.js.map
@@ -1 +1 @@
-{"version":3,"file":"core-main.js?v=c6b9e7cdfc8bfdd6f402","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/core/src/OC/legacy-loader.js","webpack:///nextcloud/core/src/OC/notification.js","webpack:///nextcloud/core/src/OC/xhr-error.js","webpack:///nextcloud/core/src/OC/apps.js","webpack:///nextcloud/core/src/OCP/appconfig.js","webpack:///nextcloud/core/src/OC/appconfig.js","webpack:///nextcloud/core/src/OC/appswebroots.js","webpack:///nextcloud/core/src/OC/backbone-webdav.js","webpack:///nextcloud/core/src/OC/backbone.js","webpack:///nextcloud/core/src/OC/config.js","webpack:///nextcloud/core/src/OC/contactsmenu.js","webpack:///nextcloud/core/src/OC/currentuser.js","webpack:///nextcloud/core/src/OCA/search.js","webpack:///nextcloud/core/src/OCA/index.js","webpack:///nextcloud/core/src/Util/a11y.js","webpack:///nextcloud/core/src/OC/dialogs.js","webpack:///nextcloud/core/src/OC/requesttoken.js","webpack:///nextcloud/core/src/OC/eventsource.js","webpack:///nextcloud/core/src/OC/menu.js","webpack:///nextcloud/core/src/OC/constants.js","webpack:///nextcloud/core/src/OC/admin.js","webpack:///nextcloud/core/src/OC/l10n-registry.js","webpack:///nextcloud/core/src/OC/l10n.js","webpack:///nextcloud/core/src/OC/msg.js","webpack:///nextcloud/core/src/OC/password-confirmation.js","webpack:///nextcloud/core/src/OC/theme.js","webpack:///nextcloud/core/src/OC/util-history.js","webpack:///nextcloud/core/src/OC/util.js","webpack:///nextcloud/core/src/OC/debug.js","webpack:///nextcloud/core/src/OC/webroot.js","webpack:///nextcloud/core/src/OC/get_set.js","webpack:///nextcloud/core/src/OC/index.js","webpack:///nextcloud/core/src/OC/appsettings.js","webpack:///nextcloud/core/src/OC/capabilities.js","webpack:///nextcloud/core/src/OC/host.js","webpack:///nextcloud/core/src/OC/query-string.js","webpack:///nextcloud/core/src/OC/plugins.js","webpack:///nextcloud/core/src/OC/navigation.js","webpack:///nextcloud/core/src/OC/routing.js","webpack:///nextcloud/core/src/session-heartbeat.js","webpack:///nextcloud/core/src/views/ContactsMenu.vue?vue&type=script&lang=js&","webpack:///nextcloud/core/src/views/ContactsMenu.vue","webpack://nextcloud/./core/src/views/ContactsMenu.vue?43c0","webpack://nextcloud/./core/src/views/ContactsMenu.vue?1de5","webpack://nextcloud/./core/src/views/ContactsMenu.vue?f71b","webpack:///nextcloud/core/src/components/AppMenu.vue","webpack:///nextcloud/core/src/components/AppMenu.vue?vue&type=script&lang=js&","webpack://nextcloud/./core/src/components/AppMenu.vue?8eda","webpack://nextcloud/./core/src/components/AppMenu.vue?95cf","webpack://nextcloud/./core/src/components/AppMenu.vue?d0fd","webpack:///nextcloud/core/src/components/UserMenu/UserMenuEntry.vue","webpack:///nextcloud/core/src/components/UserMenu/UserMenuEntry.vue?vue&type=script&lang=js&","webpack://nextcloud/./core/src/components/UserMenu/UserMenuEntry.vue?6a6f","webpack://nextcloud/./core/src/components/UserMenu/UserMenuEntry.vue?a480","webpack://nextcloud/./core/src/components/UserMenu/UserMenuEntry.vue?4de1","webpack:///nextcloud/core/src/views/UserMenu.vue","webpack:///nextcloud/core/src/views/UserMenu.vue?vue&type=script&lang=js&","webpack://nextcloud/./core/src/views/UserMenu.vue?3de1","webpack://nextcloud/./core/src/views/UserMenu.vue?5d6d","webpack://nextcloud/./core/src/views/UserMenu.vue?4b20","webpack:///nextcloud/core/src/init.js","webpack:///nextcloud/core/src/Polyfill/tooltip.js","webpack:///nextcloud/core/src/components/UserMenu.js","webpack:///nextcloud/core/src/components/MainMenu.js","webpack:///nextcloud/core/src/components/ContactsMenu.js","webpack:///nextcloud/core/src/OCP/comments.js","webpack:///nextcloud/core/src/OCP/whatsnew.js","webpack:///nextcloud/core/src/OCP/accessibility.js","webpack:///nextcloud/core/src/globals.js","webpack:///nextcloud/core/src/OCP/collaboration.js","webpack:///nextcloud/core/src/OCP/loader.js","webpack:///nextcloud/core/src/OCP/toast.js","webpack:///nextcloud/core/src/OCP/index.js","webpack:///nextcloud/core/src/jquery/avatar.js","webpack:///nextcloud/core/src/jquery/contactsmenu.js","webpack:///nextcloud/core/src/jquery/exists.js","webpack:///nextcloud/core/src/jquery/filterattr.js","webpack:///nextcloud/core/src/jquery/ocdialog.js","webpack:///nextcloud/core/src/jquery/octemplate.js","webpack:///nextcloud/core/src/jquery/placeholder.js","webpack:///nextcloud/core/src/jquery/requesttoken.js","webpack:///nextcloud/core/src/jquery/selectrange.js","webpack:///nextcloud/core/src/jquery/showpassword.js","webpack:///nextcloud/core/src/jquery/ui-fixes.js","webpack://nextcloud/./core/src/jquery/css/jquery-ui-fixes.scss?a4c2","webpack://nextcloud/./core/src/jquery/css/jquery.ocdialog.scss?5718","webpack:///nextcloud/core/src/jquery/index.js","webpack:///nextcloud/core/src/main.js","webpack:///nextcloud/core/src/jquery/css/jquery-ui-fixes.scss","webpack:///nextcloud/core/src/jquery/css/jquery.ocdialog.scss","webpack:///nextcloud/core/src/components/AppMenu.vue?vue&type=style&index=0&id=44a795f6&prod&lang=scss&scoped=true&","webpack:///nextcloud/core/src/components/UserMenu/UserMenuEntry.vue?vue&type=style&index=0&id=6e59d13c&prod&lang=scss&scoped=true&","webpack:///nextcloud/core/src/views/ContactsMenu.vue?vue&type=style&index=0&id=e32bb484&prod&lang=scss&scoped=true&","webpack:///nextcloud/core/src/views/UserMenu.vue?vue&type=style&index=0&id=6a818bbc&prod&lang=scss&scoped=true&","webpack:///nextcloud/core/src/OC/contactsmenu/contact.handlebars","webpack:///nextcloud/core/src/OC/contactsmenu/error.handlebars","webpack:///nextcloud/core/src/OC/contactsmenu/list.handlebars","webpack:///nextcloud/core/src/OC/contactsmenu/loading.handlebars","webpack:///nextcloud/core/src/OC/contactsmenu/menu.handlebars","webpack:///nextcloud/core/src/jquery/contactsmenu/jquery_entry.handlebars","webpack:///nextcloud/node_modules/moment/locale|sync|/^\\.\\/.*$","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/** @typedef {import('jquery')} jQuery */\nimport $ from 'jquery'\nimport { generateFilePath } from '@nextcloud/router'\n\nconst loadedScripts = {}\nconst loadedStyles = []\n\n/**\n * Load a script for the server and load it. If the script is already loaded,\n * the event handler will be called directly\n *\n * @param {string} app the app id to which the script belongs\n * @param {string} script the filename of the script\n * @param {Function} ready event handler to be called when the script is loaded\n * @return {jQuery.Deferred}\n * @deprecated 16.0.0 Use OCP.Loader.loadScript\n */\nexport const addScript = (app, script, ready) => {\n\tconsole.warn('OC.addScript is deprecated, use OCP.Loader.loadScript instead')\n\n\tlet deferred\n\tconst path = generateFilePath(app, 'js', script + '.js')\n\tif (!loadedScripts[path]) {\n\t\tdeferred = $.Deferred()\n\t\t$.getScript(path, () => deferred.resolve())\n\t\tloadedScripts[path] = deferred\n\t} else {\n\t\tif (ready) {\n\t\t\tready()\n\t\t}\n\t}\n\treturn loadedScripts[path]\n}\n\n/**\n * Loads a CSS file\n *\n * @param {string} app the app id to which the css style belongs\n * @param {string} style the filename of the css file\n * @deprecated 16.0.0 Use OCP.Loader.loadStylesheet\n */\nexport const addStyle = (app, style) => {\n\tconsole.warn('OC.addStyle is deprecated, use OCP.Loader.loadStylesheet instead')\n\n\tconst path = generateFilePath(app, 'css', style + '.css')\n\tif (loadedStyles.indexOf(path) === -1) {\n\t\tloadedStyles.push(path)\n\t\tif (document.createStyleSheet) {\n\t\t\tdocument.createStyleSheet(path)\n\t\t} else {\n\t\t\tstyle = $('<link rel=\"stylesheet\" type=\"text/css\" href=\"' + path + '\"/>')\n\t\t\t$('head').append(style)\n\t\t}\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author npmbuildbot[bot] \"npmbuildbot[bot]@users.noreply.github.com\"\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\n/** @typedef {import('jquery')} jQuery */\nimport $ from 'jquery'\nimport { showMessage, TOAST_DEFAULT_TIMEOUT, TOAST_PERMANENT_TIMEOUT } from '@nextcloud/dialogs'\n\n/**\n * @todo Write documentation\n * @deprecated 17.0.0 use the `@nextcloud/dialogs` package instead\n * @namespace OC.Notification\n */\nexport default {\n\n\tupdatableNotification: null,\n\n\tgetDefaultNotificationFunction: null,\n\n\t/**\n\t * @param {Function} callback callback function\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tsetDefault(callback) {\n\t\tthis.getDefaultNotificationFunction = callback\n\t},\n\n\t/**\n\t * Hides a notification.\n\t *\n\t * If a row is given, only hide that one.\n\t * If no row is given, hide all notifications.\n\t *\n\t * @param {jQuery} [$row] notification row\n\t * @param {Function} [callback] callback\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\thide($row, callback) {\n\t\tif (_.isFunction($row)) {\n\t\t\t// first arg is the callback\n\t\t\tcallback = $row\n\t\t\t$row = undefined\n\t\t}\n\n\t\tif (!$row) {\n\t\t\tconsole.error('Missing argument $row in OC.Notification.hide() call, caller needs to be adjusted to only dismiss its own notification')\n\t\t\treturn\n\t\t}\n\n\t\t// remove the row directly\n\t\t$row.each(function() {\n\t\t\tif ($(this)[0].toastify) {\n\t\t\t\t$(this)[0].toastify.hideToast()\n\t\t\t} else {\n\t\t\t\tconsole.error('cannot hide toast because object is not set')\n\t\t\t}\n\t\t\tif (this === this.updatableNotification) {\n\t\t\t\tthis.updatableNotification = null\n\t\t\t}\n\t\t})\n\t\tif (callback) {\n\t\t\tcallback.call()\n\t\t}\n\t\tif (this.getDefaultNotificationFunction) {\n\t\t\tthis.getDefaultNotificationFunction()\n\t\t}\n\t},\n\n\t/**\n\t * Shows a notification as HTML without being sanitized before.\n\t * If you pass unsanitized user input this may lead to a XSS vulnerability.\n\t * Consider using show() instead of showHTML()\n\t *\n\t * @param {string} html Message to display\n\t * @param {object} [options] options\n\t * @param {string} [options.type] notification type\n\t * @param {number} [options.timeout=0] timeout value, defaults to 0 (permanent)\n\t * @return {jQuery} jQuery element for notification row\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshowHtml(html, options) {\n\t\toptions = options || {}\n\t\toptions.isHTML = true\n\t\toptions.timeout = (!options.timeout) ? TOAST_PERMANENT_TIMEOUT : options.timeout\n\t\tconst toast = showMessage(html, options)\n\t\ttoast.toastElement.toastify = toast\n\t\treturn $(toast.toastElement)\n\t},\n\n\t/**\n\t * Shows a sanitized notification\n\t *\n\t * @param {string} text Message to display\n\t * @param {object} [options] options\n\t * @param {string} [options.type] notification type\n\t * @param {number} [options.timeout=0] timeout value, defaults to 0 (permanent)\n\t * @return {jQuery} jQuery element for notification row\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshow(text, options) {\n\t\tconst escapeHTML = function(text) {\n\t\t\treturn text.toString()\n\t\t\t\t.split('&').join('&amp;')\n\t\t\t\t.split('<').join('&lt;')\n\t\t\t\t.split('>').join('&gt;')\n\t\t\t\t.split('\"').join('&quot;')\n\t\t\t\t.split('\\'').join('&#039;')\n\t\t}\n\n\t\toptions = options || {}\n\t\toptions.timeout = (!options.timeout) ? TOAST_PERMANENT_TIMEOUT : options.timeout\n\t\tconst toast = showMessage(escapeHTML(text), options)\n\t\ttoast.toastElement.toastify = toast\n\t\treturn $(toast.toastElement)\n\t},\n\n\t/**\n\t * Updates (replaces) a sanitized notification.\n\t *\n\t * @param {string} text Message to display\n\t * @return {jQuery} JQuery element for notificaiton row\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshowUpdate(text) {\n\t\tif (this.updatableNotification) {\n\t\t\tthis.updatableNotification.hideToast()\n\t\t}\n\t\tthis.updatableNotification = showMessage(text, { timeout: TOAST_PERMANENT_TIMEOUT })\n\t\tthis.updatableNotification.toastElement.toastify = this.updatableNotification\n\t\treturn $(this.updatableNotification.toastElement)\n\t},\n\n\t/**\n\t * Shows a notification that disappears after x seconds, default is\n\t * 7 seconds\n\t *\n\t * @param {string} text Message to show\n\t * @param {Array} [options] options array\n\t * @param {number} [options.timeout=7] timeout in seconds, if this is 0 it will show the message permanently\n\t * @param {boolean} [options.isHTML=false] an indicator for HTML notifications (true) or text (false)\n\t * @param {string} [options.type] notification type\n\t * @return {JQuery} the toast element\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshowTemporary(text, options) {\n\t\toptions = options || {}\n\t\toptions.timeout = options.timeout || TOAST_DEFAULT_TIMEOUT\n\t\tconst toast = showMessage(text, options)\n\t\ttoast.toastElement.toastify = toast\n\t\treturn $(toast.toastElement)\n\t},\n\n\t/**\n\t * Returns whether a notification is hidden.\n\t *\n\t * @return {boolean}\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tisHidden() {\n\t\treturn !$('#content').find('.toastify').length\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\nimport $ from 'jquery'\n\nimport OC from './index'\nimport Notification from './notification'\n\n/**\n * Warn users that the connection to the server was lost temporarily\n *\n * This function is throttled to prevent stacked notfications.\n * After 7sec the first notification is gone, then we can show another one\n * if necessary.\n */\nexport const ajaxConnectionLostHandler = _.throttle(() => {\n\tNotification.showTemporary(t('core', 'Connection to server lost'))\n}, 7 * 1000, { trailing: false })\n\n/**\n * Process ajax error, redirects to main page\n * if an error/auth error status was returned.\n *\n * @param {XMLHttpRequest} xhr xhr request\n */\nexport const processAjaxError = xhr => {\n\t// purposefully aborted request ?\n\t// OC._userIsNavigatingAway needed to distinguish ajax calls cancelled by navigating away\n\t// from calls cancelled by failed cross-domain ajax due to SSO redirect\n\tif (xhr.status === 0 && (xhr.statusText === 'abort' || xhr.statusText === 'timeout' || OC._reloadCalled)) {\n\t\treturn\n\t}\n\n\tif (_.contains([302, 303, 307, 401], xhr.status) && OC.currentUser) {\n\t\t// sometimes \"beforeunload\" happens later, so need to defer the reload a bit\n\t\tsetTimeout(function() {\n\t\t\tif (!OC._userIsNavigatingAway && !OC._reloadCalled) {\n\t\t\t\tlet timer = 0\n\t\t\t\tconst seconds = 5\n\t\t\t\tconst interval = setInterval(function() {\n\t\t\t\t\tNotification.showUpdate(n('core', 'Problem loading page, reloading in %n second', 'Problem loading page, reloading in %n seconds', seconds - timer))\n\t\t\t\t\tif (timer >= seconds) {\n\t\t\t\t\t\tclearInterval(interval)\n\t\t\t\t\t\tOC.reload()\n\t\t\t\t\t}\n\t\t\t\t\ttimer++\n\t\t\t\t}, 1000 // 1 second interval\n\t\t\t\t)\n\n\t\t\t\t// only call reload once\n\t\t\t\tOC._reloadCalled = true\n\t\t\t}\n\t\t}, 100)\n\t} else if (xhr.status === 0) {\n\t\t// Connection lost (e.g. WiFi disconnected or server is down)\n\t\tsetTimeout(function() {\n\t\t\tif (!OC._userIsNavigatingAway && !OC._reloadCalled) {\n\t\t\t\t// TODO: call method above directly\n\t\t\t\tOC._ajaxConnectionLostHandler()\n\t\t\t}\n\t\t}, 100)\n\t}\n}\n\n/**\n * Registers XmlHttpRequest object for global error processing.\n *\n * This means that if this XHR object returns 401 or session timeout errors,\n * the current page will automatically be reloaded.\n *\n * @param {XMLHttpRequest} xhr xhr request\n */\nexport const registerXHRForErrorProcessing = xhr => {\n\tconst loadCallback = () => {\n\t\tif (xhr.readyState !== 4) {\n\t\t\treturn\n\t\t}\n\n\t\tif ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) {\n\t\t\treturn\n\t\t}\n\n\t\t// fire jquery global ajax error handler\n\t\t$(document).trigger(new $.Event('ajaxError'), xhr)\n\t}\n\n\tconst errorCallback = () => {\n\t\t// fire jquery global ajax error handler\n\t\t$(document).trigger(new $.Event('ajaxError'), xhr)\n\t}\n\n\tif (xhr.addEventListener) {\n\t\txhr.addEventListener('load', loadCallback)\n\t\txhr.addEventListener('error', errorCallback)\n\t}\n\n}\n","/**\n * @copyright Bernhard Posselt 2014\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\nlet dynamicSlideToggleEnabled = false\n\nconst Apps = {\n\tenableDynamicSlideToggle() {\n\t\tdynamicSlideToggleEnabled = true\n\t},\n}\n\n/**\n * Shows the #app-sidebar and add .with-app-sidebar to subsequent siblings\n *\n * @param {object} [$el] sidebar element to show, defaults to $('#app-sidebar')\n */\nApps.showAppSidebar = function($el) {\n\tconst $appSidebar = $el || $('#app-sidebar')\n\t$appSidebar.removeClass('disappear').show()\n\t$('#app-content').trigger(new $.Event('appresized'))\n}\n\n/**\n * Shows the #app-sidebar and removes .with-app-sidebar from subsequent\n * siblings\n *\n * @param {object} [$el] sidebar element to hide, defaults to $('#app-sidebar')\n */\nApps.hideAppSidebar = function($el) {\n\tconst $appSidebar = $el || $('#app-sidebar')\n\t$appSidebar.hide().addClass('disappear')\n\t$('#app-content').trigger(new $.Event('appresized'))\n}\n\n/**\n * Provides a way to slide down a target area through a button and slide it\n * up if the user clicks somewhere else. Used for the news app settings and\n * add new field.\n *\n * Usage:\n * <button data-apps-slide-toggle=\".slide-area\">slide</button>\n * <div class=\".slide-area\" class=\"hidden\">I'm sliding up</div>\n */\nexport const registerAppsSlideToggle = () => {\n\tlet buttons = $('[data-apps-slide-toggle]')\n\n\tif (buttons.length === 0) {\n\t\t$('#app-navigation').addClass('without-app-settings')\n\t}\n\n\t$(document).click(function(event) {\n\n\t\tif (dynamicSlideToggleEnabled) {\n\t\t\tbuttons = $('[data-apps-slide-toggle]')\n\t\t}\n\n\t\tbuttons.each(function(index, button) {\n\n\t\t\tconst areaSelector = $(button).data('apps-slide-toggle')\n\t\t\tconst area = $(areaSelector)\n\n\t\t\t/**\n\t\t\t *\n\t\t\t */\n\t\t\tfunction hideArea() {\n\t\t\t\tarea.slideUp(OC.menuSpeed * 4, function() {\n\t\t\t\t\tarea.trigger(new $.Event('hide'))\n\t\t\t\t})\n\t\t\t\tarea.removeClass('opened')\n\t\t\t\t$(button).removeClass('opened')\n\t\t\t}\n\n\t\t\t/**\n\t\t\t *\n\t\t\t */\n\t\t\tfunction showArea() {\n\t\t\t\tarea.slideDown(OC.menuSpeed * 4, function() {\n\t\t\t\t\tarea.trigger(new $.Event('show'))\n\t\t\t\t})\n\t\t\t\tarea.addClass('opened')\n\t\t\t\t$(button).addClass('opened')\n\t\t\t\tconst input = $(areaSelector + ' [autofocus]')\n\t\t\t\tif (input.length === 1) {\n\t\t\t\t\tinput.focus()\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// do nothing if the area is animated\n\t\t\tif (!area.is(':animated')) {\n\n\t\t\t\t// button toggles the area\n\t\t\t\tif ($(button).is($(event.target).closest('[data-apps-slide-toggle]'))) {\n\t\t\t\t\tif (area.is(':visible')) {\n\t\t\t\t\t\thideArea()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tshowArea()\n\t\t\t\t\t}\n\n\t\t\t\t\t// all other areas that have not been clicked but are open\n\t\t\t\t\t// should be slid up\n\t\t\t\t} else {\n\t\t\t\t\tconst closest = $(event.target).closest(areaSelector)\n\t\t\t\t\tif (area.is(':visible') && closest[0] !== area[0]) {\n\t\t\t\t\t\thideArea()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t})\n}\n\nexport default Apps\n","/**\n * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nimport OC from '../OC/index'\n\n/**\n * @param {string} method 'post' or 'delete'\n * @param {string} endpoint endpoint\n * @param {object} [options] destructuring object\n * @param {object} [options.data] option data\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n */\nfunction call(method, endpoint, options) {\n\tif ((method === 'post' || method === 'delete') && OC.PasswordConfirmation.requiresPasswordConfirmation()) {\n\t\tOC.PasswordConfirmation.requirePasswordConfirmation(_.bind(call, this, method, endpoint, options))\n\t\treturn\n\t}\n\n\toptions = options || {}\n\t$.ajax({\n\t\ttype: method.toUpperCase(),\n\t\turl: generateOcsUrl('apps/provisioning_api/api/v1/config/apps') + endpoint,\n\t\tdata: options.data || {},\n\t\tsuccess: options.success,\n\t\terror: options.error,\n\t})\n}\n\n/**\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @since 11.0.0\n */\nexport function getApps(options) {\n\tcall('get', '', options)\n}\n\n/**\n * @param {string} app app id\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n * @since 11.0.0\n */\nexport function getKeys(app, options) {\n\tcall('get', '/' + app, options)\n}\n\n/**\n * @param {string} app app id\n * @param {string} key key\n * @param {string | Function} defaultValue default value\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n * @since 11.0.0\n */\nexport function getValue(app, key, defaultValue, options) {\n\toptions = options || {}\n\toptions.data = {\n\t\tdefaultValue,\n\t}\n\n\tcall('get', '/' + app + '/' + key, options)\n}\n\n/**\n * @param {string} app app id\n * @param {string} key key\n * @param {string} value value\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n * @since 11.0.0\n */\nexport function setValue(app, key, value, options) {\n\toptions = options || {}\n\toptions.data = {\n\t\tvalue,\n\t}\n\n\tcall('post', '/' + app + '/' + key, options)\n}\n\n/**\n * @param {string} app app id\n * @param {string} key key\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n * @since 11.0.0\n */\nexport function deleteKey(app, key, options) {\n\tcall('delete', '/' + app + '/' + key, options)\n}\n","/**\n * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Jörn Friedrich Dreyer <jfd@butonic.de>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\n import { getValue, setValue, getApps, getKeys, deleteKey } from '../OCP/appconfig'\n\nexport const appConfig = window.oc_appconfig || {}\n\n/**\n * @namespace\n * @deprecated 16.0.0 Use OCP.AppConfig instead\n */\nexport const AppConfig = {\n\t/**\n\t * @deprecated Use OCP.AppConfig.getValue() instead\n\t */\n\tgetValue: function(app, key, defaultValue, callback) {\n\t\tgetValue(app, key, defaultValue, {\n\t\t\tsuccess: callback\n\t\t})\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.setValue() instead\n\t */\n\tsetValue: function(app, key, value) {\n\t\tsetValue(app, key, value)\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.getApps() instead\n\t */\n\tgetApps: function(callback) {\n\t\tgetApps({\n\t\t\tsuccess: callback\n\t\t})\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.getKeys() instead\n\t */\n\tgetKeys: function(app, callback) {\n\t\tgetKeys(app, {\n\t\t\tsuccess: callback\n\t\t})\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.deleteKey() instead\n\t */\n\tdeleteKey: function(app, key) {\n\t\tdeleteKey(app, key)\n\t}\n\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst appswebroots = (window._oc_appswebroots !== undefined) ? window._oc_appswebroots : false\n\nexport default appswebroots\n","/**\n * Copyright (c) 2015\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport _ from 'underscore'\nimport { dav } from 'davclient.js'\n\nconst methodMap = {\n\tcreate: 'POST',\n\tupdate: 'PROPPATCH',\n\tpatch: 'PROPPATCH',\n\tdelete: 'DELETE',\n\tread: 'PROPFIND'\n}\n\n// Throw an error when a URL is needed, and none is supplied.\nfunction urlError() {\n\tthrow new Error('A \"url\" property or function must be specified')\n}\n\n/**\n * Convert a single propfind result to JSON\n *\n * @param {Object} result\n * @param {Object} davProperties properties mapping\n */\nfunction parsePropFindResult(result, davProperties) {\n\tif (_.isArray(result)) {\n\t\treturn _.map(result, function(subResult) {\n\t\t\treturn parsePropFindResult(subResult, davProperties)\n\t\t})\n\t}\n\tvar props = {\n\t\thref: result.href\n\t}\n\n\t_.each(result.propStat, function(propStat) {\n\t\tif (propStat.status !== 'HTTP/1.1 200 OK') {\n\t\t\treturn\n\t\t}\n\n\t\tfor (var key in propStat.properties) {\n\t\t\tvar propKey = key\n\t\t\tif (key in davProperties) {\n\t\t\t\tpropKey = davProperties[key]\n\t\t\t}\n\t\t\tprops[propKey] = propStat.properties[key]\n\t\t}\n\t})\n\n\tif (!props.id) {\n\t\t// parse id from href\n\t\tprops.id = parseIdFromLocation(props.href)\n\t}\n\n\treturn props\n}\n\n/**\n * Parse ID from location\n *\n * @param {string} url url\n * @returns {string} id\n */\nfunction parseIdFromLocation(url) {\n\tvar queryPos = url.indexOf('?')\n\tif (queryPos > 0) {\n\t\turl = url.substr(0, queryPos)\n\t}\n\n\tvar parts = url.split('/')\n\tvar result\n\tdo {\n\t\tresult = parts[parts.length - 1]\n\t\tparts.pop()\n\t\t// note: first result can be empty when there is a trailing slash,\n\t\t// so we take the part before that\n\t} while (!result && parts.length > 0)\n\n\treturn result\n}\n\nfunction isSuccessStatus(status) {\n\treturn status >= 200 && status <= 299\n}\n\nfunction convertModelAttributesToDavProperties(attrs, davProperties) {\n\tvar props = {}\n\tvar key\n\tfor (key in attrs) {\n\t\tvar changedProp = davProperties[key]\n\t\tvar value = attrs[key]\n\t\tif (!changedProp) {\n\t\t\tconsole.warn('No matching DAV property for property \"' + key)\n\t\t\tchangedProp = key\n\t\t}\n\t\tif (_.isBoolean(value) || _.isNumber(value)) {\n\t\t\t// convert to string\n\t\t\tvalue = '' + value\n\t\t}\n\t\tprops[changedProp] = value\n\t}\n\treturn props\n}\n\nfunction callPropFind(client, options, model, headers) {\n\treturn client.propFind(\n\t\toptions.url,\n\t\t_.values(options.davProperties) || [],\n\t\toptions.depth,\n\t\theaders\n\t).then(function(response) {\n\t\tif (isSuccessStatus(response.status)) {\n\t\t\tif (_.isFunction(options.success)) {\n\t\t\t\tvar propsMapping = _.invert(options.davProperties)\n\t\t\t\tvar results = parsePropFindResult(response.body, propsMapping)\n\t\t\t\tif (options.depth > 0) {\n\t\t\t\t\t// discard root entry\n\t\t\t\t\tresults.shift()\n\t\t\t\t}\n\n\t\t\t\toptions.success(results)\n\n\t\t\t}\n\t\t} else if (_.isFunction(options.error)) {\n\t\t\toptions.error(response)\n\t\t}\n\t})\n}\n\nfunction callPropPatch(client, options, model, headers) {\n\treturn client.propPatch(\n\t\toptions.url,\n\t\tconvertModelAttributesToDavProperties(model.changed, options.davProperties),\n\t\theaders\n\t).then(function(result) {\n\t\tif (isSuccessStatus(result.status)) {\n\t\t\tif (_.isFunction(options.success)) {\n\t\t\t\t// pass the object's own values because the server\n\t\t\t\t// does not return the updated model\n\t\t\t\toptions.success(model.toJSON())\n\t\t\t}\n\t\t} else if (_.isFunction(options.error)) {\n\t\t\toptions.error(result)\n\t\t}\n\t})\n\n}\n\nfunction callMkCol(client, options, model, headers) {\n\t// call MKCOL without data, followed by PROPPATCH\n\treturn client.request(\n\t\toptions.type,\n\t\toptions.url,\n\t\theaders,\n\t\tnull\n\t).then(function(result) {\n\t\tif (!isSuccessStatus(result.status)) {\n\t\t\tif (_.isFunction(options.error)) {\n\t\t\t\toptions.error(result)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tcallPropPatch(client, options, model, headers)\n\t})\n}\n\nfunction callMethod(client, options, model, headers) {\n\theaders['Content-Type'] = 'application/json'\n\treturn client.request(\n\t\toptions.type,\n\t\toptions.url,\n\t\theaders,\n\t\toptions.data\n\t).then(function(result) {\n\t\tif (!isSuccessStatus(result.status)) {\n\t\t\tif (_.isFunction(options.error)) {\n\t\t\t\toptions.error(result)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tif (_.isFunction(options.success)) {\n\t\t\tif (options.type === 'PUT' || options.type === 'POST' || options.type === 'MKCOL') {\n\t\t\t\t// pass the object's own values because the server\n\t\t\t\t// does not return anything\n\t\t\t\tvar responseJson = result.body || model.toJSON()\n\t\t\t\tvar locationHeader = result.xhr.getResponseHeader('Content-Location')\n\t\t\t\tif (options.type === 'POST' && locationHeader) {\n\t\t\t\t\tresponseJson.id = parseIdFromLocation(locationHeader)\n\t\t\t\t}\n\t\t\t\toptions.success(responseJson)\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// if multi-status, parse\n\t\t\tif (result.status === 207) {\n\t\t\t\tvar propsMapping = _.invert(options.davProperties)\n\t\t\t\toptions.success(parsePropFindResult(result.body, propsMapping))\n\t\t\t} else {\n\t\t\t\toptions.success(result.body)\n\t\t\t}\n\t\t}\n\t})\n}\n\nexport const davCall = (options, model) => {\n\tvar client = new dav.Client({\n\t\tbaseUrl: options.url,\n\t\txmlNamespaces: _.extend({\n\t\t\t'DAV:': 'd',\n\t\t\t'http://owncloud.org/ns': 'oc'\n\t\t}, options.xmlNamespaces || {})\n\t})\n\tclient.resolveUrl = function() {\n\t\treturn options.url\n\t}\n\tvar headers = _.extend({\n\t\t'X-Requested-With': 'XMLHttpRequest',\n\t\t'requesttoken': OC.requestToken\n\t}, options.headers)\n\tif (options.type === 'PROPFIND') {\n\t\treturn callPropFind(client, options, model, headers)\n\t} else if (options.type === 'PROPPATCH') {\n\t\treturn callPropPatch(client, options, model, headers)\n\t} else if (options.type === 'MKCOL') {\n\t\treturn callMkCol(client, options, model, headers)\n\t} else {\n\t\treturn callMethod(client, options, model, headers)\n\t}\n}\n\n/**\n * DAV transport\n */\nexport const davSync = Backbone => (method, model, options) => {\n\tvar params = { type: methodMap[method] || method }\n\tvar isCollection = (model instanceof Backbone.Collection)\n\n\tif (method === 'update') {\n\t\t// if a model has an inner collection, it must define an\n\t\t// attribute \"hasInnerCollection\" that evaluates to true\n\t\tif (model.hasInnerCollection) {\n\t\t\t// if the model itself is a Webdav collection, use MKCOL\n\t\t\tparams.type = 'MKCOL'\n\t\t} else if (model.usePUT || (model.collection && model.collection.usePUT)) {\n\t\t\t// use PUT instead of PROPPATCH\n\t\t\tparams.type = 'PUT'\n\t\t}\n\t}\n\n\t// Ensure that we have a URL.\n\tif (!options.url) {\n\t\tparams.url = _.result(model, 'url') || urlError()\n\t}\n\n\t// Ensure that we have the appropriate request data.\n\tif (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {\n\t\tparams.data = JSON.stringify(options.attrs || model.toJSON(options))\n\t}\n\n\t// Don't process data on a non-GET request.\n\tif (params.type !== 'PROPFIND') {\n\t\tparams.processData = false\n\t}\n\n\tif (params.type === 'PROPFIND' || params.type === 'PROPPATCH') {\n\t\tvar davProperties = model.davProperties\n\t\tif (!davProperties && model.model) {\n\t\t\t// use dav properties from model in case of collection\n\t\t\tdavProperties = model.model.prototype.davProperties\n\t\t}\n\t\tif (davProperties) {\n\t\t\tif (_.isFunction(davProperties)) {\n\t\t\t\tparams.davProperties = davProperties.call(model)\n\t\t\t} else {\n\t\t\t\tparams.davProperties = davProperties\n\t\t\t}\n\t\t}\n\n\t\tparams.davProperties = _.extend(params.davProperties || {}, options.davProperties)\n\n\t\tif (_.isUndefined(options.depth)) {\n\t\t\tif (isCollection) {\n\t\t\t\toptions.depth = 1\n\t\t\t} else {\n\t\t\t\toptions.depth = 0\n\t\t\t}\n\t\t}\n\t}\n\n\t// Pass along `textStatus` and `errorThrown` from jQuery.\n\tvar error = options.error\n\toptions.error = function(xhr, textStatus, errorThrown) {\n\t\toptions.textStatus = textStatus\n\t\toptions.errorThrown = errorThrown\n\t\tif (error) {\n\t\t\terror.call(options.context, xhr, textStatus, errorThrown)\n\t\t}\n\t}\n\n\t// Make the request, allowing the user to override any Ajax options.\n\tvar xhr = options.xhr = Backbone.davCall(_.extend(params, options), model)\n\tmodel.trigger('request', model, xhr, options)\n\treturn xhr\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport VendorBackbone from 'backbone'\nimport { davCall, davSync } from './backbone-webdav'\n\nconst Backbone = VendorBackbone.noConflict()\n\n// Patch Backbone for DAV\nObject.assign(Backbone, {\n\tdavCall,\n\tdavSync: davSync(Backbone),\n})\n\nexport default Backbone\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst config = window._oc_config || {}\n\nexport default config\n","/**\n * @copyright 2017 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport { Collection, Model, View } from 'backbone'\n\nimport OC from './index'\n\n/**\n * @class Contact\n */\nconst Contact = Model.extend({\n\tdefaults: {\n\t\tfullName: '',\n\t\tlastMessage: '',\n\t\tactions: [],\n\t\thasOneAction: false,\n\t\thasTwoActions: false,\n\t\thasManyActions: false\n\t},\n\n\t/**\n\t * @returns {undefined}\n\t */\n\tinitialize: function() {\n\t\t// Add needed property for easier template rendering\n\t\tif (this.get('actions').length === 0) {\n\t\t\tthis.set('hasOneAction', true)\n\t\t} else if (this.get('actions').length === 1) {\n\t\t\tthis.set('hasTwoActions', true)\n\t\t\tthis.set('secondAction', this.get('actions')[0])\n\t\t} else {\n\t\t\tthis.set('hasManyActions', true)\n\t\t}\n\t}\n})\n\n/**\n * @class ContactCollection\n * @private\n */\nconst ContactCollection = Collection.extend({\n\tmodel: Contact\n})\n\n/**\n * @class ContactsListView\n * @private\n */\nconst ContactsListView = View.extend({\n\n\t/** @type {ContactCollection} */\n\t_collection: undefined,\n\n\t/** @type {array} */\n\t_subViews: [],\n\n\t/**\n\t * @param {object} options\n\t * @returns {undefined}\n\t */\n\tinitialize: function(options) {\n\t\tthis._collection = options.collection\n\t},\n\n\t/**\n\t * @returns {self}\n\t */\n\trender: function() {\n\t\tvar self = this\n\t\tself.$el.html('')\n\t\tself._subViews = []\n\n\t\tself._collection.forEach(function(contact) {\n\t\t\tvar item = new ContactsListItemView({\n\t\t\t\tmodel: contact\n\t\t\t})\n\t\t\titem.render()\n\t\t\tself.$el.append(item.$el)\n\t\t\titem.on('toggle:actionmenu', self._onChildActionMenuToggle, self)\n\t\t\tself._subViews.push(item)\n\t\t})\n\n\t\treturn self\n\t},\n\n\t/**\n\t * Event callback to propagate opening (another) entry's action menu\n\t *\n\t * @param {type} $src\n\t * @returns {undefined}\n\t */\n\t_onChildActionMenuToggle: function($src) {\n\t\tthis._subViews.forEach(function(view) {\n\t\t\tview.trigger('parent:toggle:actionmenu', $src)\n\t\t})\n\t}\n})\n\n/**\n * @class ContactsListItemView\n * @private\n */\nconst ContactsListItemView = View.extend({\n\n\t/** @type {string} */\n\tclassName: 'contact',\n\n\t/** @type {undefined|function} */\n\t_template: undefined,\n\n\t/** @type {Contact} */\n\t_model: undefined,\n\n\t/** @type {boolean} */\n\t_actionMenuShown: false,\n\n\tevents: {\n\t\t'click .icon-more': '_onToggleActionsMenu'\n\t},\n\n\tcontactTemplate: require('./contactsmenu/contact.handlebars'),\n\n\t/**\n\t * @param {object} data\n\t * @returns {undefined}\n\t */\n\ttemplate: function(data) {\n\t\treturn this.contactTemplate(data)\n\t},\n\n\t/**\n\t * @param {object} options\n\t * @returns {undefined}\n\t */\n\tinitialize: function(options) {\n\t\tthis._model = options.model\n\t\tthis.on('parent:toggle:actionmenu', this._onOtherActionMenuOpened, this)\n\t},\n\n\t/**\n\t * @returns {self}\n\t */\n\trender: function() {\n\t\tthis.$el.html(this.template({\n\t\t\tcontact: this._model.toJSON()\n\t\t}))\n\t\tthis.delegateEvents()\n\n\t\t// Show placeholder if no avatar is available (avatar is rendered as img, not div)\n\t\tthis.$('div.avatar').imageplaceholder(this._model.get('fullName'))\n\n\t\t// Show tooltip for top action\n\t\tthis.$('.top-action').tooltip({ placement: 'left' })\n\t\t// Show tooltip for second action\n\t\tthis.$('.second-action').tooltip({ placement: 'left' })\n\n\t\treturn this\n\t},\n\n\t/**\n\t * Toggle the visibility of the action popover menu\n\t *\n\t * @private\n\t * @returns {undefined}\n\t */\n\t_onToggleActionsMenu: function() {\n\t\tthis._actionMenuShown = !this._actionMenuShown\n\t\tif (this._actionMenuShown) {\n\t\t\tthis.$('.menu').show()\n\t\t} else {\n\t\t\tthis.$('.menu').hide()\n\t\t}\n\t\tthis.trigger('toggle:actionmenu', this.$el)\n\t},\n\n\t/**\n\t * @private\n\t * @argument {jQuery} $src\n\t * @returns {undefined}\n\t */\n\t_onOtherActionMenuOpened: function($src) {\n\t\tif (this.$el.is($src)) {\n\t\t\t// Ignore\n\t\t\treturn\n\t\t}\n\t\tthis._actionMenuShown = false\n\t\tthis.$('.menu').hide()\n\t}\n})\n\n/**\n * @class ContactsMenuView\n * @private\n */\nconst ContactsMenuView = View.extend({\n\n\t/** @type {undefined|function} */\n\t_loadingTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_errorTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_contentTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_contactsTemplate: undefined,\n\n\t/** @type {undefined|ContactCollection} */\n\t_contacts: undefined,\n\n\t/** @type {string} */\n\t_searchTerm: '',\n\n\tevents: {\n\t\t'input #contactsmenu-search': '_onSearch'\n\t},\n\n\ttemplates: {\n\t\tloading: require('./contactsmenu/loading.handlebars'),\n\t\terror: require('./contactsmenu/error.handlebars'),\n\t\tmenu: require('./contactsmenu/menu.handlebars'),\n\t\tlist: require('./contactsmenu/list.handlebars')\n\t},\n\n\t/**\n\t * @returns {undefined}\n\t */\n\t_onSearch: _.debounce(function(e) {\n\t\tvar searchTerm = this.$('#contactsmenu-search').val()\n\t\t// IE11 triggers an 'input' event after the view has been rendered\n\t\t// resulting in an endless loading loop. To prevent this, we remember\n\t\t// the last search term to savely ignore some events\n\t\t// See https://github.com/nextcloud/server/issues/5281\n\t\tif (searchTerm !== this._searchTerm) {\n\t\t\tthis.trigger('search', this.$('#contactsmenu-search').val())\n\t\t\tthis._searchTerm = searchTerm\n\t\t}\n\t}, 700),\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tloadingTemplate: function(data) {\n\t\treturn this.templates.loading(data)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\terrorTemplate: function(data) {\n\t\treturn this.templates.error(\n\t\t\t_.extend({\n\t\t\t\tcouldNotLoadText: t('core', 'Could not load your contacts')\n\t\t\t}, data)\n\t\t)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tcontentTemplate: function(data) {\n\t\treturn this.templates.menu(\n\t\t\t_.extend({\n\t\t\t\tsearchContactsText: t('core', 'Search contacts …')\n\t\t\t}, data)\n\t\t)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tcontactsTemplate: function(data) {\n\t\treturn this.templates.list(\n\t\t\t_.extend({\n\t\t\t\tnoContactsFoundText: t('core', 'No contacts found'),\n\t\t\t\tshowAllContactsText: t('core', 'Show all contacts …'),\n\t\t\t\tcontactsAppMgmtText: t('core', 'Install the Contacts app')\n\t\t\t}, data)\n\t\t)\n\t},\n\n\t/**\n\t * @param {object} options\n\t * @returns {undefined}\n\t */\n\tinitialize: function(options) {\n\t\tthis.options = options\n\t},\n\n\t/**\n\t * @param {string} text\n\t * @returns {undefined}\n\t */\n\tshowLoading: function(text) {\n\t\tthis.render()\n\t\tthis._contacts = undefined\n\t\tthis.$('.content').html(this.loadingTemplate({\n\t\t\tloadingText: text\n\t\t}))\n\t},\n\n\t/**\n\t * @returns {undefined}\n\t */\n\tshowError: function() {\n\t\tthis.render()\n\t\tthis._contacts = undefined\n\t\tthis.$('.content').html(this.errorTemplate())\n\t},\n\n\t/**\n\t * @param {object} viewData\n\t * @param {string} searchTerm\n\t * @returns {undefined}\n\t */\n\tshowContacts: function(viewData, searchTerm) {\n\t\tthis._contacts = viewData.contacts\n\t\tthis.render({\n\t\t\tcontacts: viewData.contacts\n\t\t})\n\n\t\tvar list = new ContactsListView({\n\t\t\tcollection: viewData.contacts\n\t\t})\n\t\tlist.render()\n\t\tthis.$('.content').html(this.contactsTemplate({\n\t\t\tcontacts: viewData.contacts,\n\t\t\tsearchTerm: searchTerm,\n\t\t\tcontactsAppEnabled: viewData.contactsAppEnabled,\n\t\t\tcontactsAppURL: OC.generateUrl('/apps/contacts'),\n\t\t\tcanInstallApp: OC.isUserAdmin(),\n\t\t\tcontactsAppMgmtURL: OC.generateUrl('/settings/apps/social/contacts')\n\t\t}))\n\t\tthis.$('#contactsmenu-contacts').html(list.$el)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {self}\n\t */\n\trender: function(data) {\n\t\tvar searchVal = this.$('#contactsmenu-search').val()\n\t\tthis.$el.html(this.contentTemplate(data))\n\n\t\t// Focus search\n\t\tthis.$('#contactsmenu-search').val(searchVal)\n\t\tthis.$('#contactsmenu-search').focus()\n\t\treturn this\n\t}\n\n})\n\n/**\n * @param {Object} options\n * @param {string} options.el\n * @class ContactsMenu\n * @memberOf OC\n */\nconst ContactsMenu = function(options) {\n\tthis.initialize(options)\n}\n\nContactsMenu.prototype = {\n\t/** @type {string} */\n\t$el: undefined,\n\n\t/** @type {ContactsMenuView} */\n\t_view: undefined,\n\n\t/** @type {Promise} */\n\t_contactsPromise: undefined,\n\n\t/**\n\t * @param {Object} options\n\t * @param {string} options.el - the selector of the element to render the menu in\n\t * @returns {undefined}\n\t */\n\tinitialize: function(options) {\n\t\tthis.$el = $(options.el)\n\n\t\tthis._view = new ContactsMenuView({\n\t\t\tel: this.$el,\n\t\t})\n\n\t\tthis._view.on('search', function(searchTerm) {\n\t\t\tthis.loadContacts(searchTerm)\n\t\t}, this)\n\t},\n\n\t/**\n\t * @private\n\t * @param {string|undefined} searchTerm\n\t * @returns {Promise}\n\t */\n\t_getContacts: function(searchTerm) {\n\t\tvar url = OC.generateUrl('/contactsmenu/contacts')\n\t\treturn Promise.resolve($.ajax(url, {\n\t\t\tmethod: 'POST',\n\t\t\tdata: {\n\t\t\t\tfilter: searchTerm\n\t\t\t}\n\t\t}))\n\t},\n\n\t/**\n\t * @param {string|undefined} searchTerm\n\t * @returns {undefined}\n\t */\n\tloadContacts: function(searchTerm) {\n\t\tvar self = this\n\n\t\tif (!self._contactsPromise) {\n\t\t\tself._contactsPromise = self._getContacts(searchTerm)\n\t\t}\n\n\t\tif (_.isUndefined(searchTerm) || searchTerm === '') {\n\t\t\tself._view.showLoading(t('core', 'Loading your contacts …'))\n\t\t} else {\n\t\t\tself._view.showLoading(t('core', 'Looking for {term} …', {\n\t\t\t\tterm: searchTerm\n\t\t\t}))\n\t\t}\n\t\treturn self._contactsPromise.then(function(data) {\n\t\t\t// Convert contact entries to Backbone collection\n\t\t\tdata.contacts = new ContactCollection(data.contacts)\n\n\t\t\tself._view.showContacts(data, searchTerm)\n\t\t}, function(e) {\n\t\t\tself._view.showError()\n\t\t\tconsole.error('There was an error loading your contacts', e)\n\t\t}).then(function() {\n\t\t\t// Delete promise, so that contacts are fetched again when the\n\t\t\t// menu is opened the next time.\n\t\t\tdelete self._contactsPromise\n\t\t}).catch(console.error.bind(this))\n\t}\n}\n\nexport default ContactsMenu\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Joas Schilling <coding@schilljs.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst rawUid = document\n\t.getElementsByTagName('head')[0]\n\t.getAttribute('data-user')\nconst displayName = document\n\t.getElementsByTagName('head')[0]\n\t.getAttribute('data-user-displayname')\n\nexport const currentUser = rawUid !== undefined ? rawUid : false\n\nexport const getCurrentUser = () => {\n\treturn {\n\t\tuid: currentUser,\n\t\tdisplayName,\n\t}\n}\n","/**\n * @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class Search {\n\n\t/**\n\t * @deprecated 20.0.0, will be removed in Nextcloud 22\n\t */\n\tconstructor() {\n\t\tconsole.warn('OCA.Search is deprecated. Please use the unified search API instead')\n\t}\n\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Search from './search'\n\n/**\n * Namespace for apps\n *\n * @namespace OCA\n */\nexport default {\n\t/**\n\t * @deprecated 20.0.0, will be removed in Nextcloud 22\n\t */\n\tSearch,\n}\n","/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/**\n * Return whether the DOM event is an accessible mouse or keyboard element activation\n *\n * @param {Event} event DOM event\n *\n * @return {boolean}\n */\nexport const isA11yActivation = (event) => {\n\tif (event.type === 'click') {\n\t\treturn true\n\t}\n\tif (event.type === 'keydown' && event.key === 'Enter') {\n\t\treturn true\n\t}\n\treturn false\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author Bartek Przybylski <bart.p.pl@gmail.com>\n * @author Christopher Schäpers <kondou@ts.unde.re>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author Daniel Kesselberg <mail@danielkesselberg.de>\n * @author Florian Schunk <florian.schunk@rwth-aachen.de>\n * @author Gary Kim <gary@garykim.dev>\n * @author Hendrik Leppelsack <hendrik@leppelsack.de>\n * @author Jan-Christoph Borchardt <hey@jancborchardt.net>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Jörn Friedrich Dreyer <jfd@butonic.de>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Loïc Hermann <loic.hermann@sciam.fr>\n * @author Morris Jobke <hey@morrisjobke.de>\n * @author Olivier Paroz <github@oparoz.com>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Sujith Haridasan <Sujith_Haridasan@mentor.com>\n * @author Thomas Citharel <nextcloud@tcit.fr>\n * @author Thomas Müller <thomas.mueller@tmit.eu>\n * @author Thomas Tanghus <thomas@tanghus.net>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport _ from 'underscore'\nimport $ from 'jquery'\n\nimport OC from './index'\nimport OCA from '../OCA/index'\nimport { isA11yActivation } from '../Util/a11y'\n\n/**\n * this class to ease the usage of jquery dialogs\n */\nconst Dialogs = {\n\t// dialog button types\n\tYES_NO_BUTTONS: 70,\n\tOK_BUTTONS: 71,\n\n\tFILEPICKER_TYPE_CHOOSE: 1,\n\tFILEPICKER_TYPE_MOVE: 2,\n\tFILEPICKER_TYPE_COPY: 3,\n\tFILEPICKER_TYPE_COPY_MOVE: 4,\n\tFILEPICKER_TYPE_CUSTOM: 5,\n\n\t// used to name each dialog\n\tdialogsCounter: 0,\n\n\t/**\n\t * displays alert dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK\n\t * @param {boolean} [modal] make the dialog modal\n\t */\n\talert: function(text, title, callback, modal) {\n\t\tthis.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'alert',\n\t\t\tDialogs.OK_BUTTON,\n\t\t\tcallback,\n\t\t\tmodal\n\t\t)\n\t},\n\t/**\n\t * displays info dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK\n\t * @param {boolean} [modal] make the dialog modal\n\t */\n\tinfo: function(text, title, callback, modal) {\n\t\tthis.message(text, title, 'info', Dialogs.OK_BUTTON, callback, modal)\n\t},\n\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirm: function(text, title, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'notice',\n\t\t\tDialogs.YES_NO_BUTTONS,\n\t\t\tcallback,\n\t\t\tmodal\n\t\t)\n\t},\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {(number|{type: number, confirm: string, cancel: string, confirmClasses: string})} buttons text content of buttons\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirmDestructive: function(text, title, buttons, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'none',\n\t\t\tbuttons,\n\t\t\tcallback,\n\t\t\tmodal === undefined ? true : modal\n\t\t)\n\t},\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirmHtml: function(text, title, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'notice',\n\t\t\tDialogs.YES_NO_BUTTONS,\n\t\t\tcallback,\n\t\t\tmodal,\n\t\t\ttrue\n\t\t)\n\t},\n\t/**\n\t * displays prompt dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @param {string} name name of the input field\n\t * @param {boolean} password whether the input should be a password input\n\t * @returns {Promise}\n\t */\n\tprompt: function(text, title, callback, modal, name, password) {\n\t\treturn $.when(this._getMessageTemplate()).then(function($tmpl) {\n\t\t\tvar dialogName = 'oc-dialog-' + Dialogs.dialogsCounter + '-content'\n\t\t\tvar dialogId = '#' + dialogName\n\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\tmessage: text,\n\t\t\t\ttype: 'notice'\n\t\t\t})\n\t\t\tvar input = $('<input/>')\n\t\t\tinput.attr('type', password ? 'password' : 'text').attr('id', dialogName + '-input').attr('placeholder', name)\n\t\t\tvar label = $('<label/>').attr('for', dialogName + '-input').text(name + ': ')\n\t\t\t$dlg.append(label)\n\t\t\t$dlg.append(input)\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false\n\t\t\t}\n\t\t\t$('body').append($dlg)\n\n\t\t\t// wrap callback in _.once():\n\t\t\t// only call callback once and not twice (button handler and close\n\t\t\t// event) but call it for the close event, if ESC or the x is hit\n\t\t\tif (callback !== undefined) {\n\t\t\t\tcallback = _.once(callback)\n\t\t\t}\n\n\t\t\tvar buttonlist = [{\n\t\t\t\ttext: t('core', 'No'),\n\t\t\t\tclick: function() {\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(false, input.val())\n\t\t\t\t\t}\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\ttext: t('core', 'Yes'),\n\t\t\t\tclick: function() {\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(true, input.val())\n\t\t\t\t\t}\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t},\n\t\t\t\tdefaultButton: true\n\t\t\t}]\n\n\t\t\t$(dialogId).ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist,\n\t\t\t\tclose: function() {\n\t\t\t\t\t// callback is already fired if Yes/No is clicked directly\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(false, input.val())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\tinput.focus()\n\t\t\tDialogs.dialogsCounter++\n\t\t})\n\t},\n\t/**\n\t * show a file picker to pick a file from\n\t *\n\t * In order to pick several types of mime types they need to be passed as an\n\t * array of strings.\n\t *\n\t * When no mime type filter is given only files can be selected. In order to\n\t * be able to select both files and folders \"['*', 'httpd/unix-directory']\"\n\t * should be used instead.\n\t *\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses Choose\n\t * @param {boolean} [multiselect] whether it should be possible to select multiple files\n\t * @param {string[]} [mimetypeFilter] mimetype to filter by - directories will always be included\n\t * @param {boolean} [modal] make the dialog modal\n\t * @param {string} [type] Type of file picker : Choose, copy, move, copy and move\n\t * @param {string} [path] path to the folder that the the file can be picket from\n\t * @param {Object} [options] additonal options that need to be set\n\t * @param {Function} [options.filter] filter function for advanced filtering\n\t */\n\tfilepicker: function(title, callback, multiselect, mimetypeFilter, modal, type, path, options) {\n\t\tvar self = this\n\n\t\tthis.filepicker.sortField = 'name'\n\t\tthis.filepicker.sortOrder = 'asc'\n\t\t// avoid opening the picker twice\n\t\tif (this.filepicker.loading) {\n\t\t\treturn\n\t\t}\n\n\t\tif (type === undefined) {\n\t\t\ttype = this.FILEPICKER_TYPE_CHOOSE\n\t\t}\n\n\t\tvar emptyText = t('core', 'No files in here')\n\t\tvar newText = t('files', 'New folder')\n\t\tif (type === this.FILEPICKER_TYPE_COPY || type === this.FILEPICKER_TYPE_MOVE || type === this.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\temptyText = t('core', 'No more subfolders in here')\n\t\t}\n\n\t\tthis.filepicker.loading = true\n\t\tthis.filepicker.filesClient = (OCA.Sharing && OCA.Sharing.PublicApp && OCA.Sharing.PublicApp.fileList) ? OCA.Sharing.PublicApp.fileList.filesClient : OC.Files.getClient()\n\n\t\tthis.filelist = null\n\t\tpath = path || ''\n\t\toptions = Object.assign({\n\t\t\tallowDirectoryChooser: false\n\t\t}, options)\n\n\t\t$.when(this._getFilePickerTemplate()).then(function($tmpl) {\n\t\t\tself.filepicker.loading = false\n\t\t\tvar dialogName = 'oc-dialog-filepicker-content'\n\t\t\tif (self.$filePicker) {\n\t\t\t\tself.$filePicker.ocdialog('close')\n\t\t\t}\n\n\t\t\tif (mimetypeFilter === undefined || mimetypeFilter === null) {\n\t\t\t\tmimetypeFilter = []\n\t\t\t}\n\t\t\tif (typeof (mimetypeFilter) === 'string') {\n\t\t\t\tmimetypeFilter = [mimetypeFilter]\n\t\t\t}\n\n\t\t\tself.$filePicker = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\temptytext: emptyText,\n\t\t\t\tnewtext: newText,\n\t\t\t\tnameCol: t('core', 'Name'),\n\t\t\t\tsizeCol: t('core', 'Size'),\n\t\t\t\tmodifiedCol: t('core', 'Modified')\n\t\t\t}).data('path', path).data('multiselect', multiselect).data('mimetype', mimetypeFilter).data('allowDirectoryChooser', options.allowDirectoryChooser)\n\t\t\tif (typeof(options.filter) === 'function') {\n\t\t\t\tself.$filePicker.data('filter', options.filter)\n\t\t\t}\n\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false\n\t\t\t}\n\t\t\tif (multiselect === undefined) {\n\t\t\t\tmultiselect = false\n\t\t\t}\n\n\t\t\t$('body').prepend(self.$filePicker)\n\n\t\t\tself.$showGridView = $('button#picker-showgridview')\n\t\t\tself.$showGridView.on('click keydown', function(event) {\n\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\tself._onGridviewChange()\n\t\t\t\t}\n\t\t\t})\n\t\t\tself._getGridSettings()\n\n\t\t\tvar newButton = self.$filePicker.find('.actions.creatable .button-add')\n\t\t\tif (type === self.FILEPICKER_TYPE_CHOOSE && !options.allowDirectoryChooser) {\n\t\t\t\tself.$filePicker.find('.actions.creatable').hide()\n\t\t\t}\n\t\t\tnewButton.on('focus', function() {\n\t\t\t\tself.$filePicker.ocdialog('setEnterCallback', function(event) {\n\t\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tnewButton.click()\n\t\t\t\t})\n\t\t\t})\n\t\t\tnewButton.on('blur', function() {\n\t\t\t\tself.$filePicker.ocdialog('unsetEnterCallback')\n\t\t\t})\n\n\t\t\tOC.registerMenu(newButton, self.$filePicker.find('.menu'), function() {\n\t\t\t\t$input.tooltip('hide')\n\t\t\t\t$input.focus()\n\t\t\t\tself.$filePicker.ocdialog('setEnterCallback', function(event) {\n\t\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tself.$filePicker.submit()\n\t\t\t\t})\n\t\t\t\tvar newName = $input.val()\n\t\t\t\tvar lastPos = newName.lastIndexOf('.')\n\t\t\t\tif (lastPos === -1) {\n\t\t\t\t\tlastPos = newName.length\n\t\t\t\t}\n\t\t\t\t$input.selectRange(0, lastPos)\n\t\t\t})\n\t\t\tvar $form = self.$filePicker.find('.filenameform')\n\t\t\tvar $input = $form.find('input[type=\\'text\\']')\n\t\t\tvar $submit = $form.find('input[type=\\'submit\\']')\n\t\t\t$input.on('keydown', function(event) {\n\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t$form.submit()\n\t\t\t\t}\n\t\t\t})\n\t\t\t$submit.on('click', function(event) {\n\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\tevent.preventDefault()\n\t\t\t\t$form.submit()\n\t\t\t})\n\n\t\t\t/**\n\t\t\t * Checks whether the given file name is valid.\n\t\t\t *\n\t\t\t * @param name file name to check\n\t\t\t * @return true if the file name is valid.\n\t\t\t * @throws a string exception with an error message if\n\t\t\t * the file name is not valid\n\t\t\t *\n\t\t\t * NOTE: This function is duplicated in the files app:\n\t\t\t * https://github.com/nextcloud/server/blob/b9bc2417e7a8dc81feb0abe20359bedaf864f790/apps/files/js/files.js#L127-L148\n\t\t\t */\n\t\t\tvar isFileNameValid = function (name) {\n\t\t\t\tvar trimmedName = name.trim();\n\t\t\t\tif (trimmedName === '.' || trimmedName === '..')\n\t\t\t\t{\n\t\t\t\t\tthrow t('files', '\"{name}\" is an invalid file name.', {name: name})\n\t\t\t\t} else if (trimmedName.length === 0) {\n\t\t\t\t\tthrow t('files', 'File name cannot be empty.')\n\t\t\t\t} else if (trimmedName.indexOf('/') !== -1) {\n\t\t\t\t\tthrow t('files', '\"/\" is not allowed inside a file name.')\n\t\t\t\t} else if (!!(trimmedName.match(OC.config.blacklist_files_regex))) {\n\t\t\t\t\tthrow t('files', '\"{name}\" is not an allowed filetype', {name: name})\n\t\t\t\t}\n\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\tvar checkInput = function() {\n\t\t\t\tvar filename = $input.val()\n\t\t\t\ttry {\n\t\t\t\t\tif (!isFileNameValid(filename)) {\n\t\t\t\t\t\t// isFileNameValid(filename) throws an exception itself\n\t\t\t\t\t} else if (self.filelist.find(function(file) {\n\t\t\t\t\t\treturn file.name === this\n\t\t\t\t\t}, filename)) {\n\t\t\t\t\t\tthrow t('files', '{newName} already exists', { newName: filename }, undefined, {\n\t\t\t\t\t\t\tescape: false\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn true\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\t$input.attr('title', error)\n\t\t\t\t\t$input.tooltip({\n\t\t\t\t\t\tplacement: 'right',\n\t\t\t\t\t\ttrigger: 'manual',\n\t\t\t\t\t\t'container': '.newFolderMenu'\n\t\t\t\t\t})\n\t\t\t\t\t$input.tooltip('_fixTitle')\n\t\t\t\t\t$input.tooltip('show')\n\t\t\t\t\t$input.addClass('error')\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\t$form.on('submit', function(event) {\n\t\t\t\tevent.stopPropagation()\n\t\t\t\tevent.preventDefault()\n\n\t\t\t\tif (checkInput()) {\n\t\t\t\t\tvar newname = $input.val()\n\t\t\t\t\tself.filepicker.filesClient.createDirectory(self.$filePicker.data('path') + \"/\" + newname).always(function (status) {\n\t\t\t\t\t\tself._fillFilePicker(self.$filePicker.data('path') + \"/\" + newname, type)\n\t\t\t\t\t})\n\t\t\t\t\tOC.hideMenus()\n\t\t\t\t\tself.$filePicker.ocdialog('unsetEnterCallback')\n\t\t\t\t\tself.$filePicker.click()\n\t\t\t\t\t$input.val(newText)\n\t\t\t\t}\n\t\t\t})\n\t\t\t$input.on('input', function(event) {\n\t\t\t\t$input.tooltip('hide')\n\t\t\t})\n\n\t\t\tself.$filePicker.ready(function() {\n\t\t\t\tself.$fileListHeader = self.$filePicker.find('.filelist thead tr')\n\t\t\t\tself.$filelist = self.$filePicker.find('.filelist tbody')\n\t\t\t\tself.$filelistContainer = self.$filePicker.find('.filelist-container')\n\t\t\t\tself.$dirTree = self.$filePicker.find('.dirtree')\n\t\t\t\tself.$dirTree.on('click keydown', 'div:not(:last-child)', self, function(event) {\n\t\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\t\tself._handleTreeListSelect(event, type)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tself.$filelist.on('click keydown', 'tr', function(event) {\n\t\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\t\tself._handlePickerClick(event, $(this), type)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tself.$fileListHeader.on('click keydown', 'a', function(event) {\n\t\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\t\tvar dir = self.$filePicker.data('path')\n\t\t\t\t\t\tself.filepicker.sortField = $(event.currentTarget).data('sort')\n\t\t\t\t\t\tself.filepicker.sortOrder = self.filepicker.sortOrder === 'asc' ? 'desc' : 'asc'\n\t\t\t\t\t\tself._fillFilePicker(dir, type)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tself._fillFilePicker(path, type)\n\t\t\t})\n\n\t\t\t// build buttons\n\t\t\tvar functionToCall = function(returnType) {\n\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\tvar datapath\n\t\t\t\t\tif (multiselect === true) {\n\t\t\t\t\t\tdatapath = []\n\t\t\t\t\t\tself.$filelist.find('tr.filepicker_element_selected').each(function(index, element) {\n\t\t\t\t\t\t\tdatapath.push(self.$filePicker.data('path') + '/' + $(element).data('entryname'))\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdatapath = self.$filePicker.data('path')\n\t\t\t\t\t\tvar selectedName = self.$filelist.find('tr.filepicker_element_selected').data('entryname')\n\t\t\t\t\t\tif (selectedName) {\n\t\t\t\t\t\t\tdatapath += '/' + selectedName\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcallback(datapath, returnType)\n\t\t\t\t\tself.$filePicker.ocdialog('close')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar chooseCallback = function() {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_CHOOSE)\n\t\t\t}\n\n\t\t\tvar copyCallback = function() {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_COPY)\n\t\t\t}\n\n\t\t\tvar moveCallback = function() {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_MOVE)\n\t\t\t}\n\n\t\t\tvar buttonlist = []\n\t\t\tif (type === Dialogs.FILEPICKER_TYPE_CHOOSE) {\n\t\t\t\tbuttonlist.push({\n\t\t\t\t\ttext: t('core', 'Choose'),\n\t\t\t\t\tclick: chooseCallback,\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t})\n\t\t\t} else if (type === Dialogs.FILEPICKER_TYPE_CUSTOM) {\n\t\t\t\toptions.buttons.forEach(function(button) {\n\t\t\t\t\tbuttonlist.push({\n\t\t\t\t\t\ttext: button.text,\n\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\tfunctionToCall(button.type)\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdefaultButton: button.defaultButton\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tif (type === Dialogs.FILEPICKER_TYPE_COPY || type === Dialogs.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\t\t\tbuttonlist.push({\n\t\t\t\t\t\ttext: t('core', 'Copy'),\n\t\t\t\t\t\tclick: copyCallback,\n\t\t\t\t\t\tdefaultButton: false\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (type === Dialogs.FILEPICKER_TYPE_MOVE || type === Dialogs.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\t\t\tbuttonlist.push({\n\t\t\t\t\t\ttext: t('core', 'Move'),\n\t\t\t\t\t\tclick: moveCallback,\n\t\t\t\t\t\tdefaultButton: true\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tself.$filePicker.ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\t// max-width of 600\n\t\t\t\twidth: 600,\n\t\t\t\theight: 500,\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist,\n\t\t\t\tstyle: {\n\t\t\t\t\tbuttons: 'aside'\n\t\t\t\t},\n\t\t\t\tclose: function() {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t$(this).ocdialog('destroy').remove()\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t}\n\t\t\t\t\tself.$filePicker = null\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// We can access primary class only from oc-dialog.\n\t\t\t// Hence this is one of the approach to get the choose button.\n\t\t\tvar getOcDialog = self.$filePicker.closest('.oc-dialog')\n\t\t\tvar buttonEnableDisable = getOcDialog.find('.primary')\n\t\t\tif (self.$filePicker.data('mimetype').indexOf('httpd/unix-directory') !== -1 || self.$filePicker.data('allowDirectoryChooser')) {\n\t\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t\t} else {\n\t\t\t\tbuttonEnableDisable.prop('disabled', true)\n\t\t\t}\n\t\t})\n\t\t\t.fail(function(status, error) {\n\t\t\t\t// If the method is called while navigating away\n\t\t\t\t// from the page, it is probably not needed ;)\n\t\t\t\tself.filepicker.loading = false\n\t\t\t\tif (status !== 0) {\n\t\t\t\t\talert(t('core', 'Error loading file picker template: {error}', { error: error }))\n\t\t\t\t}\n\t\t\t})\n\t},\n\t/**\n\t * Displays raw dialog\n\t * You better use a wrapper instead ...\n\t */\n\tmessage: function(content, title, dialogType, buttons, callback, modal, allowHtml) {\n\t\treturn $.when(this._getMessageTemplate()).then(function($tmpl) {\n\t\t\tvar dialogName = 'oc-dialog-' + Dialogs.dialogsCounter + '-content'\n\t\t\tvar dialogId = '#' + dialogName\n\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\tmessage: content,\n\t\t\t\ttype: dialogType\n\t\t\t}, allowHtml ? { escapeFunction: '' } : {})\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false\n\t\t\t}\n\t\t\t$('body').append($dlg)\n\t\t\tvar buttonlist = []\n\t\t\tswitch (buttons) {\n\t\t\tcase Dialogs.YES_NO_BUTTONS:\n\t\t\t\tbuttonlist = [{\n\t\t\t\t\ttext: t('core', 'No'),\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\tcallback(false)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttext: t('core', 'Yes'),\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\tcallback(true)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t},\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t}]\n\t\t\t\tbreak\n\t\t\tcase Dialogs.OK_BUTTON:\n\t\t\t\tvar functionToCall = function() {\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\tcallback()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbuttonlist[0] = {\n\t\t\t\t\ttext: t('core', 'OK'),\n\t\t\t\t\tclick: functionToCall,\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tif (typeof(buttons) === 'object') {\n\t\t\t\t\tswitch (buttons.type) {\n\t\t\t\t\t\tcase Dialogs.YES_NO_BUTTONS:\n\t\t\t\t\t\t\tbuttonlist = [{\n\t\t\t\t\t\t\t\ttext: buttons.cancel || t('core', 'No'),\n\t\t\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\t\t\t\tcallback(false)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttext: buttons.confirm || t('core', 'Yes'),\n\t\t\t\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\t\t\t\t\tcallback(true)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdefaultButton: true,\n\t\t\t\t\t\t\t\t\tclasses: buttons.confirmClasses\n\t\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t$(dialogId).ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\tcloseCallback: () => { callback && callback(false) },\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist\n\t\t\t})\n\t\t\tDialogs.dialogsCounter++\n\t\t})\n\t\t\t.fail(function(status, error) {\n\t\t\t\t// If the method is called while navigating away from\n\t\t\t\t// the page, we still want to deliver the message.\n\t\t\t\tif (status === 0) {\n\t\t\t\t\talert(title + ': ' + content)\n\t\t\t\t} else {\n\t\t\t\t\talert(t('core', 'Error loading message template: {error}', { error: error }))\n\t\t\t\t}\n\t\t\t})\n\t},\n\t_fileexistsshown: false,\n\t/**\n\t * Displays file exists dialog\n\t * @param {object} data upload object\n\t * @param {object} original file with name, size and mtime\n\t * @param {object} replacement file with name, size and mtime\n\t * @param {object} controller with onCancel, onSkip, onReplace and onRename methods\n\t * @returns {Promise} jquery promise that resolves after the dialog template was loaded\n\t */\n\tfileexists: function(data, original, replacement, controller) {\n\t\tvar self = this\n\t\tvar dialogDeferred = new $.Deferred()\n\n\t\tvar getCroppedPreview = function(file) {\n\t\t\tvar deferred = new $.Deferred()\n\t\t\t// Only process image files.\n\t\t\tvar type = file.type && file.type.split('/').shift()\n\t\t\tif (window.FileReader && type === 'image') {\n\t\t\t\tvar reader = new FileReader()\n\t\t\t\treader.onload = function(e) {\n\t\t\t\t\tvar blob = new Blob([e.target.result])\n\t\t\t\t\twindow.URL = window.URL || window.webkitURL\n\t\t\t\t\tvar originalUrl = window.URL.createObjectURL(blob)\n\t\t\t\t\tvar image = new Image()\n\t\t\t\t\timage.src = originalUrl\n\t\t\t\t\timage.onload = function() {\n\t\t\t\t\t\tvar url = crop(image)\n\t\t\t\t\t\tdeferred.resolve(url)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treader.readAsArrayBuffer(file)\n\t\t\t} else {\n\t\t\t\tdeferred.reject()\n\t\t\t}\n\t\t\treturn deferred\n\t\t}\n\n\t\tvar crop = function(img) {\n\t\t\tvar canvas = document.createElement('canvas')\n\t\t\tvar targetSize = 96\n\t\t\tvar width = img.width\n\t\t\tvar height = img.height\n\t\t\tvar x; var y; var size\n\n\t\t\t// Calculate the width and height, constraining the proportions\n\t\t\tif (width > height) {\n\t\t\t\ty = 0\n\t\t\t\tx = (width - height) / 2\n\t\t\t} else {\n\t\t\t\ty = (height - width) / 2\n\t\t\t\tx = 0\n\t\t\t}\n\t\t\tsize = Math.min(width, height)\n\n\t\t\t// Set canvas size to the cropped area\n\t\t\tcanvas.width = size\n\t\t\tcanvas.height = size\n\t\t\tvar ctx = canvas.getContext('2d')\n\t\t\tctx.drawImage(img, x, y, size, size, 0, 0, size, size)\n\n\t\t\t// Resize the canvas to match the destination (right size uses 96px)\n\t\t\tresampleHermite(canvas, size, size, targetSize, targetSize)\n\n\t\t\treturn canvas.toDataURL('image/png', 0.7)\n\t\t}\n\n\t\t/**\n\t\t * Fast image resize/resample using Hermite filter with JavaScript.\n\t\t *\n\t\t * @author: ViliusL\n\t\t *\n\t\t * @param {*} canvas\n\t\t * @param {number} W\n\t\t * @param {number} H\n\t\t * @param {number} W2\n\t\t * @param {number} H2\n\t\t */\n\t\tvar resampleHermite = function(canvas, W, H, W2, H2) {\n\t\t\tW2 = Math.round(W2)\n\t\t\tH2 = Math.round(H2)\n\t\t\tvar img = canvas.getContext('2d').getImageData(0, 0, W, H)\n\t\t\tvar img2 = canvas.getContext('2d').getImageData(0, 0, W2, H2)\n\t\t\tvar data = img.data\n\t\t\tvar data2 = img2.data\n\t\t\tvar ratio_w = W / W2\n\t\t\tvar ratio_h = H / H2\n\t\t\tvar ratio_w_half = Math.ceil(ratio_w / 2)\n\t\t\tvar ratio_h_half = Math.ceil(ratio_h / 2)\n\n\t\t\tfor (var j = 0; j < H2; j++) {\n\t\t\t\tfor (var i = 0; i < W2; i++) {\n\t\t\t\t\tvar x2 = (i + j * W2) * 4\n\t\t\t\t\tvar weight = 0\n\t\t\t\t\tvar weights = 0\n\t\t\t\t\tvar weights_alpha = 0\n\t\t\t\t\tvar gx_r = 0\n\t\t\t\t\tvar gx_g = 0\n\t\t\t\t\tvar gx_b = 0\n\t\t\t\t\tvar gx_a = 0\n\t\t\t\t\tvar center_y = (j + 0.5) * ratio_h\n\t\t\t\t\tfor (var yy = Math.floor(j * ratio_h); yy < (j + 1) * ratio_h; yy++) {\n\t\t\t\t\t\tvar dy = Math.abs(center_y - (yy + 0.5)) / ratio_h_half\n\t\t\t\t\t\tvar center_x = (i + 0.5) * ratio_w\n\t\t\t\t\t\tvar w0 = dy * dy // pre-calc part of w\n\t\t\t\t\t\tfor (var xx = Math.floor(i * ratio_w); xx < (i + 1) * ratio_w; xx++) {\n\t\t\t\t\t\t\tvar dx = Math.abs(center_x - (xx + 0.5)) / ratio_w_half\n\t\t\t\t\t\t\tvar w = Math.sqrt(w0 + dx * dx)\n\t\t\t\t\t\t\tif (w >= -1 && w <= 1) {\n\t\t\t\t\t\t\t\t// hermite filter\n\t\t\t\t\t\t\t\tweight = 2 * w * w * w - 3 * w * w + 1\n\t\t\t\t\t\t\t\tif (weight > 0) {\n\t\t\t\t\t\t\t\t\tdx = 4 * (xx + yy * W)\n\t\t\t\t\t\t\t\t\t// alpha\n\t\t\t\t\t\t\t\t\tgx_a += weight * data[dx + 3]\n\t\t\t\t\t\t\t\t\tweights_alpha += weight\n\t\t\t\t\t\t\t\t\t// colors\n\t\t\t\t\t\t\t\t\tif (data[dx + 3] < 255) { weight = weight * data[dx + 3] / 250 }\n\t\t\t\t\t\t\t\t\tgx_r += weight * data[dx]\n\t\t\t\t\t\t\t\t\tgx_g += weight * data[dx + 1]\n\t\t\t\t\t\t\t\t\tgx_b += weight * data[dx + 2]\n\t\t\t\t\t\t\t\t\tweights += weight\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdata2[x2] = gx_r / weights\n\t\t\t\t\tdata2[x2 + 1] = gx_g / weights\n\t\t\t\t\tdata2[x2 + 2] = gx_b / weights\n\t\t\t\t\tdata2[x2 + 3] = gx_a / weights_alpha\n\t\t\t\t}\n\t\t\t}\n\t\t\tcanvas.getContext('2d').clearRect(0, 0, Math.max(W, W2), Math.max(H, H2))\n\t\t\tcanvas.width = W2\n\t\t\tcanvas.height = H2\n\t\t\tcanvas.getContext('2d').putImageData(img2, 0, 0)\n\t\t}\n\n\t\tvar addConflict = function($conflicts, original, replacement) {\n\n\t\t\tvar $conflict = $conflicts.find('.template').clone().removeClass('template').addClass('conflict')\n\t\t\tvar $originalDiv = $conflict.find('.original')\n\t\t\tvar $replacementDiv = $conflict.find('.replacement')\n\n\t\t\t$conflict.data('data', data)\n\n\t\t\t$conflict.find('.filename').text(original.name)\n\t\t\t$originalDiv.find('.size').text(OC.Util.humanFileSize(original.size))\n\t\t\t$originalDiv.find('.mtime').text(OC.Util.formatDate(original.mtime))\n\t\t\t// ie sucks\n\t\t\tif (replacement.size && replacement.lastModified) {\n\t\t\t\t$replacementDiv.find('.size').text(OC.Util.humanFileSize(replacement.size))\n\t\t\t\t$replacementDiv.find('.mtime').text(OC.Util.formatDate(replacement.lastModified))\n\t\t\t}\n\t\t\tvar path = original.directory + '/' + original.name\n\t\t\tvar urlSpec = {\n\t\t\t\tfile: path,\n\t\t\t\tx: 96,\n\t\t\t\ty: 96,\n\t\t\t\tc: original.etag,\n\t\t\t\tforceIcon: 0\n\t\t\t}\n\t\t\tvar previewpath = Files.generatePreviewUrl(urlSpec)\n\t\t\t// Escaping single quotes\n\t\t\tpreviewpath = previewpath.replace(/'/g, '%27')\n\t\t\t$originalDiv.find('.icon').css({ 'background-image': \"url('\" + previewpath + \"')\" })\n\t\t\tgetCroppedPreview(replacement).then(\n\t\t\t\tfunction(path) {\n\t\t\t\t\t$replacementDiv.find('.icon').css('background-image', 'url(' + path + ')')\n\t\t\t\t}, function() {\n\t\t\t\t\tpath = OC.MimeType.getIconUrl(replacement.type)\n\t\t\t\t\t$replacementDiv.find('.icon').css('background-image', 'url(' + path + ')')\n\t\t\t\t}\n\t\t\t)\n\t\t\t// connect checkboxes with labels\n\t\t\tvar checkboxId = $conflicts.find('.conflict').length\n\t\t\t$originalDiv.find('input:checkbox').attr('id', 'checkbox_original_' + checkboxId)\n\t\t\t$replacementDiv.find('input:checkbox').attr('id', 'checkbox_replacement_' + checkboxId)\n\n\t\t\t$conflicts.append($conflict)\n\n\t\t\t// set more recent mtime bold\n\t\t\t// ie sucks\n\t\t\tif (replacement.lastModified > original.mtime) {\n\t\t\t\t$replacementDiv.find('.mtime').css('font-weight', 'bold')\n\t\t\t} else if (replacement.lastModified < original.mtime) {\n\t\t\t\t$originalDiv.find('.mtime').css('font-weight', 'bold')\n\t\t\t} else {\n\t\t\t\t// TODO add to same mtime collection?\n\t\t\t}\n\n\t\t\t// set bigger size bold\n\t\t\tif (replacement.size && replacement.size > original.size) {\n\t\t\t\t$replacementDiv.find('.size').css('font-weight', 'bold')\n\t\t\t} else if (replacement.size && replacement.size < original.size) {\n\t\t\t\t$originalDiv.find('.size').css('font-weight', 'bold')\n\t\t\t} else {\n\t\t\t\t// TODO add to same size collection?\n\t\t\t}\n\n\t\t\t// TODO show skip action for files with same size and mtime in bottom row\n\n\t\t\t// always keep readonly files\n\n\t\t\tif (original.status === 'readonly') {\n\t\t\t\t$originalDiv\n\t\t\t\t\t.addClass('readonly')\n\t\t\t\t\t.find('input[type=\"checkbox\"]')\n\t\t\t\t\t.prop('checked', true)\n\t\t\t\t\t.prop('disabled', true)\n\t\t\t\t$originalDiv.find('.message')\n\t\t\t\t\t.text(t('core', 'read-only'))\n\t\t\t}\n\t\t}\n\t\t// var selection = controller.getSelection(data.originalFiles);\n\t\t// if (selection.defaultAction) {\n\t\t//\tcontroller[selection.defaultAction](data);\n\t\t// } else {\n\t\tvar dialogName = 'oc-dialog-fileexists-content'\n\t\tvar dialogId = '#' + dialogName\n\t\tif (this._fileexistsshown) {\n\t\t\t// add conflict\n\n\t\t\tvar $conflicts = $(dialogId + ' .conflicts')\n\t\t\taddConflict($conflicts, original, replacement)\n\n\t\t\tvar count = $(dialogId + ' .conflict').length\n\t\t\tvar title = n('core',\n\t\t\t\t'{count} file conflict',\n\t\t\t\t'{count} file conflicts',\n\t\t\t\tcount,\n\t\t\t\t{ count: count }\n\t\t\t)\n\t\t\t$(dialogId).parent().children('.oc-dialog-title').text(title)\n\n\t\t\t// recalculate dimensions\n\t\t\t$(window).trigger('resize')\n\t\t\tdialogDeferred.resolve()\n\t\t} else {\n\t\t\t// create dialog\n\t\t\tthis._fileexistsshown = true\n\t\t\t$.when(this._getFileExistsTemplate()).then(function($tmpl) {\n\t\t\t\tvar title = t('core', 'One file conflict')\n\t\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\t\tdialog_name: dialogName,\n\t\t\t\t\ttitle: title,\n\t\t\t\t\ttype: 'fileexists',\n\n\t\t\t\t\tallnewfiles: t('core', 'New Files'),\n\t\t\t\t\tallexistingfiles: t('core', 'Already existing files'),\n\n\t\t\t\t\twhy: t('core', 'Which files do you want to keep?'),\n\t\t\t\t\twhat: t('core', 'If you select both versions, the copied file will have a number added to its name.')\n\t\t\t\t})\n\t\t\t\t$('body').append($dlg)\n\n\t\t\t\tif (original && replacement) {\n\t\t\t\t\tvar $conflicts = $dlg.find('.conflicts')\n\t\t\t\t\taddConflict($conflicts, original, replacement)\n\t\t\t\t}\n\n\t\t\t\tvar buttonlist = [{\n\t\t\t\t\ttext: t('core', 'Cancel'),\n\t\t\t\t\tclasses: 'cancel',\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (typeof controller.onCancel !== 'undefined') {\n\t\t\t\t\t\t\tcontroller.onCancel(data)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttext: t('core', 'Continue'),\n\t\t\t\t\tclasses: 'continue',\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (typeof controller.onContinue !== 'undefined') {\n\t\t\t\t\t\t\tcontroller.onContinue($(dialogId + ' .conflict'))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t}]\n\n\t\t\t\t$(dialogId).ocdialog({\n\t\t\t\t\twidth: 500,\n\t\t\t\t\tcloseOnEscape: true,\n\t\t\t\t\tmodal: true,\n\t\t\t\t\tbuttons: buttonlist,\n\t\t\t\t\tcloseButton: null,\n\t\t\t\t\tclose: function() {\n\t\t\t\t\t\tself._fileexistsshown = false\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t$(this).ocdialog('destroy').remove()\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// ignore\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\t$(dialogId).css('height', 'auto')\n\n\t\t\t\tvar $primaryButton = $dlg.closest('.oc-dialog').find('button.continue')\n\t\t\t\t$primaryButton.prop('disabled', true)\n\n\t\t\t\tfunction updatePrimaryButton() {\n\t\t\t\t\tvar checkedCount = $dlg.find('.conflicts .checkbox:checked').length\n\t\t\t\t\t$primaryButton.prop('disabled', checkedCount === 0)\n\t\t\t\t}\n\n\t\t\t\t// add checkbox toggling actions\n\t\t\t\t$(dialogId).find('.allnewfiles').on('click', function() {\n\t\t\t\t\tvar $checkboxes = $(dialogId).find('.conflict .replacement input[type=\"checkbox\"]')\n\t\t\t\t\t$checkboxes.prop('checked', $(this).prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.allexistingfiles').on('click', function() {\n\t\t\t\t\tvar $checkboxes = $(dialogId).find('.conflict .original:not(.readonly) input[type=\"checkbox\"]')\n\t\t\t\t\t$checkboxes.prop('checked', $(this).prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.conflicts').on('click', '.replacement,.original:not(.readonly)', function() {\n\t\t\t\t\tvar $checkbox = $(this).find('input[type=\"checkbox\"]')\n\t\t\t\t\t$checkbox.prop('checked', !$checkbox.prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.conflicts').on('click', '.replacement input[type=\"checkbox\"],.original:not(.readonly) input[type=\"checkbox\"]', function() {\n\t\t\t\t\tvar $checkbox = $(this)\n\t\t\t\t\t$checkbox.prop('checked', !$checkbox.prop('checked'))\n\t\t\t\t})\n\n\t\t\t\t// update counters\n\t\t\t\t$(dialogId).on('click', '.replacement,.allnewfiles', function() {\n\t\t\t\t\tvar count = $(dialogId).find('.conflict .replacement input[type=\"checkbox\"]:checked').length\n\t\t\t\t\tif (count === $(dialogId + ' .conflict').length) {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', true)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text(t('core', '(all selected)'))\n\t\t\t\t\t} else if (count > 0) {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text(t('core', '({count} selected)', { count: count }))\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text('')\n\t\t\t\t\t}\n\t\t\t\t\tupdatePrimaryButton()\n\t\t\t\t})\n\t\t\t\t$(dialogId).on('click', '.original,.allexistingfiles', function() {\n\t\t\t\t\tvar count = $(dialogId).find('.conflict .original input[type=\"checkbox\"]:checked').length\n\t\t\t\t\tif (count === $(dialogId + ' .conflict').length) {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', true)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count').text(t('core', '(all selected)'))\n\t\t\t\t\t} else if (count > 0) {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count')\n\t\t\t\t\t\t\t.text(t('core', '({count} selected)', { count: count }))\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count').text('')\n\t\t\t\t\t}\n\t\t\t\t\tupdatePrimaryButton()\n\t\t\t\t})\n\n\t\t\t\tdialogDeferred.resolve()\n\t\t\t})\n\t\t\t\t.fail(function() {\n\t\t\t\t\tdialogDeferred.reject()\n\t\t\t\t\talert(t('core', 'Error loading file exists template'))\n\t\t\t\t})\n\t\t}\n\t\t// }\n\t\treturn dialogDeferred.promise()\n\t},\n\t// get the gridview setting and set the input accordingly\n\t_getGridSettings: function() {\n\t\tconst self = this\n\t\t$.get(OC.generateUrl('/apps/files/api/v1/showgridview'), function(response) {\n\t\t\tself.$showGridView\n\t\t\t\t.removeClass('icon-toggle-filelist icon-toggle-pictures')\n\t\t\t\t.addClass(response.gridview ? 'icon-toggle-filelist' : 'icon-toggle-pictures')\n\t\t\tself.$showGridView.attr(\n\t\t\t\t'aria-label',\n\t\t\t\tresponse.gridview ? t('files', 'Show list view') : t('files', 'Show grid view'),\n\t\t\t)\n\t\t\t$('.list-container').toggleClass('view-grid', response.gridview)\n\t\t})\n\t},\n\t_onGridviewChange: function() {\n\t\tconst isGridView = this.$showGridView.hasClass('icon-toggle-filelist')\n\t\t// only save state if user is logged in\n\t\tif (OC.currentUser) {\n\t\t\t$.post(OC.generateUrl('/apps/files/api/v1/showgridview'), { show: !isGridView })\n\t\t}\n\t\tthis.$showGridView\n\t\t\t.removeClass('icon-toggle-filelist icon-toggle-pictures')\n\t\t\t.addClass(isGridView ? 'icon-toggle-pictures' : 'icon-toggle-filelist')\n\t\tthis.$showGridView.attr(\n\t\t\t'aria-label',\n\t\t\tisGridView ? t('files', 'Show grid view') : t('files', 'Show list view'),\n\t\t)\n\t\tthis.$filePicker.find('.list-container').toggleClass('view-grid', !isGridView)\n\t},\n\t_getFilePickerTemplate: function() {\n\t\tvar defer = $.Deferred()\n\t\tif (!this.$filePickerTemplate) {\n\t\t\tvar self = this\n\t\t\t$.get(OC.filePath('core', 'templates', 'filepicker.html'), function(tmpl) {\n\t\t\t\tself.$filePickerTemplate = $(tmpl)\n\t\t\t\tself.$listTmpl = self.$filePickerTemplate.find('.filelist tbody tr:first-child').detach()\n\t\t\t\tdefer.resolve(self.$filePickerTemplate)\n\t\t\t})\n\t\t\t\t.fail(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\tdefer.reject(jqXHR.status, errorThrown)\n\t\t\t\t})\n\t\t} else {\n\t\t\tdefer.resolve(this.$filePickerTemplate)\n\t\t}\n\t\treturn defer.promise()\n\t},\n\t_getMessageTemplate: function() {\n\t\tvar defer = $.Deferred()\n\t\tif (!this.$messageTemplate) {\n\t\t\tvar self = this\n\t\t\t$.get(OC.filePath('core', 'templates', 'message.html'), function(tmpl) {\n\t\t\t\tself.$messageTemplate = $(tmpl)\n\t\t\t\tdefer.resolve(self.$messageTemplate)\n\t\t\t})\n\t\t\t\t.fail(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\tdefer.reject(jqXHR.status, errorThrown)\n\t\t\t\t})\n\t\t} else {\n\t\t\tdefer.resolve(this.$messageTemplate)\n\t\t}\n\t\treturn defer.promise()\n\t},\n\t_getFileExistsTemplate: function() {\n\t\tvar defer = $.Deferred()\n\t\tif (!this.$fileexistsTemplate) {\n\t\t\tvar self = this\n\t\t\t$.get(OC.filePath('files', 'templates', 'fileexists.html'), function(tmpl) {\n\t\t\t\tself.$fileexistsTemplate = $(tmpl)\n\t\t\t\tdefer.resolve(self.$fileexistsTemplate)\n\t\t\t})\n\t\t\t\t.fail(function() {\n\t\t\t\t\tdefer.reject()\n\t\t\t\t})\n\t\t} else {\n\t\t\tdefer.resolve(this.$fileexistsTemplate)\n\t\t}\n\t\treturn defer.promise()\n\t},\n\n\t/**\n\t * fills the filepicker with files\n\t */\n\t_fillFilePicker: async function(dir, type) {\n\t\tvar self = this\n\t\tthis.$filelist.empty()\n\t\tthis.$filePicker.find('.emptycontent').hide()\n\t\tthis.$filelistContainer.addClass('icon-loading')\n\t\tthis.$filePicker.data('path', dir)\n\t\tvar filter = this.$filePicker.data('mimetype')\n\t\tvar advancedFilter = this.$filePicker.data('filter')\n\t\tif (typeof (filter) === 'string') {\n\t\t\tfilter = [filter]\n\t\t}\n\t\tself.$fileListHeader.find('.sort-indicator').addClass('hidden').removeClass('icon-triangle-n').removeClass('icon-triangle-s')\n\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').removeClass('hidden')\n\t\tif (self.filepicker.sortOrder === 'asc') {\n\t\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').addClass('icon-triangle-n')\n\t\t} else {\n\t\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').addClass('icon-triangle-s')\n\t\t}\n\n\t\t// Wrap within a method because a promise cannot return multiple values\n\t\t// But the client impleemntation still does it...\n\t\tvar getFolderContents = async function(dir) {\n\t\t\treturn self.filepicker.filesClient.getFolderContents(dir)\n\t\t\t\t.then((status, files) => {\n\t\t\t\t\treturn files\n\t\t\t\t})\n\t\t}\n\n\t\ttry {\n\t\t\tvar files = await getFolderContents(dir)\n\t\t} catch (error) {\n\t\t\t// fallback to root if requested dir is non-existent\n\t\t\tconsole.error('Requested path does not exists, falling back to root')\n\t\t\tvar files = await getFolderContents('/')\n\t\t\tthis.$filePicker.data('path', '/')\n\t\t\tthis._changeButtonsText(type, '')\n\t\t}\n\n\t\tself.filelist = files\n\t\tif (filter && filter.length > 0 && filter.indexOf('*') === -1) {\n\t\t\tfiles = files.filter(function(file) {\n\t\t\t\treturn file.type === 'dir' || filter.indexOf(file.mimetype) !== -1\n\t\t\t})\n\t\t}\n\n\t\tif (advancedFilter) {\n\t\t\tfiles = files.filter(advancedFilter)\n\t\t}\n\n\t\t// Check if the showHidden input field exist and if it exist follow it\n\t\t// Otherwise just show the hidden files\n\t\tconst showHiddenInput = document.getElementById('showHiddenFiles')\n\t\tconst showHidden = showHiddenInput === null || showHiddenInput.value === \"1\"\n\t\tif (!showHidden) {\n\t\t\tfiles = files.filter(function(file) {\n\t\t\t\treturn !file.name.startsWith('.')\n\t\t\t})\n\t\t}\n\n\t\tvar Comparators = {\n\t\t\tname: function(fileInfo1, fileInfo2) {\n\t\t\t\tif (fileInfo1.type === 'dir' && fileInfo2.type !== 'dir') {\n\t\t\t\t\treturn -1\n\t\t\t\t}\n\t\t\t\tif (fileInfo1.type !== 'dir' && fileInfo2.type === 'dir') {\n\t\t\t\t\treturn 1\n\t\t\t\t}\n\t\t\t\treturn OC.Util.naturalSortCompare(fileInfo1.name, fileInfo2.name)\n\t\t\t},\n\t\t\tsize: function(fileInfo1, fileInfo2) {\n\t\t\t\treturn fileInfo1.size - fileInfo2.size\n\t\t\t},\n\t\t\tmtime: function(fileInfo1, fileInfo2) {\n\t\t\t\treturn fileInfo1.mtime - fileInfo2.mtime\n\t\t\t}\n\t\t}\n\t\tvar comparator = Comparators[self.filepicker.sortField] || Comparators.name\n\t\tfiles = files.sort(function(file1, file2) {\n\t\t\tvar isFavorite = function(fileInfo) {\n\t\t\t\treturn fileInfo.tags && fileInfo.tags.indexOf(OC.TAG_FAVORITE) >= 0\n\t\t\t}\n\n\t\t\tif (isFavorite(file1) && !isFavorite(file2)) {\n\t\t\t\treturn -1\n\t\t\t} else if (!isFavorite(file1) && isFavorite(file2)) {\n\t\t\t\treturn 1\n\t\t\t}\n\n\t\t\treturn self.filepicker.sortOrder === 'asc' ? comparator(file1, file2) : -comparator(file1, file2)\n\t\t})\n\n\t\tself._fillSlug()\n\n\t\tif (files.length === 0) {\n\t\t\tself.$filePicker.find('.emptycontent').show()\n\t\t\tself.$fileListHeader.hide()\n\t\t} else {\n\t\t\tself.$filePicker.find('.emptycontent').hide()\n\t\t\tself.$fileListHeader.show()\n\t\t}\n\n\t\tself.$filelist.empty();\n\n\t\t$.each(files, function(idx, entry) {\n\t\t\tif (entry.isEncrypted && entry.mimetype === 'httpd/unix-directory') {\n\t\t\t\tentry.icon = OC.MimeType.getIconUrl('dir-encrypted')\n\t\t\t} else {\n\t\t\t\tentry.icon = OC.MimeType.getIconUrl(entry.mimetype)\n\t\t\t}\n\n\t\t\tvar simpleSize, sizeColor\n\t\t\tif (typeof (entry.size) !== 'undefined' && entry.size >= 0) {\n\t\t\t\tsimpleSize = OC.Util.humanFileSize(parseInt(entry.size, 10), true)\n\t\t\t\tsizeColor = Math.round(160 - Math.pow((entry.size / (1024 * 1024)), 2))\n\t\t\t} else {\n\t\t\t\tsimpleSize = t('files', 'Pending')\n\t\t\t\tsizeColor = 80\n\t\t\t}\n\n\t\t\t// split the filename in half if the size is bigger than 20 char\n\t\t\t// for ellipsis\n\t\t\tif (entry.name.length >= 10) {\n\t\t\t\t// leave maximum 10 letters\n\t\t\t\tvar split = Math.min(Math.floor(entry.name.length / 2), 10)\n\t\t\t\tvar filename1 = entry.name.substr(0, entry.name.length - split)\n\t\t\t\tvar filename2 = entry.name.substr(entry.name.length - split)\n\t\t\t} else {\n\t\t\t\tvar filename1 = entry.name\n\t\t\t\tvar filename2 = ''\n\t\t\t}\n\n\t\t\tvar $row = self.$listTmpl.octemplate({\n\t\t\t\ttype: entry.type,\n\t\t\t\tdir: dir,\n\t\t\t\tfilename: entry.name,\n\t\t\t\tfilename1: filename1,\n\t\t\t\tfilename2: filename2,\n\t\t\t\tdate: OC.Util.relativeModifiedDate(entry.mtime),\n\t\t\t\tsize: simpleSize,\n\t\t\t\tsizeColor: sizeColor,\n\t\t\t\ticon: entry.icon\n\t\t\t})\n\t\t\tif (entry.type === 'file') {\n\t\t\t\tvar urlSpec = {\n\t\t\t\t\tfile: dir + '/' + entry.name,\n\t\t\t\t\tx: 100,\n\t\t\t\t\ty: 100\n\t\t\t\t}\n\t\t\t\tvar img = new Image()\n\t\t\t\tvar previewUrl = OC.generateUrl('/core/preview.png?') + $.param(urlSpec)\n\t\t\t\timg.onload = function() {\n\t\t\t\t\tif (img.width > 5) {\n\t\t\t\t\t\t$row.find('td.filename').attr('style', 'background-image:url(' + previewUrl + ')')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\timg.src = previewUrl\n\t\t\t}\n\t\t\tself.$filelist.append($row)\n\t\t})\n\n\t\tself.$filelistContainer.removeClass('icon-loading')\n\t},\n\t/**\n\t * fills the tree list with directories\n\t */\n\t_fillSlug: function() {\n\t\tvar addButton = this.$dirTree.find('.actions.creatable').detach()\n\t\tthis.$dirTree.empty()\n\t\tvar self = this\n\n\t\tself.$dirTree.append(addButton)\n\n\t\tvar dir\n\t\tvar path = this.$filePicker.data('path')\n\t\tvar $template = $('<div data-dir=\"{dir}\" tabindex=\"0\"><a>{name}</a></div>').addClass('crumb')\n\t\tif (path) {\n\t\t\tvar paths = path.split('/')\n\t\t\t$.each(paths, function(index, dir) {\n\t\t\t\tdir = paths.pop()\n\t\t\t\tif (dir === '') {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tself.$dirTree.prepend($template.octemplate({\n\t\t\t\t\tdir: paths.join('/') + '/' + dir,\n\t\t\t\t\tname: dir\n\t\t\t\t}))\n\t\t\t})\n\t\t}\n\n\t\t$template.octemplate({\n\t\t\tdir: '',\n\t\t\tname: '' // Ugly but works ;)\n\t\t}, { escapeFunction: null }).prependTo(this.$dirTree)\n\n\t},\n\t/**\n\t * handle selection made in the tree list\n\t */\n\t_handleTreeListSelect: function(event, type) {\n\t\tvar self = event.data\n\t\tvar dir = $(event.target).closest('.crumb').data('dir')\n\t\tself._fillFilePicker(dir, type)\n\t\tvar getOcDialog = (event.target).closest('.oc-dialog')\n\t\tvar buttonEnableDisable = $('.primary', getOcDialog)\n\t\tthis._changeButtonsText(type, dir.split(/[/]+/).pop())\n\t\tif (this.$filePicker.data('mimetype').indexOf('httpd/unix-directory') !== -1 || this.$filePicker.data('allowDirectoryChooser')) {\n\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t} else {\n\t\t\tbuttonEnableDisable.prop('disabled', true)\n\t\t}\n\t},\n\t/**\n\t * handle clicks made in the filepicker\n\t */\n\t_handlePickerClick: function(event, $element, type) {\n\t\tvar getOcDialog = this.$filePicker.closest('.oc-dialog')\n\t\tvar buttonEnableDisable = getOcDialog.find('.primary')\n\t\tif ($element.data('type') === 'file') {\n\t\t\tif (this.$filePicker.data('multiselect') !== true || !event.ctrlKey) {\n\t\t\t\tthis.$filelist.find('.filepicker_element_selected').removeClass('filepicker_element_selected')\n\t\t\t}\n\t\t\t$element.toggleClass('filepicker_element_selected')\n\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t} else if ($element.data('type') === 'dir') {\n\t\t\tthis._fillFilePicker(this.$filePicker.data('path') + '/' + $element.data('entryname'), type)\n\t\t\tthis._changeButtonsText(type, $element.data('entryname'))\n\t\t\tif (this.$filePicker.data('mimetype').indexOf('httpd/unix-directory') !== -1 || this.$filePicker.data('allowDirectoryChooser')) {\n\t\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t\t} else {\n\t\t\t\tbuttonEnableDisable.prop('disabled', true)\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Handle\n\t * @param type of action\n\t * @param dir on which to change buttons text\n\t * @private\n\t */\n\t_changeButtonsText: function(type, dir) {\n\t\tvar copyText = dir === '' ? t('core', 'Copy') : t('core', 'Copy to {folder}', { folder: dir })\n\t\tvar moveText = dir === '' ? t('core', 'Move') : t('core', 'Move to {folder}', { folder: dir })\n\t\tvar buttons = $('.oc-dialog-buttonrow button')\n\t\tswitch (type) {\n\t\t\tcase this.FILEPICKER_TYPE_CHOOSE:\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_CUSTOM:\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_COPY:\n\t\t\t\tbuttons.text(copyText)\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_MOVE:\n\t\t\t\tbuttons.text(moveText)\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_COPY_MOVE:\n\t\t\t\tbuttons.eq(0).text(copyText)\n\t\t\t\tbuttons.eq(1).text(moveText)\n\t\t\t\tbreak\n\t\t}\n\t}\n}\n\nexport default Dialogs\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { emit } from '@nextcloud/event-bus'\n\n/**\n * @private\n * @param {Document} global the document to read the initial value from\n * @param {Function} emit the function to invoke for every new token\n * @return {object}\n */\nexport const manageToken = (global, emit) => {\n\tlet token = global.getElementsByTagName('head')[0].getAttribute('data-requesttoken')\n\n\treturn {\n\t\tgetToken: () => token,\n\t\tsetToken: newToken => {\n\t\t\ttoken = newToken\n\n\t\t\temit('csrf-token-update', {\n\t\t\t\ttoken,\n\t\t\t})\n\t\t},\n\t}\n}\n\nconst manageFromDocument = manageToken(document, emit)\n\n/**\n * @return {string}\n */\nexport const getToken = manageFromDocument.getToken\n\n/**\n * @param {string} newToken new token\n */\nexport const setToken = manageFromDocument.setToken\n","/**\n * @copyright 2012 Robin Appelman icewind1991@gmail.com\n *\n * @author Arthur Schiwon <blizzz@arthur-schiwon.de>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Lukas Reschke <lukas@statuscode.ch>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Thomas Müller <thomas.mueller@tmit.eu>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport $ from 'jquery'\n\nimport { getToken } from './requesttoken'\n\n/**\n * Create a new event source\n * @param {string} src\n * @param {object} [data] to be send as GET\n *\n * @constructs OCEventSource\n */\nconst OCEventSource = function(src, data) {\n\tvar dataStr = ''\n\tvar name\n\tvar joinChar\n\tthis.typelessListeners = []\n\tthis.closed = false\n\tthis.listeners = {}\n\tif (data) {\n\t\tfor (name in data) {\n\t\t\tdataStr += name + '=' + encodeURIComponent(data[name]) + '&'\n\t\t}\n\t}\n\tdataStr += 'requesttoken=' + encodeURIComponent(getToken())\n\tif (!this.useFallBack && typeof EventSource !== 'undefined') {\n\t\tjoinChar = '&'\n\t\tif (src.indexOf('?') === -1) {\n\t\t\tjoinChar = '?'\n\t\t}\n\t\tthis.source = new EventSource(src + joinChar + dataStr)\n\t\tthis.source.onmessage = function(e) {\n\t\t\tfor (var i = 0; i < this.typelessListeners.length; i++) {\n\t\t\t\tthis.typelessListeners[i](JSON.parse(e.data))\n\t\t\t}\n\t\t}.bind(this)\n\t} else {\n\t\tvar iframeId = 'oc_eventsource_iframe_' + OCEventSource.iframeCount\n\t\tOCEventSource.fallBackSources[OCEventSource.iframeCount] = this\n\t\tthis.iframe = $('<iframe></iframe>')\n\t\tthis.iframe.attr('id', iframeId)\n\t\tthis.iframe.hide()\n\n\t\tjoinChar = '&'\n\t\tif (src.indexOf('?') === -1) {\n\t\t\tjoinChar = '?'\n\t\t}\n\t\tthis.iframe.attr('src', src + joinChar + 'fallback=true&fallback_id=' + OCEventSource.iframeCount + '&' + dataStr)\n\t\t$('body').append(this.iframe)\n\t\tthis.useFallBack = true\n\t\tOCEventSource.iframeCount++\n\t}\n\t// add close listener\n\tthis.listen('__internal__', function(data) {\n\t\tif (data === 'close') {\n\t\t\tthis.close()\n\t\t}\n\t}.bind(this))\n}\nOCEventSource.fallBackSources = []\nOCEventSource.iframeCount = 0// number of fallback iframes\nOCEventSource.fallBackCallBack = function(id, type, data) {\n\tOCEventSource.fallBackSources[id].fallBackCallBack(type, data)\n}\nOCEventSource.prototype = {\n\ttypelessListeners: [],\n\tiframe: null,\n\tlisteners: {}, // only for fallback\n\tuseFallBack: false,\n\t/**\n\t * Fallback callback for browsers that don't have the\n\t * native EventSource object.\n\t *\n\t * Calls the registered listeners.\n\t *\n\t * @private\n\t * @param {String} type event type\n\t * @param {Object} data received data\n\t */\n\tfallBackCallBack: function(type, data) {\n\t\tvar i\n\t\t// ignore messages that might appear after closing\n\t\tif (this.closed) {\n\t\t\treturn\n\t\t}\n\t\tif (type) {\n\t\t\tif (typeof this.listeners.done !== 'undefined') {\n\t\t\t\tfor (i = 0; i < this.listeners[type].length; i++) {\n\t\t\t\t\tthis.listeners[type][i](data)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor (i = 0; i < this.typelessListeners.length; i++) {\n\t\t\t\tthis.typelessListeners[i](data)\n\t\t\t}\n\t\t}\n\t},\n\tlastLength: 0, // for fallback\n\t/**\n\t * Listen to a given type of events.\n\t *\n\t * @param {String} type event type\n\t * @param {Function} callback event callback\n\t */\n\tlisten: function(type, callback) {\n\t\tif (callback && callback.call) {\n\n\t\t\tif (type) {\n\t\t\t\tif (this.useFallBack) {\n\t\t\t\t\tif (!this.listeners[type]) {\n\t\t\t\t\t\tthis.listeners[type] = []\n\t\t\t\t\t}\n\t\t\t\t\tthis.listeners[type].push(callback)\n\t\t\t\t} else {\n\t\t\t\t\tthis.source.addEventListener(type, function(e) {\n\t\t\t\t\t\tif (typeof e.data !== 'undefined') {\n\t\t\t\t\t\t\tcallback(JSON.parse(e.data))\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcallback('')\n\t\t\t\t\t\t}\n\t\t\t\t\t}, false)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.typelessListeners.push(callback)\n\t\t\t}\n\t\t}\n\t},\n\t/**\n\t * Closes this event source.\n\t */\n\tclose: function() {\n\t\tthis.closed = true\n\t\tif (typeof this.source !== 'undefined') {\n\t\t\tthis.source.close()\n\t\t}\n\t}\n}\n\nexport default OCEventSource\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\n/** @typedef {import('jquery')} jQuery */\nimport $ from 'jquery'\n\nimport { menuSpeed } from './constants'\n\nexport let currentMenu = null\nexport let currentMenuToggle = null\n\n/**\n * For menu toggling\n *\n * @param {jQuery} $toggle the toggle element\n * @param {jQuery} $menuEl the menu container element\n * @param {Function | undefined} toggle callback invoked everytime the menu is opened\n * @param {boolean} headerMenu is this a top right header menu?\n * @return {void}\n */\nexport const registerMenu = function($toggle, $menuEl, toggle, headerMenu) {\n\t$menuEl.addClass('menu')\n\tconst isClickableElement = $toggle.prop('tagName') === 'A' || $toggle.prop('tagName') === 'BUTTON'\n\n\t// On link and button, the enter key trigger a click event\n\t// Only use the click to avoid two fired events\n\t$toggle.on(isClickableElement ? 'click.menu' : 'click.menu keyup.menu', function(event) {\n\t\t// prevent the link event (append anchor to URL)\n\t\tevent.preventDefault()\n\n\t\t// allow enter key as a trigger\n\t\tif (event.key && event.key !== 'Enter') {\n\t\t\treturn\n\t\t}\n\n\t\tif ($menuEl.is(currentMenu)) {\n\t\t\thideMenus()\n\t\t\treturn\n\t\t} else if (currentMenu) {\n\t\t\t// another menu was open?\n\t\t\t// close it\n\t\t\thideMenus()\n\t\t}\n\n\t\tif (headerMenu === true) {\n\t\t\t$menuEl.parent().addClass('openedMenu')\n\t\t}\n\n\t\t// Set menu to expanded\n\t\t$toggle.attr('aria-expanded', true)\n\n\t\t$menuEl.slideToggle(menuSpeed, toggle)\n\t\tcurrentMenu = $menuEl\n\t\tcurrentMenuToggle = $toggle\n\t})\n}\n\n/**\n * Unregister a previously registered menu\n *\n * @param {jQuery} $toggle the toggle element\n * @param {jQuery} $menuEl the menu container element\n */\nexport const unregisterMenu = ($toggle, $menuEl) => {\n\t// close menu if opened\n\tif ($menuEl.is(currentMenu)) {\n\t\thideMenus()\n\t}\n\t$toggle.off('click.menu').removeClass('menutoggle')\n\t$menuEl.removeClass('menu')\n}\n\n/**\n * Hides any open menus\n *\n * @param {Function} complete callback when the hiding animation is done\n */\nexport const hideMenus = function(complete) {\n\tif (currentMenu) {\n\t\tconst lastMenu = currentMenu\n\t\tcurrentMenu.trigger(new $.Event('beforeHide'))\n\t\tcurrentMenu.slideUp(menuSpeed, function() {\n\t\t\tlastMenu.trigger(new $.Event('afterHide'))\n\t\t\tif (complete) {\n\t\t\t\tcomplete.apply(this, arguments)\n\t\t\t}\n\t\t})\n\t}\n\n\t// Set menu to closed\n\t$('.menutoggle').attr('aria-expanded', false)\n\tif (currentMenuToggle) {\n\t\tcurrentMenuToggle.attr('aria-expanded', false)\n\t}\n\n\t$('.openedMenu').removeClass('openedMenu')\n\tcurrentMenu = null\n\tcurrentMenuToggle = null\n}\n\n/**\n * Shows a given element as menu\n *\n * @param {object} [$toggle=null] menu toggle\n * @param {object} $menuEl menu element\n * @param {Function} complete callback when the showing animation is done\n */\nexport const showMenu = ($toggle, $menuEl, complete) => {\n\tif ($menuEl.is(currentMenu)) {\n\t\treturn\n\t}\n\thideMenus()\n\tcurrentMenu = $menuEl\n\tcurrentMenuToggle = $toggle\n\t$menuEl.trigger(new $.Event('beforeShow'))\n\t$menuEl.show()\n\t$menuEl.trigger(new $.Event('afterShow'))\n\t// no animation\n\tif (_.isFunction(complete)) {\n\t\tcomplete()\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const coreApps = ['', 'admin', 'log', 'core/search', 'core', '3rdparty']\nexport const menuSpeed = 50\nexport const PERMISSION_NONE = 0\nexport const PERMISSION_CREATE = 4\nexport const PERMISSION_READ = 1\nexport const PERMISSION_UPDATE = 2\nexport const PERMISSION_DELETE = 8\nexport const PERMISSION_SHARE = 16\nexport const PERMISSION_ALL = 31\nexport const TAG_FAVORITE = '_$!<Favorite>!$_'\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst isAdmin = !!window._oc_isadmin\n\n/**\n * Returns whether the current user is an administrator\n *\n * @return {boolean} true if the user is an admin, false otherwise\n * @since 9.0.0\n */\nexport const isUserAdmin = () => isAdmin\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n// This var is global because it's shared across webpack bundles\nwindow._oc_l10n_registry_translations = window._oc_l10n_registry_translations || {}\nwindow._oc_l10n_registry_plural_functions = window._oc_l10n_registry_plural_functions || {}\n\n/**\n * @param {string} appId the app id\n * @param {object} translations the translations list\n * @param {Function} pluralFunction the translations list\n */\nconst register = (appId, translations, pluralFunction) => {\n\twindow._oc_l10n_registry_translations[appId] = translations\n\twindow._oc_l10n_registry_plural_functions[appId] = pluralFunction\n}\n\n/**\n * @param {string} appId the app id\n * @param {object} translations the translations list\n * @param {Function} pluralFunction the translations list\n */\nconst extend = (appId, translations, pluralFunction) => {\n\twindow._oc_l10n_registry_translations[appId] = Object.assign(\n\t\twindow._oc_l10n_registry_translations[appId],\n\t\ttranslations\n\t)\n\twindow._oc_l10n_registry_plural_functions[appId] = pluralFunction\n}\n\n/**\n * @param {string} appId the app id\n * @param {object} translations the translations list\n * @param {Function} pluralFunction the translations list\n */\nexport const registerAppTranslations = (appId, translations, pluralFunction) => {\n\tif (!hasAppTranslations(appId)) {\n\t\tregister(appId, translations, pluralFunction)\n\t} else {\n\t\textend(appId, translations, pluralFunction)\n\t}\n}\n\n/**\n * @param {string} appId the app id\n */\nexport const unregisterAppTranslations = appId => {\n\tdelete window._oc_l10n_registry_translations[appId]\n\tdelete window._oc_l10n_registry_plural_functions[appId]\n}\n\n/**\n * @param {string} appId the app id\n * @return {boolean}\n */\nexport const hasAppTranslations = appId => {\n\treturn window._oc_l10n_registry_translations[appId] !== undefined\n\t\t&& window._oc_l10n_registry_plural_functions[appId] !== undefined\n}\n\n/**\n * @param {string} appId the app id\n * @return {object}\n */\nexport const getAppTranslations = appId => {\n\treturn {\n\t\ttranslations: window._oc_l10n_registry_translations[appId] || {},\n\t\tpluralFunction: window._oc_l10n_registry_plural_functions[appId],\n\t}\n}\n","/**\n * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>\n * Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)\n * Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Kesselberg <mail@danielkesselberg.de>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Morris Jobke <hey@morrisjobke.de>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport DOMPurify from 'dompurify'\nimport Handlebars from 'handlebars'\nimport identity from 'lodash/fp/identity'\nimport escapeHTML from 'escape-html'\nimport { generateFilePath } from '@nextcloud/router'\n\nimport OC from './index'\nimport {\n\tgetAppTranslations,\n\thasAppTranslations,\n\tregisterAppTranslations,\n\tunregisterAppTranslations,\n} from './l10n-registry'\n\n/**\n * L10N namespace with localization functions.\n *\n * @namespace OC.L10n\n */\nconst L10n = {\n\n\t/**\n\t * Load an app's translation bundle if not loaded already.\n\t *\n\t * @param {string} appName name of the app\n\t * @param {Function} callback callback to be called when\n\t * the translations are loaded\n\t * @return {Promise} promise\n\t */\n\tload(appName, callback) {\n\t\t// already available ?\n\t\tif (hasAppTranslations(appName) || OC.getLocale() === 'en') {\n\t\t\tconst deferred = $.Deferred()\n\t\t\tconst promise = deferred.promise()\n\t\t\tpromise.then(callback)\n\t\t\tdeferred.resolve()\n\t\t\treturn promise\n\t\t}\n\n\t\tconst self = this\n\t\tconst url = generateFilePath(appName, 'l10n', OC.getLocale() + '.json')\n\n\t\t// load JSON translation bundle per AJAX\n\t\treturn $.get(url)\n\t\t\t.then(\n\t\t\t\tfunction(result) {\n\t\t\t\t\tif (result.translations) {\n\t\t\t\t\t\tself.register(appName, result.translations, result.pluralForm)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t.then(callback)\n\t},\n\n\t/**\n\t * Register an app's translation bundle.\n\t *\n\t * @param {string} appName name of the app\n\t * @param {Object<string, string>} bundle bundle\n\t */\n\tregister(appName, bundle) {\n\t\tregisterAppTranslations(appName, bundle, this._getPlural)\n\t},\n\n\t/**\n\t * @private\n\t */\n\t_unregister: unregisterAppTranslations,\n\n\t/**\n\t * Translate a string\n\t *\n\t * @param {string} app the id of the app for which to translate the string\n\t * @param {string} text the string to translate\n\t * @param {object} [vars] map of placeholder key to value\n\t * @param {number} [count] number to replace %n with\n\t * @param {Array} [options] options array\n\t * @param {boolean} [options.escape=true] enable/disable auto escape of placeholders (by default enabled)\n\t * @param {boolean} [options.sanitize=true] enable/disable sanitization (by default enabled)\n\t * @return {string}\n\t */\n\ttranslate(app, text, vars, count, options) {\n\t\tconst defaultOptions = {\n\t\t\tescape: true,\n\t\t\tsanitize: true,\n\t\t}\n\t\tconst allOptions = options || {}\n\t\t_.defaults(allOptions, defaultOptions)\n\n\t\tconst optSanitize = allOptions.sanitize ? DOMPurify.sanitize : identity\n\t\tconst optEscape = allOptions.escape ? escapeHTML : identity\n\n\t\t// TODO: cache this function to avoid inline recreation\n\t\t// of the same function over and over again in case\n\t\t// translate() is used in a loop\n\t\tconst _build = function(text, vars, count) {\n\t\t\treturn text.replace(/%n/g, count).replace(/{([^{}]*)}/g,\n\t\t\t\tfunction(a, b) {\n\t\t\t\t\tconst r = vars[b]\n\t\t\t\t\tif (typeof r === 'string' || typeof r === 'number') {\n\t\t\t\t\t\treturn optSanitize(optEscape(r))\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn optSanitize(a)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\t\tlet translation = text\n\t\tconst bundle = getAppTranslations(app)\n\t\tconst value = bundle.translations[text]\n\t\tif (typeof (value) !== 'undefined') {\n\t\t\ttranslation = value\n\t\t}\n\n\t\tif (typeof vars === 'object' || count !== undefined) {\n\t\t\treturn optSanitize(_build(translation, vars, count))\n\t\t} else {\n\t\t\treturn optSanitize(translation)\n\t\t}\n\t},\n\n\t/**\n\t * Translate a plural string\n\t *\n\t * @param {string} app the id of the app for which to translate the string\n\t * @param {string} textSingular the string to translate for exactly one object\n\t * @param {string} textPlural the string to translate for n objects\n\t * @param {number} count number to determine whether to use singular or plural\n\t * @param {object} [vars] map of placeholder key to value\n\t * @param {Array} [options] options array\n\t * @param {boolean} [options.escape=true] enable/disable auto escape of placeholders (by default enabled)\n\t * @return {string} Translated string\n\t */\n\ttranslatePlural(app, textSingular, textPlural, count, vars, options) {\n\t\tconst identifier = '_' + textSingular + '_::_' + textPlural + '_'\n\t\tconst bundle = getAppTranslations(app)\n\t\tconst value = bundle.translations[identifier]\n\t\tif (typeof (value) !== 'undefined') {\n\t\t\tconst translation = value\n\t\t\tif ($.isArray(translation)) {\n\t\t\t\tconst plural = bundle.pluralFunction(count)\n\t\t\t\treturn this.translate(app, translation[plural], vars, count, options)\n\t\t\t}\n\t\t}\n\n\t\tif (count === 1) {\n\t\t\treturn this.translate(app, textSingular, vars, count, options)\n\t\t} else {\n\t\t\treturn this.translate(app, textPlural, vars, count, options)\n\t\t}\n\t},\n\n\t/**\n\t * The plural function taken from symfony\n\t *\n\t * @param {number} number the number of elements\n\t * @return {number}\n\t * @private\n\t */\n\t_getPlural(number) {\n\t\tlet language = OC.getLanguage()\n\t\tif (language === 'pt-BR') {\n\t\t\t// temporary set a locale for brazilian\n\t\t\tlanguage = 'xbr'\n\t\t}\n\n\t\tif (typeof language === 'undefined' || language === '') {\n\t\t\treturn (number === 1) ? 0 : 1\n\t\t}\n\n\t\tif (language.length > 3) {\n\t\t\tlanguage = language.substring(0, language.lastIndexOf('-'))\n\t\t}\n\n\t\t/*\n\t\t * The plural rules are derived from code of the Zend Framework (2010-09-25),\n\t\t * which is subject to the new BSD license (http://framework.zend.com/license/new-bsd).\n\t\t * Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)\n\t\t */\n\t\tswitch (language) {\n\t\tcase 'az':\n\t\tcase 'bo':\n\t\tcase 'dz':\n\t\tcase 'id':\n\t\tcase 'ja':\n\t\tcase 'jv':\n\t\tcase 'ka':\n\t\tcase 'km':\n\t\tcase 'kn':\n\t\tcase 'ko':\n\t\tcase 'ms':\n\t\tcase 'th':\n\t\tcase 'tr':\n\t\tcase 'vi':\n\t\tcase 'zh':\n\t\t\treturn 0\n\n\t\tcase 'af':\n\t\tcase 'bn':\n\t\tcase 'bg':\n\t\tcase 'ca':\n\t\tcase 'da':\n\t\tcase 'de':\n\t\tcase 'el':\n\t\tcase 'en':\n\t\tcase 'eo':\n\t\tcase 'es':\n\t\tcase 'et':\n\t\tcase 'eu':\n\t\tcase 'fa':\n\t\tcase 'fi':\n\t\tcase 'fo':\n\t\tcase 'fur':\n\t\tcase 'fy':\n\t\tcase 'gl':\n\t\tcase 'gu':\n\t\tcase 'ha':\n\t\tcase 'he':\n\t\tcase 'hu':\n\t\tcase 'is':\n\t\tcase 'it':\n\t\tcase 'ku':\n\t\tcase 'lb':\n\t\tcase 'ml':\n\t\tcase 'mn':\n\t\tcase 'mr':\n\t\tcase 'nah':\n\t\tcase 'nb':\n\t\tcase 'ne':\n\t\tcase 'nl':\n\t\tcase 'nn':\n\t\tcase 'no':\n\t\tcase 'oc':\n\t\tcase 'om':\n\t\tcase 'or':\n\t\tcase 'pa':\n\t\tcase 'pap':\n\t\tcase 'ps':\n\t\tcase 'pt':\n\t\tcase 'so':\n\t\tcase 'sq':\n\t\tcase 'sv':\n\t\tcase 'sw':\n\t\tcase 'ta':\n\t\tcase 'te':\n\t\tcase 'tk':\n\t\tcase 'ur':\n\t\tcase 'zu':\n\t\t\treturn (number === 1) ? 0 : 1\n\n\t\tcase 'am':\n\t\tcase 'bh':\n\t\tcase 'fil':\n\t\tcase 'fr':\n\t\tcase 'gun':\n\t\tcase 'hi':\n\t\tcase 'hy':\n\t\tcase 'ln':\n\t\tcase 'mg':\n\t\tcase 'nso':\n\t\tcase 'xbr':\n\t\tcase 'ti':\n\t\tcase 'wa':\n\t\t\treturn ((number === 0) || (number === 1)) ? 0 : 1\n\n\t\tcase 'be':\n\t\tcase 'bs':\n\t\tcase 'hr':\n\t\tcase 'ru':\n\t\tcase 'sh':\n\t\tcase 'sr':\n\t\tcase 'uk':\n\t\t\treturn ((number % 10 === 1) && (number % 100 !== 11)) ? 0 : (((number % 10 >= 2) && (number % 10 <= 4) && ((number % 100 < 10) || (number % 100 >= 20))) ? 1 : 2)\n\n\t\tcase 'cs':\n\t\tcase 'sk':\n\t\t\treturn (number === 1) ? 0 : (((number >= 2) && (number <= 4)) ? 1 : 2)\n\n\t\tcase 'ga':\n\t\t\treturn (number === 1) ? 0 : ((number === 2) ? 1 : 2)\n\n\t\tcase 'lt':\n\t\t\treturn ((number % 10 === 1) && (number % 100 !== 11)) ? 0 : (((number % 10 >= 2) && ((number % 100 < 10) || (number % 100 >= 20))) ? 1 : 2)\n\n\t\tcase 'sl':\n\t\t\treturn (number % 100 === 1) ? 0 : ((number % 100 === 2) ? 1 : (((number % 100 === 3) || (number % 100 === 4)) ? 2 : 3))\n\n\t\tcase 'mk':\n\t\t\treturn (number % 10 === 1) ? 0 : 1\n\n\t\tcase 'mt':\n\t\t\treturn (number === 1) ? 0 : (((number === 0) || ((number % 100 > 1) && (number % 100 < 11))) ? 1 : (((number % 100 > 10) && (number % 100 < 20)) ? 2 : 3))\n\n\t\tcase 'lv':\n\t\t\treturn (number === 0) ? 0 : (((number % 10 === 1) && (number % 100 !== 11)) ? 1 : 2)\n\n\t\tcase 'pl':\n\t\t\treturn (number === 1) ? 0 : (((number % 10 >= 2) && (number % 10 <= 4) && ((number % 100 < 12) || (number % 100 > 14))) ? 1 : 2)\n\n\t\tcase 'cy':\n\t\t\treturn (number === 1) ? 0 : ((number === 2) ? 1 : (((number === 8) || (number === 11)) ? 2 : 3))\n\n\t\tcase 'ro':\n\t\t\treturn (number === 1) ? 0 : (((number === 0) || ((number % 100 > 0) && (number % 100 < 20))) ? 1 : 2)\n\n\t\tcase 'ar':\n\t\t\treturn (number === 0) ? 0 : ((number === 1) ? 1 : ((number === 2) ? 2 : (((number % 100 >= 3) && (number % 100 <= 10)) ? 3 : (((number % 100 >= 11) && (number % 100 <= 99)) ? 4 : 5))))\n\n\t\tdefault:\n\t\t\treturn 0\n\t\t}\n\t},\n}\n\nexport default L10n\n\n/**\n * Returns the user's locale\n *\n * @return {string} locale string\n */\nexport const getLocale = () => $('html').data('locale') ?? 'en'\n\n/**\n * Returns the user's language\n *\n * @return {string} language string\n */\nexport const getLanguage = () => $('html').prop('lang')\n\nHandlebars.registerHelper('t', function(app, text) {\n\treturn L10n.translate(app, text)\n})\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author rakekniven <mark.ziegler@rakekniven.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * A little class to manage a status field for a \"saving\" process.\n * It can be used to display a starting message (e.g. \"Saving...\") and then\n * replace it with a green success message or a red error message.\n *\n * @namespace OC.msg\n */\nexport default {\n\t/**\n\t * Displayes a \"Saving...\" message in the given message placeholder\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t */\n\tstartSaving(selector) {\n\t\tthis.startAction(selector, t('core', 'Saving …'))\n\t},\n\n\t/**\n\t * Displayes a custom message in the given message placeholder\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {string} message Plain text message to display (no HTML allowed)\n\t */\n\tstartAction(selector, message) {\n\t\t$(selector).text(message)\n\t\t\t.removeClass('success')\n\t\t\t.removeClass('error')\n\t\t\t.stop(true, true)\n\t\t\t.show()\n\t},\n\n\t/**\n\t * Displayes an success/error message in the given selector\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {object} response Response of the server\n\t * @param {object} response.data Data of the servers response\n\t * @param {string} response.data.message Plain text message to display (no HTML allowed)\n\t * @param {string} response.status is being used to decide whether the message\n\t * is displayed as an error/success\n\t */\n\tfinishedSaving(selector, response) {\n\t\tthis.finishedAction(selector, response)\n\t},\n\n\t/**\n\t * Displayes an success/error message in the given selector\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {object} response Response of the server\n\t * @param {object} response.data Data of the servers response\n\t * @param {string} response.data.message Plain text message to display (no HTML allowed)\n\t * @param {string} response.status is being used to decide whether the message\n\t * is displayed as an error/success\n\t */\n\tfinishedAction(selector, response) {\n\t\tif (response.status === 'success') {\n\t\t\tthis.finishedSuccess(selector, response.data.message)\n\t\t} else {\n\t\t\tthis.finishedError(selector, response.data.message)\n\t\t}\n\t},\n\n\t/**\n\t * Displayes an success message in the given selector\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {string} message Plain text success message to display (no HTML allowed)\n\t */\n\tfinishedSuccess(selector, message) {\n\t\t$(selector).text(message)\n\t\t\t.addClass('success')\n\t\t\t.removeClass('error')\n\t\t\t.stop(true, true)\n\t\t\t.delay(3000)\n\t\t\t.fadeOut(900)\n\t\t\t.show()\n\t},\n\n\t/**\n\t * Displayes an error message in the given selector\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {string} message Plain text error message to display (no HTML allowed)\n\t */\n\tfinishedError(selector, message) {\n\t\t$(selector).text(message)\n\t\t\t.addClass('error')\n\t\t\t.removeClass('success')\n\t\t\t.show()\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport moment from 'moment'\nimport { generateUrl } from '@nextcloud/router'\n\nimport OC from './index'\n\n/**\n * @namespace OC.PasswordConfirmation\n */\nexport default {\n\tcallback: null,\n\n\tpageLoadTime: null,\n\n\tinit() {\n\t\t$('.password-confirm-required').on('click', _.bind(this.requirePasswordConfirmation, this))\n\t\tthis.pageLoadTime = moment.now()\n\t},\n\n\trequiresPasswordConfirmation() {\n\t\tconst serverTimeDiff = this.pageLoadTime - (window.nc_pageLoad * 1000)\n\t\tconst timeSinceLogin = moment.now() - (serverTimeDiff + (window.nc_lastLogin * 1000))\n\n\t\t// if timeSinceLogin > 30 minutes and user backend allows password confirmation\n\t\treturn (window.backendAllowsPasswordConfirmation && timeSinceLogin > 30 * 60 * 1000)\n\t},\n\n\t/**\n\t * @param {Function} callback success callback function\n\t * @param {object} options options\n\t * @param {Function} rejectCallback error callback function\n\t */\n\trequirePasswordConfirmation(callback, options, rejectCallback) {\n\t\toptions = typeof options !== 'undefined' ? options : {}\n\t\tconst defaults = {\n\t\t\ttitle: t('core', 'Authentication required'),\n\t\t\ttext: t(\n\t\t\t\t'core',\n\t\t\t\t'This action requires you to confirm your password'\n\t\t\t),\n\t\t\tconfirm: t('core', 'Confirm'),\n\t\t\tlabel: t('core', 'Password'),\n\t\t\terror: '',\n\t\t}\n\n\t\tconst config = _.extend(defaults, options)\n\n\t\tconst self = this\n\n\t\tif (this.requiresPasswordConfirmation()) {\n\t\t\tOC.dialogs.prompt(\n\t\t\t\tconfig.text,\n\t\t\t\tconfig.title,\n\t\t\t\tfunction(result, password) {\n\t\t\t\t\tif (result && password !== '') {\n\t\t\t\t\t\tself._confirmPassword(password, config)\n\t\t\t\t\t} else if (_.isFunction(rejectCallback)) {\n\t\t\t\t\t\trejectCallback()\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttrue,\n\t\t\t\tconfig.label,\n\t\t\t\ttrue\n\t\t\t).then(function() {\n\t\t\t\tconst $dialog = $('.oc-dialog:visible')\n\t\t\t\t$dialog.find('.ui-icon').remove()\n\t\t\t\t$dialog.addClass('password-confirmation')\n\t\t\t\tif (config.error !== '') {\n\t\t\t\t\tconst $error = $('<p></p>').addClass('msg warning').text(config.error)\n\t\t\t\t\t$dialog.find('.oc-dialog-content').append($error)\n\t\t\t\t}\n\t\t\t\t$dialog.find('.oc-dialog-buttonrow').addClass('aside')\n\n\t\t\t\tconst $buttons = $dialog.find('button')\n\t\t\t\t$buttons.eq(0).hide()\n\t\t\t\t$buttons.eq(1).text(config.confirm)\n\t\t\t})\n\t\t}\n\n\t\tthis.callback = callback\n\t},\n\n\t_confirmPassword(password, config) {\n\t\tconst self = this\n\n\t\t$.ajax({\n\t\t\turl: generateUrl('/login/confirm'),\n\t\t\tdata: {\n\t\t\t\tpassword,\n\t\t\t},\n\t\t\ttype: 'POST',\n\t\t\tsuccess(response) {\n\t\t\t\twindow.nc_lastLogin = response.lastLogin\n\n\t\t\t\tif (_.isFunction(self.callback)) {\n\t\t\t\t\tself.callback()\n\t\t\t\t}\n\t\t\t},\n\t\t\terror() {\n\t\t\t\tconfig.error = t('core', 'Failed to authenticate, try again')\n\t\t\t\tOC.PasswordConfirmation.requirePasswordConfirmation(self.callback, config)\n\t\t\t},\n\t\t})\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const theme = window._theme || {}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\nimport OC from './index'\n\n/**\n * Utility class for the history API,\n * includes fallback to using the URL hash when\n * the browser doesn't support the history API.\n *\n * @namespace OC.Util.History\n */\nexport default {\n\n\t_handlers: [],\n\n\t/**\n\t * Push the current URL parameters to the history stack\n\t * and change the visible URL.\n\t * Note: this includes a workaround for IE8/IE9 that uses\n\t * the hash part instead of the search part.\n\t *\n\t * @param {object | string} params to append to the URL, can be either a string\n\t * or a map\n\t * @param {string} [url] URL to be used, otherwise the current URL will be used,\n\t * using the params as query string\n\t * @param {boolean} [replace=false] whether to replace instead of pushing\n\t */\n\t_pushState(params, url, replace) {\n\t\tlet strParams\n\t\tif (typeof (params) === 'string') {\n\t\t\tstrParams = params\n\t\t} else {\n\t\t\tstrParams = OC.buildQueryString(params)\n\t\t}\n\n\t\tif (window.history.pushState) {\n\t\t\turl = url || location.pathname + '?' + strParams\n\t\t\t// Workaround for bug with SVG and window.history.pushState on Firefox < 51\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=652991\n\t\t\tconst isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1\n\t\t\tif (isFirefox && parseInt(navigator.userAgent.split('/').pop()) < 51) {\n\t\t\t\tconst patterns = document.querySelectorAll('[fill^=\"url(#\"], [stroke^=\"url(#\"], [filter^=\"url(#invert\"]')\n\t\t\t\tfor (let i = 0, ii = patterns.length, pattern; i < ii; i++) {\n\t\t\t\t\tpattern = patterns[i]\n\t\t\t\t\t// eslint-disable-next-line no-self-assign\n\t\t\t\t\tpattern.style.fill = pattern.style.fill\n\t\t\t\t\t// eslint-disable-next-line no-self-assign\n\t\t\t\t\tpattern.style.stroke = pattern.style.stroke\n\t\t\t\t\tpattern.removeAttribute('filter')\n\t\t\t\t\tpattern.setAttribute('filter', 'url(#invert)')\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (replace) {\n\t\t\t\twindow.history.replaceState(params, '', url)\n\t\t\t} else {\n\t\t\t\twindow.history.pushState(params, '', url)\n\t\t\t}\n\t\t} else {\n\t\t\t// use URL hash for IE8\n\t\t\twindow.location.hash = '?' + strParams\n\t\t\t// inhibit next onhashchange that just added itself\n\t\t\t// to the event queue\n\t\t\tthis._cancelPop = true\n\t\t}\n\t},\n\n\t/**\n\t * Push the current URL parameters to the history stack\n\t * and change the visible URL.\n\t * Note: this includes a workaround for IE8/IE9 that uses\n\t * the hash part instead of the search part.\n\t *\n\t * @param {object | string} params to append to the URL, can be either a string or a map\n\t * @param {string} [url] URL to be used, otherwise the current URL will be used, using the params as query string\n\t */\n\tpushState(params, url) {\n\t\tthis._pushState(params, url, false)\n\t},\n\n\t/**\n\t * Push the current URL parameters to the history stack\n\t * and change the visible URL.\n\t * Note: this includes a workaround for IE8/IE9 that uses\n\t * the hash part instead of the search part.\n\t *\n\t * @param {object | string} params to append to the URL, can be either a string\n\t * or a map\n\t * @param {string} [url] URL to be used, otherwise the current URL will be used,\n\t * using the params as query string\n\t */\n\treplaceState(params, url) {\n\t\tthis._pushState(params, url, true)\n\t},\n\n\t/**\n\t * Add a popstate handler\n\t *\n\t * @param {Function} handler handler\n\t */\n\taddOnPopStateHandler(handler) {\n\t\tthis._handlers.push(handler)\n\t},\n\n\t/**\n\t * Parse a query string from the hash part of the URL.\n\t * (workaround for IE8 / IE9)\n\t *\n\t * @return {string}\n\t */\n\t_parseHashQuery() {\n\t\tconst hash = window.location.hash\n\t\tconst pos = hash.indexOf('?')\n\t\tif (pos >= 0) {\n\t\t\treturn hash.substr(pos + 1)\n\t\t}\n\t\tif (hash.length) {\n\t\t\t// remove hash sign\n\t\t\treturn hash.substr(1)\n\t\t}\n\t\treturn ''\n\t},\n\n\t_decodeQuery(query) {\n\t\treturn query.replace(/\\+/g, ' ')\n\t},\n\n\t/**\n\t * Parse the query/search part of the URL.\n\t * Also try and parse it from the URL hash (for IE8)\n\t *\n\t * @return {object} map of parameters\n\t */\n\tparseUrlQuery() {\n\t\tconst query = this._parseHashQuery()\n\t\tlet params\n\t\t// try and parse from URL hash first\n\t\tif (query) {\n\t\t\tparams = OC.parseQueryString(this._decodeQuery(query))\n\t\t}\n\t\t// else read from query attributes\n\t\tparams = _.extend(params || {}, OC.parseQueryString(this._decodeQuery(location.search)))\n\t\treturn params || {}\n\t},\n\n\t_onPopState(e) {\n\t\tif (this._cancelPop) {\n\t\t\tthis._cancelPop = false\n\t\t\treturn\n\t\t}\n\t\tlet params\n\t\tif (!this._handlers.length) {\n\t\t\treturn\n\t\t}\n\t\tparams = (e && e.state)\n\t\tif (_.isString(params)) {\n\t\t\tparams = OC.parseQueryString(params)\n\t\t} else if (!params) {\n\t\t\tparams = this.parseUrlQuery() || {}\n\t\t}\n\t\tfor (let i = 0; i < this._handlers.length; i++) {\n\t\t\tthis._handlers[i](params)\n\t\t}\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport moment from 'moment'\n\nimport History from './util-history'\nimport OC from './index'\nimport { formatFileSize as humanFileSize } from '@nextcloud/files'\n\n/**\n * @param {any} t -\n */\nfunction chunkify(t) {\n\t// Adapted from http://my.opera.com/GreyWyvern/blog/show.dml/1671288\n\tconst tz = []\n\tlet x = 0\n\tlet y = -1\n\tlet n = 0\n\tlet c\n\n\twhile (x < t.length) {\n\t\tc = t.charAt(x)\n\t\t// only include the dot in strings\n\t\tconst m = ((!n && c === '.') || (c >= '0' && c <= '9'))\n\t\tif (m !== n) {\n\t\t\t// next chunk\n\t\t\ty++\n\t\t\ttz[y] = ''\n\t\t\tn = m\n\t\t}\n\t\ttz[y] += c\n\t\tx++\n\t}\n\treturn tz\n}\n\n/**\n * Utility functions\n *\n * @namespace OC.Util\n */\nexport default {\n\n\tHistory,\n\n\t/**\n\t * @deprecated use https://nextcloud.github.io/nextcloud-files/modules/_humanfilesize_.html#formatfilesize\n\t */\n\thumanFileSize,\n\n\t/**\n\t * Returns a file size in bytes from a humanly readable string\n\t * Makes 2kB to 2048.\n\t * Inspired by computerFileSize in helper.php\n\t *\n\t * @param {string} string file size in human readable format\n\t * @return {number} or null if string could not be parsed\n\t *\n\t *\n\t */\n\tcomputerFileSize(string) {\n\t\tif (typeof string !== 'string') {\n\t\t\treturn null\n\t\t}\n\n\t\tconst s = string.toLowerCase().trim()\n\t\tlet bytes = null\n\n\t\tconst bytesArray = {\n\t\t\tb: 1,\n\t\t\tk: 1024,\n\t\t\tkb: 1024,\n\t\t\tmb: 1024 * 1024,\n\t\t\tm: 1024 * 1024,\n\t\t\tgb: 1024 * 1024 * 1024,\n\t\t\tg: 1024 * 1024 * 1024,\n\t\t\ttb: 1024 * 1024 * 1024 * 1024,\n\t\t\tt: 1024 * 1024 * 1024 * 1024,\n\t\t\tpb: 1024 * 1024 * 1024 * 1024 * 1024,\n\t\t\tp: 1024 * 1024 * 1024 * 1024 * 1024,\n\t\t}\n\n\t\tconst matches = s.match(/^[\\s+]?([0-9]*)(\\.([0-9]+))?( +)?([kmgtp]?b?)$/i)\n\t\tif (matches !== null) {\n\t\t\tbytes = parseFloat(s)\n\t\t\tif (!isFinite(bytes)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\t\tif (matches[5]) {\n\t\t\tbytes = bytes * bytesArray[matches[5]]\n\t\t}\n\n\t\tbytes = Math.round(bytes)\n\t\treturn bytes\n\t},\n\n\t/**\n\t * @param {string|number} timestamp timestamp\n\t * @param {string} format date format, see momentjs docs\n\t * @return {string} timestamp formatted as requested\n\t */\n\tformatDate(timestamp, format) {\n\t\tif (window.TESTING === undefined) {\n\t\t\tconsole.warn('OC.Util.formatDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment')\n\t\t}\n\t\tformat = format || 'LLL'\n\t\treturn moment(timestamp).format(format)\n\t},\n\n\t/**\n\t * @param {string|number} timestamp timestamp\n\t * @return {string} human readable difference from now\n\t */\n\trelativeModifiedDate(timestamp) {\n\t\tif (window.TESTING === undefined) {\n\t\t\tconsole.warn('OC.Util.relativeModifiedDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment')\n\t\t}\n\t\tconst diff = moment().diff(moment(timestamp))\n\t\tif (diff >= 0 && diff < 45000) {\n\t\t\treturn t('core', 'seconds ago')\n\t\t}\n\t\treturn moment(timestamp).fromNow()\n\t},\n\n\t/**\n\t * Returns the width of a generic browser scrollbar\n\t *\n\t * @return {number} width of scrollbar\n\t */\n\tgetScrollBarWidth() {\n\t\tif (this._scrollBarWidth) {\n\t\t\treturn this._scrollBarWidth\n\t\t}\n\n\t\tconst inner = document.createElement('p')\n\t\tinner.style.width = '100%'\n\t\tinner.style.height = '200px'\n\n\t\tconst outer = document.createElement('div')\n\t\touter.style.position = 'absolute'\n\t\touter.style.top = '0px'\n\t\touter.style.left = '0px'\n\t\touter.style.visibility = 'hidden'\n\t\touter.style.width = '200px'\n\t\touter.style.height = '150px'\n\t\touter.style.overflow = 'hidden'\n\t\touter.appendChild(inner)\n\n\t\tdocument.body.appendChild(outer)\n\t\tconst w1 = inner.offsetWidth\n\t\touter.style.overflow = 'scroll'\n\t\tlet w2 = inner.offsetWidth\n\t\tif (w1 === w2) {\n\t\t\tw2 = outer.clientWidth\n\t\t}\n\n\t\tdocument.body.removeChild(outer)\n\n\t\tthis._scrollBarWidth = (w1 - w2)\n\n\t\treturn this._scrollBarWidth\n\t},\n\n\t/**\n\t * Remove the time component from a given date\n\t *\n\t * @param {Date} date date\n\t * @return {Date} date with stripped time\n\t */\n\tstripTime(date) {\n\t\t// FIXME: likely to break when crossing DST\n\t\t// would be better to use a library like momentJS\n\t\treturn new Date(date.getFullYear(), date.getMonth(), date.getDate())\n\t},\n\n\t/**\n\t * Compare two strings to provide a natural sort\n\t *\n\t * @param {string} a first string to compare\n\t * @param {string} b second string to compare\n\t * @return {number} -1 if b comes before a, 1 if a comes before b\n\t * or 0 if the strings are identical\n\t */\n\tnaturalSortCompare(a, b) {\n\t\tlet x\n\t\tconst aa = chunkify(a)\n\t\tconst bb = chunkify(b)\n\n\t\tfor (x = 0; aa[x] && bb[x]; x++) {\n\t\t\tif (aa[x] !== bb[x]) {\n\t\t\t\tconst aNum = Number(aa[x]); const bNum = Number(bb[x])\n\t\t\t\t// note: == is correct here\n\t\t\t\t/* eslint-disable-next-line */\n\t\t\t\tif (aNum == aa[x] && bNum == bb[x]) {\n\t\t\t\t\treturn aNum - bNum\n\t\t\t\t} else {\n\t\t\t\t\t// Note: This locale setting isn't supported by all browsers but for the ones\n\t\t\t\t\t// that do there will be more consistency between client-server sorting\n\t\t\t\t\treturn aa[x].localeCompare(bb[x], OC.getLanguage())\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn aa.length - bb.length\n\t},\n\n\t/**\n\t * Calls the callback in a given interval until it returns true\n\t *\n\t * @param {Function} callback function to call on success\n\t * @param {number} interval in milliseconds\n\t */\n\twaitFor(callback, interval) {\n\t\tconst internalCallback = function() {\n\t\t\tif (callback() !== true) {\n\t\t\t\tsetTimeout(internalCallback, interval)\n\t\t\t}\n\t\t}\n\n\t\tinternalCallback()\n\t},\n\n\t/**\n\t * Checks if a cookie with the given name is present and is set to the provided value.\n\t *\n\t * @param {string} name name of the cookie\n\t * @param {string} value value of the cookie\n\t * @return {boolean} true if the cookie with the given name has the given value\n\t */\n\tisCookieSetToValue(name, value) {\n\t\tconst cookies = document.cookie.split(';')\n\t\tfor (let i = 0; i < cookies.length; i++) {\n\t\t\tconst cookie = cookies[i].split('=')\n\t\t\tif (cookie[0].trim() === name && cookie[1].trim() === value) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\treturn false\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst base = window._oc_debug\n\nexport const debug = base\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nlet webroot = window._oc_webroot\n\nif (typeof webroot === 'undefined') {\n\twebroot = location.pathname\n\tconst pos = webroot.indexOf('/index.php/')\n\tif (pos !== -1) {\n\t\twebroot = webroot.substr(0, pos)\n\t} else {\n\t\twebroot = webroot.substr(0, webroot.lastIndexOf('/'))\n\t}\n}\n\nexport default webroot\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const get = context => name => {\n\tconst namespaces = name.split('.')\n\tconst tail = namespaces.pop()\n\n\tfor (let i = 0; i < namespaces.length; i++) {\n\t\tcontext = context[namespaces[i]]\n\t\tif (!context) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn context[tail]\n}\n\n/**\n * Set a variable by name\n *\n * @param {string} context context\n * @return {Function} setter\n * @deprecated 19.0.0 use https://lodash.com/docs#set\n */\nexport const set = context => (name, value) => {\n\tconst namespaces = name.split('.')\n\tconst tail = namespaces.pop()\n\n\tfor (let i = 0; i < namespaces.length; i++) {\n\t\tif (!context[namespaces[i]]) {\n\t\t\tcontext[namespaces[i]] = {}\n\t\t}\n\t\tcontext = context[namespaces[i]]\n\t}\n\tcontext[tail] = value\n\treturn value\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { subscribe } from '@nextcloud/event-bus'\n\nimport { addScript, addStyle } from './legacy-loader'\nimport {\n\tajaxConnectionLostHandler,\n\tprocessAjaxError,\n\tregisterXHRForErrorProcessing,\n} from './xhr-error'\nimport Apps from './apps'\nimport { AppConfig, appConfig } from './appconfig'\nimport { appSettings } from './appsettings'\nimport appswebroots from './appswebroots'\nimport Backbone from './backbone'\nimport {\n\tbasename,\n\tdirname,\n\tencodePath,\n\tisSamePath,\n\tjoinPaths,\n} from '@nextcloud/paths'\nimport {\n\tbuild as buildQueryString,\n\tparse as parseQueryString,\n} from './query-string'\nimport Config from './config'\nimport {\n\tcoreApps,\n\tmenuSpeed,\n\tPERMISSION_ALL,\n\tPERMISSION_CREATE,\n\tPERMISSION_DELETE,\n\tPERMISSION_NONE,\n\tPERMISSION_READ,\n\tPERMISSION_SHARE,\n\tPERMISSION_UPDATE,\n\tTAG_FAVORITE,\n} from './constants'\nimport ContactsMenu from './contactsmenu'\nimport { currentUser, getCurrentUser } from './currentuser'\nimport Dialogs from './dialogs'\nimport EventSource from './eventsource'\nimport { get, set } from './get_set'\nimport { getCapabilities } from './capabilities'\nimport {\n\tgetHost,\n\tgetHostName,\n\tgetPort,\n\tgetProtocol,\n} from './host'\nimport {\n\tgetToken as getRequestToken,\n} from './requesttoken'\nimport {\n\thideMenus,\n\tregisterMenu,\n\tshowMenu,\n\tunregisterMenu,\n} from './menu'\nimport { isUserAdmin } from './admin'\nimport L10N, {\n\tgetLanguage,\n\tgetLocale,\n} from './l10n'\nimport {\n\tgetCanonicalLocale,\n} from '@nextcloud/l10n'\n\nimport {\n\tgenerateUrl,\n\tgenerateFilePath,\n\tgenerateOcsUrl,\n\tgenerateRemoteUrl,\n\tgetRootUrl,\n\timagePath,\n\tlinkTo,\n} from '@nextcloud/router'\n\nimport {\n\tlinkToRemoteBase,\n} from './routing'\nimport msg from './msg'\nimport Notification from './notification'\nimport PasswordConfirmation from './password-confirmation'\nimport Plugins from './plugins'\nimport { theme } from './theme'\nimport Util from './util'\nimport { debug } from './debug'\nimport { redirect, reload } from './navigation'\nimport webroot from './webroot'\n\n/** @namespace OC */\nexport default {\n\t/*\n\t * Constants\n\t */\n\tcoreApps,\n\tmenuSpeed,\n\tPERMISSION_ALL,\n\tPERMISSION_CREATE,\n\tPERMISSION_DELETE,\n\tPERMISSION_NONE,\n\tPERMISSION_READ,\n\tPERMISSION_SHARE,\n\tPERMISSION_UPDATE,\n\tTAG_FAVORITE,\n\n\t/*\n\t * Deprecated helpers to be removed\n\t */\n\t/**\n\t * Check if a user file is allowed to be handled.\n\t *\n\t * @param {string} file to check\n\t * @return {boolean}\n\t * @deprecated 17.0.0\n\t */\n\tfileIsBlacklisted: file => !!(file.match(Config.blacklist_files_regex)),\n\n\taddScript,\n\taddStyle,\n\tApps,\n\tAppConfig,\n\tappConfig,\n\tappSettings,\n\tappswebroots,\n\tBackbone,\n\tContactsMenu,\n\tconfig: Config,\n\t/**\n\t * Currently logged in user or null if none\n\t *\n\t * @type {string}\n\t * @deprecated use `getCurrentUser` from https://www.npmjs.com/package/@nextcloud/auth\n\t */\n\tcurrentUser,\n\tdialogs: Dialogs,\n\tEventSource,\n\t/**\n\t * Returns the currently logged in user or null if there is no logged in\n\t * user (public page mode)\n\t *\n\t * @since 9.0.0\n\t * @deprecated 19.0.0 use `getCurrentUser` from https://www.npmjs.com/package/@nextcloud/auth\n\t */\n\tgetCurrentUser,\n\tisUserAdmin,\n\tL10N,\n\n\t/**\n\t * Ajax error handlers\n\t *\n\t * @todo remove from here and keep internally -> requires new tests\n\t */\n\t_ajaxConnectionLostHandler: ajaxConnectionLostHandler,\n\t_processAjaxError: processAjaxError,\n\tregisterXHRForErrorProcessing,\n\n\t/**\n\t * Capabilities\n\t *\n\t * @type {Array}\n\t * @deprecated 20.0.0 use @nextcloud/capabilities instead\n\t */\n\tgetCapabilities,\n\n\t/*\n\t * Legacy menu helpers\n\t */\n\thideMenus,\n\tregisterMenu,\n\tshowMenu,\n\tunregisterMenu,\n\n\t/*\n\t * Path helpers\n\t */\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tbasename,\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tencodePath,\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tdirname,\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tisSamePath,\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tjoinPaths,\n\n\t/**\n\t * Host (url) helpers\n\t */\n\tgetHost,\n\tgetHostName,\n\tgetPort,\n\tgetProtocol,\n\n\t/**\n\t * @deprecated 20.0.0 use `getCanonicalLocale` from https://www.npmjs.com/package/@nextcloud/l10n\n\t */\n\tgetCanonicalLocale,\n\tgetLocale,\n\tgetLanguage,\n\t/**\n\t * Loads translations for the given app asynchronously.\n\t *\n\t * @param {string} app app name\n\t * @param {Function} callback callback to call after loading\n\t * @return {Promise}\n\t * @deprecated 17.0.0 use OC.L10N.load instead\n\t */\n\taddTranslations: L10N.load,\n\n\t/**\n\t * Query string helpers\n\t */\n\tbuildQueryString,\n\tparseQueryString,\n\n\tmsg,\n\tNotification,\n\tPasswordConfirmation,\n\tPlugins,\n\ttheme,\n\tUtil,\n\tdebug,\n\t/**\n\t * @deprecated 19.0.0 use `generateFilePath` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tfilePath: generateFilePath,\n\t/**\n\t * @deprecated 19.0.0 use `generateUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tgenerateUrl,\n\t/**\n\t * @deprecated 19.0.0 use https://lodash.com/docs#get\n\t */\n\tget: get(window),\n\t/**\n\t * @deprecated 19.0.0 use https://lodash.com/docs#set\n\t */\n\tset: set(window),\n\t/**\n\t * @deprecated 19.0.0 use `getRootUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tgetRootPath: getRootUrl,\n\t/**\n\t * @deprecated 19.0.0 use `imagePath` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\timagePath,\n\tredirect,\n\treload,\n\trequestToken: getRequestToken(),\n\t/**\n\t * @deprecated 19.0.0 use `linkTo` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tlinkTo,\n\t/**\n\t * @param {string} service service name\n\t * @param {number} version OCS API version\n\t * @return {string} OCS API base path\n\t * @deprecated 19.0.0 use `generateOcsUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tlinkToOCS: (service, version) => {\n\t\treturn generateOcsUrl(service, {}, {\n\t\t\tocsVersion: version || 1,\n\t\t}) + '/'\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `generateRemoteUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tlinkToRemote: generateRemoteUrl,\n\tlinkToRemoteBase,\n\t/**\n\t * Relative path to Nextcloud root.\n\t * For example: \"/nextcloud\"\n\t *\n\t * @type {string}\n\t *\n\t * @deprecated 19.0.0 use `getRootUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t * @see OC#getRootPath\n\t */\n\twebroot,\n}\n\n// Keep the request token prop in sync\nsubscribe('csrf-token-update', e => {\n\tOC.requestToken = e.token\n\n\t// Logging might help debug (Sentry) issues\n\tconsole.info('OC.requestToken changed', e.token)\n})\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport $ from 'jquery'\nimport { filePath } from './routing'\nimport { generateFilePath } from \"@nextcloud/router\"\n\n/**\n * Opens a popup with the setting for an app.\n * @param {string} appid The ID of the app e.g. 'calendar', 'contacts' or 'files'.\n * @param {boolean|string} loadJS If true 'js/settings.js' is loaded. If it's a string\n * it will attempt to load a script by that name in the 'js' directory.\n * @param {boolean} [cache] If true the javascript file won't be forced refreshed. Defaults to true.\n * @param {string} [scriptName] The name of the PHP file to load. Defaults to 'settings.php' in\n * the root of the app directory hierarchy.\n *\n * @deprecated 17.0.0 this method is unused and will be removed with Nextcloud 18\n */\nexport const appSettings = args => {\n\tconsole.warn('OC.appSettings is deprecated and will be removed with Nextcloud 18')\n\n\tif (typeof args === 'undefined' || typeof args.appid === 'undefined') {\n\t\tthrow {\n\t\t\tname: 'MissingParameter',\n\t\t\tmessage: 'The parameter appid is missing'\n\t\t}\n\t}\n\tvar props = { scriptName: 'settings.php', cache: true }\n\t$.extend(props, args)\n\tvar settings = $('#appsettings')\n\tif (settings.length === 0) {\n\t\tthrow {\n\t\t\tname: 'MissingDOMElement',\n\t\t\tmessage: 'There has be be an element with id \"appsettings\" for the popup to show.'\n\t\t}\n\t}\n\tvar popup = $('#appsettings_popup')\n\tif (popup.length === 0) {\n\t\t$('body').prepend('<div class=\"popup hidden\" id=\"appsettings_popup\"></div>')\n\t\tpopup = $('#appsettings_popup')\n\t\tpopup.addClass(settings.hasClass('topright') ? 'topright' : 'bottomleft')\n\t}\n\tif (popup.is(':visible')) {\n\t\tpopup.hide().remove()\n\t} else {\n\t\tconst arrowclass = settings.hasClass('topright') ? 'up' : 'left'\n\t\t$.get(generateFilePath(props.appid, '', props.scriptName), function(data) {\n\t\t\tpopup.html(data).ready(function() {\n\t\t\t\tpopup.prepend('<span class=\"arrow ' + arrowclass + '\"></span><h2>' + t('core', 'Settings') + '</h2><a class=\"close\"></a>').show()\n\t\t\t\tpopup.find('.close').bind('click', function() {\n\t\t\t\t\tpopup.remove()\n\t\t\t\t})\n\t\t\t\tif (typeof props.loadJS !== 'undefined') {\n\t\t\t\t\tvar scriptname\n\t\t\t\t\tif (props.loadJS === true) {\n\t\t\t\t\t\tscriptname = 'settings.js'\n\t\t\t\t\t} else if (typeof props.loadJS === 'string') {\n\t\t\t\t\t\tscriptname = props.loadJS\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow {\n\t\t\t\t\t\t\tname: 'InvalidParameter',\n\t\t\t\t\t\t\tmessage: 'The \"loadJS\" parameter must be either boolean or a string.'\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (props.cache) {\n\t\t\t\t\t\t$.ajaxSetup({ cache: true })\n\t\t\t\t\t}\n\t\t\t\t\t$.getScript(generateFilePath(props.appid, 'js', scriptname))\n\t\t\t\t\t\t.fail(function(jqxhr, settings, e) {\n\t\t\t\t\t\t\tthrow e\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}).show()\n\t\t}, 'html')\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getCapabilities as realGetCapabilities } from '@nextcloud/capabilities'\n\n/**\n * Returns the capabilities\n *\n * @return {Array} capabilities\n *\n * @since 14.0.0\n */\nexport const getCapabilities = () => {\n\tconsole.warn('OC.getCapabilities is deprecated and will be removed in Nextcloud 21. See @nextcloud/capabilities')\n\treturn realGetCapabilities()\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const getProtocol = () => window.location.protocol.split(':')[0]\n\n/**\n * Returns the host used to access this Nextcloud instance\n * Host is sometimes the same as the hostname but now always.\n *\n * Examples:\n * http://example.com => example.com\n * https://example.com => example.com\n * http://example.com:8080 => example.com:8080\n *\n * @return {string} host\n *\n * @since 8.2.0\n * @deprecated 17.0.0 use window.location.host directly\n */\nexport const getHost = () => window.location.host\n\n/**\n * Returns the hostname used to access this Nextcloud instance\n * The hostname is always stripped of the port\n *\n * @return {string} hostname\n * @since 9.0.0\n * @deprecated 17.0.0 use window.location.hostname directly\n */\nexport const getHostName = () => window.location.hostname\n\n/**\n * Returns the port number used to access this Nextcloud instance\n *\n * @return {number} port number\n *\n * @since 8.2.0\n * @deprecated 17.0.0 use window.location.port directly\n */\nexport const getPort = () => window.location.port\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * Parses a URL query string into a JS map\n *\n * @param {string} queryString query string in the format param1=1234&param2=abcde&param3=xyz\n * @return {Object<string, string>} map containing key/values matching the URL parameters\n */\nexport const parse = queryString => {\n\tlet pos\n\tlet components\n\tconst result = {}\n\tlet key\n\tif (!queryString) {\n\t\treturn null\n\t}\n\tpos = queryString.indexOf('?')\n\tif (pos >= 0) {\n\t\tqueryString = queryString.substr(pos + 1)\n\t}\n\tconst parts = queryString.replace(/\\+/g, '%20').split('&')\n\tfor (let i = 0; i < parts.length; i++) {\n\t\t// split on first equal sign\n\t\tconst part = parts[i]\n\t\tpos = part.indexOf('=')\n\t\tif (pos >= 0) {\n\t\t\tcomponents = [\n\t\t\t\tpart.substr(0, pos),\n\t\t\t\tpart.substr(pos + 1),\n\t\t\t]\n\t\t} else {\n\t\t\t// key only\n\t\t\tcomponents = [part]\n\t\t}\n\t\tif (!components.length) {\n\t\t\tcontinue\n\t\t}\n\t\tkey = decodeURIComponent(components[0])\n\t\tif (!key) {\n\t\t\tcontinue\n\t\t}\n\t\t// if equal sign was there, return string\n\t\tif (components.length > 1) {\n\t\t\tresult[key] = decodeURIComponent(components[1])\n\t\t} else {\n\t\t\t// no equal sign => null value\n\t\t\tresult[key] = null\n\t\t}\n\t}\n\treturn result\n}\n\n/**\n * Builds a URL query from a JS map.\n *\n * @param {Object<string, string>} params map containing key/values matching the URL parameters\n * @return {string} String containing a URL query (without question) mark\n */\nexport const build = params => {\n\tif (!params) {\n\t\treturn ''\n\t}\n\treturn $.map(params, function(value, key) {\n\t\tlet s = encodeURIComponent(key)\n\t\tif (value !== null && typeof (value) !== 'undefined') {\n\t\t\ts += '=' + encodeURIComponent(value)\n\t\t}\n\t\treturn s\n\t}).join('&')\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default {\n\n\t/**\n\t * @type {Array.<OC.Plugin>}\n\t */\n\t_plugins: {},\n\n\t/**\n\t * Register plugin\n\t *\n\t * @param {string} targetName app name / class name to hook into\n\t * @param {OC.Plugin} plugin plugin\n\t */\n\tregister(targetName, plugin) {\n\t\tlet plugins = this._plugins[targetName]\n\t\tif (!plugins) {\n\t\t\tplugins = this._plugins[targetName] = []\n\t\t}\n\t\tplugins.push(plugin)\n\t},\n\n\t/**\n\t * Returns all plugin registered to the given target\n\t * name / app name / class name.\n\t *\n\t * @param {string} targetName app name / class name to hook into\n\t * @return {Array.<OC.Plugin>} array of plugins\n\t */\n\tgetPlugins(targetName) {\n\t\treturn this._plugins[targetName] || []\n\t},\n\n\t/**\n\t * Call attach() on all plugins registered to the given target name.\n\t *\n\t * @param {string} targetName app name / class name\n\t * @param {object} targetObject to be extended\n\t * @param {object} [options] options\n\t */\n\tattach(targetName, targetObject, options) {\n\t\tconst plugins = this.getPlugins(targetName)\n\t\tfor (let i = 0; i < plugins.length; i++) {\n\t\t\tif (plugins[i].attach) {\n\t\t\t\tplugins[i].attach(targetObject, options)\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Call detach() on all plugins registered to the given target name.\n\t *\n\t * @param {string} targetName app name / class name\n\t * @param {object} targetObject to be extended\n\t * @param {object} [options] options\n\t */\n\tdetach(targetName, targetObject, options) {\n\t\tconst plugins = this.getPlugins(targetName)\n\t\tfor (let i = 0; i < plugins.length; i++) {\n\t\t\tif (plugins[i].detach) {\n\t\t\t\tplugins[i].detach(targetObject, options)\n\t\t\t}\n\t\t}\n\t},\n\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const redirect = targetURL => { window.location = targetURL }\n\n/**\n * Reloads the current page\n *\n * @deprecated 17.0.0 use window.location.reload directly\n */\nexport const reload = () => { window.location.reload() }\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport {\n\tgetRootUrl as realGetRootUrl,\n} from '@nextcloud/router'\n\n/**\n * Creates a relative url for remote use\n *\n * @param {string} service id\n * @return {string} the url\n */\nexport const linkToRemoteBase = service => {\n\treturn realGetRootUrl() + '/remote.php/' + service\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\nimport { emit } from '@nextcloud/event-bus'\nimport { loadState } from '@nextcloud/initial-state'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { generateUrl } from '@nextcloud/router'\n\nimport OC from './OC'\nimport { setToken as setRequestToken, getToken as getRequestToken } from './OC/requesttoken'\n\nlet config = null\n/**\n * The legacy jsunit tests overwrite OC.config before calling initCore\n * therefore we need to wait with assigning the config fallback until initCore calls initSessionHeartBeat\n */\nconst loadConfig = () => {\n\ttry {\n\t\tconfig = loadState('core', 'config')\n\t} catch (e) {\n\t\t// This fallback is just for our legacy jsunit tests since we have no way to mock loadState calls\n\t\tconfig = OC.config\n\t}\n}\n\n/**\n * session heartbeat (defaults to enabled)\n *\n * @return {boolean}\n */\nconst keepSessionAlive = () => {\n\treturn config.session_keepalive === undefined\n\t\t|| !!config.session_keepalive\n}\n\n/**\n * get interval in seconds\n *\n * @return {number}\n */\nconst getInterval = () => {\n\tlet interval = NaN\n\tif (config.session_lifetime) {\n\t\tinterval = Math.floor(config.session_lifetime / 2)\n\t}\n\n\t// minimum one minute, max 24 hours, default 15 minutes\n\treturn Math.min(\n\t\t24 * 3600,\n\t\tMath.max(\n\t\t\t60,\n\t\t\tisNaN(interval) ? 900 : interval\n\t\t)\n\t)\n}\n\nconst getToken = async () => {\n\tconst url = generateUrl('/csrftoken')\n\n\t// Not using Axios here as Axios is not stubbable with the sinon fake server\n\t// see https://stackoverflow.com/questions/41516044/sinon-mocha-test-with-async-ajax-calls-didnt-return-promises\n\t// see js/tests/specs/coreSpec.js for the tests\n\tconst resp = await $.get(url)\n\n\treturn resp.token\n}\n\nconst poll = async () => {\n\ttry {\n\t\tconst token = await getToken()\n\t\tsetRequestToken(token)\n\t} catch (e) {\n\t\tconsole.error('session heartbeat failed', e)\n\t}\n}\n\nconst startPolling = () => {\n\tconst interval = setInterval(poll, getInterval() * 1000)\n\n\tconsole.info('session heartbeat polling started')\n\n\treturn interval\n}\n\nconst registerAutoLogout = () => {\n\tif (!config.auto_logout || !getCurrentUser()) {\n\t\treturn\n\t}\n\n\tlet lastActive = Date.now()\n\twindow.addEventListener('mousemove', e => {\n\t\tlastActive = Date.now()\n\t\tlocalStorage.setItem('lastActive', lastActive)\n\t})\n\n\twindow.addEventListener('touchstart', e => {\n\t\tlastActive = Date.now()\n\t\tlocalStorage.setItem('lastActive', lastActive)\n\t})\n\n\twindow.addEventListener('storage', e => {\n\t\tif (e.key !== 'lastActive') {\n\t\t\treturn\n\t\t}\n\t\tlastActive = e.newValue\n\t})\n\n\tsetInterval(function() {\n\t\tconst timeout = Date.now() - config.session_lifetime * 1000\n\t\tif (lastActive < timeout) {\n\t\t\tconsole.info('Inactivity timout reached, logging out')\n\t\t\tconst logoutUrl = generateUrl('/logout') + '?requesttoken=' + encodeURIComponent(getRequestToken())\n\t\t\twindow.location = logoutUrl\n\t\t}\n\t}, 1000)\n}\n\n/**\n * Calls the server periodically to ensure that session and CSRF\n * token doesn't expire\n */\nexport const initSessionHeartBeat = () => {\n\tloadConfig()\n\n\tregisterAutoLogout()\n\n\tif (!keepSessionAlive()) {\n\t\tconsole.info('session heartbeat disabled')\n\t\treturn\n\t}\n\tlet interval = startPolling()\n\n\twindow.addEventListener('online', async () => {\n\t\tconsole.info('browser is online again, resuming heartbeat')\n\t\tinterval = startPolling()\n\t\ttry {\n\t\t\tawait poll()\n\t\t\tconsole.info('session token successfully updated after resuming network')\n\n\t\t\t// Let apps know we're online and requests will have the new token\n\t\t\temit('networkOnline', {\n\t\t\t\tsuccess: true,\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.error('could not update session token after resuming network', e)\n\n\t\t\t// Let apps know we're online but requests might have an outdated token\n\t\t\temit('networkOnline', {\n\t\t\t\tsuccess: false,\n\t\t\t})\n\t\t}\n\t})\n\twindow.addEventListener('offline', () => {\n\t\tconsole.info('browser is offline, stopping heartbeat')\n\n\t\t// Let apps know we're offline\n\t\temit('networkOffline', {})\n\n\t\tclearInterval(interval)\n\t\tconsole.info('session heartbeat polling stopped')\n\t})\n}\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContactsMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContactsMenu.vue?vue&type=script&lang=js&\"","<!--\n - @copyright 2023 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n-->\n\n<template>\n\t<NcHeaderMenu id=\"contactsmenu\"\n\t\t:aria-label=\"t('core', 'Search contacts')\"\n\t\t@open=\"handleOpen\">\n\t\t<template #trigger>\n\t\t\t<Contacts :size=\"20\" />\n\t\t</template>\n\t\t<div id=\"contactsmenu-menu\" />\n\t</NcHeaderMenu>\n</template>\n\n<script>\nimport NcHeaderMenu from '@nextcloud/vue/dist/Components/NcHeaderMenu.js'\n\nimport Contacts from 'vue-material-design-icons/Contacts.vue'\n\nimport OC from '../OC/index.js'\n\nexport default {\n\tname: 'ContactsMenu',\n\n\tcomponents: {\n\t\tContacts,\n\t\tNcHeaderMenu,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tcontactsMenu: null,\n\t\t}\n\t},\n\n\tmounted() {\n\t\t// eslint-disable-next-line no-new\n\t\tthis.contactsMenu = new OC.ContactsMenu({\n\t\t\tel: '#contactsmenu-menu',\n\t\t})\n\t},\n\n\tmethods: {\n\t\thandleOpen() {\n\t\t\tthis.contactsMenu?.loadContacts()\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n#contactsmenu-menu {\n\t/* show 2.5 to 4.5 entries depending on the screen height */\n\theight: calc(100vh - 50px * 3);\n\tmax-height: calc(50px * 6 + 2px);\n\tmin-height: calc(50px * 3.5);\n\twidth: 350px;\n\n\t&:deep {\n\t\t.emptycontent {\n\t\t\tmargin-top: 5vh !important;\n\t\t\tmargin-bottom: 1.5vh;\n\t\t\t.icon-loading,\n\t\t\t.icon-search {\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\t\t}\n\n\t\t#contactsmenu-search {\n\t\t\twidth: calc(100% - 16px);\n\t\t\tmargin: 8px;\n\t\t\theight: 34px;\n\t\t}\n\n\t\t.content {\n\t\t\t/* fixed max height of the parent container without the search input */\n\t\t\theight: calc(100vh - 50px * 3 - 50px);\n\t\t\tmax-height: calc(50px * 5);\n\t\t\tmin-height: calc(50px * 3.5 - 50px);\n\t\t\toverflow-y: auto;\n\n\t\t\t.footer {\n\t\t\t\ttext-align: center;\n\n\t\t\t\ta {\n\t\t\t\t\tdisplay: block;\n\t\t\t\t\twidth: 100%;\n\t\t\t\t\tpadding: 12px 0;\n\t\t\t\t\topacity: .5;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ta {\n\t\t\tpadding: 2px;\n\n\t\t\t&:focus-visible {\n\t\t\t\tbox-shadow: inset 0 0 0 2px var(--color-main-text) !important; // override rule in core/css/headers.scss #header a:focus-visible\n\t\t\t}\n\t\t}\n\n\t\t.contact {\n\t\t\tdisplay: flex;\n\t\t\tposition: relative;\n\t\t\talign-items: center;\n\t\t\tpadding: 3px 3px 3px 10px;\n\n\t\t\t.avatar {\n\t\t\t\theight: 32px;\n\t\t\t\twidth: 32px;\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\n\t\t\t.body {\n\t\t\t\tflex-grow: 1;\n\t\t\t\tpadding-left: 8px;\n\n\t\t\t\tdiv {\n\t\t\t\t\tposition: relative;\n\t\t\t\t\twidth: 100%;\n\t\t\t\t}\n\n\t\t\t\t.full-name, .last-message {\n\t\t\t\t\t/* TODO: don't use fixed width */\n\t\t\t\t\tmax-width: 204px;\n\t\t\t\t\toverflow: hidden;\n\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\t}\n\t\t\t\t.last-message, .email-address {\n\t\t\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.top-action, .second-action, .other-actions {\n\t\t\t\twidth: 16px;\n\t\t\t\theight: 16px;\n\t\t\t\topacity: .5;\n\t\t\t\tcursor: pointer;\n\n\t\t\t\t&:not(button) {\n\t\t\t\t\tpadding: 14px;\n\t\t\t\t}\n\t\t\t\timg {\n\t\t\t\t\tfilter: var(--background-invert-if-dark);\n\t\t\t\t}\n\n\t\t\t\t&:hover,\n\t\t\t\t&:active,\n\t\t\t\t&:focus {\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbutton.other-actions {\n\t\t\t\twidth: 44px;\n\n\t\t\t\t&:focus {\n\t\t\t\t\tborder-color: transparent;\n\t\t\t\t\tbox-shadow: 0 0 0 2px var(--color-main-text);\n\t\t\t\t}\n\n\t\t\t\t&:focus-visible {\n\t\t\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/* actions menu */\n\t\t\t.menu {\n\t\t\t\ttop: 47px;\n\t\t\t\tmargin-right: 13px;\n\t\t\t}\n\t\t\t.popovermenu::after {\n\t\t\t\tright: 2px;\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContactsMenu.vue?vue&type=style&index=0&id=e32bb484&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContactsMenu.vue?vue&type=style&index=0&id=e32bb484&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ContactsMenu.vue?vue&type=template&id=e32bb484&scoped=true&\"\nimport script from \"./ContactsMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./ContactsMenu.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ContactsMenu.vue?vue&type=style&index=0&id=e32bb484&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e32bb484\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcHeaderMenu',{attrs:{\"id\":\"contactsmenu\",\"aria-label\":_vm.t('core', 'Search contacts')},on:{\"open\":_vm.handleOpen},scopedSlots:_vm._u([{key:\"trigger\",fn:function(){return [_c('Contacts',{attrs:{\"size\":20}})]},proxy:true}])},[_vm._v(\" \"),_c('div',{attrs:{\"id\":\"contactsmenu-menu\"}})])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2022 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<nav class=\"app-menu\">\n\t\t<ul class=\"app-menu-main\">\n\t\t\t<li v-for=\"app in mainAppList\"\n\t\t\t\t:key=\"app.id\"\n\t\t\t\t:data-app-id=\"app.id\"\n\t\t\t\tclass=\"app-menu-entry\"\n\t\t\t\t:class=\"{ 'app-menu-entry__active': app.active }\">\n\t\t\t\t<a :href=\"app.href\"\n\t\t\t\t\t:class=\"{ 'has-unread': app.unread > 0 }\"\n\t\t\t\t\t:aria-label=\"appLabel(app)\"\n\t\t\t\t\t:title=\"app.name\"\n\t\t\t\t\t:aria-current=\"app.active ? 'page' : false\"\n\t\t\t\t\t:target=\"app.target ? '_blank' : undefined\"\n\t\t\t\t\t:rel=\"app.target ? 'noopener noreferrer' : undefined\">\n\t\t\t\t\t<img :src=\"app.icon\" alt=\"\">\n\t\t\t\t\t<div class=\"app-menu-entry--label\">\n\t\t\t\t\t\t{{ app.name }}\n\t\t\t\t\t\t<span v-if=\"app.unread > 0\" class=\"hidden-visually unread-counter\">{{ app.unread }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</a>\n\t\t\t</li>\n\t\t</ul>\n\t\t<NcActions class=\"app-menu-more\" :aria-label=\"t('core', 'More apps')\">\n\t\t\t<NcActionLink v-for=\"app in popoverAppList\"\n\t\t\t\t:key=\"app.id\"\n\t\t\t\t:aria-label=\"appLabel(app)\"\n\t\t\t\t:aria-current=\"app.active ? 'page' : false\"\n\t\t\t\t:href=\"app.href\"\n\t\t\t\tclass=\"app-menu-popover-entry\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<div class=\"app-icon\" :class=\"{ 'has-unread': app.unread > 0 }\">\n\t\t\t\t\t\t<img :src=\"app.icon\" alt=\"\">\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\t\t\t\t{{ app.name }}\n\t\t\t\t<span v-if=\"app.unread > 0\" class=\"hidden-visually unread-counter\">{{ app.unread }}</span>\n\t\t\t</NcActionLink>\n\t\t</NcActions>\n\t</nav>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions'\nimport NcActionLink from '@nextcloud/vue/dist/Components/NcActionLink'\n\nexport default {\n\tname: 'AppMenu',\n\tcomponents: {\n\t\tNcActions, NcActionLink,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tapps: loadState('core', 'apps', {}),\n\t\t\tappLimit: 0,\n\t\t\tobserver: null,\n\t\t}\n\t},\n\tcomputed: {\n\t\tappList() {\n\t\t\treturn Object.values(this.apps)\n\t\t},\n\t\tmainAppList() {\n\t\t\treturn this.appList.slice(0, this.appLimit)\n\t\t},\n\t\tpopoverAppList() {\n\t\t\treturn this.appList.slice(this.appLimit)\n\t\t},\n\t\tappLabel() {\n\t\t\treturn (app) => app.name\n\t\t\t\t+ (app.active ? ' (' + t('core', 'Currently open') + ')' : '')\n\t\t\t\t+ (app.unread > 0 ? ' (' + n('core', '{count} notification', '{count} notifications', app.unread, { count: app.unread }) + ')' : '')\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.observer = new ResizeObserver(this.resize)\n\t\tthis.observer.observe(this.$el)\n\t\tthis.resize()\n\t\tsubscribe('nextcloud:app-menu.refresh', this.setApps)\n\t},\n\tbeforeDestroy() {\n\t\tthis.observer.disconnect()\n\t\tunsubscribe('nextcloud:app-menu.refresh', this.setApps)\n\t},\n\tmethods: {\n\t\tsetNavigationCounter(id, counter) {\n\t\t\tthis.$set(this.apps[id], 'unread', counter)\n\t\t},\n\t\tsetApps({ apps }) {\n\t\t\tthis.apps = apps\n\t\t},\n\t\tresize() {\n\t\t\tconst availableWidth = this.$el.offsetWidth\n\t\t\tlet appCount = Math.floor(availableWidth / 50) - 1\n\t\t\tconst popoverAppCount = this.appList.length - appCount\n\t\t\tif (popoverAppCount === 1) {\n\t\t\t\tappCount--\n\t\t\t}\n\t\t\tif (appCount < 1) {\n\t\t\t\tappCount = 0\n\t\t\t}\n\t\t\tthis.appLimit = appCount\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$header-icon-size: 20px;\n\n.app-menu {\n\twidth: 100%;\n\tdisplay: flex;\n\tflex-shrink: 1;\n\tflex-wrap: wrap;\n}\n.app-menu-main {\n\tdisplay: flex;\n\tflex-wrap: nowrap;\n\n\t.app-menu-entry {\n\t\twidth: 50px;\n\t\theight: 50px;\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t\topacity: .7;\n\t\tfilter: var(--background-image-invert-if-bright);\n\n\t\t&.app-menu-entry__active {\n\t\t\topacity: 1;\n\n\t\t\t&::before {\n\t\t\t\tcontent: \" \";\n\t\t\t\tposition: absolute;\n\t\t\t\tpointer-events: none;\n\t\t\t\tborder-bottom-color: var(--color-main-background);\n\t\t\t\ttransform: translateX(-50%);\n\t\t\t\twidth: 12px;\n\t\t\t\theight: 5px;\n\t\t\t\tborder-radius: 3px;\n\t\t\t\tbackground-color: var(--color-primary-text);\n\t\t\t\tleft: 50%;\n\t\t\t\tbottom: 6px;\n\t\t\t\tdisplay: block;\n\t\t\t\ttransition: all 0.1s ease-in-out;\n\t\t\t\topacity: 1;\n\t\t\t}\n\n\t\t\t.app-menu-entry--label {\n\t\t\t\tfont-weight: bold;\n\t\t\t}\n\t\t}\n\n\t\ta {\n\t\t\twidth: calc(100% - 4px);\n\t\t\theight: calc(100% - 4px);\n\t\t\tmargin: 2px;\n\t\t\tcolor: var(--color-primary-text);\n\t\t\tposition: relative;\n\t\t}\n\n\t\timg {\n\t\t\ttransition: margin 0.1s ease-in-out;\n\t\t\twidth: $header-icon-size;\n\t\t\theight: $header-icon-size;\n\t\t\tpadding: calc((100% - $header-icon-size) / 2);\n\t\t\tbox-sizing: content-box;\n\t\t}\n\n\t\t.app-menu-entry--label {\n\t\t\topacity: 0;\n\t\t\tposition: absolute;\n\t\t\tfont-size: 12px;\n\t\t\tcolor: var(--color-primary-text);\n\t\t\ttext-align: center;\n\t\t\tbottom: -5px;\n\t\t\tleft: 50%;\n\t\t\ttop: 45%;\n\t\t\tdisplay: block;\n\t\t\tmin-width: 100%;\n\t\t\ttransform: translateX(-50%);\n\t\t\ttransition: all 0.1s ease-in-out;\n\t\t\twidth: 100%;\n\t\t\ttext-overflow: ellipsis;\n\t\t\toverflow: hidden;\n\t\t\tletter-spacing: -0.5px;\n\t\t}\n\n\t\t&:hover,\n\t\t&:focus-within {\n\t\t\topacity: 1;\n\t\t\t.app-menu-entry--label {\n\t\t\t\topacity: 1;\n\t\t\t\tfont-weight: bolder;\n\t\t\t\tbottom: 0;\n\t\t\t\twidth: 100%;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t}\n\n\t}\n\n\t// Show labels\n\t&:hover,\n\t&:focus-within,\n\t.app-menu-entry:hover,\n\t.app-menu-entry:focus {\n\t\topacity: 1;\n\n\t\timg {\n\t\t\tmargin-top: -8px;\n\t\t}\n\n\t\t.app-menu-entry--label {\n\t\t\topacity: 1;\n\t\t\tbottom: 0;\n\t\t}\n\n\t\t&::before, .app-menu-entry::before {\n\t\t\topacity: 0;\n\t\t}\n\t}\n}\n\n::v-deep .app-menu-more .button-vue--vue-tertiary {\n\tcolor: var(--color-primary-text);\n\topacity: .7;\n\tmargin: 3px;\n\tfilter: var(--background-image-invert-if-bright);\n\n\t&:hover {\n\t\topacity: 1;\n\t\tbackground-color: transparent !important;\n\t}\n\n\t&:focus-visible {\n\t\topacity: 1;\n\t\toutline: none !important;\n\t}\n}\n\n.app-menu-popover-entry {\n\t.app-icon {\n\t\tposition: relative;\n\t\theight: 44px;\n\n\t\t&.has-unread::after {\n\t\t\tbackground-color: var(--color-main-text);\n\t\t}\n\n\t\timg {\n\t\t\twidth: $header-icon-size;\n\t\t\theight: $header-icon-size;\n\t\t\tpadding: calc((50px - $header-icon-size) / 2);\n\t\t}\n\t}\n}\n\n.has-unread::after {\n\tcontent: \"\";\n\twidth: 8px;\n\theight: 8px;\n\tbackground-color: var(--color-primary-text);\n\tborder-radius: 50%;\n\tposition: absolute;\n\tdisplay: block;\n\ttop: 10px;\n\tright: 10px;\n}\n\n.unread-counter {\n\tdisplay: none;\n}\n</style>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppMenu.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppMenu.vue?vue&type=style&index=0&id=44a795f6&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppMenu.vue?vue&type=style&index=0&id=44a795f6&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppMenu.vue?vue&type=template&id=44a795f6&scoped=true&\"\nimport script from \"./AppMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./AppMenu.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AppMenu.vue?vue&type=style&index=0&id=44a795f6&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"44a795f6\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('nav',{staticClass:\"app-menu\"},[_c('ul',{staticClass:\"app-menu-main\"},_vm._l((_vm.mainAppList),function(app){return _c('li',{key:app.id,staticClass:\"app-menu-entry\",class:{ 'app-menu-entry__active': app.active },attrs:{\"data-app-id\":app.id}},[_c('a',{class:{ 'has-unread': app.unread > 0 },attrs:{\"href\":app.href,\"aria-label\":_vm.appLabel(app),\"title\":app.name,\"aria-current\":app.active ? 'page' : false,\"target\":app.target ? '_blank' : undefined,\"rel\":app.target ? 'noopener noreferrer' : undefined}},[_c('img',{attrs:{\"src\":app.icon,\"alt\":\"\"}}),_vm._v(\" \"),_c('div',{staticClass:\"app-menu-entry--label\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(app.name)+\"\\n\\t\\t\\t\\t\\t\"),(app.unread > 0)?_c('span',{staticClass:\"hidden-visually unread-counter\"},[_vm._v(_vm._s(app.unread))]):_vm._e()])])])}),0),_vm._v(\" \"),_c('NcActions',{staticClass:\"app-menu-more\",attrs:{\"aria-label\":_vm.t('core', 'More apps')}},_vm._l((_vm.popoverAppList),function(app){return _c('NcActionLink',{key:app.id,staticClass:\"app-menu-popover-entry\",attrs:{\"aria-label\":_vm.appLabel(app),\"aria-current\":app.active ? 'page' : false,\"href\":app.href},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('div',{staticClass:\"app-icon\",class:{ 'has-unread': app.unread > 0 }},[_c('img',{attrs:{\"src\":app.icon,\"alt\":\"\"}})])]},proxy:true}],null,true)},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(app.name)+\"\\n\\t\\t\\t\"),(app.unread > 0)?_c('span',{staticClass:\"hidden-visually unread-counter\"},[_vm._v(_vm._s(app.unread))]):_vm._e()])}),1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2023 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n-->\n\n<template>\n\t<li :id=\"id\"\n\t\tclass=\"menu-entry\">\n\t\t<a v-if=\"href\"\n\t\t\t:href=\"href\"\n\t\t\t:class=\"{ active }\"\n\t\t\t@click.exact=\"handleClick\">\n\t\t\t<NcLoadingIcon v-if=\"loading\"\n\t\t\t\tclass=\"menu-entry__loading-icon\"\n\t\t\t\t:size=\"18\" />\n\t\t\t<img v-else :src=\"cachedIcon\" alt=\"\" />\n\t\t\t{{ name }}\n\t\t</a>\n\t\t<button v-else>\n\t\t\t<img :src=\"cachedIcon\" alt=\"\" />\n\t\t\t{{ name }}\n\t\t</button>\n\t</li>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\n\nconst versionHash = loadState('core', 'versionHash', '')\n\nexport default {\n\tname: 'UserMenuEntry',\n\n\tcomponents: {\n\t\tNcLoadingIcon,\n\t},\n\n\tprops: {\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\thref: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcachedIcon() {\n\t\t\treturn `${this.icon}?v=${versionHash}`\n\t\t},\n\t},\n\n\tmethods: {\n\t\thandleClick() {\n\t\t\tthis.loading = true\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.menu-entry {\n\t&__loading-icon {\n\t\tmargin-right: 8px;\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenuEntry.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenuEntry.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenuEntry.vue?vue&type=style&index=0&id=6e59d13c&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenuEntry.vue?vue&type=style&index=0&id=6e59d13c&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserMenuEntry.vue?vue&type=template&id=6e59d13c&scoped=true&\"\nimport script from \"./UserMenuEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./UserMenuEntry.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserMenuEntry.vue?vue&type=style&index=0&id=6e59d13c&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6e59d13c\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('li',{staticClass:\"menu-entry\",attrs:{\"id\":_vm.id}},[(_vm.href)?_c('a',{class:{ active: _vm.active },attrs:{\"href\":_vm.href},on:{\"click\":function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey)return null;return _vm.handleClick.apply(null, arguments)}}},[(_vm.loading)?_c('NcLoadingIcon',{staticClass:\"menu-entry__loading-icon\",attrs:{\"size\":18}}):_c('img',{attrs:{\"src\":_vm.cachedIcon,\"alt\":\"\"}}),_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.name)+\"\\n\\t\")],1):_c('button',[_c('img',{attrs:{\"src\":_vm.cachedIcon,\"alt\":\"\"}}),_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.name)+\"\\n\\t\")])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2023 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n-->\n\n<template>\n\t<NcHeaderMenu id=\"user-menu\"\n\t\tclass=\"user-menu\"\n\t\t:aria-label=\"t('core', 'Open settings menu')\">\n\t\t<template #trigger>\n\t\t\t<NcAvatar class=\"user-menu__avatar\"\n\t\t\t\t:disable-menu=\"true\"\n\t\t\t\t:disable-tooltip=\"true\"\n\t\t\t\t:user=\"userId\" />\n\t\t</template>\n\t\t<nav class=\"user-menu__nav\"\n\t\t\t:aria-label=\"t('core', 'Settings menu')\">\n\t\t\t<ul>\n\t\t\t\t<UserMenuEntry v-for=\"entry in settingsNavEntries\"\n\t\t\t\t\tv-bind=\"entry\"\n\t\t\t\t\t:key=\"entry.id\" />\n\t\t\t</ul>\n\t\t</nav>\n\t</NcHeaderMenu>\n</template>\n\n<script>\nimport { emit } from '@nextcloud/event-bus'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { loadState } from '@nextcloud/initial-state'\n\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js'\nimport NcHeaderMenu from '@nextcloud/vue/dist/Components/NcHeaderMenu.js'\n\nimport UserMenuEntry from '../components/UserMenu/UserMenuEntry.vue'\n\nconst settingsNavEntries = loadState('core', 'settingsNavEntries', [])\n\nexport default {\n\tname: 'UserMenu',\n\n\tcomponents: {\n\t\tNcAvatar,\n\t\tNcHeaderMenu,\n\t\tUserMenuEntry,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tsettingsNavEntries,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t}\n\t},\n\n\tmounted() {\n\t\temit('core:user-menu:mounted')\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.user-menu {\n\tmargin-right: 12px;\n\n\t&:deep {\n\t\t.header-menu {\n\t\t\t&__trigger {\n\t\t\t\topacity: 1 !important;\n\t\t\t\t&:focus-visible {\n\t\t\t\t\t.user-menu__avatar {\n\t\t\t\t\t\tborder: 2px solid var(--color-primary-text);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&__carret {\n\t\t\t\tdisplay: none !important;\n\t\t\t}\n\n\t\t\t&__content {\n\t\t\t\twidth: fit-content !important;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__avatar {\n\t\t&:active,\n\t\t&:focus,\n\t\t&:hover {\n\t\t\tborder: 2px solid var(--color-primary-text);\n\t\t}\n\t}\n\n\t&__nav {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\n\t\tul {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tgap: 2px;\n\n\t\t\t&:deep {\n\t\t\t\tli {\n\t\t\t\t\ta,\n\t\t\t\t\tbutton {\n\t\t\t\t\t\tborder-radius: 6px;\n\t\t\t\t\t\tdisplay: inline-flex;\n\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\theight: var(--header-menu-item-height);\n\t\t\t\t\t\tcolor: var(--color-main-text);\n\t\t\t\t\t\tpadding: 10px 8px;\n\t\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\twidth: 100%;\n\n\t\t\t\t\t\t&:hover {\n\t\t\t\t\t\t\tbackground-color: var(--color-background-hover);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t&:focus-visible {\n\t\t\t\t\t\t\tbackground-color: var(--color-background-hover) !important;\n\t\t\t\t\t\t\tbox-shadow: inset 0 0 0 2px var(--color-primary) !important;\n\t\t\t\t\t\t\toutline: none !important;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t&:active,\n\t\t\t\t\t\t&.active {\n\t\t\t\t\t\t\tbackground-color: var(--color-primary-light);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tspan {\n\t\t\t\t\t\t\tpadding-bottom: 0;\n\t\t\t\t\t\t\tcolor: var(--color-main-text);\n\t\t\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\t\t\t\tmax-width: 110px;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\timg {\n\t\t\t\t\t\t\twidth: 16px;\n\t\t\t\t\t\t\theight: 16px;\n\t\t\t\t\t\t\tmargin-right: 10px;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\timg,\n\t\t\t\t\t\tsvg {\n\t\t\t\t\t\t\topacity: .7;\n\t\t\t\t\t\t\tfilter: var(--background-invert-if-dark);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override global button styles\n\t\t\t\t\tbutton {\n\t\t\t\t\t\tbackground-color: transparent;\n\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\tmargin: 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenu.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenu.vue?vue&type=style&index=0&id=6a818bbc&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenu.vue?vue&type=style&index=0&id=6a818bbc&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserMenu.vue?vue&type=template&id=6a818bbc&scoped=true&\"\nimport script from \"./UserMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./UserMenu.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserMenu.vue?vue&type=style&index=0&id=6a818bbc&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6a818bbc\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcHeaderMenu',{staticClass:\"user-menu\",attrs:{\"id\":\"user-menu\",\"aria-label\":_vm.t('core', 'Open settings menu')},scopedSlots:_vm._u([{key:\"trigger\",fn:function(){return [_c('NcAvatar',{staticClass:\"user-menu__avatar\",attrs:{\"disable-menu\":true,\"disable-tooltip\":true,\"user\":_vm.userId}})]},proxy:true}])},[_vm._v(\" \"),_c('nav',{staticClass:\"user-menu__nav\",attrs:{\"aria-label\":_vm.t('core', 'Settings menu')}},[_c('ul',_vm._l((_vm.settingsNavEntries),function(entry){return _c('UserMenuEntry',_vm._b({key:entry.id},'UserMenuEntry',entry,false))}),1)])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Jan-Christoph Borchardt <hey@jancborchardt.net>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author nacho <nacho@ownyourbits.com>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* globals Snap */\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport moment from 'moment'\n\nimport { initSessionHeartBeat } from './session-heartbeat.js'\nimport OC from './OC/index.js'\nimport { setUp as setUpContactsMenu } from './components/ContactsMenu.js'\nimport { setUp as setUpMainMenu } from './components/MainMenu.js'\nimport { setUp as setUpUserMenu } from './components/UserMenu.js'\nimport PasswordConfirmation from './OC/password-confirmation.js'\n\n// keep in sync with core/css/variables.scss\nconst breakpointMobileWidth = 1024\n\nconst initLiveTimestamps = () => {\n\t// Update live timestamps every 30 seconds\n\tsetInterval(() => {\n\t\t$('.live-relative-timestamp').each(function() {\n\t\t\tconst timestamp = parseInt($(this).attr('data-timestamp'), 10)\n\t\t\t$(this).text(moment(timestamp).fromNow())\n\t\t})\n\t}, 30 * 1000)\n}\n\n/**\n * Moment doesn't have aliases for every locale and doesn't parse some locale IDs correctly so we need to alias them\n */\nconst localeAliases = {\n\tzh: 'zh-cn',\n\tzh_Hans: 'zh-cn',\n\tzh_Hans_CN: 'zh-cn',\n\tzh_Hans_HK: 'zh-cn',\n\tzh_Hans_MO: 'zh-cn',\n\tzh_Hans_SG: 'zh-cn',\n\tzh_Hant: 'zh-hk',\n\tzh_Hant_HK: 'zh-hk',\n\tzh_Hant_MO: 'zh-mo',\n\tzh_Hant_TW: 'zh-tw',\n}\nlet locale = OC.getLocale()\nif (Object.prototype.hasOwnProperty.call(localeAliases, locale)) {\n\tlocale = localeAliases[locale]\n}\n\n/**\n * Set users locale to moment.js as soon as possible\n */\nmoment.locale(locale)\n\n/**\n * Initializes core\n */\nexport const initCore = () => {\n\t$(window).on('unload.main', () => { OC._unloadCalled = true })\n\t$(window).on('beforeunload.main', () => {\n\t\t// super-trick thanks to http://stackoverflow.com/a/4651049\n\t\t// in case another handler displays a confirmation dialog (ex: navigating away\n\t\t// during an upload), there are two possible outcomes: user clicked \"ok\" or\n\t\t// \"cancel\"\n\n\t\t// first timeout handler is called after unload dialog is closed\n\t\tsetTimeout(() => {\n\t\t\tOC._userIsNavigatingAway = true\n\n\t\t\t// second timeout event is only called if user cancelled (Chrome),\n\t\t\t// but in other browsers it might still be triggered, so need to\n\t\t\t// set a higher delay...\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (!OC._unloadCalled) {\n\t\t\t\t\tOC._userIsNavigatingAway = false\n\t\t\t\t}\n\t\t\t}, 10000)\n\t\t}, 1)\n\t})\n\t$(document).on('ajaxError.main', function(event, request, settings) {\n\t\tif (settings && settings.allowAuthErrors) {\n\t\t\treturn\n\t\t}\n\t\tOC._processAjaxError(request)\n\t})\n\n\tinitSessionHeartBeat()\n\n\tOC.registerMenu($('#expand'), $('#expanddiv'), false, true)\n\n\t// toggle for menus\n\t$(document).on('mouseup.closemenus', event => {\n\t\tconst $el = $(event.target)\n\t\tif ($el.closest('.menu').length || $el.closest('.menutoggle').length) {\n\t\t\t// don't close when clicking on the menu directly or a menu toggle\n\t\t\treturn false\n\t\t}\n\n\t\tOC.hideMenus()\n\t})\n\n\tsetUpMainMenu()\n\tsetUpUserMenu()\n\tsetUpContactsMenu()\n\n\t// just add snapper for logged in users\n\t// and if the app doesn't handle the nav slider itself\n\tif ($('#app-navigation').length && !$('html').hasClass('lte9')\n\t\t&& !$('#app-content').hasClass('no-snapper')) {\n\n\t\t// App sidebar on mobile\n\t\tconst snapper = new Snap({\n\t\t\telement: document.getElementById('app-content'),\n\t\t\tdisable: 'right',\n\t\t\tmaxPosition: 300, // $navigation-width\n\t\t\tminDragDistance: 100,\n\t\t})\n\n\t\t$('#app-content').prepend('<div id=\"app-navigation-toggle\" class=\"icon-menu\" style=\"display:none\" tabindex=\"0\"></div>')\n\n\t\t// keep track whether snapper is currently animating, and\n\t\t// prevent to call open or close while that is the case\n\t\t// to avoid duplicating events (snap.js doesn't check this)\n\t\tlet animating = false\n\t\tsnapper.on('animating', () => {\n\t\t\t// we need this because the trigger button\n\t\t\t// is also implicitly wired to close by snapper\n\t\t\tanimating = true\n\t\t})\n\t\tsnapper.on('animated', () => {\n\t\t\tanimating = false\n\t\t})\n\t\tsnapper.on('start', () => {\n\t\t\t// we need this because dragging triggers that\n\t\t\tanimating = true\n\t\t})\n\t\tsnapper.on('end', () => {\n\t\t\t// we need this because dragging stop triggers that\n\t\t\tanimating = false\n\t\t})\n\n\t\t// These are necessary because calling open or close\n\t\t// on snapper during an animation makes it trigger an\n\t\t// unfinishable animation, which itself will continue\n\t\t// triggering animating events and cause high CPU load,\n\t\t//\n\t\t// Ref https://github.com/jakiestfu/Snap.js/issues/216\n\t\tconst oldSnapperOpen = snapper.open\n\t\tconst oldSnapperClose = snapper.close\n\t\tconst _snapperOpen = () => {\n\t\t\tif (animating || snapper.state().state !== 'closed') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\toldSnapperOpen('left')\n\t\t}\n\n\t\tconst _snapperClose = () => {\n\t\t\tif (animating || snapper.state().state === 'closed') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\toldSnapperClose()\n\t\t}\n\n\t\t// Needs to be deferred to properly catch in-between\n\t\t// events that snap.js is triggering after dragging.\n\t\t//\n\t\t// Skipped when running unit tests as we are not testing\n\t\t// the snap.js workarounds...\n\t\tif (!window.TESTING) {\n\t\t\tsnapper.open = () => {\n\t\t\t\t_.defer(_snapperOpen)\n\t\t\t}\n\t\t\tsnapper.close = () => {\n\t\t\t\t_.defer(_snapperClose)\n\t\t\t}\n\t\t}\n\n\t\t$('#app-navigation-toggle').click((e) => {\n\t\t\t// close is implicit in the button by snap.js\n\t\t\tif (snapper.state().state !== 'left') {\n\t\t\t\tsnapper.open()\n\t\t\t}\n\t\t})\n\t\t$('#app-navigation-toggle').keypress(e => {\n\t\t\tif (snapper.state().state === 'left') {\n\t\t\t\tsnapper.close()\n\t\t\t} else {\n\t\t\t\tsnapper.open()\n\t\t\t}\n\t\t})\n\n\t\t// close sidebar when switching navigation entry\n\t\tconst $appNavigation = $('#app-navigation')\n\t\t$appNavigation.delegate('a, :button', 'click', event => {\n\t\t\tconst $target = $(event.target)\n\t\t\t// don't hide navigation when changing settings or adding things\n\t\t\tif ($target.is('.app-navigation-noclose')\n\t\t\t\t|| $target.closest('.app-navigation-noclose').length) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif ($target.is('.app-navigation-entry-utils-menu-button')\n\t\t\t\t|| $target.closest('.app-navigation-entry-utils-menu-button').length) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif ($target.is('.add-new')\n\t\t\t\t|| $target.closest('.add-new').length) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif ($target.is('#app-settings')\n\t\t\t\t|| $target.closest('#app-settings').length) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tsnapper.close()\n\t\t})\n\n\t\tlet navigationBarSlideGestureEnabled = false\n\t\tlet navigationBarSlideGestureAllowed = true\n\t\tlet navigationBarSlideGestureEnablePending = false\n\n\t\tOC.allowNavigationBarSlideGesture = () => {\n\t\t\tnavigationBarSlideGestureAllowed = true\n\n\t\t\tif (navigationBarSlideGestureEnablePending) {\n\t\t\t\tsnapper.enable()\n\n\t\t\t\tnavigationBarSlideGestureEnabled = true\n\t\t\t\tnavigationBarSlideGestureEnablePending = false\n\t\t\t}\n\t\t}\n\n\t\tOC.disallowNavigationBarSlideGesture = () => {\n\t\t\tnavigationBarSlideGestureAllowed = false\n\n\t\t\tif (navigationBarSlideGestureEnabled) {\n\t\t\t\tconst endCurrentDrag = true\n\t\t\t\tsnapper.disable(endCurrentDrag)\n\n\t\t\t\tnavigationBarSlideGestureEnabled = false\n\t\t\t\tnavigationBarSlideGestureEnablePending = true\n\t\t\t}\n\t\t}\n\n\t\tconst toggleSnapperOnSize = () => {\n\t\t\tif ($(window).width() > breakpointMobileWidth) {\n\t\t\t\tsnapper.close()\n\t\t\t\tsnapper.disable()\n\n\t\t\t\tnavigationBarSlideGestureEnabled = false\n\t\t\t\tnavigationBarSlideGestureEnablePending = false\n\t\t\t} else if (navigationBarSlideGestureAllowed) {\n\t\t\t\tsnapper.enable()\n\n\t\t\t\tnavigationBarSlideGestureEnabled = true\n\t\t\t\tnavigationBarSlideGestureEnablePending = false\n\t\t\t} else {\n\t\t\t\tnavigationBarSlideGestureEnablePending = true\n\t\t\t}\n\t\t}\n\n\t\t$(window).resize(_.debounce(toggleSnapperOnSize, 250))\n\n\t\t// initial call\n\t\ttoggleSnapperOnSize()\n\n\t}\n\n\tinitLiveTimestamps()\n\tPasswordConfirmation.init()\n}\n","/**\n * @copyright 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n$.prototype.tooltip = (function(tooltip) {\n\treturn function(config) {\n\t\ttry {\n\t\t\treturn tooltip.call(this, config)\n\t\t} catch (ex) {\n\t\t\tif (ex instanceof TypeError && config === 'destroy') {\n\t\t\t\tif (window.TESTING === undefined) {\n\t\t\t\t\tconsole.error('Deprecated call $.tooltip(\\'destroy\\') has been deprecated and should be removed')\n\t\t\t\t}\n\t\t\t\treturn tooltip.call(this, 'dispose')\n\t\t\t}\n\t\t\tif (ex instanceof TypeError && config === 'fixTitle') {\n\t\t\t\tif (window.TESTING === undefined) {\n\t\t\t\t\tconsole.error('Deprecated call $.tooltip(\\'fixTitle\\') has been deprecated and should be removed')\n\t\t\t\t}\n\t\t\t\treturn tooltip.call(this, '_fixTitle')\n\t\t\t}\n\t\t}\n\t}\n})($.prototype.tooltip)\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\n\nimport UserMenu from '../views/UserMenu.vue'\n\nexport const setUp = () => {\n\tconst mountPoint = document.getElementById('user-menu')\n\tif (mountPoint) {\n\t\t// eslint-disable-next-line no-new\n\t\tnew Vue({\n\t\t\tel: mountPoint,\n\t\t\trender: h => h(UserMenu),\n\t\t})\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n'\nimport Vue from 'vue'\n\nimport AppMenu from './AppMenu.vue'\n\nexport const setUp = () => {\n\n\tVue.mixin({\n\t\tmethods: {\n\t\t\tt,\n\t\t\tn,\n\t\t},\n\t})\n\n\tconst container = document.getElementById('header-left__appmenu')\n\tif (!container) {\n\t\t// no container, possibly we're on a public page\n\t\treturn\n\t}\n\tconst AppMenuApp = Vue.extend(AppMenu)\n\tconst appMenu = new AppMenuApp({}).$mount(container)\n\n\tObject.assign(OC, {\n\t\tsetNavigationCounter(id, counter) {\n\t\t\tappMenu.setNavigationCounter(id, counter)\n\t\t},\n\t})\n\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Christopher Ng <chrng8@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\n\nimport ContactsMenu from '../views/ContactsMenu.vue'\n\n/**\n * @todo move to contacts menu code https://github.com/orgs/nextcloud/projects/31#card-21213129\n */\nexport const setUp = () => {\n\tconst mountPoint = document.getElementById('contactsmenu')\n\tif (mountPoint) {\n\t\t// eslint-disable-next-line no-new\n\t\tnew Vue({\n\t\t\tel: mountPoint,\n\t\t\trender: h => h(ContactsMenu),\n\t\t})\n\t}\n}\n","/**\n * @copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/*\n * Detects links:\n * Either the http(s) protocol is given or two strings, basically limited to ascii with the last\n * word being at least one digit long,\n * followed by at least another character\n *\n * The downside: anything not ascii is excluded. Not sure how common it is in areas using different\n * alphabets… the upside: fake domains with similar looking characters won't be formatted as links\n *\n * This is a copy of the backend regex in IURLGenerator, make sure to adjust both when changing\n */\nconst urlRegex = /(\\s|^)(https?:\\/\\/)((?:[-A-Z0-9+_]+\\.)+[-A-Z]+(?:\\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*)(\\s|$)/ig\n\n/**\n * @param {any} content -\n */\nexport function plainToRich(content) {\n\treturn this.formatLinksRich(content)\n}\n\n/**\n * @param {any} content -\n */\nexport function richToPlain(content) {\n\treturn this.formatLinksPlain(content)\n}\n\n/**\n * @param {any} content -\n */\nexport function formatLinksRich(content) {\n\treturn content.replace(urlRegex, function(_, leadingSpace, protocol, url, trailingSpace) {\n\t\tlet linkText = url\n\t\tif (!protocol) {\n\t\t\tprotocol = 'https://'\n\t\t} else if (protocol === 'http://') {\n\t\t\tlinkText = protocol + url\n\t\t}\n\n\t\treturn leadingSpace + '<a class=\"external\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"' + protocol + url + '\">' + linkText + '</a>' + trailingSpace\n\t})\n}\n\n/**\n * @param {any} content -\n */\nexport function formatLinksPlain(content) {\n\tconst $content = $('<div></div>').html(content)\n\t$content.find('a').each(function() {\n\t\tconst $this = $(this)\n\t\t$this.html($this.attr('href'))\n\t})\n\treturn $content.html()\n}\n","/**\n * @copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * @param {any} options -\n */\nexport function query(options) {\n\toptions = options || {}\n\tconst dismissOptions = options.dismiss || {}\n\t$.ajax({\n\t\ttype: 'GET',\n\t\turl: options.url || generateOcsUrl('core/whatsnew?format=json'),\n\t\tsuccess: options.success || function(data, statusText, xhr) {\n\t\t\tonQuerySuccess(data, statusText, xhr, dismissOptions)\n\t\t},\n\t\terror: options.error || onQueryError,\n\t})\n}\n\n/**\n * @param {any} version -\n * @param {any} options -\n */\nexport function dismiss(version, options) {\n\toptions = options || {}\n\t$.ajax({\n\t\ttype: 'POST',\n\t\turl: options.url || generateOcsUrl('core/whatsnew'),\n\t\tdata: { version: encodeURIComponent(version) },\n\t\tsuccess: options.success || onDismissSuccess,\n\t\terror: options.error || onDismissError,\n\t})\n\t// remove element immediately\n\t$('.whatsNewPopover').remove()\n}\n\n/**\n * @param {any} data -\n * @param {any} statusText -\n * @param {any} xhr -\n * @param {any} dismissOptions -\n */\nfunction onQuerySuccess(data, statusText, xhr, dismissOptions) {\n\tconsole.debug('querying Whats New data was successful: ' + statusText)\n\tconsole.debug(data)\n\n\tif (xhr.status !== 200) {\n\t\treturn\n\t}\n\n\tlet item, menuItem, text, icon\n\n\tconst div = document.createElement('div')\n\tdiv.classList.add('popovermenu', 'open', 'whatsNewPopover', 'menu-left')\n\n\tconst list = document.createElement('ul')\n\n\t// header\n\titem = document.createElement('li')\n\tmenuItem = document.createElement('span')\n\tmenuItem.className = 'menuitem'\n\n\ttext = document.createElement('span')\n\ttext.innerText = t('core', 'New in') + ' ' + data.ocs.data.product\n\ttext.className = 'caption'\n\tmenuItem.appendChild(text)\n\n\ticon = document.createElement('span')\n\ticon.className = 'icon-close'\n\ticon.onclick = function() {\n\t\tdismiss(data.ocs.data.version, dismissOptions)\n\t}\n\tmenuItem.appendChild(icon)\n\n\titem.appendChild(menuItem)\n\tlist.appendChild(item)\n\n\t// Highlights\n\tfor (const i in data.ocs.data.whatsNew.regular) {\n\t\tconst whatsNewTextItem = data.ocs.data.whatsNew.regular[i]\n\t\titem = document.createElement('li')\n\n\t\tmenuItem = document.createElement('span')\n\t\tmenuItem.className = 'menuitem'\n\n\t\ticon = document.createElement('span')\n\t\ticon.className = 'icon-checkmark'\n\t\tmenuItem.appendChild(icon)\n\n\t\ttext = document.createElement('p')\n\t\ttext.innerHTML = _.escape(whatsNewTextItem)\n\t\tmenuItem.appendChild(text)\n\n\t\titem.appendChild(menuItem)\n\t\tlist.appendChild(item)\n\t}\n\n\t// Changelog URL\n\tif (!_.isUndefined(data.ocs.data.changelogURL)) {\n\t\titem = document.createElement('li')\n\n\t\tmenuItem = document.createElement('a')\n\t\tmenuItem.href = data.ocs.data.changelogURL\n\t\tmenuItem.rel = 'noreferrer noopener'\n\t\tmenuItem.target = '_blank'\n\n\t\ticon = document.createElement('span')\n\t\ticon.className = 'icon-link'\n\t\tmenuItem.appendChild(icon)\n\n\t\ttext = document.createElement('span')\n\t\ttext.innerText = t('core', 'View changelog')\n\t\tmenuItem.appendChild(text)\n\n\t\titem.appendChild(menuItem)\n\t\tlist.appendChild(item)\n\t}\n\n\tdiv.appendChild(list)\n\tdocument.body.appendChild(div)\n}\n\n/**\n * @param {any} x -\n * @param {any} t -\n * @param {any} e -\n */\nfunction onQueryError(x, t, e) {\n\tconsole.debug('querying Whats New Data resulted in an error: ' + t + e)\n\tconsole.debug(x)\n}\n\n/**\n * @param {any} data -\n */\nfunction onDismissSuccess(data) {\n\t// noop\n}\n\n/**\n * @param {any} data -\n */\nfunction onDismissError(data) {\n\tconsole.debug('dismissing Whats New data resulted in an error: ' + data)\n}\n","/**\n * @copyright Copyright (c) 2022 Joas Schilling <coding@schilljs.com>\n *\n * @author Joas Schilling <coding@schilljs.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\n\nexport default {\n\t/**\n\t * @return {boolean} Whether the user opted-out of shortcuts so that they should not be registered\n\t */\n\tdisableKeyboardShortcuts() {\n\t\treturn loadState('theming', 'shortcutsDisabled', false)\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable @nextcloud/no-deprecations */\nimport { initCore } from './init'\n\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport 'jquery-migrate/dist/jquery-migrate.min'\n// TODO: switch to `jquery-ui` package and import widgets and effects individually\n// `jquery-ui-dist` is used as a workaround for the issue of missing effects\nimport 'jquery-ui-dist/jquery-ui'\nimport 'jquery-ui-dist/jquery-ui.css'\nimport 'jquery-ui-dist/jquery-ui.theme.css'\n// END TODO\nimport autosize from 'autosize'\nimport Backbone from 'backbone'\nimport './Polyfill/tooltip'\nimport ClipboardJS from 'clipboard'\nimport { dav } from 'davclient.js'\nimport Handlebars from 'handlebars'\nimport md5 from 'blueimp-md5'\nimport moment from 'moment'\nimport 'select2'\nimport 'select2/select2.css'\nimport 'snap.js/dist/snap'\nimport 'strengthify'\nimport 'strengthify/strengthify.css'\n\nimport OC from './OC/index'\nimport OCP from './OCP/index'\nimport OCA from './OCA/index'\nimport { getToken as getRequestToken } from './OC/requesttoken'\n\nconst warnIfNotTesting = function() {\n\tif (window.TESTING === undefined) {\n\t\tconsole.warn.apply(console, arguments)\n\t}\n}\n\n/**\n * Mark a function as deprecated and automatically\n * warn if used!\n *\n * @param {Function} func the library to deprecate\n * @param {string} funcName the name of the library\n * @param {number} version the version this gets removed\n * @return {Function}\n */\nconst deprecate = (func, funcName, version) => {\n\tconst oldFunc = func\n\tconst newFunc = function() {\n\t\twarnIfNotTesting(`The ${funcName} library is deprecated! It will be removed in nextcloud ${version}.`)\n\t\treturn oldFunc.apply(this, arguments)\n\t}\n\tObject.assign(newFunc, oldFunc)\n\treturn newFunc\n}\n\nconst setDeprecatedProp = (global, cb, msg) => {\n\t(Array.isArray(global) ? global : [global]).forEach(global => {\n\t\tif (window[global] !== undefined) {\n\t\t\tdelete window[global]\n\t\t}\n\t\tObject.defineProperty(window, global, {\n\t\t\tget: () => {\n\t\t\t\tif (msg) {\n\t\t\t\t\twarnIfNotTesting(`${global} is deprecated: ${msg}`)\n\t\t\t\t} else {\n\t\t\t\t\twarnIfNotTesting(`${global} is deprecated`)\n\t\t\t\t}\n\n\t\t\t\treturn cb()\n\t\t\t},\n\t\t})\n\t})\n}\n\nwindow._ = _\nsetDeprecatedProp(['$', 'jQuery'], () => $, 'The global jQuery is deprecated. It will be removed in a later versions without another warning. Please ship your own.')\nsetDeprecatedProp('autosize', () => autosize, 'please ship your own, this will be removed in Nextcloud 20')\nsetDeprecatedProp('Backbone', () => Backbone, 'please ship your own, this will be removed in Nextcloud 20')\nsetDeprecatedProp(['Clipboard', 'ClipboardJS'], () => ClipboardJS, 'please ship your own, this will be removed in Nextcloud 20')\nwindow.dav = dav\nsetDeprecatedProp('Handlebars', () => Handlebars, 'please ship your own, this will be removed in Nextcloud 20')\nsetDeprecatedProp('md5', () => md5, 'please ship your own, this will be removed in Nextcloud 20')\nsetDeprecatedProp('moment', () => moment, 'please ship your own, this will be removed in Nextcloud 20')\n\nwindow.OC = OC\nsetDeprecatedProp('initCore', () => initCore, 'this is an internal function')\nsetDeprecatedProp('oc_appswebroots', () => OC.appswebroots, 'use OC.appswebroots instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_config', () => OC.config, 'use OC.config instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_current_user', () => OC.getCurrentUser().uid, 'use OC.getCurrentUser().uid instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_debug', () => OC.debug, 'use OC.debug instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_defaults', () => OC.theme, 'use OC.theme instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_isadmin', OC.isUserAdmin, 'use OC.isUserAdmin() instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_requesttoken', () => getRequestToken(), 'use OC.requestToken instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_webroot', () => OC.webroot, 'use OC.getRootPath() instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('OCDialogs', () => OC.dialogs, 'use OC.dialogs instead, this will be removed in Nextcloud 20')\nwindow.OCP = OCP\nwindow.OCA = OCA\n$.fn.select2 = deprecate($.fn.select2, 'select2', 19)\n\n/**\n * translate a string\n *\n * @param {string} app the id of the app for which to translate the string\n * @param {string} text the string to translate\n * @param [vars] map of placeholder key to value\n * @param {number} [count] number to replace %n with\n * @return {string}\n */\nwindow.t = _.bind(OC.L10N.translate, OC.L10N)\n\n/**\n * translate a string\n *\n * @param {string} app the id of the app for which to translate the string\n * @param {string} text_singular the string to translate for exactly one object\n * @param {string} text_plural the string to translate for n objects\n * @param {number} count number to determine whether to use singular or plural\n * @param [vars] map of placeholder key to value\n * @return {string} Translated string\n */\nwindow.n = _.bind(OC.L10N.translatePlural, OC.L10N)\n","/**\n * @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport escapeHTML from 'escape-html'\n\n/**\n * @typedef TypeDefinition\n * @function {Function} action This action is executed to let the user select a resource\n * @param {string} icon Contains the icon css class for the type\n * @function Object() { [native code] }\n */\n\n/**\n * @type {TypeDefinition[]}\n */\nconst types = {}\n\n/**\n * Those translations will be used by the vue component but they should be shipped with the server\n * FIXME: Those translations should be added to the library\n *\n * @return {Array}\n */\nexport const l10nProjects = () => {\n\treturn [\n\t\tt('core', 'Add to a project'),\n\t\tt('core', 'Show details'),\n\t\tt('core', 'Hide details'),\n\t\tt('core', 'Rename project'),\n\t\tt('core', 'Failed to rename the project'),\n\t\tt('core', 'Failed to create a project'),\n\t\tt('core', 'Failed to add the item to the project'),\n\t\tt('core', 'Connect items to a project to make them easier to find'),\n\t\tt('core', 'Type to search for existing projects'),\n\t]\n}\n\nexport default {\n\t/**\n\t *\n\t * @param {string} type type\n\t * @param {TypeDefinition} typeDefinition typeDefinition\n\t */\n\tregisterType(type, typeDefinition) {\n\t\ttypes[type] = typeDefinition\n\t},\n\ttrigger(type) {\n\t\treturn types[type].action()\n\t},\n\tgetTypes() {\n\t\treturn Object.keys(types)\n\t},\n\tgetIcon(type) {\n\t\treturn types[type].typeIconClass || ''\n\t},\n\tgetLabel(type) {\n\t\treturn escapeHTML(types[type].typeString || type)\n\t},\n\tgetLink(type, id) {\n\t\t/* TODO: Allow action to be executed instead of href as well */\n\t\treturn typeof types[type] !== 'undefined' ? types[type].link(id) : ''\n\t},\n}\n","/**\n * @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst loadedScripts = {}\nconst loadedStylesheets = {}\n/**\n * @namespace OCP\n * @class Loader\n */\nexport default {\n\n\t/**\n\t * Load a script asynchronously\n\t *\n\t * @param {string} app the app name\n\t * @param {string} file the script file name\n\t * @return {Promise}\n\t */\n\tloadScript(app, file) {\n\t\tconst key = app + file\n\t\tif (Object.prototype.hasOwnProperty.call(loadedScripts, key)) {\n\t\t\treturn Promise.resolve()\n\t\t}\n\t\tloadedScripts[key] = true\n\t\treturn new Promise(function(resolve, reject) {\n\t\t\tconst scriptPath = OC.filePath(app, 'js', file)\n\t\t\tconst script = document.createElement('script')\n\t\t\tscript.src = scriptPath\n\t\t\tscript.setAttribute('nonce', btoa(OC.requestToken))\n\t\t\tscript.onload = () => resolve()\n\t\t\tscript.onerror = () => reject(new Error(`Failed to load script from ${scriptPath}`))\n\t\t\tdocument.head.appendChild(script)\n\t\t})\n\t},\n\n\t/**\n\t * Load a stylesheet file asynchronously\n\t *\n\t * @param {string} app the app name\n\t * @param {string} file the script file name\n\t * @return {Promise}\n\t */\n\tloadStylesheet(app, file) {\n\t\tconst key = app + file\n\t\tif (Object.prototype.hasOwnProperty.call(loadedStylesheets, key)) {\n\t\t\treturn Promise.resolve()\n\t\t}\n\t\tloadedStylesheets[key] = true\n\t\treturn new Promise(function(resolve, reject) {\n\t\t\tconst stylePath = OC.filePath(app, 'css', file)\n\t\t\tconst link = document.createElement('link')\n\t\t\tlink.href = stylePath\n\t\t\tlink.type = 'text/css'\n\t\t\tlink.rel = 'stylesheet'\n\t\t\tlink.onload = () => resolve()\n\t\t\tlink.onerror = () => reject(new Error(`Failed to load stylesheet from ${stylePath}`))\n\t\t\tdocument.head.appendChild(link)\n\t\t})\n\t},\n}\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport {\n\tshowError,\n\tshowInfo, showMessage,\n\tshowSuccess,\n\tshowWarning,\n} from '@nextcloud/dialogs'\n\nexport default {\n\t/**\n\t * @deprecated 19.0.0 use `showSuccess` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\tsuccess(text, options) {\n\t\treturn showSuccess(text, options)\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `showWarning` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\twarning(text, options) {\n\t\treturn showWarning(text, options)\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `showError` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\terror(text, options) {\n\t\treturn showError(text, options)\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `showInfo` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\tinfo(text, options) {\n\t\treturn showInfo(text, options)\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `showMessage` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\tmessage(text, options) {\n\t\treturn showMessage(text, options)\n\t},\n\n}\n","/**\n * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\n\nimport * as AppConfig from './appconfig'\nimport * as Comments from './comments'\nimport * as WhatsNew from './whatsnew'\n\nimport Accessibility from './accessibility'\nimport Collaboration from './collaboration'\nimport Loader from './loader'\nimport Toast from './toast'\n\n/** @namespace OCP */\nexport default {\n\tAccessibility,\n\tAppConfig,\n\tCollaboration,\n\tComments,\n\tInitialState: {\n\t\t/**\n\t\t * @deprecated 18.0.0 add https://www.npmjs.com/package/@nextcloud/initial-state to your app\n\t\t */\n\t\tloadState,\n\t},\n\tLoader,\n\t/**\n\t * @deprecated 19.0.0 use the `@nextcloud/dialogs` package instead\n\t */\n\tToast,\n\tWhatsNew,\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\nimport OC from '../OC'\n\n/**\n * This plugin inserts the right avatar for the user, depending on, whether a\n * custom avatar is uploaded - which it uses then - or not, and display a\n * placeholder with the first letter of the users name instead.\n * For this it queries the core_avatar_get route, thus this plugin is fit very\n * tightly for owncloud, and it may not work anywhere else.\n *\n * You may use this on any <div></div>\n * Here I'm using <div class=\"avatardiv\"></div> as an example.\n *\n * There are 5 ways to call this:\n *\n * 1. $('.avatardiv').avatar('jdoe', 128);\n * This will make the div to jdoe's fitting avatar, with a size of 128px.\n *\n * 2. $('.avatardiv').avatar('jdoe');\n * This will make the div to jdoe's fitting avatar. If the div already has a\n * height, it will be used for the avatars size. Otherwise this plugin will\n * search for 'size' DOM data, to use for avatar size. If neither are available\n * it will default to 64px.\n *\n * 3. $('.avatardiv').avatar();\n * This will search the DOM for 'user' data, to use as the username. If there\n * is no username available it will default to a placeholder with the value of\n * \"?\". The size will be determined the same way, as the second example.\n *\n * 4. $('.avatardiv').avatar('jdoe', 128, true);\n * This will behave like the first example, except it will also append random\n * hashes to the custom avatar images, to force image reloading in IE8.\n *\n * 5. $('.avatardiv').avatar('jdoe', 128, undefined, true);\n * This will behave like the first example, but it will hide the avatardiv, if\n * it will display the default placeholder. undefined is the ie8fix from\n * example 4 and can be either true, or false/undefined, to be ignored.\n *\n * 6. $('.avatardiv').avatar('jdoe', 128, undefined, true, callback);\n * This will behave like the above example, but it will call the function\n * defined in callback after the avatar is placed into the DOM.\n *\n */\n\n$.fn.avatar = function(user, size, ie8fix, hidedefault, callback, displayname) {\n\tconst setAvatarForUnknownUser = function(target) {\n\t\ttarget.imageplaceholder('?')\n\t\ttarget.css('background-color', '#b9b9b9')\n\t}\n\n\tif (typeof (user) !== 'undefined') {\n\t\tuser = String(user)\n\t}\n\tif (typeof (displayname) !== 'undefined') {\n\t\tdisplayname = String(displayname)\n\t}\n\n\tif (typeof (size) === 'undefined') {\n\t\tif (this.height() > 0) {\n\t\t\tsize = this.height()\n\t\t} else if (this.data('size') > 0) {\n\t\t\tsize = this.data('size')\n\t\t} else {\n\t\t\tsize = 64\n\t\t}\n\t}\n\n\tthis.height(size)\n\tthis.width(size)\n\n\tif (typeof (user) === 'undefined') {\n\t\tif (typeof (this.data('user')) !== 'undefined') {\n\t\t\tuser = this.data('user')\n\t\t} else {\n\t\t\tsetAvatarForUnknownUser(this)\n\t\t\treturn\n\t\t}\n\t}\n\n\t// sanitize\n\tuser = String(user).replace(/\\//g, '')\n\n\tconst $div = this\n\tlet url\n\n\t// If this is our own avatar we have to use the version attribute\n\tif (user === OC.getCurrentUser().uid) {\n\t\turl = OC.generateUrl(\n\t\t\t'/avatar/{user}/{size}?v={version}',\n\t\t\t{\n\t\t\t\tuser,\n\t\t\t\tsize: Math.ceil(size * window.devicePixelRatio),\n\t\t\t\tversion: oc_userconfig.avatar.version,\n\t\t\t})\n\t} else {\n\t\turl = OC.generateUrl(\n\t\t\t'/avatar/{user}/{size}',\n\t\t\t{\n\t\t\t\tuser,\n\t\t\t\tsize: Math.ceil(size * window.devicePixelRatio),\n\t\t\t})\n\t}\n\n\tconst img = new Image()\n\n\t// If the new image loads successfully set it.\n\timg.onload = function() {\n\t\t$div.clearimageplaceholder()\n\t\t$div.append(img)\n\n\t\tif (typeof callback === 'function') {\n\t\t\tcallback()\n\t\t}\n\t}\n\t// Fallback when avatar loading fails:\n\t// Use old placeholder when a displayname attribute is defined,\n\t// otherwise show the unknown user placeholder.\n\timg.onerror = function() {\n\t\t$div.clearimageplaceholder()\n\t\tif (typeof (displayname) !== 'undefined') {\n\t\t\t$div.imageplaceholder(user, displayname)\n\t\t} else {\n\t\t\tsetAvatarForUnknownUser($div)\n\t\t}\n\n\t\tif (typeof callback === 'function') {\n\t\t\tcallback()\n\t\t}\n\t}\n\n\tif (size < 32) {\n\t\t$div.addClass('icon-loading-small')\n\t} else {\n\t\t$div.addClass('icon-loading')\n\t}\n\timg.width = size\n\timg.height = size\n\timg.src = url\n\timg.alt = ''\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\nimport OC from '../OC'\nimport { isA11yActivation } from '../Util/a11y.js'\n\nconst LIST = ''\n\t+ '<div class=\"menu popovermenu menu-left hidden contactsmenu-popover\">'\n\t+ ' <ul>'\n\t+ ' <li>'\n\t+ ' <a>'\n\t+ ' <span class=\"icon-loading-small\"></span>'\n\t+ ' </a>'\n\t+ ' </li>'\n\t+ ' </ul>'\n\t+ '</div>'\n\nconst entryTemplate = require('./contactsmenu/jquery_entry.handlebars')\n\n$.fn.contactsMenu = function(shareWith, shareType, appendTo) {\n\t// 0 - user, 4 - email, 6 - remote\n\tconst allowedTypes = [0, 4, 6]\n\tif (allowedTypes.indexOf(shareType) === -1) {\n\t\treturn\n\t}\n\n\tconst $div = this\n\tappendTo.append(LIST)\n\tconst $list = appendTo.find('div.contactsmenu-popover')\n\n\t$div.on('click keydown', function(event) {\n\t\tif (!isA11yActivation(event)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (!$list.hasClass('hidden')) {\n\t\t\t$list.addClass('hidden')\n\t\t\t$list.hide()\n\t\t\treturn\n\t\t}\n\n\t\t$list.removeClass('hidden')\n\t\t$list.show()\n\n\t\tif ($list.hasClass('loaded')) {\n\t\t\treturn\n\t\t}\n\n\t\t$list.addClass('loaded')\n\t\t$.ajax(OC.generateUrl('/contactsmenu/findOne'), {\n\t\t\tmethod: 'POST',\n\t\t\tdata: {\n\t\t\t\tshareType,\n\t\t\t\tshareWith,\n\t\t\t},\n\t\t}).then(function(data) {\n\t\t\t$list.find('ul').find('li').addClass('hidden')\n\n\t\t\tlet actions\n\t\t\tif (!data.topAction) {\n\t\t\t\tactions = [{\n\t\t\t\t\thyperlink: '#',\n\t\t\t\t\ttitle: t('core', 'No action available'),\n\t\t\t\t}]\n\t\t\t} else {\n\t\t\t\tactions = [data.topAction].concat(data.actions)\n\t\t\t}\n\n\t\t\tactions.forEach(function(action) {\n\t\t\t\t$list.find('ul').append(entryTemplate(action))\n\t\t\t})\n\n\t\t\t$div.trigger('load')\n\t\t}, function(jqXHR) {\n\t\t\t$list.find('ul').find('li').addClass('hidden')\n\n\t\t\tlet title\n\t\t\tif (jqXHR.status === 404) {\n\t\t\t\ttitle = t('core', 'No action available')\n\t\t\t} else {\n\t\t\t\ttitle = t('core', 'Error fetching contact actions')\n\t\t\t}\n\n\t\t\t$list.find('ul').append(entryTemplate({\n\t\t\t\thyperlink: '#',\n\t\t\t\ttitle,\n\t\t\t}))\n\n\t\t\t$div.trigger('loaderror', jqXHR)\n\t\t})\n\t})\n\n\t$(document).click(function(event) {\n\t\tconst clickedList = ($list.has(event.target).length > 0)\n\t\tlet clickedTarget = ($div.has(event.target).length > 0)\n\n\t\t$div.each(function() {\n\t\t\tif ($(this).is(event.target)) {\n\t\t\t\tclickedTarget = true\n\t\t\t}\n\t\t})\n\n\t\tif (clickedList || clickedTarget) {\n\t\t\treturn\n\t\t}\n\n\t\t$list.addClass('hidden')\n\t\t$list.hide()\n\t})\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * check if an element exists.\n * allows you to write if ($('#myid').exists()) to increase readability\n *\n * @see {@link http://stackoverflow.com/questions/31044/is-there-an-exists-function-for-jquery}\n * @return {boolean}\n */\n$.fn.exists = function() {\n\treturn this.length > 0\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * Filter jQuery selector by attribute value\n *\n * @param {string} attrName attribute name\n * @param {string} attrValue attribute value\n * @return {void}\n */\n$.fn.filterAttr = function(attrName, attrValue) {\n\treturn this.filter(function() {\n\t\treturn $(this).attr(attrName) === attrValue\n\t})\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Gary Kim <gary@garykim.dev>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\nimport { isA11yActivation } from '../Util/a11y'\n\n$.widget('oc.ocdialog', {\n\toptions: {\n\t\twidth: 'auto',\n\t\theight: 'auto',\n\t\tcloseButton: true,\n\t\tcloseOnEscape: true,\n\t\tcloseCallback: null,\n\t\tmodal: false,\n\t},\n\t_create() {\n\t\tconst self = this\n\n\t\tthis.originalCss = {\n\t\t\tdisplay: this.element[0].style.display,\n\t\t\twidth: this.element[0].style.width,\n\t\t\theight: this.element[0].style.height,\n\t\t}\n\n\t\tthis.originalTitle = this.element.attr('title')\n\t\tthis.options.title = this.options.title || this.originalTitle\n\n\t\tthis.$dialog = $('<div class=\"oc-dialog\"></div>')\n\t\t\t.attr({\n\t\t\t\t// Setting tabIndex makes the div focusable\n\t\t\t\ttabIndex: -1,\n\t\t\t\trole: 'dialog',\n\t\t\t})\n\t\t\t.insertBefore(this.element)\n\t\tthis.$dialog.append(this.element.detach())\n\t\tthis.element.removeAttr('title').addClass('oc-dialog-content').appendTo(this.$dialog)\n\n\t\t// Activate the primary button on enter if there is a single input\n\t\tif (self.element.find('input').length === 1) {\n\t\t\tconst $input = self.element.find('input')\n\t\t\t$input.on('keydown', function(event) {\n\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\tif (self.$buttonrow) {\n\t\t\t\t\t\tconst $button = self.$buttonrow.find('button.primary')\n\t\t\t\t\t\tif ($button && !$button.prop('disabled')) {\n\t\t\t\t\t\t\t$button.click()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\tthis.$dialog.css({\n\t\t\tdisplay: 'inline-block',\n\t\t\tposition: 'fixed',\n\t\t})\n\n\t\tthis.enterCallback = null\n\n\t\t$(document).on('keydown keyup', function(event) {\n\t\t\tif (\n\t\t\t\tevent.target !== self.$dialog.get(0)\n\t\t\t\t&& self.$dialog.find($(event.target)).length === 0\n\t\t\t) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// Escape\n\t\t\tif (\n\t\t\t\tevent.keyCode === 27\n\t\t\t\t&& event.type === 'keydown'\n\t\t\t\t&& self.options.closeOnEscape\n\t\t\t) {\n\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\tself.close()\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// Enter\n\t\t\tif (event.keyCode === 13) {\n\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\tif (self.enterCallback !== null) {\n\t\t\t\t\tself.enterCallback()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif (event.type === 'keyup') {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t}\n\t\t})\n\n\t\tthis._setOptions(this.options)\n\t\tthis._createOverlay()\n\t},\n\t_init() {\n\t\tthis.$dialog.focus()\n\t\tthis._trigger('open')\n\t},\n\t_setOption(key, value) {\n\t\tconst self = this\n\t\tswitch (key) {\n\t\tcase 'title':\n\t\t\tif (this.$title) {\n\t\t\t\tthis.$title.text(value)\n\t\t\t} else {\n\t\t\t\tconst $title = $('<h2 class=\"oc-dialog-title\">'\n\t\t\t\t\t\t+ value\n\t\t\t\t\t\t+ '</h2>')\n\t\t\t\tthis.$title = $title.prependTo(this.$dialog)\n\t\t\t}\n\t\t\tthis._setSizes()\n\t\t\tbreak\n\t\tcase 'buttons':\n\t\t\tif (this.$buttonrow) {\n\t\t\t\tthis.$buttonrow.empty()\n\t\t\t} else {\n\t\t\t\tconst $buttonrow = $('<div class=\"oc-dialog-buttonrow\"></div>')\n\t\t\t\tthis.$buttonrow = $buttonrow.appendTo(this.$dialog)\n\t\t\t}\n\t\t\tif (value.length === 1) {\n\t\t\t\tthis.$buttonrow.addClass('onebutton')\n\t\t\t} else if (value.length === 2) {\n\t\t\t\tthis.$buttonrow.addClass('twobuttons')\n\t\t\t} else if (value.length === 3) {\n\t\t\t\tthis.$buttonrow.addClass('threebuttons')\n\t\t\t}\n\t\t\t$.each(value, function(idx, val) {\n\t\t\t\tconst $button = $('<button>').text(val.text)\n\t\t\t\tif (val.classes) {\n\t\t\t\t\t$button.addClass(val.classes)\n\t\t\t\t}\n\t\t\t\tif (val.defaultButton) {\n\t\t\t\t\t$button.addClass('primary')\n\t\t\t\t\tself.$defaultButton = $button\n\t\t\t\t}\n\t\t\t\tself.$buttonrow.append($button)\n\t\t\t\t$button.on('click keydown', function(event) {\n\t\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\t\tval.click.apply(self.element[0], arguments)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t\t\tthis.$buttonrow.find('button')\n\t\t\t\t.on('focus', function(event) {\n\t\t\t\t\tself.$buttonrow.find('button').removeClass('primary')\n\t\t\t\t\t$(this).addClass('primary')\n\t\t\t\t})\n\t\t\tthis._setSizes()\n\t\t\tbreak\n\t\tcase 'style':\n\t\t\tif (value.buttons !== undefined) {\n\t\t\t\tthis.$buttonrow.addClass(value.buttons)\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'closeButton':\n\t\t\tif (value) {\n\t\t\t\tconst $closeButton = $('<a class=\"oc-dialog-close\" tabindex=\"0\"></a>')\n\t\t\t\tthis.$dialog.prepend($closeButton)\n\t\t\t\t$closeButton.on('click keydown', function(event) {\n\t\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\t\tself.options.closeCallback && self.options.closeCallback()\n\t\t\t\t\t\tself.close()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tthis.$dialog.find('.oc-dialog-close').remove()\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'width':\n\t\t\tthis.$dialog.css('width', value)\n\t\t\tbreak\n\t\tcase 'height':\n\t\t\tthis.$dialog.css('height', value)\n\t\t\tbreak\n\t\tcase 'close':\n\t\t\tthis.closeCB = value\n\t\t\tbreak\n\t\t}\n\t\t// this._super(key, value);\n\t\t$.Widget.prototype._setOption.apply(this, arguments)\n\t},\n\t_setOptions(options) {\n\t\t// this._super(options);\n\t\t$.Widget.prototype._setOptions.apply(this, arguments)\n\t},\n\t_setSizes() {\n\t\tlet lessHeight = 0\n\t\tif (this.$title) {\n\t\t\tlessHeight += this.$title.outerHeight(true)\n\t\t}\n\t\tif (this.$buttonrow) {\n\t\t\tlessHeight += this.$buttonrow.outerHeight(true)\n\t\t}\n\t\tthis.element.css({\n\t\t\theight: 'calc(100% - ' + lessHeight + 'px)',\n\t\t})\n\t},\n\t_createOverlay() {\n\t\tif (!this.options.modal) {\n\t\t\treturn\n\t\t}\n\n\t\tconst self = this\n\t\tlet contentDiv = $('#content')\n\t\tif (contentDiv.length === 0) {\n\t\t\t// nextcloud-vue compatibility\n\t\t\tcontentDiv = $('.content')\n\t\t}\n\t\tthis.overlay = $('<div>')\n\t\t\t.addClass('oc-dialog-dim')\n\t\t\t.appendTo(contentDiv)\n\t\tthis.overlay.on('click keydown keyup', function(event) {\n\t\t\tif (event.target !== self.$dialog.get(0) && self.$dialog.find($(event.target)).length === 0) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tevent.stopPropagation()\n\n\t\t\t}\n\t\t})\n\t},\n\t_destroyOverlay() {\n\t\tif (!this.options.modal) {\n\t\t\treturn\n\t\t}\n\n\t\tif (this.overlay) {\n\t\t\tthis.overlay.off('click keydown keyup')\n\t\t\tthis.overlay.remove()\n\t\t\tthis.overlay = null\n\t\t}\n\t},\n\twidget() {\n\t\treturn this.$dialog\n\t},\n\tsetEnterCallback(callback) {\n\t\tthis.enterCallback = callback\n\t},\n\tunsetEnterCallback() {\n\t\tthis.enterCallback = null\n\t},\n\tclose() {\n\t\tthis._destroyOverlay()\n\t\tconst self = this\n\t\t// Ugly hack to catch remaining keyup events.\n\t\tsetTimeout(function() {\n\t\t\tself._trigger('close', self)\n\t\t}, 200)\n\n\t\tself.$dialog.remove()\n\t\tthis.destroy()\n\t},\n\tdestroy() {\n\t\tif (this.$title) {\n\t\t\tthis.$title.remove()\n\t\t}\n\t\tif (this.$buttonrow) {\n\t\t\tthis.$buttonrow.remove()\n\t\t}\n\n\t\tif (this.originalTitle) {\n\t\t\tthis.element.attr('title', this.originalTitle)\n\t\t}\n\t\tthis.element.removeClass('oc-dialog-content')\n\t\t\t.css(this.originalCss).detach().insertBefore(this.$dialog)\n\t\tthis.$dialog.remove()\n\t},\n})\n","/**\n * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\nimport escapeHTML from 'escape-html'\n\n/**\n * jQuery plugin for micro templates\n *\n * Strings are automatically escaped, but that can be disabled by setting\n * escapeFunction to null.\n *\n * Usage examples:\n *\n * var htmlStr = '<p>Bake, uncovered, until the {greasystuff} is melted and the {pasta} is heated through, about {min} minutes.</p>'\n * $(htmlStr).octemplate({greasystuff: 'cheese', pasta: 'macaroni', min: 10});\n *\n * var htmlStr = '<p>Welcome back {user}</p>';\n * $(htmlStr).octemplate({user: 'John Q. Public'}, {escapeFunction: null});\n *\n * Be aware that the target string must be wrapped in an HTML element for the\n * plugin to work. The following won't work:\n *\n * var textStr = 'Welcome back {user}';\n * $(textStr).octemplate({user: 'John Q. Public'});\n *\n * For anything larger than one-liners, you can use a simple $.get() ajax\n * request to get the template, or you can embed them it the page using the\n * text/template type:\n *\n * <script id=\"contactListItemTemplate\" type=\"text/template\">\n * <tr class=\"contact\" data-id=\"{id}\">\n * <td class=\"name\">\n * <input type=\"checkbox\" name=\"id\" value=\"{id}\" /><span class=\"nametext\">{name}</span>\n * </td>\n * <td class=\"email\">\n * <a href=\"mailto:{email}\">{email}</a>\n * </td>\n * <td class=\"phone\">{phone}</td>\n * </tr>\n * </script>\n *\n * var $tmpl = $('#contactListItemTemplate');\n * var contacts = // fetched in some ajax call\n *\n * $.each(contacts, function(idx, contact) {\n * $contactList.append(\n * $tmpl.octemplate({\n * id: contact.getId(),\n * name: contact.getDisplayName(),\n * email: contact.getPreferredEmail(),\n * phone: contact.getPreferredPhone(),\n * });\n * );\n * });\n */\n/**\n * Object Template\n * Inspired by micro templating done by e.g. underscore.js\n */\nconst Template = {\n\tinit(vars, options, elem) {\n\t\t// Mix in the passed in options with the default options\n\t\tthis.vars = vars\n\t\tthis.options = $.extend({}, this.options, options)\n\n\t\tthis.elem = elem\n\t\tconst self = this\n\n\t\tif (typeof this.options.escapeFunction === 'function') {\n\t\t\tconst keys = Object.keys(this.vars)\n\t\t\tfor (let key = 0; key < keys.length; key++) {\n\t\t\t\tif (typeof this.vars[keys[key]] === 'string') {\n\t\t\t\t\tthis.vars[keys[key]] = self.options.escapeFunction(this.vars[keys[key]])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst _html = this._build(this.vars)\n\t\treturn $(_html)\n\t},\n\t// From stackoverflow.com/questions/1408289/best-way-to-do-variable-interpolation-in-javascript\n\t_build(o) {\n\t\tconst data = this.elem.attr('type') === 'text/template' ? this.elem.html() : this.elem.get(0).outerHTML\n\t\ttry {\n\t\t\treturn data.replace(/{([^{}]*)}/g,\n\t\t\t\tfunction(a, b) {\n\t\t\t\t\tconst r = o[b]\n\t\t\t\t\treturn typeof r === 'string' || typeof r === 'number' ? r : a\n\t\t\t\t}\n\t\t\t)\n\t\t} catch (e) {\n\t\t\tconsole.error(e, 'data:', data)\n\t\t}\n\t},\n\toptions: {\n\t\tescapeFunction: escapeHTML,\n\t},\n}\n\n$.fn.octemplate = function(vars, options) {\n\tvars = vars || {}\n\tif (this.length) {\n\t\tconst _template = Object.create(Template)\n\t\treturn _template.init(vars, options, this)\n\t}\n}\n","/**\n * @copyright 2016-2018 John Molakvoæ <skjnldsv@protonmail.com>\n * @copyright 2013 Morris Jobke <morris.jobke@gmail.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Sergey Shliakhov <husband.sergey@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport $ from 'jquery'\nimport md5 from 'blueimp-md5'\n\n/*\n * Adds a background color to the element called on and adds the first character\n * of the passed in string. This string is also the seed for the generation of\n * the background color.\n *\n * You have following HTML:\n *\n * <div id=\"albumart\"></div>\n *\n * And call this from Javascript:\n *\n * $('#albumart').imageplaceholder('The Album Title');\n *\n * Which will result in:\n *\n * <div id=\"albumart\" style=\"background-color: rgb(121, 90, 171); ... \">T</div>\n *\n * You may also call it like this, to have a different background, than the seed:\n *\n * $('#albumart').imageplaceholder('The Album Title', 'Album Title');\n *\n * Resulting in:\n *\n * <div id=\"albumart\" style=\"background-color: rgb(121, 90, 171); ... \">A</div>\n *\n */\n\n/*\n* Alternatively, you can use the prototype function to convert your string to rgb colors:\n*\n* \"a6741a86aded5611a8e46ce16f2ad646\".toRgb()\n*\n* Will return the rgb parameters within the following object:\n*\n* Color {r: 208, g: 158, b: 109}\n*\n*/\n\nconst toRgb = (s) => {\n\t// Normalize hash\n\tvar hash = s.toLowerCase()\n\n\t// Already a md5 hash?\n\tif (hash.match(/^([0-9a-f]{4}-?){8}$/) === null) {\n\t\thash = md5(hash)\n\t}\n\n\thash = hash.replace(/[^0-9a-f]/g, '')\n\n\tfunction Color(r, g, b) {\n\t\tthis.r = r\n\t\tthis.g = g\n\t\tthis.b = b\n\t}\n\n\tfunction stepCalc(steps, ends) {\n\t\tvar step = new Array(3)\n\t\tstep[0] = (ends[1].r - ends[0].r) / steps\n\t\tstep[1] = (ends[1].g - ends[0].g) / steps\n\t\tstep[2] = (ends[1].b - ends[0].b) / steps\n\t\treturn step\n\t}\n\n\tfunction mixPalette(steps, color1, color2) {\n\t\tvar palette = []\n\t\tpalette.push(color1)\n\t\tvar step = stepCalc(steps, [color1, color2])\n\t\tfor (var i = 1; i < steps; i++) {\n\t\t\tvar r = parseInt(color1.r + (step[0] * i))\n\t\t\tvar g = parseInt(color1.g + (step[1] * i))\n\t\t\tvar b = parseInt(color1.b + (step[2] * i))\n\t\t\tpalette.push(new Color(r, g, b))\n\t\t}\n\t\treturn palette\n\t}\n\n\tconst red = new Color(182, 70, 157);\n\tconst yellow = new Color(221, 203, 85);\n\tconst blue = new Color(0, 130, 201); // Nextcloud blue\n\t// Number of steps to go from a color to another\n\t// 3 colors * 6 will result in 18 generated colors\n\tconst steps = 6;\n\n\tconst palette1 = mixPalette(steps, red, yellow);\n\tconst palette2 = mixPalette(steps, yellow, blue);\n\tconst palette3 = mixPalette(steps, blue, red);\n\n\tconst finalPalette = palette1.concat(palette2).concat(palette3);\n\n\t// Convert a string to an integer evenly\n\tfunction hashToInt(hash, maximum) {\n\t\tvar finalInt = 0\n\t\tvar result = []\n\n\t\t// Splitting evenly the string\n\t\tfor (var i = 0; i < hash.length; i++) {\n\t\t\t// chars in md5 goes up to f, hex:16\n\t\t\tresult.push(parseInt(hash.charAt(i), 16) % 16)\n\t\t}\n\t\t// Adds up all results\n\t\tfor (var j in result) {\n\t\t\tfinalInt += result[j]\n\t\t}\n\t\t// chars in md5 goes up to f, hex:16\n\t\t// make sure we're always using int in our operation\n\t\treturn parseInt(parseInt(finalInt) % maximum)\n\t}\n\n\treturn finalPalette[hashToInt(hash, steps * 3)]\n}\n\nString.prototype.toRgb = function() {\n\tconsole.warn('String.prototype.toRgb is deprecated! It will be removed in Nextcloud 22.')\n\n\treturn toRgb(this)\n}\n\n$.fn.imageplaceholder = function(seed, text, size) {\n\ttext = text || seed\n\n\t// Compute the hash\n\tvar rgb = toRgb(seed)\n\tthis.css('background-color', 'rgb(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ')')\n\n\t// Placeholders are square\n\tvar height = this.height() || size || 32\n\tthis.height(height)\n\tthis.width(height)\n\n\t// CSS rules\n\tthis.css('color', '#fff')\n\tthis.css('font-weight', 'normal')\n\tthis.css('text-align', 'center')\n\n\t// calculate the height\n\tthis.css('line-height', height + 'px')\n\tthis.css('font-size', (height * 0.55) + 'px')\n\n\tif (seed !== null && seed.length) {\n\t\tvar placeholderText = text.replace(/\\s+/g, ' ').trim().split(' ', 2).map((word) => word[0].toUpperCase()).join('')\n\t\tthis.html(placeholderText);\n\t}\n}\n\n$.fn.clearimageplaceholder = function() {\n\tthis.css('background-color', '')\n\tthis.css('color', '')\n\tthis.css('font-weight', '')\n\tthis.css('text-align', '')\n\tthis.css('line-height', '')\n\tthis.css('font-size', '')\n\tthis.html('')\n\tthis.removeClass('icon-loading')\n\tthis.removeClass('icon-loading-small')\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\nimport { getToken } from '../OC/requesttoken'\n\n$(document).on('ajaxSend', function(elm, xhr, settings) {\n\tif (settings.crossDomain === false) {\n\t\txhr.setRequestHeader('requesttoken', getToken())\n\t\txhr.setRequestHeader('OCS-APIREQUEST', 'true')\n\t}\n})\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * select a range in an input field\n *\n * @see {@link http://stackoverflow.com/questions/499126/jquery-set-cursor-position-in-text-area}\n * @param {number} start start selection from\n * @param {number} end number of char from start\n * @return {void}\n */\n$.fn.selectRange = function(start, end) {\n\treturn this.each(function() {\n\t\tif (this.setSelectionRange) {\n\t\t\tthis.focus()\n\t\t\tthis.setSelectionRange(start, end)\n\t\t} else if (this.createTextRange) {\n\t\t\tconst range = this.createTextRange()\n\t\t\trange.collapse(true)\n\t\t\trange.moveEnd('character', end)\n\t\t\trange.moveStart('character', start)\n\t\t\trange.select()\n\t\t}\n\t})\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * @name Show Password\n * @description\n * @version 1.3.0\n * @requires Jquery 1.5\n *\n * @author Jan Jarfalk <jan.jarfalk@unwrongest.com>\n * author-website http://www.unwrongest.com\n *\n * special-thanks Michel Gratton\n *\n * @license MIT\n */\n$.fn.extend({\n\tshowPassword(c) {\n\n\t\t// Setup callback object\n\t\tconst callback = { fn: null, args: {} }\n\t\tcallback.fn = c\n\n\t\t// Clones passwords and turn the clones into text inputs\n\t\tconst cloneElement = function(element) {\n\n\t\t\tconst $element = $(element)\n\n\t\t\tconst $clone = $('<input />')\n\n\t\t\t// Name added for JQuery Validation compatibility\n\t\t\t// Element name is required to avoid script warning.\n\t\t\t$clone.attr({\n\t\t\t\ttype: 'text',\n\t\t\t\tclass: $element.attr('class'),\n\t\t\t\tstyle: $element.attr('style'),\n\t\t\t\tsize: $element.attr('size'),\n\t\t\t\tname: $element.attr('name') + '-clone',\n\t\t\t\ttabindex: $element.attr('tabindex'),\n\t\t\t\tautocomplete: 'off',\n\t\t\t})\n\n\t\t\tif ($element.attr('placeholder') !== undefined) {\n\t\t\t\t$clone.attr('placeholder', $element.attr('placeholder'))\n\t\t\t}\n\n\t\t\treturn $clone\n\n\t\t}\n\n\t\t// Transfers values between two elements\n\t\tconst update = function(a, b) {\n\t\t\tb.val(a.val())\n\t\t}\n\n\t\t// Shows a or b depending on checkbox\n\t\tconst setState = function(checkbox, a, b) {\n\n\t\t\tif (checkbox.is(':checked')) {\n\t\t\t\tupdate(a, b)\n\t\t\t\tb.show()\n\t\t\t\ta.hide()\n\t\t\t} else {\n\t\t\t\tupdate(b, a)\n\t\t\t\tb.hide()\n\t\t\t\ta.show()\n\t\t\t}\n\n\t\t}\n\n\t\treturn this.each(function() {\n\n\t\t\tconst $input = $(this)\n\t\t\tconst $checkbox = $($input.data('typetoggle'))\n\n\t\t\t// Create clone\n\t\t\tconst $clone = cloneElement($input)\n\t\t\t$clone.insertAfter($input)\n\n\t\t\t// Set callback arguments\n\t\t\tif (callback.fn) {\n\t\t\t\tcallback.args.input = $input\n\t\t\t\tcallback.args.checkbox = $checkbox\n\t\t\t\tcallback.args.clone = $clone\n\t\t\t}\n\n\t\t\t$checkbox.bind('click', function() {\n\t\t\t\tsetState($checkbox, $input, $clone)\n\t\t\t})\n\n\t\t\t$input.bind('keyup', function() {\n\t\t\t\tupdate($input, $clone)\n\t\t\t})\n\n\t\t\t$clone.bind('keyup', function() {\n\t\t\t\tupdate($clone, $input)\n\n\t\t\t\t// Added for JQuery Validation compatibility\n\t\t\t\t// This will trigger validation if it's ON for keyup event\n\t\t\t\t$input.trigger('keyup')\n\n\t\t\t})\n\n\t\t\t// Added for JQuery Validation compatibility\n\t\t\t// This will trigger validation if it's ON for blur event\n\t\t\t$clone.bind('blur', function() {\n\t\t\t\t$input.trigger('focusout')\n\t\t\t})\n\n\t\t\tsetState($checkbox, $input, $clone)\n\n\t\t\t// set type of password field clone (type=text) to password right on submit\n\t\t\t// to prevent browser save the value of this field\n\t\t\t$clone.closest('form').submit(function(e) {\n\t\t\t\t// .prop has to be used, because .attr throws\n\t\t\t\t// an error while changing a type of an input\n\t\t\t\t// element\n\t\t\t\t$clone.prop('type', 'password')\n\t\t\t})\n\n\t\t\tif (callback.fn) {\n\t\t\t\tcallback.fn(callback.args)\n\t\t\t}\n\n\t\t})\n\t},\n})\n","/**\n * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n// Set autocomplete width the same as the related input\n// See http://stackoverflow.com/a/11845718\n$.ui.autocomplete.prototype._resizeMenu = function() {\n\tconst ul = this.menu.element\n\tul.outerWidth(this.element.outerWidth())\n}\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./jquery-ui-fixes.scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./jquery-ui-fixes.scss\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./jquery.ocdialog.scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./jquery.ocdialog.scss\";\n export default content && content.locals ? content.locals : undefined;\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\nimport './avatar'\nimport './contactsmenu'\nimport './exists'\nimport './filterattr'\nimport './ocdialog'\nimport './octemplate'\nimport './placeholder'\nimport './requesttoken'\nimport './selectrange'\nimport './showpassword'\nimport './ui-fixes'\n\nimport './css/jquery-ui-fixes.scss'\nimport './css/jquery.ocdialog.scss'\n\n/**\n * Disable automatic evaluation of responses for $.ajax() functions (and its\n * higher-level alternatives like $.get() and $.post()).\n *\n * If a response to a $.ajax() request returns a content type of \"application/javascript\"\n * JQuery would previously execute the response body. This is a pretty unexpected\n * behaviour and can result in a bypass of our Content-Security-Policy as well as\n * multiple unexpected XSS vectors.\n */\n$.ajaxSetup({\n\tcontents: {\n\t\tscript: false,\n\t},\n})\n\n/**\n * Disable execution of eval in jQuery. We do require an allowed eval CSP\n * configuration at the moment for handlebars et al. But for jQuery there is\n * not much of a reason to execute JavaScript directly via eval.\n *\n * This thus mitigates some unexpected XSS vectors.\n */\n$.globalEval = function() {\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\nimport 'core-js/stable'\nimport 'regenerator-runtime/runtime'\nimport './Polyfill/index.js'\n\n// If you remove the line below, tests won't pass\n// eslint-disable-next-line no-unused-vars\nimport OC from './OC/index.js'\n\nimport './globals.js'\nimport './jquery/index.js'\nimport { initCore } from './init.js'\nimport { registerAppsSlideToggle } from './OC/apps.js'\n\nwindow.addEventListener('DOMContentLoaded', function() {\n\tinitCore()\n\tregisterAppsSlideToggle()\n\n\t// fallback to hashchange when no history support\n\tif (window.history.pushState) {\n\t\twindow.onpopstate = _.bind(OC.Util.History._onPopState, OC.Util.History)\n\t} else {\n\t\t$(window).on('hashchange', _.bind(OC.Util.History._onPopState, OC.Util.History))\n\t}\n})\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"images/ui-icons_1d2d44_256x240.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_1___ = new URL(\"images/ui-icons_ffffff_256x240.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_2___ = new URL(\"images/ui-icons_ffd27a_256x240.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_3___ = new URL(\"images/ui-bg_diagonals-thick_20_666666_40x40.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_4___ = new URL(\"images/ui-bg_flat_10_000000_40x100.png\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___);\nvar ___CSS_LOADER_URL_REPLACEMENT_3___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_3___);\nvar ___CSS_LOADER_URL_REPLACEMENT_4___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_4___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".ui-widget-content{border:1px solid var(--color-border);background:var(--color-main-background) none;color:var(--color-main-text)}.ui-widget-content a{color:var(--color-main-text)}.ui-widget-header{border:none;color:var(--color-main-text);background-image:none}.ui-widget-header a{color:var(--color-main-text)}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid var(--color-border);background:var(--color-main-background) none;font-weight:bold;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #ddd;background:var(--color-main-background) none;font-weight:bold;color:var(--color-main-text)}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:var(--color-main-text)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid var(--color-primary);background:var(--color-main-background) none;font-weight:bold;color:var(--color-main-text)}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:var(--color-main-text)}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid var(--color-main-background);background:var(--color-main-background) none;color:var(--color-text-light);font-weight:600}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:var(--color-text-lighter)}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:var(--color-error);background:var(--color-error) none;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-state-default .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \")}.ui-state-active .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \")}.ui-state-highlight .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_1___ + \")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_2___ + \")}.ui-icon.ui-icon-none{display:none}.ui-widget-overlay{background:#666 url(\" + ___CSS_LOADER_URL_REPLACEMENT_3___ + \") 50% 50% repeat;opacity:.5}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url(\" + ___CSS_LOADER_URL_REPLACEMENT_4___ + \") 50% 50% repeat-x;opacity:.2;border-radius:5px}.ui-tabs{border:none}.ui-tabs .ui-tabs-nav.ui-corner-all{border-bottom-left-radius:0;border-bottom-right-radius:0}.ui-tabs .ui-tabs-nav{background:none;margin-bottom:15px}.ui-tabs .ui-tabs-nav .ui-state-default{border:none;border-bottom:1px solid rgba(0,0,0,0);font-weight:normal;margin:0 !important;padding:0 !important}.ui-tabs .ui-tabs-nav .ui-state-hover,.ui-tabs .ui-tabs-nav .ui-state-active{border:none;border-bottom:1px solid var(--color-main-text);color:var(--color-main-text)}.ui-tabs .ui-tabs-nav .ui-state-hover a,.ui-tabs .ui-tabs-nav .ui-state-hover a:link,.ui-tabs .ui-tabs-nav .ui-state-hover a:hover,.ui-tabs .ui-tabs-nav .ui-state-hover a:visited,.ui-tabs .ui-tabs-nav .ui-state-active a,.ui-tabs .ui-tabs-nav .ui-state-active a:link,.ui-tabs .ui-tabs-nav .ui-state-active a:hover,.ui-tabs .ui-tabs-nav .ui-state-active a:visited{color:var(--color-main-text)}.ui-tabs .ui-tabs-nav .ui-state-active{font-weight:bold}.ui-autocomplete.ui-menu{padding:0}.ui-autocomplete.ui-menu.item-count-1,.ui-autocomplete.ui-menu.item-count-2{overflow-y:hidden}.ui-autocomplete.ui-menu .ui-menu-item a{color:var(--color-text-lighter);display:block;padding:4px 4px 4px 14px}.ui-autocomplete.ui-menu .ui-menu-item a.ui-state-focus,.ui-autocomplete.ui-menu .ui-menu-item a.ui-state-active{box-shadow:inset 4px 0 var(--color-primary-element);color:var(--color-main-text)}.ui-autocomplete.ui-widget-content{background:var(--color-main-background);border-top:none}.ui-autocomplete.ui-corner-all{border-radius:0;border-bottom-left-radius:var(--border-radius);border-bottom-right-radius:var(--border-radius)}.ui-autocomplete .ui-state-hover,.ui-autocomplete .ui-widget-content .ui-state-hover,.ui-autocomplete .ui-widget-header .ui-state-hover,.ui-autocomplete .ui-state-focus,.ui-autocomplete .ui-widget-content .ui-state-focus,.ui-autocomplete .ui-widget-header .ui-state-focus{border:1px solid rgba(0,0,0,0);background:inherit;color:var(--color-primary-element)}.ui-autocomplete .ui-menu-item a{border-radius:0 !important}.ui-button.primary{background-color:var(--color-primary);color:var(--color-primary-text);border:1px solid var(--color-primary-text)}.ui-button:hover{font-weight:bold !important}.ui-draggable-handle,.ui-selectable{touch-action:pan-y}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/jquery/css/jquery-ui-fixes.scss\"],\"names\":[],\"mappings\":\"AAEA,mBACC,oCAAA,CACA,4CAAA,CACA,4BAAA,CAED,qBACC,4BAAA,CAED,kBACC,WAAA,CACA,4BAAA,CACA,qBAAA,CAED,oBACC,4BAAA,CAKD,2FAGC,oCAAA,CACA,4CAAA,CACA,gBAAA,CACA,UAAA,CAED,yEAGC,UAAA,CAED,0KAMC,qBAAA,CACA,4CAAA,CACA,gBAAA,CACA,4BAAA,CAED,2FAIC,4BAAA,CAED,wFAGC,qCAAA,CACA,4CAAA,CACA,gBAAA,CACA,4BAAA,CAED,sEAGC,4BAAA,CAKD,iGAGC,6CAAA,CACA,4CAAA,CACA,6BAAA,CACA,eAAA,CAED,uGAGC,+BAAA,CAED,qFAGC,yBAAA,CACA,kCAAA,CACA,UAAA,CAED,2FAGC,UAAA,CAED,oGAGC,UAAA,CAKD,2BACC,wDAAA,CAED,kDAEC,wDAAA,CAED,0BACC,wDAAA,CAED,6BACC,wDAAA,CAED,uDAEC,wDAAA,CAED,sBACC,YAAA,CAMD,mBACC,sEAAA,CACA,UAAA,CAED,kBACC,oBAAA,CACA,WAAA,CACA,wEAAA,CACA,UAAA,CACA,iBAAA,CAID,SACC,WAAA,CAEA,oCACC,2BAAA,CACA,4BAAA,CAGD,sBACC,eAAA,CACA,kBAAA,CAEA,wCACC,WAAA,CACA,qCAAA,CACA,kBAAA,CACA,mBAAA,CACA,oBAAA,CAGD,6EAEC,WAAA,CACA,8CAAA,CACA,4BAAA,CACA,0WACC,4BAAA,CAGF,uCACC,gBAAA,CAOF,yBACC,SAAA,CAIA,4EAEC,iBAAA,CAGD,yCACC,+BAAA,CACA,aAAA,CACA,wBAAA,CAEA,iHACC,mDAAA,CACA,4BAAA,CAKH,mCACC,uCAAA,CACA,eAAA,CAGD,+BACC,eAAA,CACA,8CAAA,CACA,+CAAA,CAGD,gRAKC,8BAAA,CACA,kBAAA,CACA,kCAAA,CAIA,iCACC,0BAAA,CAKH,mBACC,qCAAA,CACA,+BAAA,CACA,0CAAA,CAID,iBACI,2BAAA,CAKJ,oCAEC,kBAAA\",\"sourcesContent\":[\"/* Component containers\\n----------------------------------*/\\n.ui-widget-content {\\n\\tborder: 1px solid var(--color-border);\\n\\tbackground: var(--color-main-background) none;\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-widget-content a {\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-widget-header {\\n\\tborder: none;\\n\\tcolor: var(--color-main-text);\\n\\tbackground-image: none;\\n}\\n.ui-widget-header a {\\n\\tcolor: var(--color-main-text);\\n}\\n\\n/* Interaction states\\n----------------------------------*/\\n.ui-state-default,\\n.ui-widget-content .ui-state-default,\\n.ui-widget-header .ui-state-default {\\n\\tborder: 1px solid var(--color-border);\\n\\tbackground: var(--color-main-background) none;\\n\\tfont-weight: bold;\\n\\tcolor: #555;\\n}\\n.ui-state-default a,\\n.ui-state-default a:link,\\n.ui-state-default a:visited {\\n\\tcolor: #555;\\n}\\n.ui-state-hover,\\n.ui-widget-content .ui-state-hover,\\n.ui-widget-header .ui-state-hover,\\n.ui-state-focus,\\n.ui-widget-content .ui-state-focus,\\n.ui-widget-header .ui-state-focus {\\n\\tborder: 1px solid #ddd;\\n\\tbackground: var(--color-main-background) none;\\n\\tfont-weight: bold;\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-state-hover a,\\n.ui-state-hover a:hover,\\n.ui-state-hover a:link,\\n.ui-state-hover a:visited {\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-state-active,\\n.ui-widget-content .ui-state-active,\\n.ui-widget-header .ui-state-active {\\n\\tborder: 1px solid var(--color-primary);\\n\\tbackground: var(--color-main-background) none;\\n\\tfont-weight: bold;\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-state-active a,\\n.ui-state-active a:link,\\n.ui-state-active a:visited {\\n\\tcolor: var(--color-main-text);\\n}\\n\\n/* Interaction Cues\\n----------------------------------*/\\n.ui-state-highlight,\\n.ui-widget-content .ui-state-highlight,\\n.ui-widget-header .ui-state-highlight {\\n\\tborder: 1px solid var(--color-main-background);\\n\\tbackground: var(--color-main-background) none;\\n\\tcolor: var(--color-text-light);\\n\\tfont-weight: 600;\\n}\\n.ui-state-highlight a,\\n.ui-widget-content .ui-state-highlight a,\\n.ui-widget-header .ui-state-highlight a {\\n\\tcolor: var(--color-text-lighter);\\n}\\n.ui-state-error,\\n.ui-widget-content .ui-state-error,\\n.ui-widget-header .ui-state-error {\\n\\tborder: var(--color-error);\\n\\tbackground: var(--color-error) none;\\n\\tcolor: #ffffff;\\n}\\n.ui-state-error a,\\n.ui-widget-content .ui-state-error a,\\n.ui-widget-header .ui-state-error a {\\n\\tcolor: #ffffff;\\n}\\n.ui-state-error-text,\\n.ui-widget-content .ui-state-error-text,\\n.ui-widget-header .ui-state-error-text {\\n\\tcolor: #ffffff;\\n}\\n\\n/* Icons\\n----------------------------------*/\\n.ui-state-default .ui-icon {\\n\\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\\n}\\n.ui-state-hover .ui-icon,\\n.ui-state-focus .ui-icon {\\n\\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\\n}\\n.ui-state-active .ui-icon {\\n\\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\\n}\\n.ui-state-highlight .ui-icon {\\n\\tbackground-image: url('images/ui-icons_ffffff_256x240.png');\\n}\\n.ui-state-error .ui-icon,\\n.ui-state-error-text .ui-icon {\\n\\tbackground-image: url('images/ui-icons_ffd27a_256x240.png');\\n}\\n.ui-icon.ui-icon-none {\\n\\tdisplay: none;\\n}\\n\\n/* Misc visuals\\n----------------------------------*/\\n/* Overlays */\\n.ui-widget-overlay {\\n\\tbackground: #666666 url('images/ui-bg_diagonals-thick_20_666666_40x40.png') 50% 50% repeat;\\n\\topacity: .5;\\n}\\n.ui-widget-shadow {\\n\\tmargin: -5px 0 0 -5px;\\n\\tpadding: 5px;\\n\\tbackground: #000000 url('images/ui-bg_flat_10_000000_40x100.png') 50% 50% repeat-x;\\n\\topacity: .2;\\n\\tborder-radius: 5px;\\n}\\n\\n/* Tabs customizations */\\n.ui-tabs {\\n\\tborder: none;\\n\\n\\t.ui-tabs-nav.ui-corner-all {\\n\\t\\tborder-bottom-left-radius: 0;\\n\\t\\tborder-bottom-right-radius: 0;\\n\\t}\\n\\n\\t.ui-tabs-nav {\\n\\t\\tbackground: none;\\n\\t\\tmargin-bottom: 15px;\\n\\n\\t\\t.ui-state-default {\\n\\t\\t\\tborder: none;\\n\\t\\t\\tborder-bottom: 1px solid transparent;\\n\\t\\t\\tfont-weight: normal;\\n\\t\\t\\tmargin: 0 !important;\\n\\t\\t\\tpadding: 0 !important;\\n\\t\\t}\\n\\n\\t\\t.ui-state-hover,\\n\\t\\t.ui-state-active {\\n\\t\\t\\tborder: none;\\n\\t\\t\\tborder-bottom: 1px solid var(--color-main-text);\\n\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\ta, a:link, a:hover, a:visited {\\n\\t\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t.ui-state-active {\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t}\\n\\t}\\n}\\n\\n/* Select menus */\\n.ui-autocomplete {\\n\\t&.ui-menu {\\n\\t\\tpadding: 0;\\n\\n\\t\\t/* scrolling starts from three items,\\n\\t\\t * so hide overflow and scrollbars for a clean layout */\\n\\t\\t&.item-count-1,\\n\\t\\t&.item-count-2 {\\n\\t\\t\\toverflow-y: hidden;\\n\\t\\t}\\n\\n\\t\\t.ui-menu-item a {\\n\\t\\t\\tcolor: var(--color-text-lighter);\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\tpadding: 4px 4px 4px 14px;\\n\\n\\t\\t\\t&.ui-state-focus, &.ui-state-active {\\n\\t\\t\\t\\tbox-shadow: inset 4px 0 var(--color-primary-element);\\n\\t\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&.ui-widget-content {\\n\\t\\tbackground: var(--color-main-background);\\n\\t\\tborder-top: none;\\n\\t}\\n\\n\\t&.ui-corner-all {\\n\\t\\tborder-radius: 0;\\n\\t\\tborder-bottom-left-radius: var(--border-radius);\\n\\t\\tborder-bottom-right-radius: var(--border-radius);\\n\\t}\\n\\n\\t.ui-state-hover, .ui-widget-content .ui-state-hover,\\n\\t.ui-widget-header .ui-state-hover,\\n\\t.ui-state-focus,\\n\\t.ui-widget-content .ui-state-focus,\\n\\t.ui-widget-header .ui-state-focus {\\n\\t\\tborder: 1px solid transparent;\\n\\t\\tbackground: inherit;\\n\\t\\tcolor: var(--color-primary-element);\\n\\t}\\n\\n\\t.ui-menu-item {\\n\\t\\ta {\\n\\t\\t\\tborder-radius: 0 !important;\\n\\t\\t}\\n\\t}\\n}\\n\\n.ui-button.primary {\\n\\tbackground-color: var(--color-primary);\\n\\tcolor: var(--color-primary-text);\\n\\tborder: 1px solid var(--color-primary-text);\\n}\\n\\n// fix ui-buttons on hover\\n.ui-button:hover {\\n font-weight:bold !important;\\n}\\n\\n\\n/* DRAGGABLE */\\n.ui-draggable-handle,\\n.ui-selectable {\\n\\ttouch-action: pan-y;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".oc-dialog{background:var(--color-main-background);color:var(--color-text-light);border-radius:var(--border-radius-large);box-shadow:0 0 30px var(--color-box-shadow);padding:24px;z-index:10000;font-size:100%;box-sizing:border-box;min-width:200px;top:50%;left:50%;transform:translate(-50%, -50%);max-height:calc(100% - 20px);max-width:calc(100% - 20px);overflow:auto}.oc-dialog-title{background:var(--color-main-background)}.oc-dialog-buttonrow{position:relative;display:flex;background:rgba(0,0,0,0);right:0;bottom:0;padding:0;padding-top:10px;box-sizing:border-box;width:100%;background-image:linear-gradient(rgba(255, 255, 255, 0), var(--color-main-background))}.oc-dialog-buttonrow.twobuttons{justify-content:space-between}.oc-dialog-buttonrow.onebutton,.oc-dialog-buttonrow.twobuttons.aside{justify-content:flex-end}.oc-dialog-buttonrow button{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:44px;min-width:44px}.oc-dialog-close{position:absolute;top:0;right:0;padding:25px;background:var(--icon-close-dark) no-repeat center;opacity:.5;border-radius:var(--border-radius-pill)}.oc-dialog-close:hover,.oc-dialog-close:focus,.oc-dialog-close:active{opacity:1}.oc-dialog-dim{background-color:#000;opacity:.2;z-index:9999;position:fixed;top:0;left:0;width:100%;height:100%}body.theme--dark .oc-dialog-dim{opacity:.8}.oc-dialog-content{width:100%;max-width:550px}.oc-dialog.password-confirmation .oc-dialog-content{width:auto}.oc-dialog.password-confirmation .oc-dialog-content input[type=password]{width:100%}.oc-dialog.password-confirmation .oc-dialog-content label{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/jquery/css/jquery.ocdialog.scss\"],\"names\":[],\"mappings\":\"AAAA,WACC,uCAAA,CACA,6BAAA,CACA,wCAAA,CACA,2CAAA,CACA,YAAA,CACA,aAAA,CACA,cAAA,CACA,qBAAA,CACA,eAAA,CACA,OAAA,CACA,QAAA,CACA,+BAAA,CACA,4BAAA,CACA,2BAAA,CACA,aAAA,CAED,iBACC,uCAAA,CAED,qBACC,iBAAA,CACA,YAAA,CACA,wBAAA,CACA,OAAA,CACA,QAAA,CACA,SAAA,CACA,gBAAA,CACA,qBAAA,CACA,UAAA,CACA,sFAAA,CAEA,gCACO,6BAAA,CAGP,qEAEC,wBAAA,CAGD,4BACI,kBAAA,CACA,eAAA,CACH,sBAAA,CACA,WAAA,CACA,cAAA,CAIF,iBACC,iBAAA,CACA,KAAA,CACA,OAAA,CACA,YAAA,CACA,kDAAA,CACA,UAAA,CACA,uCAAA,CAEA,sEAGC,SAAA,CAIF,eACC,qBAAA,CACA,UAAA,CACA,YAAA,CACA,cAAA,CACA,KAAA,CACA,MAAA,CACA,UAAA,CACA,WAAA,CAGD,gCACC,UAAA,CAGD,mBACC,UAAA,CACA,eAAA,CAIA,oDACC,UAAA,CAEA,yEACC,UAAA,CAED,0DACC,YAAA\",\"sourcesContent\":[\".oc-dialog {\\n\\tbackground: var(--color-main-background);\\n\\tcolor: var(--color-text-light);\\n\\tborder-radius: var(--border-radius-large);\\n\\tbox-shadow: 0 0 30px var(--color-box-shadow);\\n\\tpadding: 24px;\\n\\tz-index: 10000;\\n\\tfont-size: 100%;\\n\\tbox-sizing: border-box;\\n\\tmin-width: 200px;\\n\\ttop: 50%;\\n\\tleft: 50%;\\n\\ttransform: translate(-50%, -50%);\\n\\tmax-height: calc(100% - 20px);\\n\\tmax-width: calc(100% - 20px);\\n\\toverflow: auto;\\n}\\n.oc-dialog-title {\\n\\tbackground: var(--color-main-background);\\n}\\n.oc-dialog-buttonrow {\\n\\tposition: relative;\\n\\tdisplay: flex;\\n\\tbackground: transparent;\\n\\tright: 0;\\n\\tbottom: 0;\\n\\tpadding: 0;\\n\\tpadding-top: 10px;\\n\\tbox-sizing: border-box;\\n\\twidth: 100%;\\n\\tbackground-image: linear-gradient(rgba(255, 255, 255, 0.0), var(--color-main-background));\\n\\n\\t&.twobuttons {\\n justify-content: space-between;\\n }\\n\\n\\t&.onebutton,\\n\\t&.twobuttons.aside {\\n\\t\\tjustify-content: flex-end;\\n\\t}\\n\\n\\tbutton {\\n\\t white-space: nowrap;\\n\\t overflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\theight: 44px;\\n\\t\\tmin-width: 44px;\\n\\t}\\n}\\n\\n.oc-dialog-close {\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tright: 0;\\n\\tpadding: 25px;\\n\\tbackground: var(--icon-close-dark) no-repeat center;\\n\\topacity: .5;\\n\\tborder-radius: var(--border-radius-pill);\\n\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\topacity: 1;\\n\\t}\\n}\\n\\n.oc-dialog-dim {\\n\\tbackground-color: #000;\\n\\topacity: .2;\\n\\tz-index: 9999;\\n\\tposition: fixed;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\twidth: 100%;\\n\\theight: 100%;\\n}\\n\\nbody.theme--dark .oc-dialog-dim {\\n\\topacity: .8;\\n}\\n\\n.oc-dialog-content {\\n\\twidth: 100%;\\n\\tmax-width: 550px;\\n}\\n\\n.oc-dialog.password-confirmation {\\n\\t.oc-dialog-content {\\n\\t\\twidth: auto;\\n\\n\\t\\tinput[type=password] {\\n\\t\\t\\twidth: 100%;\\n\\t\\t}\\n\\t\\tlabel {\\n\\t\\t\\tdisplay: none;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-menu[data-v-44a795f6]{width:100%;display:flex;flex-shrink:1;flex-wrap:wrap}.app-menu-main[data-v-44a795f6]{display:flex;flex-wrap:nowrap}.app-menu-main .app-menu-entry[data-v-44a795f6]{width:50px;height:50px;position:relative;display:flex;opacity:.7;filter:var(--background-image-invert-if-bright)}.app-menu-main .app-menu-entry.app-menu-entry__active[data-v-44a795f6]{opacity:1}.app-menu-main .app-menu-entry.app-menu-entry__active[data-v-44a795f6]::before{content:\\\" \\\";position:absolute;pointer-events:none;border-bottom-color:var(--color-main-background);transform:translateX(-50%);width:12px;height:5px;border-radius:3px;background-color:var(--color-primary-text);left:50%;bottom:6px;display:block;transition:all .1s ease-in-out;opacity:1}.app-menu-main .app-menu-entry.app-menu-entry__active .app-menu-entry--label[data-v-44a795f6]{font-weight:bold}.app-menu-main .app-menu-entry a[data-v-44a795f6]{width:calc(100% - 4px);height:calc(100% - 4px);margin:2px;color:var(--color-primary-text);position:relative}.app-menu-main .app-menu-entry img[data-v-44a795f6]{transition:margin .1s ease-in-out;width:20px;height:20px;padding:calc((100% - 20px)/2);box-sizing:content-box}.app-menu-main .app-menu-entry .app-menu-entry--label[data-v-44a795f6]{opacity:0;position:absolute;font-size:12px;color:var(--color-primary-text);text-align:center;bottom:-5px;left:50%;top:45%;display:block;min-width:100%;transform:translateX(-50%);transition:all .1s ease-in-out;width:100%;text-overflow:ellipsis;overflow:hidden;letter-spacing:-0.5px}.app-menu-main .app-menu-entry[data-v-44a795f6]:hover,.app-menu-main .app-menu-entry[data-v-44a795f6]:focus-within{opacity:1}.app-menu-main .app-menu-entry:hover .app-menu-entry--label[data-v-44a795f6],.app-menu-main .app-menu-entry:focus-within .app-menu-entry--label[data-v-44a795f6]{opacity:1;font-weight:bolder;bottom:0;width:100%;text-overflow:ellipsis;overflow:hidden}.app-menu-main[data-v-44a795f6]:hover,.app-menu-main[data-v-44a795f6]:focus-within,.app-menu-main .app-menu-entry[data-v-44a795f6]:hover,.app-menu-main .app-menu-entry[data-v-44a795f6]:focus{opacity:1}.app-menu-main:hover img[data-v-44a795f6],.app-menu-main:focus-within img[data-v-44a795f6],.app-menu-main .app-menu-entry:hover img[data-v-44a795f6],.app-menu-main .app-menu-entry:focus img[data-v-44a795f6]{margin-top:-8px}.app-menu-main:hover .app-menu-entry--label[data-v-44a795f6],.app-menu-main:focus-within .app-menu-entry--label[data-v-44a795f6],.app-menu-main .app-menu-entry:hover .app-menu-entry--label[data-v-44a795f6],.app-menu-main .app-menu-entry:focus .app-menu-entry--label[data-v-44a795f6]{opacity:1;bottom:0}.app-menu-main[data-v-44a795f6]:hover::before,.app-menu-main:hover .app-menu-entry[data-v-44a795f6]::before,.app-menu-main[data-v-44a795f6]:focus-within::before,.app-menu-main:focus-within .app-menu-entry[data-v-44a795f6]::before,.app-menu-main .app-menu-entry[data-v-44a795f6]:hover::before,.app-menu-main .app-menu-entry:hover .app-menu-entry[data-v-44a795f6]::before,.app-menu-main .app-menu-entry[data-v-44a795f6]:focus::before,.app-menu-main .app-menu-entry:focus .app-menu-entry[data-v-44a795f6]::before{opacity:0}[data-v-44a795f6] .app-menu-more .button-vue--vue-tertiary{color:var(--color-primary-text);opacity:.7;margin:3px;filter:var(--background-image-invert-if-bright)}[data-v-44a795f6] .app-menu-more .button-vue--vue-tertiary:hover{opacity:1;background-color:rgba(0,0,0,0) !important}[data-v-44a795f6] .app-menu-more .button-vue--vue-tertiary:focus-visible{opacity:1;outline:none !important}.app-menu-popover-entry .app-icon[data-v-44a795f6]{position:relative;height:44px}.app-menu-popover-entry .app-icon.has-unread[data-v-44a795f6]::after{background-color:var(--color-main-text)}.app-menu-popover-entry .app-icon img[data-v-44a795f6]{width:20px;height:20px;padding:15px}.has-unread[data-v-44a795f6]::after{content:\\\"\\\";width:8px;height:8px;background-color:var(--color-primary-text);border-radius:50%;position:absolute;display:block;top:10px;right:10px}.unread-counter[data-v-44a795f6]{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/AppMenu.vue\"],\"names\":[],\"mappings\":\"AAGA,2BACC,UAAA,CACA,YAAA,CACA,aAAA,CACA,cAAA,CAED,gCACC,YAAA,CACA,gBAAA,CAEA,gDACC,UAAA,CACA,WAAA,CACA,iBAAA,CACA,YAAA,CACA,UAAA,CACA,+CAAA,CAEA,uEACC,SAAA,CAEA,+EACC,WAAA,CACA,iBAAA,CACA,mBAAA,CACA,gDAAA,CACA,0BAAA,CACA,UAAA,CACA,UAAA,CACA,iBAAA,CACA,0CAAA,CACA,QAAA,CACA,UAAA,CACA,aAAA,CACA,8BAAA,CACA,SAAA,CAGD,8FACC,gBAAA,CAIF,kDACC,sBAAA,CACA,uBAAA,CACA,UAAA,CACA,+BAAA,CACA,iBAAA,CAGD,oDACC,iCAAA,CACA,UAvDgB,CAwDhB,WAxDgB,CAyDhB,6BAAA,CACA,sBAAA,CAGD,uEACC,SAAA,CACA,iBAAA,CACA,cAAA,CACA,+BAAA,CACA,iBAAA,CACA,WAAA,CACA,QAAA,CACA,OAAA,CACA,aAAA,CACA,cAAA,CACA,0BAAA,CACA,8BAAA,CACA,UAAA,CACA,sBAAA,CACA,eAAA,CACA,qBAAA,CAGD,mHAEC,SAAA,CACA,iKACC,SAAA,CACA,kBAAA,CACA,QAAA,CACA,UAAA,CACA,sBAAA,CACA,eAAA,CAOH,+LAIC,SAAA,CAEA,+MACC,eAAA,CAGD,2RACC,SAAA,CACA,QAAA,CAGD,8fACC,SAAA,CAKH,2DACC,+BAAA,CACA,UAAA,CACA,UAAA,CACA,+CAAA,CAEA,iEACC,SAAA,CACA,yCAAA,CAGD,yEACC,SAAA,CACA,uBAAA,CAKD,mDACC,iBAAA,CACA,WAAA,CAEA,qEACC,uCAAA,CAGD,uDACC,UAhJgB,CAiJhB,WAjJgB,CAkJhB,YAAA,CAKH,oCACC,UAAA,CACA,SAAA,CACA,UAAA,CACA,0CAAA,CACA,iBAAA,CACA,iBAAA,CACA,aAAA,CACA,QAAA,CACA,UAAA,CAGD,iCACC,YAAA\",\"sourcesContent\":[\"\\n$header-icon-size: 20px;\\n\\n.app-menu {\\n\\twidth: 100%;\\n\\tdisplay: flex;\\n\\tflex-shrink: 1;\\n\\tflex-wrap: wrap;\\n}\\n.app-menu-main {\\n\\tdisplay: flex;\\n\\tflex-wrap: nowrap;\\n\\n\\t.app-menu-entry {\\n\\t\\twidth: 50px;\\n\\t\\theight: 50px;\\n\\t\\tposition: relative;\\n\\t\\tdisplay: flex;\\n\\t\\topacity: .7;\\n\\t\\tfilter: var(--background-image-invert-if-bright);\\n\\n\\t\\t&.app-menu-entry__active {\\n\\t\\t\\topacity: 1;\\n\\n\\t\\t\\t&::before {\\n\\t\\t\\t\\tcontent: \\\" \\\";\\n\\t\\t\\t\\tposition: absolute;\\n\\t\\t\\t\\tpointer-events: none;\\n\\t\\t\\t\\tborder-bottom-color: var(--color-main-background);\\n\\t\\t\\t\\ttransform: translateX(-50%);\\n\\t\\t\\t\\twidth: 12px;\\n\\t\\t\\t\\theight: 5px;\\n\\t\\t\\t\\tborder-radius: 3px;\\n\\t\\t\\t\\tbackground-color: var(--color-primary-text);\\n\\t\\t\\t\\tleft: 50%;\\n\\t\\t\\t\\tbottom: 6px;\\n\\t\\t\\t\\tdisplay: block;\\n\\t\\t\\t\\ttransition: all 0.1s ease-in-out;\\n\\t\\t\\t\\topacity: 1;\\n\\t\\t\\t}\\n\\n\\t\\t\\t.app-menu-entry--label {\\n\\t\\t\\t\\tfont-weight: bold;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\ta {\\n\\t\\t\\twidth: calc(100% - 4px);\\n\\t\\t\\theight: calc(100% - 4px);\\n\\t\\t\\tmargin: 2px;\\n\\t\\t\\tcolor: var(--color-primary-text);\\n\\t\\t\\tposition: relative;\\n\\t\\t}\\n\\n\\t\\timg {\\n\\t\\t\\ttransition: margin 0.1s ease-in-out;\\n\\t\\t\\twidth: $header-icon-size;\\n\\t\\t\\theight: $header-icon-size;\\n\\t\\t\\tpadding: calc((100% - $header-icon-size) / 2);\\n\\t\\t\\tbox-sizing: content-box;\\n\\t\\t}\\n\\n\\t\\t.app-menu-entry--label {\\n\\t\\t\\topacity: 0;\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\tfont-size: 12px;\\n\\t\\t\\tcolor: var(--color-primary-text);\\n\\t\\t\\ttext-align: center;\\n\\t\\t\\tbottom: -5px;\\n\\t\\t\\tleft: 50%;\\n\\t\\t\\ttop: 45%;\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\tmin-width: 100%;\\n\\t\\t\\ttransform: translateX(-50%);\\n\\t\\t\\ttransition: all 0.1s ease-in-out;\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\tletter-spacing: -0.5px;\\n\\t\\t}\\n\\n\\t\\t&:hover,\\n\\t\\t&:focus-within {\\n\\t\\t\\topacity: 1;\\n\\t\\t\\t.app-menu-entry--label {\\n\\t\\t\\t\\topacity: 1;\\n\\t\\t\\t\\tfont-weight: bolder;\\n\\t\\t\\t\\tbottom: 0;\\n\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\t\\toverflow: hidden;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t}\\n\\n\\t// Show labels\\n\\t&:hover,\\n\\t&:focus-within,\\n\\t.app-menu-entry:hover,\\n\\t.app-menu-entry:focus {\\n\\t\\topacity: 1;\\n\\n\\t\\timg {\\n\\t\\t\\tmargin-top: -8px;\\n\\t\\t}\\n\\n\\t\\t.app-menu-entry--label {\\n\\t\\t\\topacity: 1;\\n\\t\\t\\tbottom: 0;\\n\\t\\t}\\n\\n\\t\\t&::before, .app-menu-entry::before {\\n\\t\\t\\topacity: 0;\\n\\t\\t}\\n\\t}\\n}\\n\\n::v-deep .app-menu-more .button-vue--vue-tertiary {\\n\\tcolor: var(--color-primary-text);\\n\\topacity: .7;\\n\\tmargin: 3px;\\n\\tfilter: var(--background-image-invert-if-bright);\\n\\n\\t&:hover {\\n\\t\\topacity: 1;\\n\\t\\tbackground-color: transparent !important;\\n\\t}\\n\\n\\t&:focus-visible {\\n\\t\\topacity: 1;\\n\\t\\toutline: none !important;\\n\\t}\\n}\\n\\n.app-menu-popover-entry {\\n\\t.app-icon {\\n\\t\\tposition: relative;\\n\\t\\theight: 44px;\\n\\n\\t\\t&.has-unread::after {\\n\\t\\t\\tbackground-color: var(--color-main-text);\\n\\t\\t}\\n\\n\\t\\timg {\\n\\t\\t\\twidth: $header-icon-size;\\n\\t\\t\\theight: $header-icon-size;\\n\\t\\t\\tpadding: calc((50px - $header-icon-size) / 2);\\n\\t\\t}\\n\\t}\\n}\\n\\n.has-unread::after {\\n\\tcontent: \\\"\\\";\\n\\twidth: 8px;\\n\\theight: 8px;\\n\\tbackground-color: var(--color-primary-text);\\n\\tborder-radius: 50%;\\n\\tposition: absolute;\\n\\tdisplay: block;\\n\\ttop: 10px;\\n\\tright: 10px;\\n}\\n\\n.unread-counter {\\n\\tdisplay: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".menu-entry__loading-icon[data-v-6e59d13c]{margin-right:8px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/UserMenu/UserMenuEntry.vue\"],\"names\":[],\"mappings\":\"AAEC,2CACC,gBAAA\",\"sourcesContent\":[\"\\n.menu-entry {\\n\\t&__loading-icon {\\n\\t\\tmargin-right: 8px;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#contactsmenu-menu[data-v-e32bb484]{height:calc(100vh - 150px);max-height:302px;min-height:175px;width:350px}#contactsmenu-menu[data-v-e32bb484] .emptycontent{margin-top:5vh !important;margin-bottom:1.5vh}#contactsmenu-menu[data-v-e32bb484] .emptycontent .icon-loading,#contactsmenu-menu[data-v-e32bb484] .emptycontent .icon-search{display:inline-block}#contactsmenu-menu[data-v-e32bb484] #contactsmenu-search{width:calc(100% - 16px);margin:8px;height:34px}#contactsmenu-menu[data-v-e32bb484] .content{height:calc(100vh - 150px - 50px);max-height:250px;min-height:125px;overflow-y:auto}#contactsmenu-menu[data-v-e32bb484] .content .footer{text-align:center}#contactsmenu-menu[data-v-e32bb484] .content .footer a{display:block;width:100%;padding:12px 0;opacity:.5}#contactsmenu-menu[data-v-e32bb484] a{padding:2px}#contactsmenu-menu[data-v-e32bb484] a:focus-visible{box-shadow:inset 0 0 0 2px var(--color-main-text) !important}#contactsmenu-menu[data-v-e32bb484] .contact{display:flex;position:relative;align-items:center;padding:3px 3px 3px 10px}#contactsmenu-menu[data-v-e32bb484] .contact .avatar{height:32px;width:32px;display:inline-block}#contactsmenu-menu[data-v-e32bb484] .contact .body{flex-grow:1;padding-left:8px}#contactsmenu-menu[data-v-e32bb484] .contact .body div{position:relative;width:100%}#contactsmenu-menu[data-v-e32bb484] .contact .body .full-name,#contactsmenu-menu[data-v-e32bb484] .contact .body .last-message{max-width:204px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}#contactsmenu-menu[data-v-e32bb484] .contact .body .last-message,#contactsmenu-menu[data-v-e32bb484] .contact .body .email-address{color:var(--color-text-maxcontrast)}#contactsmenu-menu[data-v-e32bb484] .contact .top-action,#contactsmenu-menu[data-v-e32bb484] .contact .second-action,#contactsmenu-menu[data-v-e32bb484] .contact .other-actions{width:16px;height:16px;opacity:.5;cursor:pointer}#contactsmenu-menu[data-v-e32bb484] .contact .top-action:not(button),#contactsmenu-menu[data-v-e32bb484] .contact .second-action:not(button),#contactsmenu-menu[data-v-e32bb484] .contact .other-actions:not(button){padding:14px}#contactsmenu-menu[data-v-e32bb484] .contact .top-action img,#contactsmenu-menu[data-v-e32bb484] .contact .second-action img,#contactsmenu-menu[data-v-e32bb484] .contact .other-actions img{filter:var(--background-invert-if-dark)}#contactsmenu-menu[data-v-e32bb484] .contact .top-action:hover,#contactsmenu-menu[data-v-e32bb484] .contact .top-action:active,#contactsmenu-menu[data-v-e32bb484] .contact .top-action:focus,#contactsmenu-menu[data-v-e32bb484] .contact .second-action:hover,#contactsmenu-menu[data-v-e32bb484] .contact .second-action:active,#contactsmenu-menu[data-v-e32bb484] .contact .second-action:focus,#contactsmenu-menu[data-v-e32bb484] .contact .other-actions:hover,#contactsmenu-menu[data-v-e32bb484] .contact .other-actions:active,#contactsmenu-menu[data-v-e32bb484] .contact .other-actions:focus{opacity:1}#contactsmenu-menu[data-v-e32bb484] .contact button.other-actions{width:44px}#contactsmenu-menu[data-v-e32bb484] .contact button.other-actions:focus{border-color:rgba(0,0,0,0);box-shadow:0 0 0 2px var(--color-main-text)}#contactsmenu-menu[data-v-e32bb484] .contact button.other-actions:focus-visible{border-radius:var(--border-radius-pill)}#contactsmenu-menu[data-v-e32bb484] .contact .menu{top:47px;margin-right:13px}#contactsmenu-menu[data-v-e32bb484] .contact .popovermenu::after{right:2px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/views/ContactsMenu.vue\"],\"names\":[],\"mappings\":\"AACA,oCAEC,0BAAA,CACA,gBAAA,CACA,gBAAA,CACA,WAAA,CAGC,kDACC,yBAAA,CACA,mBAAA,CACA,+HAEC,oBAAA,CAIF,yDACC,uBAAA,CACA,UAAA,CACA,WAAA,CAGD,6CAEC,iCAAA,CACA,gBAAA,CACA,gBAAA,CACA,eAAA,CAEA,qDACC,iBAAA,CAEA,uDACC,aAAA,CACA,UAAA,CACA,cAAA,CACA,UAAA,CAKH,sCACC,WAAA,CAEA,oDACC,4DAAA,CAIF,6CACC,YAAA,CACA,iBAAA,CACA,kBAAA,CACA,wBAAA,CAEA,qDACC,WAAA,CACA,UAAA,CACA,oBAAA,CAGD,mDACC,WAAA,CACA,gBAAA,CAEA,uDACC,iBAAA,CACA,UAAA,CAGD,+HAEC,eAAA,CACA,eAAA,CACA,kBAAA,CACA,sBAAA,CAED,mIACC,mCAAA,CAIF,iLACC,UAAA,CACA,WAAA,CACA,UAAA,CACA,cAAA,CAEA,qNACC,YAAA,CAED,6LACC,uCAAA,CAGD,4kBAGC,SAAA,CAIF,kEACC,UAAA,CAEA,wEACC,0BAAA,CACA,2CAAA,CAGD,gFACC,uCAAA,CAKF,mDACC,QAAA,CACA,iBAAA,CAED,iEACC,SAAA\",\"sourcesContent\":[\"\\n#contactsmenu-menu {\\n\\t/* show 2.5 to 4.5 entries depending on the screen height */\\n\\theight: calc(100vh - 50px * 3);\\n\\tmax-height: calc(50px * 6 + 2px);\\n\\tmin-height: calc(50px * 3.5);\\n\\twidth: 350px;\\n\\n\\t&:deep {\\n\\t\\t.emptycontent {\\n\\t\\t\\tmargin-top: 5vh !important;\\n\\t\\t\\tmargin-bottom: 1.5vh;\\n\\t\\t\\t.icon-loading,\\n\\t\\t\\t.icon-search {\\n\\t\\t\\t\\tdisplay: inline-block;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t#contactsmenu-search {\\n\\t\\t\\twidth: calc(100% - 16px);\\n\\t\\t\\tmargin: 8px;\\n\\t\\t\\theight: 34px;\\n\\t\\t}\\n\\n\\t\\t.content {\\n\\t\\t\\t/* fixed max height of the parent container without the search input */\\n\\t\\t\\theight: calc(100vh - 50px * 3 - 50px);\\n\\t\\t\\tmax-height: calc(50px * 5);\\n\\t\\t\\tmin-height: calc(50px * 3.5 - 50px);\\n\\t\\t\\toverflow-y: auto;\\n\\n\\t\\t\\t.footer {\\n\\t\\t\\t\\ttext-align: center;\\n\\n\\t\\t\\t\\ta {\\n\\t\\t\\t\\t\\tdisplay: block;\\n\\t\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\t\\tpadding: 12px 0;\\n\\t\\t\\t\\t\\topacity: .5;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\ta {\\n\\t\\t\\tpadding: 2px;\\n\\n\\t\\t\\t&:focus-visible {\\n\\t\\t\\t\\tbox-shadow: inset 0 0 0 2px var(--color-main-text) !important; // override rule in core/css/headers.scss #header a:focus-visible\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.contact {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tposition: relative;\\n\\t\\t\\talign-items: center;\\n\\t\\t\\tpadding: 3px 3px 3px 10px;\\n\\n\\t\\t\\t.avatar {\\n\\t\\t\\t\\theight: 32px;\\n\\t\\t\\t\\twidth: 32px;\\n\\t\\t\\t\\tdisplay: inline-block;\\n\\t\\t\\t}\\n\\n\\t\\t\\t.body {\\n\\t\\t\\t\\tflex-grow: 1;\\n\\t\\t\\t\\tpadding-left: 8px;\\n\\n\\t\\t\\t\\tdiv {\\n\\t\\t\\t\\t\\tposition: relative;\\n\\t\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t.full-name, .last-message {\\n\\t\\t\\t\\t\\t/* TODO: don't use fixed width */\\n\\t\\t\\t\\t\\tmax-width: 204px;\\n\\t\\t\\t\\t\\toverflow: hidden;\\n\\t\\t\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t.last-message, .email-address {\\n\\t\\t\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t.top-action, .second-action, .other-actions {\\n\\t\\t\\t\\twidth: 16px;\\n\\t\\t\\t\\theight: 16px;\\n\\t\\t\\t\\topacity: .5;\\n\\t\\t\\t\\tcursor: pointer;\\n\\n\\t\\t\\t\\t&:not(button) {\\n\\t\\t\\t\\t\\tpadding: 14px;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\timg {\\n\\t\\t\\t\\t\\tfilter: var(--background-invert-if-dark);\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t&:hover,\\n\\t\\t\\t\\t&:active,\\n\\t\\t\\t\\t&:focus {\\n\\t\\t\\t\\t\\topacity: 1;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\tbutton.other-actions {\\n\\t\\t\\t\\twidth: 44px;\\n\\n\\t\\t\\t\\t&:focus {\\n\\t\\t\\t\\t\\tborder-color: transparent;\\n\\t\\t\\t\\t\\tbox-shadow: 0 0 0 2px var(--color-main-text);\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t&:focus-visible {\\n\\t\\t\\t\\t\\tborder-radius: var(--border-radius-pill);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t/* actions menu */\\n\\t\\t\\t.menu {\\n\\t\\t\\t\\ttop: 47px;\\n\\t\\t\\t\\tmargin-right: 13px;\\n\\t\\t\\t}\\n\\t\\t\\t.popovermenu::after {\\n\\t\\t\\t\\tright: 2px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".user-menu[data-v-6a818bbc]{margin-right:12px}.user-menu[data-v-6a818bbc] .header-menu__trigger{opacity:1 !important}.user-menu[data-v-6a818bbc] .header-menu__trigger:focus-visible .user-menu__avatar{border:2px solid var(--color-primary-text)}.user-menu[data-v-6a818bbc] .header-menu__carret{display:none !important}.user-menu[data-v-6a818bbc] .header-menu__content{width:fit-content !important}.user-menu__avatar[data-v-6a818bbc]:active,.user-menu__avatar[data-v-6a818bbc]:focus,.user-menu__avatar[data-v-6a818bbc]:hover{border:2px solid var(--color-primary-text)}.user-menu__nav[data-v-6a818bbc]{display:flex;width:100%}.user-menu__nav ul[data-v-6a818bbc]{display:flex;flex-direction:column;gap:2px}.user-menu__nav ul[data-v-6a818bbc] li a,.user-menu__nav ul[data-v-6a818bbc] li button{border-radius:6px;display:inline-flex;align-items:center;height:var(--header-menu-item-height);color:var(--color-main-text);padding:10px 8px;box-sizing:border-box;white-space:nowrap;position:relative;width:100%}.user-menu__nav ul[data-v-6a818bbc] li a:hover,.user-menu__nav ul[data-v-6a818bbc] li button:hover{background-color:var(--color-background-hover)}.user-menu__nav ul[data-v-6a818bbc] li a:focus-visible,.user-menu__nav ul[data-v-6a818bbc] li button:focus-visible{background-color:var(--color-background-hover) !important;box-shadow:inset 0 0 0 2px var(--color-primary) !important;outline:none !important}.user-menu__nav ul[data-v-6a818bbc] li a:active,.user-menu__nav ul[data-v-6a818bbc] li a.active,.user-menu__nav ul[data-v-6a818bbc] li button:active,.user-menu__nav ul[data-v-6a818bbc] li button.active{background-color:var(--color-primary-light)}.user-menu__nav ul[data-v-6a818bbc] li a span,.user-menu__nav ul[data-v-6a818bbc] li button span{padding-bottom:0;color:var(--color-main-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:110px}.user-menu__nav ul[data-v-6a818bbc] li a img,.user-menu__nav ul[data-v-6a818bbc] li button img{width:16px;height:16px;margin-right:10px}.user-menu__nav ul[data-v-6a818bbc] li a img,.user-menu__nav ul[data-v-6a818bbc] li a svg,.user-menu__nav ul[data-v-6a818bbc] li button img,.user-menu__nav ul[data-v-6a818bbc] li button svg{opacity:.7;filter:var(--background-invert-if-dark)}.user-menu__nav ul[data-v-6a818bbc] li button{background-color:rgba(0,0,0,0);border:none;font-weight:normal;margin:0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/views/UserMenu.vue\"],\"names\":[],\"mappings\":\"AACA,4BACC,iBAAA,CAIE,kDACC,oBAAA,CAEC,mFACC,0CAAA,CAKH,iDACC,uBAAA,CAGD,kDACC,4BAAA,CAMF,+HAGC,0CAAA,CAIF,iCACC,YAAA,CACA,UAAA,CAEA,oCACC,YAAA,CACA,qBAAA,CACA,OAAA,CAIE,uFAEC,iBAAA,CACA,mBAAA,CACA,kBAAA,CACA,qCAAA,CACA,4BAAA,CACA,gBAAA,CACA,qBAAA,CACA,kBAAA,CACA,iBAAA,CACA,UAAA,CAEA,mGACC,8CAAA,CAGD,mHACC,yDAAA,CACA,0DAAA,CACA,uBAAA,CAGD,0MAEC,2CAAA,CAGD,iGACC,gBAAA,CACA,4BAAA,CACA,kBAAA,CACA,eAAA,CACA,sBAAA,CACA,eAAA,CAGD,+FACC,UAAA,CACA,WAAA,CACA,iBAAA,CAGD,8LAEC,UAAA,CACA,uCAAA,CAKF,8CACC,8BAAA,CACA,WAAA,CACA,kBAAA,CACA,QAAA\",\"sourcesContent\":[\"\\n.user-menu {\\n\\tmargin-right: 12px;\\n\\n\\t&:deep {\\n\\t\\t.header-menu {\\n\\t\\t\\t&__trigger {\\n\\t\\t\\t\\topacity: 1 !important;\\n\\t\\t\\t\\t&:focus-visible {\\n\\t\\t\\t\\t\\t.user-menu__avatar {\\n\\t\\t\\t\\t\\t\\tborder: 2px solid var(--color-primary-text);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t&__carret {\\n\\t\\t\\t\\tdisplay: none !important;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&__content {\\n\\t\\t\\t\\twidth: fit-content !important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&__avatar {\\n\\t\\t&:active,\\n\\t\\t&:focus,\\n\\t\\t&:hover {\\n\\t\\t\\tborder: 2px solid var(--color-primary-text);\\n\\t\\t}\\n\\t}\\n\\n\\t&__nav {\\n\\t\\tdisplay: flex;\\n\\t\\twidth: 100%;\\n\\n\\t\\tul {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tflex-direction: column;\\n\\t\\t\\tgap: 2px;\\n\\n\\t\\t\\t&:deep {\\n\\t\\t\\t\\tli {\\n\\t\\t\\t\\t\\ta,\\n\\t\\t\\t\\t\\tbutton {\\n\\t\\t\\t\\t\\t\\tborder-radius: 6px;\\n\\t\\t\\t\\t\\t\\tdisplay: inline-flex;\\n\\t\\t\\t\\t\\t\\talign-items: center;\\n\\t\\t\\t\\t\\t\\theight: var(--header-menu-item-height);\\n\\t\\t\\t\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\t\\t\\t\\tpadding: 10px 8px;\\n\\t\\t\\t\\t\\t\\tbox-sizing: border-box;\\n\\t\\t\\t\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\t\\t\\t\\tposition: relative;\\n\\t\\t\\t\\t\\t\\twidth: 100%;\\n\\n\\t\\t\\t\\t\\t\\t&:hover {\\n\\t\\t\\t\\t\\t\\t\\tbackground-color: var(--color-background-hover);\\n\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t&:focus-visible {\\n\\t\\t\\t\\t\\t\\t\\tbackground-color: var(--color-background-hover) !important;\\n\\t\\t\\t\\t\\t\\t\\tbox-shadow: inset 0 0 0 2px var(--color-primary) !important;\\n\\t\\t\\t\\t\\t\\t\\toutline: none !important;\\n\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t&:active,\\n\\t\\t\\t\\t\\t\\t&.active {\\n\\t\\t\\t\\t\\t\\t\\tbackground-color: var(--color-primary-light);\\n\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\tspan {\\n\\t\\t\\t\\t\\t\\t\\tpadding-bottom: 0;\\n\\t\\t\\t\\t\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\t\\t\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\t\\t\\t\\t\\toverflow: hidden;\\n\\t\\t\\t\\t\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\t\\t\\t\\t\\tmax-width: 110px;\\n\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\timg {\\n\\t\\t\\t\\t\\t\\t\\twidth: 16px;\\n\\t\\t\\t\\t\\t\\t\\theight: 16px;\\n\\t\\t\\t\\t\\t\\t\\tmargin-right: 10px;\\n\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\timg,\\n\\t\\t\\t\\t\\t\\tsvg {\\n\\t\\t\\t\\t\\t\\t\\topacity: .7;\\n\\t\\t\\t\\t\\t\\t\\tfilter: var(--background-invert-if-dark);\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t// Override global button styles\\n\\t\\t\\t\\t\\tbutton {\\n\\t\\t\\t\\t\\t\\tbackground-color: transparent;\\n\\t\\t\\t\\t\\t\\tborder: none;\\n\\t\\t\\t\\t\\t\\tfont-weight: normal;\\n\\t\\t\\t\\t\\t\\tmargin: 0;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.program(5, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":1},\"end\":{\"line\":10,\"column\":8}}})) != null ? stack1 : \"\");\n},\"2\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileTitle\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":2},\"end\":{\"line\":7,\"column\":9}}})) != null ? stack1 : \"\");\n},\"3\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t\t<a class=\\\"profile-link--avatar\\\" href=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1), depth0))\n + \"\\\">\\n\t\t\t\t<img src=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32\\\" class=\\\"avatar\\\" srcset=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32 1x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=64 2x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=128 4x\\\" alt=\\\"\\\">\\n\t\t\t</a>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t<img src=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32\\\" class=\\\"avatar\\\" srcset=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32 1x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=64 2x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=128 4x\\\" alt=\\\"\\\">\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.program(11, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":12,\"column\":1},\"end\":{\"line\":20,\"column\":8}}})) != null ? stack1 : \"\");\n},\"8\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileTitle\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":13,\"column\":2},\"end\":{\"line\":17,\"column\":9}}})) != null ? stack1 : \"\");\n},\"9\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t\t<a class=\\\"profile-link--avatar\\\" href=\\\"\"\n + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1), depth0))\n + \"\\\">\\n\t\t\t\t<div class=\\\"avatar\\\"></div>\\n\t\t\t</a>\\n\";\n},\"11\":function(container,depth0,helpers,partials,data) {\n return \"\t\t<div class=\\\"avatar\\\"></div>\\n\";\n},\"13\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileTitle\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(14, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":23,\"column\":1},\"end\":{\"line\":29,\"column\":8}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(16, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":30,\"column\":1},\"end\":{\"line\":34,\"column\":8}}})) != null ? stack1 : \"\");\n},\"14\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t<a class=\\\"body profile-link--full-name\\\" href=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1), depth0))\n + \"\\\">\\n\t\t\t<div class=\\\"full-name\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"fullName\") : stack1), depth0))\n + \"</div>\\n\t\t\t<div class=\\\"last-message\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"lastMessage\") : stack1), depth0))\n + \"</div>\\n\t\t\t<div class=\\\"email-address\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"emailAddresses\") : stack1), depth0))\n + \"</div>\\n\t\t</a>\\n\";\n},\"16\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t<a class=\\\"top-action\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"hyperlink\") : stack1), depth0))\n + \"\\\" title=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n\t\t\t<img src=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"icon\") : stack1), depth0))\n + \"\\\" alt=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n\t\t</a>\\n\";\n},\"18\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(19, data, 0),\"inverse\":container.program(21, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":35,\"column\":0},\"end\":{\"line\":50,\"column\":0}}})) != null ? stack1 : \"\");\n},\"19\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t<a class=\\\"body\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"hyperlink\") : stack1), depth0))\n + \"\\\">\\n\t\t<div class=\\\"full-name\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"fullName\") : stack1), depth0))\n + \"</div>\\n\t\t<div class=\\\"last-message\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"lastMessage\") : stack1), depth0))\n + \"</div>\\n\t\t<div class=\\\"email-address\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"emailAddresses\") : stack1), depth0))\n + \"</div>\\n\t</a>\\n \t<a class=\\\"top-action\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"hyperlink\") : stack1), depth0))\n + \"\\\" title=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n \t\t<img src=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"icon\") : stack1), depth0))\n + \"\\\" alt=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n\t</a>\\n\";\n},\"21\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t<div class=\\\"body\\\">\\n\t\t<div class=\\\"full-name\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"fullName\") : stack1), depth0))\n + \"</div>\\n\t\t<div class=\\\"last-message\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"lastMessage\") : stack1), depth0))\n + \"</div>\\n\t\t<div class=\\\"email-address\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"emailAddresses\") : stack1), depth0))\n + \"</div>\\n\t</div>\\n\";\n},\"23\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<a class=\\\"second-action\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"hyperlink\") : stack1), depth0))\n + \"\\\" title=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n\t<img src=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"icon\") : stack1), depth0))\n + \"\\\" alt=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n</a>\\n\";\n},\"25\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t<button class=\\\"other-actions icon-more\\\"></button>\\n\t<div class=\\\"menu popovermenu\\\">\\n\t\t<ul>\\n\"\n + ((stack1 = lookupProperty(helpers,\"each\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"actions\") : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(26, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":60,\"column\":3},\"end\":{\"line\":67,\"column\":12}}})) != null ? stack1 : \"\")\n + \"\t\t</ul>\\n\t</div>\\n\";\n},\"26\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t\t<li>\\n\t\t\t\t<a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"hyperlink\") || (depth0 != null ? lookupProperty(depth0,\"hyperlink\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"hyperlink\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":62,\"column\":13},\"end\":{\"line\":62,\"column\":26}}}) : helper)))\n + \"\\\">\\n\t\t\t\t\t<img src=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"icon\") || (depth0 != null ? lookupProperty(depth0,\"icon\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"icon\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":63,\"column\":15},\"end\":{\"line\":63,\"column\":23}}}) : helper)))\n + \"\\\" alt=\\\"\\\">\\n\t\t\t\t\t<span>\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"title\") || (depth0 != null ? lookupProperty(depth0,\"title\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"title\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":64,\"column\":11},\"end\":{\"line\":64,\"column\":20}}}) : helper)))\n + \"</span>\\n\t\t\t\t</a>\\n\t\t\t</li>\\n\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(7, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":21,\"column\":7}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(13, data, 0),\"inverse\":container.program(18, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":22,\"column\":0},\"end\":{\"line\":50,\"column\":7}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"hasTwoActions\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(23, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":51,\"column\":0},\"end\":{\"line\":55,\"column\":7}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"hasManyActions\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(25, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":56,\"column\":0},\"end\":{\"line\":70,\"column\":7}}})) != null ? stack1 : \"\");\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-search\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"couldNotLoadText\") || (depth0 != null ? lookupProperty(depth0,\"couldNotLoadText\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"couldNotLoadText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":5},\"end\":{\"line\":3,\"column\":25}}}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-search\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"noContactsFoundText\") || (depth0 != null ? lookupProperty(depth0,\"noContactsFoundText\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"noContactsFoundText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":5},\"end\":{\"line\":4,\"column\":28}}}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"footer\\\"><a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"contactsAppURL\") || (depth0 != null ? lookupProperty(depth0,\"contactsAppURL\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppURL\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":29},\"end\":{\"line\":9,\"column\":47}}}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"showAllContactsText\") || (depth0 != null ? lookupProperty(depth0,\"showAllContactsText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"showAllContactsText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":49},\"end\":{\"line\":9,\"column\":72}}}) : helper)))\n + \"</a></div>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"canInstallApp\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":10,\"column\":0},\"end\":{\"line\":12,\"column\":0}}})) != null ? stack1 : \"\");\n},\"6\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"footer\\\"><a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"contactsAppMgmtURL\") || (depth0 != null ? lookupProperty(depth0,\"contactsAppMgmtURL\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppMgmtURL\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":29},\"end\":{\"line\":11,\"column\":51}}}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"contactsAppMgmtText\") || (depth0 != null ? lookupProperty(depth0,\"contactsAppMgmtText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppMgmtText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":53},\"end\":{\"line\":11,\"column\":76}}}) : helper)))\n + \"</a></div>\\n\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contacts\") : depth0)) != null ? lookupProperty(stack1,\"length\") : stack1),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":6,\"column\":11}}})) != null ? stack1 : \"\")\n + \"<div id=\\\"contactsmenu-contacts\\\"></div>\\n\"\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"contactsAppEnabled\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.program(5, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":8,\"column\":0},\"end\":{\"line\":12,\"column\":7}}})) != null ? stack1 : \"\");\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-loading\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"loadingText\") || (depth0 != null ? lookupProperty(depth0,\"loadingText\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"loadingText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":5},\"end\":{\"line\":3,\"column\":20}}}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<label class=\\\"hidden-visually\\\" for=\\\"contactsmenu-search\\\">\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"searchContactsText\") || (depth0 != null ? lookupProperty(depth0,\"searchContactsText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchContactsText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":57},\"end\":{\"line\":1,\"column\":79}}}) : helper)))\n + \"</label>\\n<input id=\\\"contactsmenu-search\\\" type=\\\"search\\\" placeholder=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"searchContactsText\") || (depth0 != null ? lookupProperty(depth0,\"searchContactsText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchContactsText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":59},\"end\":{\"line\":2,\"column\":81}}}) : helper)))\n + \"\\\" value=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"searchTerm\") || (depth0 != null ? lookupProperty(depth0,\"searchTerm\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchTerm\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":90},\"end\":{\"line\":2,\"column\":104}}}) : helper)))\n + \"\\\">\\n<div class=\\\"content\\\">\\n</div>\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<img src=\\\"\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"icon\") || (depth0 != null ? lookupProperty(depth0,\"icon\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"icon\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":24},\"end\":{\"line\":3,\"column\":32}}}) : helper)))\n + \"\\\">\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<li>\\n\t<a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"hyperlink\") || (depth0 != null ? lookupProperty(depth0,\"hyperlink\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"hyperlink\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":10},\"end\":{\"line\":2,\"column\":23}}}) : helper)))\n + \"\\\">\\n\t\t\"\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"icon\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":2},\"end\":{\"line\":3,\"column\":41}}})) != null ? stack1 : \"\")\n + \"\\n\t\t<span>\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"title\") || (depth0 != null ? lookupProperty(depth0,\"title\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"title\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":8},\"end\":{\"line\":4,\"column\":17}}}) : helper)))\n + \"</span>\\n\t</a>\\n</li>\\n\";\n},\"useData\":true});","var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 76225,\n\t\"./bn-bd.js\": 76225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-il\": 47207,\n\t\"./en-il.js\": 47207,\n\t\"./en-in\": 44175,\n\t\"./en-in.js\": 44175,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./en-sg\": 31662,\n\t\"./en-sg.js\": 31662,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-mx\": 96112,\n\t\"./es-mx.js\": 96112,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fil\": 42549,\n\t\"./fil.js\": 42549,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 94470,\n\t\"./fr-ca\": 63049,\n\t\"./fr-ca.js\": 63049,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 94470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 29295,\n\t\"./ga.js\": 29295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-deva\": 27884,\n\t\"./gom-deva.js\": 27884,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 30094,\n\t\"./hi.js\": 30094,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it-ch\": 10150,\n\t\"./it-ch.js\": 10150,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ku\": 1408,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./oc-lnc\": 92135,\n\t\"./oc-lnc.js\": 92135,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./tg\": 27321,\n\t\"./tg.js\": 27321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 19005,\n\t\"./tk.js\": 19005,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-mo\": 99807,\n\t\"./zh-mo.js\": 99807,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 2943;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2943: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], function() { return __webpack_require__(530); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","loadedScripts","loadedStyles","updatableNotification","getDefaultNotificationFunction","setDefault","callback","this","hide","$row","_","undefined","each","$","toastify","hideToast","console","error","call","showHtml","html","options","isHTML","timeout","TOAST_PERMANENT_TIMEOUT","toast","showMessage","toastElement","show","text","toString","split","join","escapeHTML","showUpdate","showTemporary","TOAST_DEFAULT_TIMEOUT","isHidden","find","length","ajaxConnectionLostHandler","Notification","t","trailing","dynamicSlideToggleEnabled","enableDynamicSlideToggle","Apps","$el","removeClass","trigger","addClass","method","endpoint","OC","type","toUpperCase","url","generateOcsUrl","data","success","bind","getApps","getKeys","app","getValue","key","defaultValue","setValue","value","deleteKey","appConfig","window","oc_appconfig","AppConfig","_oc_appswebroots","methodMap","create","update","patch","delete","read","parsePropFindResult","result","davProperties","subResult","props","href","propStat","status","properties","propKey","id","parseIdFromLocation","queryPos","indexOf","substr","parts","pop","isSuccessStatus","callPropPatch","client","model","headers","propPatch","attrs","changedProp","warn","convertModelAttributesToDavProperties","changed","then","toJSON","Backbone","VendorBackbone","Object","assign","davCall","dav","baseUrl","xmlNamespaces","resolveUrl","requestToken","propFind","depth","response","propsMapping","results","body","shift","callPropFind","request","callMkCol","responseJson","locationHeader","xhr","getResponseHeader","callMethod","davSync","params","isCollection","Collection","hasInnerCollection","usePUT","collection","Error","urlError","JSON","stringify","processData","prototype","textStatus","errorThrown","context","_oc_config","Contact","Model","defaults","fullName","lastMessage","actions","hasOneAction","hasTwoActions","hasManyActions","initialize","get","set","ContactCollection","ContactsListView","View","_collection","_subViews","render","self","forEach","contact","item","ContactsListItemView","append","on","_onChildActionMenuToggle","push","$src","view","className","_template","_model","_actionMenuShown","events","contactTemplate","require","template","_onOtherActionMenuOpened","delegateEvents","imageplaceholder","tooltip","placement","_onToggleActionsMenu","is","ContactsMenuView","_loadingTemplate","_errorTemplate","_contentTemplate","_contactsTemplate","_contacts","_searchTerm","templates","loading","menu","list","_onSearch","e","searchTerm","val","loadingTemplate","errorTemplate","couldNotLoadText","contentTemplate","searchContactsText","contactsTemplate","noContactsFoundText","showAllContactsText","contactsAppMgmtText","showLoading","loadingText","showError","showContacts","viewData","contacts","contactsAppEnabled","contactsAppURL","canInstallApp","contactsAppMgmtURL","searchVal","focus","ContactsMenu","_view","_contactsPromise","el","loadContacts","_getContacts","Promise","resolve","filter","term","catch","rawUid","document","getElementsByTagName","getAttribute","displayName","currentUser","Search","isA11yActivation","event","global","emit","token","Dialogs","YES_NO_BUTTONS","OK_BUTTONS","FILEPICKER_TYPE_CHOOSE","FILEPICKER_TYPE_MOVE","FILEPICKER_TYPE_COPY","FILEPICKER_TYPE_COPY_MOVE","FILEPICKER_TYPE_CUSTOM","dialogsCounter","alert","title","modal","message","OK_BUTTON","info","confirm","confirmDestructive","buttons","confirmHtml","prompt","name","password","_getMessageTemplate","$tmpl","dialogName","dialogId","$dlg","octemplate","dialog_name","input","attr","label","buttonlist","click","ocdialog","defaultButton","closeOnEscape","close","filepicker","multiselect","mimetypeFilter","path","sortField","sortOrder","emptyText","newText","filesClient","OCA","Sharing","PublicApp","fileList","filelist","allowDirectoryChooser","_getFilePickerTemplate","$filePicker","emptytext","newtext","nameCol","sizeCol","modifiedCol","prepend","$showGridView","_onGridviewChange","_getGridSettings","newButton","stopImmediatePropagation","preventDefault","$input","submit","newName","lastPos","lastIndexOf","selectRange","$form","$submit","stopPropagation","filename","trimmedName","trim","match","isFileNameValid","file","escape","checkInput","newname","createDirectory","always","_fillFilePicker","ready","$fileListHeader","$filelist","$filelistContainer","$dirTree","_handleTreeListSelect","_handlePickerClick","dir","currentTarget","functionToCall","returnType","datapath","index","element","selectedName","button","width","height","style","remove","buttonEnableDisable","closest","prop","fail","content","dialogType","allowHtml","escapeFunction","cancel","classes","confirmClasses","closeCallback","_fileexistsshown","fileexists","original","replacement","controller","dialogDeferred","resampleHermite","canvas","W","H","W2","H2","Math","round","img","getContext","getImageData","img2","data2","ratio_w","ratio_h","ratio_w_half","ceil","ratio_h_half","j","i","x2","weight","weights","weights_alpha","gx_r","gx_g","gx_b","gx_a","center_y","yy","floor","dy","abs","center_x","w0","xx","dx","w","sqrt","clearRect","max","putImageData","addConflict","$conflicts","$conflict","clone","$originalDiv","$replacementDiv","size","mtime","lastModified","directory","urlSpec","x","y","c","etag","forceIcon","previewpath","Files","generatePreviewUrl","replace","css","FileReader","reader","onload","blob","Blob","target","URL","webkitURL","originalUrl","createObjectURL","image","Image","src","createElement","min","drawImage","toDataURL","readAsArrayBuffer","reject","getCroppedPreview","checkboxId","count","n","parent","children","_getFileExistsTemplate","allnewfiles","allexistingfiles","why","what","onCancel","onContinue","closeButton","$primaryButton","updatePrimaryButton","checkedCount","$checkbox","promise","gridview","toggleClass","isGridView","hasClass","defer","$filePickerTemplate","tmpl","$listTmpl","detach","jqXHR","$messageTemplate","$fileexistsTemplate","empty","advancedFilter","getFolderContents","files","_changeButtonsText","mimetype","showHiddenInput","getElementById","startsWith","comparator","Comparators","fileInfo1","fileInfo2","sort","file1","file2","isFavorite","fileInfo","tags","_fillSlug","idx","entry","simpleSize","sizeColor","isEncrypted","icon","parseInt","pow","filename1","filename2","date","previewUrl","addButton","$template","paths","prependTo","getOcDialog","$element","ctrlKey","copyText","folder","moveText","eq","manageFromDocument","getToken","setToken","newToken","OCEventSource","joinChar","dataStr","typelessListeners","closed","listeners","encodeURIComponent","useFallBack","EventSource","iframeId","iframeCount","fallBackSources","iframe","source","onmessage","parse","listen","fallBackCallBack","done","lastLength","addEventListener","currentMenu","currentMenuToggle","hideMenus","complete","lastMenu","slideUp","apply","arguments","isAdmin","_oc_isadmin","_oc_l10n_registry_translations","_oc_l10n_registry_plural_functions","hasAppTranslations","appId","getAppTranslations","translations","pluralFunction","L10n","load","appName","generateFilePath","register","pluralForm","bundle","_getPlural","extend","_unregister","translate","vars","allOptions","sanitize","optSanitize","DOMPurify","identity","optEscape","translation","a","b","r","_build","translatePlural","textSingular","textPlural","identifier","plural","number","language","substring","Handlebars","startSaving","selector","startAction","stop","finishedSaving","finishedAction","finishedSuccess","finishedError","delay","fadeOut","pageLoadTime","init","requirePasswordConfirmation","moment","requiresPasswordConfirmation","serverTimeDiff","nc_pageLoad","timeSinceLogin","nc_lastLogin","backendAllowsPasswordConfirmation","rejectCallback","config","_confirmPassword","$dialog","$error","$buttons","generateUrl","lastLogin","theme","_theme","_handlers","_pushState","strParams","history","pushState","location","pathname","navigator","userAgent","toLowerCase","pattern","patterns","querySelectorAll","ii","fill","stroke","removeAttribute","setAttribute","replaceState","hash","_cancelPop","addOnPopStateHandler","handler","_parseHashQuery","pos","_decodeQuery","query","parseUrlQuery","search","_onPopState","state","chunkify","tz","charAt","m","History","humanFileSize","computerFileSize","string","s","bytes","matches","parseFloat","isFinite","k","kb","mb","gb","g","tb","pb","p","formatDate","timestamp","format","TESTING","relativeModifiedDate","diff","fromNow","getScrollBarWidth","_scrollBarWidth","inner","outer","position","top","left","visibility","overflow","appendChild","w1","offsetWidth","w2","clientWidth","removeChild","stripTime","Date","getFullYear","getMonth","getDate","naturalSortCompare","aa","bb","aNum","Number","bNum","localeCompare","waitFor","interval","internalCallback","setTimeout","isCookieSetToValue","cookies","cookie","debug","_oc_debug","webroot","_oc_webroot","coreApps","menuSpeed","PERMISSION_ALL","PERMISSION_CREATE","PERMISSION_DELETE","PERMISSION_NONE","PERMISSION_READ","PERMISSION_SHARE","PERMISSION_UPDATE","TAG_FAVORITE","fileIsBlacklisted","Config","addScript","script","addStyle","createStyleSheet","appSettings","args","appid","scriptName","cache","settings","popup","arrowclass","loadJS","scriptname","jqxhr","appswebroots","dialogs","getCurrentUser","uid","isUserAdmin","L10N","_ajaxConnectionLostHandler","_processAjaxError","statusText","timer","setInterval","clearInterval","registerXHRForErrorProcessing","readyState","getCapabilities","realGetCapabilities","registerMenu","$toggle","$menuEl","toggle","headerMenu","isClickableElement","slideToggle","showMenu","unregisterMenu","off","basename","encodePath","dirname","isSamePath","joinPaths","getHost","host","getHostName","hostname","getPort","port","getProtocol","protocol","getCanonicalLocale","getLocale","getLanguage","addTranslations","buildQueryString","parseQueryString","queryString","components","part","decodeURIComponent","msg","PasswordConfirmation","Plugins","_plugins","targetName","plugin","plugins","getPlugins","attach","targetObject","Util","filePath","namespaces","tail","getRootPath","getRootUrl","imagePath","redirect","targetURL","reload","getRequestToken","linkTo","linkToOCS","service","version","ocsVersion","linkToRemote","generateRemoteUrl","linkToRemoteBase","realGetRootUrl","subscribe","resp","poll","setRequestToken","startPolling","NaN","session_lifetime","isNaN","getInterval","Contacts","NcHeaderMenu","contactsMenu","mounted","methods","handleOpen","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","_c","_self","scopedSlots","_u","fn","proxy","_v","NcActions","NcActionLink","apps","appLimit","observer","computed","appList","mainAppList","popoverAppList","appLabel","beforeDestroy","unsubscribe","setNavigationCounter","setApps","resize","appCount","staticClass","_l","class","active","unread","_s","_e","NcLoadingIcon","required","cachedIcon","handleClick","$event","shiftKey","altKey","metaKey","NcAvatar","UserMenuEntry","settingsNavEntries","userId","_b","localeAliases","zh","zh_Hans","zh_Hans_CN","zh_Hans_HK","zh_Hans_MO","zh_Hans_SG","zh_Hant","zh_Hant_HK","zh_Hant_MO","zh_Hant_TW","locale","hasOwnProperty","initCore","mountPoint","allowAuthErrors","loadState","loadConfig","auto_logout","lastActive","now","localStorage","setItem","newValue","logoutUrl","registerAutoLogout","session_keepalive","initSessionHeartBeat","Vue","container","appMenu","AppMenu","$mount","counter","setUpMainMenu","h","UserMenu","setUpContactsMenu","snapper","Snap","disable","maxPosition","minDragDistance","animating","oldSnapperOpen","open","oldSnapperClose","_snapperOpen","_snapperClose","keypress","delegate","$target","navigationBarSlideGestureEnabled","navigationBarSlideGestureAllowed","navigationBarSlideGestureEnablePending","enable","toggleSnapperOnSize","ex","TypeError","urlRegex","plainToRich","formatLinksRich","richToPlain","formatLinksPlain","leadingSpace","trailingSpace","linkText","$content","$this","dismissOptions","dismiss","menuItem","div","classList","add","innerText","ocs","product","onclick","whatsNew","regular","whatsNewTextItem","innerHTML","changelogURL","rel","onQuerySuccess","onQueryError","onDismissSuccess","onDismissError","func","funcName","oldFunc","newFunc","types","loadedStylesheets","loadScript","scriptPath","btoa","onerror","head","loadStylesheet","stylePath","link","showSuccess","warning","showWarning","showInfo","Accessibility","disableKeyboardShortcuts","Collaboration","registerType","typeDefinition","action","getTypes","keys","getIcon","typeIconClass","getLabel","typeString","getLink","Comments","InitialState","Loader","Toast","WhatsNew","warnIfNotTesting","setDeprecatedProp","cb","Array","isArray","defineProperty","autosize","ClipboardJS","md5","OCP","user","ie8fix","hidedefault","displayname","setAvatarForUnknownUser","String","$div","devicePixelRatio","oc_userconfig","avatar","clearimageplaceholder","alt","entryTemplate","shareWith","shareType","appendTo","$list","topAction","concat","hyperlink","clickedList","has","clickedTarget","attrName","attrValue","_create","originalCss","display","originalTitle","tabIndex","role","insertBefore","removeAttr","$buttonrow","$button","enterCallback","keyCode","_setOptions","_createOverlay","_init","_trigger","_setOption","$title","_setSizes","$defaultButton","$closeButton","closeCB","lessHeight","outerHeight","contentDiv","overlay","_destroyOverlay","widget","setEnterCallback","unsetEnterCallback","destroy","Template","elem","_html","o","outerHTML","toRgb","Color","mixPalette","steps","color1","color2","palette","step","ends","stepCalc","red","yellow","blue","palette1","palette2","palette3","maximum","finalInt","hashToInt","seed","rgb","placeholderText","map","word","elm","crossDomain","setRequestHeader","start","end","setSelectionRange","createTextRange","range","collapse","moveEnd","moveStart","select","showPassword","setState","checkbox","$clone","tabindex","autocomplete","cloneElement","insertAfter","outerWidth","contents","areaSelector","area","hideArea","slideDown","showArea","onpopstate","___CSS_LOADER_URL_IMPORT_0___","___CSS_LOADER_URL_IMPORT_1___","___CSS_LOADER_URL_IMPORT_2___","___CSS_LOADER_URL_IMPORT_3___","___CSS_LOADER_URL_IMPORT_4___","___CSS_LOADER_EXPORT___","___CSS_LOADER_URL_REPLACEMENT_0___","___CSS_LOADER_URL_REPLACEMENT_1___","___CSS_LOADER_URL_REPLACEMENT_2___","___CSS_LOADER_URL_REPLACEMENT_3___","___CSS_LOADER_URL_REPLACEMENT_4___","module","exports","depth0","helpers","partials","stack1","lookupProperty","propertyName","nullContext","program","noop","alias1","lambda","alias2","escapeExpression","helper","hooks","helperMissing","alias3","alias4","webpackContext","req","webpackContextResolve","__webpack_require__","code","__webpack_module_cache__","moduleId","cachedModule","loaded","__webpack_modules__","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","every","splice","getter","__esModule","d","definition","enumerable","globalThis","Function","obj","Symbol","toStringTag","nmd","baseURI","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","nc","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"core-main.js?v=e477bd09ad068209fe64","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/core/src/OC/legacy-loader.js","webpack:///nextcloud/core/src/OC/notification.js","webpack:///nextcloud/core/src/OC/xhr-error.js","webpack:///nextcloud/core/src/OC/apps.js","webpack:///nextcloud/core/src/OCP/appconfig.js","webpack:///nextcloud/core/src/OC/appconfig.js","webpack:///nextcloud/core/src/OC/appswebroots.js","webpack:///nextcloud/core/src/OC/backbone-webdav.js","webpack:///nextcloud/core/src/OC/backbone.js","webpack:///nextcloud/core/src/OC/config.js","webpack:///nextcloud/core/src/OC/contactsmenu.js","webpack:///nextcloud/core/src/OC/currentuser.js","webpack:///nextcloud/core/src/OCA/search.js","webpack:///nextcloud/core/src/OCA/index.js","webpack:///nextcloud/core/src/Util/a11y.js","webpack:///nextcloud/core/src/OC/dialogs.js","webpack:///nextcloud/core/src/OC/requesttoken.js","webpack:///nextcloud/core/src/OC/eventsource.js","webpack:///nextcloud/core/src/OC/menu.js","webpack:///nextcloud/core/src/OC/constants.js","webpack:///nextcloud/core/src/OC/admin.js","webpack:///nextcloud/core/src/OC/l10n-registry.js","webpack:///nextcloud/core/src/OC/l10n.js","webpack:///nextcloud/core/src/OC/msg.js","webpack:///nextcloud/core/src/OC/password-confirmation.js","webpack:///nextcloud/core/src/OC/theme.js","webpack:///nextcloud/core/src/OC/util-history.js","webpack:///nextcloud/core/src/OC/util.js","webpack:///nextcloud/core/src/OC/debug.js","webpack:///nextcloud/core/src/OC/webroot.js","webpack:///nextcloud/core/src/OC/get_set.js","webpack:///nextcloud/core/src/OC/index.js","webpack:///nextcloud/core/src/OC/appsettings.js","webpack:///nextcloud/core/src/OC/capabilities.js","webpack:///nextcloud/core/src/OC/host.js","webpack:///nextcloud/core/src/OC/query-string.js","webpack:///nextcloud/core/src/OC/plugins.js","webpack:///nextcloud/core/src/OC/navigation.js","webpack:///nextcloud/core/src/OC/routing.js","webpack:///nextcloud/core/src/session-heartbeat.js","webpack:///nextcloud/core/src/views/ContactsMenu.vue?vue&type=script&lang=js&","webpack:///nextcloud/core/src/views/ContactsMenu.vue","webpack://nextcloud/./core/src/views/ContactsMenu.vue?41d6","webpack://nextcloud/./core/src/views/ContactsMenu.vue?1de5","webpack://nextcloud/./core/src/views/ContactsMenu.vue?f71b","webpack:///nextcloud/core/src/components/AppMenu.vue","webpack:///nextcloud/core/src/components/AppMenu.vue?vue&type=script&lang=js&","webpack://nextcloud/./core/src/components/AppMenu.vue?8eda","webpack://nextcloud/./core/src/components/AppMenu.vue?95cf","webpack://nextcloud/./core/src/components/AppMenu.vue?d0fd","webpack:///nextcloud/core/src/components/UserMenu/UserMenuEntry.vue","webpack:///nextcloud/core/src/components/UserMenu/UserMenuEntry.vue?vue&type=script&lang=js&","webpack://nextcloud/./core/src/components/UserMenu/UserMenuEntry.vue?6a6f","webpack://nextcloud/./core/src/components/UserMenu/UserMenuEntry.vue?a480","webpack://nextcloud/./core/src/components/UserMenu/UserMenuEntry.vue?4de1","webpack:///nextcloud/core/src/views/UserMenu.vue","webpack:///nextcloud/core/src/views/UserMenu.vue?vue&type=script&lang=js&","webpack://nextcloud/./core/src/views/UserMenu.vue?3de1","webpack://nextcloud/./core/src/views/UserMenu.vue?5d6d","webpack://nextcloud/./core/src/views/UserMenu.vue?4b20","webpack:///nextcloud/core/src/init.js","webpack:///nextcloud/core/src/Polyfill/tooltip.js","webpack:///nextcloud/core/src/components/UserMenu.js","webpack:///nextcloud/core/src/components/MainMenu.js","webpack:///nextcloud/core/src/components/ContactsMenu.js","webpack:///nextcloud/core/src/OCP/comments.js","webpack:///nextcloud/core/src/OCP/whatsnew.js","webpack:///nextcloud/core/src/OCP/accessibility.js","webpack:///nextcloud/core/src/globals.js","webpack:///nextcloud/core/src/OCP/collaboration.js","webpack:///nextcloud/core/src/OCP/loader.js","webpack:///nextcloud/core/src/OCP/toast.js","webpack:///nextcloud/core/src/OCP/index.js","webpack:///nextcloud/core/src/jquery/avatar.js","webpack:///nextcloud/core/src/jquery/contactsmenu.js","webpack:///nextcloud/core/src/jquery/exists.js","webpack:///nextcloud/core/src/jquery/filterattr.js","webpack:///nextcloud/core/src/jquery/ocdialog.js","webpack:///nextcloud/core/src/jquery/octemplate.js","webpack:///nextcloud/core/src/jquery/placeholder.js","webpack:///nextcloud/core/src/jquery/requesttoken.js","webpack:///nextcloud/core/src/jquery/selectrange.js","webpack:///nextcloud/core/src/jquery/showpassword.js","webpack:///nextcloud/core/src/jquery/ui-fixes.js","webpack://nextcloud/./core/src/jquery/css/jquery-ui-fixes.scss?a4c2","webpack://nextcloud/./core/src/jquery/css/jquery.ocdialog.scss?5718","webpack:///nextcloud/core/src/jquery/index.js","webpack:///nextcloud/core/src/main.js","webpack:///nextcloud/core/src/jquery/css/jquery-ui-fixes.scss","webpack:///nextcloud/core/src/jquery/css/jquery.ocdialog.scss","webpack:///nextcloud/core/src/components/AppMenu.vue?vue&type=style&index=0&id=44a795f6&prod&lang=scss&scoped=true&","webpack:///nextcloud/core/src/components/UserMenu/UserMenuEntry.vue?vue&type=style&index=0&id=6e59d13c&prod&lang=scss&scoped=true&","webpack:///nextcloud/core/src/views/ContactsMenu.vue?vue&type=style&index=0&id=1563c388&prod&lang=scss&scoped=true&","webpack:///nextcloud/core/src/views/UserMenu.vue?vue&type=style&index=0&id=6a818bbc&prod&lang=scss&scoped=true&","webpack:///nextcloud/core/src/OC/contactsmenu/contact.handlebars","webpack:///nextcloud/core/src/OC/contactsmenu/error.handlebars","webpack:///nextcloud/core/src/OC/contactsmenu/list.handlebars","webpack:///nextcloud/core/src/OC/contactsmenu/loading.handlebars","webpack:///nextcloud/core/src/OC/contactsmenu/menu.handlebars","webpack:///nextcloud/core/src/jquery/contactsmenu/jquery_entry.handlebars","webpack:///nextcloud/node_modules/moment/locale|sync|/^\\.\\/.*$","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/** @typedef {import('jquery')} jQuery */\nimport $ from 'jquery'\nimport { generateFilePath } from '@nextcloud/router'\n\nconst loadedScripts = {}\nconst loadedStyles = []\n\n/**\n * Load a script for the server and load it. If the script is already loaded,\n * the event handler will be called directly\n *\n * @param {string} app the app id to which the script belongs\n * @param {string} script the filename of the script\n * @param {Function} ready event handler to be called when the script is loaded\n * @return {jQuery.Deferred}\n * @deprecated 16.0.0 Use OCP.Loader.loadScript\n */\nexport const addScript = (app, script, ready) => {\n\tconsole.warn('OC.addScript is deprecated, use OCP.Loader.loadScript instead')\n\n\tlet deferred\n\tconst path = generateFilePath(app, 'js', script + '.js')\n\tif (!loadedScripts[path]) {\n\t\tdeferred = $.Deferred()\n\t\t$.getScript(path, () => deferred.resolve())\n\t\tloadedScripts[path] = deferred\n\t} else {\n\t\tif (ready) {\n\t\t\tready()\n\t\t}\n\t}\n\treturn loadedScripts[path]\n}\n\n/**\n * Loads a CSS file\n *\n * @param {string} app the app id to which the css style belongs\n * @param {string} style the filename of the css file\n * @deprecated 16.0.0 Use OCP.Loader.loadStylesheet\n */\nexport const addStyle = (app, style) => {\n\tconsole.warn('OC.addStyle is deprecated, use OCP.Loader.loadStylesheet instead')\n\n\tconst path = generateFilePath(app, 'css', style + '.css')\n\tif (loadedStyles.indexOf(path) === -1) {\n\t\tloadedStyles.push(path)\n\t\tif (document.createStyleSheet) {\n\t\t\tdocument.createStyleSheet(path)\n\t\t} else {\n\t\t\tstyle = $('<link rel=\"stylesheet\" type=\"text/css\" href=\"' + path + '\"/>')\n\t\t\t$('head').append(style)\n\t\t}\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author npmbuildbot[bot] \"npmbuildbot[bot]@users.noreply.github.com\"\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\n/** @typedef {import('jquery')} jQuery */\nimport $ from 'jquery'\nimport { showMessage, TOAST_DEFAULT_TIMEOUT, TOAST_PERMANENT_TIMEOUT } from '@nextcloud/dialogs'\n\n/**\n * @todo Write documentation\n * @deprecated 17.0.0 use the `@nextcloud/dialogs` package instead\n * @namespace OC.Notification\n */\nexport default {\n\n\tupdatableNotification: null,\n\n\tgetDefaultNotificationFunction: null,\n\n\t/**\n\t * @param {Function} callback callback function\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tsetDefault(callback) {\n\t\tthis.getDefaultNotificationFunction = callback\n\t},\n\n\t/**\n\t * Hides a notification.\n\t *\n\t * If a row is given, only hide that one.\n\t * If no row is given, hide all notifications.\n\t *\n\t * @param {jQuery} [$row] notification row\n\t * @param {Function} [callback] callback\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\thide($row, callback) {\n\t\tif (_.isFunction($row)) {\n\t\t\t// first arg is the callback\n\t\t\tcallback = $row\n\t\t\t$row = undefined\n\t\t}\n\n\t\tif (!$row) {\n\t\t\tconsole.error('Missing argument $row in OC.Notification.hide() call, caller needs to be adjusted to only dismiss its own notification')\n\t\t\treturn\n\t\t}\n\n\t\t// remove the row directly\n\t\t$row.each(function() {\n\t\t\tif ($(this)[0].toastify) {\n\t\t\t\t$(this)[0].toastify.hideToast()\n\t\t\t} else {\n\t\t\t\tconsole.error('cannot hide toast because object is not set')\n\t\t\t}\n\t\t\tif (this === this.updatableNotification) {\n\t\t\t\tthis.updatableNotification = null\n\t\t\t}\n\t\t})\n\t\tif (callback) {\n\t\t\tcallback.call()\n\t\t}\n\t\tif (this.getDefaultNotificationFunction) {\n\t\t\tthis.getDefaultNotificationFunction()\n\t\t}\n\t},\n\n\t/**\n\t * Shows a notification as HTML without being sanitized before.\n\t * If you pass unsanitized user input this may lead to a XSS vulnerability.\n\t * Consider using show() instead of showHTML()\n\t *\n\t * @param {string} html Message to display\n\t * @param {object} [options] options\n\t * @param {string} [options.type] notification type\n\t * @param {number} [options.timeout=0] timeout value, defaults to 0 (permanent)\n\t * @return {jQuery} jQuery element for notification row\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshowHtml(html, options) {\n\t\toptions = options || {}\n\t\toptions.isHTML = true\n\t\toptions.timeout = (!options.timeout) ? TOAST_PERMANENT_TIMEOUT : options.timeout\n\t\tconst toast = showMessage(html, options)\n\t\ttoast.toastElement.toastify = toast\n\t\treturn $(toast.toastElement)\n\t},\n\n\t/**\n\t * Shows a sanitized notification\n\t *\n\t * @param {string} text Message to display\n\t * @param {object} [options] options\n\t * @param {string} [options.type] notification type\n\t * @param {number} [options.timeout=0] timeout value, defaults to 0 (permanent)\n\t * @return {jQuery} jQuery element for notification row\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshow(text, options) {\n\t\tconst escapeHTML = function(text) {\n\t\t\treturn text.toString()\n\t\t\t\t.split('&').join('&amp;')\n\t\t\t\t.split('<').join('&lt;')\n\t\t\t\t.split('>').join('&gt;')\n\t\t\t\t.split('\"').join('&quot;')\n\t\t\t\t.split('\\'').join('&#039;')\n\t\t}\n\n\t\toptions = options || {}\n\t\toptions.timeout = (!options.timeout) ? TOAST_PERMANENT_TIMEOUT : options.timeout\n\t\tconst toast = showMessage(escapeHTML(text), options)\n\t\ttoast.toastElement.toastify = toast\n\t\treturn $(toast.toastElement)\n\t},\n\n\t/**\n\t * Updates (replaces) a sanitized notification.\n\t *\n\t * @param {string} text Message to display\n\t * @return {jQuery} JQuery element for notificaiton row\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshowUpdate(text) {\n\t\tif (this.updatableNotification) {\n\t\t\tthis.updatableNotification.hideToast()\n\t\t}\n\t\tthis.updatableNotification = showMessage(text, { timeout: TOAST_PERMANENT_TIMEOUT })\n\t\tthis.updatableNotification.toastElement.toastify = this.updatableNotification\n\t\treturn $(this.updatableNotification.toastElement)\n\t},\n\n\t/**\n\t * Shows a notification that disappears after x seconds, default is\n\t * 7 seconds\n\t *\n\t * @param {string} text Message to show\n\t * @param {Array} [options] options array\n\t * @param {number} [options.timeout=7] timeout in seconds, if this is 0 it will show the message permanently\n\t * @param {boolean} [options.isHTML=false] an indicator for HTML notifications (true) or text (false)\n\t * @param {string} [options.type] notification type\n\t * @return {JQuery} the toast element\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshowTemporary(text, options) {\n\t\toptions = options || {}\n\t\toptions.timeout = options.timeout || TOAST_DEFAULT_TIMEOUT\n\t\tconst toast = showMessage(text, options)\n\t\ttoast.toastElement.toastify = toast\n\t\treturn $(toast.toastElement)\n\t},\n\n\t/**\n\t * Returns whether a notification is hidden.\n\t *\n\t * @return {boolean}\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tisHidden() {\n\t\treturn !$('#content').find('.toastify').length\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\nimport $ from 'jquery'\n\nimport OC from './index'\nimport Notification from './notification'\n\n/**\n * Warn users that the connection to the server was lost temporarily\n *\n * This function is throttled to prevent stacked notfications.\n * After 7sec the first notification is gone, then we can show another one\n * if necessary.\n */\nexport const ajaxConnectionLostHandler = _.throttle(() => {\n\tNotification.showTemporary(t('core', 'Connection to server lost'))\n}, 7 * 1000, { trailing: false })\n\n/**\n * Process ajax error, redirects to main page\n * if an error/auth error status was returned.\n *\n * @param {XMLHttpRequest} xhr xhr request\n */\nexport const processAjaxError = xhr => {\n\t// purposefully aborted request ?\n\t// OC._userIsNavigatingAway needed to distinguish ajax calls cancelled by navigating away\n\t// from calls cancelled by failed cross-domain ajax due to SSO redirect\n\tif (xhr.status === 0 && (xhr.statusText === 'abort' || xhr.statusText === 'timeout' || OC._reloadCalled)) {\n\t\treturn\n\t}\n\n\tif (_.contains([302, 303, 307, 401], xhr.status) && OC.currentUser) {\n\t\t// sometimes \"beforeunload\" happens later, so need to defer the reload a bit\n\t\tsetTimeout(function() {\n\t\t\tif (!OC._userIsNavigatingAway && !OC._reloadCalled) {\n\t\t\t\tlet timer = 0\n\t\t\t\tconst seconds = 5\n\t\t\t\tconst interval = setInterval(function() {\n\t\t\t\t\tNotification.showUpdate(n('core', 'Problem loading page, reloading in %n second', 'Problem loading page, reloading in %n seconds', seconds - timer))\n\t\t\t\t\tif (timer >= seconds) {\n\t\t\t\t\t\tclearInterval(interval)\n\t\t\t\t\t\tOC.reload()\n\t\t\t\t\t}\n\t\t\t\t\ttimer++\n\t\t\t\t}, 1000 // 1 second interval\n\t\t\t\t)\n\n\t\t\t\t// only call reload once\n\t\t\t\tOC._reloadCalled = true\n\t\t\t}\n\t\t}, 100)\n\t} else if (xhr.status === 0) {\n\t\t// Connection lost (e.g. WiFi disconnected or server is down)\n\t\tsetTimeout(function() {\n\t\t\tif (!OC._userIsNavigatingAway && !OC._reloadCalled) {\n\t\t\t\t// TODO: call method above directly\n\t\t\t\tOC._ajaxConnectionLostHandler()\n\t\t\t}\n\t\t}, 100)\n\t}\n}\n\n/**\n * Registers XmlHttpRequest object for global error processing.\n *\n * This means that if this XHR object returns 401 or session timeout errors,\n * the current page will automatically be reloaded.\n *\n * @param {XMLHttpRequest} xhr xhr request\n */\nexport const registerXHRForErrorProcessing = xhr => {\n\tconst loadCallback = () => {\n\t\tif (xhr.readyState !== 4) {\n\t\t\treturn\n\t\t}\n\n\t\tif ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) {\n\t\t\treturn\n\t\t}\n\n\t\t// fire jquery global ajax error handler\n\t\t$(document).trigger(new $.Event('ajaxError'), xhr)\n\t}\n\n\tconst errorCallback = () => {\n\t\t// fire jquery global ajax error handler\n\t\t$(document).trigger(new $.Event('ajaxError'), xhr)\n\t}\n\n\tif (xhr.addEventListener) {\n\t\txhr.addEventListener('load', loadCallback)\n\t\txhr.addEventListener('error', errorCallback)\n\t}\n\n}\n","/**\n * @copyright Bernhard Posselt 2014\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\nlet dynamicSlideToggleEnabled = false\n\nconst Apps = {\n\tenableDynamicSlideToggle() {\n\t\tdynamicSlideToggleEnabled = true\n\t},\n}\n\n/**\n * Shows the #app-sidebar and add .with-app-sidebar to subsequent siblings\n *\n * @param {object} [$el] sidebar element to show, defaults to $('#app-sidebar')\n */\nApps.showAppSidebar = function($el) {\n\tconst $appSidebar = $el || $('#app-sidebar')\n\t$appSidebar.removeClass('disappear').show()\n\t$('#app-content').trigger(new $.Event('appresized'))\n}\n\n/**\n * Shows the #app-sidebar and removes .with-app-sidebar from subsequent\n * siblings\n *\n * @param {object} [$el] sidebar element to hide, defaults to $('#app-sidebar')\n */\nApps.hideAppSidebar = function($el) {\n\tconst $appSidebar = $el || $('#app-sidebar')\n\t$appSidebar.hide().addClass('disappear')\n\t$('#app-content').trigger(new $.Event('appresized'))\n}\n\n/**\n * Provides a way to slide down a target area through a button and slide it\n * up if the user clicks somewhere else. Used for the news app settings and\n * add new field.\n *\n * Usage:\n * <button data-apps-slide-toggle=\".slide-area\">slide</button>\n * <div class=\".slide-area\" class=\"hidden\">I'm sliding up</div>\n */\nexport const registerAppsSlideToggle = () => {\n\tlet buttons = $('[data-apps-slide-toggle]')\n\n\tif (buttons.length === 0) {\n\t\t$('#app-navigation').addClass('without-app-settings')\n\t}\n\n\t$(document).click(function(event) {\n\n\t\tif (dynamicSlideToggleEnabled) {\n\t\t\tbuttons = $('[data-apps-slide-toggle]')\n\t\t}\n\n\t\tbuttons.each(function(index, button) {\n\n\t\t\tconst areaSelector = $(button).data('apps-slide-toggle')\n\t\t\tconst area = $(areaSelector)\n\n\t\t\t/**\n\t\t\t *\n\t\t\t */\n\t\t\tfunction hideArea() {\n\t\t\t\tarea.slideUp(OC.menuSpeed * 4, function() {\n\t\t\t\t\tarea.trigger(new $.Event('hide'))\n\t\t\t\t})\n\t\t\t\tarea.removeClass('opened')\n\t\t\t\t$(button).removeClass('opened')\n\t\t\t}\n\n\t\t\t/**\n\t\t\t *\n\t\t\t */\n\t\t\tfunction showArea() {\n\t\t\t\tarea.slideDown(OC.menuSpeed * 4, function() {\n\t\t\t\t\tarea.trigger(new $.Event('show'))\n\t\t\t\t})\n\t\t\t\tarea.addClass('opened')\n\t\t\t\t$(button).addClass('opened')\n\t\t\t\tconst input = $(areaSelector + ' [autofocus]')\n\t\t\t\tif (input.length === 1) {\n\t\t\t\t\tinput.focus()\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// do nothing if the area is animated\n\t\t\tif (!area.is(':animated')) {\n\n\t\t\t\t// button toggles the area\n\t\t\t\tif ($(button).is($(event.target).closest('[data-apps-slide-toggle]'))) {\n\t\t\t\t\tif (area.is(':visible')) {\n\t\t\t\t\t\thideArea()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tshowArea()\n\t\t\t\t\t}\n\n\t\t\t\t\t// all other areas that have not been clicked but are open\n\t\t\t\t\t// should be slid up\n\t\t\t\t} else {\n\t\t\t\t\tconst closest = $(event.target).closest(areaSelector)\n\t\t\t\t\tif (area.is(':visible') && closest[0] !== area[0]) {\n\t\t\t\t\t\thideArea()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t})\n}\n\nexport default Apps\n","/**\n * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nimport OC from '../OC/index'\n\n/**\n * @param {string} method 'post' or 'delete'\n * @param {string} endpoint endpoint\n * @param {object} [options] destructuring object\n * @param {object} [options.data] option data\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n */\nfunction call(method, endpoint, options) {\n\tif ((method === 'post' || method === 'delete') && OC.PasswordConfirmation.requiresPasswordConfirmation()) {\n\t\tOC.PasswordConfirmation.requirePasswordConfirmation(_.bind(call, this, method, endpoint, options))\n\t\treturn\n\t}\n\n\toptions = options || {}\n\t$.ajax({\n\t\ttype: method.toUpperCase(),\n\t\turl: generateOcsUrl('apps/provisioning_api/api/v1/config/apps') + endpoint,\n\t\tdata: options.data || {},\n\t\tsuccess: options.success,\n\t\terror: options.error,\n\t})\n}\n\n/**\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @since 11.0.0\n */\nexport function getApps(options) {\n\tcall('get', '', options)\n}\n\n/**\n * @param {string} app app id\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n * @since 11.0.0\n */\nexport function getKeys(app, options) {\n\tcall('get', '/' + app, options)\n}\n\n/**\n * @param {string} app app id\n * @param {string} key key\n * @param {string | Function} defaultValue default value\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n * @since 11.0.0\n */\nexport function getValue(app, key, defaultValue, options) {\n\toptions = options || {}\n\toptions.data = {\n\t\tdefaultValue,\n\t}\n\n\tcall('get', '/' + app + '/' + key, options)\n}\n\n/**\n * @param {string} app app id\n * @param {string} key key\n * @param {string} value value\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n * @since 11.0.0\n */\nexport function setValue(app, key, value, options) {\n\toptions = options || {}\n\toptions.data = {\n\t\tvalue,\n\t}\n\n\tcall('post', '/' + app + '/' + key, options)\n}\n\n/**\n * @param {string} app app id\n * @param {string} key key\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n * @since 11.0.0\n */\nexport function deleteKey(app, key, options) {\n\tcall('delete', '/' + app + '/' + key, options)\n}\n","/**\n * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Jörn Friedrich Dreyer <jfd@butonic.de>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\n import { getValue, setValue, getApps, getKeys, deleteKey } from '../OCP/appconfig'\n\nexport const appConfig = window.oc_appconfig || {}\n\n/**\n * @namespace\n * @deprecated 16.0.0 Use OCP.AppConfig instead\n */\nexport const AppConfig = {\n\t/**\n\t * @deprecated Use OCP.AppConfig.getValue() instead\n\t */\n\tgetValue: function(app, key, defaultValue, callback) {\n\t\tgetValue(app, key, defaultValue, {\n\t\t\tsuccess: callback\n\t\t})\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.setValue() instead\n\t */\n\tsetValue: function(app, key, value) {\n\t\tsetValue(app, key, value)\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.getApps() instead\n\t */\n\tgetApps: function(callback) {\n\t\tgetApps({\n\t\t\tsuccess: callback\n\t\t})\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.getKeys() instead\n\t */\n\tgetKeys: function(app, callback) {\n\t\tgetKeys(app, {\n\t\t\tsuccess: callback\n\t\t})\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.deleteKey() instead\n\t */\n\tdeleteKey: function(app, key) {\n\t\tdeleteKey(app, key)\n\t}\n\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst appswebroots = (window._oc_appswebroots !== undefined) ? window._oc_appswebroots : false\n\nexport default appswebroots\n","/**\n * Copyright (c) 2015\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport _ from 'underscore'\nimport { dav } from 'davclient.js'\n\nconst methodMap = {\n\tcreate: 'POST',\n\tupdate: 'PROPPATCH',\n\tpatch: 'PROPPATCH',\n\tdelete: 'DELETE',\n\tread: 'PROPFIND'\n}\n\n// Throw an error when a URL is needed, and none is supplied.\nfunction urlError() {\n\tthrow new Error('A \"url\" property or function must be specified')\n}\n\n/**\n * Convert a single propfind result to JSON\n *\n * @param {Object} result\n * @param {Object} davProperties properties mapping\n */\nfunction parsePropFindResult(result, davProperties) {\n\tif (_.isArray(result)) {\n\t\treturn _.map(result, function(subResult) {\n\t\t\treturn parsePropFindResult(subResult, davProperties)\n\t\t})\n\t}\n\tvar props = {\n\t\thref: result.href\n\t}\n\n\t_.each(result.propStat, function(propStat) {\n\t\tif (propStat.status !== 'HTTP/1.1 200 OK') {\n\t\t\treturn\n\t\t}\n\n\t\tfor (var key in propStat.properties) {\n\t\t\tvar propKey = key\n\t\t\tif (key in davProperties) {\n\t\t\t\tpropKey = davProperties[key]\n\t\t\t}\n\t\t\tprops[propKey] = propStat.properties[key]\n\t\t}\n\t})\n\n\tif (!props.id) {\n\t\t// parse id from href\n\t\tprops.id = parseIdFromLocation(props.href)\n\t}\n\n\treturn props\n}\n\n/**\n * Parse ID from location\n *\n * @param {string} url url\n * @returns {string} id\n */\nfunction parseIdFromLocation(url) {\n\tvar queryPos = url.indexOf('?')\n\tif (queryPos > 0) {\n\t\turl = url.substr(0, queryPos)\n\t}\n\n\tvar parts = url.split('/')\n\tvar result\n\tdo {\n\t\tresult = parts[parts.length - 1]\n\t\tparts.pop()\n\t\t// note: first result can be empty when there is a trailing slash,\n\t\t// so we take the part before that\n\t} while (!result && parts.length > 0)\n\n\treturn result\n}\n\nfunction isSuccessStatus(status) {\n\treturn status >= 200 && status <= 299\n}\n\nfunction convertModelAttributesToDavProperties(attrs, davProperties) {\n\tvar props = {}\n\tvar key\n\tfor (key in attrs) {\n\t\tvar changedProp = davProperties[key]\n\t\tvar value = attrs[key]\n\t\tif (!changedProp) {\n\t\t\tconsole.warn('No matching DAV property for property \"' + key)\n\t\t\tchangedProp = key\n\t\t}\n\t\tif (_.isBoolean(value) || _.isNumber(value)) {\n\t\t\t// convert to string\n\t\t\tvalue = '' + value\n\t\t}\n\t\tprops[changedProp] = value\n\t}\n\treturn props\n}\n\nfunction callPropFind(client, options, model, headers) {\n\treturn client.propFind(\n\t\toptions.url,\n\t\t_.values(options.davProperties) || [],\n\t\toptions.depth,\n\t\theaders\n\t).then(function(response) {\n\t\tif (isSuccessStatus(response.status)) {\n\t\t\tif (_.isFunction(options.success)) {\n\t\t\t\tvar propsMapping = _.invert(options.davProperties)\n\t\t\t\tvar results = parsePropFindResult(response.body, propsMapping)\n\t\t\t\tif (options.depth > 0) {\n\t\t\t\t\t// discard root entry\n\t\t\t\t\tresults.shift()\n\t\t\t\t}\n\n\t\t\t\toptions.success(results)\n\n\t\t\t}\n\t\t} else if (_.isFunction(options.error)) {\n\t\t\toptions.error(response)\n\t\t}\n\t})\n}\n\nfunction callPropPatch(client, options, model, headers) {\n\treturn client.propPatch(\n\t\toptions.url,\n\t\tconvertModelAttributesToDavProperties(model.changed, options.davProperties),\n\t\theaders\n\t).then(function(result) {\n\t\tif (isSuccessStatus(result.status)) {\n\t\t\tif (_.isFunction(options.success)) {\n\t\t\t\t// pass the object's own values because the server\n\t\t\t\t// does not return the updated model\n\t\t\t\toptions.success(model.toJSON())\n\t\t\t}\n\t\t} else if (_.isFunction(options.error)) {\n\t\t\toptions.error(result)\n\t\t}\n\t})\n\n}\n\nfunction callMkCol(client, options, model, headers) {\n\t// call MKCOL without data, followed by PROPPATCH\n\treturn client.request(\n\t\toptions.type,\n\t\toptions.url,\n\t\theaders,\n\t\tnull\n\t).then(function(result) {\n\t\tif (!isSuccessStatus(result.status)) {\n\t\t\tif (_.isFunction(options.error)) {\n\t\t\t\toptions.error(result)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tcallPropPatch(client, options, model, headers)\n\t})\n}\n\nfunction callMethod(client, options, model, headers) {\n\theaders['Content-Type'] = 'application/json'\n\treturn client.request(\n\t\toptions.type,\n\t\toptions.url,\n\t\theaders,\n\t\toptions.data\n\t).then(function(result) {\n\t\tif (!isSuccessStatus(result.status)) {\n\t\t\tif (_.isFunction(options.error)) {\n\t\t\t\toptions.error(result)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tif (_.isFunction(options.success)) {\n\t\t\tif (options.type === 'PUT' || options.type === 'POST' || options.type === 'MKCOL') {\n\t\t\t\t// pass the object's own values because the server\n\t\t\t\t// does not return anything\n\t\t\t\tvar responseJson = result.body || model.toJSON()\n\t\t\t\tvar locationHeader = result.xhr.getResponseHeader('Content-Location')\n\t\t\t\tif (options.type === 'POST' && locationHeader) {\n\t\t\t\t\tresponseJson.id = parseIdFromLocation(locationHeader)\n\t\t\t\t}\n\t\t\t\toptions.success(responseJson)\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// if multi-status, parse\n\t\t\tif (result.status === 207) {\n\t\t\t\tvar propsMapping = _.invert(options.davProperties)\n\t\t\t\toptions.success(parsePropFindResult(result.body, propsMapping))\n\t\t\t} else {\n\t\t\t\toptions.success(result.body)\n\t\t\t}\n\t\t}\n\t})\n}\n\nexport const davCall = (options, model) => {\n\tvar client = new dav.Client({\n\t\tbaseUrl: options.url,\n\t\txmlNamespaces: _.extend({\n\t\t\t'DAV:': 'd',\n\t\t\t'http://owncloud.org/ns': 'oc'\n\t\t}, options.xmlNamespaces || {})\n\t})\n\tclient.resolveUrl = function() {\n\t\treturn options.url\n\t}\n\tvar headers = _.extend({\n\t\t'X-Requested-With': 'XMLHttpRequest',\n\t\t'requesttoken': OC.requestToken\n\t}, options.headers)\n\tif (options.type === 'PROPFIND') {\n\t\treturn callPropFind(client, options, model, headers)\n\t} else if (options.type === 'PROPPATCH') {\n\t\treturn callPropPatch(client, options, model, headers)\n\t} else if (options.type === 'MKCOL') {\n\t\treturn callMkCol(client, options, model, headers)\n\t} else {\n\t\treturn callMethod(client, options, model, headers)\n\t}\n}\n\n/**\n * DAV transport\n */\nexport const davSync = Backbone => (method, model, options) => {\n\tvar params = { type: methodMap[method] || method }\n\tvar isCollection = (model instanceof Backbone.Collection)\n\n\tif (method === 'update') {\n\t\t// if a model has an inner collection, it must define an\n\t\t// attribute \"hasInnerCollection\" that evaluates to true\n\t\tif (model.hasInnerCollection) {\n\t\t\t// if the model itself is a Webdav collection, use MKCOL\n\t\t\tparams.type = 'MKCOL'\n\t\t} else if (model.usePUT || (model.collection && model.collection.usePUT)) {\n\t\t\t// use PUT instead of PROPPATCH\n\t\t\tparams.type = 'PUT'\n\t\t}\n\t}\n\n\t// Ensure that we have a URL.\n\tif (!options.url) {\n\t\tparams.url = _.result(model, 'url') || urlError()\n\t}\n\n\t// Ensure that we have the appropriate request data.\n\tif (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {\n\t\tparams.data = JSON.stringify(options.attrs || model.toJSON(options))\n\t}\n\n\t// Don't process data on a non-GET request.\n\tif (params.type !== 'PROPFIND') {\n\t\tparams.processData = false\n\t}\n\n\tif (params.type === 'PROPFIND' || params.type === 'PROPPATCH') {\n\t\tvar davProperties = model.davProperties\n\t\tif (!davProperties && model.model) {\n\t\t\t// use dav properties from model in case of collection\n\t\t\tdavProperties = model.model.prototype.davProperties\n\t\t}\n\t\tif (davProperties) {\n\t\t\tif (_.isFunction(davProperties)) {\n\t\t\t\tparams.davProperties = davProperties.call(model)\n\t\t\t} else {\n\t\t\t\tparams.davProperties = davProperties\n\t\t\t}\n\t\t}\n\n\t\tparams.davProperties = _.extend(params.davProperties || {}, options.davProperties)\n\n\t\tif (_.isUndefined(options.depth)) {\n\t\t\tif (isCollection) {\n\t\t\t\toptions.depth = 1\n\t\t\t} else {\n\t\t\t\toptions.depth = 0\n\t\t\t}\n\t\t}\n\t}\n\n\t// Pass along `textStatus` and `errorThrown` from jQuery.\n\tvar error = options.error\n\toptions.error = function(xhr, textStatus, errorThrown) {\n\t\toptions.textStatus = textStatus\n\t\toptions.errorThrown = errorThrown\n\t\tif (error) {\n\t\t\terror.call(options.context, xhr, textStatus, errorThrown)\n\t\t}\n\t}\n\n\t// Make the request, allowing the user to override any Ajax options.\n\tvar xhr = options.xhr = Backbone.davCall(_.extend(params, options), model)\n\tmodel.trigger('request', model, xhr, options)\n\treturn xhr\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport VendorBackbone from 'backbone'\nimport { davCall, davSync } from './backbone-webdav'\n\nconst Backbone = VendorBackbone.noConflict()\n\n// Patch Backbone for DAV\nObject.assign(Backbone, {\n\tdavCall,\n\tdavSync: davSync(Backbone),\n})\n\nexport default Backbone\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst config = window._oc_config || {}\n\nexport default config\n","/**\n * @copyright 2017 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport { Collection, Model, View } from 'backbone'\n\nimport OC from './index'\n\n/**\n * @class Contact\n */\nconst Contact = Model.extend({\n\tdefaults: {\n\t\tfullName: '',\n\t\tlastMessage: '',\n\t\tactions: [],\n\t\thasOneAction: false,\n\t\thasTwoActions: false,\n\t\thasManyActions: false\n\t},\n\n\t/**\n\t * @returns {undefined}\n\t */\n\tinitialize: function() {\n\t\t// Add needed property for easier template rendering\n\t\tif (this.get('actions').length === 0) {\n\t\t\tthis.set('hasOneAction', true)\n\t\t} else if (this.get('actions').length === 1) {\n\t\t\tthis.set('hasTwoActions', true)\n\t\t\tthis.set('secondAction', this.get('actions')[0])\n\t\t} else {\n\t\t\tthis.set('hasManyActions', true)\n\t\t}\n\t}\n})\n\n/**\n * @class ContactCollection\n * @private\n */\nconst ContactCollection = Collection.extend({\n\tmodel: Contact\n})\n\n/**\n * @class ContactsListView\n * @private\n */\nconst ContactsListView = View.extend({\n\n\t/** @type {ContactCollection} */\n\t_collection: undefined,\n\n\t/** @type {array} */\n\t_subViews: [],\n\n\t/**\n\t * @param {object} options\n\t * @returns {undefined}\n\t */\n\tinitialize: function(options) {\n\t\tthis._collection = options.collection\n\t},\n\n\t/**\n\t * @returns {self}\n\t */\n\trender: function() {\n\t\tvar self = this\n\t\tself.$el.html('')\n\t\tself._subViews = []\n\n\t\tself._collection.forEach(function(contact) {\n\t\t\tvar item = new ContactsListItemView({\n\t\t\t\tmodel: contact\n\t\t\t})\n\t\t\titem.render()\n\t\t\tself.$el.append(item.$el)\n\t\t\titem.on('toggle:actionmenu', self._onChildActionMenuToggle, self)\n\t\t\tself._subViews.push(item)\n\t\t})\n\n\t\treturn self\n\t},\n\n\t/**\n\t * Event callback to propagate opening (another) entry's action menu\n\t *\n\t * @param {type} $src\n\t * @returns {undefined}\n\t */\n\t_onChildActionMenuToggle: function($src) {\n\t\tthis._subViews.forEach(function(view) {\n\t\t\tview.trigger('parent:toggle:actionmenu', $src)\n\t\t})\n\t}\n})\n\n/**\n * @class ContactsListItemView\n * @private\n */\nconst ContactsListItemView = View.extend({\n\n\t/** @type {string} */\n\tclassName: 'contact',\n\n\t/** @type {undefined|function} */\n\t_template: undefined,\n\n\t/** @type {Contact} */\n\t_model: undefined,\n\n\t/** @type {boolean} */\n\t_actionMenuShown: false,\n\n\tevents: {\n\t\t'click .icon-more': '_onToggleActionsMenu'\n\t},\n\n\tcontactTemplate: require('./contactsmenu/contact.handlebars'),\n\n\t/**\n\t * @param {object} data\n\t * @returns {undefined}\n\t */\n\ttemplate: function(data) {\n\t\treturn this.contactTemplate(data)\n\t},\n\n\t/**\n\t * @param {object} options\n\t * @returns {undefined}\n\t */\n\tinitialize: function(options) {\n\t\tthis._model = options.model\n\t\tthis.on('parent:toggle:actionmenu', this._onOtherActionMenuOpened, this)\n\t},\n\n\t/**\n\t * @returns {self}\n\t */\n\trender: function() {\n\t\tthis.$el.html(this.template({\n\t\t\tcontact: this._model.toJSON()\n\t\t}))\n\t\tthis.delegateEvents()\n\n\t\t// Show placeholder if no avatar is available (avatar is rendered as img, not div)\n\t\tthis.$('div.avatar').imageplaceholder(this._model.get('fullName'))\n\n\t\t// Show tooltip for top action\n\t\tthis.$('.top-action').tooltip({ placement: 'left' })\n\t\t// Show tooltip for second action\n\t\tthis.$('.second-action').tooltip({ placement: 'left' })\n\n\t\treturn this\n\t},\n\n\t/**\n\t * Toggle the visibility of the action popover menu\n\t *\n\t * @private\n\t * @returns {undefined}\n\t */\n\t_onToggleActionsMenu: function() {\n\t\tthis._actionMenuShown = !this._actionMenuShown\n\t\tif (this._actionMenuShown) {\n\t\t\tthis.$('.menu').show()\n\t\t} else {\n\t\t\tthis.$('.menu').hide()\n\t\t}\n\t\tthis.trigger('toggle:actionmenu', this.$el)\n\t},\n\n\t/**\n\t * @private\n\t * @argument {jQuery} $src\n\t * @returns {undefined}\n\t */\n\t_onOtherActionMenuOpened: function($src) {\n\t\tif (this.$el.is($src)) {\n\t\t\t// Ignore\n\t\t\treturn\n\t\t}\n\t\tthis._actionMenuShown = false\n\t\tthis.$('.menu').hide()\n\t}\n})\n\n/**\n * @class ContactsMenuView\n * @private\n */\nconst ContactsMenuView = View.extend({\n\n\t/** @type {undefined|function} */\n\t_loadingTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_errorTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_contentTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_contactsTemplate: undefined,\n\n\t/** @type {undefined|ContactCollection} */\n\t_contacts: undefined,\n\n\t/** @type {string} */\n\t_searchTerm: '',\n\n\tevents: {\n\t\t'input #contactsmenu-search': '_onSearch'\n\t},\n\n\ttemplates: {\n\t\tloading: require('./contactsmenu/loading.handlebars'),\n\t\terror: require('./contactsmenu/error.handlebars'),\n\t\tmenu: require('./contactsmenu/menu.handlebars'),\n\t\tlist: require('./contactsmenu/list.handlebars')\n\t},\n\n\t/**\n\t * @returns {undefined}\n\t */\n\t_onSearch: _.debounce(function(e) {\n\t\tvar searchTerm = this.$('#contactsmenu-search').val()\n\t\t// IE11 triggers an 'input' event after the view has been rendered\n\t\t// resulting in an endless loading loop. To prevent this, we remember\n\t\t// the last search term to savely ignore some events\n\t\t// See https://github.com/nextcloud/server/issues/5281\n\t\tif (searchTerm !== this._searchTerm) {\n\t\t\tthis.trigger('search', this.$('#contactsmenu-search').val())\n\t\t\tthis._searchTerm = searchTerm\n\t\t}\n\t}, 700),\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tloadingTemplate: function(data) {\n\t\treturn this.templates.loading(data)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\terrorTemplate: function(data) {\n\t\treturn this.templates.error(\n\t\t\t_.extend({\n\t\t\t\tcouldNotLoadText: t('core', 'Could not load your contacts')\n\t\t\t}, data)\n\t\t)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tcontentTemplate: function(data) {\n\t\treturn this.templates.menu(\n\t\t\t_.extend({\n\t\t\t\tsearchContactsText: t('core', 'Search contacts …')\n\t\t\t}, data)\n\t\t)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tcontactsTemplate: function(data) {\n\t\treturn this.templates.list(\n\t\t\t_.extend({\n\t\t\t\tnoContactsFoundText: t('core', 'No contacts found'),\n\t\t\t\tshowAllContactsText: t('core', 'Show all contacts …'),\n\t\t\t\tcontactsAppMgmtText: t('core', 'Install the Contacts app')\n\t\t\t}, data)\n\t\t)\n\t},\n\n\t/**\n\t * @param {object} options\n\t * @returns {undefined}\n\t */\n\tinitialize: function(options) {\n\t\tthis.options = options\n\t},\n\n\t/**\n\t * @param {string} text\n\t * @returns {undefined}\n\t */\n\tshowLoading: function(text) {\n\t\tthis.render()\n\t\tthis._contacts = undefined\n\t\tthis.$('.content').html(this.loadingTemplate({\n\t\t\tloadingText: text\n\t\t}))\n\t},\n\n\t/**\n\t * @returns {undefined}\n\t */\n\tshowError: function() {\n\t\tthis.render()\n\t\tthis._contacts = undefined\n\t\tthis.$('.content').html(this.errorTemplate())\n\t},\n\n\t/**\n\t * @param {object} viewData\n\t * @param {string} searchTerm\n\t * @returns {undefined}\n\t */\n\tshowContacts: function(viewData, searchTerm) {\n\t\tthis._contacts = viewData.contacts\n\t\tthis.render({\n\t\t\tcontacts: viewData.contacts\n\t\t})\n\n\t\tvar list = new ContactsListView({\n\t\t\tcollection: viewData.contacts\n\t\t})\n\t\tlist.render()\n\t\tthis.$('.content').html(this.contactsTemplate({\n\t\t\tcontacts: viewData.contacts,\n\t\t\tsearchTerm: searchTerm,\n\t\t\tcontactsAppEnabled: viewData.contactsAppEnabled,\n\t\t\tcontactsAppURL: OC.generateUrl('/apps/contacts'),\n\t\t\tcanInstallApp: OC.isUserAdmin(),\n\t\t\tcontactsAppMgmtURL: OC.generateUrl('/settings/apps/social/contacts')\n\t\t}))\n\t\tthis.$('#contactsmenu-contacts').html(list.$el)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {self}\n\t */\n\trender: function(data) {\n\t\tvar searchVal = this.$('#contactsmenu-search').val()\n\t\tthis.$el.html(this.contentTemplate(data))\n\n\t\t// Focus search\n\t\tthis.$('#contactsmenu-search').val(searchVal)\n\t\tthis.$('#contactsmenu-search').focus()\n\t\treturn this\n\t}\n\n})\n\n/**\n * @param {Object} options\n * @param {string} options.el\n * @class ContactsMenu\n * @memberOf OC\n */\nconst ContactsMenu = function(options) {\n\tthis.initialize(options)\n}\n\nContactsMenu.prototype = {\n\t/** @type {string} */\n\t$el: undefined,\n\n\t/** @type {ContactsMenuView} */\n\t_view: undefined,\n\n\t/** @type {Promise} */\n\t_contactsPromise: undefined,\n\n\t/**\n\t * @param {Object} options\n\t * @param {string} options.el - the selector of the element to render the menu in\n\t * @returns {undefined}\n\t */\n\tinitialize: function(options) {\n\t\tthis.$el = $(options.el)\n\n\t\tthis._view = new ContactsMenuView({\n\t\t\tel: this.$el,\n\t\t})\n\n\t\tthis._view.on('search', function(searchTerm) {\n\t\t\tthis.loadContacts(searchTerm)\n\t\t}, this)\n\t},\n\n\t/**\n\t * @private\n\t * @param {string|undefined} searchTerm\n\t * @returns {Promise}\n\t */\n\t_getContacts: function(searchTerm) {\n\t\tvar url = OC.generateUrl('/contactsmenu/contacts')\n\t\treturn Promise.resolve($.ajax(url, {\n\t\t\tmethod: 'POST',\n\t\t\tdata: {\n\t\t\t\tfilter: searchTerm\n\t\t\t}\n\t\t}))\n\t},\n\n\t/**\n\t * @param {string|undefined} searchTerm\n\t * @returns {undefined}\n\t */\n\tloadContacts: function(searchTerm) {\n\t\tvar self = this\n\n\t\tif (!self._contactsPromise) {\n\t\t\tself._contactsPromise = self._getContacts(searchTerm)\n\t\t}\n\n\t\tif (_.isUndefined(searchTerm) || searchTerm === '') {\n\t\t\tself._view.showLoading(t('core', 'Loading your contacts …'))\n\t\t} else {\n\t\t\tself._view.showLoading(t('core', 'Looking for {term} …', {\n\t\t\t\tterm: searchTerm\n\t\t\t}))\n\t\t}\n\t\treturn self._contactsPromise.then(function(data) {\n\t\t\t// Convert contact entries to Backbone collection\n\t\t\tdata.contacts = new ContactCollection(data.contacts)\n\n\t\t\tself._view.showContacts(data, searchTerm)\n\t\t}, function(e) {\n\t\t\tself._view.showError()\n\t\t\tconsole.error('There was an error loading your contacts', e)\n\t\t}).then(function() {\n\t\t\t// Delete promise, so that contacts are fetched again when the\n\t\t\t// menu is opened the next time.\n\t\t\tdelete self._contactsPromise\n\t\t}).catch(console.error.bind(this))\n\t}\n}\n\nexport default ContactsMenu\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Joas Schilling <coding@schilljs.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst rawUid = document\n\t.getElementsByTagName('head')[0]\n\t.getAttribute('data-user')\nconst displayName = document\n\t.getElementsByTagName('head')[0]\n\t.getAttribute('data-user-displayname')\n\nexport const currentUser = rawUid !== undefined ? rawUid : false\n\nexport const getCurrentUser = () => {\n\treturn {\n\t\tuid: currentUser,\n\t\tdisplayName,\n\t}\n}\n","/**\n * @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class Search {\n\n\t/**\n\t * @deprecated 20.0.0, will be removed in Nextcloud 22\n\t */\n\tconstructor() {\n\t\tconsole.warn('OCA.Search is deprecated. Please use the unified search API instead')\n\t}\n\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Search from './search'\n\n/**\n * Namespace for apps\n *\n * @namespace OCA\n */\nexport default {\n\t/**\n\t * @deprecated 20.0.0, will be removed in Nextcloud 22\n\t */\n\tSearch,\n}\n","/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/**\n * Return whether the DOM event is an accessible mouse or keyboard element activation\n *\n * @param {Event} event DOM event\n *\n * @return {boolean}\n */\nexport const isA11yActivation = (event) => {\n\tif (event.type === 'click') {\n\t\treturn true\n\t}\n\tif (event.type === 'keydown' && event.key === 'Enter') {\n\t\treturn true\n\t}\n\treturn false\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author Bartek Przybylski <bart.p.pl@gmail.com>\n * @author Christopher Schäpers <kondou@ts.unde.re>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author Daniel Kesselberg <mail@danielkesselberg.de>\n * @author Florian Schunk <florian.schunk@rwth-aachen.de>\n * @author Gary Kim <gary@garykim.dev>\n * @author Hendrik Leppelsack <hendrik@leppelsack.de>\n * @author Jan-Christoph Borchardt <hey@jancborchardt.net>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Jörn Friedrich Dreyer <jfd@butonic.de>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Loïc Hermann <loic.hermann@sciam.fr>\n * @author Morris Jobke <hey@morrisjobke.de>\n * @author Olivier Paroz <github@oparoz.com>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Sujith Haridasan <Sujith_Haridasan@mentor.com>\n * @author Thomas Citharel <nextcloud@tcit.fr>\n * @author Thomas Müller <thomas.mueller@tmit.eu>\n * @author Thomas Tanghus <thomas@tanghus.net>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport _ from 'underscore'\nimport $ from 'jquery'\n\nimport OC from './index'\nimport OCA from '../OCA/index'\nimport { isA11yActivation } from '../Util/a11y'\n\n/**\n * this class to ease the usage of jquery dialogs\n */\nconst Dialogs = {\n\t// dialog button types\n\tYES_NO_BUTTONS: 70,\n\tOK_BUTTONS: 71,\n\n\tFILEPICKER_TYPE_CHOOSE: 1,\n\tFILEPICKER_TYPE_MOVE: 2,\n\tFILEPICKER_TYPE_COPY: 3,\n\tFILEPICKER_TYPE_COPY_MOVE: 4,\n\tFILEPICKER_TYPE_CUSTOM: 5,\n\n\t// used to name each dialog\n\tdialogsCounter: 0,\n\n\t/**\n\t * displays alert dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK\n\t * @param {boolean} [modal] make the dialog modal\n\t */\n\talert: function(text, title, callback, modal) {\n\t\tthis.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'alert',\n\t\t\tDialogs.OK_BUTTON,\n\t\t\tcallback,\n\t\t\tmodal\n\t\t)\n\t},\n\t/**\n\t * displays info dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK\n\t * @param {boolean} [modal] make the dialog modal\n\t */\n\tinfo: function(text, title, callback, modal) {\n\t\tthis.message(text, title, 'info', Dialogs.OK_BUTTON, callback, modal)\n\t},\n\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirm: function(text, title, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'notice',\n\t\t\tDialogs.YES_NO_BUTTONS,\n\t\t\tcallback,\n\t\t\tmodal\n\t\t)\n\t},\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {(number|{type: number, confirm: string, cancel: string, confirmClasses: string})} buttons text content of buttons\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirmDestructive: function(text, title, buttons, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'none',\n\t\t\tbuttons,\n\t\t\tcallback,\n\t\t\tmodal === undefined ? true : modal\n\t\t)\n\t},\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirmHtml: function(text, title, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'notice',\n\t\t\tDialogs.YES_NO_BUTTONS,\n\t\t\tcallback,\n\t\t\tmodal,\n\t\t\ttrue\n\t\t)\n\t},\n\t/**\n\t * displays prompt dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @param {string} name name of the input field\n\t * @param {boolean} password whether the input should be a password input\n\t * @returns {Promise}\n\t */\n\tprompt: function(text, title, callback, modal, name, password) {\n\t\treturn $.when(this._getMessageTemplate()).then(function($tmpl) {\n\t\t\tvar dialogName = 'oc-dialog-' + Dialogs.dialogsCounter + '-content'\n\t\t\tvar dialogId = '#' + dialogName\n\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\tmessage: text,\n\t\t\t\ttype: 'notice'\n\t\t\t})\n\t\t\tvar input = $('<input/>')\n\t\t\tinput.attr('type', password ? 'password' : 'text').attr('id', dialogName + '-input').attr('placeholder', name)\n\t\t\tvar label = $('<label/>').attr('for', dialogName + '-input').text(name + ': ')\n\t\t\t$dlg.append(label)\n\t\t\t$dlg.append(input)\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false\n\t\t\t}\n\t\t\t$('body').append($dlg)\n\n\t\t\t// wrap callback in _.once():\n\t\t\t// only call callback once and not twice (button handler and close\n\t\t\t// event) but call it for the close event, if ESC or the x is hit\n\t\t\tif (callback !== undefined) {\n\t\t\t\tcallback = _.once(callback)\n\t\t\t}\n\n\t\t\tvar buttonlist = [{\n\t\t\t\ttext: t('core', 'No'),\n\t\t\t\tclick: function() {\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(false, input.val())\n\t\t\t\t\t}\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\ttext: t('core', 'Yes'),\n\t\t\t\tclick: function() {\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(true, input.val())\n\t\t\t\t\t}\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t},\n\t\t\t\tdefaultButton: true\n\t\t\t}]\n\n\t\t\t$(dialogId).ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist,\n\t\t\t\tclose: function() {\n\t\t\t\t\t// callback is already fired if Yes/No is clicked directly\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(false, input.val())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\tinput.focus()\n\t\t\tDialogs.dialogsCounter++\n\t\t})\n\t},\n\t/**\n\t * show a file picker to pick a file from\n\t *\n\t * In order to pick several types of mime types they need to be passed as an\n\t * array of strings.\n\t *\n\t * When no mime type filter is given only files can be selected. In order to\n\t * be able to select both files and folders \"['*', 'httpd/unix-directory']\"\n\t * should be used instead.\n\t *\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses Choose\n\t * @param {boolean} [multiselect] whether it should be possible to select multiple files\n\t * @param {string[]} [mimetypeFilter] mimetype to filter by - directories will always be included\n\t * @param {boolean} [modal] make the dialog modal\n\t * @param {string} [type] Type of file picker : Choose, copy, move, copy and move\n\t * @param {string} [path] path to the folder that the the file can be picket from\n\t * @param {Object} [options] additonal options that need to be set\n\t * @param {Function} [options.filter] filter function for advanced filtering\n\t */\n\tfilepicker: function(title, callback, multiselect, mimetypeFilter, modal, type, path, options) {\n\t\tvar self = this\n\n\t\tthis.filepicker.sortField = 'name'\n\t\tthis.filepicker.sortOrder = 'asc'\n\t\t// avoid opening the picker twice\n\t\tif (this.filepicker.loading) {\n\t\t\treturn\n\t\t}\n\n\t\tif (type === undefined) {\n\t\t\ttype = this.FILEPICKER_TYPE_CHOOSE\n\t\t}\n\n\t\tvar emptyText = t('core', 'No files in here')\n\t\tvar newText = t('files', 'New folder')\n\t\tif (type === this.FILEPICKER_TYPE_COPY || type === this.FILEPICKER_TYPE_MOVE || type === this.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\temptyText = t('core', 'No more subfolders in here')\n\t\t}\n\n\t\tthis.filepicker.loading = true\n\t\tthis.filepicker.filesClient = (OCA.Sharing && OCA.Sharing.PublicApp && OCA.Sharing.PublicApp.fileList) ? OCA.Sharing.PublicApp.fileList.filesClient : OC.Files.getClient()\n\n\t\tthis.filelist = null\n\t\tpath = path || ''\n\t\toptions = Object.assign({\n\t\t\tallowDirectoryChooser: false\n\t\t}, options)\n\n\t\t$.when(this._getFilePickerTemplate()).then(function($tmpl) {\n\t\t\tself.filepicker.loading = false\n\t\t\tvar dialogName = 'oc-dialog-filepicker-content'\n\t\t\tif (self.$filePicker) {\n\t\t\t\tself.$filePicker.ocdialog('close')\n\t\t\t}\n\n\t\t\tif (mimetypeFilter === undefined || mimetypeFilter === null) {\n\t\t\t\tmimetypeFilter = []\n\t\t\t}\n\t\t\tif (typeof (mimetypeFilter) === 'string') {\n\t\t\t\tmimetypeFilter = [mimetypeFilter]\n\t\t\t}\n\n\t\t\tself.$filePicker = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\temptytext: emptyText,\n\t\t\t\tnewtext: newText,\n\t\t\t\tnameCol: t('core', 'Name'),\n\t\t\t\tsizeCol: t('core', 'Size'),\n\t\t\t\tmodifiedCol: t('core', 'Modified')\n\t\t\t}).data('path', path).data('multiselect', multiselect).data('mimetype', mimetypeFilter).data('allowDirectoryChooser', options.allowDirectoryChooser)\n\t\t\tif (typeof(options.filter) === 'function') {\n\t\t\t\tself.$filePicker.data('filter', options.filter)\n\t\t\t}\n\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false\n\t\t\t}\n\t\t\tif (multiselect === undefined) {\n\t\t\t\tmultiselect = false\n\t\t\t}\n\n\t\t\t$('body').prepend(self.$filePicker)\n\n\t\t\tself.$showGridView = $('button#picker-showgridview')\n\t\t\tself.$showGridView.on('click keydown', function(event) {\n\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\tself._onGridviewChange()\n\t\t\t\t}\n\t\t\t})\n\t\t\tself._getGridSettings()\n\n\t\t\tvar newButton = self.$filePicker.find('.actions.creatable .button-add')\n\t\t\tif (type === self.FILEPICKER_TYPE_CHOOSE && !options.allowDirectoryChooser) {\n\t\t\t\tself.$filePicker.find('.actions.creatable').hide()\n\t\t\t}\n\t\t\tnewButton.on('focus', function() {\n\t\t\t\tself.$filePicker.ocdialog('setEnterCallback', function(event) {\n\t\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tnewButton.click()\n\t\t\t\t})\n\t\t\t})\n\t\t\tnewButton.on('blur', function() {\n\t\t\t\tself.$filePicker.ocdialog('unsetEnterCallback')\n\t\t\t})\n\n\t\t\tOC.registerMenu(newButton, self.$filePicker.find('.menu'), function() {\n\t\t\t\t$input.tooltip('hide')\n\t\t\t\t$input.focus()\n\t\t\t\tself.$filePicker.ocdialog('setEnterCallback', function(event) {\n\t\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tself.$filePicker.submit()\n\t\t\t\t})\n\t\t\t\tvar newName = $input.val()\n\t\t\t\tvar lastPos = newName.lastIndexOf('.')\n\t\t\t\tif (lastPos === -1) {\n\t\t\t\t\tlastPos = newName.length\n\t\t\t\t}\n\t\t\t\t$input.selectRange(0, lastPos)\n\t\t\t})\n\t\t\tvar $form = self.$filePicker.find('.filenameform')\n\t\t\tvar $input = $form.find('input[type=\\'text\\']')\n\t\t\tvar $submit = $form.find('input[type=\\'submit\\']')\n\t\t\t$input.on('keydown', function(event) {\n\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t$form.submit()\n\t\t\t\t}\n\t\t\t})\n\t\t\t$submit.on('click', function(event) {\n\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\tevent.preventDefault()\n\t\t\t\t$form.submit()\n\t\t\t})\n\n\t\t\t/**\n\t\t\t * Checks whether the given file name is valid.\n\t\t\t *\n\t\t\t * @param name file name to check\n\t\t\t * @return true if the file name is valid.\n\t\t\t * @throws a string exception with an error message if\n\t\t\t * the file name is not valid\n\t\t\t *\n\t\t\t * NOTE: This function is duplicated in the files app:\n\t\t\t * https://github.com/nextcloud/server/blob/b9bc2417e7a8dc81feb0abe20359bedaf864f790/apps/files/js/files.js#L127-L148\n\t\t\t */\n\t\t\tvar isFileNameValid = function (name) {\n\t\t\t\tvar trimmedName = name.trim();\n\t\t\t\tif (trimmedName === '.' || trimmedName === '..')\n\t\t\t\t{\n\t\t\t\t\tthrow t('files', '\"{name}\" is an invalid file name.', {name: name})\n\t\t\t\t} else if (trimmedName.length === 0) {\n\t\t\t\t\tthrow t('files', 'File name cannot be empty.')\n\t\t\t\t} else if (trimmedName.indexOf('/') !== -1) {\n\t\t\t\t\tthrow t('files', '\"/\" is not allowed inside a file name.')\n\t\t\t\t} else if (!!(trimmedName.match(OC.config.blacklist_files_regex))) {\n\t\t\t\t\tthrow t('files', '\"{name}\" is not an allowed filetype', {name: name})\n\t\t\t\t}\n\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\tvar checkInput = function() {\n\t\t\t\tvar filename = $input.val()\n\t\t\t\ttry {\n\t\t\t\t\tif (!isFileNameValid(filename)) {\n\t\t\t\t\t\t// isFileNameValid(filename) throws an exception itself\n\t\t\t\t\t} else if (self.filelist.find(function(file) {\n\t\t\t\t\t\treturn file.name === this\n\t\t\t\t\t}, filename)) {\n\t\t\t\t\t\tthrow t('files', '{newName} already exists', { newName: filename }, undefined, {\n\t\t\t\t\t\t\tescape: false\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn true\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\t$input.attr('title', error)\n\t\t\t\t\t$input.tooltip({\n\t\t\t\t\t\tplacement: 'right',\n\t\t\t\t\t\ttrigger: 'manual',\n\t\t\t\t\t\t'container': '.newFolderMenu'\n\t\t\t\t\t})\n\t\t\t\t\t$input.tooltip('_fixTitle')\n\t\t\t\t\t$input.tooltip('show')\n\t\t\t\t\t$input.addClass('error')\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\t$form.on('submit', function(event) {\n\t\t\t\tevent.stopPropagation()\n\t\t\t\tevent.preventDefault()\n\n\t\t\t\tif (checkInput()) {\n\t\t\t\t\tvar newname = $input.val()\n\t\t\t\t\tself.filepicker.filesClient.createDirectory(self.$filePicker.data('path') + \"/\" + newname).always(function (status) {\n\t\t\t\t\t\tself._fillFilePicker(self.$filePicker.data('path') + \"/\" + newname, type)\n\t\t\t\t\t})\n\t\t\t\t\tOC.hideMenus()\n\t\t\t\t\tself.$filePicker.ocdialog('unsetEnterCallback')\n\t\t\t\t\tself.$filePicker.click()\n\t\t\t\t\t$input.val(newText)\n\t\t\t\t}\n\t\t\t})\n\t\t\t$input.on('input', function(event) {\n\t\t\t\t$input.tooltip('hide')\n\t\t\t})\n\n\t\t\tself.$filePicker.ready(function() {\n\t\t\t\tself.$fileListHeader = self.$filePicker.find('.filelist thead tr')\n\t\t\t\tself.$filelist = self.$filePicker.find('.filelist tbody')\n\t\t\t\tself.$filelistContainer = self.$filePicker.find('.filelist-container')\n\t\t\t\tself.$dirTree = self.$filePicker.find('.dirtree')\n\t\t\t\tself.$dirTree.on('click keydown', 'div:not(:last-child)', self, function(event) {\n\t\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\t\tself._handleTreeListSelect(event, type)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tself.$filelist.on('click keydown', 'tr', function(event) {\n\t\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\t\tself._handlePickerClick(event, $(this), type)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tself.$fileListHeader.on('click keydown', 'a', function(event) {\n\t\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\t\tvar dir = self.$filePicker.data('path')\n\t\t\t\t\t\tself.filepicker.sortField = $(event.currentTarget).data('sort')\n\t\t\t\t\t\tself.filepicker.sortOrder = self.filepicker.sortOrder === 'asc' ? 'desc' : 'asc'\n\t\t\t\t\t\tself._fillFilePicker(dir, type)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tself._fillFilePicker(path, type)\n\t\t\t})\n\n\t\t\t// build buttons\n\t\t\tvar functionToCall = function(returnType) {\n\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\tvar datapath\n\t\t\t\t\tif (multiselect === true) {\n\t\t\t\t\t\tdatapath = []\n\t\t\t\t\t\tself.$filelist.find('tr.filepicker_element_selected').each(function(index, element) {\n\t\t\t\t\t\t\tdatapath.push(self.$filePicker.data('path') + '/' + $(element).data('entryname'))\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdatapath = self.$filePicker.data('path')\n\t\t\t\t\t\tvar selectedName = self.$filelist.find('tr.filepicker_element_selected').data('entryname')\n\t\t\t\t\t\tif (selectedName) {\n\t\t\t\t\t\t\tdatapath += '/' + selectedName\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcallback(datapath, returnType)\n\t\t\t\t\tself.$filePicker.ocdialog('close')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar chooseCallback = function() {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_CHOOSE)\n\t\t\t}\n\n\t\t\tvar copyCallback = function() {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_COPY)\n\t\t\t}\n\n\t\t\tvar moveCallback = function() {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_MOVE)\n\t\t\t}\n\n\t\t\tvar buttonlist = []\n\t\t\tif (type === Dialogs.FILEPICKER_TYPE_CHOOSE) {\n\t\t\t\tbuttonlist.push({\n\t\t\t\t\ttext: t('core', 'Choose'),\n\t\t\t\t\tclick: chooseCallback,\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t})\n\t\t\t} else if (type === Dialogs.FILEPICKER_TYPE_CUSTOM) {\n\t\t\t\toptions.buttons.forEach(function(button) {\n\t\t\t\t\tbuttonlist.push({\n\t\t\t\t\t\ttext: button.text,\n\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\tfunctionToCall(button.type)\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdefaultButton: button.defaultButton\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tif (type === Dialogs.FILEPICKER_TYPE_COPY || type === Dialogs.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\t\t\tbuttonlist.push({\n\t\t\t\t\t\ttext: t('core', 'Copy'),\n\t\t\t\t\t\tclick: copyCallback,\n\t\t\t\t\t\tdefaultButton: false\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (type === Dialogs.FILEPICKER_TYPE_MOVE || type === Dialogs.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\t\t\tbuttonlist.push({\n\t\t\t\t\t\ttext: t('core', 'Move'),\n\t\t\t\t\t\tclick: moveCallback,\n\t\t\t\t\t\tdefaultButton: true\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tself.$filePicker.ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\t// max-width of 600\n\t\t\t\twidth: 600,\n\t\t\t\theight: 500,\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist,\n\t\t\t\tstyle: {\n\t\t\t\t\tbuttons: 'aside'\n\t\t\t\t},\n\t\t\t\tclose: function() {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t$(this).ocdialog('destroy').remove()\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t}\n\t\t\t\t\tself.$filePicker = null\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// We can access primary class only from oc-dialog.\n\t\t\t// Hence this is one of the approach to get the choose button.\n\t\t\tvar getOcDialog = self.$filePicker.closest('.oc-dialog')\n\t\t\tvar buttonEnableDisable = getOcDialog.find('.primary')\n\t\t\tif (self.$filePicker.data('mimetype').indexOf('httpd/unix-directory') !== -1 || self.$filePicker.data('allowDirectoryChooser')) {\n\t\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t\t} else {\n\t\t\t\tbuttonEnableDisable.prop('disabled', true)\n\t\t\t}\n\t\t})\n\t\t\t.fail(function(status, error) {\n\t\t\t\t// If the method is called while navigating away\n\t\t\t\t// from the page, it is probably not needed ;)\n\t\t\t\tself.filepicker.loading = false\n\t\t\t\tif (status !== 0) {\n\t\t\t\t\talert(t('core', 'Error loading file picker template: {error}', { error: error }))\n\t\t\t\t}\n\t\t\t})\n\t},\n\t/**\n\t * Displays raw dialog\n\t * You better use a wrapper instead ...\n\t */\n\tmessage: function(content, title, dialogType, buttons, callback, modal, allowHtml) {\n\t\treturn $.when(this._getMessageTemplate()).then(function($tmpl) {\n\t\t\tvar dialogName = 'oc-dialog-' + Dialogs.dialogsCounter + '-content'\n\t\t\tvar dialogId = '#' + dialogName\n\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\tmessage: content,\n\t\t\t\ttype: dialogType\n\t\t\t}, allowHtml ? { escapeFunction: '' } : {})\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false\n\t\t\t}\n\t\t\t$('body').append($dlg)\n\t\t\tvar buttonlist = []\n\t\t\tswitch (buttons) {\n\t\t\tcase Dialogs.YES_NO_BUTTONS:\n\t\t\t\tbuttonlist = [{\n\t\t\t\t\ttext: t('core', 'No'),\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\tcallback(false)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttext: t('core', 'Yes'),\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\tcallback(true)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t},\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t}]\n\t\t\t\tbreak\n\t\t\tcase Dialogs.OK_BUTTON:\n\t\t\t\tvar functionToCall = function() {\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\tcallback()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbuttonlist[0] = {\n\t\t\t\t\ttext: t('core', 'OK'),\n\t\t\t\t\tclick: functionToCall,\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tif (typeof(buttons) === 'object') {\n\t\t\t\t\tswitch (buttons.type) {\n\t\t\t\t\t\tcase Dialogs.YES_NO_BUTTONS:\n\t\t\t\t\t\t\tbuttonlist = [{\n\t\t\t\t\t\t\t\ttext: buttons.cancel || t('core', 'No'),\n\t\t\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\t\t\t\tcallback(false)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttext: buttons.confirm || t('core', 'Yes'),\n\t\t\t\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\t\t\t\t\tcallback(true)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdefaultButton: true,\n\t\t\t\t\t\t\t\t\tclasses: buttons.confirmClasses\n\t\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t$(dialogId).ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\tcloseCallback: () => { callback && callback(false) },\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist\n\t\t\t})\n\t\t\tDialogs.dialogsCounter++\n\t\t})\n\t\t\t.fail(function(status, error) {\n\t\t\t\t// If the method is called while navigating away from\n\t\t\t\t// the page, we still want to deliver the message.\n\t\t\t\tif (status === 0) {\n\t\t\t\t\talert(title + ': ' + content)\n\t\t\t\t} else {\n\t\t\t\t\talert(t('core', 'Error loading message template: {error}', { error: error }))\n\t\t\t\t}\n\t\t\t})\n\t},\n\t_fileexistsshown: false,\n\t/**\n\t * Displays file exists dialog\n\t * @param {object} data upload object\n\t * @param {object} original file with name, size and mtime\n\t * @param {object} replacement file with name, size and mtime\n\t * @param {object} controller with onCancel, onSkip, onReplace and onRename methods\n\t * @returns {Promise} jquery promise that resolves after the dialog template was loaded\n\t */\n\tfileexists: function(data, original, replacement, controller) {\n\t\tvar self = this\n\t\tvar dialogDeferred = new $.Deferred()\n\n\t\tvar getCroppedPreview = function(file) {\n\t\t\tvar deferred = new $.Deferred()\n\t\t\t// Only process image files.\n\t\t\tvar type = file.type && file.type.split('/').shift()\n\t\t\tif (window.FileReader && type === 'image') {\n\t\t\t\tvar reader = new FileReader()\n\t\t\t\treader.onload = function(e) {\n\t\t\t\t\tvar blob = new Blob([e.target.result])\n\t\t\t\t\twindow.URL = window.URL || window.webkitURL\n\t\t\t\t\tvar originalUrl = window.URL.createObjectURL(blob)\n\t\t\t\t\tvar image = new Image()\n\t\t\t\t\timage.src = originalUrl\n\t\t\t\t\timage.onload = function() {\n\t\t\t\t\t\tvar url = crop(image)\n\t\t\t\t\t\tdeferred.resolve(url)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treader.readAsArrayBuffer(file)\n\t\t\t} else {\n\t\t\t\tdeferred.reject()\n\t\t\t}\n\t\t\treturn deferred\n\t\t}\n\n\t\tvar crop = function(img) {\n\t\t\tvar canvas = document.createElement('canvas')\n\t\t\tvar targetSize = 96\n\t\t\tvar width = img.width\n\t\t\tvar height = img.height\n\t\t\tvar x; var y; var size\n\n\t\t\t// Calculate the width and height, constraining the proportions\n\t\t\tif (width > height) {\n\t\t\t\ty = 0\n\t\t\t\tx = (width - height) / 2\n\t\t\t} else {\n\t\t\t\ty = (height - width) / 2\n\t\t\t\tx = 0\n\t\t\t}\n\t\t\tsize = Math.min(width, height)\n\n\t\t\t// Set canvas size to the cropped area\n\t\t\tcanvas.width = size\n\t\t\tcanvas.height = size\n\t\t\tvar ctx = canvas.getContext('2d')\n\t\t\tctx.drawImage(img, x, y, size, size, 0, 0, size, size)\n\n\t\t\t// Resize the canvas to match the destination (right size uses 96px)\n\t\t\tresampleHermite(canvas, size, size, targetSize, targetSize)\n\n\t\t\treturn canvas.toDataURL('image/png', 0.7)\n\t\t}\n\n\t\t/**\n\t\t * Fast image resize/resample using Hermite filter with JavaScript.\n\t\t *\n\t\t * @author: ViliusL\n\t\t *\n\t\t * @param {*} canvas\n\t\t * @param {number} W\n\t\t * @param {number} H\n\t\t * @param {number} W2\n\t\t * @param {number} H2\n\t\t */\n\t\tvar resampleHermite = function(canvas, W, H, W2, H2) {\n\t\t\tW2 = Math.round(W2)\n\t\t\tH2 = Math.round(H2)\n\t\t\tvar img = canvas.getContext('2d').getImageData(0, 0, W, H)\n\t\t\tvar img2 = canvas.getContext('2d').getImageData(0, 0, W2, H2)\n\t\t\tvar data = img.data\n\t\t\tvar data2 = img2.data\n\t\t\tvar ratio_w = W / W2\n\t\t\tvar ratio_h = H / H2\n\t\t\tvar ratio_w_half = Math.ceil(ratio_w / 2)\n\t\t\tvar ratio_h_half = Math.ceil(ratio_h / 2)\n\n\t\t\tfor (var j = 0; j < H2; j++) {\n\t\t\t\tfor (var i = 0; i < W2; i++) {\n\t\t\t\t\tvar x2 = (i + j * W2) * 4\n\t\t\t\t\tvar weight = 0\n\t\t\t\t\tvar weights = 0\n\t\t\t\t\tvar weights_alpha = 0\n\t\t\t\t\tvar gx_r = 0\n\t\t\t\t\tvar gx_g = 0\n\t\t\t\t\tvar gx_b = 0\n\t\t\t\t\tvar gx_a = 0\n\t\t\t\t\tvar center_y = (j + 0.5) * ratio_h\n\t\t\t\t\tfor (var yy = Math.floor(j * ratio_h); yy < (j + 1) * ratio_h; yy++) {\n\t\t\t\t\t\tvar dy = Math.abs(center_y - (yy + 0.5)) / ratio_h_half\n\t\t\t\t\t\tvar center_x = (i + 0.5) * ratio_w\n\t\t\t\t\t\tvar w0 = dy * dy // pre-calc part of w\n\t\t\t\t\t\tfor (var xx = Math.floor(i * ratio_w); xx < (i + 1) * ratio_w; xx++) {\n\t\t\t\t\t\t\tvar dx = Math.abs(center_x - (xx + 0.5)) / ratio_w_half\n\t\t\t\t\t\t\tvar w = Math.sqrt(w0 + dx * dx)\n\t\t\t\t\t\t\tif (w >= -1 && w <= 1) {\n\t\t\t\t\t\t\t\t// hermite filter\n\t\t\t\t\t\t\t\tweight = 2 * w * w * w - 3 * w * w + 1\n\t\t\t\t\t\t\t\tif (weight > 0) {\n\t\t\t\t\t\t\t\t\tdx = 4 * (xx + yy * W)\n\t\t\t\t\t\t\t\t\t// alpha\n\t\t\t\t\t\t\t\t\tgx_a += weight * data[dx + 3]\n\t\t\t\t\t\t\t\t\tweights_alpha += weight\n\t\t\t\t\t\t\t\t\t// colors\n\t\t\t\t\t\t\t\t\tif (data[dx + 3] < 255) { weight = weight * data[dx + 3] / 250 }\n\t\t\t\t\t\t\t\t\tgx_r += weight * data[dx]\n\t\t\t\t\t\t\t\t\tgx_g += weight * data[dx + 1]\n\t\t\t\t\t\t\t\t\tgx_b += weight * data[dx + 2]\n\t\t\t\t\t\t\t\t\tweights += weight\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdata2[x2] = gx_r / weights\n\t\t\t\t\tdata2[x2 + 1] = gx_g / weights\n\t\t\t\t\tdata2[x2 + 2] = gx_b / weights\n\t\t\t\t\tdata2[x2 + 3] = gx_a / weights_alpha\n\t\t\t\t}\n\t\t\t}\n\t\t\tcanvas.getContext('2d').clearRect(0, 0, Math.max(W, W2), Math.max(H, H2))\n\t\t\tcanvas.width = W2\n\t\t\tcanvas.height = H2\n\t\t\tcanvas.getContext('2d').putImageData(img2, 0, 0)\n\t\t}\n\n\t\tvar addConflict = function($conflicts, original, replacement) {\n\n\t\t\tvar $conflict = $conflicts.find('.template').clone().removeClass('template').addClass('conflict')\n\t\t\tvar $originalDiv = $conflict.find('.original')\n\t\t\tvar $replacementDiv = $conflict.find('.replacement')\n\n\t\t\t$conflict.data('data', data)\n\n\t\t\t$conflict.find('.filename').text(original.name)\n\t\t\t$originalDiv.find('.size').text(OC.Util.humanFileSize(original.size))\n\t\t\t$originalDiv.find('.mtime').text(OC.Util.formatDate(original.mtime))\n\t\t\t// ie sucks\n\t\t\tif (replacement.size && replacement.lastModified) {\n\t\t\t\t$replacementDiv.find('.size').text(OC.Util.humanFileSize(replacement.size))\n\t\t\t\t$replacementDiv.find('.mtime').text(OC.Util.formatDate(replacement.lastModified))\n\t\t\t}\n\t\t\tvar path = original.directory + '/' + original.name\n\t\t\tvar urlSpec = {\n\t\t\t\tfile: path,\n\t\t\t\tx: 96,\n\t\t\t\ty: 96,\n\t\t\t\tc: original.etag,\n\t\t\t\tforceIcon: 0\n\t\t\t}\n\t\t\tvar previewpath = Files.generatePreviewUrl(urlSpec)\n\t\t\t// Escaping single quotes\n\t\t\tpreviewpath = previewpath.replace(/'/g, '%27')\n\t\t\t$originalDiv.find('.icon').css({ 'background-image': \"url('\" + previewpath + \"')\" })\n\t\t\tgetCroppedPreview(replacement).then(\n\t\t\t\tfunction(path) {\n\t\t\t\t\t$replacementDiv.find('.icon').css('background-image', 'url(' + path + ')')\n\t\t\t\t}, function() {\n\t\t\t\t\tpath = OC.MimeType.getIconUrl(replacement.type)\n\t\t\t\t\t$replacementDiv.find('.icon').css('background-image', 'url(' + path + ')')\n\t\t\t\t}\n\t\t\t)\n\t\t\t// connect checkboxes with labels\n\t\t\tvar checkboxId = $conflicts.find('.conflict').length\n\t\t\t$originalDiv.find('input:checkbox').attr('id', 'checkbox_original_' + checkboxId)\n\t\t\t$replacementDiv.find('input:checkbox').attr('id', 'checkbox_replacement_' + checkboxId)\n\n\t\t\t$conflicts.append($conflict)\n\n\t\t\t// set more recent mtime bold\n\t\t\t// ie sucks\n\t\t\tif (replacement.lastModified > original.mtime) {\n\t\t\t\t$replacementDiv.find('.mtime').css('font-weight', 'bold')\n\t\t\t} else if (replacement.lastModified < original.mtime) {\n\t\t\t\t$originalDiv.find('.mtime').css('font-weight', 'bold')\n\t\t\t} else {\n\t\t\t\t// TODO add to same mtime collection?\n\t\t\t}\n\n\t\t\t// set bigger size bold\n\t\t\tif (replacement.size && replacement.size > original.size) {\n\t\t\t\t$replacementDiv.find('.size').css('font-weight', 'bold')\n\t\t\t} else if (replacement.size && replacement.size < original.size) {\n\t\t\t\t$originalDiv.find('.size').css('font-weight', 'bold')\n\t\t\t} else {\n\t\t\t\t// TODO add to same size collection?\n\t\t\t}\n\n\t\t\t// TODO show skip action for files with same size and mtime in bottom row\n\n\t\t\t// always keep readonly files\n\n\t\t\tif (original.status === 'readonly') {\n\t\t\t\t$originalDiv\n\t\t\t\t\t.addClass('readonly')\n\t\t\t\t\t.find('input[type=\"checkbox\"]')\n\t\t\t\t\t.prop('checked', true)\n\t\t\t\t\t.prop('disabled', true)\n\t\t\t\t$originalDiv.find('.message')\n\t\t\t\t\t.text(t('core', 'read-only'))\n\t\t\t}\n\t\t}\n\t\t// var selection = controller.getSelection(data.originalFiles);\n\t\t// if (selection.defaultAction) {\n\t\t//\tcontroller[selection.defaultAction](data);\n\t\t// } else {\n\t\tvar dialogName = 'oc-dialog-fileexists-content'\n\t\tvar dialogId = '#' + dialogName\n\t\tif (this._fileexistsshown) {\n\t\t\t// add conflict\n\n\t\t\tvar $conflicts = $(dialogId + ' .conflicts')\n\t\t\taddConflict($conflicts, original, replacement)\n\n\t\t\tvar count = $(dialogId + ' .conflict').length\n\t\t\tvar title = n('core',\n\t\t\t\t'{count} file conflict',\n\t\t\t\t'{count} file conflicts',\n\t\t\t\tcount,\n\t\t\t\t{ count: count }\n\t\t\t)\n\t\t\t$(dialogId).parent().children('.oc-dialog-title').text(title)\n\n\t\t\t// recalculate dimensions\n\t\t\t$(window).trigger('resize')\n\t\t\tdialogDeferred.resolve()\n\t\t} else {\n\t\t\t// create dialog\n\t\t\tthis._fileexistsshown = true\n\t\t\t$.when(this._getFileExistsTemplate()).then(function($tmpl) {\n\t\t\t\tvar title = t('core', 'One file conflict')\n\t\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\t\tdialog_name: dialogName,\n\t\t\t\t\ttitle: title,\n\t\t\t\t\ttype: 'fileexists',\n\n\t\t\t\t\tallnewfiles: t('core', 'New Files'),\n\t\t\t\t\tallexistingfiles: t('core', 'Already existing files'),\n\n\t\t\t\t\twhy: t('core', 'Which files do you want to keep?'),\n\t\t\t\t\twhat: t('core', 'If you select both versions, the copied file will have a number added to its name.')\n\t\t\t\t})\n\t\t\t\t$('body').append($dlg)\n\n\t\t\t\tif (original && replacement) {\n\t\t\t\t\tvar $conflicts = $dlg.find('.conflicts')\n\t\t\t\t\taddConflict($conflicts, original, replacement)\n\t\t\t\t}\n\n\t\t\t\tvar buttonlist = [{\n\t\t\t\t\ttext: t('core', 'Cancel'),\n\t\t\t\t\tclasses: 'cancel',\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (typeof controller.onCancel !== 'undefined') {\n\t\t\t\t\t\t\tcontroller.onCancel(data)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttext: t('core', 'Continue'),\n\t\t\t\t\tclasses: 'continue',\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (typeof controller.onContinue !== 'undefined') {\n\t\t\t\t\t\t\tcontroller.onContinue($(dialogId + ' .conflict'))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t}]\n\n\t\t\t\t$(dialogId).ocdialog({\n\t\t\t\t\twidth: 500,\n\t\t\t\t\tcloseOnEscape: true,\n\t\t\t\t\tmodal: true,\n\t\t\t\t\tbuttons: buttonlist,\n\t\t\t\t\tcloseButton: null,\n\t\t\t\t\tclose: function() {\n\t\t\t\t\t\tself._fileexistsshown = false\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t$(this).ocdialog('destroy').remove()\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// ignore\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\t$(dialogId).css('height', 'auto')\n\n\t\t\t\tvar $primaryButton = $dlg.closest('.oc-dialog').find('button.continue')\n\t\t\t\t$primaryButton.prop('disabled', true)\n\n\t\t\t\tfunction updatePrimaryButton() {\n\t\t\t\t\tvar checkedCount = $dlg.find('.conflicts .checkbox:checked').length\n\t\t\t\t\t$primaryButton.prop('disabled', checkedCount === 0)\n\t\t\t\t}\n\n\t\t\t\t// add checkbox toggling actions\n\t\t\t\t$(dialogId).find('.allnewfiles').on('click', function() {\n\t\t\t\t\tvar $checkboxes = $(dialogId).find('.conflict .replacement input[type=\"checkbox\"]')\n\t\t\t\t\t$checkboxes.prop('checked', $(this).prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.allexistingfiles').on('click', function() {\n\t\t\t\t\tvar $checkboxes = $(dialogId).find('.conflict .original:not(.readonly) input[type=\"checkbox\"]')\n\t\t\t\t\t$checkboxes.prop('checked', $(this).prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.conflicts').on('click', '.replacement,.original:not(.readonly)', function() {\n\t\t\t\t\tvar $checkbox = $(this).find('input[type=\"checkbox\"]')\n\t\t\t\t\t$checkbox.prop('checked', !$checkbox.prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.conflicts').on('click', '.replacement input[type=\"checkbox\"],.original:not(.readonly) input[type=\"checkbox\"]', function() {\n\t\t\t\t\tvar $checkbox = $(this)\n\t\t\t\t\t$checkbox.prop('checked', !$checkbox.prop('checked'))\n\t\t\t\t})\n\n\t\t\t\t// update counters\n\t\t\t\t$(dialogId).on('click', '.replacement,.allnewfiles', function() {\n\t\t\t\t\tvar count = $(dialogId).find('.conflict .replacement input[type=\"checkbox\"]:checked').length\n\t\t\t\t\tif (count === $(dialogId + ' .conflict').length) {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', true)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text(t('core', '(all selected)'))\n\t\t\t\t\t} else if (count > 0) {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text(t('core', '({count} selected)', { count: count }))\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text('')\n\t\t\t\t\t}\n\t\t\t\t\tupdatePrimaryButton()\n\t\t\t\t})\n\t\t\t\t$(dialogId).on('click', '.original,.allexistingfiles', function() {\n\t\t\t\t\tvar count = $(dialogId).find('.conflict .original input[type=\"checkbox\"]:checked').length\n\t\t\t\t\tif (count === $(dialogId + ' .conflict').length) {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', true)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count').text(t('core', '(all selected)'))\n\t\t\t\t\t} else if (count > 0) {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count')\n\t\t\t\t\t\t\t.text(t('core', '({count} selected)', { count: count }))\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count').text('')\n\t\t\t\t\t}\n\t\t\t\t\tupdatePrimaryButton()\n\t\t\t\t})\n\n\t\t\t\tdialogDeferred.resolve()\n\t\t\t})\n\t\t\t\t.fail(function() {\n\t\t\t\t\tdialogDeferred.reject()\n\t\t\t\t\talert(t('core', 'Error loading file exists template'))\n\t\t\t\t})\n\t\t}\n\t\t// }\n\t\treturn dialogDeferred.promise()\n\t},\n\t// get the gridview setting and set the input accordingly\n\t_getGridSettings: function() {\n\t\tconst self = this\n\t\t$.get(OC.generateUrl('/apps/files/api/v1/showgridview'), function(response) {\n\t\t\tself.$showGridView\n\t\t\t\t.removeClass('icon-toggle-filelist icon-toggle-pictures')\n\t\t\t\t.addClass(response.gridview ? 'icon-toggle-filelist' : 'icon-toggle-pictures')\n\t\t\tself.$showGridView.attr(\n\t\t\t\t'aria-label',\n\t\t\t\tresponse.gridview ? t('files', 'Show list view') : t('files', 'Show grid view'),\n\t\t\t)\n\t\t\t$('.list-container').toggleClass('view-grid', response.gridview)\n\t\t})\n\t},\n\t_onGridviewChange: function() {\n\t\tconst isGridView = this.$showGridView.hasClass('icon-toggle-filelist')\n\t\t// only save state if user is logged in\n\t\tif (OC.currentUser) {\n\t\t\t$.post(OC.generateUrl('/apps/files/api/v1/showgridview'), { show: !isGridView })\n\t\t}\n\t\tthis.$showGridView\n\t\t\t.removeClass('icon-toggle-filelist icon-toggle-pictures')\n\t\t\t.addClass(isGridView ? 'icon-toggle-pictures' : 'icon-toggle-filelist')\n\t\tthis.$showGridView.attr(\n\t\t\t'aria-label',\n\t\t\tisGridView ? t('files', 'Show grid view') : t('files', 'Show list view'),\n\t\t)\n\t\tthis.$filePicker.find('.list-container').toggleClass('view-grid', !isGridView)\n\t},\n\t_getFilePickerTemplate: function() {\n\t\tvar defer = $.Deferred()\n\t\tif (!this.$filePickerTemplate) {\n\t\t\tvar self = this\n\t\t\t$.get(OC.filePath('core', 'templates', 'filepicker.html'), function(tmpl) {\n\t\t\t\tself.$filePickerTemplate = $(tmpl)\n\t\t\t\tself.$listTmpl = self.$filePickerTemplate.find('.filelist tbody tr:first-child').detach()\n\t\t\t\tdefer.resolve(self.$filePickerTemplate)\n\t\t\t})\n\t\t\t\t.fail(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\tdefer.reject(jqXHR.status, errorThrown)\n\t\t\t\t})\n\t\t} else {\n\t\t\tdefer.resolve(this.$filePickerTemplate)\n\t\t}\n\t\treturn defer.promise()\n\t},\n\t_getMessageTemplate: function() {\n\t\tvar defer = $.Deferred()\n\t\tif (!this.$messageTemplate) {\n\t\t\tvar self = this\n\t\t\t$.get(OC.filePath('core', 'templates', 'message.html'), function(tmpl) {\n\t\t\t\tself.$messageTemplate = $(tmpl)\n\t\t\t\tdefer.resolve(self.$messageTemplate)\n\t\t\t})\n\t\t\t\t.fail(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\tdefer.reject(jqXHR.status, errorThrown)\n\t\t\t\t})\n\t\t} else {\n\t\t\tdefer.resolve(this.$messageTemplate)\n\t\t}\n\t\treturn defer.promise()\n\t},\n\t_getFileExistsTemplate: function() {\n\t\tvar defer = $.Deferred()\n\t\tif (!this.$fileexistsTemplate) {\n\t\t\tvar self = this\n\t\t\t$.get(OC.filePath('files', 'templates', 'fileexists.html'), function(tmpl) {\n\t\t\t\tself.$fileexistsTemplate = $(tmpl)\n\t\t\t\tdefer.resolve(self.$fileexistsTemplate)\n\t\t\t})\n\t\t\t\t.fail(function() {\n\t\t\t\t\tdefer.reject()\n\t\t\t\t})\n\t\t} else {\n\t\t\tdefer.resolve(this.$fileexistsTemplate)\n\t\t}\n\t\treturn defer.promise()\n\t},\n\n\t/**\n\t * fills the filepicker with files\n\t */\n\t_fillFilePicker: async function(dir, type) {\n\t\tvar self = this\n\t\tthis.$filelist.empty()\n\t\tthis.$filePicker.find('.emptycontent').hide()\n\t\tthis.$filelistContainer.addClass('icon-loading')\n\t\tthis.$filePicker.data('path', dir)\n\t\tvar filter = this.$filePicker.data('mimetype')\n\t\tvar advancedFilter = this.$filePicker.data('filter')\n\t\tif (typeof (filter) === 'string') {\n\t\t\tfilter = [filter]\n\t\t}\n\t\tself.$fileListHeader.find('.sort-indicator').addClass('hidden').removeClass('icon-triangle-n').removeClass('icon-triangle-s')\n\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').removeClass('hidden')\n\t\tif (self.filepicker.sortOrder === 'asc') {\n\t\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').addClass('icon-triangle-n')\n\t\t} else {\n\t\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').addClass('icon-triangle-s')\n\t\t}\n\n\t\t// Wrap within a method because a promise cannot return multiple values\n\t\t// But the client impleemntation still does it...\n\t\tvar getFolderContents = async function(dir) {\n\t\t\treturn self.filepicker.filesClient.getFolderContents(dir)\n\t\t\t\t.then((status, files) => {\n\t\t\t\t\treturn files\n\t\t\t\t})\n\t\t}\n\n\t\ttry {\n\t\t\tvar files = await getFolderContents(dir)\n\t\t} catch (error) {\n\t\t\t// fallback to root if requested dir is non-existent\n\t\t\tconsole.error('Requested path does not exists, falling back to root')\n\t\t\tvar files = await getFolderContents('/')\n\t\t\tthis.$filePicker.data('path', '/')\n\t\t\tthis._changeButtonsText(type, '')\n\t\t}\n\n\t\tself.filelist = files\n\t\tif (filter && filter.length > 0 && filter.indexOf('*') === -1) {\n\t\t\tfiles = files.filter(function(file) {\n\t\t\t\treturn file.type === 'dir' || filter.indexOf(file.mimetype) !== -1\n\t\t\t})\n\t\t}\n\n\t\tif (advancedFilter) {\n\t\t\tfiles = files.filter(advancedFilter)\n\t\t}\n\n\t\t// Check if the showHidden input field exist and if it exist follow it\n\t\t// Otherwise just show the hidden files\n\t\tconst showHiddenInput = document.getElementById('showHiddenFiles')\n\t\tconst showHidden = showHiddenInput === null || showHiddenInput.value === \"1\"\n\t\tif (!showHidden) {\n\t\t\tfiles = files.filter(function(file) {\n\t\t\t\treturn !file.name.startsWith('.')\n\t\t\t})\n\t\t}\n\n\t\tvar Comparators = {\n\t\t\tname: function(fileInfo1, fileInfo2) {\n\t\t\t\tif (fileInfo1.type === 'dir' && fileInfo2.type !== 'dir') {\n\t\t\t\t\treturn -1\n\t\t\t\t}\n\t\t\t\tif (fileInfo1.type !== 'dir' && fileInfo2.type === 'dir') {\n\t\t\t\t\treturn 1\n\t\t\t\t}\n\t\t\t\treturn OC.Util.naturalSortCompare(fileInfo1.name, fileInfo2.name)\n\t\t\t},\n\t\t\tsize: function(fileInfo1, fileInfo2) {\n\t\t\t\treturn fileInfo1.size - fileInfo2.size\n\t\t\t},\n\t\t\tmtime: function(fileInfo1, fileInfo2) {\n\t\t\t\treturn fileInfo1.mtime - fileInfo2.mtime\n\t\t\t}\n\t\t}\n\t\tvar comparator = Comparators[self.filepicker.sortField] || Comparators.name\n\t\tfiles = files.sort(function(file1, file2) {\n\t\t\tvar isFavorite = function(fileInfo) {\n\t\t\t\treturn fileInfo.tags && fileInfo.tags.indexOf(OC.TAG_FAVORITE) >= 0\n\t\t\t}\n\n\t\t\tif (isFavorite(file1) && !isFavorite(file2)) {\n\t\t\t\treturn -1\n\t\t\t} else if (!isFavorite(file1) && isFavorite(file2)) {\n\t\t\t\treturn 1\n\t\t\t}\n\n\t\t\treturn self.filepicker.sortOrder === 'asc' ? comparator(file1, file2) : -comparator(file1, file2)\n\t\t})\n\n\t\tself._fillSlug()\n\n\t\tif (files.length === 0) {\n\t\t\tself.$filePicker.find('.emptycontent').show()\n\t\t\tself.$fileListHeader.hide()\n\t\t} else {\n\t\t\tself.$filePicker.find('.emptycontent').hide()\n\t\t\tself.$fileListHeader.show()\n\t\t}\n\n\t\tself.$filelist.empty();\n\n\t\t$.each(files, function(idx, entry) {\n\t\t\tif (entry.isEncrypted && entry.mimetype === 'httpd/unix-directory') {\n\t\t\t\tentry.icon = OC.MimeType.getIconUrl('dir-encrypted')\n\t\t\t} else {\n\t\t\t\tentry.icon = OC.MimeType.getIconUrl(entry.mimetype)\n\t\t\t}\n\n\t\t\tvar simpleSize, sizeColor\n\t\t\tif (typeof (entry.size) !== 'undefined' && entry.size >= 0) {\n\t\t\t\tsimpleSize = OC.Util.humanFileSize(parseInt(entry.size, 10), true)\n\t\t\t\tsizeColor = Math.round(160 - Math.pow((entry.size / (1024 * 1024)), 2))\n\t\t\t} else {\n\t\t\t\tsimpleSize = t('files', 'Pending')\n\t\t\t\tsizeColor = 80\n\t\t\t}\n\n\t\t\t// split the filename in half if the size is bigger than 20 char\n\t\t\t// for ellipsis\n\t\t\tif (entry.name.length >= 10) {\n\t\t\t\t// leave maximum 10 letters\n\t\t\t\tvar split = Math.min(Math.floor(entry.name.length / 2), 10)\n\t\t\t\tvar filename1 = entry.name.substr(0, entry.name.length - split)\n\t\t\t\tvar filename2 = entry.name.substr(entry.name.length - split)\n\t\t\t} else {\n\t\t\t\tvar filename1 = entry.name\n\t\t\t\tvar filename2 = ''\n\t\t\t}\n\n\t\t\tvar $row = self.$listTmpl.octemplate({\n\t\t\t\ttype: entry.type,\n\t\t\t\tdir: dir,\n\t\t\t\tfilename: entry.name,\n\t\t\t\tfilename1: filename1,\n\t\t\t\tfilename2: filename2,\n\t\t\t\tdate: OC.Util.relativeModifiedDate(entry.mtime),\n\t\t\t\tsize: simpleSize,\n\t\t\t\tsizeColor: sizeColor,\n\t\t\t\ticon: entry.icon\n\t\t\t})\n\t\t\tif (entry.type === 'file') {\n\t\t\t\tvar urlSpec = {\n\t\t\t\t\tfile: dir + '/' + entry.name,\n\t\t\t\t\tx: 100,\n\t\t\t\t\ty: 100\n\t\t\t\t}\n\t\t\t\tvar img = new Image()\n\t\t\t\tvar previewUrl = OC.generateUrl('/core/preview.png?') + $.param(urlSpec)\n\t\t\t\timg.onload = function() {\n\t\t\t\t\tif (img.width > 5) {\n\t\t\t\t\t\t$row.find('td.filename').attr('style', 'background-image:url(' + previewUrl + ')')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\timg.src = previewUrl\n\t\t\t}\n\t\t\tself.$filelist.append($row)\n\t\t})\n\n\t\tself.$filelistContainer.removeClass('icon-loading')\n\t},\n\t/**\n\t * fills the tree list with directories\n\t */\n\t_fillSlug: function() {\n\t\tvar addButton = this.$dirTree.find('.actions.creatable').detach()\n\t\tthis.$dirTree.empty()\n\t\tvar self = this\n\n\t\tself.$dirTree.append(addButton)\n\n\t\tvar dir\n\t\tvar path = this.$filePicker.data('path')\n\t\tvar $template = $('<div data-dir=\"{dir}\" tabindex=\"0\"><a>{name}</a></div>').addClass('crumb')\n\t\tif (path) {\n\t\t\tvar paths = path.split('/')\n\t\t\t$.each(paths, function(index, dir) {\n\t\t\t\tdir = paths.pop()\n\t\t\t\tif (dir === '') {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tself.$dirTree.prepend($template.octemplate({\n\t\t\t\t\tdir: paths.join('/') + '/' + dir,\n\t\t\t\t\tname: dir\n\t\t\t\t}))\n\t\t\t})\n\t\t}\n\n\t\t$template.octemplate({\n\t\t\tdir: '',\n\t\t\tname: '' // Ugly but works ;)\n\t\t}, { escapeFunction: null }).prependTo(this.$dirTree)\n\n\t},\n\t/**\n\t * handle selection made in the tree list\n\t */\n\t_handleTreeListSelect: function(event, type) {\n\t\tvar self = event.data\n\t\tvar dir = $(event.target).closest('.crumb').data('dir')\n\t\tself._fillFilePicker(dir, type)\n\t\tvar getOcDialog = (event.target).closest('.oc-dialog')\n\t\tvar buttonEnableDisable = $('.primary', getOcDialog)\n\t\tthis._changeButtonsText(type, dir.split(/[/]+/).pop())\n\t\tif (this.$filePicker.data('mimetype').indexOf('httpd/unix-directory') !== -1 || this.$filePicker.data('allowDirectoryChooser')) {\n\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t} else {\n\t\t\tbuttonEnableDisable.prop('disabled', true)\n\t\t}\n\t},\n\t/**\n\t * handle clicks made in the filepicker\n\t */\n\t_handlePickerClick: function(event, $element, type) {\n\t\tvar getOcDialog = this.$filePicker.closest('.oc-dialog')\n\t\tvar buttonEnableDisable = getOcDialog.find('.primary')\n\t\tif ($element.data('type') === 'file') {\n\t\t\tif (this.$filePicker.data('multiselect') !== true || !event.ctrlKey) {\n\t\t\t\tthis.$filelist.find('.filepicker_element_selected').removeClass('filepicker_element_selected')\n\t\t\t}\n\t\t\t$element.toggleClass('filepicker_element_selected')\n\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t} else if ($element.data('type') === 'dir') {\n\t\t\tthis._fillFilePicker(this.$filePicker.data('path') + '/' + $element.data('entryname'), type)\n\t\t\tthis._changeButtonsText(type, $element.data('entryname'))\n\t\t\tif (this.$filePicker.data('mimetype').indexOf('httpd/unix-directory') !== -1 || this.$filePicker.data('allowDirectoryChooser')) {\n\t\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t\t} else {\n\t\t\t\tbuttonEnableDisable.prop('disabled', true)\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Handle\n\t * @param type of action\n\t * @param dir on which to change buttons text\n\t * @private\n\t */\n\t_changeButtonsText: function(type, dir) {\n\t\tvar copyText = dir === '' ? t('core', 'Copy') : t('core', 'Copy to {folder}', { folder: dir })\n\t\tvar moveText = dir === '' ? t('core', 'Move') : t('core', 'Move to {folder}', { folder: dir })\n\t\tvar buttons = $('.oc-dialog-buttonrow button')\n\t\tswitch (type) {\n\t\t\tcase this.FILEPICKER_TYPE_CHOOSE:\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_CUSTOM:\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_COPY:\n\t\t\t\tbuttons.text(copyText)\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_MOVE:\n\t\t\t\tbuttons.text(moveText)\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_COPY_MOVE:\n\t\t\t\tbuttons.eq(0).text(copyText)\n\t\t\t\tbuttons.eq(1).text(moveText)\n\t\t\t\tbreak\n\t\t}\n\t}\n}\n\nexport default Dialogs\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { emit } from '@nextcloud/event-bus'\n\n/**\n * @private\n * @param {Document} global the document to read the initial value from\n * @param {Function} emit the function to invoke for every new token\n * @return {object}\n */\nexport const manageToken = (global, emit) => {\n\tlet token = global.getElementsByTagName('head')[0].getAttribute('data-requesttoken')\n\n\treturn {\n\t\tgetToken: () => token,\n\t\tsetToken: newToken => {\n\t\t\ttoken = newToken\n\n\t\t\temit('csrf-token-update', {\n\t\t\t\ttoken,\n\t\t\t})\n\t\t},\n\t}\n}\n\nconst manageFromDocument = manageToken(document, emit)\n\n/**\n * @return {string}\n */\nexport const getToken = manageFromDocument.getToken\n\n/**\n * @param {string} newToken new token\n */\nexport const setToken = manageFromDocument.setToken\n","/**\n * @copyright 2012 Robin Appelman icewind1991@gmail.com\n *\n * @author Arthur Schiwon <blizzz@arthur-schiwon.de>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Lukas Reschke <lukas@statuscode.ch>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Thomas Müller <thomas.mueller@tmit.eu>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport $ from 'jquery'\n\nimport { getToken } from './requesttoken'\n\n/**\n * Create a new event source\n * @param {string} src\n * @param {object} [data] to be send as GET\n *\n * @constructs OCEventSource\n */\nconst OCEventSource = function(src, data) {\n\tvar dataStr = ''\n\tvar name\n\tvar joinChar\n\tthis.typelessListeners = []\n\tthis.closed = false\n\tthis.listeners = {}\n\tif (data) {\n\t\tfor (name in data) {\n\t\t\tdataStr += name + '=' + encodeURIComponent(data[name]) + '&'\n\t\t}\n\t}\n\tdataStr += 'requesttoken=' + encodeURIComponent(getToken())\n\tif (!this.useFallBack && typeof EventSource !== 'undefined') {\n\t\tjoinChar = '&'\n\t\tif (src.indexOf('?') === -1) {\n\t\t\tjoinChar = '?'\n\t\t}\n\t\tthis.source = new EventSource(src + joinChar + dataStr)\n\t\tthis.source.onmessage = function(e) {\n\t\t\tfor (var i = 0; i < this.typelessListeners.length; i++) {\n\t\t\t\tthis.typelessListeners[i](JSON.parse(e.data))\n\t\t\t}\n\t\t}.bind(this)\n\t} else {\n\t\tvar iframeId = 'oc_eventsource_iframe_' + OCEventSource.iframeCount\n\t\tOCEventSource.fallBackSources[OCEventSource.iframeCount] = this\n\t\tthis.iframe = $('<iframe></iframe>')\n\t\tthis.iframe.attr('id', iframeId)\n\t\tthis.iframe.hide()\n\n\t\tjoinChar = '&'\n\t\tif (src.indexOf('?') === -1) {\n\t\t\tjoinChar = '?'\n\t\t}\n\t\tthis.iframe.attr('src', src + joinChar + 'fallback=true&fallback_id=' + OCEventSource.iframeCount + '&' + dataStr)\n\t\t$('body').append(this.iframe)\n\t\tthis.useFallBack = true\n\t\tOCEventSource.iframeCount++\n\t}\n\t// add close listener\n\tthis.listen('__internal__', function(data) {\n\t\tif (data === 'close') {\n\t\t\tthis.close()\n\t\t}\n\t}.bind(this))\n}\nOCEventSource.fallBackSources = []\nOCEventSource.iframeCount = 0// number of fallback iframes\nOCEventSource.fallBackCallBack = function(id, type, data) {\n\tOCEventSource.fallBackSources[id].fallBackCallBack(type, data)\n}\nOCEventSource.prototype = {\n\ttypelessListeners: [],\n\tiframe: null,\n\tlisteners: {}, // only for fallback\n\tuseFallBack: false,\n\t/**\n\t * Fallback callback for browsers that don't have the\n\t * native EventSource object.\n\t *\n\t * Calls the registered listeners.\n\t *\n\t * @private\n\t * @param {String} type event type\n\t * @param {Object} data received data\n\t */\n\tfallBackCallBack: function(type, data) {\n\t\tvar i\n\t\t// ignore messages that might appear after closing\n\t\tif (this.closed) {\n\t\t\treturn\n\t\t}\n\t\tif (type) {\n\t\t\tif (typeof this.listeners.done !== 'undefined') {\n\t\t\t\tfor (i = 0; i < this.listeners[type].length; i++) {\n\t\t\t\t\tthis.listeners[type][i](data)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor (i = 0; i < this.typelessListeners.length; i++) {\n\t\t\t\tthis.typelessListeners[i](data)\n\t\t\t}\n\t\t}\n\t},\n\tlastLength: 0, // for fallback\n\t/**\n\t * Listen to a given type of events.\n\t *\n\t * @param {String} type event type\n\t * @param {Function} callback event callback\n\t */\n\tlisten: function(type, callback) {\n\t\tif (callback && callback.call) {\n\n\t\t\tif (type) {\n\t\t\t\tif (this.useFallBack) {\n\t\t\t\t\tif (!this.listeners[type]) {\n\t\t\t\t\t\tthis.listeners[type] = []\n\t\t\t\t\t}\n\t\t\t\t\tthis.listeners[type].push(callback)\n\t\t\t\t} else {\n\t\t\t\t\tthis.source.addEventListener(type, function(e) {\n\t\t\t\t\t\tif (typeof e.data !== 'undefined') {\n\t\t\t\t\t\t\tcallback(JSON.parse(e.data))\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcallback('')\n\t\t\t\t\t\t}\n\t\t\t\t\t}, false)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.typelessListeners.push(callback)\n\t\t\t}\n\t\t}\n\t},\n\t/**\n\t * Closes this event source.\n\t */\n\tclose: function() {\n\t\tthis.closed = true\n\t\tif (typeof this.source !== 'undefined') {\n\t\t\tthis.source.close()\n\t\t}\n\t}\n}\n\nexport default OCEventSource\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\n/** @typedef {import('jquery')} jQuery */\nimport $ from 'jquery'\n\nimport { menuSpeed } from './constants'\n\nexport let currentMenu = null\nexport let currentMenuToggle = null\n\n/**\n * For menu toggling\n *\n * @param {jQuery} $toggle the toggle element\n * @param {jQuery} $menuEl the menu container element\n * @param {Function | undefined} toggle callback invoked everytime the menu is opened\n * @param {boolean} headerMenu is this a top right header menu?\n * @return {void}\n */\nexport const registerMenu = function($toggle, $menuEl, toggle, headerMenu) {\n\t$menuEl.addClass('menu')\n\tconst isClickableElement = $toggle.prop('tagName') === 'A' || $toggle.prop('tagName') === 'BUTTON'\n\n\t// On link and button, the enter key trigger a click event\n\t// Only use the click to avoid two fired events\n\t$toggle.on(isClickableElement ? 'click.menu' : 'click.menu keyup.menu', function(event) {\n\t\t// prevent the link event (append anchor to URL)\n\t\tevent.preventDefault()\n\n\t\t// allow enter key as a trigger\n\t\tif (event.key && event.key !== 'Enter') {\n\t\t\treturn\n\t\t}\n\n\t\tif ($menuEl.is(currentMenu)) {\n\t\t\thideMenus()\n\t\t\treturn\n\t\t} else if (currentMenu) {\n\t\t\t// another menu was open?\n\t\t\t// close it\n\t\t\thideMenus()\n\t\t}\n\n\t\tif (headerMenu === true) {\n\t\t\t$menuEl.parent().addClass('openedMenu')\n\t\t}\n\n\t\t// Set menu to expanded\n\t\t$toggle.attr('aria-expanded', true)\n\n\t\t$menuEl.slideToggle(menuSpeed, toggle)\n\t\tcurrentMenu = $menuEl\n\t\tcurrentMenuToggle = $toggle\n\t})\n}\n\n/**\n * Unregister a previously registered menu\n *\n * @param {jQuery} $toggle the toggle element\n * @param {jQuery} $menuEl the menu container element\n */\nexport const unregisterMenu = ($toggle, $menuEl) => {\n\t// close menu if opened\n\tif ($menuEl.is(currentMenu)) {\n\t\thideMenus()\n\t}\n\t$toggle.off('click.menu').removeClass('menutoggle')\n\t$menuEl.removeClass('menu')\n}\n\n/**\n * Hides any open menus\n *\n * @param {Function} complete callback when the hiding animation is done\n */\nexport const hideMenus = function(complete) {\n\tif (currentMenu) {\n\t\tconst lastMenu = currentMenu\n\t\tcurrentMenu.trigger(new $.Event('beforeHide'))\n\t\tcurrentMenu.slideUp(menuSpeed, function() {\n\t\t\tlastMenu.trigger(new $.Event('afterHide'))\n\t\t\tif (complete) {\n\t\t\t\tcomplete.apply(this, arguments)\n\t\t\t}\n\t\t})\n\t}\n\n\t// Set menu to closed\n\t$('.menutoggle').attr('aria-expanded', false)\n\tif (currentMenuToggle) {\n\t\tcurrentMenuToggle.attr('aria-expanded', false)\n\t}\n\n\t$('.openedMenu').removeClass('openedMenu')\n\tcurrentMenu = null\n\tcurrentMenuToggle = null\n}\n\n/**\n * Shows a given element as menu\n *\n * @param {object} [$toggle=null] menu toggle\n * @param {object} $menuEl menu element\n * @param {Function} complete callback when the showing animation is done\n */\nexport const showMenu = ($toggle, $menuEl, complete) => {\n\tif ($menuEl.is(currentMenu)) {\n\t\treturn\n\t}\n\thideMenus()\n\tcurrentMenu = $menuEl\n\tcurrentMenuToggle = $toggle\n\t$menuEl.trigger(new $.Event('beforeShow'))\n\t$menuEl.show()\n\t$menuEl.trigger(new $.Event('afterShow'))\n\t// no animation\n\tif (_.isFunction(complete)) {\n\t\tcomplete()\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const coreApps = ['', 'admin', 'log', 'core/search', 'core', '3rdparty']\nexport const menuSpeed = 50\nexport const PERMISSION_NONE = 0\nexport const PERMISSION_CREATE = 4\nexport const PERMISSION_READ = 1\nexport const PERMISSION_UPDATE = 2\nexport const PERMISSION_DELETE = 8\nexport const PERMISSION_SHARE = 16\nexport const PERMISSION_ALL = 31\nexport const TAG_FAVORITE = '_$!<Favorite>!$_'\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst isAdmin = !!window._oc_isadmin\n\n/**\n * Returns whether the current user is an administrator\n *\n * @return {boolean} true if the user is an admin, false otherwise\n * @since 9.0.0\n */\nexport const isUserAdmin = () => isAdmin\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n// This var is global because it's shared across webpack bundles\nwindow._oc_l10n_registry_translations = window._oc_l10n_registry_translations || {}\nwindow._oc_l10n_registry_plural_functions = window._oc_l10n_registry_plural_functions || {}\n\n/**\n * @param {string} appId the app id\n * @param {object} translations the translations list\n * @param {Function} pluralFunction the translations list\n */\nconst register = (appId, translations, pluralFunction) => {\n\twindow._oc_l10n_registry_translations[appId] = translations\n\twindow._oc_l10n_registry_plural_functions[appId] = pluralFunction\n}\n\n/**\n * @param {string} appId the app id\n * @param {object} translations the translations list\n * @param {Function} pluralFunction the translations list\n */\nconst extend = (appId, translations, pluralFunction) => {\n\twindow._oc_l10n_registry_translations[appId] = Object.assign(\n\t\twindow._oc_l10n_registry_translations[appId],\n\t\ttranslations\n\t)\n\twindow._oc_l10n_registry_plural_functions[appId] = pluralFunction\n}\n\n/**\n * @param {string} appId the app id\n * @param {object} translations the translations list\n * @param {Function} pluralFunction the translations list\n */\nexport const registerAppTranslations = (appId, translations, pluralFunction) => {\n\tif (!hasAppTranslations(appId)) {\n\t\tregister(appId, translations, pluralFunction)\n\t} else {\n\t\textend(appId, translations, pluralFunction)\n\t}\n}\n\n/**\n * @param {string} appId the app id\n */\nexport const unregisterAppTranslations = appId => {\n\tdelete window._oc_l10n_registry_translations[appId]\n\tdelete window._oc_l10n_registry_plural_functions[appId]\n}\n\n/**\n * @param {string} appId the app id\n * @return {boolean}\n */\nexport const hasAppTranslations = appId => {\n\treturn window._oc_l10n_registry_translations[appId] !== undefined\n\t\t&& window._oc_l10n_registry_plural_functions[appId] !== undefined\n}\n\n/**\n * @param {string} appId the app id\n * @return {object}\n */\nexport const getAppTranslations = appId => {\n\treturn {\n\t\ttranslations: window._oc_l10n_registry_translations[appId] || {},\n\t\tpluralFunction: window._oc_l10n_registry_plural_functions[appId],\n\t}\n}\n","/**\n * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>\n * Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)\n * Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Kesselberg <mail@danielkesselberg.de>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Morris Jobke <hey@morrisjobke.de>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport DOMPurify from 'dompurify'\nimport Handlebars from 'handlebars'\nimport identity from 'lodash/fp/identity'\nimport escapeHTML from 'escape-html'\nimport { generateFilePath } from '@nextcloud/router'\n\nimport OC from './index'\nimport {\n\tgetAppTranslations,\n\thasAppTranslations,\n\tregisterAppTranslations,\n\tunregisterAppTranslations,\n} from './l10n-registry'\n\n/**\n * L10N namespace with localization functions.\n *\n * @namespace OC.L10n\n */\nconst L10n = {\n\n\t/**\n\t * Load an app's translation bundle if not loaded already.\n\t *\n\t * @param {string} appName name of the app\n\t * @param {Function} callback callback to be called when\n\t * the translations are loaded\n\t * @return {Promise} promise\n\t */\n\tload(appName, callback) {\n\t\t// already available ?\n\t\tif (hasAppTranslations(appName) || OC.getLocale() === 'en') {\n\t\t\tconst deferred = $.Deferred()\n\t\t\tconst promise = deferred.promise()\n\t\t\tpromise.then(callback)\n\t\t\tdeferred.resolve()\n\t\t\treturn promise\n\t\t}\n\n\t\tconst self = this\n\t\tconst url = generateFilePath(appName, 'l10n', OC.getLocale() + '.json')\n\n\t\t// load JSON translation bundle per AJAX\n\t\treturn $.get(url)\n\t\t\t.then(\n\t\t\t\tfunction(result) {\n\t\t\t\t\tif (result.translations) {\n\t\t\t\t\t\tself.register(appName, result.translations, result.pluralForm)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t.then(callback)\n\t},\n\n\t/**\n\t * Register an app's translation bundle.\n\t *\n\t * @param {string} appName name of the app\n\t * @param {Object<string, string>} bundle bundle\n\t */\n\tregister(appName, bundle) {\n\t\tregisterAppTranslations(appName, bundle, this._getPlural)\n\t},\n\n\t/**\n\t * @private\n\t */\n\t_unregister: unregisterAppTranslations,\n\n\t/**\n\t * Translate a string\n\t *\n\t * @param {string} app the id of the app for which to translate the string\n\t * @param {string} text the string to translate\n\t * @param {object} [vars] map of placeholder key to value\n\t * @param {number} [count] number to replace %n with\n\t * @param {Array} [options] options array\n\t * @param {boolean} [options.escape=true] enable/disable auto escape of placeholders (by default enabled)\n\t * @param {boolean} [options.sanitize=true] enable/disable sanitization (by default enabled)\n\t * @return {string}\n\t */\n\ttranslate(app, text, vars, count, options) {\n\t\tconst defaultOptions = {\n\t\t\tescape: true,\n\t\t\tsanitize: true,\n\t\t}\n\t\tconst allOptions = options || {}\n\t\t_.defaults(allOptions, defaultOptions)\n\n\t\tconst optSanitize = allOptions.sanitize ? DOMPurify.sanitize : identity\n\t\tconst optEscape = allOptions.escape ? escapeHTML : identity\n\n\t\t// TODO: cache this function to avoid inline recreation\n\t\t// of the same function over and over again in case\n\t\t// translate() is used in a loop\n\t\tconst _build = function(text, vars, count) {\n\t\t\treturn text.replace(/%n/g, count).replace(/{([^{}]*)}/g,\n\t\t\t\tfunction(a, b) {\n\t\t\t\t\tconst r = vars[b]\n\t\t\t\t\tif (typeof r === 'string' || typeof r === 'number') {\n\t\t\t\t\t\treturn optSanitize(optEscape(r))\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn optSanitize(a)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\t\tlet translation = text\n\t\tconst bundle = getAppTranslations(app)\n\t\tconst value = bundle.translations[text]\n\t\tif (typeof (value) !== 'undefined') {\n\t\t\ttranslation = value\n\t\t}\n\n\t\tif (typeof vars === 'object' || count !== undefined) {\n\t\t\treturn optSanitize(_build(translation, vars, count))\n\t\t} else {\n\t\t\treturn optSanitize(translation)\n\t\t}\n\t},\n\n\t/**\n\t * Translate a plural string\n\t *\n\t * @param {string} app the id of the app for which to translate the string\n\t * @param {string} textSingular the string to translate for exactly one object\n\t * @param {string} textPlural the string to translate for n objects\n\t * @param {number} count number to determine whether to use singular or plural\n\t * @param {object} [vars] map of placeholder key to value\n\t * @param {Array} [options] options array\n\t * @param {boolean} [options.escape=true] enable/disable auto escape of placeholders (by default enabled)\n\t * @return {string} Translated string\n\t */\n\ttranslatePlural(app, textSingular, textPlural, count, vars, options) {\n\t\tconst identifier = '_' + textSingular + '_::_' + textPlural + '_'\n\t\tconst bundle = getAppTranslations(app)\n\t\tconst value = bundle.translations[identifier]\n\t\tif (typeof (value) !== 'undefined') {\n\t\t\tconst translation = value\n\t\t\tif ($.isArray(translation)) {\n\t\t\t\tconst plural = bundle.pluralFunction(count)\n\t\t\t\treturn this.translate(app, translation[plural], vars, count, options)\n\t\t\t}\n\t\t}\n\n\t\tif (count === 1) {\n\t\t\treturn this.translate(app, textSingular, vars, count, options)\n\t\t} else {\n\t\t\treturn this.translate(app, textPlural, vars, count, options)\n\t\t}\n\t},\n\n\t/**\n\t * The plural function taken from symfony\n\t *\n\t * @param {number} number the number of elements\n\t * @return {number}\n\t * @private\n\t */\n\t_getPlural(number) {\n\t\tlet language = OC.getLanguage()\n\t\tif (language === 'pt-BR') {\n\t\t\t// temporary set a locale for brazilian\n\t\t\tlanguage = 'xbr'\n\t\t}\n\n\t\tif (typeof language === 'undefined' || language === '') {\n\t\t\treturn (number === 1) ? 0 : 1\n\t\t}\n\n\t\tif (language.length > 3) {\n\t\t\tlanguage = language.substring(0, language.lastIndexOf('-'))\n\t\t}\n\n\t\t/*\n\t\t * The plural rules are derived from code of the Zend Framework (2010-09-25),\n\t\t * which is subject to the new BSD license (http://framework.zend.com/license/new-bsd).\n\t\t * Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)\n\t\t */\n\t\tswitch (language) {\n\t\tcase 'az':\n\t\tcase 'bo':\n\t\tcase 'dz':\n\t\tcase 'id':\n\t\tcase 'ja':\n\t\tcase 'jv':\n\t\tcase 'ka':\n\t\tcase 'km':\n\t\tcase 'kn':\n\t\tcase 'ko':\n\t\tcase 'ms':\n\t\tcase 'th':\n\t\tcase 'tr':\n\t\tcase 'vi':\n\t\tcase 'zh':\n\t\t\treturn 0\n\n\t\tcase 'af':\n\t\tcase 'bn':\n\t\tcase 'bg':\n\t\tcase 'ca':\n\t\tcase 'da':\n\t\tcase 'de':\n\t\tcase 'el':\n\t\tcase 'en':\n\t\tcase 'eo':\n\t\tcase 'es':\n\t\tcase 'et':\n\t\tcase 'eu':\n\t\tcase 'fa':\n\t\tcase 'fi':\n\t\tcase 'fo':\n\t\tcase 'fur':\n\t\tcase 'fy':\n\t\tcase 'gl':\n\t\tcase 'gu':\n\t\tcase 'ha':\n\t\tcase 'he':\n\t\tcase 'hu':\n\t\tcase 'is':\n\t\tcase 'it':\n\t\tcase 'ku':\n\t\tcase 'lb':\n\t\tcase 'ml':\n\t\tcase 'mn':\n\t\tcase 'mr':\n\t\tcase 'nah':\n\t\tcase 'nb':\n\t\tcase 'ne':\n\t\tcase 'nl':\n\t\tcase 'nn':\n\t\tcase 'no':\n\t\tcase 'oc':\n\t\tcase 'om':\n\t\tcase 'or':\n\t\tcase 'pa':\n\t\tcase 'pap':\n\t\tcase 'ps':\n\t\tcase 'pt':\n\t\tcase 'so':\n\t\tcase 'sq':\n\t\tcase 'sv':\n\t\tcase 'sw':\n\t\tcase 'ta':\n\t\tcase 'te':\n\t\tcase 'tk':\n\t\tcase 'ur':\n\t\tcase 'zu':\n\t\t\treturn (number === 1) ? 0 : 1\n\n\t\tcase 'am':\n\t\tcase 'bh':\n\t\tcase 'fil':\n\t\tcase 'fr':\n\t\tcase 'gun':\n\t\tcase 'hi':\n\t\tcase 'hy':\n\t\tcase 'ln':\n\t\tcase 'mg':\n\t\tcase 'nso':\n\t\tcase 'xbr':\n\t\tcase 'ti':\n\t\tcase 'wa':\n\t\t\treturn ((number === 0) || (number === 1)) ? 0 : 1\n\n\t\tcase 'be':\n\t\tcase 'bs':\n\t\tcase 'hr':\n\t\tcase 'ru':\n\t\tcase 'sh':\n\t\tcase 'sr':\n\t\tcase 'uk':\n\t\t\treturn ((number % 10 === 1) && (number % 100 !== 11)) ? 0 : (((number % 10 >= 2) && (number % 10 <= 4) && ((number % 100 < 10) || (number % 100 >= 20))) ? 1 : 2)\n\n\t\tcase 'cs':\n\t\tcase 'sk':\n\t\t\treturn (number === 1) ? 0 : (((number >= 2) && (number <= 4)) ? 1 : 2)\n\n\t\tcase 'ga':\n\t\t\treturn (number === 1) ? 0 : ((number === 2) ? 1 : 2)\n\n\t\tcase 'lt':\n\t\t\treturn ((number % 10 === 1) && (number % 100 !== 11)) ? 0 : (((number % 10 >= 2) && ((number % 100 < 10) || (number % 100 >= 20))) ? 1 : 2)\n\n\t\tcase 'sl':\n\t\t\treturn (number % 100 === 1) ? 0 : ((number % 100 === 2) ? 1 : (((number % 100 === 3) || (number % 100 === 4)) ? 2 : 3))\n\n\t\tcase 'mk':\n\t\t\treturn (number % 10 === 1) ? 0 : 1\n\n\t\tcase 'mt':\n\t\t\treturn (number === 1) ? 0 : (((number === 0) || ((number % 100 > 1) && (number % 100 < 11))) ? 1 : (((number % 100 > 10) && (number % 100 < 20)) ? 2 : 3))\n\n\t\tcase 'lv':\n\t\t\treturn (number === 0) ? 0 : (((number % 10 === 1) && (number % 100 !== 11)) ? 1 : 2)\n\n\t\tcase 'pl':\n\t\t\treturn (number === 1) ? 0 : (((number % 10 >= 2) && (number % 10 <= 4) && ((number % 100 < 12) || (number % 100 > 14))) ? 1 : 2)\n\n\t\tcase 'cy':\n\t\t\treturn (number === 1) ? 0 : ((number === 2) ? 1 : (((number === 8) || (number === 11)) ? 2 : 3))\n\n\t\tcase 'ro':\n\t\t\treturn (number === 1) ? 0 : (((number === 0) || ((number % 100 > 0) && (number % 100 < 20))) ? 1 : 2)\n\n\t\tcase 'ar':\n\t\t\treturn (number === 0) ? 0 : ((number === 1) ? 1 : ((number === 2) ? 2 : (((number % 100 >= 3) && (number % 100 <= 10)) ? 3 : (((number % 100 >= 11) && (number % 100 <= 99)) ? 4 : 5))))\n\n\t\tdefault:\n\t\t\treturn 0\n\t\t}\n\t},\n}\n\nexport default L10n\n\n/**\n * Returns the user's locale\n *\n * @return {string} locale string\n */\nexport const getLocale = () => $('html').data('locale') ?? 'en'\n\n/**\n * Returns the user's language\n *\n * @return {string} language string\n */\nexport const getLanguage = () => $('html').prop('lang')\n\nHandlebars.registerHelper('t', function(app, text) {\n\treturn L10n.translate(app, text)\n})\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author rakekniven <mark.ziegler@rakekniven.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * A little class to manage a status field for a \"saving\" process.\n * It can be used to display a starting message (e.g. \"Saving...\") and then\n * replace it with a green success message or a red error message.\n *\n * @namespace OC.msg\n */\nexport default {\n\t/**\n\t * Displayes a \"Saving...\" message in the given message placeholder\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t */\n\tstartSaving(selector) {\n\t\tthis.startAction(selector, t('core', 'Saving …'))\n\t},\n\n\t/**\n\t * Displayes a custom message in the given message placeholder\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {string} message Plain text message to display (no HTML allowed)\n\t */\n\tstartAction(selector, message) {\n\t\t$(selector).text(message)\n\t\t\t.removeClass('success')\n\t\t\t.removeClass('error')\n\t\t\t.stop(true, true)\n\t\t\t.show()\n\t},\n\n\t/**\n\t * Displayes an success/error message in the given selector\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {object} response Response of the server\n\t * @param {object} response.data Data of the servers response\n\t * @param {string} response.data.message Plain text message to display (no HTML allowed)\n\t * @param {string} response.status is being used to decide whether the message\n\t * is displayed as an error/success\n\t */\n\tfinishedSaving(selector, response) {\n\t\tthis.finishedAction(selector, response)\n\t},\n\n\t/**\n\t * Displayes an success/error message in the given selector\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {object} response Response of the server\n\t * @param {object} response.data Data of the servers response\n\t * @param {string} response.data.message Plain text message to display (no HTML allowed)\n\t * @param {string} response.status is being used to decide whether the message\n\t * is displayed as an error/success\n\t */\n\tfinishedAction(selector, response) {\n\t\tif (response.status === 'success') {\n\t\t\tthis.finishedSuccess(selector, response.data.message)\n\t\t} else {\n\t\t\tthis.finishedError(selector, response.data.message)\n\t\t}\n\t},\n\n\t/**\n\t * Displayes an success message in the given selector\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {string} message Plain text success message to display (no HTML allowed)\n\t */\n\tfinishedSuccess(selector, message) {\n\t\t$(selector).text(message)\n\t\t\t.addClass('success')\n\t\t\t.removeClass('error')\n\t\t\t.stop(true, true)\n\t\t\t.delay(3000)\n\t\t\t.fadeOut(900)\n\t\t\t.show()\n\t},\n\n\t/**\n\t * Displayes an error message in the given selector\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {string} message Plain text error message to display (no HTML allowed)\n\t */\n\tfinishedError(selector, message) {\n\t\t$(selector).text(message)\n\t\t\t.addClass('error')\n\t\t\t.removeClass('success')\n\t\t\t.show()\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport moment from 'moment'\nimport { generateUrl } from '@nextcloud/router'\n\nimport OC from './index'\n\n/**\n * @namespace OC.PasswordConfirmation\n */\nexport default {\n\tcallback: null,\n\n\tpageLoadTime: null,\n\n\tinit() {\n\t\t$('.password-confirm-required').on('click', _.bind(this.requirePasswordConfirmation, this))\n\t\tthis.pageLoadTime = moment.now()\n\t},\n\n\trequiresPasswordConfirmation() {\n\t\tconst serverTimeDiff = this.pageLoadTime - (window.nc_pageLoad * 1000)\n\t\tconst timeSinceLogin = moment.now() - (serverTimeDiff + (window.nc_lastLogin * 1000))\n\n\t\t// if timeSinceLogin > 30 minutes and user backend allows password confirmation\n\t\treturn (window.backendAllowsPasswordConfirmation && timeSinceLogin > 30 * 60 * 1000)\n\t},\n\n\t/**\n\t * @param {Function} callback success callback function\n\t * @param {object} options options\n\t * @param {Function} rejectCallback error callback function\n\t */\n\trequirePasswordConfirmation(callback, options, rejectCallback) {\n\t\toptions = typeof options !== 'undefined' ? options : {}\n\t\tconst defaults = {\n\t\t\ttitle: t('core', 'Authentication required'),\n\t\t\ttext: t(\n\t\t\t\t'core',\n\t\t\t\t'This action requires you to confirm your password'\n\t\t\t),\n\t\t\tconfirm: t('core', 'Confirm'),\n\t\t\tlabel: t('core', 'Password'),\n\t\t\terror: '',\n\t\t}\n\n\t\tconst config = _.extend(defaults, options)\n\n\t\tconst self = this\n\n\t\tif (this.requiresPasswordConfirmation()) {\n\t\t\tOC.dialogs.prompt(\n\t\t\t\tconfig.text,\n\t\t\t\tconfig.title,\n\t\t\t\tfunction(result, password) {\n\t\t\t\t\tif (result && password !== '') {\n\t\t\t\t\t\tself._confirmPassword(password, config)\n\t\t\t\t\t} else if (_.isFunction(rejectCallback)) {\n\t\t\t\t\t\trejectCallback()\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttrue,\n\t\t\t\tconfig.label,\n\t\t\t\ttrue\n\t\t\t).then(function() {\n\t\t\t\tconst $dialog = $('.oc-dialog:visible')\n\t\t\t\t$dialog.find('.ui-icon').remove()\n\t\t\t\t$dialog.addClass('password-confirmation')\n\t\t\t\tif (config.error !== '') {\n\t\t\t\t\tconst $error = $('<p></p>').addClass('msg warning').text(config.error)\n\t\t\t\t\t$dialog.find('.oc-dialog-content').append($error)\n\t\t\t\t}\n\t\t\t\t$dialog.find('.oc-dialog-buttonrow').addClass('aside')\n\n\t\t\t\tconst $buttons = $dialog.find('button')\n\t\t\t\t$buttons.eq(0).hide()\n\t\t\t\t$buttons.eq(1).text(config.confirm)\n\t\t\t})\n\t\t}\n\n\t\tthis.callback = callback\n\t},\n\n\t_confirmPassword(password, config) {\n\t\tconst self = this\n\n\t\t$.ajax({\n\t\t\turl: generateUrl('/login/confirm'),\n\t\t\tdata: {\n\t\t\t\tpassword,\n\t\t\t},\n\t\t\ttype: 'POST',\n\t\t\tsuccess(response) {\n\t\t\t\twindow.nc_lastLogin = response.lastLogin\n\n\t\t\t\tif (_.isFunction(self.callback)) {\n\t\t\t\t\tself.callback()\n\t\t\t\t}\n\t\t\t},\n\t\t\terror() {\n\t\t\t\tconfig.error = t('core', 'Failed to authenticate, try again')\n\t\t\t\tOC.PasswordConfirmation.requirePasswordConfirmation(self.callback, config)\n\t\t\t},\n\t\t})\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const theme = window._theme || {}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\nimport OC from './index'\n\n/**\n * Utility class for the history API,\n * includes fallback to using the URL hash when\n * the browser doesn't support the history API.\n *\n * @namespace OC.Util.History\n */\nexport default {\n\n\t_handlers: [],\n\n\t/**\n\t * Push the current URL parameters to the history stack\n\t * and change the visible URL.\n\t * Note: this includes a workaround for IE8/IE9 that uses\n\t * the hash part instead of the search part.\n\t *\n\t * @param {object | string} params to append to the URL, can be either a string\n\t * or a map\n\t * @param {string} [url] URL to be used, otherwise the current URL will be used,\n\t * using the params as query string\n\t * @param {boolean} [replace=false] whether to replace instead of pushing\n\t */\n\t_pushState(params, url, replace) {\n\t\tlet strParams\n\t\tif (typeof (params) === 'string') {\n\t\t\tstrParams = params\n\t\t} else {\n\t\t\tstrParams = OC.buildQueryString(params)\n\t\t}\n\n\t\tif (window.history.pushState) {\n\t\t\turl = url || location.pathname + '?' + strParams\n\t\t\t// Workaround for bug with SVG and window.history.pushState on Firefox < 51\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=652991\n\t\t\tconst isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1\n\t\t\tif (isFirefox && parseInt(navigator.userAgent.split('/').pop()) < 51) {\n\t\t\t\tconst patterns = document.querySelectorAll('[fill^=\"url(#\"], [stroke^=\"url(#\"], [filter^=\"url(#invert\"]')\n\t\t\t\tfor (let i = 0, ii = patterns.length, pattern; i < ii; i++) {\n\t\t\t\t\tpattern = patterns[i]\n\t\t\t\t\t// eslint-disable-next-line no-self-assign\n\t\t\t\t\tpattern.style.fill = pattern.style.fill\n\t\t\t\t\t// eslint-disable-next-line no-self-assign\n\t\t\t\t\tpattern.style.stroke = pattern.style.stroke\n\t\t\t\t\tpattern.removeAttribute('filter')\n\t\t\t\t\tpattern.setAttribute('filter', 'url(#invert)')\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (replace) {\n\t\t\t\twindow.history.replaceState(params, '', url)\n\t\t\t} else {\n\t\t\t\twindow.history.pushState(params, '', url)\n\t\t\t}\n\t\t} else {\n\t\t\t// use URL hash for IE8\n\t\t\twindow.location.hash = '?' + strParams\n\t\t\t// inhibit next onhashchange that just added itself\n\t\t\t// to the event queue\n\t\t\tthis._cancelPop = true\n\t\t}\n\t},\n\n\t/**\n\t * Push the current URL parameters to the history stack\n\t * and change the visible URL.\n\t * Note: this includes a workaround for IE8/IE9 that uses\n\t * the hash part instead of the search part.\n\t *\n\t * @param {object | string} params to append to the URL, can be either a string or a map\n\t * @param {string} [url] URL to be used, otherwise the current URL will be used, using the params as query string\n\t */\n\tpushState(params, url) {\n\t\tthis._pushState(params, url, false)\n\t},\n\n\t/**\n\t * Push the current URL parameters to the history stack\n\t * and change the visible URL.\n\t * Note: this includes a workaround for IE8/IE9 that uses\n\t * the hash part instead of the search part.\n\t *\n\t * @param {object | string} params to append to the URL, can be either a string\n\t * or a map\n\t * @param {string} [url] URL to be used, otherwise the current URL will be used,\n\t * using the params as query string\n\t */\n\treplaceState(params, url) {\n\t\tthis._pushState(params, url, true)\n\t},\n\n\t/**\n\t * Add a popstate handler\n\t *\n\t * @param {Function} handler handler\n\t */\n\taddOnPopStateHandler(handler) {\n\t\tthis._handlers.push(handler)\n\t},\n\n\t/**\n\t * Parse a query string from the hash part of the URL.\n\t * (workaround for IE8 / IE9)\n\t *\n\t * @return {string}\n\t */\n\t_parseHashQuery() {\n\t\tconst hash = window.location.hash\n\t\tconst pos = hash.indexOf('?')\n\t\tif (pos >= 0) {\n\t\t\treturn hash.substr(pos + 1)\n\t\t}\n\t\tif (hash.length) {\n\t\t\t// remove hash sign\n\t\t\treturn hash.substr(1)\n\t\t}\n\t\treturn ''\n\t},\n\n\t_decodeQuery(query) {\n\t\treturn query.replace(/\\+/g, ' ')\n\t},\n\n\t/**\n\t * Parse the query/search part of the URL.\n\t * Also try and parse it from the URL hash (for IE8)\n\t *\n\t * @return {object} map of parameters\n\t */\n\tparseUrlQuery() {\n\t\tconst query = this._parseHashQuery()\n\t\tlet params\n\t\t// try and parse from URL hash first\n\t\tif (query) {\n\t\t\tparams = OC.parseQueryString(this._decodeQuery(query))\n\t\t}\n\t\t// else read from query attributes\n\t\tparams = _.extend(params || {}, OC.parseQueryString(this._decodeQuery(location.search)))\n\t\treturn params || {}\n\t},\n\n\t_onPopState(e) {\n\t\tif (this._cancelPop) {\n\t\t\tthis._cancelPop = false\n\t\t\treturn\n\t\t}\n\t\tlet params\n\t\tif (!this._handlers.length) {\n\t\t\treturn\n\t\t}\n\t\tparams = (e && e.state)\n\t\tif (_.isString(params)) {\n\t\t\tparams = OC.parseQueryString(params)\n\t\t} else if (!params) {\n\t\t\tparams = this.parseUrlQuery() || {}\n\t\t}\n\t\tfor (let i = 0; i < this._handlers.length; i++) {\n\t\t\tthis._handlers[i](params)\n\t\t}\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport moment from 'moment'\n\nimport History from './util-history'\nimport OC from './index'\nimport { formatFileSize as humanFileSize } from '@nextcloud/files'\n\n/**\n * @param {any} t -\n */\nfunction chunkify(t) {\n\t// Adapted from http://my.opera.com/GreyWyvern/blog/show.dml/1671288\n\tconst tz = []\n\tlet x = 0\n\tlet y = -1\n\tlet n = 0\n\tlet c\n\n\twhile (x < t.length) {\n\t\tc = t.charAt(x)\n\t\t// only include the dot in strings\n\t\tconst m = ((!n && c === '.') || (c >= '0' && c <= '9'))\n\t\tif (m !== n) {\n\t\t\t// next chunk\n\t\t\ty++\n\t\t\ttz[y] = ''\n\t\t\tn = m\n\t\t}\n\t\ttz[y] += c\n\t\tx++\n\t}\n\treturn tz\n}\n\n/**\n * Utility functions\n *\n * @namespace OC.Util\n */\nexport default {\n\n\tHistory,\n\n\t/**\n\t * @deprecated use https://nextcloud.github.io/nextcloud-files/modules/_humanfilesize_.html#formatfilesize\n\t */\n\thumanFileSize,\n\n\t/**\n\t * Returns a file size in bytes from a humanly readable string\n\t * Makes 2kB to 2048.\n\t * Inspired by computerFileSize in helper.php\n\t *\n\t * @param {string} string file size in human readable format\n\t * @return {number} or null if string could not be parsed\n\t *\n\t *\n\t */\n\tcomputerFileSize(string) {\n\t\tif (typeof string !== 'string') {\n\t\t\treturn null\n\t\t}\n\n\t\tconst s = string.toLowerCase().trim()\n\t\tlet bytes = null\n\n\t\tconst bytesArray = {\n\t\t\tb: 1,\n\t\t\tk: 1024,\n\t\t\tkb: 1024,\n\t\t\tmb: 1024 * 1024,\n\t\t\tm: 1024 * 1024,\n\t\t\tgb: 1024 * 1024 * 1024,\n\t\t\tg: 1024 * 1024 * 1024,\n\t\t\ttb: 1024 * 1024 * 1024 * 1024,\n\t\t\tt: 1024 * 1024 * 1024 * 1024,\n\t\t\tpb: 1024 * 1024 * 1024 * 1024 * 1024,\n\t\t\tp: 1024 * 1024 * 1024 * 1024 * 1024,\n\t\t}\n\n\t\tconst matches = s.match(/^[\\s+]?([0-9]*)(\\.([0-9]+))?( +)?([kmgtp]?b?)$/i)\n\t\tif (matches !== null) {\n\t\t\tbytes = parseFloat(s)\n\t\t\tif (!isFinite(bytes)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\t\tif (matches[5]) {\n\t\t\tbytes = bytes * bytesArray[matches[5]]\n\t\t}\n\n\t\tbytes = Math.round(bytes)\n\t\treturn bytes\n\t},\n\n\t/**\n\t * @param {string|number} timestamp timestamp\n\t * @param {string} format date format, see momentjs docs\n\t * @return {string} timestamp formatted as requested\n\t */\n\tformatDate(timestamp, format) {\n\t\tif (window.TESTING === undefined) {\n\t\t\tconsole.warn('OC.Util.formatDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment')\n\t\t}\n\t\tformat = format || 'LLL'\n\t\treturn moment(timestamp).format(format)\n\t},\n\n\t/**\n\t * @param {string|number} timestamp timestamp\n\t * @return {string} human readable difference from now\n\t */\n\trelativeModifiedDate(timestamp) {\n\t\tif (window.TESTING === undefined) {\n\t\t\tconsole.warn('OC.Util.relativeModifiedDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment')\n\t\t}\n\t\tconst diff = moment().diff(moment(timestamp))\n\t\tif (diff >= 0 && diff < 45000) {\n\t\t\treturn t('core', 'seconds ago')\n\t\t}\n\t\treturn moment(timestamp).fromNow()\n\t},\n\n\t/**\n\t * Returns the width of a generic browser scrollbar\n\t *\n\t * @return {number} width of scrollbar\n\t */\n\tgetScrollBarWidth() {\n\t\tif (this._scrollBarWidth) {\n\t\t\treturn this._scrollBarWidth\n\t\t}\n\n\t\tconst inner = document.createElement('p')\n\t\tinner.style.width = '100%'\n\t\tinner.style.height = '200px'\n\n\t\tconst outer = document.createElement('div')\n\t\touter.style.position = 'absolute'\n\t\touter.style.top = '0px'\n\t\touter.style.left = '0px'\n\t\touter.style.visibility = 'hidden'\n\t\touter.style.width = '200px'\n\t\touter.style.height = '150px'\n\t\touter.style.overflow = 'hidden'\n\t\touter.appendChild(inner)\n\n\t\tdocument.body.appendChild(outer)\n\t\tconst w1 = inner.offsetWidth\n\t\touter.style.overflow = 'scroll'\n\t\tlet w2 = inner.offsetWidth\n\t\tif (w1 === w2) {\n\t\t\tw2 = outer.clientWidth\n\t\t}\n\n\t\tdocument.body.removeChild(outer)\n\n\t\tthis._scrollBarWidth = (w1 - w2)\n\n\t\treturn this._scrollBarWidth\n\t},\n\n\t/**\n\t * Remove the time component from a given date\n\t *\n\t * @param {Date} date date\n\t * @return {Date} date with stripped time\n\t */\n\tstripTime(date) {\n\t\t// FIXME: likely to break when crossing DST\n\t\t// would be better to use a library like momentJS\n\t\treturn new Date(date.getFullYear(), date.getMonth(), date.getDate())\n\t},\n\n\t/**\n\t * Compare two strings to provide a natural sort\n\t *\n\t * @param {string} a first string to compare\n\t * @param {string} b second string to compare\n\t * @return {number} -1 if b comes before a, 1 if a comes before b\n\t * or 0 if the strings are identical\n\t */\n\tnaturalSortCompare(a, b) {\n\t\tlet x\n\t\tconst aa = chunkify(a)\n\t\tconst bb = chunkify(b)\n\n\t\tfor (x = 0; aa[x] && bb[x]; x++) {\n\t\t\tif (aa[x] !== bb[x]) {\n\t\t\t\tconst aNum = Number(aa[x]); const bNum = Number(bb[x])\n\t\t\t\t// note: == is correct here\n\t\t\t\t/* eslint-disable-next-line */\n\t\t\t\tif (aNum == aa[x] && bNum == bb[x]) {\n\t\t\t\t\treturn aNum - bNum\n\t\t\t\t} else {\n\t\t\t\t\t// Note: This locale setting isn't supported by all browsers but for the ones\n\t\t\t\t\t// that do there will be more consistency between client-server sorting\n\t\t\t\t\treturn aa[x].localeCompare(bb[x], OC.getLanguage())\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn aa.length - bb.length\n\t},\n\n\t/**\n\t * Calls the callback in a given interval until it returns true\n\t *\n\t * @param {Function} callback function to call on success\n\t * @param {number} interval in milliseconds\n\t */\n\twaitFor(callback, interval) {\n\t\tconst internalCallback = function() {\n\t\t\tif (callback() !== true) {\n\t\t\t\tsetTimeout(internalCallback, interval)\n\t\t\t}\n\t\t}\n\n\t\tinternalCallback()\n\t},\n\n\t/**\n\t * Checks if a cookie with the given name is present and is set to the provided value.\n\t *\n\t * @param {string} name name of the cookie\n\t * @param {string} value value of the cookie\n\t * @return {boolean} true if the cookie with the given name has the given value\n\t */\n\tisCookieSetToValue(name, value) {\n\t\tconst cookies = document.cookie.split(';')\n\t\tfor (let i = 0; i < cookies.length; i++) {\n\t\t\tconst cookie = cookies[i].split('=')\n\t\t\tif (cookie[0].trim() === name && cookie[1].trim() === value) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\treturn false\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst base = window._oc_debug\n\nexport const debug = base\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nlet webroot = window._oc_webroot\n\nif (typeof webroot === 'undefined') {\n\twebroot = location.pathname\n\tconst pos = webroot.indexOf('/index.php/')\n\tif (pos !== -1) {\n\t\twebroot = webroot.substr(0, pos)\n\t} else {\n\t\twebroot = webroot.substr(0, webroot.lastIndexOf('/'))\n\t}\n}\n\nexport default webroot\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const get = context => name => {\n\tconst namespaces = name.split('.')\n\tconst tail = namespaces.pop()\n\n\tfor (let i = 0; i < namespaces.length; i++) {\n\t\tcontext = context[namespaces[i]]\n\t\tif (!context) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn context[tail]\n}\n\n/**\n * Set a variable by name\n *\n * @param {string} context context\n * @return {Function} setter\n * @deprecated 19.0.0 use https://lodash.com/docs#set\n */\nexport const set = context => (name, value) => {\n\tconst namespaces = name.split('.')\n\tconst tail = namespaces.pop()\n\n\tfor (let i = 0; i < namespaces.length; i++) {\n\t\tif (!context[namespaces[i]]) {\n\t\t\tcontext[namespaces[i]] = {}\n\t\t}\n\t\tcontext = context[namespaces[i]]\n\t}\n\tcontext[tail] = value\n\treturn value\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { subscribe } from '@nextcloud/event-bus'\n\nimport { addScript, addStyle } from './legacy-loader'\nimport {\n\tajaxConnectionLostHandler,\n\tprocessAjaxError,\n\tregisterXHRForErrorProcessing,\n} from './xhr-error'\nimport Apps from './apps'\nimport { AppConfig, appConfig } from './appconfig'\nimport { appSettings } from './appsettings'\nimport appswebroots from './appswebroots'\nimport Backbone from './backbone'\nimport {\n\tbasename,\n\tdirname,\n\tencodePath,\n\tisSamePath,\n\tjoinPaths,\n} from '@nextcloud/paths'\nimport {\n\tbuild as buildQueryString,\n\tparse as parseQueryString,\n} from './query-string'\nimport Config from './config'\nimport {\n\tcoreApps,\n\tmenuSpeed,\n\tPERMISSION_ALL,\n\tPERMISSION_CREATE,\n\tPERMISSION_DELETE,\n\tPERMISSION_NONE,\n\tPERMISSION_READ,\n\tPERMISSION_SHARE,\n\tPERMISSION_UPDATE,\n\tTAG_FAVORITE,\n} from './constants'\nimport ContactsMenu from './contactsmenu'\nimport { currentUser, getCurrentUser } from './currentuser'\nimport Dialogs from './dialogs'\nimport EventSource from './eventsource'\nimport { get, set } from './get_set'\nimport { getCapabilities } from './capabilities'\nimport {\n\tgetHost,\n\tgetHostName,\n\tgetPort,\n\tgetProtocol,\n} from './host'\nimport {\n\tgetToken as getRequestToken,\n} from './requesttoken'\nimport {\n\thideMenus,\n\tregisterMenu,\n\tshowMenu,\n\tunregisterMenu,\n} from './menu'\nimport { isUserAdmin } from './admin'\nimport L10N, {\n\tgetLanguage,\n\tgetLocale,\n} from './l10n'\nimport {\n\tgetCanonicalLocale,\n} from '@nextcloud/l10n'\n\nimport {\n\tgenerateUrl,\n\tgenerateFilePath,\n\tgenerateOcsUrl,\n\tgenerateRemoteUrl,\n\tgetRootUrl,\n\timagePath,\n\tlinkTo,\n} from '@nextcloud/router'\n\nimport {\n\tlinkToRemoteBase,\n} from './routing'\nimport msg from './msg'\nimport Notification from './notification'\nimport PasswordConfirmation from './password-confirmation'\nimport Plugins from './plugins'\nimport { theme } from './theme'\nimport Util from './util'\nimport { debug } from './debug'\nimport { redirect, reload } from './navigation'\nimport webroot from './webroot'\n\n/** @namespace OC */\nexport default {\n\t/*\n\t * Constants\n\t */\n\tcoreApps,\n\tmenuSpeed,\n\tPERMISSION_ALL,\n\tPERMISSION_CREATE,\n\tPERMISSION_DELETE,\n\tPERMISSION_NONE,\n\tPERMISSION_READ,\n\tPERMISSION_SHARE,\n\tPERMISSION_UPDATE,\n\tTAG_FAVORITE,\n\n\t/*\n\t * Deprecated helpers to be removed\n\t */\n\t/**\n\t * Check if a user file is allowed to be handled.\n\t *\n\t * @param {string} file to check\n\t * @return {boolean}\n\t * @deprecated 17.0.0\n\t */\n\tfileIsBlacklisted: file => !!(file.match(Config.blacklist_files_regex)),\n\n\taddScript,\n\taddStyle,\n\tApps,\n\tAppConfig,\n\tappConfig,\n\tappSettings,\n\tappswebroots,\n\tBackbone,\n\tContactsMenu,\n\tconfig: Config,\n\t/**\n\t * Currently logged in user or null if none\n\t *\n\t * @type {string}\n\t * @deprecated use `getCurrentUser` from https://www.npmjs.com/package/@nextcloud/auth\n\t */\n\tcurrentUser,\n\tdialogs: Dialogs,\n\tEventSource,\n\t/**\n\t * Returns the currently logged in user or null if there is no logged in\n\t * user (public page mode)\n\t *\n\t * @since 9.0.0\n\t * @deprecated 19.0.0 use `getCurrentUser` from https://www.npmjs.com/package/@nextcloud/auth\n\t */\n\tgetCurrentUser,\n\tisUserAdmin,\n\tL10N,\n\n\t/**\n\t * Ajax error handlers\n\t *\n\t * @todo remove from here and keep internally -> requires new tests\n\t */\n\t_ajaxConnectionLostHandler: ajaxConnectionLostHandler,\n\t_processAjaxError: processAjaxError,\n\tregisterXHRForErrorProcessing,\n\n\t/**\n\t * Capabilities\n\t *\n\t * @type {Array}\n\t * @deprecated 20.0.0 use @nextcloud/capabilities instead\n\t */\n\tgetCapabilities,\n\n\t/*\n\t * Legacy menu helpers\n\t */\n\thideMenus,\n\tregisterMenu,\n\tshowMenu,\n\tunregisterMenu,\n\n\t/*\n\t * Path helpers\n\t */\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tbasename,\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tencodePath,\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tdirname,\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tisSamePath,\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tjoinPaths,\n\n\t/**\n\t * Host (url) helpers\n\t */\n\tgetHost,\n\tgetHostName,\n\tgetPort,\n\tgetProtocol,\n\n\t/**\n\t * @deprecated 20.0.0 use `getCanonicalLocale` from https://www.npmjs.com/package/@nextcloud/l10n\n\t */\n\tgetCanonicalLocale,\n\tgetLocale,\n\tgetLanguage,\n\t/**\n\t * Loads translations for the given app asynchronously.\n\t *\n\t * @param {string} app app name\n\t * @param {Function} callback callback to call after loading\n\t * @return {Promise}\n\t * @deprecated 17.0.0 use OC.L10N.load instead\n\t */\n\taddTranslations: L10N.load,\n\n\t/**\n\t * Query string helpers\n\t */\n\tbuildQueryString,\n\tparseQueryString,\n\n\tmsg,\n\tNotification,\n\tPasswordConfirmation,\n\tPlugins,\n\ttheme,\n\tUtil,\n\tdebug,\n\t/**\n\t * @deprecated 19.0.0 use `generateFilePath` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tfilePath: generateFilePath,\n\t/**\n\t * @deprecated 19.0.0 use `generateUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tgenerateUrl,\n\t/**\n\t * @deprecated 19.0.0 use https://lodash.com/docs#get\n\t */\n\tget: get(window),\n\t/**\n\t * @deprecated 19.0.0 use https://lodash.com/docs#set\n\t */\n\tset: set(window),\n\t/**\n\t * @deprecated 19.0.0 use `getRootUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tgetRootPath: getRootUrl,\n\t/**\n\t * @deprecated 19.0.0 use `imagePath` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\timagePath,\n\tredirect,\n\treload,\n\trequestToken: getRequestToken(),\n\t/**\n\t * @deprecated 19.0.0 use `linkTo` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tlinkTo,\n\t/**\n\t * @param {string} service service name\n\t * @param {number} version OCS API version\n\t * @return {string} OCS API base path\n\t * @deprecated 19.0.0 use `generateOcsUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tlinkToOCS: (service, version) => {\n\t\treturn generateOcsUrl(service, {}, {\n\t\t\tocsVersion: version || 1,\n\t\t}) + '/'\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `generateRemoteUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tlinkToRemote: generateRemoteUrl,\n\tlinkToRemoteBase,\n\t/**\n\t * Relative path to Nextcloud root.\n\t * For example: \"/nextcloud\"\n\t *\n\t * @type {string}\n\t *\n\t * @deprecated 19.0.0 use `getRootUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t * @see OC#getRootPath\n\t */\n\twebroot,\n}\n\n// Keep the request token prop in sync\nsubscribe('csrf-token-update', e => {\n\tOC.requestToken = e.token\n\n\t// Logging might help debug (Sentry) issues\n\tconsole.info('OC.requestToken changed', e.token)\n})\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport $ from 'jquery'\nimport { filePath } from './routing'\nimport { generateFilePath } from \"@nextcloud/router\"\n\n/**\n * Opens a popup with the setting for an app.\n * @param {string} appid The ID of the app e.g. 'calendar', 'contacts' or 'files'.\n * @param {boolean|string} loadJS If true 'js/settings.js' is loaded. If it's a string\n * it will attempt to load a script by that name in the 'js' directory.\n * @param {boolean} [cache] If true the javascript file won't be forced refreshed. Defaults to true.\n * @param {string} [scriptName] The name of the PHP file to load. Defaults to 'settings.php' in\n * the root of the app directory hierarchy.\n *\n * @deprecated 17.0.0 this method is unused and will be removed with Nextcloud 18\n */\nexport const appSettings = args => {\n\tconsole.warn('OC.appSettings is deprecated and will be removed with Nextcloud 18')\n\n\tif (typeof args === 'undefined' || typeof args.appid === 'undefined') {\n\t\tthrow {\n\t\t\tname: 'MissingParameter',\n\t\t\tmessage: 'The parameter appid is missing'\n\t\t}\n\t}\n\tvar props = { scriptName: 'settings.php', cache: true }\n\t$.extend(props, args)\n\tvar settings = $('#appsettings')\n\tif (settings.length === 0) {\n\t\tthrow {\n\t\t\tname: 'MissingDOMElement',\n\t\t\tmessage: 'There has be be an element with id \"appsettings\" for the popup to show.'\n\t\t}\n\t}\n\tvar popup = $('#appsettings_popup')\n\tif (popup.length === 0) {\n\t\t$('body').prepend('<div class=\"popup hidden\" id=\"appsettings_popup\"></div>')\n\t\tpopup = $('#appsettings_popup')\n\t\tpopup.addClass(settings.hasClass('topright') ? 'topright' : 'bottomleft')\n\t}\n\tif (popup.is(':visible')) {\n\t\tpopup.hide().remove()\n\t} else {\n\t\tconst arrowclass = settings.hasClass('topright') ? 'up' : 'left'\n\t\t$.get(generateFilePath(props.appid, '', props.scriptName), function(data) {\n\t\t\tpopup.html(data).ready(function() {\n\t\t\t\tpopup.prepend('<span class=\"arrow ' + arrowclass + '\"></span><h2>' + t('core', 'Settings') + '</h2><a class=\"close\"></a>').show()\n\t\t\t\tpopup.find('.close').bind('click', function() {\n\t\t\t\t\tpopup.remove()\n\t\t\t\t})\n\t\t\t\tif (typeof props.loadJS !== 'undefined') {\n\t\t\t\t\tvar scriptname\n\t\t\t\t\tif (props.loadJS === true) {\n\t\t\t\t\t\tscriptname = 'settings.js'\n\t\t\t\t\t} else if (typeof props.loadJS === 'string') {\n\t\t\t\t\t\tscriptname = props.loadJS\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow {\n\t\t\t\t\t\t\tname: 'InvalidParameter',\n\t\t\t\t\t\t\tmessage: 'The \"loadJS\" parameter must be either boolean or a string.'\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (props.cache) {\n\t\t\t\t\t\t$.ajaxSetup({ cache: true })\n\t\t\t\t\t}\n\t\t\t\t\t$.getScript(generateFilePath(props.appid, 'js', scriptname))\n\t\t\t\t\t\t.fail(function(jqxhr, settings, e) {\n\t\t\t\t\t\t\tthrow e\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}).show()\n\t\t}, 'html')\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getCapabilities as realGetCapabilities } from '@nextcloud/capabilities'\n\n/**\n * Returns the capabilities\n *\n * @return {Array} capabilities\n *\n * @since 14.0.0\n */\nexport const getCapabilities = () => {\n\tconsole.warn('OC.getCapabilities is deprecated and will be removed in Nextcloud 21. See @nextcloud/capabilities')\n\treturn realGetCapabilities()\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const getProtocol = () => window.location.protocol.split(':')[0]\n\n/**\n * Returns the host used to access this Nextcloud instance\n * Host is sometimes the same as the hostname but now always.\n *\n * Examples:\n * http://example.com => example.com\n * https://example.com => example.com\n * http://example.com:8080 => example.com:8080\n *\n * @return {string} host\n *\n * @since 8.2.0\n * @deprecated 17.0.0 use window.location.host directly\n */\nexport const getHost = () => window.location.host\n\n/**\n * Returns the hostname used to access this Nextcloud instance\n * The hostname is always stripped of the port\n *\n * @return {string} hostname\n * @since 9.0.0\n * @deprecated 17.0.0 use window.location.hostname directly\n */\nexport const getHostName = () => window.location.hostname\n\n/**\n * Returns the port number used to access this Nextcloud instance\n *\n * @return {number} port number\n *\n * @since 8.2.0\n * @deprecated 17.0.0 use window.location.port directly\n */\nexport const getPort = () => window.location.port\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * Parses a URL query string into a JS map\n *\n * @param {string} queryString query string in the format param1=1234&param2=abcde&param3=xyz\n * @return {Object<string, string>} map containing key/values matching the URL parameters\n */\nexport const parse = queryString => {\n\tlet pos\n\tlet components\n\tconst result = {}\n\tlet key\n\tif (!queryString) {\n\t\treturn null\n\t}\n\tpos = queryString.indexOf('?')\n\tif (pos >= 0) {\n\t\tqueryString = queryString.substr(pos + 1)\n\t}\n\tconst parts = queryString.replace(/\\+/g, '%20').split('&')\n\tfor (let i = 0; i < parts.length; i++) {\n\t\t// split on first equal sign\n\t\tconst part = parts[i]\n\t\tpos = part.indexOf('=')\n\t\tif (pos >= 0) {\n\t\t\tcomponents = [\n\t\t\t\tpart.substr(0, pos),\n\t\t\t\tpart.substr(pos + 1),\n\t\t\t]\n\t\t} else {\n\t\t\t// key only\n\t\t\tcomponents = [part]\n\t\t}\n\t\tif (!components.length) {\n\t\t\tcontinue\n\t\t}\n\t\tkey = decodeURIComponent(components[0])\n\t\tif (!key) {\n\t\t\tcontinue\n\t\t}\n\t\t// if equal sign was there, return string\n\t\tif (components.length > 1) {\n\t\t\tresult[key] = decodeURIComponent(components[1])\n\t\t} else {\n\t\t\t// no equal sign => null value\n\t\t\tresult[key] = null\n\t\t}\n\t}\n\treturn result\n}\n\n/**\n * Builds a URL query from a JS map.\n *\n * @param {Object<string, string>} params map containing key/values matching the URL parameters\n * @return {string} String containing a URL query (without question) mark\n */\nexport const build = params => {\n\tif (!params) {\n\t\treturn ''\n\t}\n\treturn $.map(params, function(value, key) {\n\t\tlet s = encodeURIComponent(key)\n\t\tif (value !== null && typeof (value) !== 'undefined') {\n\t\t\ts += '=' + encodeURIComponent(value)\n\t\t}\n\t\treturn s\n\t}).join('&')\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default {\n\n\t/**\n\t * @type {Array.<OC.Plugin>}\n\t */\n\t_plugins: {},\n\n\t/**\n\t * Register plugin\n\t *\n\t * @param {string} targetName app name / class name to hook into\n\t * @param {OC.Plugin} plugin plugin\n\t */\n\tregister(targetName, plugin) {\n\t\tlet plugins = this._plugins[targetName]\n\t\tif (!plugins) {\n\t\t\tplugins = this._plugins[targetName] = []\n\t\t}\n\t\tplugins.push(plugin)\n\t},\n\n\t/**\n\t * Returns all plugin registered to the given target\n\t * name / app name / class name.\n\t *\n\t * @param {string} targetName app name / class name to hook into\n\t * @return {Array.<OC.Plugin>} array of plugins\n\t */\n\tgetPlugins(targetName) {\n\t\treturn this._plugins[targetName] || []\n\t},\n\n\t/**\n\t * Call attach() on all plugins registered to the given target name.\n\t *\n\t * @param {string} targetName app name / class name\n\t * @param {object} targetObject to be extended\n\t * @param {object} [options] options\n\t */\n\tattach(targetName, targetObject, options) {\n\t\tconst plugins = this.getPlugins(targetName)\n\t\tfor (let i = 0; i < plugins.length; i++) {\n\t\t\tif (plugins[i].attach) {\n\t\t\t\tplugins[i].attach(targetObject, options)\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Call detach() on all plugins registered to the given target name.\n\t *\n\t * @param {string} targetName app name / class name\n\t * @param {object} targetObject to be extended\n\t * @param {object} [options] options\n\t */\n\tdetach(targetName, targetObject, options) {\n\t\tconst plugins = this.getPlugins(targetName)\n\t\tfor (let i = 0; i < plugins.length; i++) {\n\t\t\tif (plugins[i].detach) {\n\t\t\t\tplugins[i].detach(targetObject, options)\n\t\t\t}\n\t\t}\n\t},\n\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const redirect = targetURL => { window.location = targetURL }\n\n/**\n * Reloads the current page\n *\n * @deprecated 17.0.0 use window.location.reload directly\n */\nexport const reload = () => { window.location.reload() }\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport {\n\tgetRootUrl as realGetRootUrl,\n} from '@nextcloud/router'\n\n/**\n * Creates a relative url for remote use\n *\n * @param {string} service id\n * @return {string} the url\n */\nexport const linkToRemoteBase = service => {\n\treturn realGetRootUrl() + '/remote.php/' + service\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\nimport { emit } from '@nextcloud/event-bus'\nimport { loadState } from '@nextcloud/initial-state'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { generateUrl } from '@nextcloud/router'\n\nimport OC from './OC'\nimport { setToken as setRequestToken, getToken as getRequestToken } from './OC/requesttoken'\n\nlet config = null\n/**\n * The legacy jsunit tests overwrite OC.config before calling initCore\n * therefore we need to wait with assigning the config fallback until initCore calls initSessionHeartBeat\n */\nconst loadConfig = () => {\n\ttry {\n\t\tconfig = loadState('core', 'config')\n\t} catch (e) {\n\t\t// This fallback is just for our legacy jsunit tests since we have no way to mock loadState calls\n\t\tconfig = OC.config\n\t}\n}\n\n/**\n * session heartbeat (defaults to enabled)\n *\n * @return {boolean}\n */\nconst keepSessionAlive = () => {\n\treturn config.session_keepalive === undefined\n\t\t|| !!config.session_keepalive\n}\n\n/**\n * get interval in seconds\n *\n * @return {number}\n */\nconst getInterval = () => {\n\tlet interval = NaN\n\tif (config.session_lifetime) {\n\t\tinterval = Math.floor(config.session_lifetime / 2)\n\t}\n\n\t// minimum one minute, max 24 hours, default 15 minutes\n\treturn Math.min(\n\t\t24 * 3600,\n\t\tMath.max(\n\t\t\t60,\n\t\t\tisNaN(interval) ? 900 : interval\n\t\t)\n\t)\n}\n\nconst getToken = async () => {\n\tconst url = generateUrl('/csrftoken')\n\n\t// Not using Axios here as Axios is not stubbable with the sinon fake server\n\t// see https://stackoverflow.com/questions/41516044/sinon-mocha-test-with-async-ajax-calls-didnt-return-promises\n\t// see js/tests/specs/coreSpec.js for the tests\n\tconst resp = await $.get(url)\n\n\treturn resp.token\n}\n\nconst poll = async () => {\n\ttry {\n\t\tconst token = await getToken()\n\t\tsetRequestToken(token)\n\t} catch (e) {\n\t\tconsole.error('session heartbeat failed', e)\n\t}\n}\n\nconst startPolling = () => {\n\tconst interval = setInterval(poll, getInterval() * 1000)\n\n\tconsole.info('session heartbeat polling started')\n\n\treturn interval\n}\n\nconst registerAutoLogout = () => {\n\tif (!config.auto_logout || !getCurrentUser()) {\n\t\treturn\n\t}\n\n\tlet lastActive = Date.now()\n\twindow.addEventListener('mousemove', e => {\n\t\tlastActive = Date.now()\n\t\tlocalStorage.setItem('lastActive', lastActive)\n\t})\n\n\twindow.addEventListener('touchstart', e => {\n\t\tlastActive = Date.now()\n\t\tlocalStorage.setItem('lastActive', lastActive)\n\t})\n\n\twindow.addEventListener('storage', e => {\n\t\tif (e.key !== 'lastActive') {\n\t\t\treturn\n\t\t}\n\t\tlastActive = e.newValue\n\t})\n\n\tsetInterval(function() {\n\t\tconst timeout = Date.now() - config.session_lifetime * 1000\n\t\tif (lastActive < timeout) {\n\t\t\tconsole.info('Inactivity timout reached, logging out')\n\t\t\tconst logoutUrl = generateUrl('/logout') + '?requesttoken=' + encodeURIComponent(getRequestToken())\n\t\t\twindow.location = logoutUrl\n\t\t}\n\t}, 1000)\n}\n\n/**\n * Calls the server periodically to ensure that session and CSRF\n * token doesn't expire\n */\nexport const initSessionHeartBeat = () => {\n\tloadConfig()\n\n\tregisterAutoLogout()\n\n\tif (!keepSessionAlive()) {\n\t\tconsole.info('session heartbeat disabled')\n\t\treturn\n\t}\n\tlet interval = startPolling()\n\n\twindow.addEventListener('online', async () => {\n\t\tconsole.info('browser is online again, resuming heartbeat')\n\t\tinterval = startPolling()\n\t\ttry {\n\t\t\tawait poll()\n\t\t\tconsole.info('session token successfully updated after resuming network')\n\n\t\t\t// Let apps know we're online and requests will have the new token\n\t\t\temit('networkOnline', {\n\t\t\t\tsuccess: true,\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.error('could not update session token after resuming network', e)\n\n\t\t\t// Let apps know we're online but requests might have an outdated token\n\t\t\temit('networkOnline', {\n\t\t\t\tsuccess: false,\n\t\t\t})\n\t\t}\n\t})\n\twindow.addEventListener('offline', () => {\n\t\tconsole.info('browser is offline, stopping heartbeat')\n\n\t\t// Let apps know we're offline\n\t\temit('networkOffline', {})\n\n\t\tclearInterval(interval)\n\t\tconsole.info('session heartbeat polling stopped')\n\t})\n}\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContactsMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContactsMenu.vue?vue&type=script&lang=js&\"","<!--\n - @copyright 2023 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n-->\n\n<template>\n\t<NcHeaderMenu id=\"contactsmenu\"\n\t\t:aria-label=\"t('core', 'Search contacts')\"\n\t\t@open=\"handleOpen\">\n\t\t<template #trigger>\n\t\t\t<Contacts :size=\"20\" />\n\t\t</template>\n\t\t<div id=\"contactsmenu-menu\" />\n\t</NcHeaderMenu>\n</template>\n\n<script>\nimport NcHeaderMenu from '@nextcloud/vue/dist/Components/NcHeaderMenu.js'\n\nimport Contacts from 'vue-material-design-icons/Contacts.vue'\n\nimport OC from '../OC/index.js'\n\nexport default {\n\tname: 'ContactsMenu',\n\n\tcomponents: {\n\t\tContacts,\n\t\tNcHeaderMenu,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tcontactsMenu: null,\n\t\t}\n\t},\n\n\tmounted() {\n\t\t// eslint-disable-next-line no-new\n\t\tthis.contactsMenu = new OC.ContactsMenu({\n\t\t\tel: '#contactsmenu-menu',\n\t\t})\n\t},\n\n\tmethods: {\n\t\thandleOpen() {\n\t\t\tthis.contactsMenu?.loadContacts()\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n#contactsmenu-menu {\n\t/* show 2.5 to 4.5 entries depending on the screen height */\n\theight: calc(100vh - 50px * 3);\n\tmax-height: calc(50px * 6 + 2px);\n\tmin-height: calc(50px * 3.5);\n\twidth: 350px;\n\n\t&:deep {\n\t\t.emptycontent {\n\t\t\tmargin-top: 5vh !important;\n\t\t\tmargin-bottom: 1.5vh;\n\t\t\t.icon-loading,\n\t\t\t.icon-search {\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\t\t}\n\n\t\t#contactsmenu-search {\n\t\t\twidth: calc(100% - 16px);\n\t\t\tmargin: 8px;\n\t\t\theight: 34px;\n\t\t}\n\n\t\t.content {\n\t\t\t/* fixed max height of the parent container without the search input */\n\t\t\theight: calc(100vh - 50px * 3 - 50px);\n\t\t\tmax-height: calc(50px * 5);\n\t\t\tmin-height: calc(50px * 3.5 - 50px);\n\t\t\toverflow-y: auto;\n\n\t\t\t.footer {\n\t\t\t\ttext-align: center;\n\n\t\t\t\ta {\n\t\t\t\t\tdisplay: block;\n\t\t\t\t\twidth: 100%;\n\t\t\t\t\tpadding: 12px 0;\n\t\t\t\t\topacity: .5;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ta {\n\t\t\tpadding: 2px;\n\n\t\t\t&:focus-visible {\n\t\t\t\tbox-shadow: inset 0 0 0 2px var(--color-main-text) !important; // override rule in core/css/headers.scss #header a:focus-visible\n\t\t\t}\n\t\t}\n\n\t\t.contact {\n\t\t\tdisplay: flex;\n\t\t\tposition: relative;\n\t\t\talign-items: center;\n\t\t\tpadding: 3px 3px 3px 10px;\n\n\t\t\t.avatar {\n\t\t\t\theight: 32px;\n\t\t\t\twidth: 32px;\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\n\t\t\t.body {\n\t\t\t\tflex-grow: 1;\n\t\t\t\tpadding-left: 8px;\n\t\t\t\tmin-width: 0;\n\n\t\t\t\tdiv {\n\t\t\t\t\tposition: relative;\n\t\t\t\t\twidth: 100%;\n\t\t\t\t\toverflow-x: hidden;\n\t\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\t}\n\n\t\t\t\t.last-message, .email-address {\n\t\t\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.top-action, .second-action, .other-actions {\n\t\t\t\twidth: 16px;\n\t\t\t\theight: 16px;\n\t\t\t\topacity: .5;\n\t\t\t\tcursor: pointer;\n\n\t\t\t\t&:not(button) {\n\t\t\t\t\tpadding: 14px;\n\t\t\t\t}\n\t\t\t\timg {\n\t\t\t\t\tfilter: var(--background-invert-if-dark);\n\t\t\t\t}\n\n\t\t\t\t&:hover,\n\t\t\t\t&:active,\n\t\t\t\t&:focus {\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbutton.other-actions {\n\t\t\t\twidth: 44px;\n\n\t\t\t\t&:focus {\n\t\t\t\t\tborder-color: transparent;\n\t\t\t\t\tbox-shadow: 0 0 0 2px var(--color-main-text);\n\t\t\t\t}\n\n\t\t\t\t&:focus-visible {\n\t\t\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/* actions menu */\n\t\t\t.menu {\n\t\t\t\ttop: 47px;\n\t\t\t\tmargin-right: 13px;\n\t\t\t}\n\t\t\t.popovermenu::after {\n\t\t\t\tright: 2px;\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContactsMenu.vue?vue&type=style&index=0&id=1563c388&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContactsMenu.vue?vue&type=style&index=0&id=1563c388&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ContactsMenu.vue?vue&type=template&id=1563c388&scoped=true&\"\nimport script from \"./ContactsMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./ContactsMenu.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ContactsMenu.vue?vue&type=style&index=0&id=1563c388&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1563c388\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcHeaderMenu',{attrs:{\"id\":\"contactsmenu\",\"aria-label\":_vm.t('core', 'Search contacts')},on:{\"open\":_vm.handleOpen},scopedSlots:_vm._u([{key:\"trigger\",fn:function(){return [_c('Contacts',{attrs:{\"size\":20}})]},proxy:true}])},[_vm._v(\" \"),_c('div',{attrs:{\"id\":\"contactsmenu-menu\"}})])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2022 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<nav class=\"app-menu\">\n\t\t<ul class=\"app-menu-main\">\n\t\t\t<li v-for=\"app in mainAppList\"\n\t\t\t\t:key=\"app.id\"\n\t\t\t\t:data-app-id=\"app.id\"\n\t\t\t\tclass=\"app-menu-entry\"\n\t\t\t\t:class=\"{ 'app-menu-entry__active': app.active }\">\n\t\t\t\t<a :href=\"app.href\"\n\t\t\t\t\t:class=\"{ 'has-unread': app.unread > 0 }\"\n\t\t\t\t\t:aria-label=\"appLabel(app)\"\n\t\t\t\t\t:title=\"app.name\"\n\t\t\t\t\t:aria-current=\"app.active ? 'page' : false\"\n\t\t\t\t\t:target=\"app.target ? '_blank' : undefined\"\n\t\t\t\t\t:rel=\"app.target ? 'noopener noreferrer' : undefined\">\n\t\t\t\t\t<img :src=\"app.icon\" alt=\"\">\n\t\t\t\t\t<div class=\"app-menu-entry--label\">\n\t\t\t\t\t\t{{ app.name }}\n\t\t\t\t\t\t<span v-if=\"app.unread > 0\" class=\"hidden-visually unread-counter\">{{ app.unread }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</a>\n\t\t\t</li>\n\t\t</ul>\n\t\t<NcActions class=\"app-menu-more\" :aria-label=\"t('core', 'More apps')\">\n\t\t\t<NcActionLink v-for=\"app in popoverAppList\"\n\t\t\t\t:key=\"app.id\"\n\t\t\t\t:aria-label=\"appLabel(app)\"\n\t\t\t\t:aria-current=\"app.active ? 'page' : false\"\n\t\t\t\t:href=\"app.href\"\n\t\t\t\tclass=\"app-menu-popover-entry\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<div class=\"app-icon\" :class=\"{ 'has-unread': app.unread > 0 }\">\n\t\t\t\t\t\t<img :src=\"app.icon\" alt=\"\">\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\t\t\t\t{{ app.name }}\n\t\t\t\t<span v-if=\"app.unread > 0\" class=\"hidden-visually unread-counter\">{{ app.unread }}</span>\n\t\t\t</NcActionLink>\n\t\t</NcActions>\n\t</nav>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions'\nimport NcActionLink from '@nextcloud/vue/dist/Components/NcActionLink'\n\nexport default {\n\tname: 'AppMenu',\n\tcomponents: {\n\t\tNcActions, NcActionLink,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tapps: loadState('core', 'apps', {}),\n\t\t\tappLimit: 0,\n\t\t\tobserver: null,\n\t\t}\n\t},\n\tcomputed: {\n\t\tappList() {\n\t\t\treturn Object.values(this.apps)\n\t\t},\n\t\tmainAppList() {\n\t\t\treturn this.appList.slice(0, this.appLimit)\n\t\t},\n\t\tpopoverAppList() {\n\t\t\treturn this.appList.slice(this.appLimit)\n\t\t},\n\t\tappLabel() {\n\t\t\treturn (app) => app.name\n\t\t\t\t+ (app.active ? ' (' + t('core', 'Currently open') + ')' : '')\n\t\t\t\t+ (app.unread > 0 ? ' (' + n('core', '{count} notification', '{count} notifications', app.unread, { count: app.unread }) + ')' : '')\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.observer = new ResizeObserver(this.resize)\n\t\tthis.observer.observe(this.$el)\n\t\tthis.resize()\n\t\tsubscribe('nextcloud:app-menu.refresh', this.setApps)\n\t},\n\tbeforeDestroy() {\n\t\tthis.observer.disconnect()\n\t\tunsubscribe('nextcloud:app-menu.refresh', this.setApps)\n\t},\n\tmethods: {\n\t\tsetNavigationCounter(id, counter) {\n\t\t\tthis.$set(this.apps[id], 'unread', counter)\n\t\t},\n\t\tsetApps({ apps }) {\n\t\t\tthis.apps = apps\n\t\t},\n\t\tresize() {\n\t\t\tconst availableWidth = this.$el.offsetWidth\n\t\t\tlet appCount = Math.floor(availableWidth / 50) - 1\n\t\t\tconst popoverAppCount = this.appList.length - appCount\n\t\t\tif (popoverAppCount === 1) {\n\t\t\t\tappCount--\n\t\t\t}\n\t\t\tif (appCount < 1) {\n\t\t\t\tappCount = 0\n\t\t\t}\n\t\t\tthis.appLimit = appCount\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$header-icon-size: 20px;\n\n.app-menu {\n\twidth: 100%;\n\tdisplay: flex;\n\tflex-shrink: 1;\n\tflex-wrap: wrap;\n}\n.app-menu-main {\n\tdisplay: flex;\n\tflex-wrap: nowrap;\n\n\t.app-menu-entry {\n\t\twidth: 50px;\n\t\theight: 50px;\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t\topacity: .7;\n\t\tfilter: var(--background-image-invert-if-bright);\n\n\t\t&.app-menu-entry__active {\n\t\t\topacity: 1;\n\n\t\t\t&::before {\n\t\t\t\tcontent: \" \";\n\t\t\t\tposition: absolute;\n\t\t\t\tpointer-events: none;\n\t\t\t\tborder-bottom-color: var(--color-main-background);\n\t\t\t\ttransform: translateX(-50%);\n\t\t\t\twidth: 12px;\n\t\t\t\theight: 5px;\n\t\t\t\tborder-radius: 3px;\n\t\t\t\tbackground-color: var(--color-primary-text);\n\t\t\t\tleft: 50%;\n\t\t\t\tbottom: 6px;\n\t\t\t\tdisplay: block;\n\t\t\t\ttransition: all 0.1s ease-in-out;\n\t\t\t\topacity: 1;\n\t\t\t}\n\n\t\t\t.app-menu-entry--label {\n\t\t\t\tfont-weight: bold;\n\t\t\t}\n\t\t}\n\n\t\ta {\n\t\t\twidth: calc(100% - 4px);\n\t\t\theight: calc(100% - 4px);\n\t\t\tmargin: 2px;\n\t\t\tcolor: var(--color-primary-text);\n\t\t\tposition: relative;\n\t\t}\n\n\t\timg {\n\t\t\ttransition: margin 0.1s ease-in-out;\n\t\t\twidth: $header-icon-size;\n\t\t\theight: $header-icon-size;\n\t\t\tpadding: calc((100% - $header-icon-size) / 2);\n\t\t\tbox-sizing: content-box;\n\t\t}\n\n\t\t.app-menu-entry--label {\n\t\t\topacity: 0;\n\t\t\tposition: absolute;\n\t\t\tfont-size: 12px;\n\t\t\tcolor: var(--color-primary-text);\n\t\t\ttext-align: center;\n\t\t\tbottom: -5px;\n\t\t\tleft: 50%;\n\t\t\ttop: 45%;\n\t\t\tdisplay: block;\n\t\t\tmin-width: 100%;\n\t\t\ttransform: translateX(-50%);\n\t\t\ttransition: all 0.1s ease-in-out;\n\t\t\twidth: 100%;\n\t\t\ttext-overflow: ellipsis;\n\t\t\toverflow: hidden;\n\t\t\tletter-spacing: -0.5px;\n\t\t}\n\n\t\t&:hover,\n\t\t&:focus-within {\n\t\t\topacity: 1;\n\t\t\t.app-menu-entry--label {\n\t\t\t\topacity: 1;\n\t\t\t\tfont-weight: bolder;\n\t\t\t\tbottom: 0;\n\t\t\t\twidth: 100%;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t}\n\n\t}\n\n\t// Show labels\n\t&:hover,\n\t&:focus-within,\n\t.app-menu-entry:hover,\n\t.app-menu-entry:focus {\n\t\topacity: 1;\n\n\t\timg {\n\t\t\tmargin-top: -8px;\n\t\t}\n\n\t\t.app-menu-entry--label {\n\t\t\topacity: 1;\n\t\t\tbottom: 0;\n\t\t}\n\n\t\t&::before, .app-menu-entry::before {\n\t\t\topacity: 0;\n\t\t}\n\t}\n}\n\n::v-deep .app-menu-more .button-vue--vue-tertiary {\n\tcolor: var(--color-primary-text);\n\topacity: .7;\n\tmargin: 3px;\n\tfilter: var(--background-image-invert-if-bright);\n\n\t&:hover {\n\t\topacity: 1;\n\t\tbackground-color: transparent !important;\n\t}\n\n\t&:focus-visible {\n\t\topacity: 1;\n\t\toutline: none !important;\n\t}\n}\n\n.app-menu-popover-entry {\n\t.app-icon {\n\t\tposition: relative;\n\t\theight: 44px;\n\n\t\t&.has-unread::after {\n\t\t\tbackground-color: var(--color-main-text);\n\t\t}\n\n\t\timg {\n\t\t\twidth: $header-icon-size;\n\t\t\theight: $header-icon-size;\n\t\t\tpadding: calc((50px - $header-icon-size) / 2);\n\t\t}\n\t}\n}\n\n.has-unread::after {\n\tcontent: \"\";\n\twidth: 8px;\n\theight: 8px;\n\tbackground-color: var(--color-primary-text);\n\tborder-radius: 50%;\n\tposition: absolute;\n\tdisplay: block;\n\ttop: 10px;\n\tright: 10px;\n}\n\n.unread-counter {\n\tdisplay: none;\n}\n</style>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppMenu.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppMenu.vue?vue&type=style&index=0&id=44a795f6&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppMenu.vue?vue&type=style&index=0&id=44a795f6&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppMenu.vue?vue&type=template&id=44a795f6&scoped=true&\"\nimport script from \"./AppMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./AppMenu.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AppMenu.vue?vue&type=style&index=0&id=44a795f6&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"44a795f6\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('nav',{staticClass:\"app-menu\"},[_c('ul',{staticClass:\"app-menu-main\"},_vm._l((_vm.mainAppList),function(app){return _c('li',{key:app.id,staticClass:\"app-menu-entry\",class:{ 'app-menu-entry__active': app.active },attrs:{\"data-app-id\":app.id}},[_c('a',{class:{ 'has-unread': app.unread > 0 },attrs:{\"href\":app.href,\"aria-label\":_vm.appLabel(app),\"title\":app.name,\"aria-current\":app.active ? 'page' : false,\"target\":app.target ? '_blank' : undefined,\"rel\":app.target ? 'noopener noreferrer' : undefined}},[_c('img',{attrs:{\"src\":app.icon,\"alt\":\"\"}}),_vm._v(\" \"),_c('div',{staticClass:\"app-menu-entry--label\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(app.name)+\"\\n\\t\\t\\t\\t\\t\"),(app.unread > 0)?_c('span',{staticClass:\"hidden-visually unread-counter\"},[_vm._v(_vm._s(app.unread))]):_vm._e()])])])}),0),_vm._v(\" \"),_c('NcActions',{staticClass:\"app-menu-more\",attrs:{\"aria-label\":_vm.t('core', 'More apps')}},_vm._l((_vm.popoverAppList),function(app){return _c('NcActionLink',{key:app.id,staticClass:\"app-menu-popover-entry\",attrs:{\"aria-label\":_vm.appLabel(app),\"aria-current\":app.active ? 'page' : false,\"href\":app.href},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('div',{staticClass:\"app-icon\",class:{ 'has-unread': app.unread > 0 }},[_c('img',{attrs:{\"src\":app.icon,\"alt\":\"\"}})])]},proxy:true}],null,true)},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(app.name)+\"\\n\\t\\t\\t\"),(app.unread > 0)?_c('span',{staticClass:\"hidden-visually unread-counter\"},[_vm._v(_vm._s(app.unread))]):_vm._e()])}),1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2023 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n-->\n\n<template>\n\t<li :id=\"id\"\n\t\tclass=\"menu-entry\">\n\t\t<a v-if=\"href\"\n\t\t\t:href=\"href\"\n\t\t\t:class=\"{ active }\"\n\t\t\t@click.exact=\"handleClick\">\n\t\t\t<NcLoadingIcon v-if=\"loading\"\n\t\t\t\tclass=\"menu-entry__loading-icon\"\n\t\t\t\t:size=\"18\" />\n\t\t\t<img v-else :src=\"cachedIcon\" alt=\"\" />\n\t\t\t{{ name }}\n\t\t</a>\n\t\t<button v-else>\n\t\t\t<img :src=\"cachedIcon\" alt=\"\" />\n\t\t\t{{ name }}\n\t\t</button>\n\t</li>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\n\nconst versionHash = loadState('core', 'versionHash', '')\n\nexport default {\n\tname: 'UserMenuEntry',\n\n\tcomponents: {\n\t\tNcLoadingIcon,\n\t},\n\n\tprops: {\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\thref: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcachedIcon() {\n\t\t\treturn `${this.icon}?v=${versionHash}`\n\t\t},\n\t},\n\n\tmethods: {\n\t\thandleClick() {\n\t\t\tthis.loading = true\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.menu-entry {\n\t&__loading-icon {\n\t\tmargin-right: 8px;\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenuEntry.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenuEntry.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenuEntry.vue?vue&type=style&index=0&id=6e59d13c&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenuEntry.vue?vue&type=style&index=0&id=6e59d13c&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserMenuEntry.vue?vue&type=template&id=6e59d13c&scoped=true&\"\nimport script from \"./UserMenuEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./UserMenuEntry.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserMenuEntry.vue?vue&type=style&index=0&id=6e59d13c&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6e59d13c\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('li',{staticClass:\"menu-entry\",attrs:{\"id\":_vm.id}},[(_vm.href)?_c('a',{class:{ active: _vm.active },attrs:{\"href\":_vm.href},on:{\"click\":function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey)return null;return _vm.handleClick.apply(null, arguments)}}},[(_vm.loading)?_c('NcLoadingIcon',{staticClass:\"menu-entry__loading-icon\",attrs:{\"size\":18}}):_c('img',{attrs:{\"src\":_vm.cachedIcon,\"alt\":\"\"}}),_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.name)+\"\\n\\t\")],1):_c('button',[_c('img',{attrs:{\"src\":_vm.cachedIcon,\"alt\":\"\"}}),_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.name)+\"\\n\\t\")])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2023 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n-->\n\n<template>\n\t<NcHeaderMenu id=\"user-menu\"\n\t\tclass=\"user-menu\"\n\t\t:aria-label=\"t('core', 'Open settings menu')\">\n\t\t<template #trigger>\n\t\t\t<NcAvatar class=\"user-menu__avatar\"\n\t\t\t\t:disable-menu=\"true\"\n\t\t\t\t:disable-tooltip=\"true\"\n\t\t\t\t:user=\"userId\" />\n\t\t</template>\n\t\t<nav class=\"user-menu__nav\"\n\t\t\t:aria-label=\"t('core', 'Settings menu')\">\n\t\t\t<ul>\n\t\t\t\t<UserMenuEntry v-for=\"entry in settingsNavEntries\"\n\t\t\t\t\tv-bind=\"entry\"\n\t\t\t\t\t:key=\"entry.id\" />\n\t\t\t</ul>\n\t\t</nav>\n\t</NcHeaderMenu>\n</template>\n\n<script>\nimport { emit } from '@nextcloud/event-bus'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { loadState } from '@nextcloud/initial-state'\n\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js'\nimport NcHeaderMenu from '@nextcloud/vue/dist/Components/NcHeaderMenu.js'\n\nimport UserMenuEntry from '../components/UserMenu/UserMenuEntry.vue'\n\nconst settingsNavEntries = loadState('core', 'settingsNavEntries', [])\n\nexport default {\n\tname: 'UserMenu',\n\n\tcomponents: {\n\t\tNcAvatar,\n\t\tNcHeaderMenu,\n\t\tUserMenuEntry,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tsettingsNavEntries,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t}\n\t},\n\n\tmounted() {\n\t\temit('core:user-menu:mounted')\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.user-menu {\n\tmargin-right: 12px;\n\n\t&:deep {\n\t\t.header-menu {\n\t\t\t&__trigger {\n\t\t\t\topacity: 1 !important;\n\t\t\t\t&:focus-visible {\n\t\t\t\t\t.user-menu__avatar {\n\t\t\t\t\t\tborder: 2px solid var(--color-primary-text);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&__carret {\n\t\t\t\tdisplay: none !important;\n\t\t\t}\n\n\t\t\t&__content {\n\t\t\t\twidth: fit-content !important;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__avatar {\n\t\t&:active,\n\t\t&:focus,\n\t\t&:hover {\n\t\t\tborder: 2px solid var(--color-primary-text);\n\t\t}\n\t}\n\n\t&__nav {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\n\t\tul {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tgap: 2px;\n\n\t\t\t&:deep {\n\t\t\t\tli {\n\t\t\t\t\ta,\n\t\t\t\t\tbutton {\n\t\t\t\t\t\tborder-radius: 6px;\n\t\t\t\t\t\tdisplay: inline-flex;\n\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\theight: var(--header-menu-item-height);\n\t\t\t\t\t\tcolor: var(--color-main-text);\n\t\t\t\t\t\tpadding: 10px 8px;\n\t\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\twidth: 100%;\n\n\t\t\t\t\t\t&:hover {\n\t\t\t\t\t\t\tbackground-color: var(--color-background-hover);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t&:focus-visible {\n\t\t\t\t\t\t\tbackground-color: var(--color-background-hover) !important;\n\t\t\t\t\t\t\tbox-shadow: inset 0 0 0 2px var(--color-primary) !important;\n\t\t\t\t\t\t\toutline: none !important;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t&:active,\n\t\t\t\t\t\t&.active {\n\t\t\t\t\t\t\tbackground-color: var(--color-primary-light);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tspan {\n\t\t\t\t\t\t\tpadding-bottom: 0;\n\t\t\t\t\t\t\tcolor: var(--color-main-text);\n\t\t\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\t\t\t\tmax-width: 110px;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\timg {\n\t\t\t\t\t\t\twidth: 16px;\n\t\t\t\t\t\t\theight: 16px;\n\t\t\t\t\t\t\tmargin-right: 10px;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\timg,\n\t\t\t\t\t\tsvg {\n\t\t\t\t\t\t\topacity: .7;\n\t\t\t\t\t\t\tfilter: var(--background-invert-if-dark);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override global button styles\n\t\t\t\t\tbutton {\n\t\t\t\t\t\tbackground-color: transparent;\n\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\tmargin: 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenu.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenu.vue?vue&type=style&index=0&id=6a818bbc&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenu.vue?vue&type=style&index=0&id=6a818bbc&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserMenu.vue?vue&type=template&id=6a818bbc&scoped=true&\"\nimport script from \"./UserMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./UserMenu.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserMenu.vue?vue&type=style&index=0&id=6a818bbc&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6a818bbc\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcHeaderMenu',{staticClass:\"user-menu\",attrs:{\"id\":\"user-menu\",\"aria-label\":_vm.t('core', 'Open settings menu')},scopedSlots:_vm._u([{key:\"trigger\",fn:function(){return [_c('NcAvatar',{staticClass:\"user-menu__avatar\",attrs:{\"disable-menu\":true,\"disable-tooltip\":true,\"user\":_vm.userId}})]},proxy:true}])},[_vm._v(\" \"),_c('nav',{staticClass:\"user-menu__nav\",attrs:{\"aria-label\":_vm.t('core', 'Settings menu')}},[_c('ul',_vm._l((_vm.settingsNavEntries),function(entry){return _c('UserMenuEntry',_vm._b({key:entry.id},'UserMenuEntry',entry,false))}),1)])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Jan-Christoph Borchardt <hey@jancborchardt.net>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author nacho <nacho@ownyourbits.com>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* globals Snap */\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport moment from 'moment'\n\nimport { initSessionHeartBeat } from './session-heartbeat.js'\nimport OC from './OC/index.js'\nimport { setUp as setUpContactsMenu } from './components/ContactsMenu.js'\nimport { setUp as setUpMainMenu } from './components/MainMenu.js'\nimport { setUp as setUpUserMenu } from './components/UserMenu.js'\nimport PasswordConfirmation from './OC/password-confirmation.js'\n\n// keep in sync with core/css/variables.scss\nconst breakpointMobileWidth = 1024\n\nconst initLiveTimestamps = () => {\n\t// Update live timestamps every 30 seconds\n\tsetInterval(() => {\n\t\t$('.live-relative-timestamp').each(function() {\n\t\t\tconst timestamp = parseInt($(this).attr('data-timestamp'), 10)\n\t\t\t$(this).text(moment(timestamp).fromNow())\n\t\t})\n\t}, 30 * 1000)\n}\n\n/**\n * Moment doesn't have aliases for every locale and doesn't parse some locale IDs correctly so we need to alias them\n */\nconst localeAliases = {\n\tzh: 'zh-cn',\n\tzh_Hans: 'zh-cn',\n\tzh_Hans_CN: 'zh-cn',\n\tzh_Hans_HK: 'zh-cn',\n\tzh_Hans_MO: 'zh-cn',\n\tzh_Hans_SG: 'zh-cn',\n\tzh_Hant: 'zh-hk',\n\tzh_Hant_HK: 'zh-hk',\n\tzh_Hant_MO: 'zh-mo',\n\tzh_Hant_TW: 'zh-tw',\n}\nlet locale = OC.getLocale()\nif (Object.prototype.hasOwnProperty.call(localeAliases, locale)) {\n\tlocale = localeAliases[locale]\n}\n\n/**\n * Set users locale to moment.js as soon as possible\n */\nmoment.locale(locale)\n\n/**\n * Initializes core\n */\nexport const initCore = () => {\n\t$(window).on('unload.main', () => { OC._unloadCalled = true })\n\t$(window).on('beforeunload.main', () => {\n\t\t// super-trick thanks to http://stackoverflow.com/a/4651049\n\t\t// in case another handler displays a confirmation dialog (ex: navigating away\n\t\t// during an upload), there are two possible outcomes: user clicked \"ok\" or\n\t\t// \"cancel\"\n\n\t\t// first timeout handler is called after unload dialog is closed\n\t\tsetTimeout(() => {\n\t\t\tOC._userIsNavigatingAway = true\n\n\t\t\t// second timeout event is only called if user cancelled (Chrome),\n\t\t\t// but in other browsers it might still be triggered, so need to\n\t\t\t// set a higher delay...\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (!OC._unloadCalled) {\n\t\t\t\t\tOC._userIsNavigatingAway = false\n\t\t\t\t}\n\t\t\t}, 10000)\n\t\t}, 1)\n\t})\n\t$(document).on('ajaxError.main', function(event, request, settings) {\n\t\tif (settings && settings.allowAuthErrors) {\n\t\t\treturn\n\t\t}\n\t\tOC._processAjaxError(request)\n\t})\n\n\tinitSessionHeartBeat()\n\n\tOC.registerMenu($('#expand'), $('#expanddiv'), false, true)\n\n\t// toggle for menus\n\t$(document).on('mouseup.closemenus', event => {\n\t\tconst $el = $(event.target)\n\t\tif ($el.closest('.menu').length || $el.closest('.menutoggle').length) {\n\t\t\t// don't close when clicking on the menu directly or a menu toggle\n\t\t\treturn false\n\t\t}\n\n\t\tOC.hideMenus()\n\t})\n\n\tsetUpMainMenu()\n\tsetUpUserMenu()\n\tsetUpContactsMenu()\n\n\t// just add snapper for logged in users\n\t// and if the app doesn't handle the nav slider itself\n\tif ($('#app-navigation').length && !$('html').hasClass('lte9')\n\t\t&& !$('#app-content').hasClass('no-snapper')) {\n\n\t\t// App sidebar on mobile\n\t\tconst snapper = new Snap({\n\t\t\telement: document.getElementById('app-content'),\n\t\t\tdisable: 'right',\n\t\t\tmaxPosition: 300, // $navigation-width\n\t\t\tminDragDistance: 100,\n\t\t})\n\n\t\t$('#app-content').prepend('<div id=\"app-navigation-toggle\" class=\"icon-menu\" style=\"display:none\" tabindex=\"0\"></div>')\n\n\t\t// keep track whether snapper is currently animating, and\n\t\t// prevent to call open or close while that is the case\n\t\t// to avoid duplicating events (snap.js doesn't check this)\n\t\tlet animating = false\n\t\tsnapper.on('animating', () => {\n\t\t\t// we need this because the trigger button\n\t\t\t// is also implicitly wired to close by snapper\n\t\t\tanimating = true\n\t\t})\n\t\tsnapper.on('animated', () => {\n\t\t\tanimating = false\n\t\t})\n\t\tsnapper.on('start', () => {\n\t\t\t// we need this because dragging triggers that\n\t\t\tanimating = true\n\t\t})\n\t\tsnapper.on('end', () => {\n\t\t\t// we need this because dragging stop triggers that\n\t\t\tanimating = false\n\t\t})\n\n\t\t// These are necessary because calling open or close\n\t\t// on snapper during an animation makes it trigger an\n\t\t// unfinishable animation, which itself will continue\n\t\t// triggering animating events and cause high CPU load,\n\t\t//\n\t\t// Ref https://github.com/jakiestfu/Snap.js/issues/216\n\t\tconst oldSnapperOpen = snapper.open\n\t\tconst oldSnapperClose = snapper.close\n\t\tconst _snapperOpen = () => {\n\t\t\tif (animating || snapper.state().state !== 'closed') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\toldSnapperOpen('left')\n\t\t}\n\n\t\tconst _snapperClose = () => {\n\t\t\tif (animating || snapper.state().state === 'closed') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\toldSnapperClose()\n\t\t}\n\n\t\t// Needs to be deferred to properly catch in-between\n\t\t// events that snap.js is triggering after dragging.\n\t\t//\n\t\t// Skipped when running unit tests as we are not testing\n\t\t// the snap.js workarounds...\n\t\tif (!window.TESTING) {\n\t\t\tsnapper.open = () => {\n\t\t\t\t_.defer(_snapperOpen)\n\t\t\t}\n\t\t\tsnapper.close = () => {\n\t\t\t\t_.defer(_snapperClose)\n\t\t\t}\n\t\t}\n\n\t\t$('#app-navigation-toggle').click((e) => {\n\t\t\t// close is implicit in the button by snap.js\n\t\t\tif (snapper.state().state !== 'left') {\n\t\t\t\tsnapper.open()\n\t\t\t}\n\t\t})\n\t\t$('#app-navigation-toggle').keypress(e => {\n\t\t\tif (snapper.state().state === 'left') {\n\t\t\t\tsnapper.close()\n\t\t\t} else {\n\t\t\t\tsnapper.open()\n\t\t\t}\n\t\t})\n\n\t\t// close sidebar when switching navigation entry\n\t\tconst $appNavigation = $('#app-navigation')\n\t\t$appNavigation.delegate('a, :button', 'click', event => {\n\t\t\tconst $target = $(event.target)\n\t\t\t// don't hide navigation when changing settings or adding things\n\t\t\tif ($target.is('.app-navigation-noclose')\n\t\t\t\t|| $target.closest('.app-navigation-noclose').length) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif ($target.is('.app-navigation-entry-utils-menu-button')\n\t\t\t\t|| $target.closest('.app-navigation-entry-utils-menu-button').length) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif ($target.is('.add-new')\n\t\t\t\t|| $target.closest('.add-new').length) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif ($target.is('#app-settings')\n\t\t\t\t|| $target.closest('#app-settings').length) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tsnapper.close()\n\t\t})\n\n\t\tlet navigationBarSlideGestureEnabled = false\n\t\tlet navigationBarSlideGestureAllowed = true\n\t\tlet navigationBarSlideGestureEnablePending = false\n\n\t\tOC.allowNavigationBarSlideGesture = () => {\n\t\t\tnavigationBarSlideGestureAllowed = true\n\n\t\t\tif (navigationBarSlideGestureEnablePending) {\n\t\t\t\tsnapper.enable()\n\n\t\t\t\tnavigationBarSlideGestureEnabled = true\n\t\t\t\tnavigationBarSlideGestureEnablePending = false\n\t\t\t}\n\t\t}\n\n\t\tOC.disallowNavigationBarSlideGesture = () => {\n\t\t\tnavigationBarSlideGestureAllowed = false\n\n\t\t\tif (navigationBarSlideGestureEnabled) {\n\t\t\t\tconst endCurrentDrag = true\n\t\t\t\tsnapper.disable(endCurrentDrag)\n\n\t\t\t\tnavigationBarSlideGestureEnabled = false\n\t\t\t\tnavigationBarSlideGestureEnablePending = true\n\t\t\t}\n\t\t}\n\n\t\tconst toggleSnapperOnSize = () => {\n\t\t\tif ($(window).width() > breakpointMobileWidth) {\n\t\t\t\tsnapper.close()\n\t\t\t\tsnapper.disable()\n\n\t\t\t\tnavigationBarSlideGestureEnabled = false\n\t\t\t\tnavigationBarSlideGestureEnablePending = false\n\t\t\t} else if (navigationBarSlideGestureAllowed) {\n\t\t\t\tsnapper.enable()\n\n\t\t\t\tnavigationBarSlideGestureEnabled = true\n\t\t\t\tnavigationBarSlideGestureEnablePending = false\n\t\t\t} else {\n\t\t\t\tnavigationBarSlideGestureEnablePending = true\n\t\t\t}\n\t\t}\n\n\t\t$(window).resize(_.debounce(toggleSnapperOnSize, 250))\n\n\t\t// initial call\n\t\ttoggleSnapperOnSize()\n\n\t}\n\n\tinitLiveTimestamps()\n\tPasswordConfirmation.init()\n}\n","/**\n * @copyright 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n$.prototype.tooltip = (function(tooltip) {\n\treturn function(config) {\n\t\ttry {\n\t\t\treturn tooltip.call(this, config)\n\t\t} catch (ex) {\n\t\t\tif (ex instanceof TypeError && config === 'destroy') {\n\t\t\t\tif (window.TESTING === undefined) {\n\t\t\t\t\tconsole.error('Deprecated call $.tooltip(\\'destroy\\') has been deprecated and should be removed')\n\t\t\t\t}\n\t\t\t\treturn tooltip.call(this, 'dispose')\n\t\t\t}\n\t\t\tif (ex instanceof TypeError && config === 'fixTitle') {\n\t\t\t\tif (window.TESTING === undefined) {\n\t\t\t\t\tconsole.error('Deprecated call $.tooltip(\\'fixTitle\\') has been deprecated and should be removed')\n\t\t\t\t}\n\t\t\t\treturn tooltip.call(this, '_fixTitle')\n\t\t\t}\n\t\t}\n\t}\n})($.prototype.tooltip)\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\n\nimport UserMenu from '../views/UserMenu.vue'\n\nexport const setUp = () => {\n\tconst mountPoint = document.getElementById('user-menu')\n\tif (mountPoint) {\n\t\t// eslint-disable-next-line no-new\n\t\tnew Vue({\n\t\t\tel: mountPoint,\n\t\t\trender: h => h(UserMenu),\n\t\t})\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n'\nimport Vue from 'vue'\n\nimport AppMenu from './AppMenu.vue'\n\nexport const setUp = () => {\n\n\tVue.mixin({\n\t\tmethods: {\n\t\t\tt,\n\t\t\tn,\n\t\t},\n\t})\n\n\tconst container = document.getElementById('header-left__appmenu')\n\tif (!container) {\n\t\t// no container, possibly we're on a public page\n\t\treturn\n\t}\n\tconst AppMenuApp = Vue.extend(AppMenu)\n\tconst appMenu = new AppMenuApp({}).$mount(container)\n\n\tObject.assign(OC, {\n\t\tsetNavigationCounter(id, counter) {\n\t\t\tappMenu.setNavigationCounter(id, counter)\n\t\t},\n\t})\n\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Christopher Ng <chrng8@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\n\nimport ContactsMenu from '../views/ContactsMenu.vue'\n\n/**\n * @todo move to contacts menu code https://github.com/orgs/nextcloud/projects/31#card-21213129\n */\nexport const setUp = () => {\n\tconst mountPoint = document.getElementById('contactsmenu')\n\tif (mountPoint) {\n\t\t// eslint-disable-next-line no-new\n\t\tnew Vue({\n\t\t\tel: mountPoint,\n\t\t\trender: h => h(ContactsMenu),\n\t\t})\n\t}\n}\n","/**\n * @copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/*\n * Detects links:\n * Either the http(s) protocol is given or two strings, basically limited to ascii with the last\n * word being at least one digit long,\n * followed by at least another character\n *\n * The downside: anything not ascii is excluded. Not sure how common it is in areas using different\n * alphabets… the upside: fake domains with similar looking characters won't be formatted as links\n *\n * This is a copy of the backend regex in IURLGenerator, make sure to adjust both when changing\n */\nconst urlRegex = /(\\s|^)(https?:\\/\\/)((?:[-A-Z0-9+_]+\\.)+[-A-Z]+(?:\\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*)(\\s|$)/ig\n\n/**\n * @param {any} content -\n */\nexport function plainToRich(content) {\n\treturn this.formatLinksRich(content)\n}\n\n/**\n * @param {any} content -\n */\nexport function richToPlain(content) {\n\treturn this.formatLinksPlain(content)\n}\n\n/**\n * @param {any} content -\n */\nexport function formatLinksRich(content) {\n\treturn content.replace(urlRegex, function(_, leadingSpace, protocol, url, trailingSpace) {\n\t\tlet linkText = url\n\t\tif (!protocol) {\n\t\t\tprotocol = 'https://'\n\t\t} else if (protocol === 'http://') {\n\t\t\tlinkText = protocol + url\n\t\t}\n\n\t\treturn leadingSpace + '<a class=\"external\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"' + protocol + url + '\">' + linkText + '</a>' + trailingSpace\n\t})\n}\n\n/**\n * @param {any} content -\n */\nexport function formatLinksPlain(content) {\n\tconst $content = $('<div></div>').html(content)\n\t$content.find('a').each(function() {\n\t\tconst $this = $(this)\n\t\t$this.html($this.attr('href'))\n\t})\n\treturn $content.html()\n}\n","/**\n * @copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * @param {any} options -\n */\nexport function query(options) {\n\toptions = options || {}\n\tconst dismissOptions = options.dismiss || {}\n\t$.ajax({\n\t\ttype: 'GET',\n\t\turl: options.url || generateOcsUrl('core/whatsnew?format=json'),\n\t\tsuccess: options.success || function(data, statusText, xhr) {\n\t\t\tonQuerySuccess(data, statusText, xhr, dismissOptions)\n\t\t},\n\t\terror: options.error || onQueryError,\n\t})\n}\n\n/**\n * @param {any} version -\n * @param {any} options -\n */\nexport function dismiss(version, options) {\n\toptions = options || {}\n\t$.ajax({\n\t\ttype: 'POST',\n\t\turl: options.url || generateOcsUrl('core/whatsnew'),\n\t\tdata: { version: encodeURIComponent(version) },\n\t\tsuccess: options.success || onDismissSuccess,\n\t\terror: options.error || onDismissError,\n\t})\n\t// remove element immediately\n\t$('.whatsNewPopover').remove()\n}\n\n/**\n * @param {any} data -\n * @param {any} statusText -\n * @param {any} xhr -\n * @param {any} dismissOptions -\n */\nfunction onQuerySuccess(data, statusText, xhr, dismissOptions) {\n\tconsole.debug('querying Whats New data was successful: ' + statusText)\n\tconsole.debug(data)\n\n\tif (xhr.status !== 200) {\n\t\treturn\n\t}\n\n\tlet item, menuItem, text, icon\n\n\tconst div = document.createElement('div')\n\tdiv.classList.add('popovermenu', 'open', 'whatsNewPopover', 'menu-left')\n\n\tconst list = document.createElement('ul')\n\n\t// header\n\titem = document.createElement('li')\n\tmenuItem = document.createElement('span')\n\tmenuItem.className = 'menuitem'\n\n\ttext = document.createElement('span')\n\ttext.innerText = t('core', 'New in') + ' ' + data.ocs.data.product\n\ttext.className = 'caption'\n\tmenuItem.appendChild(text)\n\n\ticon = document.createElement('span')\n\ticon.className = 'icon-close'\n\ticon.onclick = function() {\n\t\tdismiss(data.ocs.data.version, dismissOptions)\n\t}\n\tmenuItem.appendChild(icon)\n\n\titem.appendChild(menuItem)\n\tlist.appendChild(item)\n\n\t// Highlights\n\tfor (const i in data.ocs.data.whatsNew.regular) {\n\t\tconst whatsNewTextItem = data.ocs.data.whatsNew.regular[i]\n\t\titem = document.createElement('li')\n\n\t\tmenuItem = document.createElement('span')\n\t\tmenuItem.className = 'menuitem'\n\n\t\ticon = document.createElement('span')\n\t\ticon.className = 'icon-checkmark'\n\t\tmenuItem.appendChild(icon)\n\n\t\ttext = document.createElement('p')\n\t\ttext.innerHTML = _.escape(whatsNewTextItem)\n\t\tmenuItem.appendChild(text)\n\n\t\titem.appendChild(menuItem)\n\t\tlist.appendChild(item)\n\t}\n\n\t// Changelog URL\n\tif (!_.isUndefined(data.ocs.data.changelogURL)) {\n\t\titem = document.createElement('li')\n\n\t\tmenuItem = document.createElement('a')\n\t\tmenuItem.href = data.ocs.data.changelogURL\n\t\tmenuItem.rel = 'noreferrer noopener'\n\t\tmenuItem.target = '_blank'\n\n\t\ticon = document.createElement('span')\n\t\ticon.className = 'icon-link'\n\t\tmenuItem.appendChild(icon)\n\n\t\ttext = document.createElement('span')\n\t\ttext.innerText = t('core', 'View changelog')\n\t\tmenuItem.appendChild(text)\n\n\t\titem.appendChild(menuItem)\n\t\tlist.appendChild(item)\n\t}\n\n\tdiv.appendChild(list)\n\tdocument.body.appendChild(div)\n}\n\n/**\n * @param {any} x -\n * @param {any} t -\n * @param {any} e -\n */\nfunction onQueryError(x, t, e) {\n\tconsole.debug('querying Whats New Data resulted in an error: ' + t + e)\n\tconsole.debug(x)\n}\n\n/**\n * @param {any} data -\n */\nfunction onDismissSuccess(data) {\n\t// noop\n}\n\n/**\n * @param {any} data -\n */\nfunction onDismissError(data) {\n\tconsole.debug('dismissing Whats New data resulted in an error: ' + data)\n}\n","/**\n * @copyright Copyright (c) 2022 Joas Schilling <coding@schilljs.com>\n *\n * @author Joas Schilling <coding@schilljs.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\n\nexport default {\n\t/**\n\t * @return {boolean} Whether the user opted-out of shortcuts so that they should not be registered\n\t */\n\tdisableKeyboardShortcuts() {\n\t\treturn loadState('theming', 'shortcutsDisabled', false)\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable @nextcloud/no-deprecations */\nimport { initCore } from './init'\n\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport 'jquery-migrate/dist/jquery-migrate.min'\n// TODO: switch to `jquery-ui` package and import widgets and effects individually\n// `jquery-ui-dist` is used as a workaround for the issue of missing effects\nimport 'jquery-ui-dist/jquery-ui'\nimport 'jquery-ui-dist/jquery-ui.css'\nimport 'jquery-ui-dist/jquery-ui.theme.css'\n// END TODO\nimport autosize from 'autosize'\nimport Backbone from 'backbone'\nimport './Polyfill/tooltip'\nimport ClipboardJS from 'clipboard'\nimport { dav } from 'davclient.js'\nimport Handlebars from 'handlebars'\nimport md5 from 'blueimp-md5'\nimport moment from 'moment'\nimport 'select2'\nimport 'select2/select2.css'\nimport 'snap.js/dist/snap'\nimport 'strengthify'\nimport 'strengthify/strengthify.css'\n\nimport OC from './OC/index'\nimport OCP from './OCP/index'\nimport OCA from './OCA/index'\nimport { getToken as getRequestToken } from './OC/requesttoken'\n\nconst warnIfNotTesting = function() {\n\tif (window.TESTING === undefined) {\n\t\tconsole.warn.apply(console, arguments)\n\t}\n}\n\n/**\n * Mark a function as deprecated and automatically\n * warn if used!\n *\n * @param {Function} func the library to deprecate\n * @param {string} funcName the name of the library\n * @param {number} version the version this gets removed\n * @return {Function}\n */\nconst deprecate = (func, funcName, version) => {\n\tconst oldFunc = func\n\tconst newFunc = function() {\n\t\twarnIfNotTesting(`The ${funcName} library is deprecated! It will be removed in nextcloud ${version}.`)\n\t\treturn oldFunc.apply(this, arguments)\n\t}\n\tObject.assign(newFunc, oldFunc)\n\treturn newFunc\n}\n\nconst setDeprecatedProp = (global, cb, msg) => {\n\t(Array.isArray(global) ? global : [global]).forEach(global => {\n\t\tif (window[global] !== undefined) {\n\t\t\tdelete window[global]\n\t\t}\n\t\tObject.defineProperty(window, global, {\n\t\t\tget: () => {\n\t\t\t\tif (msg) {\n\t\t\t\t\twarnIfNotTesting(`${global} is deprecated: ${msg}`)\n\t\t\t\t} else {\n\t\t\t\t\twarnIfNotTesting(`${global} is deprecated`)\n\t\t\t\t}\n\n\t\t\t\treturn cb()\n\t\t\t},\n\t\t})\n\t})\n}\n\nwindow._ = _\nsetDeprecatedProp(['$', 'jQuery'], () => $, 'The global jQuery is deprecated. It will be removed in a later versions without another warning. Please ship your own.')\nsetDeprecatedProp('autosize', () => autosize, 'please ship your own, this will be removed in Nextcloud 20')\nsetDeprecatedProp('Backbone', () => Backbone, 'please ship your own, this will be removed in Nextcloud 20')\nsetDeprecatedProp(['Clipboard', 'ClipboardJS'], () => ClipboardJS, 'please ship your own, this will be removed in Nextcloud 20')\nwindow.dav = dav\nsetDeprecatedProp('Handlebars', () => Handlebars, 'please ship your own, this will be removed in Nextcloud 20')\nsetDeprecatedProp('md5', () => md5, 'please ship your own, this will be removed in Nextcloud 20')\nsetDeprecatedProp('moment', () => moment, 'please ship your own, this will be removed in Nextcloud 20')\n\nwindow.OC = OC\nsetDeprecatedProp('initCore', () => initCore, 'this is an internal function')\nsetDeprecatedProp('oc_appswebroots', () => OC.appswebroots, 'use OC.appswebroots instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_config', () => OC.config, 'use OC.config instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_current_user', () => OC.getCurrentUser().uid, 'use OC.getCurrentUser().uid instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_debug', () => OC.debug, 'use OC.debug instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_defaults', () => OC.theme, 'use OC.theme instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_isadmin', OC.isUserAdmin, 'use OC.isUserAdmin() instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_requesttoken', () => getRequestToken(), 'use OC.requestToken instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_webroot', () => OC.webroot, 'use OC.getRootPath() instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('OCDialogs', () => OC.dialogs, 'use OC.dialogs instead, this will be removed in Nextcloud 20')\nwindow.OCP = OCP\nwindow.OCA = OCA\n$.fn.select2 = deprecate($.fn.select2, 'select2', 19)\n\n/**\n * translate a string\n *\n * @param {string} app the id of the app for which to translate the string\n * @param {string} text the string to translate\n * @param [vars] map of placeholder key to value\n * @param {number} [count] number to replace %n with\n * @return {string}\n */\nwindow.t = _.bind(OC.L10N.translate, OC.L10N)\n\n/**\n * translate a string\n *\n * @param {string} app the id of the app for which to translate the string\n * @param {string} text_singular the string to translate for exactly one object\n * @param {string} text_plural the string to translate for n objects\n * @param {number} count number to determine whether to use singular or plural\n * @param [vars] map of placeholder key to value\n * @return {string} Translated string\n */\nwindow.n = _.bind(OC.L10N.translatePlural, OC.L10N)\n","/**\n * @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport escapeHTML from 'escape-html'\n\n/**\n * @typedef TypeDefinition\n * @function {Function} action This action is executed to let the user select a resource\n * @param {string} icon Contains the icon css class for the type\n * @function Object() { [native code] }\n */\n\n/**\n * @type {TypeDefinition[]}\n */\nconst types = {}\n\n/**\n * Those translations will be used by the vue component but they should be shipped with the server\n * FIXME: Those translations should be added to the library\n *\n * @return {Array}\n */\nexport const l10nProjects = () => {\n\treturn [\n\t\tt('core', 'Add to a project'),\n\t\tt('core', 'Show details'),\n\t\tt('core', 'Hide details'),\n\t\tt('core', 'Rename project'),\n\t\tt('core', 'Failed to rename the project'),\n\t\tt('core', 'Failed to create a project'),\n\t\tt('core', 'Failed to add the item to the project'),\n\t\tt('core', 'Connect items to a project to make them easier to find'),\n\t\tt('core', 'Type to search for existing projects'),\n\t]\n}\n\nexport default {\n\t/**\n\t *\n\t * @param {string} type type\n\t * @param {TypeDefinition} typeDefinition typeDefinition\n\t */\n\tregisterType(type, typeDefinition) {\n\t\ttypes[type] = typeDefinition\n\t},\n\ttrigger(type) {\n\t\treturn types[type].action()\n\t},\n\tgetTypes() {\n\t\treturn Object.keys(types)\n\t},\n\tgetIcon(type) {\n\t\treturn types[type].typeIconClass || ''\n\t},\n\tgetLabel(type) {\n\t\treturn escapeHTML(types[type].typeString || type)\n\t},\n\tgetLink(type, id) {\n\t\t/* TODO: Allow action to be executed instead of href as well */\n\t\treturn typeof types[type] !== 'undefined' ? types[type].link(id) : ''\n\t},\n}\n","/**\n * @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst loadedScripts = {}\nconst loadedStylesheets = {}\n/**\n * @namespace OCP\n * @class Loader\n */\nexport default {\n\n\t/**\n\t * Load a script asynchronously\n\t *\n\t * @param {string} app the app name\n\t * @param {string} file the script file name\n\t * @return {Promise}\n\t */\n\tloadScript(app, file) {\n\t\tconst key = app + file\n\t\tif (Object.prototype.hasOwnProperty.call(loadedScripts, key)) {\n\t\t\treturn Promise.resolve()\n\t\t}\n\t\tloadedScripts[key] = true\n\t\treturn new Promise(function(resolve, reject) {\n\t\t\tconst scriptPath = OC.filePath(app, 'js', file)\n\t\t\tconst script = document.createElement('script')\n\t\t\tscript.src = scriptPath\n\t\t\tscript.setAttribute('nonce', btoa(OC.requestToken))\n\t\t\tscript.onload = () => resolve()\n\t\t\tscript.onerror = () => reject(new Error(`Failed to load script from ${scriptPath}`))\n\t\t\tdocument.head.appendChild(script)\n\t\t})\n\t},\n\n\t/**\n\t * Load a stylesheet file asynchronously\n\t *\n\t * @param {string} app the app name\n\t * @param {string} file the script file name\n\t * @return {Promise}\n\t */\n\tloadStylesheet(app, file) {\n\t\tconst key = app + file\n\t\tif (Object.prototype.hasOwnProperty.call(loadedStylesheets, key)) {\n\t\t\treturn Promise.resolve()\n\t\t}\n\t\tloadedStylesheets[key] = true\n\t\treturn new Promise(function(resolve, reject) {\n\t\t\tconst stylePath = OC.filePath(app, 'css', file)\n\t\t\tconst link = document.createElement('link')\n\t\t\tlink.href = stylePath\n\t\t\tlink.type = 'text/css'\n\t\t\tlink.rel = 'stylesheet'\n\t\t\tlink.onload = () => resolve()\n\t\t\tlink.onerror = () => reject(new Error(`Failed to load stylesheet from ${stylePath}`))\n\t\t\tdocument.head.appendChild(link)\n\t\t})\n\t},\n}\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport {\n\tshowError,\n\tshowInfo, showMessage,\n\tshowSuccess,\n\tshowWarning,\n} from '@nextcloud/dialogs'\n\nexport default {\n\t/**\n\t * @deprecated 19.0.0 use `showSuccess` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\tsuccess(text, options) {\n\t\treturn showSuccess(text, options)\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `showWarning` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\twarning(text, options) {\n\t\treturn showWarning(text, options)\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `showError` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\terror(text, options) {\n\t\treturn showError(text, options)\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `showInfo` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\tinfo(text, options) {\n\t\treturn showInfo(text, options)\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `showMessage` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\tmessage(text, options) {\n\t\treturn showMessage(text, options)\n\t},\n\n}\n","/**\n * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\n\nimport * as AppConfig from './appconfig'\nimport * as Comments from './comments'\nimport * as WhatsNew from './whatsnew'\n\nimport Accessibility from './accessibility'\nimport Collaboration from './collaboration'\nimport Loader from './loader'\nimport Toast from './toast'\n\n/** @namespace OCP */\nexport default {\n\tAccessibility,\n\tAppConfig,\n\tCollaboration,\n\tComments,\n\tInitialState: {\n\t\t/**\n\t\t * @deprecated 18.0.0 add https://www.npmjs.com/package/@nextcloud/initial-state to your app\n\t\t */\n\t\tloadState,\n\t},\n\tLoader,\n\t/**\n\t * @deprecated 19.0.0 use the `@nextcloud/dialogs` package instead\n\t */\n\tToast,\n\tWhatsNew,\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\nimport OC from '../OC'\n\n/**\n * This plugin inserts the right avatar for the user, depending on, whether a\n * custom avatar is uploaded - which it uses then - or not, and display a\n * placeholder with the first letter of the users name instead.\n * For this it queries the core_avatar_get route, thus this plugin is fit very\n * tightly for owncloud, and it may not work anywhere else.\n *\n * You may use this on any <div></div>\n * Here I'm using <div class=\"avatardiv\"></div> as an example.\n *\n * There are 5 ways to call this:\n *\n * 1. $('.avatardiv').avatar('jdoe', 128);\n * This will make the div to jdoe's fitting avatar, with a size of 128px.\n *\n * 2. $('.avatardiv').avatar('jdoe');\n * This will make the div to jdoe's fitting avatar. If the div already has a\n * height, it will be used for the avatars size. Otherwise this plugin will\n * search for 'size' DOM data, to use for avatar size. If neither are available\n * it will default to 64px.\n *\n * 3. $('.avatardiv').avatar();\n * This will search the DOM for 'user' data, to use as the username. If there\n * is no username available it will default to a placeholder with the value of\n * \"?\". The size will be determined the same way, as the second example.\n *\n * 4. $('.avatardiv').avatar('jdoe', 128, true);\n * This will behave like the first example, except it will also append random\n * hashes to the custom avatar images, to force image reloading in IE8.\n *\n * 5. $('.avatardiv').avatar('jdoe', 128, undefined, true);\n * This will behave like the first example, but it will hide the avatardiv, if\n * it will display the default placeholder. undefined is the ie8fix from\n * example 4 and can be either true, or false/undefined, to be ignored.\n *\n * 6. $('.avatardiv').avatar('jdoe', 128, undefined, true, callback);\n * This will behave like the above example, but it will call the function\n * defined in callback after the avatar is placed into the DOM.\n *\n */\n\n$.fn.avatar = function(user, size, ie8fix, hidedefault, callback, displayname) {\n\tconst setAvatarForUnknownUser = function(target) {\n\t\ttarget.imageplaceholder('?')\n\t\ttarget.css('background-color', '#b9b9b9')\n\t}\n\n\tif (typeof (user) !== 'undefined') {\n\t\tuser = String(user)\n\t}\n\tif (typeof (displayname) !== 'undefined') {\n\t\tdisplayname = String(displayname)\n\t}\n\n\tif (typeof (size) === 'undefined') {\n\t\tif (this.height() > 0) {\n\t\t\tsize = this.height()\n\t\t} else if (this.data('size') > 0) {\n\t\t\tsize = this.data('size')\n\t\t} else {\n\t\t\tsize = 64\n\t\t}\n\t}\n\n\tthis.height(size)\n\tthis.width(size)\n\n\tif (typeof (user) === 'undefined') {\n\t\tif (typeof (this.data('user')) !== 'undefined') {\n\t\t\tuser = this.data('user')\n\t\t} else {\n\t\t\tsetAvatarForUnknownUser(this)\n\t\t\treturn\n\t\t}\n\t}\n\n\t// sanitize\n\tuser = String(user).replace(/\\//g, '')\n\n\tconst $div = this\n\tlet url\n\n\t// If this is our own avatar we have to use the version attribute\n\tif (user === OC.getCurrentUser().uid) {\n\t\turl = OC.generateUrl(\n\t\t\t'/avatar/{user}/{size}?v={version}',\n\t\t\t{\n\t\t\t\tuser,\n\t\t\t\tsize: Math.ceil(size * window.devicePixelRatio),\n\t\t\t\tversion: oc_userconfig.avatar.version,\n\t\t\t})\n\t} else {\n\t\turl = OC.generateUrl(\n\t\t\t'/avatar/{user}/{size}',\n\t\t\t{\n\t\t\t\tuser,\n\t\t\t\tsize: Math.ceil(size * window.devicePixelRatio),\n\t\t\t})\n\t}\n\n\tconst img = new Image()\n\n\t// If the new image loads successfully set it.\n\timg.onload = function() {\n\t\t$div.clearimageplaceholder()\n\t\t$div.append(img)\n\n\t\tif (typeof callback === 'function') {\n\t\t\tcallback()\n\t\t}\n\t}\n\t// Fallback when avatar loading fails:\n\t// Use old placeholder when a displayname attribute is defined,\n\t// otherwise show the unknown user placeholder.\n\timg.onerror = function() {\n\t\t$div.clearimageplaceholder()\n\t\tif (typeof (displayname) !== 'undefined') {\n\t\t\t$div.imageplaceholder(user, displayname)\n\t\t} else {\n\t\t\tsetAvatarForUnknownUser($div)\n\t\t}\n\n\t\tif (typeof callback === 'function') {\n\t\t\tcallback()\n\t\t}\n\t}\n\n\tif (size < 32) {\n\t\t$div.addClass('icon-loading-small')\n\t} else {\n\t\t$div.addClass('icon-loading')\n\t}\n\timg.width = size\n\timg.height = size\n\timg.src = url\n\timg.alt = ''\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\nimport OC from '../OC'\nimport { isA11yActivation } from '../Util/a11y.js'\n\nconst LIST = ''\n\t+ '<div class=\"menu popovermenu menu-left hidden contactsmenu-popover\">'\n\t+ ' <ul>'\n\t+ ' <li>'\n\t+ ' <a>'\n\t+ ' <span class=\"icon-loading-small\"></span>'\n\t+ ' </a>'\n\t+ ' </li>'\n\t+ ' </ul>'\n\t+ '</div>'\n\nconst entryTemplate = require('./contactsmenu/jquery_entry.handlebars')\n\n$.fn.contactsMenu = function(shareWith, shareType, appendTo) {\n\t// 0 - user, 4 - email, 6 - remote\n\tconst allowedTypes = [0, 4, 6]\n\tif (allowedTypes.indexOf(shareType) === -1) {\n\t\treturn\n\t}\n\n\tconst $div = this\n\tappendTo.append(LIST)\n\tconst $list = appendTo.find('div.contactsmenu-popover')\n\n\t$div.on('click keydown', function(event) {\n\t\tif (!isA11yActivation(event)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (!$list.hasClass('hidden')) {\n\t\t\t$list.addClass('hidden')\n\t\t\t$list.hide()\n\t\t\treturn\n\t\t}\n\n\t\t$list.removeClass('hidden')\n\t\t$list.show()\n\n\t\tif ($list.hasClass('loaded')) {\n\t\t\treturn\n\t\t}\n\n\t\t$list.addClass('loaded')\n\t\t$.ajax(OC.generateUrl('/contactsmenu/findOne'), {\n\t\t\tmethod: 'POST',\n\t\t\tdata: {\n\t\t\t\tshareType,\n\t\t\t\tshareWith,\n\t\t\t},\n\t\t}).then(function(data) {\n\t\t\t$list.find('ul').find('li').addClass('hidden')\n\n\t\t\tlet actions\n\t\t\tif (!data.topAction) {\n\t\t\t\tactions = [{\n\t\t\t\t\thyperlink: '#',\n\t\t\t\t\ttitle: t('core', 'No action available'),\n\t\t\t\t}]\n\t\t\t} else {\n\t\t\t\tactions = [data.topAction].concat(data.actions)\n\t\t\t}\n\n\t\t\tactions.forEach(function(action) {\n\t\t\t\t$list.find('ul').append(entryTemplate(action))\n\t\t\t})\n\n\t\t\t$div.trigger('load')\n\t\t}, function(jqXHR) {\n\t\t\t$list.find('ul').find('li').addClass('hidden')\n\n\t\t\tlet title\n\t\t\tif (jqXHR.status === 404) {\n\t\t\t\ttitle = t('core', 'No action available')\n\t\t\t} else {\n\t\t\t\ttitle = t('core', 'Error fetching contact actions')\n\t\t\t}\n\n\t\t\t$list.find('ul').append(entryTemplate({\n\t\t\t\thyperlink: '#',\n\t\t\t\ttitle,\n\t\t\t}))\n\n\t\t\t$div.trigger('loaderror', jqXHR)\n\t\t})\n\t})\n\n\t$(document).click(function(event) {\n\t\tconst clickedList = ($list.has(event.target).length > 0)\n\t\tlet clickedTarget = ($div.has(event.target).length > 0)\n\n\t\t$div.each(function() {\n\t\t\tif ($(this).is(event.target)) {\n\t\t\t\tclickedTarget = true\n\t\t\t}\n\t\t})\n\n\t\tif (clickedList || clickedTarget) {\n\t\t\treturn\n\t\t}\n\n\t\t$list.addClass('hidden')\n\t\t$list.hide()\n\t})\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * check if an element exists.\n * allows you to write if ($('#myid').exists()) to increase readability\n *\n * @see {@link http://stackoverflow.com/questions/31044/is-there-an-exists-function-for-jquery}\n * @return {boolean}\n */\n$.fn.exists = function() {\n\treturn this.length > 0\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * Filter jQuery selector by attribute value\n *\n * @param {string} attrName attribute name\n * @param {string} attrValue attribute value\n * @return {void}\n */\n$.fn.filterAttr = function(attrName, attrValue) {\n\treturn this.filter(function() {\n\t\treturn $(this).attr(attrName) === attrValue\n\t})\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Gary Kim <gary@garykim.dev>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\nimport { isA11yActivation } from '../Util/a11y'\n\n$.widget('oc.ocdialog', {\n\toptions: {\n\t\twidth: 'auto',\n\t\theight: 'auto',\n\t\tcloseButton: true,\n\t\tcloseOnEscape: true,\n\t\tcloseCallback: null,\n\t\tmodal: false,\n\t},\n\t_create() {\n\t\tconst self = this\n\n\t\tthis.originalCss = {\n\t\t\tdisplay: this.element[0].style.display,\n\t\t\twidth: this.element[0].style.width,\n\t\t\theight: this.element[0].style.height,\n\t\t}\n\n\t\tthis.originalTitle = this.element.attr('title')\n\t\tthis.options.title = this.options.title || this.originalTitle\n\n\t\tthis.$dialog = $('<div class=\"oc-dialog\"></div>')\n\t\t\t.attr({\n\t\t\t\t// Setting tabIndex makes the div focusable\n\t\t\t\ttabIndex: -1,\n\t\t\t\trole: 'dialog',\n\t\t\t})\n\t\t\t.insertBefore(this.element)\n\t\tthis.$dialog.append(this.element.detach())\n\t\tthis.element.removeAttr('title').addClass('oc-dialog-content').appendTo(this.$dialog)\n\n\t\t// Activate the primary button on enter if there is a single input\n\t\tif (self.element.find('input').length === 1) {\n\t\t\tconst $input = self.element.find('input')\n\t\t\t$input.on('keydown', function(event) {\n\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\tif (self.$buttonrow) {\n\t\t\t\t\t\tconst $button = self.$buttonrow.find('button.primary')\n\t\t\t\t\t\tif ($button && !$button.prop('disabled')) {\n\t\t\t\t\t\t\t$button.click()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\tthis.$dialog.css({\n\t\t\tdisplay: 'inline-block',\n\t\t\tposition: 'fixed',\n\t\t})\n\n\t\tthis.enterCallback = null\n\n\t\t$(document).on('keydown keyup', function(event) {\n\t\t\tif (\n\t\t\t\tevent.target !== self.$dialog.get(0)\n\t\t\t\t&& self.$dialog.find($(event.target)).length === 0\n\t\t\t) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// Escape\n\t\t\tif (\n\t\t\t\tevent.keyCode === 27\n\t\t\t\t&& event.type === 'keydown'\n\t\t\t\t&& self.options.closeOnEscape\n\t\t\t) {\n\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\tself.close()\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// Enter\n\t\t\tif (event.keyCode === 13) {\n\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\tif (self.enterCallback !== null) {\n\t\t\t\t\tself.enterCallback()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif (event.type === 'keyup') {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t}\n\t\t})\n\n\t\tthis._setOptions(this.options)\n\t\tthis._createOverlay()\n\t},\n\t_init() {\n\t\tthis.$dialog.focus()\n\t\tthis._trigger('open')\n\t},\n\t_setOption(key, value) {\n\t\tconst self = this\n\t\tswitch (key) {\n\t\tcase 'title':\n\t\t\tif (this.$title) {\n\t\t\t\tthis.$title.text(value)\n\t\t\t} else {\n\t\t\t\tconst $title = $('<h2 class=\"oc-dialog-title\">'\n\t\t\t\t\t\t+ value\n\t\t\t\t\t\t+ '</h2>')\n\t\t\t\tthis.$title = $title.prependTo(this.$dialog)\n\t\t\t}\n\t\t\tthis._setSizes()\n\t\t\tbreak\n\t\tcase 'buttons':\n\t\t\tif (this.$buttonrow) {\n\t\t\t\tthis.$buttonrow.empty()\n\t\t\t} else {\n\t\t\t\tconst $buttonrow = $('<div class=\"oc-dialog-buttonrow\"></div>')\n\t\t\t\tthis.$buttonrow = $buttonrow.appendTo(this.$dialog)\n\t\t\t}\n\t\t\tif (value.length === 1) {\n\t\t\t\tthis.$buttonrow.addClass('onebutton')\n\t\t\t} else if (value.length === 2) {\n\t\t\t\tthis.$buttonrow.addClass('twobuttons')\n\t\t\t} else if (value.length === 3) {\n\t\t\t\tthis.$buttonrow.addClass('threebuttons')\n\t\t\t}\n\t\t\t$.each(value, function(idx, val) {\n\t\t\t\tconst $button = $('<button>').text(val.text)\n\t\t\t\tif (val.classes) {\n\t\t\t\t\t$button.addClass(val.classes)\n\t\t\t\t}\n\t\t\t\tif (val.defaultButton) {\n\t\t\t\t\t$button.addClass('primary')\n\t\t\t\t\tself.$defaultButton = $button\n\t\t\t\t}\n\t\t\t\tself.$buttonrow.append($button)\n\t\t\t\t$button.on('click keydown', function(event) {\n\t\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\t\tval.click.apply(self.element[0], arguments)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t\t\tthis.$buttonrow.find('button')\n\t\t\t\t.on('focus', function(event) {\n\t\t\t\t\tself.$buttonrow.find('button').removeClass('primary')\n\t\t\t\t\t$(this).addClass('primary')\n\t\t\t\t})\n\t\t\tthis._setSizes()\n\t\t\tbreak\n\t\tcase 'style':\n\t\t\tif (value.buttons !== undefined) {\n\t\t\t\tthis.$buttonrow.addClass(value.buttons)\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'closeButton':\n\t\t\tif (value) {\n\t\t\t\tconst $closeButton = $('<a class=\"oc-dialog-close\" tabindex=\"0\"></a>')\n\t\t\t\tthis.$dialog.prepend($closeButton)\n\t\t\t\t$closeButton.on('click keydown', function(event) {\n\t\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\t\tself.options.closeCallback && self.options.closeCallback()\n\t\t\t\t\t\tself.close()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tthis.$dialog.find('.oc-dialog-close').remove()\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'width':\n\t\t\tthis.$dialog.css('width', value)\n\t\t\tbreak\n\t\tcase 'height':\n\t\t\tthis.$dialog.css('height', value)\n\t\t\tbreak\n\t\tcase 'close':\n\t\t\tthis.closeCB = value\n\t\t\tbreak\n\t\t}\n\t\t// this._super(key, value);\n\t\t$.Widget.prototype._setOption.apply(this, arguments)\n\t},\n\t_setOptions(options) {\n\t\t// this._super(options);\n\t\t$.Widget.prototype._setOptions.apply(this, arguments)\n\t},\n\t_setSizes() {\n\t\tlet lessHeight = 0\n\t\tif (this.$title) {\n\t\t\tlessHeight += this.$title.outerHeight(true)\n\t\t}\n\t\tif (this.$buttonrow) {\n\t\t\tlessHeight += this.$buttonrow.outerHeight(true)\n\t\t}\n\t\tthis.element.css({\n\t\t\theight: 'calc(100% - ' + lessHeight + 'px)',\n\t\t})\n\t},\n\t_createOverlay() {\n\t\tif (!this.options.modal) {\n\t\t\treturn\n\t\t}\n\n\t\tconst self = this\n\t\tlet contentDiv = $('#content')\n\t\tif (contentDiv.length === 0) {\n\t\t\t// nextcloud-vue compatibility\n\t\t\tcontentDiv = $('.content')\n\t\t}\n\t\tthis.overlay = $('<div>')\n\t\t\t.addClass('oc-dialog-dim')\n\t\t\t.appendTo(contentDiv)\n\t\tthis.overlay.on('click keydown keyup', function(event) {\n\t\t\tif (event.target !== self.$dialog.get(0) && self.$dialog.find($(event.target)).length === 0) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tevent.stopPropagation()\n\n\t\t\t}\n\t\t})\n\t},\n\t_destroyOverlay() {\n\t\tif (!this.options.modal) {\n\t\t\treturn\n\t\t}\n\n\t\tif (this.overlay) {\n\t\t\tthis.overlay.off('click keydown keyup')\n\t\t\tthis.overlay.remove()\n\t\t\tthis.overlay = null\n\t\t}\n\t},\n\twidget() {\n\t\treturn this.$dialog\n\t},\n\tsetEnterCallback(callback) {\n\t\tthis.enterCallback = callback\n\t},\n\tunsetEnterCallback() {\n\t\tthis.enterCallback = null\n\t},\n\tclose() {\n\t\tthis._destroyOverlay()\n\t\tconst self = this\n\t\t// Ugly hack to catch remaining keyup events.\n\t\tsetTimeout(function() {\n\t\t\tself._trigger('close', self)\n\t\t}, 200)\n\n\t\tself.$dialog.remove()\n\t\tthis.destroy()\n\t},\n\tdestroy() {\n\t\tif (this.$title) {\n\t\t\tthis.$title.remove()\n\t\t}\n\t\tif (this.$buttonrow) {\n\t\t\tthis.$buttonrow.remove()\n\t\t}\n\n\t\tif (this.originalTitle) {\n\t\t\tthis.element.attr('title', this.originalTitle)\n\t\t}\n\t\tthis.element.removeClass('oc-dialog-content')\n\t\t\t.css(this.originalCss).detach().insertBefore(this.$dialog)\n\t\tthis.$dialog.remove()\n\t},\n})\n","/**\n * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\nimport escapeHTML from 'escape-html'\n\n/**\n * jQuery plugin for micro templates\n *\n * Strings are automatically escaped, but that can be disabled by setting\n * escapeFunction to null.\n *\n * Usage examples:\n *\n * var htmlStr = '<p>Bake, uncovered, until the {greasystuff} is melted and the {pasta} is heated through, about {min} minutes.</p>'\n * $(htmlStr).octemplate({greasystuff: 'cheese', pasta: 'macaroni', min: 10});\n *\n * var htmlStr = '<p>Welcome back {user}</p>';\n * $(htmlStr).octemplate({user: 'John Q. Public'}, {escapeFunction: null});\n *\n * Be aware that the target string must be wrapped in an HTML element for the\n * plugin to work. The following won't work:\n *\n * var textStr = 'Welcome back {user}';\n * $(textStr).octemplate({user: 'John Q. Public'});\n *\n * For anything larger than one-liners, you can use a simple $.get() ajax\n * request to get the template, or you can embed them it the page using the\n * text/template type:\n *\n * <script id=\"contactListItemTemplate\" type=\"text/template\">\n * <tr class=\"contact\" data-id=\"{id}\">\n * <td class=\"name\">\n * <input type=\"checkbox\" name=\"id\" value=\"{id}\" /><span class=\"nametext\">{name}</span>\n * </td>\n * <td class=\"email\">\n * <a href=\"mailto:{email}\">{email}</a>\n * </td>\n * <td class=\"phone\">{phone}</td>\n * </tr>\n * </script>\n *\n * var $tmpl = $('#contactListItemTemplate');\n * var contacts = // fetched in some ajax call\n *\n * $.each(contacts, function(idx, contact) {\n * $contactList.append(\n * $tmpl.octemplate({\n * id: contact.getId(),\n * name: contact.getDisplayName(),\n * email: contact.getPreferredEmail(),\n * phone: contact.getPreferredPhone(),\n * });\n * );\n * });\n */\n/**\n * Object Template\n * Inspired by micro templating done by e.g. underscore.js\n */\nconst Template = {\n\tinit(vars, options, elem) {\n\t\t// Mix in the passed in options with the default options\n\t\tthis.vars = vars\n\t\tthis.options = $.extend({}, this.options, options)\n\n\t\tthis.elem = elem\n\t\tconst self = this\n\n\t\tif (typeof this.options.escapeFunction === 'function') {\n\t\t\tconst keys = Object.keys(this.vars)\n\t\t\tfor (let key = 0; key < keys.length; key++) {\n\t\t\t\tif (typeof this.vars[keys[key]] === 'string') {\n\t\t\t\t\tthis.vars[keys[key]] = self.options.escapeFunction(this.vars[keys[key]])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst _html = this._build(this.vars)\n\t\treturn $(_html)\n\t},\n\t// From stackoverflow.com/questions/1408289/best-way-to-do-variable-interpolation-in-javascript\n\t_build(o) {\n\t\tconst data = this.elem.attr('type') === 'text/template' ? this.elem.html() : this.elem.get(0).outerHTML\n\t\ttry {\n\t\t\treturn data.replace(/{([^{}]*)}/g,\n\t\t\t\tfunction(a, b) {\n\t\t\t\t\tconst r = o[b]\n\t\t\t\t\treturn typeof r === 'string' || typeof r === 'number' ? r : a\n\t\t\t\t}\n\t\t\t)\n\t\t} catch (e) {\n\t\t\tconsole.error(e, 'data:', data)\n\t\t}\n\t},\n\toptions: {\n\t\tescapeFunction: escapeHTML,\n\t},\n}\n\n$.fn.octemplate = function(vars, options) {\n\tvars = vars || {}\n\tif (this.length) {\n\t\tconst _template = Object.create(Template)\n\t\treturn _template.init(vars, options, this)\n\t}\n}\n","/**\n * @copyright 2016-2018 John Molakvoæ <skjnldsv@protonmail.com>\n * @copyright 2013 Morris Jobke <morris.jobke@gmail.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Sergey Shliakhov <husband.sergey@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport $ from 'jquery'\nimport md5 from 'blueimp-md5'\n\n/*\n * Adds a background color to the element called on and adds the first character\n * of the passed in string. This string is also the seed for the generation of\n * the background color.\n *\n * You have following HTML:\n *\n * <div id=\"albumart\"></div>\n *\n * And call this from Javascript:\n *\n * $('#albumart').imageplaceholder('The Album Title');\n *\n * Which will result in:\n *\n * <div id=\"albumart\" style=\"background-color: rgb(121, 90, 171); ... \">T</div>\n *\n * You may also call it like this, to have a different background, than the seed:\n *\n * $('#albumart').imageplaceholder('The Album Title', 'Album Title');\n *\n * Resulting in:\n *\n * <div id=\"albumart\" style=\"background-color: rgb(121, 90, 171); ... \">A</div>\n *\n */\n\n/*\n* Alternatively, you can use the prototype function to convert your string to rgb colors:\n*\n* \"a6741a86aded5611a8e46ce16f2ad646\".toRgb()\n*\n* Will return the rgb parameters within the following object:\n*\n* Color {r: 208, g: 158, b: 109}\n*\n*/\n\nconst toRgb = (s) => {\n\t// Normalize hash\n\tvar hash = s.toLowerCase()\n\n\t// Already a md5 hash?\n\tif (hash.match(/^([0-9a-f]{4}-?){8}$/) === null) {\n\t\thash = md5(hash)\n\t}\n\n\thash = hash.replace(/[^0-9a-f]/g, '')\n\n\tfunction Color(r, g, b) {\n\t\tthis.r = r\n\t\tthis.g = g\n\t\tthis.b = b\n\t}\n\n\tfunction stepCalc(steps, ends) {\n\t\tvar step = new Array(3)\n\t\tstep[0] = (ends[1].r - ends[0].r) / steps\n\t\tstep[1] = (ends[1].g - ends[0].g) / steps\n\t\tstep[2] = (ends[1].b - ends[0].b) / steps\n\t\treturn step\n\t}\n\n\tfunction mixPalette(steps, color1, color2) {\n\t\tvar palette = []\n\t\tpalette.push(color1)\n\t\tvar step = stepCalc(steps, [color1, color2])\n\t\tfor (var i = 1; i < steps; i++) {\n\t\t\tvar r = parseInt(color1.r + (step[0] * i))\n\t\t\tvar g = parseInt(color1.g + (step[1] * i))\n\t\t\tvar b = parseInt(color1.b + (step[2] * i))\n\t\t\tpalette.push(new Color(r, g, b))\n\t\t}\n\t\treturn palette\n\t}\n\n\tconst red = new Color(182, 70, 157);\n\tconst yellow = new Color(221, 203, 85);\n\tconst blue = new Color(0, 130, 201); // Nextcloud blue\n\t// Number of steps to go from a color to another\n\t// 3 colors * 6 will result in 18 generated colors\n\tconst steps = 6;\n\n\tconst palette1 = mixPalette(steps, red, yellow);\n\tconst palette2 = mixPalette(steps, yellow, blue);\n\tconst palette3 = mixPalette(steps, blue, red);\n\n\tconst finalPalette = palette1.concat(palette2).concat(palette3);\n\n\t// Convert a string to an integer evenly\n\tfunction hashToInt(hash, maximum) {\n\t\tvar finalInt = 0\n\t\tvar result = []\n\n\t\t// Splitting evenly the string\n\t\tfor (var i = 0; i < hash.length; i++) {\n\t\t\t// chars in md5 goes up to f, hex:16\n\t\t\tresult.push(parseInt(hash.charAt(i), 16) % 16)\n\t\t}\n\t\t// Adds up all results\n\t\tfor (var j in result) {\n\t\t\tfinalInt += result[j]\n\t\t}\n\t\t// chars in md5 goes up to f, hex:16\n\t\t// make sure we're always using int in our operation\n\t\treturn parseInt(parseInt(finalInt) % maximum)\n\t}\n\n\treturn finalPalette[hashToInt(hash, steps * 3)]\n}\n\nString.prototype.toRgb = function() {\n\tconsole.warn('String.prototype.toRgb is deprecated! It will be removed in Nextcloud 22.')\n\n\treturn toRgb(this)\n}\n\n$.fn.imageplaceholder = function(seed, text, size) {\n\ttext = text || seed\n\n\t// Compute the hash\n\tvar rgb = toRgb(seed)\n\tthis.css('background-color', 'rgb(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ')')\n\n\t// Placeholders are square\n\tvar height = this.height() || size || 32\n\tthis.height(height)\n\tthis.width(height)\n\n\t// CSS rules\n\tthis.css('color', '#fff')\n\tthis.css('font-weight', 'normal')\n\tthis.css('text-align', 'center')\n\n\t// calculate the height\n\tthis.css('line-height', height + 'px')\n\tthis.css('font-size', (height * 0.55) + 'px')\n\n\tif (seed !== null && seed.length) {\n\t\tvar placeholderText = text.replace(/\\s+/g, ' ').trim().split(' ', 2).map((word) => word[0].toUpperCase()).join('')\n\t\tthis.html(placeholderText);\n\t}\n}\n\n$.fn.clearimageplaceholder = function() {\n\tthis.css('background-color', '')\n\tthis.css('color', '')\n\tthis.css('font-weight', '')\n\tthis.css('text-align', '')\n\tthis.css('line-height', '')\n\tthis.css('font-size', '')\n\tthis.html('')\n\tthis.removeClass('icon-loading')\n\tthis.removeClass('icon-loading-small')\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\nimport { getToken } from '../OC/requesttoken'\n\n$(document).on('ajaxSend', function(elm, xhr, settings) {\n\tif (settings.crossDomain === false) {\n\t\txhr.setRequestHeader('requesttoken', getToken())\n\t\txhr.setRequestHeader('OCS-APIREQUEST', 'true')\n\t}\n})\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * select a range in an input field\n *\n * @see {@link http://stackoverflow.com/questions/499126/jquery-set-cursor-position-in-text-area}\n * @param {number} start start selection from\n * @param {number} end number of char from start\n * @return {void}\n */\n$.fn.selectRange = function(start, end) {\n\treturn this.each(function() {\n\t\tif (this.setSelectionRange) {\n\t\t\tthis.focus()\n\t\t\tthis.setSelectionRange(start, end)\n\t\t} else if (this.createTextRange) {\n\t\t\tconst range = this.createTextRange()\n\t\t\trange.collapse(true)\n\t\t\trange.moveEnd('character', end)\n\t\t\trange.moveStart('character', start)\n\t\t\trange.select()\n\t\t}\n\t})\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * @name Show Password\n * @description\n * @version 1.3.0\n * @requires Jquery 1.5\n *\n * @author Jan Jarfalk <jan.jarfalk@unwrongest.com>\n * author-website http://www.unwrongest.com\n *\n * special-thanks Michel Gratton\n *\n * @license MIT\n */\n$.fn.extend({\n\tshowPassword(c) {\n\n\t\t// Setup callback object\n\t\tconst callback = { fn: null, args: {} }\n\t\tcallback.fn = c\n\n\t\t// Clones passwords and turn the clones into text inputs\n\t\tconst cloneElement = function(element) {\n\n\t\t\tconst $element = $(element)\n\n\t\t\tconst $clone = $('<input />')\n\n\t\t\t// Name added for JQuery Validation compatibility\n\t\t\t// Element name is required to avoid script warning.\n\t\t\t$clone.attr({\n\t\t\t\ttype: 'text',\n\t\t\t\tclass: $element.attr('class'),\n\t\t\t\tstyle: $element.attr('style'),\n\t\t\t\tsize: $element.attr('size'),\n\t\t\t\tname: $element.attr('name') + '-clone',\n\t\t\t\ttabindex: $element.attr('tabindex'),\n\t\t\t\tautocomplete: 'off',\n\t\t\t})\n\n\t\t\tif ($element.attr('placeholder') !== undefined) {\n\t\t\t\t$clone.attr('placeholder', $element.attr('placeholder'))\n\t\t\t}\n\n\t\t\treturn $clone\n\n\t\t}\n\n\t\t// Transfers values between two elements\n\t\tconst update = function(a, b) {\n\t\t\tb.val(a.val())\n\t\t}\n\n\t\t// Shows a or b depending on checkbox\n\t\tconst setState = function(checkbox, a, b) {\n\n\t\t\tif (checkbox.is(':checked')) {\n\t\t\t\tupdate(a, b)\n\t\t\t\tb.show()\n\t\t\t\ta.hide()\n\t\t\t} else {\n\t\t\t\tupdate(b, a)\n\t\t\t\tb.hide()\n\t\t\t\ta.show()\n\t\t\t}\n\n\t\t}\n\n\t\treturn this.each(function() {\n\n\t\t\tconst $input = $(this)\n\t\t\tconst $checkbox = $($input.data('typetoggle'))\n\n\t\t\t// Create clone\n\t\t\tconst $clone = cloneElement($input)\n\t\t\t$clone.insertAfter($input)\n\n\t\t\t// Set callback arguments\n\t\t\tif (callback.fn) {\n\t\t\t\tcallback.args.input = $input\n\t\t\t\tcallback.args.checkbox = $checkbox\n\t\t\t\tcallback.args.clone = $clone\n\t\t\t}\n\n\t\t\t$checkbox.bind('click', function() {\n\t\t\t\tsetState($checkbox, $input, $clone)\n\t\t\t})\n\n\t\t\t$input.bind('keyup', function() {\n\t\t\t\tupdate($input, $clone)\n\t\t\t})\n\n\t\t\t$clone.bind('keyup', function() {\n\t\t\t\tupdate($clone, $input)\n\n\t\t\t\t// Added for JQuery Validation compatibility\n\t\t\t\t// This will trigger validation if it's ON for keyup event\n\t\t\t\t$input.trigger('keyup')\n\n\t\t\t})\n\n\t\t\t// Added for JQuery Validation compatibility\n\t\t\t// This will trigger validation if it's ON for blur event\n\t\t\t$clone.bind('blur', function() {\n\t\t\t\t$input.trigger('focusout')\n\t\t\t})\n\n\t\t\tsetState($checkbox, $input, $clone)\n\n\t\t\t// set type of password field clone (type=text) to password right on submit\n\t\t\t// to prevent browser save the value of this field\n\t\t\t$clone.closest('form').submit(function(e) {\n\t\t\t\t// .prop has to be used, because .attr throws\n\t\t\t\t// an error while changing a type of an input\n\t\t\t\t// element\n\t\t\t\t$clone.prop('type', 'password')\n\t\t\t})\n\n\t\t\tif (callback.fn) {\n\t\t\t\tcallback.fn(callback.args)\n\t\t\t}\n\n\t\t})\n\t},\n})\n","/**\n * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n// Set autocomplete width the same as the related input\n// See http://stackoverflow.com/a/11845718\n$.ui.autocomplete.prototype._resizeMenu = function() {\n\tconst ul = this.menu.element\n\tul.outerWidth(this.element.outerWidth())\n}\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./jquery-ui-fixes.scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./jquery-ui-fixes.scss\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./jquery.ocdialog.scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./jquery.ocdialog.scss\";\n export default content && content.locals ? content.locals : undefined;\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\nimport './avatar'\nimport './contactsmenu'\nimport './exists'\nimport './filterattr'\nimport './ocdialog'\nimport './octemplate'\nimport './placeholder'\nimport './requesttoken'\nimport './selectrange'\nimport './showpassword'\nimport './ui-fixes'\n\nimport './css/jquery-ui-fixes.scss'\nimport './css/jquery.ocdialog.scss'\n\n/**\n * Disable automatic evaluation of responses for $.ajax() functions (and its\n * higher-level alternatives like $.get() and $.post()).\n *\n * If a response to a $.ajax() request returns a content type of \"application/javascript\"\n * JQuery would previously execute the response body. This is a pretty unexpected\n * behaviour and can result in a bypass of our Content-Security-Policy as well as\n * multiple unexpected XSS vectors.\n */\n$.ajaxSetup({\n\tcontents: {\n\t\tscript: false,\n\t},\n})\n\n/**\n * Disable execution of eval in jQuery. We do require an allowed eval CSP\n * configuration at the moment for handlebars et al. But for jQuery there is\n * not much of a reason to execute JavaScript directly via eval.\n *\n * This thus mitigates some unexpected XSS vectors.\n */\n$.globalEval = function() {\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\nimport 'core-js/stable'\nimport 'regenerator-runtime/runtime'\nimport './Polyfill/index.js'\n\n// If you remove the line below, tests won't pass\n// eslint-disable-next-line no-unused-vars\nimport OC from './OC/index.js'\n\nimport './globals.js'\nimport './jquery/index.js'\nimport { initCore } from './init.js'\nimport { registerAppsSlideToggle } from './OC/apps.js'\n\nwindow.addEventListener('DOMContentLoaded', function() {\n\tinitCore()\n\tregisterAppsSlideToggle()\n\n\t// fallback to hashchange when no history support\n\tif (window.history.pushState) {\n\t\twindow.onpopstate = _.bind(OC.Util.History._onPopState, OC.Util.History)\n\t} else {\n\t\t$(window).on('hashchange', _.bind(OC.Util.History._onPopState, OC.Util.History))\n\t}\n})\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"images/ui-icons_1d2d44_256x240.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_1___ = new URL(\"images/ui-icons_ffffff_256x240.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_2___ = new URL(\"images/ui-icons_ffd27a_256x240.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_3___ = new URL(\"images/ui-bg_diagonals-thick_20_666666_40x40.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_4___ = new URL(\"images/ui-bg_flat_10_000000_40x100.png\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___);\nvar ___CSS_LOADER_URL_REPLACEMENT_3___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_3___);\nvar ___CSS_LOADER_URL_REPLACEMENT_4___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_4___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".ui-widget-content{border:1px solid var(--color-border);background:var(--color-main-background) none;color:var(--color-main-text)}.ui-widget-content a{color:var(--color-main-text)}.ui-widget-header{border:none;color:var(--color-main-text);background-image:none}.ui-widget-header a{color:var(--color-main-text)}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid var(--color-border);background:var(--color-main-background) none;font-weight:bold;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #ddd;background:var(--color-main-background) none;font-weight:bold;color:var(--color-main-text)}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:var(--color-main-text)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid var(--color-primary);background:var(--color-main-background) none;font-weight:bold;color:var(--color-main-text)}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:var(--color-main-text)}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid var(--color-main-background);background:var(--color-main-background) none;color:var(--color-text-light);font-weight:600}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:var(--color-text-lighter)}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:var(--color-error);background:var(--color-error) none;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-state-default .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \")}.ui-state-active .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \")}.ui-state-highlight .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_1___ + \")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_2___ + \")}.ui-icon.ui-icon-none{display:none}.ui-widget-overlay{background:#666 url(\" + ___CSS_LOADER_URL_REPLACEMENT_3___ + \") 50% 50% repeat;opacity:.5}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url(\" + ___CSS_LOADER_URL_REPLACEMENT_4___ + \") 50% 50% repeat-x;opacity:.2;border-radius:5px}.ui-tabs{border:none}.ui-tabs .ui-tabs-nav.ui-corner-all{border-bottom-left-radius:0;border-bottom-right-radius:0}.ui-tabs .ui-tabs-nav{background:none;margin-bottom:15px}.ui-tabs .ui-tabs-nav .ui-state-default{border:none;border-bottom:1px solid rgba(0,0,0,0);font-weight:normal;margin:0 !important;padding:0 !important}.ui-tabs .ui-tabs-nav .ui-state-hover,.ui-tabs .ui-tabs-nav .ui-state-active{border:none;border-bottom:1px solid var(--color-main-text);color:var(--color-main-text)}.ui-tabs .ui-tabs-nav .ui-state-hover a,.ui-tabs .ui-tabs-nav .ui-state-hover a:link,.ui-tabs .ui-tabs-nav .ui-state-hover a:hover,.ui-tabs .ui-tabs-nav .ui-state-hover a:visited,.ui-tabs .ui-tabs-nav .ui-state-active a,.ui-tabs .ui-tabs-nav .ui-state-active a:link,.ui-tabs .ui-tabs-nav .ui-state-active a:hover,.ui-tabs .ui-tabs-nav .ui-state-active a:visited{color:var(--color-main-text)}.ui-tabs .ui-tabs-nav .ui-state-active{font-weight:bold}.ui-autocomplete.ui-menu{padding:0}.ui-autocomplete.ui-menu.item-count-1,.ui-autocomplete.ui-menu.item-count-2{overflow-y:hidden}.ui-autocomplete.ui-menu .ui-menu-item a{color:var(--color-text-lighter);display:block;padding:4px 4px 4px 14px}.ui-autocomplete.ui-menu .ui-menu-item a.ui-state-focus,.ui-autocomplete.ui-menu .ui-menu-item a.ui-state-active{box-shadow:inset 4px 0 var(--color-primary-element);color:var(--color-main-text)}.ui-autocomplete.ui-widget-content{background:var(--color-main-background);border-top:none}.ui-autocomplete.ui-corner-all{border-radius:0;border-bottom-left-radius:var(--border-radius);border-bottom-right-radius:var(--border-radius)}.ui-autocomplete .ui-state-hover,.ui-autocomplete .ui-widget-content .ui-state-hover,.ui-autocomplete .ui-widget-header .ui-state-hover,.ui-autocomplete .ui-state-focus,.ui-autocomplete .ui-widget-content .ui-state-focus,.ui-autocomplete .ui-widget-header .ui-state-focus{border:1px solid rgba(0,0,0,0);background:inherit;color:var(--color-primary-element)}.ui-autocomplete .ui-menu-item a{border-radius:0 !important}.ui-button.primary{background-color:var(--color-primary);color:var(--color-primary-text);border:1px solid var(--color-primary-text)}.ui-button:hover{font-weight:bold !important}.ui-draggable-handle,.ui-selectable{touch-action:pan-y}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/jquery/css/jquery-ui-fixes.scss\"],\"names\":[],\"mappings\":\"AAEA,mBACC,oCAAA,CACA,4CAAA,CACA,4BAAA,CAED,qBACC,4BAAA,CAED,kBACC,WAAA,CACA,4BAAA,CACA,qBAAA,CAED,oBACC,4BAAA,CAKD,2FAGC,oCAAA,CACA,4CAAA,CACA,gBAAA,CACA,UAAA,CAED,yEAGC,UAAA,CAED,0KAMC,qBAAA,CACA,4CAAA,CACA,gBAAA,CACA,4BAAA,CAED,2FAIC,4BAAA,CAED,wFAGC,qCAAA,CACA,4CAAA,CACA,gBAAA,CACA,4BAAA,CAED,sEAGC,4BAAA,CAKD,iGAGC,6CAAA,CACA,4CAAA,CACA,6BAAA,CACA,eAAA,CAED,uGAGC,+BAAA,CAED,qFAGC,yBAAA,CACA,kCAAA,CACA,UAAA,CAED,2FAGC,UAAA,CAED,oGAGC,UAAA,CAKD,2BACC,wDAAA,CAED,kDAEC,wDAAA,CAED,0BACC,wDAAA,CAED,6BACC,wDAAA,CAED,uDAEC,wDAAA,CAED,sBACC,YAAA,CAMD,mBACC,sEAAA,CACA,UAAA,CAED,kBACC,oBAAA,CACA,WAAA,CACA,wEAAA,CACA,UAAA,CACA,iBAAA,CAID,SACC,WAAA,CAEA,oCACC,2BAAA,CACA,4BAAA,CAGD,sBACC,eAAA,CACA,kBAAA,CAEA,wCACC,WAAA,CACA,qCAAA,CACA,kBAAA,CACA,mBAAA,CACA,oBAAA,CAGD,6EAEC,WAAA,CACA,8CAAA,CACA,4BAAA,CACA,0WACC,4BAAA,CAGF,uCACC,gBAAA,CAOF,yBACC,SAAA,CAIA,4EAEC,iBAAA,CAGD,yCACC,+BAAA,CACA,aAAA,CACA,wBAAA,CAEA,iHACC,mDAAA,CACA,4BAAA,CAKH,mCACC,uCAAA,CACA,eAAA,CAGD,+BACC,eAAA,CACA,8CAAA,CACA,+CAAA,CAGD,gRAKC,8BAAA,CACA,kBAAA,CACA,kCAAA,CAIA,iCACC,0BAAA,CAKH,mBACC,qCAAA,CACA,+BAAA,CACA,0CAAA,CAID,iBACI,2BAAA,CAKJ,oCAEC,kBAAA\",\"sourcesContent\":[\"/* Component containers\\n----------------------------------*/\\n.ui-widget-content {\\n\\tborder: 1px solid var(--color-border);\\n\\tbackground: var(--color-main-background) none;\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-widget-content a {\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-widget-header {\\n\\tborder: none;\\n\\tcolor: var(--color-main-text);\\n\\tbackground-image: none;\\n}\\n.ui-widget-header a {\\n\\tcolor: var(--color-main-text);\\n}\\n\\n/* Interaction states\\n----------------------------------*/\\n.ui-state-default,\\n.ui-widget-content .ui-state-default,\\n.ui-widget-header .ui-state-default {\\n\\tborder: 1px solid var(--color-border);\\n\\tbackground: var(--color-main-background) none;\\n\\tfont-weight: bold;\\n\\tcolor: #555;\\n}\\n.ui-state-default a,\\n.ui-state-default a:link,\\n.ui-state-default a:visited {\\n\\tcolor: #555;\\n}\\n.ui-state-hover,\\n.ui-widget-content .ui-state-hover,\\n.ui-widget-header .ui-state-hover,\\n.ui-state-focus,\\n.ui-widget-content .ui-state-focus,\\n.ui-widget-header .ui-state-focus {\\n\\tborder: 1px solid #ddd;\\n\\tbackground: var(--color-main-background) none;\\n\\tfont-weight: bold;\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-state-hover a,\\n.ui-state-hover a:hover,\\n.ui-state-hover a:link,\\n.ui-state-hover a:visited {\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-state-active,\\n.ui-widget-content .ui-state-active,\\n.ui-widget-header .ui-state-active {\\n\\tborder: 1px solid var(--color-primary);\\n\\tbackground: var(--color-main-background) none;\\n\\tfont-weight: bold;\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-state-active a,\\n.ui-state-active a:link,\\n.ui-state-active a:visited {\\n\\tcolor: var(--color-main-text);\\n}\\n\\n/* Interaction Cues\\n----------------------------------*/\\n.ui-state-highlight,\\n.ui-widget-content .ui-state-highlight,\\n.ui-widget-header .ui-state-highlight {\\n\\tborder: 1px solid var(--color-main-background);\\n\\tbackground: var(--color-main-background) none;\\n\\tcolor: var(--color-text-light);\\n\\tfont-weight: 600;\\n}\\n.ui-state-highlight a,\\n.ui-widget-content .ui-state-highlight a,\\n.ui-widget-header .ui-state-highlight a {\\n\\tcolor: var(--color-text-lighter);\\n}\\n.ui-state-error,\\n.ui-widget-content .ui-state-error,\\n.ui-widget-header .ui-state-error {\\n\\tborder: var(--color-error);\\n\\tbackground: var(--color-error) none;\\n\\tcolor: #ffffff;\\n}\\n.ui-state-error a,\\n.ui-widget-content .ui-state-error a,\\n.ui-widget-header .ui-state-error a {\\n\\tcolor: #ffffff;\\n}\\n.ui-state-error-text,\\n.ui-widget-content .ui-state-error-text,\\n.ui-widget-header .ui-state-error-text {\\n\\tcolor: #ffffff;\\n}\\n\\n/* Icons\\n----------------------------------*/\\n.ui-state-default .ui-icon {\\n\\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\\n}\\n.ui-state-hover .ui-icon,\\n.ui-state-focus .ui-icon {\\n\\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\\n}\\n.ui-state-active .ui-icon {\\n\\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\\n}\\n.ui-state-highlight .ui-icon {\\n\\tbackground-image: url('images/ui-icons_ffffff_256x240.png');\\n}\\n.ui-state-error .ui-icon,\\n.ui-state-error-text .ui-icon {\\n\\tbackground-image: url('images/ui-icons_ffd27a_256x240.png');\\n}\\n.ui-icon.ui-icon-none {\\n\\tdisplay: none;\\n}\\n\\n/* Misc visuals\\n----------------------------------*/\\n/* Overlays */\\n.ui-widget-overlay {\\n\\tbackground: #666666 url('images/ui-bg_diagonals-thick_20_666666_40x40.png') 50% 50% repeat;\\n\\topacity: .5;\\n}\\n.ui-widget-shadow {\\n\\tmargin: -5px 0 0 -5px;\\n\\tpadding: 5px;\\n\\tbackground: #000000 url('images/ui-bg_flat_10_000000_40x100.png') 50% 50% repeat-x;\\n\\topacity: .2;\\n\\tborder-radius: 5px;\\n}\\n\\n/* Tabs customizations */\\n.ui-tabs {\\n\\tborder: none;\\n\\n\\t.ui-tabs-nav.ui-corner-all {\\n\\t\\tborder-bottom-left-radius: 0;\\n\\t\\tborder-bottom-right-radius: 0;\\n\\t}\\n\\n\\t.ui-tabs-nav {\\n\\t\\tbackground: none;\\n\\t\\tmargin-bottom: 15px;\\n\\n\\t\\t.ui-state-default {\\n\\t\\t\\tborder: none;\\n\\t\\t\\tborder-bottom: 1px solid transparent;\\n\\t\\t\\tfont-weight: normal;\\n\\t\\t\\tmargin: 0 !important;\\n\\t\\t\\tpadding: 0 !important;\\n\\t\\t}\\n\\n\\t\\t.ui-state-hover,\\n\\t\\t.ui-state-active {\\n\\t\\t\\tborder: none;\\n\\t\\t\\tborder-bottom: 1px solid var(--color-main-text);\\n\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\ta, a:link, a:hover, a:visited {\\n\\t\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t.ui-state-active {\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t}\\n\\t}\\n}\\n\\n/* Select menus */\\n.ui-autocomplete {\\n\\t&.ui-menu {\\n\\t\\tpadding: 0;\\n\\n\\t\\t/* scrolling starts from three items,\\n\\t\\t * so hide overflow and scrollbars for a clean layout */\\n\\t\\t&.item-count-1,\\n\\t\\t&.item-count-2 {\\n\\t\\t\\toverflow-y: hidden;\\n\\t\\t}\\n\\n\\t\\t.ui-menu-item a {\\n\\t\\t\\tcolor: var(--color-text-lighter);\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\tpadding: 4px 4px 4px 14px;\\n\\n\\t\\t\\t&.ui-state-focus, &.ui-state-active {\\n\\t\\t\\t\\tbox-shadow: inset 4px 0 var(--color-primary-element);\\n\\t\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&.ui-widget-content {\\n\\t\\tbackground: var(--color-main-background);\\n\\t\\tborder-top: none;\\n\\t}\\n\\n\\t&.ui-corner-all {\\n\\t\\tborder-radius: 0;\\n\\t\\tborder-bottom-left-radius: var(--border-radius);\\n\\t\\tborder-bottom-right-radius: var(--border-radius);\\n\\t}\\n\\n\\t.ui-state-hover, .ui-widget-content .ui-state-hover,\\n\\t.ui-widget-header .ui-state-hover,\\n\\t.ui-state-focus,\\n\\t.ui-widget-content .ui-state-focus,\\n\\t.ui-widget-header .ui-state-focus {\\n\\t\\tborder: 1px solid transparent;\\n\\t\\tbackground: inherit;\\n\\t\\tcolor: var(--color-primary-element);\\n\\t}\\n\\n\\t.ui-menu-item {\\n\\t\\ta {\\n\\t\\t\\tborder-radius: 0 !important;\\n\\t\\t}\\n\\t}\\n}\\n\\n.ui-button.primary {\\n\\tbackground-color: var(--color-primary);\\n\\tcolor: var(--color-primary-text);\\n\\tborder: 1px solid var(--color-primary-text);\\n}\\n\\n// fix ui-buttons on hover\\n.ui-button:hover {\\n font-weight:bold !important;\\n}\\n\\n\\n/* DRAGGABLE */\\n.ui-draggable-handle,\\n.ui-selectable {\\n\\ttouch-action: pan-y;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".oc-dialog{background:var(--color-main-background);color:var(--color-text-light);border-radius:var(--border-radius-large);box-shadow:0 0 30px var(--color-box-shadow);padding:24px;z-index:10000;font-size:100%;box-sizing:border-box;min-width:200px;top:50%;left:50%;transform:translate(-50%, -50%);max-height:calc(100% - 20px);max-width:calc(100% - 20px);overflow:auto}.oc-dialog-title{background:var(--color-main-background)}.oc-dialog-buttonrow{position:relative;display:flex;background:rgba(0,0,0,0);right:0;bottom:0;padding:0;padding-top:10px;box-sizing:border-box;width:100%;background-image:linear-gradient(rgba(255, 255, 255, 0), var(--color-main-background))}.oc-dialog-buttonrow.twobuttons{justify-content:space-between}.oc-dialog-buttonrow.onebutton,.oc-dialog-buttonrow.twobuttons.aside{justify-content:flex-end}.oc-dialog-buttonrow button{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:44px;min-width:44px}.oc-dialog-close{position:absolute;top:0;right:0;padding:25px;background:var(--icon-close-dark) no-repeat center;opacity:.5;border-radius:var(--border-radius-pill)}.oc-dialog-close:hover,.oc-dialog-close:focus,.oc-dialog-close:active{opacity:1}.oc-dialog-dim{background-color:#000;opacity:.2;z-index:9999;position:fixed;top:0;left:0;width:100%;height:100%}body.theme--dark .oc-dialog-dim{opacity:.8}.oc-dialog-content{width:100%;max-width:550px}.oc-dialog.password-confirmation .oc-dialog-content{width:auto}.oc-dialog.password-confirmation .oc-dialog-content input[type=password]{width:100%}.oc-dialog.password-confirmation .oc-dialog-content label{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/jquery/css/jquery.ocdialog.scss\"],\"names\":[],\"mappings\":\"AAAA,WACC,uCAAA,CACA,6BAAA,CACA,wCAAA,CACA,2CAAA,CACA,YAAA,CACA,aAAA,CACA,cAAA,CACA,qBAAA,CACA,eAAA,CACA,OAAA,CACA,QAAA,CACA,+BAAA,CACA,4BAAA,CACA,2BAAA,CACA,aAAA,CAED,iBACC,uCAAA,CAED,qBACC,iBAAA,CACA,YAAA,CACA,wBAAA,CACA,OAAA,CACA,QAAA,CACA,SAAA,CACA,gBAAA,CACA,qBAAA,CACA,UAAA,CACA,sFAAA,CAEA,gCACO,6BAAA,CAGP,qEAEC,wBAAA,CAGD,4BACI,kBAAA,CACA,eAAA,CACH,sBAAA,CACA,WAAA,CACA,cAAA,CAIF,iBACC,iBAAA,CACA,KAAA,CACA,OAAA,CACA,YAAA,CACA,kDAAA,CACA,UAAA,CACA,uCAAA,CAEA,sEAGC,SAAA,CAIF,eACC,qBAAA,CACA,UAAA,CACA,YAAA,CACA,cAAA,CACA,KAAA,CACA,MAAA,CACA,UAAA,CACA,WAAA,CAGD,gCACC,UAAA,CAGD,mBACC,UAAA,CACA,eAAA,CAIA,oDACC,UAAA,CAEA,yEACC,UAAA,CAED,0DACC,YAAA\",\"sourcesContent\":[\".oc-dialog {\\n\\tbackground: var(--color-main-background);\\n\\tcolor: var(--color-text-light);\\n\\tborder-radius: var(--border-radius-large);\\n\\tbox-shadow: 0 0 30px var(--color-box-shadow);\\n\\tpadding: 24px;\\n\\tz-index: 10000;\\n\\tfont-size: 100%;\\n\\tbox-sizing: border-box;\\n\\tmin-width: 200px;\\n\\ttop: 50%;\\n\\tleft: 50%;\\n\\ttransform: translate(-50%, -50%);\\n\\tmax-height: calc(100% - 20px);\\n\\tmax-width: calc(100% - 20px);\\n\\toverflow: auto;\\n}\\n.oc-dialog-title {\\n\\tbackground: var(--color-main-background);\\n}\\n.oc-dialog-buttonrow {\\n\\tposition: relative;\\n\\tdisplay: flex;\\n\\tbackground: transparent;\\n\\tright: 0;\\n\\tbottom: 0;\\n\\tpadding: 0;\\n\\tpadding-top: 10px;\\n\\tbox-sizing: border-box;\\n\\twidth: 100%;\\n\\tbackground-image: linear-gradient(rgba(255, 255, 255, 0.0), var(--color-main-background));\\n\\n\\t&.twobuttons {\\n justify-content: space-between;\\n }\\n\\n\\t&.onebutton,\\n\\t&.twobuttons.aside {\\n\\t\\tjustify-content: flex-end;\\n\\t}\\n\\n\\tbutton {\\n\\t white-space: nowrap;\\n\\t overflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\theight: 44px;\\n\\t\\tmin-width: 44px;\\n\\t}\\n}\\n\\n.oc-dialog-close {\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tright: 0;\\n\\tpadding: 25px;\\n\\tbackground: var(--icon-close-dark) no-repeat center;\\n\\topacity: .5;\\n\\tborder-radius: var(--border-radius-pill);\\n\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\topacity: 1;\\n\\t}\\n}\\n\\n.oc-dialog-dim {\\n\\tbackground-color: #000;\\n\\topacity: .2;\\n\\tz-index: 9999;\\n\\tposition: fixed;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\twidth: 100%;\\n\\theight: 100%;\\n}\\n\\nbody.theme--dark .oc-dialog-dim {\\n\\topacity: .8;\\n}\\n\\n.oc-dialog-content {\\n\\twidth: 100%;\\n\\tmax-width: 550px;\\n}\\n\\n.oc-dialog.password-confirmation {\\n\\t.oc-dialog-content {\\n\\t\\twidth: auto;\\n\\n\\t\\tinput[type=password] {\\n\\t\\t\\twidth: 100%;\\n\\t\\t}\\n\\t\\tlabel {\\n\\t\\t\\tdisplay: none;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-menu[data-v-44a795f6]{width:100%;display:flex;flex-shrink:1;flex-wrap:wrap}.app-menu-main[data-v-44a795f6]{display:flex;flex-wrap:nowrap}.app-menu-main .app-menu-entry[data-v-44a795f6]{width:50px;height:50px;position:relative;display:flex;opacity:.7;filter:var(--background-image-invert-if-bright)}.app-menu-main .app-menu-entry.app-menu-entry__active[data-v-44a795f6]{opacity:1}.app-menu-main .app-menu-entry.app-menu-entry__active[data-v-44a795f6]::before{content:\\\" \\\";position:absolute;pointer-events:none;border-bottom-color:var(--color-main-background);transform:translateX(-50%);width:12px;height:5px;border-radius:3px;background-color:var(--color-primary-text);left:50%;bottom:6px;display:block;transition:all .1s ease-in-out;opacity:1}.app-menu-main .app-menu-entry.app-menu-entry__active .app-menu-entry--label[data-v-44a795f6]{font-weight:bold}.app-menu-main .app-menu-entry a[data-v-44a795f6]{width:calc(100% - 4px);height:calc(100% - 4px);margin:2px;color:var(--color-primary-text);position:relative}.app-menu-main .app-menu-entry img[data-v-44a795f6]{transition:margin .1s ease-in-out;width:20px;height:20px;padding:calc((100% - 20px)/2);box-sizing:content-box}.app-menu-main .app-menu-entry .app-menu-entry--label[data-v-44a795f6]{opacity:0;position:absolute;font-size:12px;color:var(--color-primary-text);text-align:center;bottom:-5px;left:50%;top:45%;display:block;min-width:100%;transform:translateX(-50%);transition:all .1s ease-in-out;width:100%;text-overflow:ellipsis;overflow:hidden;letter-spacing:-0.5px}.app-menu-main .app-menu-entry[data-v-44a795f6]:hover,.app-menu-main .app-menu-entry[data-v-44a795f6]:focus-within{opacity:1}.app-menu-main .app-menu-entry:hover .app-menu-entry--label[data-v-44a795f6],.app-menu-main .app-menu-entry:focus-within .app-menu-entry--label[data-v-44a795f6]{opacity:1;font-weight:bolder;bottom:0;width:100%;text-overflow:ellipsis;overflow:hidden}.app-menu-main[data-v-44a795f6]:hover,.app-menu-main[data-v-44a795f6]:focus-within,.app-menu-main .app-menu-entry[data-v-44a795f6]:hover,.app-menu-main .app-menu-entry[data-v-44a795f6]:focus{opacity:1}.app-menu-main:hover img[data-v-44a795f6],.app-menu-main:focus-within img[data-v-44a795f6],.app-menu-main .app-menu-entry:hover img[data-v-44a795f6],.app-menu-main .app-menu-entry:focus img[data-v-44a795f6]{margin-top:-8px}.app-menu-main:hover .app-menu-entry--label[data-v-44a795f6],.app-menu-main:focus-within .app-menu-entry--label[data-v-44a795f6],.app-menu-main .app-menu-entry:hover .app-menu-entry--label[data-v-44a795f6],.app-menu-main .app-menu-entry:focus .app-menu-entry--label[data-v-44a795f6]{opacity:1;bottom:0}.app-menu-main[data-v-44a795f6]:hover::before,.app-menu-main:hover .app-menu-entry[data-v-44a795f6]::before,.app-menu-main[data-v-44a795f6]:focus-within::before,.app-menu-main:focus-within .app-menu-entry[data-v-44a795f6]::before,.app-menu-main .app-menu-entry[data-v-44a795f6]:hover::before,.app-menu-main .app-menu-entry:hover .app-menu-entry[data-v-44a795f6]::before,.app-menu-main .app-menu-entry[data-v-44a795f6]:focus::before,.app-menu-main .app-menu-entry:focus .app-menu-entry[data-v-44a795f6]::before{opacity:0}[data-v-44a795f6] .app-menu-more .button-vue--vue-tertiary{color:var(--color-primary-text);opacity:.7;margin:3px;filter:var(--background-image-invert-if-bright)}[data-v-44a795f6] .app-menu-more .button-vue--vue-tertiary:hover{opacity:1;background-color:rgba(0,0,0,0) !important}[data-v-44a795f6] .app-menu-more .button-vue--vue-tertiary:focus-visible{opacity:1;outline:none !important}.app-menu-popover-entry .app-icon[data-v-44a795f6]{position:relative;height:44px}.app-menu-popover-entry .app-icon.has-unread[data-v-44a795f6]::after{background-color:var(--color-main-text)}.app-menu-popover-entry .app-icon img[data-v-44a795f6]{width:20px;height:20px;padding:15px}.has-unread[data-v-44a795f6]::after{content:\\\"\\\";width:8px;height:8px;background-color:var(--color-primary-text);border-radius:50%;position:absolute;display:block;top:10px;right:10px}.unread-counter[data-v-44a795f6]{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/AppMenu.vue\"],\"names\":[],\"mappings\":\"AAGA,2BACC,UAAA,CACA,YAAA,CACA,aAAA,CACA,cAAA,CAED,gCACC,YAAA,CACA,gBAAA,CAEA,gDACC,UAAA,CACA,WAAA,CACA,iBAAA,CACA,YAAA,CACA,UAAA,CACA,+CAAA,CAEA,uEACC,SAAA,CAEA,+EACC,WAAA,CACA,iBAAA,CACA,mBAAA,CACA,gDAAA,CACA,0BAAA,CACA,UAAA,CACA,UAAA,CACA,iBAAA,CACA,0CAAA,CACA,QAAA,CACA,UAAA,CACA,aAAA,CACA,8BAAA,CACA,SAAA,CAGD,8FACC,gBAAA,CAIF,kDACC,sBAAA,CACA,uBAAA,CACA,UAAA,CACA,+BAAA,CACA,iBAAA,CAGD,oDACC,iCAAA,CACA,UAvDgB,CAwDhB,WAxDgB,CAyDhB,6BAAA,CACA,sBAAA,CAGD,uEACC,SAAA,CACA,iBAAA,CACA,cAAA,CACA,+BAAA,CACA,iBAAA,CACA,WAAA,CACA,QAAA,CACA,OAAA,CACA,aAAA,CACA,cAAA,CACA,0BAAA,CACA,8BAAA,CACA,UAAA,CACA,sBAAA,CACA,eAAA,CACA,qBAAA,CAGD,mHAEC,SAAA,CACA,iKACC,SAAA,CACA,kBAAA,CACA,QAAA,CACA,UAAA,CACA,sBAAA,CACA,eAAA,CAOH,+LAIC,SAAA,CAEA,+MACC,eAAA,CAGD,2RACC,SAAA,CACA,QAAA,CAGD,8fACC,SAAA,CAKH,2DACC,+BAAA,CACA,UAAA,CACA,UAAA,CACA,+CAAA,CAEA,iEACC,SAAA,CACA,yCAAA,CAGD,yEACC,SAAA,CACA,uBAAA,CAKD,mDACC,iBAAA,CACA,WAAA,CAEA,qEACC,uCAAA,CAGD,uDACC,UAhJgB,CAiJhB,WAjJgB,CAkJhB,YAAA,CAKH,oCACC,UAAA,CACA,SAAA,CACA,UAAA,CACA,0CAAA,CACA,iBAAA,CACA,iBAAA,CACA,aAAA,CACA,QAAA,CACA,UAAA,CAGD,iCACC,YAAA\",\"sourcesContent\":[\"\\n$header-icon-size: 20px;\\n\\n.app-menu {\\n\\twidth: 100%;\\n\\tdisplay: flex;\\n\\tflex-shrink: 1;\\n\\tflex-wrap: wrap;\\n}\\n.app-menu-main {\\n\\tdisplay: flex;\\n\\tflex-wrap: nowrap;\\n\\n\\t.app-menu-entry {\\n\\t\\twidth: 50px;\\n\\t\\theight: 50px;\\n\\t\\tposition: relative;\\n\\t\\tdisplay: flex;\\n\\t\\topacity: .7;\\n\\t\\tfilter: var(--background-image-invert-if-bright);\\n\\n\\t\\t&.app-menu-entry__active {\\n\\t\\t\\topacity: 1;\\n\\n\\t\\t\\t&::before {\\n\\t\\t\\t\\tcontent: \\\" \\\";\\n\\t\\t\\t\\tposition: absolute;\\n\\t\\t\\t\\tpointer-events: none;\\n\\t\\t\\t\\tborder-bottom-color: var(--color-main-background);\\n\\t\\t\\t\\ttransform: translateX(-50%);\\n\\t\\t\\t\\twidth: 12px;\\n\\t\\t\\t\\theight: 5px;\\n\\t\\t\\t\\tborder-radius: 3px;\\n\\t\\t\\t\\tbackground-color: var(--color-primary-text);\\n\\t\\t\\t\\tleft: 50%;\\n\\t\\t\\t\\tbottom: 6px;\\n\\t\\t\\t\\tdisplay: block;\\n\\t\\t\\t\\ttransition: all 0.1s ease-in-out;\\n\\t\\t\\t\\topacity: 1;\\n\\t\\t\\t}\\n\\n\\t\\t\\t.app-menu-entry--label {\\n\\t\\t\\t\\tfont-weight: bold;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\ta {\\n\\t\\t\\twidth: calc(100% - 4px);\\n\\t\\t\\theight: calc(100% - 4px);\\n\\t\\t\\tmargin: 2px;\\n\\t\\t\\tcolor: var(--color-primary-text);\\n\\t\\t\\tposition: relative;\\n\\t\\t}\\n\\n\\t\\timg {\\n\\t\\t\\ttransition: margin 0.1s ease-in-out;\\n\\t\\t\\twidth: $header-icon-size;\\n\\t\\t\\theight: $header-icon-size;\\n\\t\\t\\tpadding: calc((100% - $header-icon-size) / 2);\\n\\t\\t\\tbox-sizing: content-box;\\n\\t\\t}\\n\\n\\t\\t.app-menu-entry--label {\\n\\t\\t\\topacity: 0;\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\tfont-size: 12px;\\n\\t\\t\\tcolor: var(--color-primary-text);\\n\\t\\t\\ttext-align: center;\\n\\t\\t\\tbottom: -5px;\\n\\t\\t\\tleft: 50%;\\n\\t\\t\\ttop: 45%;\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\tmin-width: 100%;\\n\\t\\t\\ttransform: translateX(-50%);\\n\\t\\t\\ttransition: all 0.1s ease-in-out;\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\tletter-spacing: -0.5px;\\n\\t\\t}\\n\\n\\t\\t&:hover,\\n\\t\\t&:focus-within {\\n\\t\\t\\topacity: 1;\\n\\t\\t\\t.app-menu-entry--label {\\n\\t\\t\\t\\topacity: 1;\\n\\t\\t\\t\\tfont-weight: bolder;\\n\\t\\t\\t\\tbottom: 0;\\n\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\t\\toverflow: hidden;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t}\\n\\n\\t// Show labels\\n\\t&:hover,\\n\\t&:focus-within,\\n\\t.app-menu-entry:hover,\\n\\t.app-menu-entry:focus {\\n\\t\\topacity: 1;\\n\\n\\t\\timg {\\n\\t\\t\\tmargin-top: -8px;\\n\\t\\t}\\n\\n\\t\\t.app-menu-entry--label {\\n\\t\\t\\topacity: 1;\\n\\t\\t\\tbottom: 0;\\n\\t\\t}\\n\\n\\t\\t&::before, .app-menu-entry::before {\\n\\t\\t\\topacity: 0;\\n\\t\\t}\\n\\t}\\n}\\n\\n::v-deep .app-menu-more .button-vue--vue-tertiary {\\n\\tcolor: var(--color-primary-text);\\n\\topacity: .7;\\n\\tmargin: 3px;\\n\\tfilter: var(--background-image-invert-if-bright);\\n\\n\\t&:hover {\\n\\t\\topacity: 1;\\n\\t\\tbackground-color: transparent !important;\\n\\t}\\n\\n\\t&:focus-visible {\\n\\t\\topacity: 1;\\n\\t\\toutline: none !important;\\n\\t}\\n}\\n\\n.app-menu-popover-entry {\\n\\t.app-icon {\\n\\t\\tposition: relative;\\n\\t\\theight: 44px;\\n\\n\\t\\t&.has-unread::after {\\n\\t\\t\\tbackground-color: var(--color-main-text);\\n\\t\\t}\\n\\n\\t\\timg {\\n\\t\\t\\twidth: $header-icon-size;\\n\\t\\t\\theight: $header-icon-size;\\n\\t\\t\\tpadding: calc((50px - $header-icon-size) / 2);\\n\\t\\t}\\n\\t}\\n}\\n\\n.has-unread::after {\\n\\tcontent: \\\"\\\";\\n\\twidth: 8px;\\n\\theight: 8px;\\n\\tbackground-color: var(--color-primary-text);\\n\\tborder-radius: 50%;\\n\\tposition: absolute;\\n\\tdisplay: block;\\n\\ttop: 10px;\\n\\tright: 10px;\\n}\\n\\n.unread-counter {\\n\\tdisplay: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".menu-entry__loading-icon[data-v-6e59d13c]{margin-right:8px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/UserMenu/UserMenuEntry.vue\"],\"names\":[],\"mappings\":\"AAEC,2CACC,gBAAA\",\"sourcesContent\":[\"\\n.menu-entry {\\n\\t&__loading-icon {\\n\\t\\tmargin-right: 8px;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#contactsmenu-menu[data-v-1563c388]{height:calc(100vh - 150px);max-height:302px;min-height:175px;width:350px}#contactsmenu-menu[data-v-1563c388] .emptycontent{margin-top:5vh !important;margin-bottom:1.5vh}#contactsmenu-menu[data-v-1563c388] .emptycontent .icon-loading,#contactsmenu-menu[data-v-1563c388] .emptycontent .icon-search{display:inline-block}#contactsmenu-menu[data-v-1563c388] #contactsmenu-search{width:calc(100% - 16px);margin:8px;height:34px}#contactsmenu-menu[data-v-1563c388] .content{height:calc(100vh - 150px - 50px);max-height:250px;min-height:125px;overflow-y:auto}#contactsmenu-menu[data-v-1563c388] .content .footer{text-align:center}#contactsmenu-menu[data-v-1563c388] .content .footer a{display:block;width:100%;padding:12px 0;opacity:.5}#contactsmenu-menu[data-v-1563c388] a{padding:2px}#contactsmenu-menu[data-v-1563c388] a:focus-visible{box-shadow:inset 0 0 0 2px var(--color-main-text) !important}#contactsmenu-menu[data-v-1563c388] .contact{display:flex;position:relative;align-items:center;padding:3px 3px 3px 10px}#contactsmenu-menu[data-v-1563c388] .contact .avatar{height:32px;width:32px;display:inline-block}#contactsmenu-menu[data-v-1563c388] .contact .body{flex-grow:1;padding-left:8px;min-width:0}#contactsmenu-menu[data-v-1563c388] .contact .body div{position:relative;width:100%;overflow-x:hidden;text-overflow:ellipsis}#contactsmenu-menu[data-v-1563c388] .contact .body .last-message,#contactsmenu-menu[data-v-1563c388] .contact .body .email-address{color:var(--color-text-maxcontrast)}#contactsmenu-menu[data-v-1563c388] .contact .top-action,#contactsmenu-menu[data-v-1563c388] .contact .second-action,#contactsmenu-menu[data-v-1563c388] .contact .other-actions{width:16px;height:16px;opacity:.5;cursor:pointer}#contactsmenu-menu[data-v-1563c388] .contact .top-action:not(button),#contactsmenu-menu[data-v-1563c388] .contact .second-action:not(button),#contactsmenu-menu[data-v-1563c388] .contact .other-actions:not(button){padding:14px}#contactsmenu-menu[data-v-1563c388] .contact .top-action img,#contactsmenu-menu[data-v-1563c388] .contact .second-action img,#contactsmenu-menu[data-v-1563c388] .contact .other-actions img{filter:var(--background-invert-if-dark)}#contactsmenu-menu[data-v-1563c388] .contact .top-action:hover,#contactsmenu-menu[data-v-1563c388] .contact .top-action:active,#contactsmenu-menu[data-v-1563c388] .contact .top-action:focus,#contactsmenu-menu[data-v-1563c388] .contact .second-action:hover,#contactsmenu-menu[data-v-1563c388] .contact .second-action:active,#contactsmenu-menu[data-v-1563c388] .contact .second-action:focus,#contactsmenu-menu[data-v-1563c388] .contact .other-actions:hover,#contactsmenu-menu[data-v-1563c388] .contact .other-actions:active,#contactsmenu-menu[data-v-1563c388] .contact .other-actions:focus{opacity:1}#contactsmenu-menu[data-v-1563c388] .contact button.other-actions{width:44px}#contactsmenu-menu[data-v-1563c388] .contact button.other-actions:focus{border-color:rgba(0,0,0,0);box-shadow:0 0 0 2px var(--color-main-text)}#contactsmenu-menu[data-v-1563c388] .contact button.other-actions:focus-visible{border-radius:var(--border-radius-pill)}#contactsmenu-menu[data-v-1563c388] .contact .menu{top:47px;margin-right:13px}#contactsmenu-menu[data-v-1563c388] .contact .popovermenu::after{right:2px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/views/ContactsMenu.vue\"],\"names\":[],\"mappings\":\"AACA,oCAEC,0BAAA,CACA,gBAAA,CACA,gBAAA,CACA,WAAA,CAGC,kDACC,yBAAA,CACA,mBAAA,CACA,+HAEC,oBAAA,CAIF,yDACC,uBAAA,CACA,UAAA,CACA,WAAA,CAGD,6CAEC,iCAAA,CACA,gBAAA,CACA,gBAAA,CACA,eAAA,CAEA,qDACC,iBAAA,CAEA,uDACC,aAAA,CACA,UAAA,CACA,cAAA,CACA,UAAA,CAKH,sCACC,WAAA,CAEA,oDACC,4DAAA,CAIF,6CACC,YAAA,CACA,iBAAA,CACA,kBAAA,CACA,wBAAA,CAEA,qDACC,WAAA,CACA,UAAA,CACA,oBAAA,CAGD,mDACC,WAAA,CACA,gBAAA,CACA,WAAA,CAEA,uDACC,iBAAA,CACA,UAAA,CACA,iBAAA,CACA,sBAAA,CAGD,mIACC,mCAAA,CAIF,iLACC,UAAA,CACA,WAAA,CACA,UAAA,CACA,cAAA,CAEA,qNACC,YAAA,CAED,6LACC,uCAAA,CAGD,4kBAGC,SAAA,CAIF,kEACC,UAAA,CAEA,wEACC,0BAAA,CACA,2CAAA,CAGD,gFACC,uCAAA,CAKF,mDACC,QAAA,CACA,iBAAA,CAED,iEACC,SAAA\",\"sourcesContent\":[\"\\n#contactsmenu-menu {\\n\\t/* show 2.5 to 4.5 entries depending on the screen height */\\n\\theight: calc(100vh - 50px * 3);\\n\\tmax-height: calc(50px * 6 + 2px);\\n\\tmin-height: calc(50px * 3.5);\\n\\twidth: 350px;\\n\\n\\t&:deep {\\n\\t\\t.emptycontent {\\n\\t\\t\\tmargin-top: 5vh !important;\\n\\t\\t\\tmargin-bottom: 1.5vh;\\n\\t\\t\\t.icon-loading,\\n\\t\\t\\t.icon-search {\\n\\t\\t\\t\\tdisplay: inline-block;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t#contactsmenu-search {\\n\\t\\t\\twidth: calc(100% - 16px);\\n\\t\\t\\tmargin: 8px;\\n\\t\\t\\theight: 34px;\\n\\t\\t}\\n\\n\\t\\t.content {\\n\\t\\t\\t/* fixed max height of the parent container without the search input */\\n\\t\\t\\theight: calc(100vh - 50px * 3 - 50px);\\n\\t\\t\\tmax-height: calc(50px * 5);\\n\\t\\t\\tmin-height: calc(50px * 3.5 - 50px);\\n\\t\\t\\toverflow-y: auto;\\n\\n\\t\\t\\t.footer {\\n\\t\\t\\t\\ttext-align: center;\\n\\n\\t\\t\\t\\ta {\\n\\t\\t\\t\\t\\tdisplay: block;\\n\\t\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\t\\tpadding: 12px 0;\\n\\t\\t\\t\\t\\topacity: .5;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\ta {\\n\\t\\t\\tpadding: 2px;\\n\\n\\t\\t\\t&:focus-visible {\\n\\t\\t\\t\\tbox-shadow: inset 0 0 0 2px var(--color-main-text) !important; // override rule in core/css/headers.scss #header a:focus-visible\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.contact {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tposition: relative;\\n\\t\\t\\talign-items: center;\\n\\t\\t\\tpadding: 3px 3px 3px 10px;\\n\\n\\t\\t\\t.avatar {\\n\\t\\t\\t\\theight: 32px;\\n\\t\\t\\t\\twidth: 32px;\\n\\t\\t\\t\\tdisplay: inline-block;\\n\\t\\t\\t}\\n\\n\\t\\t\\t.body {\\n\\t\\t\\t\\tflex-grow: 1;\\n\\t\\t\\t\\tpadding-left: 8px;\\n\\t\\t\\t\\tmin-width: 0;\\n\\n\\t\\t\\t\\tdiv {\\n\\t\\t\\t\\t\\tposition: relative;\\n\\t\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\t\\toverflow-x: hidden;\\n\\t\\t\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t.last-message, .email-address {\\n\\t\\t\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t.top-action, .second-action, .other-actions {\\n\\t\\t\\t\\twidth: 16px;\\n\\t\\t\\t\\theight: 16px;\\n\\t\\t\\t\\topacity: .5;\\n\\t\\t\\t\\tcursor: pointer;\\n\\n\\t\\t\\t\\t&:not(button) {\\n\\t\\t\\t\\t\\tpadding: 14px;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\timg {\\n\\t\\t\\t\\t\\tfilter: var(--background-invert-if-dark);\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t&:hover,\\n\\t\\t\\t\\t&:active,\\n\\t\\t\\t\\t&:focus {\\n\\t\\t\\t\\t\\topacity: 1;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\tbutton.other-actions {\\n\\t\\t\\t\\twidth: 44px;\\n\\n\\t\\t\\t\\t&:focus {\\n\\t\\t\\t\\t\\tborder-color: transparent;\\n\\t\\t\\t\\t\\tbox-shadow: 0 0 0 2px var(--color-main-text);\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t&:focus-visible {\\n\\t\\t\\t\\t\\tborder-radius: var(--border-radius-pill);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t/* actions menu */\\n\\t\\t\\t.menu {\\n\\t\\t\\t\\ttop: 47px;\\n\\t\\t\\t\\tmargin-right: 13px;\\n\\t\\t\\t}\\n\\t\\t\\t.popovermenu::after {\\n\\t\\t\\t\\tright: 2px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".user-menu[data-v-6a818bbc]{margin-right:12px}.user-menu[data-v-6a818bbc] .header-menu__trigger{opacity:1 !important}.user-menu[data-v-6a818bbc] .header-menu__trigger:focus-visible .user-menu__avatar{border:2px solid var(--color-primary-text)}.user-menu[data-v-6a818bbc] .header-menu__carret{display:none !important}.user-menu[data-v-6a818bbc] .header-menu__content{width:fit-content !important}.user-menu__avatar[data-v-6a818bbc]:active,.user-menu__avatar[data-v-6a818bbc]:focus,.user-menu__avatar[data-v-6a818bbc]:hover{border:2px solid var(--color-primary-text)}.user-menu__nav[data-v-6a818bbc]{display:flex;width:100%}.user-menu__nav ul[data-v-6a818bbc]{display:flex;flex-direction:column;gap:2px}.user-menu__nav ul[data-v-6a818bbc] li a,.user-menu__nav ul[data-v-6a818bbc] li button{border-radius:6px;display:inline-flex;align-items:center;height:var(--header-menu-item-height);color:var(--color-main-text);padding:10px 8px;box-sizing:border-box;white-space:nowrap;position:relative;width:100%}.user-menu__nav ul[data-v-6a818bbc] li a:hover,.user-menu__nav ul[data-v-6a818bbc] li button:hover{background-color:var(--color-background-hover)}.user-menu__nav ul[data-v-6a818bbc] li a:focus-visible,.user-menu__nav ul[data-v-6a818bbc] li button:focus-visible{background-color:var(--color-background-hover) !important;box-shadow:inset 0 0 0 2px var(--color-primary) !important;outline:none !important}.user-menu__nav ul[data-v-6a818bbc] li a:active,.user-menu__nav ul[data-v-6a818bbc] li a.active,.user-menu__nav ul[data-v-6a818bbc] li button:active,.user-menu__nav ul[data-v-6a818bbc] li button.active{background-color:var(--color-primary-light)}.user-menu__nav ul[data-v-6a818bbc] li a span,.user-menu__nav ul[data-v-6a818bbc] li button span{padding-bottom:0;color:var(--color-main-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:110px}.user-menu__nav ul[data-v-6a818bbc] li a img,.user-menu__nav ul[data-v-6a818bbc] li button img{width:16px;height:16px;margin-right:10px}.user-menu__nav ul[data-v-6a818bbc] li a img,.user-menu__nav ul[data-v-6a818bbc] li a svg,.user-menu__nav ul[data-v-6a818bbc] li button img,.user-menu__nav ul[data-v-6a818bbc] li button svg{opacity:.7;filter:var(--background-invert-if-dark)}.user-menu__nav ul[data-v-6a818bbc] li button{background-color:rgba(0,0,0,0);border:none;font-weight:normal;margin:0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/views/UserMenu.vue\"],\"names\":[],\"mappings\":\"AACA,4BACC,iBAAA,CAIE,kDACC,oBAAA,CAEC,mFACC,0CAAA,CAKH,iDACC,uBAAA,CAGD,kDACC,4BAAA,CAMF,+HAGC,0CAAA,CAIF,iCACC,YAAA,CACA,UAAA,CAEA,oCACC,YAAA,CACA,qBAAA,CACA,OAAA,CAIE,uFAEC,iBAAA,CACA,mBAAA,CACA,kBAAA,CACA,qCAAA,CACA,4BAAA,CACA,gBAAA,CACA,qBAAA,CACA,kBAAA,CACA,iBAAA,CACA,UAAA,CAEA,mGACC,8CAAA,CAGD,mHACC,yDAAA,CACA,0DAAA,CACA,uBAAA,CAGD,0MAEC,2CAAA,CAGD,iGACC,gBAAA,CACA,4BAAA,CACA,kBAAA,CACA,eAAA,CACA,sBAAA,CACA,eAAA,CAGD,+FACC,UAAA,CACA,WAAA,CACA,iBAAA,CAGD,8LAEC,UAAA,CACA,uCAAA,CAKF,8CACC,8BAAA,CACA,WAAA,CACA,kBAAA,CACA,QAAA\",\"sourcesContent\":[\"\\n.user-menu {\\n\\tmargin-right: 12px;\\n\\n\\t&:deep {\\n\\t\\t.header-menu {\\n\\t\\t\\t&__trigger {\\n\\t\\t\\t\\topacity: 1 !important;\\n\\t\\t\\t\\t&:focus-visible {\\n\\t\\t\\t\\t\\t.user-menu__avatar {\\n\\t\\t\\t\\t\\t\\tborder: 2px solid var(--color-primary-text);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t&__carret {\\n\\t\\t\\t\\tdisplay: none !important;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&__content {\\n\\t\\t\\t\\twidth: fit-content !important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&__avatar {\\n\\t\\t&:active,\\n\\t\\t&:focus,\\n\\t\\t&:hover {\\n\\t\\t\\tborder: 2px solid var(--color-primary-text);\\n\\t\\t}\\n\\t}\\n\\n\\t&__nav {\\n\\t\\tdisplay: flex;\\n\\t\\twidth: 100%;\\n\\n\\t\\tul {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tflex-direction: column;\\n\\t\\t\\tgap: 2px;\\n\\n\\t\\t\\t&:deep {\\n\\t\\t\\t\\tli {\\n\\t\\t\\t\\t\\ta,\\n\\t\\t\\t\\t\\tbutton {\\n\\t\\t\\t\\t\\t\\tborder-radius: 6px;\\n\\t\\t\\t\\t\\t\\tdisplay: inline-flex;\\n\\t\\t\\t\\t\\t\\talign-items: center;\\n\\t\\t\\t\\t\\t\\theight: var(--header-menu-item-height);\\n\\t\\t\\t\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\t\\t\\t\\tpadding: 10px 8px;\\n\\t\\t\\t\\t\\t\\tbox-sizing: border-box;\\n\\t\\t\\t\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\t\\t\\t\\tposition: relative;\\n\\t\\t\\t\\t\\t\\twidth: 100%;\\n\\n\\t\\t\\t\\t\\t\\t&:hover {\\n\\t\\t\\t\\t\\t\\t\\tbackground-color: var(--color-background-hover);\\n\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t&:focus-visible {\\n\\t\\t\\t\\t\\t\\t\\tbackground-color: var(--color-background-hover) !important;\\n\\t\\t\\t\\t\\t\\t\\tbox-shadow: inset 0 0 0 2px var(--color-primary) !important;\\n\\t\\t\\t\\t\\t\\t\\toutline: none !important;\\n\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t&:active,\\n\\t\\t\\t\\t\\t\\t&.active {\\n\\t\\t\\t\\t\\t\\t\\tbackground-color: var(--color-primary-light);\\n\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\tspan {\\n\\t\\t\\t\\t\\t\\t\\tpadding-bottom: 0;\\n\\t\\t\\t\\t\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\t\\t\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\t\\t\\t\\t\\toverflow: hidden;\\n\\t\\t\\t\\t\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\t\\t\\t\\t\\tmax-width: 110px;\\n\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\timg {\\n\\t\\t\\t\\t\\t\\t\\twidth: 16px;\\n\\t\\t\\t\\t\\t\\t\\theight: 16px;\\n\\t\\t\\t\\t\\t\\t\\tmargin-right: 10px;\\n\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\timg,\\n\\t\\t\\t\\t\\t\\tsvg {\\n\\t\\t\\t\\t\\t\\t\\topacity: .7;\\n\\t\\t\\t\\t\\t\\t\\tfilter: var(--background-invert-if-dark);\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t// Override global button styles\\n\\t\\t\\t\\t\\tbutton {\\n\\t\\t\\t\\t\\t\\tbackground-color: transparent;\\n\\t\\t\\t\\t\\t\\tborder: none;\\n\\t\\t\\t\\t\\t\\tfont-weight: normal;\\n\\t\\t\\t\\t\\t\\tmargin: 0;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.program(5, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":1},\"end\":{\"line\":10,\"column\":8}}})) != null ? stack1 : \"\");\n},\"2\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileTitle\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":2},\"end\":{\"line\":7,\"column\":9}}})) != null ? stack1 : \"\");\n},\"3\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t\t<a class=\\\"profile-link--avatar\\\" href=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1), depth0))\n + \"\\\">\\n\t\t\t\t<img src=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32\\\" class=\\\"avatar\\\" srcset=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32 1x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=64 2x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=128 4x\\\" alt=\\\"\\\">\\n\t\t\t</a>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t<img src=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32\\\" class=\\\"avatar\\\" srcset=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32 1x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=64 2x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=128 4x\\\" alt=\\\"\\\">\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.program(11, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":12,\"column\":1},\"end\":{\"line\":20,\"column\":8}}})) != null ? stack1 : \"\");\n},\"8\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileTitle\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":13,\"column\":2},\"end\":{\"line\":17,\"column\":9}}})) != null ? stack1 : \"\");\n},\"9\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t\t<a class=\\\"profile-link--avatar\\\" href=\\\"\"\n + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1), depth0))\n + \"\\\">\\n\t\t\t\t<div class=\\\"avatar\\\"></div>\\n\t\t\t</a>\\n\";\n},\"11\":function(container,depth0,helpers,partials,data) {\n return \"\t\t<div class=\\\"avatar\\\"></div>\\n\";\n},\"13\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileTitle\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(14, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":23,\"column\":1},\"end\":{\"line\":29,\"column\":8}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(16, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":30,\"column\":1},\"end\":{\"line\":34,\"column\":8}}})) != null ? stack1 : \"\");\n},\"14\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t<a class=\\\"body profile-link--full-name\\\" href=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1), depth0))\n + \"\\\">\\n\t\t\t<div class=\\\"full-name\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"fullName\") : stack1), depth0))\n + \"</div>\\n\t\t\t<div class=\\\"last-message\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"lastMessage\") : stack1), depth0))\n + \"</div>\\n\t\t\t<div class=\\\"email-address\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"emailAddresses\") : stack1), depth0))\n + \"</div>\\n\t\t</a>\\n\";\n},\"16\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t<a class=\\\"top-action\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"hyperlink\") : stack1), depth0))\n + \"\\\" title=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n\t\t\t<img src=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"icon\") : stack1), depth0))\n + \"\\\" alt=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n\t\t</a>\\n\";\n},\"18\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(19, data, 0),\"inverse\":container.program(21, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":35,\"column\":0},\"end\":{\"line\":50,\"column\":0}}})) != null ? stack1 : \"\");\n},\"19\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t<a class=\\\"body\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"hyperlink\") : stack1), depth0))\n + \"\\\">\\n\t\t<div class=\\\"full-name\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"fullName\") : stack1), depth0))\n + \"</div>\\n\t\t<div class=\\\"last-message\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"lastMessage\") : stack1), depth0))\n + \"</div>\\n\t\t<div class=\\\"email-address\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"emailAddresses\") : stack1), depth0))\n + \"</div>\\n\t</a>\\n \t<a class=\\\"top-action\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"hyperlink\") : stack1), depth0))\n + \"\\\" title=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n \t\t<img src=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"icon\") : stack1), depth0))\n + \"\\\" alt=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n\t</a>\\n\";\n},\"21\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t<div class=\\\"body\\\">\\n\t\t<div class=\\\"full-name\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"fullName\") : stack1), depth0))\n + \"</div>\\n\t\t<div class=\\\"last-message\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"lastMessage\") : stack1), depth0))\n + \"</div>\\n\t\t<div class=\\\"email-address\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"emailAddresses\") : stack1), depth0))\n + \"</div>\\n\t</div>\\n\";\n},\"23\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<a class=\\\"second-action\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"hyperlink\") : stack1), depth0))\n + \"\\\" title=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n\t<img src=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"icon\") : stack1), depth0))\n + \"\\\" alt=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n</a>\\n\";\n},\"25\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t<button class=\\\"other-actions icon-more\\\"></button>\\n\t<div class=\\\"menu popovermenu\\\">\\n\t\t<ul>\\n\"\n + ((stack1 = lookupProperty(helpers,\"each\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"actions\") : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(26, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":60,\"column\":3},\"end\":{\"line\":67,\"column\":12}}})) != null ? stack1 : \"\")\n + \"\t\t</ul>\\n\t</div>\\n\";\n},\"26\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t\t<li>\\n\t\t\t\t<a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"hyperlink\") || (depth0 != null ? lookupProperty(depth0,\"hyperlink\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"hyperlink\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":62,\"column\":13},\"end\":{\"line\":62,\"column\":26}}}) : helper)))\n + \"\\\">\\n\t\t\t\t\t<img src=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"icon\") || (depth0 != null ? lookupProperty(depth0,\"icon\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"icon\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":63,\"column\":15},\"end\":{\"line\":63,\"column\":23}}}) : helper)))\n + \"\\\" alt=\\\"\\\">\\n\t\t\t\t\t<span>\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"title\") || (depth0 != null ? lookupProperty(depth0,\"title\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"title\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":64,\"column\":11},\"end\":{\"line\":64,\"column\":20}}}) : helper)))\n + \"</span>\\n\t\t\t\t</a>\\n\t\t\t</li>\\n\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(7, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":21,\"column\":7}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(13, data, 0),\"inverse\":container.program(18, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":22,\"column\":0},\"end\":{\"line\":50,\"column\":7}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"hasTwoActions\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(23, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":51,\"column\":0},\"end\":{\"line\":55,\"column\":7}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"hasManyActions\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(25, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":56,\"column\":0},\"end\":{\"line\":70,\"column\":7}}})) != null ? stack1 : \"\");\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-search\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"couldNotLoadText\") || (depth0 != null ? lookupProperty(depth0,\"couldNotLoadText\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"couldNotLoadText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":5},\"end\":{\"line\":3,\"column\":25}}}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-search\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"noContactsFoundText\") || (depth0 != null ? lookupProperty(depth0,\"noContactsFoundText\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"noContactsFoundText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":5},\"end\":{\"line\":4,\"column\":28}}}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"footer\\\"><a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"contactsAppURL\") || (depth0 != null ? lookupProperty(depth0,\"contactsAppURL\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppURL\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":29},\"end\":{\"line\":9,\"column\":47}}}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"showAllContactsText\") || (depth0 != null ? lookupProperty(depth0,\"showAllContactsText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"showAllContactsText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":49},\"end\":{\"line\":9,\"column\":72}}}) : helper)))\n + \"</a></div>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"canInstallApp\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":10,\"column\":0},\"end\":{\"line\":12,\"column\":0}}})) != null ? stack1 : \"\");\n},\"6\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"footer\\\"><a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"contactsAppMgmtURL\") || (depth0 != null ? lookupProperty(depth0,\"contactsAppMgmtURL\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppMgmtURL\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":29},\"end\":{\"line\":11,\"column\":51}}}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"contactsAppMgmtText\") || (depth0 != null ? lookupProperty(depth0,\"contactsAppMgmtText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppMgmtText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":53},\"end\":{\"line\":11,\"column\":76}}}) : helper)))\n + \"</a></div>\\n\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contacts\") : depth0)) != null ? lookupProperty(stack1,\"length\") : stack1),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":6,\"column\":11}}})) != null ? stack1 : \"\")\n + \"<div id=\\\"contactsmenu-contacts\\\"></div>\\n\"\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"contactsAppEnabled\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.program(5, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":8,\"column\":0},\"end\":{\"line\":12,\"column\":7}}})) != null ? stack1 : \"\");\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-loading\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"loadingText\") || (depth0 != null ? lookupProperty(depth0,\"loadingText\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"loadingText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":5},\"end\":{\"line\":3,\"column\":20}}}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<label class=\\\"hidden-visually\\\" for=\\\"contactsmenu-search\\\">\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"searchContactsText\") || (depth0 != null ? lookupProperty(depth0,\"searchContactsText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchContactsText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":57},\"end\":{\"line\":1,\"column\":79}}}) : helper)))\n + \"</label>\\n<input id=\\\"contactsmenu-search\\\" type=\\\"search\\\" placeholder=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"searchContactsText\") || (depth0 != null ? lookupProperty(depth0,\"searchContactsText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchContactsText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":59},\"end\":{\"line\":2,\"column\":81}}}) : helper)))\n + \"\\\" value=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"searchTerm\") || (depth0 != null ? lookupProperty(depth0,\"searchTerm\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchTerm\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":90},\"end\":{\"line\":2,\"column\":104}}}) : helper)))\n + \"\\\">\\n<div class=\\\"content\\\">\\n</div>\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<img src=\\\"\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"icon\") || (depth0 != null ? lookupProperty(depth0,\"icon\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"icon\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":24},\"end\":{\"line\":3,\"column\":32}}}) : helper)))\n + \"\\\">\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<li>\\n\t<a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"hyperlink\") || (depth0 != null ? lookupProperty(depth0,\"hyperlink\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"hyperlink\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":10},\"end\":{\"line\":2,\"column\":23}}}) : helper)))\n + \"\\\">\\n\t\t\"\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"icon\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":2},\"end\":{\"line\":3,\"column\":41}}})) != null ? stack1 : \"\")\n + \"\\n\t\t<span>\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"title\") || (depth0 != null ? lookupProperty(depth0,\"title\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"title\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":8},\"end\":{\"line\":4,\"column\":17}}}) : helper)))\n + \"</span>\\n\t</a>\\n</li>\\n\";\n},\"useData\":true});","var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 76225,\n\t\"./bn-bd.js\": 76225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-il\": 47207,\n\t\"./en-il.js\": 47207,\n\t\"./en-in\": 44175,\n\t\"./en-in.js\": 44175,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./en-sg\": 31662,\n\t\"./en-sg.js\": 31662,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-mx\": 96112,\n\t\"./es-mx.js\": 96112,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fil\": 42549,\n\t\"./fil.js\": 42549,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 94470,\n\t\"./fr-ca\": 63049,\n\t\"./fr-ca.js\": 63049,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 94470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 29295,\n\t\"./ga.js\": 29295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-deva\": 27884,\n\t\"./gom-deva.js\": 27884,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 30094,\n\t\"./hi.js\": 30094,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it-ch\": 10150,\n\t\"./it-ch.js\": 10150,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ku\": 1408,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./oc-lnc\": 92135,\n\t\"./oc-lnc.js\": 92135,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./tg\": 27321,\n\t\"./tg.js\": 27321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 19005,\n\t\"./tk.js\": 19005,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-mo\": 99807,\n\t\"./zh-mo.js\": 99807,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 2943;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2943: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], function() { return __webpack_require__(71461); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","loadedScripts","loadedStyles","updatableNotification","getDefaultNotificationFunction","setDefault","callback","this","hide","$row","_","undefined","each","$","toastify","hideToast","console","error","call","showHtml","html","options","isHTML","timeout","TOAST_PERMANENT_TIMEOUT","toast","showMessage","toastElement","show","text","toString","split","join","escapeHTML","showUpdate","showTemporary","TOAST_DEFAULT_TIMEOUT","isHidden","find","length","ajaxConnectionLostHandler","Notification","t","trailing","dynamicSlideToggleEnabled","enableDynamicSlideToggle","Apps","$el","removeClass","trigger","addClass","method","endpoint","OC","type","toUpperCase","url","generateOcsUrl","data","success","bind","getApps","getKeys","app","getValue","key","defaultValue","setValue","value","deleteKey","appConfig","window","oc_appconfig","AppConfig","_oc_appswebroots","methodMap","create","update","patch","delete","read","parsePropFindResult","result","davProperties","subResult","props","href","propStat","status","properties","propKey","id","parseIdFromLocation","queryPos","indexOf","substr","parts","pop","isSuccessStatus","callPropPatch","client","model","headers","propPatch","attrs","changedProp","warn","convertModelAttributesToDavProperties","changed","then","toJSON","Backbone","VendorBackbone","Object","assign","davCall","dav","baseUrl","xmlNamespaces","resolveUrl","requestToken","propFind","depth","response","propsMapping","results","body","shift","callPropFind","request","callMkCol","responseJson","locationHeader","xhr","getResponseHeader","callMethod","davSync","params","isCollection","Collection","hasInnerCollection","usePUT","collection","Error","urlError","JSON","stringify","processData","prototype","textStatus","errorThrown","context","_oc_config","Contact","Model","defaults","fullName","lastMessage","actions","hasOneAction","hasTwoActions","hasManyActions","initialize","get","set","ContactCollection","ContactsListView","View","_collection","_subViews","render","self","forEach","contact","item","ContactsListItemView","append","on","_onChildActionMenuToggle","push","$src","view","className","_template","_model","_actionMenuShown","events","contactTemplate","require","template","_onOtherActionMenuOpened","delegateEvents","imageplaceholder","tooltip","placement","_onToggleActionsMenu","is","ContactsMenuView","_loadingTemplate","_errorTemplate","_contentTemplate","_contactsTemplate","_contacts","_searchTerm","templates","loading","menu","list","_onSearch","e","searchTerm","val","loadingTemplate","errorTemplate","couldNotLoadText","contentTemplate","searchContactsText","contactsTemplate","noContactsFoundText","showAllContactsText","contactsAppMgmtText","showLoading","loadingText","showError","showContacts","viewData","contacts","contactsAppEnabled","contactsAppURL","canInstallApp","contactsAppMgmtURL","searchVal","focus","ContactsMenu","_view","_contactsPromise","el","loadContacts","_getContacts","Promise","resolve","filter","term","catch","rawUid","document","getElementsByTagName","getAttribute","displayName","currentUser","Search","isA11yActivation","event","global","emit","token","Dialogs","YES_NO_BUTTONS","OK_BUTTONS","FILEPICKER_TYPE_CHOOSE","FILEPICKER_TYPE_MOVE","FILEPICKER_TYPE_COPY","FILEPICKER_TYPE_COPY_MOVE","FILEPICKER_TYPE_CUSTOM","dialogsCounter","alert","title","modal","message","OK_BUTTON","info","confirm","confirmDestructive","buttons","confirmHtml","prompt","name","password","_getMessageTemplate","$tmpl","dialogName","dialogId","$dlg","octemplate","dialog_name","input","attr","label","buttonlist","click","ocdialog","defaultButton","closeOnEscape","close","filepicker","multiselect","mimetypeFilter","path","sortField","sortOrder","emptyText","newText","filesClient","OCA","Sharing","PublicApp","fileList","filelist","allowDirectoryChooser","_getFilePickerTemplate","$filePicker","emptytext","newtext","nameCol","sizeCol","modifiedCol","prepend","$showGridView","_onGridviewChange","_getGridSettings","newButton","stopImmediatePropagation","preventDefault","$input","submit","newName","lastPos","lastIndexOf","selectRange","$form","$submit","stopPropagation","filename","trimmedName","trim","match","isFileNameValid","file","escape","checkInput","newname","createDirectory","always","_fillFilePicker","ready","$fileListHeader","$filelist","$filelistContainer","$dirTree","_handleTreeListSelect","_handlePickerClick","dir","currentTarget","functionToCall","returnType","datapath","index","element","selectedName","button","width","height","style","remove","buttonEnableDisable","closest","prop","fail","content","dialogType","allowHtml","escapeFunction","cancel","classes","confirmClasses","closeCallback","_fileexistsshown","fileexists","original","replacement","controller","dialogDeferred","resampleHermite","canvas","W","H","W2","H2","Math","round","img","getContext","getImageData","img2","data2","ratio_w","ratio_h","ratio_w_half","ceil","ratio_h_half","j","i","x2","weight","weights","weights_alpha","gx_r","gx_g","gx_b","gx_a","center_y","yy","floor","dy","abs","center_x","w0","xx","dx","w","sqrt","clearRect","max","putImageData","addConflict","$conflicts","$conflict","clone","$originalDiv","$replacementDiv","size","mtime","lastModified","directory","urlSpec","x","y","c","etag","forceIcon","previewpath","Files","generatePreviewUrl","replace","css","FileReader","reader","onload","blob","Blob","target","URL","webkitURL","originalUrl","createObjectURL","image","Image","src","createElement","min","drawImage","toDataURL","readAsArrayBuffer","reject","getCroppedPreview","checkboxId","count","n","parent","children","_getFileExistsTemplate","allnewfiles","allexistingfiles","why","what","onCancel","onContinue","closeButton","$primaryButton","updatePrimaryButton","checkedCount","$checkbox","promise","gridview","toggleClass","isGridView","hasClass","defer","$filePickerTemplate","tmpl","$listTmpl","detach","jqXHR","$messageTemplate","$fileexistsTemplate","empty","advancedFilter","getFolderContents","files","_changeButtonsText","mimetype","showHiddenInput","getElementById","startsWith","comparator","Comparators","fileInfo1","fileInfo2","sort","file1","file2","isFavorite","fileInfo","tags","_fillSlug","idx","entry","simpleSize","sizeColor","isEncrypted","icon","parseInt","pow","filename1","filename2","date","previewUrl","addButton","$template","paths","prependTo","getOcDialog","$element","ctrlKey","copyText","folder","moveText","eq","manageFromDocument","getToken","setToken","newToken","OCEventSource","joinChar","dataStr","typelessListeners","closed","listeners","encodeURIComponent","useFallBack","EventSource","iframeId","iframeCount","fallBackSources","iframe","source","onmessage","parse","listen","fallBackCallBack","done","lastLength","addEventListener","currentMenu","currentMenuToggle","hideMenus","complete","lastMenu","slideUp","apply","arguments","isAdmin","_oc_isadmin","_oc_l10n_registry_translations","_oc_l10n_registry_plural_functions","hasAppTranslations","appId","getAppTranslations","translations","pluralFunction","L10n","load","appName","generateFilePath","register","pluralForm","bundle","_getPlural","extend","_unregister","translate","vars","allOptions","sanitize","optSanitize","DOMPurify","identity","optEscape","translation","a","b","r","_build","translatePlural","textSingular","textPlural","identifier","plural","number","language","substring","Handlebars","startSaving","selector","startAction","stop","finishedSaving","finishedAction","finishedSuccess","finishedError","delay","fadeOut","pageLoadTime","init","requirePasswordConfirmation","moment","requiresPasswordConfirmation","serverTimeDiff","nc_pageLoad","timeSinceLogin","nc_lastLogin","backendAllowsPasswordConfirmation","rejectCallback","config","_confirmPassword","$dialog","$error","$buttons","generateUrl","lastLogin","theme","_theme","_handlers","_pushState","strParams","history","pushState","location","pathname","navigator","userAgent","toLowerCase","pattern","patterns","querySelectorAll","ii","fill","stroke","removeAttribute","setAttribute","replaceState","hash","_cancelPop","addOnPopStateHandler","handler","_parseHashQuery","pos","_decodeQuery","query","parseUrlQuery","search","_onPopState","state","chunkify","tz","charAt","m","History","humanFileSize","computerFileSize","string","s","bytes","matches","parseFloat","isFinite","k","kb","mb","gb","g","tb","pb","p","formatDate","timestamp","format","TESTING","relativeModifiedDate","diff","fromNow","getScrollBarWidth","_scrollBarWidth","inner","outer","position","top","left","visibility","overflow","appendChild","w1","offsetWidth","w2","clientWidth","removeChild","stripTime","Date","getFullYear","getMonth","getDate","naturalSortCompare","aa","bb","aNum","Number","bNum","localeCompare","waitFor","interval","internalCallback","setTimeout","isCookieSetToValue","cookies","cookie","debug","_oc_debug","webroot","_oc_webroot","coreApps","menuSpeed","PERMISSION_ALL","PERMISSION_CREATE","PERMISSION_DELETE","PERMISSION_NONE","PERMISSION_READ","PERMISSION_SHARE","PERMISSION_UPDATE","TAG_FAVORITE","fileIsBlacklisted","Config","addScript","script","addStyle","createStyleSheet","appSettings","args","appid","scriptName","cache","settings","popup","arrowclass","loadJS","scriptname","jqxhr","appswebroots","dialogs","getCurrentUser","uid","isUserAdmin","L10N","_ajaxConnectionLostHandler","_processAjaxError","statusText","timer","setInterval","clearInterval","registerXHRForErrorProcessing","readyState","getCapabilities","realGetCapabilities","registerMenu","$toggle","$menuEl","toggle","headerMenu","isClickableElement","slideToggle","showMenu","unregisterMenu","off","basename","encodePath","dirname","isSamePath","joinPaths","getHost","host","getHostName","hostname","getPort","port","getProtocol","protocol","getCanonicalLocale","getLocale","getLanguage","addTranslations","buildQueryString","parseQueryString","queryString","components","part","decodeURIComponent","msg","PasswordConfirmation","Plugins","_plugins","targetName","plugin","plugins","getPlugins","attach","targetObject","Util","filePath","namespaces","tail","getRootPath","getRootUrl","imagePath","redirect","targetURL","reload","getRequestToken","linkTo","linkToOCS","service","version","ocsVersion","linkToRemote","generateRemoteUrl","linkToRemoteBase","realGetRootUrl","subscribe","resp","poll","setRequestToken","startPolling","NaN","session_lifetime","isNaN","getInterval","Contacts","NcHeaderMenu","contactsMenu","mounted","methods","handleOpen","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","_c","_self","scopedSlots","_u","fn","proxy","_v","NcActions","NcActionLink","apps","appLimit","observer","computed","appList","mainAppList","popoverAppList","appLabel","beforeDestroy","unsubscribe","setNavigationCounter","setApps","resize","appCount","staticClass","_l","class","active","unread","_s","_e","NcLoadingIcon","required","cachedIcon","handleClick","$event","shiftKey","altKey","metaKey","NcAvatar","UserMenuEntry","settingsNavEntries","userId","_b","localeAliases","zh","zh_Hans","zh_Hans_CN","zh_Hans_HK","zh_Hans_MO","zh_Hans_SG","zh_Hant","zh_Hant_HK","zh_Hant_MO","zh_Hant_TW","locale","hasOwnProperty","initCore","mountPoint","allowAuthErrors","loadState","loadConfig","auto_logout","lastActive","now","localStorage","setItem","newValue","logoutUrl","registerAutoLogout","session_keepalive","initSessionHeartBeat","Vue","container","appMenu","AppMenu","$mount","counter","setUpMainMenu","h","UserMenu","setUpContactsMenu","snapper","Snap","disable","maxPosition","minDragDistance","animating","oldSnapperOpen","open","oldSnapperClose","_snapperOpen","_snapperClose","keypress","delegate","$target","navigationBarSlideGestureEnabled","navigationBarSlideGestureAllowed","navigationBarSlideGestureEnablePending","enable","toggleSnapperOnSize","ex","TypeError","urlRegex","plainToRich","formatLinksRich","richToPlain","formatLinksPlain","leadingSpace","trailingSpace","linkText","$content","$this","dismissOptions","dismiss","menuItem","div","classList","add","innerText","ocs","product","onclick","whatsNew","regular","whatsNewTextItem","innerHTML","changelogURL","rel","onQuerySuccess","onQueryError","onDismissSuccess","onDismissError","func","funcName","oldFunc","newFunc","types","loadedStylesheets","loadScript","scriptPath","btoa","onerror","head","loadStylesheet","stylePath","link","showSuccess","warning","showWarning","showInfo","Accessibility","disableKeyboardShortcuts","Collaboration","registerType","typeDefinition","action","getTypes","keys","getIcon","typeIconClass","getLabel","typeString","getLink","Comments","InitialState","Loader","Toast","WhatsNew","warnIfNotTesting","setDeprecatedProp","cb","Array","isArray","defineProperty","autosize","ClipboardJS","md5","OCP","user","ie8fix","hidedefault","displayname","setAvatarForUnknownUser","String","$div","devicePixelRatio","oc_userconfig","avatar","clearimageplaceholder","alt","entryTemplate","shareWith","shareType","appendTo","$list","topAction","concat","hyperlink","clickedList","has","clickedTarget","attrName","attrValue","_create","originalCss","display","originalTitle","tabIndex","role","insertBefore","removeAttr","$buttonrow","$button","enterCallback","keyCode","_setOptions","_createOverlay","_init","_trigger","_setOption","$title","_setSizes","$defaultButton","$closeButton","closeCB","lessHeight","outerHeight","contentDiv","overlay","_destroyOverlay","widget","setEnterCallback","unsetEnterCallback","destroy","Template","elem","_html","o","outerHTML","toRgb","Color","mixPalette","steps","color1","color2","palette","step","ends","stepCalc","red","yellow","blue","palette1","palette2","palette3","maximum","finalInt","hashToInt","seed","rgb","placeholderText","map","word","elm","crossDomain","setRequestHeader","start","end","setSelectionRange","createTextRange","range","collapse","moveEnd","moveStart","select","showPassword","setState","checkbox","$clone","tabindex","autocomplete","cloneElement","insertAfter","outerWidth","contents","areaSelector","area","hideArea","slideDown","showArea","onpopstate","___CSS_LOADER_URL_IMPORT_0___","___CSS_LOADER_URL_IMPORT_1___","___CSS_LOADER_URL_IMPORT_2___","___CSS_LOADER_URL_IMPORT_3___","___CSS_LOADER_URL_IMPORT_4___","___CSS_LOADER_EXPORT___","___CSS_LOADER_URL_REPLACEMENT_0___","___CSS_LOADER_URL_REPLACEMENT_1___","___CSS_LOADER_URL_REPLACEMENT_2___","___CSS_LOADER_URL_REPLACEMENT_3___","___CSS_LOADER_URL_REPLACEMENT_4___","module","exports","depth0","helpers","partials","stack1","lookupProperty","propertyName","nullContext","program","noop","alias1","lambda","alias2","escapeExpression","helper","hooks","helperMissing","alias3","alias4","webpackContext","req","webpackContextResolve","__webpack_require__","code","__webpack_module_cache__","moduleId","cachedModule","loaded","__webpack_modules__","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","every","splice","getter","__esModule","d","definition","enumerable","globalThis","Function","obj","Symbol","toStringTag","nmd","baseURI","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","nc","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
diff --git a/dist/files-main.js b/dist/files-main.js
index 97063d0f3cb..ca5e89bfbf0 100644
--- a/dist/files-main.js
+++ b/dist/files-main.js
@@ -1,3 +1,3 @@
/*! For license information please see files-main.js.LICENSE.txt */
-!function(){"use strict";var e,n={78561:function(e,n,i){var r=i(17499),o=i(79954),a=i(31352),s=i(79753),l=i(45994),c=function(){var t,e,n,i,r=(null===(t=OCA)||void 0===t||null===(e=t.Files)||void 0===e||null===(n=e.App)||void 0===n||null===(i=n.currentFileList)||void 0===i?void 0:i.dirInfo)||{path:"/",name:""};return"".concat(r.path,"/").concat(r.name).replace(/\/\//gi,"/")},u=i(4820),p=i(20144),d=i(62520),f=i(26932),v=i(93455),m=i.n(v),g=i(70110),h=i.n(g);function A(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function b(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var o=t.apply(e,n);function a(t){A(o,i,r,a,s,"next",t)}function s(t){A(o,i,r,a,s,"throw",t)}a(void 0)}))}}var y=function(){var t=b(regeneratorRuntime.mark((function t(){var e;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,u.default.get((0,s.generateOcsUrl)("apps/files/api/v1/templates"));case 2:return e=t.sent,t.abrupt("return",e.data.ocs.data);case 4:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),w=function(){var t=b(regeneratorRuntime.mark((function t(e,n,i){var r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,u.default.post((0,s.generateOcsUrl)("apps/files/api/v1/templates/create"),{filePath:e,templatePath:n,templateType:i});case 2:return r=t.sent,t.abrupt("return",r.data.ocs.data);case 4:case"end":return t.stop()}}),t)})));return function(e,n,i){return t.apply(this,arguments)}}(),C=256,_={name:"TemplatePreview",inheritAttrs:!1,props:{basename:{type:String,required:!0},checked:{type:Boolean,default:!1},fileid:{type:[String,Number],required:!0},filename:{type:String,required:!0},previewUrl:{type:String,default:null},hasPreview:{type:Boolean,default:!0},mime:{type:String,required:!0},ratio:{type:Number,default:null}},data:function(){return{failedPreview:!1}},computed:{nameWithoutExt:function(){return this.basename.indexOf(".")>-1?this.basename.split(".").slice(0,-1).join("."):this.basename},id:function(){return"template-picker-".concat(this.fileid)},realPreviewUrl:function(){return this.failedPreview&&this.mimeIcon?this.mimeIcon:this.previewUrl?this.previewUrl:(0,l.ts)()?(0,s.generateUrl)("/core/preview?fileId=".concat(this.fileid,"&x=").concat(C,"&y=").concat(C,"&a=1")):(0,s.generateUrl)("/apps/files_sharing/publicpreview/".concat(document.getElementById("sharingToken")&&document.getElementById("sharingToken").value,"?fileId=").concat(this.fileid,"&file=").concat(function(t){var e=(t.startsWith("/")?t:"/".concat(t)).split("/"),n="";return e.forEach((function(t){""!==t&&(n+="/"+encodeURIComponent(t))})),n}(this.filename),"&x=").concat(C,"&y=").concat(C,"&a=1"))},mimeIcon:function(){return OC.MimeType.getIconUrl(this.mime)}},methods:{onCheck:function(){this.$emit("check",this.fileid)},onFailure:function(){this.failedPreview=!0}}},S=_,k=i(93379),x=i.n(k),O=i(7795),P=i.n(O),j=i(90569),E=i.n(j),N=i(3565),T=i.n(N),F=i(19216),I=i.n(F),U=i(44589),D=i.n(U),B=i(87027),q={};q.styleTagTransform=D(),q.setAttributes=T(),q.insert=E().bind(null,"head"),q.domAPI=P(),q.insertStyleElement=I(),x()(B.Z,q),B.Z&&B.Z.locals&&B.Z.locals;var Z=i(51900),L=(0,Z.Z)(S,(function(){var t=this,e=t._self._c;return e("li",{staticClass:"template-picker__item"},[e("input",{staticClass:"radio",attrs:{id:t.id,type:"radio",name:"template-picker"},domProps:{checked:t.checked},on:{change:t.onCheck}}),t._v(" "),e("label",{staticClass:"template-picker__label",attrs:{for:t.id}},[e("div",{staticClass:"template-picker__preview",class:t.failedPreview?"template-picker__preview--failed":""},[e("img",{staticClass:"template-picker__image",attrs:{src:t.realPreviewUrl,alt:"",draggable:"false"},on:{error:t.onFailure}})]),t._v(" "),e("span",{staticClass:"template-picker__title"},[t._v("\n\t\t\t"+t._s(t.nameWithoutExt)+"\n\t\t")])])])}),[],!1,null,"440aea22",null).exports;function R(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function M(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var o=t.apply(e,n);function a(t){R(o,i,r,a,s,"next",t)}function s(t){R(o,i,r,a,s,"throw",t)}a(void 0)}))}}var V={name:"TemplatePicker",components:{NcEmptyContent:m(),NcModal:h(),TemplatePreview:L},props:{logger:{type:Object,required:!0}},data:function(){return{checked:-1,loading:!1,name:null,opened:!1,provider:null}},computed:{nameWithoutExt:function(){return this.name.indexOf(".")>-1?this.name.split(".").slice(0,-1).join("."):this.name},emptyTemplate:function(){var e,n;return{basename:t("files","Blank"),fileid:-1,filename:this.t("files","Blank"),hasPreview:!1,mime:(null===(e=this.provider)||void 0===e?void 0:e.mimetypes[0])||(null===(n=this.provider)||void 0===n?void 0:n.mimetypes)}},selectedTemplate:function(){var t=this;return this.provider.templates.find((function(e){return e.fileid===t.checked}))},style:function(){return{"--margin":"8px","--width":"160px","--border":"2px","--fullwidth":"180px","--height":this.provider.ratio?Math.round(160/this.provider.ratio)+"px":null}}},methods:{open:function(t,e){var n=this;return M(regeneratorRuntime.mark((function i(){var r,o;return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return n.checked=n.emptyTemplate.fileid,n.name=t,n.provider=e,i.next=5,y();case 5:if(r=i.sent,null!==(o=r.find((function(t){return t.app===e.app&&t.label===e.label})))){i.next=9;break}throw new Error("Failed to match provider in results");case 9:if(n.provider=o,0!==o.templates.length){i.next=13;break}return n.onSubmit(),i.abrupt("return");case 13:n.opened=!0;case 14:case"end":return i.stop()}}),i)})))()},close:function(){this.checked=this.emptyTemplate.fileid,this.loading=!1,this.name=null,this.opened=!1,this.provider=null},onCheck:function(t){this.checked=t},onSubmit:function(){var t=this;return M(regeneratorRuntime.mark((function e(){var n,i,r,o,a,s,l,u,p,v,m,g,h;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t.loading=!0,o=c(),a=null===(n=OCA)||void 0===n||null===(i=n.Files)||void 0===i||null===(r=i.App)||void 0===r?void 0:r.currentFileList,t.nameWithoutExt===t.name&&(t.logger.debug("Fixed invalid filename",{name:t.name,extension:null===(s=t.provider)||void 0===s?void 0:s.extension}),t.name=t.name+(null===(l=t.provider)||void 0===l?void 0:l.extension)),e.prev=4,e.next=7,w((0,d.normalize)("".concat(o,"/").concat(t.name)),null===(u=t.selectedTemplate)||void 0===u?void 0:u.filename,null===(p=t.selectedTemplate)||void 0===p?void 0:p.templateType);case 7:return v=e.sent,t.logger.debug("Created new file",v),e.next=11,null==a?void 0:a.addAndFetchFileInfo(t.name).then((function(t,e){return e}));case 11:m=e.sent,g=new OCA.Files.FileInfoModel(m,{filesClient:null==a?void 0:a.filesClient}),(h=OCA.Files.fileActions.getDefaultFileAction(v.mime,"file",OC.PERMISSION_ALL))&&h.action(v.basename,{$file:null==a?void 0:a.findFileEl(t.name),dir:o,fileList:a,fileActions:null==a?void 0:a.fileActions,fileInfoModel:g}),t.close(),e.next=23;break;case 18:e.prev=18,e.t0=e.catch(4),t.logger.error("Error while creating the new file from template"),console.error(e.t0),(0,f.x2)(t.t("files","Unable to create new file from template"));case 23:return e.prev=23,t.loading=!1,e.finish(23);case 26:case"end":return e.stop()}}),e,null,[[4,18,23,26]])})))()}}},Q=V,W=i(74502),z={};z.styleTagTransform=D(),z.setAttributes=T(),z.insert=E().bind(null,"head"),z.domAPI=P(),z.insertStyleElement=I(),x()(W.Z,z),W.Z&&W.Z.locals&&W.Z.locals;var G=(0,Z.Z)(Q,(function(){var t=this,e=t._self._c;return t.opened?e("NcModal",{staticClass:"templates-picker",attrs:{"clear-view-delay":-1,size:"normal"},on:{close:t.close}},[e("form",{staticClass:"templates-picker__form",style:t.style,on:{submit:function(e){return e.preventDefault(),e.stopPropagation(),t.onSubmit.apply(null,arguments)}}},[e("h2",[t._v(t._s(t.t("files","Pick a template for {name}",{name:t.nameWithoutExt})))]),t._v(" "),e("ul",{staticClass:"templates-picker__list"},[e("TemplatePreview",t._b({attrs:{checked:t.checked===t.emptyTemplate.fileid},on:{check:t.onCheck}},"TemplatePreview",t.emptyTemplate,!1)),t._v(" "),t._l(t.provider.templates,(function(n){return e("TemplatePreview",t._b({key:n.fileid,attrs:{checked:t.checked===n.fileid,ratio:t.provider.ratio},on:{check:t.onCheck}},"TemplatePreview",n,!1))}))],2),t._v(" "),e("div",{staticClass:"templates-picker__buttons"},[e("button",{on:{click:t.close}},[t._v("\n\t\t\t\t"+t._s(t.t("files","Cancel"))+"\n\t\t\t")]),t._v(" "),e("input",{staticClass:"primary",attrs:{type:"submit","aria-label":t.t("files","Create a new file with the selected template")},domProps:{value:t.t("files","Create")}})])]),t._v(" "),t.loading?e("NcEmptyContent",{staticClass:"templates-picker__loading",attrs:{icon:"icon-loading"}},[t._v("\n\t\t"+t._s(t.t("files","Creating file"))+"\n\t")]):t._e()],1):t._e()}),[],!1,null,"55dd9121",null),$=G.exports;function Y(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}var H=(0,r.IY)().setApp("files").detectUser().build();p.ZP.mixin({methods:{t:a.Iu,n:a.uN}});var K=document.createElement("div");K.id="template-picker",document.body.appendChild(K);var J=(0,o.j)("files","templates",[]),X=(0,o.j)("files","templates_path",!1);H.debug("Templates providers",J),H.debug("Templates folder",{templatesPath:X});var tt=new(p.ZP.extend($))({name:"TemplatePicker",propsData:{logger:H}});tt.$mount("#template-picker"),window.addEventListener("DOMContentLoaded",(function(){if(!X){H.debug("Templates folder not initialized");var t={attach:function(t){t.addMenuEntry({id:"template-init",displayName:(0,a.Iu)("files","Set up templates folder"),templateName:(0,a.Iu)("files","Templates"),iconClass:"icon-template-add",fileType:"file",actionHandler:function(e){nt(e),t.removeMenuEntry("template-init")}})}};OC.Plugins.register("OCA.Files.NewFileMenu",t)}})),J.forEach((function(t,e){var n={attach:function(n){var i=n.fileList;"files"!==i.id&&"files.public"!==i.id||n.addMenuEntry({id:"template-new-".concat(t.app,"-").concat(e),displayName:t.label,templateName:t.label+t.extension,iconClass:t.iconClass||"icon-file",fileType:"file",actionHandler:function(e){tt.open(e,t)}})}};OC.Plugins.register("OCA.Files.NewFileMenu",n)}));var et,nt=function(){var t,e=(t=regeneratorRuntime.mark((function t(e){var n,i;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=(c()+"/".concat(e)).replace("//","/"),t.prev=1,H.debug("Initializing the templates directory",{templatePath:n}),t.next=5,u.default.post((0,s.generateOcsUrl)("apps/files/api/v1/templates/path"),{templatePath:n,copySystemTemplates:!0});case 5:i=t.sent,OCA.Files.App.currentFileList.changeDirectory(n,!0,!0),J=i.data.ocs.data.templates,X=i.data.ocs.data.template_path,t.next=15;break;case 11:t.prev=11,t.t0=t.catch(1),H.error("Unable to initialize the templates directory"),(0,f.x2)((0,a.Iu)("files","Unable to initialize the templates directory"));case 15:case"end":return t.stop()}}),t,null,[[1,11]])})),function(){var e=this,n=arguments;return new Promise((function(i,r){var o=t.apply(e,n);function a(t){Y(o,i,r,a,s,"next",t)}function s(t){Y(o,i,r,a,s,"throw",t)}a(void 0)}))});return function(t){return e.apply(this,arguments)}}(),it=i(78595);et={attach:function(t){var e=this;(0,it.Ld)("nextcloud:unified-search.search",(function(e){var n=e.query;t.setFilter(n)})),(0,it.Ld)("nextcloud:unified-search.reset",(function(){e.query=null,t.setFilter("")}))}},window.OC.Plugins.register("OCA.Files.FileList",et);var rt=(0,r.IY)().setApp("files").detectUser().build();function ot(t){return ot="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ot(t)}function at(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function st(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?at(Object(n),!0).forEach((function(e){lt(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):at(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function lt(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==ot(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==ot(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===ot(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var ct=function(t){var e=t.id,n=t.name,i=t.order,r=t.icon,o=t.parent,a=t.classes,s=void 0===a?"":a,l=t.expanded,c=t.params;OCP.Files.Navigation.register({id:e,name:n,order:i,params:c,parent:o,expanded:!0===l,iconClass:r?"icon-".concat(r):"nav-icon-"+e,legacy:!0,sticky:s.includes("pinned")})},ut=i(41487),pt=i.n(ut);function dt(t){return dt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},dt(t)}function ft(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,mt(i.key),i)}}function vt(t,e,n){return(e=mt(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function mt(t){var e=function(t,e){if("object"!==dt(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==dt(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===dt(e)?e:String(e)}var gt=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),vt(this,"_views",[]),vt(this,"_currentView",null),rt.debug("Navigation service initialized")}var e,n;return e=t,(n=[{key:"register",value:function(t){try{At(t),ht(t,this._views)}catch(e){throw e instanceof Error&&rt.error(e.message,{view:t}),e}t.legacy&&rt.warn("Legacy view detected, please migrate to Vue"),t.iconClass&&(t.legacy=!0),this._views.push(t)}},{key:"views",get:function(){return this._views}},{key:"setActive",value:function(t){this._currentView=t}},{key:"active",get:function(){return this._currentView}}])&&ft(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}(),ht=function(t,e){if(e.find((function(e){return e.id===t.id})))throw new Error("Navigation id ".concat(t.id," is already registered"));return!0},At=function(t){if(!t.id||"string"!=typeof t.id)throw new Error("Navigation id is required and must be a string");if(!t.name||"string"!=typeof t.name)throw new Error("Navigation name is required and must be a string");if(!t.legacy){if(!t.getFiles||"function"!=typeof t.getFiles)throw new Error("Navigation getFiles is required and must be a function");if(!t.icon||"string"!=typeof t.icon||!pt()(t.icon))throw new Error("Navigation icon is required and must be a valid svg string")}if(!("order"in t)||"number"!=typeof t.order)throw new Error("Navigation order is required and must be a number");if(t.columns&&t.columns.forEach(bt),t.emptyView&&"function"!=typeof t.emptyView)throw new Error("Navigation emptyView must be a function");if(t.parent&&"string"!=typeof t.parent)throw new Error("Navigation parent must be a string");if("sticky"in t&&"boolean"!=typeof t.sticky)throw new Error("Navigation sticky must be a boolean");if("expanded"in t&&"boolean"!=typeof t.expanded)throw new Error("Navigation expanded must be a boolean");return!0},bt=function(t){if(!t.id||"string"!=typeof t.id)throw new Error("Column id is required");if(!t.title||"string"!=typeof t.title)throw new Error("Column title is required");if(!t.property||"string"!=typeof t.property)throw new Error("Column property is required");if(t.sortFunction&&"function"!=typeof t.sortFunction)throw new Error("Column sortFunction must be a function");if(t.summary&&"function"!=typeof t.summary)throw new Error("Column summary must be a function");return!0},yt=i(57638),wt=i(55209),Ct=i.n(wt),_t=i(14032),St=i.n(_t),kt=i(91770),xt=i(28615),Ot=i(74184),Pt=i(48959),jt=i.n(Pt);function Et(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function Nt(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var o=t.apply(e,n);function a(t){Et(o,i,r,a,s,"next",t)}function s(t){Et(o,i,r,a,s,"throw",t)}a(void 0)}))}}var Tt={name:"NavigationQuota",components:{ChartPie:Ot.Z,NcAppNavigationItem:St(),NcProgressBar:jt()},data:function(){return{loadingStorageStats:!1,storageStats:(0,o.j)("files","storageStats",null)}},computed:{storageStatsTitle:function(){var t,e,n,i=(0,kt.sS)(null===(t=this.storageStats)||void 0===t?void 0:t.used),r=(0,kt.sS)(null===(e=this.storageStats)||void 0===e?void 0:e.quota);return(null===(n=this.storageStats)||void 0===n?void 0:n.quota)<0?this.t("files","{usedQuotaByte} used",{usedQuotaByte:i}):this.t("files","{used} of {quota} used",{used:i,quota:r})},storageStatsTooltip:function(){return this.storageStats.relative?this.t("files","{relative}% used",this.storageStats):""}},beforeMount:function(){setInterval(this.throttleUpdateStorageStats,6e4),(0,it.Ld)("files:file:created",this.throttleUpdateStorageStats),(0,it.Ld)("files:file:deleted",this.throttleUpdateStorageStats),(0,it.Ld)("files:file:moved",this.throttleUpdateStorageStats),(0,it.Ld)("files:file:updated",this.throttleUpdateStorageStats),(0,it.Ld)("files:folder:created",this.throttleUpdateStorageStats),(0,it.Ld)("files:folder:deleted",this.throttleUpdateStorageStats),(0,it.Ld)("files:folder:moved",this.throttleUpdateStorageStats),(0,it.Ld)("files:folder:updated",this.throttleUpdateStorageStats)},methods:{debounceUpdateStorageStats:(0,xt.D)(200,(function(t){this.updateStorageStats(t)})),throttleUpdateStorageStats:(0,xt.P)(1e3,(function(t){this.updateStorageStats(t)})),updateStorageStats:function(){var e=arguments,n=this;return Nt(regeneratorRuntime.mark((function i(){var r,o,a;return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(r=e.length>0&&void 0!==e[0]?e[0]:null,!n.loadingStorageStats){i.next=3;break}return i.abrupt("return");case 3:return n.loadingStorageStats=!0,i.prev=4,i.next=7,u.default.get((0,s.generateUrl)("/apps/files/api/v1/stats"));case 7:if(null!=(a=i.sent)&&null!==(o=a.data)&&void 0!==o&&o.data){i.next=10;break}throw new Error("Invalid storage stats");case 10:n.storageStats=a.data.data,i.next=17;break;case 13:i.prev=13,i.t0=i.catch(4),rt.error("Could not refresh storage stats",{error:i.t0}),r&&(0,f.x2)(t("files","Could not refresh storage stats"));case 17:return i.prev=17,n.loadingStorageStats=!1,i.finish(17);case 20:case"end":return i.stop()}}),i,null,[[4,13,17,20]])})))()},t:a.Iu}},Ft=Tt,It=i(358),Ut={};Ut.styleTagTransform=D(),Ut.setAttributes=T(),Ut.insert=E().bind(null,"head"),Ut.domAPI=P(),Ut.insertStyleElement=I(),x()(It.Z,Ut),It.Z&&It.Z.locals&&It.Z.locals;var Dt=(0,Z.Z)(Ft,(function(){var t=this,e=t._self._c;return t.storageStats?e("NcAppNavigationItem",{staticClass:"app-navigation-entry__settings-quota",class:{"app-navigation-entry__settings-quota--not-unlimited":t.storageStats.quota>=0},attrs:{"aria-label":t.t("files","Storage informations"),loading:t.loadingStorageStats,name:t.storageStatsTitle,title:t.storageStatsTooltip,"data-cy-files-navigation-settings-quota":""},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.debounceUpdateStorageStats.apply(null,arguments)}}},[e("ChartPie",{attrs:{slot:"icon",size:20},slot:"icon"}),t._v(" "),t.storageStats.quota>=0?e("NcProgressBar",{attrs:{slot:"extra",error:t.storageStats.relative>80,value:Math.min(t.storageStats.relative,100)},slot:"extra"}):t._e()],1):t._e()}),[],!1,null,"26c061ec",null),Bt=Dt.exports,qt=i(68988),Zt=i.n(qt),Lt=i(16809),Rt=i.n(Lt),Mt=i(20571),Vt=i.n(Mt),Qt=i(70386),Wt=i(36029),zt=i.n(Wt),Gt={name:"Setting",props:{el:{type:Function,required:!0}},mounted:function(){this.$el.appendChild(this.el())}},$t=(0,Z.Z)(Gt,(function(){return(0,this._self._c)("div")}),[],!1,null,null,null).exports;function Yt(t){return Yt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Yt(t)}function Ht(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function Kt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function Jt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Kt(Object(n),!0).forEach((function(e){Xt(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Kt(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function Xt(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==Yt(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==Yt(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===Yt(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var te=(0,o.j)("files","config",{show_hidden:!1,crop_image_previews:!0}),ee={name:"Settings",components:{Clipboard:Qt.Z,NcAppSettingsDialog:Zt(),NcAppSettingsSection:Rt(),NcCheckboxRadioSwitch:Vt(),NcInputField:zt(),Setting:$t},props:{open:{type:Boolean,default:!1}},data:function(){var t,e,n,i;return Jt(Jt({},te),{},{settings:(null===(t=window.OCA)||void 0===t||null===(e=t.Files)||void 0===e||null===(n=e.Settings)||void 0===n?void 0:n.settings)||[],webdavUrl:(0,s.generateRemoteUrl)("dav/files/"+encodeURIComponent(null===(i=(0,l.ts)())||void 0===i?void 0:i.uid)),webdavDocs:"https://docs.nextcloud.com/server/stable/go.php?to=user-webdav",webdavUrlCopied:!1})},beforeMount:function(){this.settings.forEach((function(t){return t.open()}))},beforeDestroy:function(){this.settings.forEach((function(t){return t.close()}))},methods:{onClose:function(){this.$emit("close")},setConfig:function(t,e){(0,it.j8)("files:config:updated",{key:t,value:e}),u.default.post((0,s.generateUrl)("/apps/files/api/v1/config/"+t),{value:e})},copyCloudId:function(){var e,n=this;return(e=regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(document.querySelector("input#webdav-url-input").select(),navigator.clipboard){e.next=4;break}return(0,f.x2)(t("files","Clipboard is not available")),e.abrupt("return");case 4:return e.next=6,navigator.clipboard.writeText(n.webdavUrl);case 6:n.webdavUrlCopied=!0,(0,f.s$)(t("files","Webdav URL copied to clipboard")),setTimeout((function(){n.webdavUrlCopied=!1}),5e3);case 9:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(i,r){var o=e.apply(t,n);function a(t){Ht(o,i,r,a,s,"next",t)}function s(t){Ht(o,i,r,a,s,"throw",t)}a(void 0)}))})()},t:a.Iu}},ne=ee,ie=(0,Z.Z)(ne,(function(){var t=this,e=t._self._c;return e("NcAppSettingsDialog",{attrs:{open:t.open,"show-navigation":!0,title:t.t("files","Files settings")},on:{"update:open":t.onClose}},[e("NcAppSettingsSection",{attrs:{id:"settings",title:t.t("files","Files settings")}},[e("NcCheckboxRadioSwitch",{attrs:{checked:t.show_hidden},on:{"update:checked":[function(e){t.show_hidden=e},function(e){return t.setConfig("show_hidden",e)}]}},[t._v("\n\t\t\t"+t._s(t.t("files","Show hidden files"))+"\n\t\t")]),t._v(" "),e("NcCheckboxRadioSwitch",{attrs:{checked:t.crop_image_previews},on:{"update:checked":[function(e){t.crop_image_previews=e},function(e){return t.setConfig("crop_image_previews",e)}]}},[t._v("\n\t\t\t"+t._s(t.t("files","Crop image previews"))+"\n\t\t")])],1),t._v(" "),0!==t.settings.length?e("NcAppSettingsSection",{attrs:{id:"more-settings",title:t.t("files","Additional settings")}},[t._l(t.settings,(function(t){return[e("Setting",{key:t.name,attrs:{el:t.el}})]}))],2):t._e(),t._v(" "),e("NcAppSettingsSection",{attrs:{id:"webdav",title:t.t("files","Webdav")}},[e("NcInputField",{attrs:{id:"webdav-url-input","show-trailing-button":!0,success:t.webdavUrlCopied,"trailing-button-label":t.t("files","Copy to clipboard"),value:t.webdavUrl,readonly:"readonly",type:"url"},on:{focus:function(t){return t.target.select()},"trailing-button-click":t.copyCloudId},scopedSlots:t._u([{key:"trailing-button-icon",fn:function(){return[e("Clipboard",{attrs:{size:20}})]},proxy:!0}])}),t._v(" "),e("em",[e("a",{attrs:{href:t.webdavDocs,target:"_blank",rel:"noreferrer noopener"}},[t._v("\n\t\t\t\t"+t._s(t.t("files","Use this address to access your Files via WebDAV"))+" ↗\n\t\t\t")])])],1)],1)}),[],!1,null,"5313d0ff",null).exports;function re(t){return re="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},re(t)}function oe(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function ae(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?oe(Object(n),!0).forEach((function(e){se(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):oe(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function se(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==re(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==re(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===re(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function le(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}var ce={name:"Navigation",components:{Cog:yt.default,NcAppNavigation:Ct(),NcAppNavigationItem:St(),SettingsModal:ie,NavigationQuota:Bt},props:{Navigation:{type:gt,required:!0}},data:function(){return{settingsOpened:!1}},computed:{currentViewId:function(){var t,e;return(null===(t=this.$route)||void 0===t||null===(e=t.params)||void 0===e?void 0:e.view)||"files"},currentView:function(){var t=this;return this.views.find((function(e){return e.id===t.currentViewId}))},views:function(){return this.Navigation.views},parentViews:function(){return this.views.filter((function(t){return!t.parent})).sort((function(t,e){return t.order-e.order}))},childViews:function(){return this.views.filter((function(t){return!!t.parent})).reduce((function(t,e){return t[e.parent]=[].concat(function(t){if(Array.isArray(t))return le(t)}(n=t[e.parent]||[])||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(n)||function(t,e){if(t){if("string"==typeof t)return le(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?le(t,e):void 0}}(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[e]),t[e.parent].sort((function(t,e){return t.order-e.order})),t;var n}),{})}},watch:{currentView:function(t,e){rt.debug("View changed",{id:t.id,view:t}),this.showView(t,e)}},beforeMount:function(){this.currentView&&(rt.debug("Navigation mounted. Showing requested view",{view:this.currentView}),this.showView(this.currentView)),(0,it.Ld)("files:legacy-navigation:changed",this.onLegacyNavigationChanged)},methods:{showView:function(t,e){var n,i,r,o,a;if(null===(n=window)||void 0===n||null===(i=n.OCA)||void 0===i||null===(r=i.Files)||void 0===r||null===(o=r.Sidebar)||void 0===o||null===(a=o.close)||void 0===a||a.call(o),t.legacy){var s=document.querySelector("#app-content #app-content-"+this.currentView.id+".viewcontainer");document.querySelectorAll("#app-content .viewcontainer").forEach((function(t){t.classList.add("hidden")})),s.classList.remove("hidden");var l=OC.Util.History.parseUrlQuery().dir,c=void 0===l?"/":l,u={itemId:t.id,dir:c};rt.debug("Triggering legacy navigation event",u),window.jQuery(s).trigger(new window.jQuery.Event("show",u)),window.jQuery(s).trigger(new window.jQuery.Event("urlChanged",u))}this.Navigation.setActive(t),(0,it.j8)("files:navigation:changed",t)},onLegacyNavigationChanged:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{id:"files"},e=t.id,n=this.Navigation.views.find((function(t){return t.id===e}));n&&n.legacy&&n.id!==this.currentView.id&&(this.$router.replace(ae(ae({},this.$route),{},{params:{view:n.id}})),this.Navigation.setActive(n),this.showView(n))},onToggleExpand:function(t){t.expanded=!t.expanded,u.default.post((0,s.generateUrl)("/apps/files/api/v1/toggleShowFolder/".concat(t.id)),{show:t.expanded})},generateToNavigation:function(t){if(t.params){var e=t.params,n=e.dir,i=e.fileid;return{name:"filelist",params:t.params,query:{dir:n,fileid:i}}}return{name:"filelist",params:{view:t.id}}},openSettings:function(){this.settingsOpened=!0},onSettingsClose:function(){this.settingsOpened=!1},t:a.Iu}},ue=ce,pe=i(50375),de={};de.styleTagTransform=D(),de.setAttributes=T(),de.insert=E().bind(null,"head"),de.domAPI=P(),de.insertStyleElement=I(),x()(pe.Z,de),pe.Z&&pe.Z.locals&&pe.Z.locals;var fe=(0,Z.Z)(ue,(function(){var t=this,e=t._self._c;return e("NcAppNavigation",{attrs:{"data-cy-files-navigation":""},scopedSlots:t._u([{key:"list",fn:function(){return t._l(t.parentViews,(function(n){return e("NcAppNavigationItem",{key:n.id,attrs:{"allow-collapse":!0,"data-cy-files-navigation-item":n.id,icon:n.iconClass,open:n.expanded,pinned:n.sticky,title:n.name,to:t.generateToNavigation(n)},on:{"update:open":function(e){return t.onToggleExpand(n)}}},t._l(t.childViews[n.id],(function(n){return e("NcAppNavigationItem",{key:n.id,attrs:{"data-cy-files-navigation-item":n.id,exact:!0,icon:n.iconClass,title:n.name,to:t.generateToNavigation(n)}})})),1)}))},proxy:!0},{key:"footer",fn:function(){return[e("ul",{staticClass:"app-navigation-entry__settings"},[e("NavigationQuota"),t._v(" "),e("NcAppNavigationItem",{attrs:{"aria-label":t.t("files","Open the files app settings"),title:t.t("files","Files settings"),"data-cy-files-navigation-settings-button":""},on:{click:function(e){return e.preventDefault(),e.stopPropagation(),t.openSettings.apply(null,arguments)}}},[e("Cog",{attrs:{slot:"icon",size:20},slot:"icon"})],1)],1)]},proxy:!0}])},[t._v(" "),t._v(" "),e("SettingsModal",{attrs:{open:t.settingsOpened,"data-cy-files-navigation-settings":""},on:{close:t.onSettingsClose}})],1)}),[],!1,null,"83bb0f06",null),ve=fe.exports;function me(t){return me="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},me(t)}function ge(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,he(i.key),i)}}function he(t){var e=function(t,e){if("object"!==me(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==me(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===me(e)?e:String(e)}var Ae=function(){function t(){var e,n,i;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),e=this,i=void 0,(n=he(n="_settings"))in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,this._settings=[],console.debug("OCA.Files.Settings initialized")}var e,n;return e=t,(n=[{key:"register",value:function(t){return this._settings.filter((function(e){return e.name===t.name})).length>0?(console.error("A setting with the same name is already registered"),!1):(this._settings.push(t),!0)}},{key:"settings",get:function(){return this._settings}}])&&ge(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}();function be(t){return be="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},be(t)}function ye(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,Ce(i.key),i)}}function we(t,e,n){return(e=Ce(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Ce(t){var e=function(t,e){if("object"!==be(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==be(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===be(e)?e:String(e)}var _e=function(){function t(e,n){var i=n.el,r=n.open,o=n.close;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),we(this,"_close",void 0),we(this,"_el",void 0),we(this,"_name",void 0),we(this,"_open",void 0),this._name=e,this._el=i,this._open=r,this._close=o,"function"!=typeof this._open&&(this._open=function(){}),"function"!=typeof this._close&&(this._close=function(){})}var e,n;return e=t,(n=[{key:"name",get:function(){return this._name}},{key:"el",get:function(){return this._el}},{key:"open",get:function(){return this._open}},{key:"close",get:function(){return this._close}}])&&ye(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}(),Se=i(78345),ke=i(17563);p.ZP.use(Se.Z);var xe,Oe,Pe=new Se.Z({mode:"history",base:(0,s.generateUrl)("/apps/files",""),linkActiveClass:"active",routes:[{path:"/",alias:"/files"},{path:"/:view/:fileid?",name:"filelist",props:!0}],stringifyQuery:function(t){var e=(0,ke.stringify)(t).replace(/%2F/gim,"/");return e?"?"+e:""}});window.OCA.Files=null!==(xe=window.OCA.Files)&&void 0!==xe?xe:{},window.OCP.Files=null!==(Oe=window.OCP.Files)&&void 0!==Oe?Oe:{};var je=new gt;Object.assign(window.OCP.Files,{Navigation:je});var Ee,Ne=new Ae;Object.assign(window.OCA.Files,{Settings:Ne}),Object.assign(window.OCA.Files.Settings,{Setting:_e}),new(p.ZP.extend(ve))({name:"FilesNavigationRoot",propsData:{Navigation:je},router:Pe}).$mount("#app-navigation-files"),(Ee=Object.values((0,o.j)("files","navigation",{}))).length>0&&(rt.debug("Legacy files views detected. Processing...",Ee),Ee.forEach((function(t){ct(t),t.sublist&&t.sublist.forEach((function(e){return ct(st(st({},e),{},{parent:t.id}))}))})))},358:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".app-navigation-entry__settings-quota--not-unlimited[data-v-26c061ec] .app-navigation-entry__title{margin-top:-4px}.app-navigation-entry__settings-quota progress[data-v-26c061ec]{position:absolute;bottom:10px;margin-left:44px;width:calc(100% - 44px - 22px)}","",{version:3,sources:["webpack://./apps/files/src/components/NavigationQuota.vue"],names:[],mappings:"AAIC,mGACC,eAAA,CAGD,gEACC,iBAAA,CACA,WAAA,CACA,gBAAA,CACA,8BAAA",sourcesContent:["\n// User storage stats display\n.app-navigation-entry__settings-quota {\n\t// Align title with progress and icon\n\t&--not-unlimited::v-deep .app-navigation-entry__title {\n\t\tmargin-top: -4px;\n\t}\n\n\tprogress {\n\t\tposition: absolute;\n\t\tbottom: 10px;\n\t\tmargin-left: 44px;\n\t\twidth: calc(100% - 44px - 22px);\n\t}\n}\n"],sourceRoot:""}]),e.Z=a},87027:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".template-picker__item[data-v-440aea22]{display:flex}.template-picker__label[data-v-440aea22]{display:flex;align-items:center;flex:1 1;flex-direction:column}.template-picker__label[data-v-440aea22],.template-picker__label *[data-v-440aea22]{cursor:pointer;user-select:none}.template-picker__label[data-v-440aea22]::before{display:none !important}.template-picker__preview[data-v-440aea22]{display:block;overflow:hidden;flex:1 1;width:var(--width);min-height:var(--height);max-height:var(--height);padding:0;border:var(--border) solid var(--color-border);border-radius:var(--border-radius-large)}input:checked+label>.template-picker__preview[data-v-440aea22]{border-color:var(--color-primary)}.template-picker__preview--failed[data-v-440aea22]{display:flex}.template-picker__image[data-v-440aea22]{max-width:100%;background-color:var(--color-main-background);object-fit:cover}.template-picker__preview--failed .template-picker__image[data-v-440aea22]{width:calc(var(--margin)*8);margin:auto;background-color:rgba(0,0,0,0) !important;object-fit:initial}.template-picker__title[data-v-440aea22]{overflow:hidden;max-width:calc(var(--width) + 4px);padding:var(--margin);white-space:nowrap;text-overflow:ellipsis}","",{version:3,sources:["webpack://./apps/files/src/components/TemplatePreview.vue"],names:[],mappings:"AAGC,wCACC,YAAA,CAGD,yCACC,YAAA,CAEA,kBAAA,CACA,QAAA,CACA,qBAAA,CAEA,oFACC,cAAA,CACA,gBAAA,CAGD,iDACC,uBAAA,CAIF,2CACC,aAAA,CACA,eAAA,CAEA,QAAA,CACA,kBAAA,CACA,wBAAA,CACA,wBAAA,CACA,SAAA,CACA,8CAAA,CACA,wCAAA,CAEA,+DACC,iCAAA,CAGD,mDAEC,YAAA,CAIF,yCACC,cAAA,CACA,6CAAA,CAEA,gBAAA,CAID,2EACC,2BAAA,CAEA,WAAA,CACA,yCAAA,CAEA,kBAAA,CAGD,yCACC,eAAA,CAEA,kCAAA,CACA,qBAAA,CACA,kBAAA,CACA,sBAAA",sourcesContent:["\n\n.template-picker {\n\t&__item {\n\t\tdisplay: flex;\n\t}\n\n\t&__label {\n\t\tdisplay: flex;\n\t\t// Align in the middle of the grid\n\t\talign-items: center;\n\t\tflex: 1 1;\n\t\tflex-direction: column;\n\n\t\t&, * {\n\t\t\tcursor: pointer;\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t&::before {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n\n\t&__preview {\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\t\t// Stretch so all entries are the same width\n\t\tflex: 1 1;\n\t\twidth: var(--width);\n\t\tmin-height: var(--height);\n\t\tmax-height: var(--height);\n\t\tpadding: 0;\n\t\tborder: var(--border) solid var(--color-border);\n\t\tborder-radius: var(--border-radius-large);\n\n\t\tinput:checked + label > & {\n\t\t\tborder-color: var(--color-primary);\n\t\t}\n\n\t\t&--failed {\n\t\t\t// Make sure to properly center fallback icon\n\t\t\tdisplay: flex;\n\t\t}\n\t}\n\n\t&__image {\n\t\tmax-width: 100%;\n\t\tbackground-color: var(--color-main-background);\n\n\t\tobject-fit: cover;\n\t}\n\n\t// Failed preview, fallback to mime icon\n\t&__preview--failed &__image {\n\t\twidth: calc(var(--margin) * 8);\n\t\t// Center mime icon\n\t\tmargin: auto;\n\t\tbackground-color: transparent !important;\n\n\t\tobject-fit: initial;\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\t// also count preview border\n\t\tmax-width: calc(var(--width) + 2*2px);\n\t\tpadding: var(--margin);\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n"],sourceRoot:""}]),e.Z=a},50375:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".app-navigation[data-v-83bb0f06] .app-navigation-entry-icon{background-repeat:no-repeat;background-position:center}.app-navigation>ul.app-navigation__list[data-v-83bb0f06]{padding-bottom:var(--default-grid-baseline, 4px)}.app-navigation-entry__settings[data-v-83bb0f06]{height:auto !important;overflow:hidden !important;padding-top:0 !important;flex:0 0 auto}","",{version:3,sources:["webpack://./apps/files/src/views/Navigation.vue"],names:[],mappings:"AAEA,4DACC,2BAAA,CACA,0BAAA,CAGD,yDAEC,gDAAA,CAGD,iDACC,sBAAA,CACA,0BAAA,CACA,wBAAA,CAEA,aAAA",sourcesContent:["\n// TODO: remove when https://github.com/nextcloud/nextcloud-vue/pull/3539 is in\n.app-navigation::v-deep .app-navigation-entry-icon {\n\tbackground-repeat: no-repeat;\n\tbackground-position: center;\n}\n\n.app-navigation > ul.app-navigation__list {\n\t// Use flex gap value for more elegant spacing\n\tpadding-bottom: var(--default-grid-baseline, 4px);\n}\n\n.app-navigation-entry__settings {\n\theight: auto !important;\n\toverflow: hidden !important;\n\tpadding-top: 0 !important;\n\t// Prevent shrinking or growing\n\tflex: 0 0 auto;\n}\n"],sourceRoot:""}]),e.Z=a},74502:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".templates-picker__form[data-v-55dd9121]{padding:calc(var(--margin)*2);padding-bottom:0}.templates-picker__form h2[data-v-55dd9121]{text-align:center;font-weight:bold;margin:var(--margin) 0 calc(var(--margin)*2)}.templates-picker__list[data-v-55dd9121]{display:grid;grid-gap:calc(var(--margin)*2);grid-auto-columns:1fr;max-width:calc(var(--fullwidth)*6);grid-template-columns:repeat(auto-fit, var(--fullwidth));grid-auto-rows:1fr;justify-content:center}.templates-picker__buttons[data-v-55dd9121]{display:flex;justify-content:space-between;padding:calc(var(--margin)*2) var(--margin);position:sticky;bottom:0;background-image:linear-gradient(0, var(--gradient-main-background))}.templates-picker__buttons button[data-v-55dd9121],.templates-picker__buttons input[type=submit][data-v-55dd9121]{height:44px}.templates-picker[data-v-55dd9121] .modal-container{position:relative}.templates-picker__loading[data-v-55dd9121]{position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;margin:0;background-color:var(--color-main-background-translucent)}","",{version:3,sources:["webpack://./apps/files/src/views/TemplatePicker.vue"],names:[],mappings:"AAEC,yCACC,6BAAA,CAEA,gBAAA,CAEA,4CACC,iBAAA,CACA,gBAAA,CACA,4CAAA,CAIF,yCACC,YAAA,CACA,8BAAA,CACA,qBAAA,CAEA,kCAAA,CACA,wDAAA,CAEA,kBAAA,CAEA,sBAAA,CAGD,4CACC,YAAA,CACA,6BAAA,CACA,2CAAA,CACA,eAAA,CACA,QAAA,CACA,oEAAA,CAEA,kHACC,WAAA,CAKF,oDACC,iBAAA,CAGD,4CACC,iBAAA,CACA,KAAA,CACA,MAAA,CACA,sBAAA,CACA,UAAA,CACA,WAAA,CACA,QAAA,CACA,yDAAA",sourcesContent:["\n.templates-picker {\n\t&__form {\n\t\tpadding: calc(var(--margin) * 2);\n\t\t// Will be handled by the buttons\n\t\tpadding-bottom: 0;\n\n\t\th2 {\n\t\t\ttext-align: center;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: var(--margin) 0 calc(var(--margin) * 2);\n\t\t}\n\t}\n\n\t&__list {\n\t\tdisplay: grid;\n\t\tgrid-gap: calc(var(--margin) * 2);\n\t\tgrid-auto-columns: 1fr;\n\t\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\n\t\tmax-width: calc(var(--fullwidth) * 6);\n\t\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\n\t\t// Make sure all rows are the same height\n\t\tgrid-auto-rows: 1fr;\n\t\t// Center the columns set\n\t\tjustify-content: center;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\tpadding: calc(var(--margin) * 2) var(--margin);\n\t\tposition: sticky;\n\t\tbottom: 0;\n\t\tbackground-image: linear-gradient(0, var(--gradient-main-background));\n\n\t\tbutton, input[type='submit'] {\n\t\t\theight: 44px;\n\t\t}\n\t}\n\n\t// Make sure we're relative for the loading emptycontent on top\n\t::v-deep .modal-container {\n\t\tposition: relative;\n\t}\n\n\t&__loading {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmargin: 0;\n\t\tbackground-color: var(--color-main-background-translucent);\n\t}\n}\n\n"],sourceRoot:""}]),e.Z=a}},i={};function r(t){var e=i[t];if(void 0!==e)return e.exports;var o=i[t]={id:t,loaded:!1,exports:{}};return n[t].call(o.exports,o,o.exports,r),o.loaded=!0,o.exports}r.m=n,e=[],r.O=function(t,n,i,o){if(!n){var a=1/0;for(u=0;u<e.length;u++){n=e[u][0],i=e[u][1],o=e[u][2];for(var s=!0,l=0;l<n.length;l++)(!1&o||a>=o)&&Object.keys(r.O).every((function(t){return r.O[t](n[l])}))?n.splice(l--,1):(s=!1,o<a&&(a=o));if(s){e.splice(u--,1);var c=i();void 0!==c&&(t=c)}}return t}o=o||0;for(var u=e.length;u>0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[n,i,o]},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,{a:e}),e},r.d=function(t,e){for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},r.j=2181,function(){r.b=document.baseURI||self.location.href;var t={2181:0};r.O.j=function(e){return 0===t[e]};var e=function(e,n){var i,o,a=n[0],s=n[1],l=n[2],c=0;if(a.some((function(e){return 0!==t[e]}))){for(i in s)r.o(s,i)&&(r.m[i]=s[i]);if(l)var u=l(r)}for(e&&e(n);c<a.length;c++)o=a[c],r.o(t,o)&&t[o]&&t[o][0](),t[o]=0;return r.O(u)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))}(),r.nc=void 0;var o=r.O(void 0,[7874],(function(){return r(78561)}));o=r.O(o)}();
-//# sourceMappingURL=files-main.js.map?v=56071802d06450665c60 \ No newline at end of file
+!function(){"use strict";var e,n={27249:function(e,n,i){var r=i(17499),o=i(79954),a=i(31352),s=i(79753),l=i(45994),c=function(){var t,e,n,i,r=(null===(t=OCA)||void 0===t||null===(e=t.Files)||void 0===e||null===(n=e.App)||void 0===n||null===(i=n.currentFileList)||void 0===i?void 0:i.dirInfo)||{path:"/",name:""};return"".concat(r.path,"/").concat(r.name).replace(/\/\//gi,"/")},u=i(4820),p=i(20144),d=i(62520),f=i(26932),v=i(93455),m=i.n(v),g=i(70110),h=i.n(g);function A(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function b(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var o=t.apply(e,n);function a(t){A(o,i,r,a,s,"next",t)}function s(t){A(o,i,r,a,s,"throw",t)}a(void 0)}))}}var y=function(){var t=b(regeneratorRuntime.mark((function t(){var e;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,u.default.get((0,s.generateOcsUrl)("apps/files/api/v1/templates"));case 2:return e=t.sent,t.abrupt("return",e.data.ocs.data);case 4:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),w=function(){var t=b(regeneratorRuntime.mark((function t(e,n,i){var r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,u.default.post((0,s.generateOcsUrl)("apps/files/api/v1/templates/create"),{filePath:e,templatePath:n,templateType:i});case 2:return r=t.sent,t.abrupt("return",r.data.ocs.data);case 4:case"end":return t.stop()}}),t)})));return function(e,n,i){return t.apply(this,arguments)}}(),C=256,_={name:"TemplatePreview",inheritAttrs:!1,props:{basename:{type:String,required:!0},checked:{type:Boolean,default:!1},fileid:{type:[String,Number],required:!0},filename:{type:String,required:!0},previewUrl:{type:String,default:null},hasPreview:{type:Boolean,default:!0},mime:{type:String,required:!0},ratio:{type:Number,default:null}},data:function(){return{failedPreview:!1}},computed:{nameWithoutExt:function(){return this.basename.indexOf(".")>-1?this.basename.split(".").slice(0,-1).join("."):this.basename},id:function(){return"template-picker-".concat(this.fileid)},realPreviewUrl:function(){return this.failedPreview&&this.mimeIcon?this.mimeIcon:this.previewUrl?this.previewUrl:(0,l.ts)()?(0,s.generateUrl)("/core/preview?fileId=".concat(this.fileid,"&x=").concat(C,"&y=").concat(C,"&a=1")):(0,s.generateUrl)("/apps/files_sharing/publicpreview/".concat(document.getElementById("sharingToken")&&document.getElementById("sharingToken").value,"?fileId=").concat(this.fileid,"&file=").concat(function(t){var e=(t.startsWith("/")?t:"/".concat(t)).split("/"),n="";return e.forEach((function(t){""!==t&&(n+="/"+encodeURIComponent(t))})),n}(this.filename),"&x=").concat(C,"&y=").concat(C,"&a=1"))},mimeIcon:function(){return OC.MimeType.getIconUrl(this.mime)}},methods:{onCheck:function(){this.$emit("check",this.fileid)},onFailure:function(){this.failedPreview=!0}}},S=_,k=i(93379),x=i.n(k),O=i(7795),P=i.n(O),j=i(90569),E=i.n(j),N=i(3565),T=i.n(N),F=i(19216),I=i.n(F),U=i(44589),D=i.n(U),B=i(87027),q={};q.styleTagTransform=D(),q.setAttributes=T(),q.insert=E().bind(null,"head"),q.domAPI=P(),q.insertStyleElement=I(),x()(B.Z,q),B.Z&&B.Z.locals&&B.Z.locals;var Z=i(51900),L=(0,Z.Z)(S,(function(){var t=this,e=t._self._c;return e("li",{staticClass:"template-picker__item"},[e("input",{staticClass:"radio",attrs:{id:t.id,type:"radio",name:"template-picker"},domProps:{checked:t.checked},on:{change:t.onCheck}}),t._v(" "),e("label",{staticClass:"template-picker__label",attrs:{for:t.id}},[e("div",{staticClass:"template-picker__preview",class:t.failedPreview?"template-picker__preview--failed":""},[e("img",{staticClass:"template-picker__image",attrs:{src:t.realPreviewUrl,alt:"",draggable:"false"},on:{error:t.onFailure}})]),t._v(" "),e("span",{staticClass:"template-picker__title"},[t._v("\n\t\t\t"+t._s(t.nameWithoutExt)+"\n\t\t")])])])}),[],!1,null,"440aea22",null).exports;function R(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function V(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var o=t.apply(e,n);function a(t){R(o,i,r,a,s,"next",t)}function s(t){R(o,i,r,a,s,"throw",t)}a(void 0)}))}}var M={name:"TemplatePicker",components:{NcEmptyContent:m(),NcModal:h(),TemplatePreview:L},props:{logger:{type:Object,required:!0}},data:function(){return{checked:-1,loading:!1,name:null,opened:!1,provider:null}},computed:{nameWithoutExt:function(){return this.name.indexOf(".")>-1?this.name.split(".").slice(0,-1).join("."):this.name},emptyTemplate:function(){var e,n;return{basename:t("files","Blank"),fileid:-1,filename:this.t("files","Blank"),hasPreview:!1,mime:(null===(e=this.provider)||void 0===e?void 0:e.mimetypes[0])||(null===(n=this.provider)||void 0===n?void 0:n.mimetypes)}},selectedTemplate:function(){var t=this;return this.provider.templates.find((function(e){return e.fileid===t.checked}))},style:function(){return{"--margin":"8px","--width":"160px","--border":"2px","--fullwidth":"180px","--height":this.provider.ratio?Math.round(160/this.provider.ratio)+"px":null}}},methods:{open:function(t,e){var n=this;return V(regeneratorRuntime.mark((function i(){var r,o;return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return n.checked=n.emptyTemplate.fileid,n.name=t,n.provider=e,i.next=5,y();case 5:if(r=i.sent,null!==(o=r.find((function(t){return t.app===e.app&&t.label===e.label})))){i.next=9;break}throw new Error("Failed to match provider in results");case 9:if(n.provider=o,0!==o.templates.length){i.next=13;break}return n.onSubmit(),i.abrupt("return");case 13:n.opened=!0;case 14:case"end":return i.stop()}}),i)})))()},close:function(){this.checked=this.emptyTemplate.fileid,this.loading=!1,this.name=null,this.opened=!1,this.provider=null},onCheck:function(t){this.checked=t},onSubmit:function(){var t=this;return V(regeneratorRuntime.mark((function e(){var n,i,r,o,a,s,l,u,p,v,m,g,h;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t.loading=!0,o=c(),a=null===(n=OCA)||void 0===n||null===(i=n.Files)||void 0===i||null===(r=i.App)||void 0===r?void 0:r.currentFileList,t.nameWithoutExt===t.name&&(t.logger.debug("Fixed invalid filename",{name:t.name,extension:null===(s=t.provider)||void 0===s?void 0:s.extension}),t.name=t.name+(null===(l=t.provider)||void 0===l?void 0:l.extension)),e.prev=4,e.next=7,w((0,d.normalize)("".concat(o,"/").concat(t.name)),null===(u=t.selectedTemplate)||void 0===u?void 0:u.filename,null===(p=t.selectedTemplate)||void 0===p?void 0:p.templateType);case 7:return v=e.sent,t.logger.debug("Created new file",v),e.next=11,null==a?void 0:a.addAndFetchFileInfo(t.name).then((function(t,e){return e}));case 11:m=e.sent,g=new OCA.Files.FileInfoModel(m,{filesClient:null==a?void 0:a.filesClient}),(h=OCA.Files.fileActions.getDefaultFileAction(v.mime,"file",OC.PERMISSION_ALL))&&h.action(v.basename,{$file:null==a?void 0:a.findFileEl(t.name),dir:o,fileList:a,fileActions:null==a?void 0:a.fileActions,fileInfoModel:g}),t.close(),e.next=23;break;case 18:e.prev=18,e.t0=e.catch(4),t.logger.error("Error while creating the new file from template"),console.error(e.t0),(0,f.x2)(t.t("files","Unable to create new file from template"));case 23:return e.prev=23,t.loading=!1,e.finish(23);case 26:case"end":return e.stop()}}),e,null,[[4,18,23,26]])})))()}}},Q=M,W=i(74502),z={};z.styleTagTransform=D(),z.setAttributes=T(),z.insert=E().bind(null,"head"),z.domAPI=P(),z.insertStyleElement=I(),x()(W.Z,z),W.Z&&W.Z.locals&&W.Z.locals;var G=(0,Z.Z)(Q,(function(){var t=this,e=t._self._c;return t.opened?e("NcModal",{staticClass:"templates-picker",attrs:{"clear-view-delay":-1,size:"normal"},on:{close:t.close}},[e("form",{staticClass:"templates-picker__form",style:t.style,on:{submit:function(e){return e.preventDefault(),e.stopPropagation(),t.onSubmit.apply(null,arguments)}}},[e("h2",[t._v(t._s(t.t("files","Pick a template for {name}",{name:t.nameWithoutExt})))]),t._v(" "),e("ul",{staticClass:"templates-picker__list"},[e("TemplatePreview",t._b({attrs:{checked:t.checked===t.emptyTemplate.fileid},on:{check:t.onCheck}},"TemplatePreview",t.emptyTemplate,!1)),t._v(" "),t._l(t.provider.templates,(function(n){return e("TemplatePreview",t._b({key:n.fileid,attrs:{checked:t.checked===n.fileid,ratio:t.provider.ratio},on:{check:t.onCheck}},"TemplatePreview",n,!1))}))],2),t._v(" "),e("div",{staticClass:"templates-picker__buttons"},[e("button",{on:{click:t.close}},[t._v("\n\t\t\t\t"+t._s(t.t("files","Cancel"))+"\n\t\t\t")]),t._v(" "),e("input",{staticClass:"primary",attrs:{type:"submit","aria-label":t.t("files","Create a new file with the selected template")},domProps:{value:t.t("files","Create")}})])]),t._v(" "),t.loading?e("NcEmptyContent",{staticClass:"templates-picker__loading",attrs:{icon:"icon-loading"}},[t._v("\n\t\t"+t._s(t.t("files","Creating file"))+"\n\t")]):t._e()],1):t._e()}),[],!1,null,"55dd9121",null),$=G.exports;function Y(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}var H=(0,r.IY)().setApp("files").detectUser().build();p.ZP.mixin({methods:{t:a.Iu,n:a.uN}});var K=document.createElement("div");K.id="template-picker",document.body.appendChild(K);var J=(0,o.j)("files","templates",[]),X=(0,o.j)("files","templates_path",!1);H.debug("Templates providers",J),H.debug("Templates folder",{templatesPath:X});var tt=new(p.ZP.extend($))({name:"TemplatePicker",propsData:{logger:H}});tt.$mount("#template-picker"),window.addEventListener("DOMContentLoaded",(function(){if(!X){H.debug("Templates folder not initialized");var t={attach:function(t){t.addMenuEntry({id:"template-init",displayName:(0,a.Iu)("files","Set up templates folder"),templateName:(0,a.Iu)("files","Templates"),iconClass:"icon-template-add",fileType:"file",actionHandler:function(e){nt(e),t.removeMenuEntry("template-init")}})}};OC.Plugins.register("OCA.Files.NewFileMenu",t)}})),J.forEach((function(t,e){var n={attach:function(n){var i=n.fileList;"files"!==i.id&&"files.public"!==i.id||n.addMenuEntry({id:"template-new-".concat(t.app,"-").concat(e),displayName:t.label,templateName:t.label+t.extension,iconClass:t.iconClass||"icon-file",fileType:"file",actionHandler:function(e){tt.open(e,t)}})}};OC.Plugins.register("OCA.Files.NewFileMenu",n)}));var et,nt=function(){var t,e=(t=regeneratorRuntime.mark((function t(e){var n,i;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=(c()+"/".concat(e)).replace("//","/"),t.prev=1,H.debug("Initializing the templates directory",{templatePath:n}),t.next=5,u.default.post((0,s.generateOcsUrl)("apps/files/api/v1/templates/path"),{templatePath:n,copySystemTemplates:!0});case 5:i=t.sent,OCA.Files.App.currentFileList.changeDirectory(n,!0,!0),J=i.data.ocs.data.templates,X=i.data.ocs.data.template_path,t.next=15;break;case 11:t.prev=11,t.t0=t.catch(1),H.error("Unable to initialize the templates directory"),(0,f.x2)((0,a.Iu)("files","Unable to initialize the templates directory"));case 15:case"end":return t.stop()}}),t,null,[[1,11]])})),function(){var e=this,n=arguments;return new Promise((function(i,r){var o=t.apply(e,n);function a(t){Y(o,i,r,a,s,"next",t)}function s(t){Y(o,i,r,a,s,"throw",t)}a(void 0)}))});return function(t){return e.apply(this,arguments)}}(),it=i(78595);et={attach:function(t){var e=this;(0,it.Ld)("nextcloud:unified-search.search",(function(e){var n=e.query;t.setFilter(n)})),(0,it.Ld)("nextcloud:unified-search.reset",(function(){e.query=null,t.setFilter("")}))}},window.OC.Plugins.register("OCA.Files.FileList",et);var rt=(0,r.IY)().setApp("files").detectUser().build();function ot(t){return ot="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ot(t)}function at(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function st(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?at(Object(n),!0).forEach((function(e){lt(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):at(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function lt(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==ot(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==ot(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===ot(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var ct=function(t){var e=t.id,n=t.name,i=t.order,r=t.icon,o=t.parent,a=t.classes,s=void 0===a?"":a,l=t.expanded,c=t.params;OCP.Files.Navigation.register({id:e,name:n,order:i,params:c,parent:o,expanded:!0===l,iconClass:r?"icon-".concat(r):"nav-icon-"+e,legacy:!0,sticky:s.includes("pinned")})},ut=i(41487),pt=i.n(ut);function dt(t){return dt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},dt(t)}function ft(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,mt(i.key),i)}}function vt(t,e,n){return(e=mt(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function mt(t){var e=function(t,e){if("object"!==dt(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==dt(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===dt(e)?e:String(e)}var gt=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),vt(this,"_views",[]),vt(this,"_currentView",null),rt.debug("Navigation service initialized")}var e,n;return e=t,(n=[{key:"register",value:function(t){try{At(t),ht(t,this._views)}catch(e){throw e instanceof Error&&rt.error(e.message,{view:t}),e}t.legacy&&rt.warn("Legacy view detected, please migrate to Vue"),t.iconClass&&(t.legacy=!0),this._views.push(t)}},{key:"views",get:function(){return this._views}},{key:"setActive",value:function(t){this._currentView=t}},{key:"active",get:function(){return this._currentView}}])&&ft(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}(),ht=function(t,e){if(e.find((function(e){return e.id===t.id})))throw new Error("Navigation id ".concat(t.id," is already registered"));return!0},At=function(t){if(!t.id||"string"!=typeof t.id)throw new Error("Navigation id is required and must be a string");if(!t.name||"string"!=typeof t.name)throw new Error("Navigation name is required and must be a string");if(!t.legacy){if(!t.getFiles||"function"!=typeof t.getFiles)throw new Error("Navigation getFiles is required and must be a function");if(!t.icon||"string"!=typeof t.icon||!pt()(t.icon))throw new Error("Navigation icon is required and must be a valid svg string")}if(!("order"in t)||"number"!=typeof t.order)throw new Error("Navigation order is required and must be a number");if(t.columns&&t.columns.forEach(bt),t.emptyView&&"function"!=typeof t.emptyView)throw new Error("Navigation emptyView must be a function");if(t.parent&&"string"!=typeof t.parent)throw new Error("Navigation parent must be a string");if("sticky"in t&&"boolean"!=typeof t.sticky)throw new Error("Navigation sticky must be a boolean");if("expanded"in t&&"boolean"!=typeof t.expanded)throw new Error("Navigation expanded must be a boolean");return!0},bt=function(t){if(!t.id||"string"!=typeof t.id)throw new Error("Column id is required");if(!t.title||"string"!=typeof t.title)throw new Error("Column title is required");if(!t.property||"string"!=typeof t.property)throw new Error("Column property is required");if(t.sortFunction&&"function"!=typeof t.sortFunction)throw new Error("Column sortFunction must be a function");if(t.summary&&"function"!=typeof t.summary)throw new Error("Column summary must be a function");return!0},yt=i(57638),wt=i(55209),Ct=i.n(wt),_t=i(14032),St=i.n(_t),kt=i(91770),xt=i(28615),Ot=i(74184),Pt=i(48959),jt=i.n(Pt);function Et(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function Nt(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var o=t.apply(e,n);function a(t){Et(o,i,r,a,s,"next",t)}function s(t){Et(o,i,r,a,s,"throw",t)}a(void 0)}))}}var Tt={name:"NavigationQuota",components:{ChartPie:Ot.Z,NcAppNavigationItem:St(),NcProgressBar:jt()},data:function(){return{loadingStorageStats:!1,storageStats:(0,o.j)("files","storageStats",null)}},computed:{storageStatsTitle:function(){var t,e,n,i=(0,kt.sS)(null===(t=this.storageStats)||void 0===t?void 0:t.used),r=(0,kt.sS)(null===(e=this.storageStats)||void 0===e?void 0:e.quota);return(null===(n=this.storageStats)||void 0===n?void 0:n.quota)<0?this.t("files","{usedQuotaByte} used",{usedQuotaByte:i}):this.t("files","{used} of {quota} used",{used:i,quota:r})},storageStatsTooltip:function(){return this.storageStats.relative?this.t("files","{relative}% used",this.storageStats):""}},beforeMount:function(){setInterval(this.throttleUpdateStorageStats,6e4),(0,it.Ld)("files:file:created",this.throttleUpdateStorageStats),(0,it.Ld)("files:file:deleted",this.throttleUpdateStorageStats),(0,it.Ld)("files:file:moved",this.throttleUpdateStorageStats),(0,it.Ld)("files:file:updated",this.throttleUpdateStorageStats),(0,it.Ld)("files:folder:created",this.throttleUpdateStorageStats),(0,it.Ld)("files:folder:deleted",this.throttleUpdateStorageStats),(0,it.Ld)("files:folder:moved",this.throttleUpdateStorageStats),(0,it.Ld)("files:folder:updated",this.throttleUpdateStorageStats)},methods:{debounceUpdateStorageStats:(0,xt.D)(200,(function(t){this.updateStorageStats(t)})),throttleUpdateStorageStats:(0,xt.P)(1e3,(function(t){this.updateStorageStats(t)})),updateStorageStats:function(){var e=arguments,n=this;return Nt(regeneratorRuntime.mark((function i(){var r,o,a;return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(r=e.length>0&&void 0!==e[0]?e[0]:null,!n.loadingStorageStats){i.next=3;break}return i.abrupt("return");case 3:return n.loadingStorageStats=!0,i.prev=4,i.next=7,u.default.get((0,s.generateUrl)("/apps/files/api/v1/stats"));case 7:if(null!=(a=i.sent)&&null!==(o=a.data)&&void 0!==o&&o.data){i.next=10;break}throw new Error("Invalid storage stats");case 10:n.storageStats=a.data.data,i.next=17;break;case 13:i.prev=13,i.t0=i.catch(4),rt.error("Could not refresh storage stats",{error:i.t0}),r&&(0,f.x2)(t("files","Could not refresh storage stats"));case 17:return i.prev=17,n.loadingStorageStats=!1,i.finish(17);case 20:case"end":return i.stop()}}),i,null,[[4,13,17,20]])})))()},t:a.Iu}},Ft=Tt,It=i(358),Ut={};Ut.styleTagTransform=D(),Ut.setAttributes=T(),Ut.insert=E().bind(null,"head"),Ut.domAPI=P(),Ut.insertStyleElement=I(),x()(It.Z,Ut),It.Z&&It.Z.locals&&It.Z.locals;var Dt=(0,Z.Z)(Ft,(function(){var t=this,e=t._self._c;return t.storageStats?e("NcAppNavigationItem",{staticClass:"app-navigation-entry__settings-quota",class:{"app-navigation-entry__settings-quota--not-unlimited":t.storageStats.quota>=0},attrs:{"aria-label":t.t("files","Storage informations"),loading:t.loadingStorageStats,name:t.storageStatsTitle,title:t.storageStatsTooltip,"data-cy-files-navigation-settings-quota":""},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.debounceUpdateStorageStats.apply(null,arguments)}}},[e("ChartPie",{attrs:{slot:"icon",size:20},slot:"icon"}),t._v(" "),t.storageStats.quota>=0?e("NcProgressBar",{attrs:{slot:"extra",error:t.storageStats.relative>80,value:Math.min(t.storageStats.relative,100)},slot:"extra"}):t._e()],1):t._e()}),[],!1,null,"26c061ec",null),Bt=Dt.exports,qt=i(68988),Zt=i.n(qt),Lt=i(16809),Rt=i.n(Lt),Vt=i(20571),Mt=i.n(Vt),Qt=i(70386),Wt=i(36029),zt=i.n(Wt),Gt={name:"Setting",props:{el:{type:Function,required:!0}},mounted:function(){this.$el.appendChild(this.el())}},$t=(0,Z.Z)(Gt,(function(){return(0,this._self._c)("div")}),[],!1,null,null,null).exports;function Yt(t){return Yt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Yt(t)}function Ht(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function Kt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function Jt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Kt(Object(n),!0).forEach((function(e){Xt(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Kt(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function Xt(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==Yt(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==Yt(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===Yt(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var te=(0,o.j)("files","config",{show_hidden:!1,crop_image_previews:!0}),ee={name:"Settings",components:{Clipboard:Qt.Z,NcAppSettingsDialog:Zt(),NcAppSettingsSection:Rt(),NcCheckboxRadioSwitch:Mt(),NcInputField:zt(),Setting:$t},props:{open:{type:Boolean,default:!1}},data:function(){var t,e,n,i;return Jt(Jt({},te),{},{settings:(null===(t=window.OCA)||void 0===t||null===(e=t.Files)||void 0===e||null===(n=e.Settings)||void 0===n?void 0:n.settings)||[],webdavUrl:(0,s.generateRemoteUrl)("dav/files/"+encodeURIComponent(null===(i=(0,l.ts)())||void 0===i?void 0:i.uid)),webdavDocs:"https://docs.nextcloud.com/server/stable/go.php?to=user-webdav",webdavUrlCopied:!1})},beforeMount:function(){this.settings.forEach((function(t){return t.open()}))},beforeDestroy:function(){this.settings.forEach((function(t){return t.close()}))},methods:{onClose:function(){this.$emit("close")},setConfig:function(t,e){(0,it.j8)("files:config:updated",{key:t,value:e}),u.default.post((0,s.generateUrl)("/apps/files/api/v1/config/"+t),{value:e})},copyCloudId:function(){var e,n=this;return(e=regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(document.querySelector("input#webdav-url-input").select(),navigator.clipboard){e.next=4;break}return(0,f.x2)(t("files","Clipboard is not available")),e.abrupt("return");case 4:return e.next=6,navigator.clipboard.writeText(n.webdavUrl);case 6:n.webdavUrlCopied=!0,(0,f.s$)(t("files","WebDAV URL copied to clipboard")),setTimeout((function(){n.webdavUrlCopied=!1}),5e3);case 9:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(i,r){var o=e.apply(t,n);function a(t){Ht(o,i,r,a,s,"next",t)}function s(t){Ht(o,i,r,a,s,"throw",t)}a(void 0)}))})()},t:a.Iu}},ne=ee,ie=(0,Z.Z)(ne,(function(){var t=this,e=t._self._c;return e("NcAppSettingsDialog",{attrs:{open:t.open,"show-navigation":!0,title:t.t("files","Files settings")},on:{"update:open":t.onClose}},[e("NcAppSettingsSection",{attrs:{id:"settings",title:t.t("files","Files settings")}},[e("NcCheckboxRadioSwitch",{attrs:{checked:t.show_hidden},on:{"update:checked":[function(e){t.show_hidden=e},function(e){return t.setConfig("show_hidden",e)}]}},[t._v("\n\t\t\t"+t._s(t.t("files","Show hidden files"))+"\n\t\t")]),t._v(" "),e("NcCheckboxRadioSwitch",{attrs:{checked:t.crop_image_previews},on:{"update:checked":[function(e){t.crop_image_previews=e},function(e){return t.setConfig("crop_image_previews",e)}]}},[t._v("\n\t\t\t"+t._s(t.t("files","Crop image previews"))+"\n\t\t")])],1),t._v(" "),0!==t.settings.length?e("NcAppSettingsSection",{attrs:{id:"more-settings",title:t.t("files","Additional settings")}},[t._l(t.settings,(function(t){return[e("Setting",{key:t.name,attrs:{el:t.el}})]}))],2):t._e(),t._v(" "),e("NcAppSettingsSection",{attrs:{id:"webdav",title:t.t("files","WebDAV")}},[e("NcInputField",{attrs:{id:"webdav-url-input","show-trailing-button":!0,success:t.webdavUrlCopied,"trailing-button-label":t.t("files","Copy to clipboard"),value:t.webdavUrl,readonly:"readonly",type:"url"},on:{focus:function(t){return t.target.select()},"trailing-button-click":t.copyCloudId},scopedSlots:t._u([{key:"trailing-button-icon",fn:function(){return[e("Clipboard",{attrs:{size:20}})]},proxy:!0}])}),t._v(" "),e("em",[e("a",{attrs:{href:t.webdavDocs,target:"_blank",rel:"noreferrer noopener"}},[t._v("\n\t\t\t\t"+t._s(t.t("files","Use this address to access your Files via WebDAV"))+" ↗\n\t\t\t")])])],1)],1)}),[],!1,null,"54b74cff",null).exports;function re(t){return re="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},re(t)}function oe(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function ae(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?oe(Object(n),!0).forEach((function(e){se(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):oe(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function se(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==re(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==re(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===re(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function le(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}var ce={name:"Navigation",components:{Cog:yt.default,NcAppNavigation:Ct(),NcAppNavigationItem:St(),SettingsModal:ie,NavigationQuota:Bt},props:{Navigation:{type:gt,required:!0}},data:function(){return{settingsOpened:!1}},computed:{currentViewId:function(){var t,e;return(null===(t=this.$route)||void 0===t||null===(e=t.params)||void 0===e?void 0:e.view)||"files"},currentView:function(){var t=this;return this.views.find((function(e){return e.id===t.currentViewId}))},views:function(){return this.Navigation.views},parentViews:function(){return this.views.filter((function(t){return!t.parent})).sort((function(t,e){return t.order-e.order}))},childViews:function(){return this.views.filter((function(t){return!!t.parent})).reduce((function(t,e){return t[e.parent]=[].concat(function(t){if(Array.isArray(t))return le(t)}(n=t[e.parent]||[])||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(n)||function(t,e){if(t){if("string"==typeof t)return le(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?le(t,e):void 0}}(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[e]),t[e.parent].sort((function(t,e){return t.order-e.order})),t;var n}),{})}},watch:{currentView:function(t,e){rt.debug("View changed",{id:t.id,view:t}),this.showView(t,e)}},beforeMount:function(){this.currentView&&(rt.debug("Navigation mounted. Showing requested view",{view:this.currentView}),this.showView(this.currentView)),(0,it.Ld)("files:legacy-navigation:changed",this.onLegacyNavigationChanged)},methods:{showView:function(t,e){var n,i,r,o,a;if(null===(n=window)||void 0===n||null===(i=n.OCA)||void 0===i||null===(r=i.Files)||void 0===r||null===(o=r.Sidebar)||void 0===o||null===(a=o.close)||void 0===a||a.call(o),t.legacy){var s=document.querySelector("#app-content #app-content-"+this.currentView.id+".viewcontainer");document.querySelectorAll("#app-content .viewcontainer").forEach((function(t){t.classList.add("hidden")})),s.classList.remove("hidden");var l=OC.Util.History.parseUrlQuery().dir,c=void 0===l?"/":l,u={itemId:t.id,dir:c};rt.debug("Triggering legacy navigation event",u),window.jQuery(s).trigger(new window.jQuery.Event("show",u)),window.jQuery(s).trigger(new window.jQuery.Event("urlChanged",u))}this.Navigation.setActive(t),(0,it.j8)("files:navigation:changed",t)},onLegacyNavigationChanged:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{id:"files"},e=t.id,n=this.Navigation.views.find((function(t){return t.id===e}));n&&n.legacy&&n.id!==this.currentView.id&&(this.$router.replace(ae(ae({},this.$route),{},{params:{view:n.id}})),this.Navigation.setActive(n),this.showView(n))},onToggleExpand:function(t){t.expanded=!t.expanded,u.default.post((0,s.generateUrl)("/apps/files/api/v1/toggleShowFolder/".concat(t.id)),{show:t.expanded})},generateToNavigation:function(t){if(t.params){var e=t.params,n=e.dir,i=e.fileid;return{name:"filelist",params:t.params,query:{dir:n,fileid:i}}}return{name:"filelist",params:{view:t.id}}},openSettings:function(){this.settingsOpened=!0},onSettingsClose:function(){this.settingsOpened=!1},t:a.Iu}},ue=ce,pe=i(50375),de={};de.styleTagTransform=D(),de.setAttributes=T(),de.insert=E().bind(null,"head"),de.domAPI=P(),de.insertStyleElement=I(),x()(pe.Z,de),pe.Z&&pe.Z.locals&&pe.Z.locals;var fe=(0,Z.Z)(ue,(function(){var t=this,e=t._self._c;return e("NcAppNavigation",{attrs:{"data-cy-files-navigation":""},scopedSlots:t._u([{key:"list",fn:function(){return t._l(t.parentViews,(function(n){return e("NcAppNavigationItem",{key:n.id,attrs:{"allow-collapse":!0,"data-cy-files-navigation-item":n.id,icon:n.iconClass,open:n.expanded,pinned:n.sticky,title:n.name,to:t.generateToNavigation(n)},on:{"update:open":function(e){return t.onToggleExpand(n)}}},t._l(t.childViews[n.id],(function(n){return e("NcAppNavigationItem",{key:n.id,attrs:{"data-cy-files-navigation-item":n.id,exact:!0,icon:n.iconClass,title:n.name,to:t.generateToNavigation(n)}})})),1)}))},proxy:!0},{key:"footer",fn:function(){return[e("ul",{staticClass:"app-navigation-entry__settings"},[e("NavigationQuota"),t._v(" "),e("NcAppNavigationItem",{attrs:{"aria-label":t.t("files","Open the files app settings"),title:t.t("files","Files settings"),"data-cy-files-navigation-settings-button":""},on:{click:function(e){return e.preventDefault(),e.stopPropagation(),t.openSettings.apply(null,arguments)}}},[e("Cog",{attrs:{slot:"icon",size:20},slot:"icon"})],1)],1)]},proxy:!0}])},[t._v(" "),t._v(" "),e("SettingsModal",{attrs:{open:t.settingsOpened,"data-cy-files-navigation-settings":""},on:{close:t.onSettingsClose}})],1)}),[],!1,null,"83bb0f06",null),ve=fe.exports;function me(t){return me="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},me(t)}function ge(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,he(i.key),i)}}function he(t){var e=function(t,e){if("object"!==me(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==me(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===me(e)?e:String(e)}var Ae=function(){function t(){var e,n,i;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),e=this,i=void 0,(n=he(n="_settings"))in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,this._settings=[],console.debug("OCA.Files.Settings initialized")}var e,n;return e=t,(n=[{key:"register",value:function(t){return this._settings.filter((function(e){return e.name===t.name})).length>0?(console.error("A setting with the same name is already registered"),!1):(this._settings.push(t),!0)}},{key:"settings",get:function(){return this._settings}}])&&ge(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}();function be(t){return be="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},be(t)}function ye(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,Ce(i.key),i)}}function we(t,e,n){return(e=Ce(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Ce(t){var e=function(t,e){if("object"!==be(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==be(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===be(e)?e:String(e)}var _e=function(){function t(e,n){var i=n.el,r=n.open,o=n.close;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),we(this,"_close",void 0),we(this,"_el",void 0),we(this,"_name",void 0),we(this,"_open",void 0),this._name=e,this._el=i,this._open=r,this._close=o,"function"!=typeof this._open&&(this._open=function(){}),"function"!=typeof this._close&&(this._close=function(){})}var e,n;return e=t,(n=[{key:"name",get:function(){return this._name}},{key:"el",get:function(){return this._el}},{key:"open",get:function(){return this._open}},{key:"close",get:function(){return this._close}}])&&ye(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}(),Se=i(78345),ke=i(17563);p.ZP.use(Se.Z);var xe,Oe,Pe=new Se.Z({mode:"history",base:(0,s.generateUrl)("/apps/files",""),linkActiveClass:"active",routes:[{path:"/",alias:"/files"},{path:"/:view/:fileid?",name:"filelist",props:!0}],stringifyQuery:function(t){var e=(0,ke.stringify)(t).replace(/%2F/gim,"/");return e?"?"+e:""}});window.OCA.Files=null!==(xe=window.OCA.Files)&&void 0!==xe?xe:{},window.OCP.Files=null!==(Oe=window.OCP.Files)&&void 0!==Oe?Oe:{};var je=new gt;Object.assign(window.OCP.Files,{Navigation:je});var Ee,Ne=new Ae;Object.assign(window.OCA.Files,{Settings:Ne}),Object.assign(window.OCA.Files.Settings,{Setting:_e}),new(p.ZP.extend(ve))({name:"FilesNavigationRoot",propsData:{Navigation:je},router:Pe}).$mount("#app-navigation-files"),(Ee=Object.values((0,o.j)("files","navigation",{}))).length>0&&(rt.debug("Legacy files views detected. Processing...",Ee),Ee.forEach((function(t){ct(t),t.sublist&&t.sublist.forEach((function(e){return ct(st(st({},e),{},{parent:t.id}))}))})))},358:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".app-navigation-entry__settings-quota--not-unlimited[data-v-26c061ec] .app-navigation-entry__title{margin-top:-4px}.app-navigation-entry__settings-quota progress[data-v-26c061ec]{position:absolute;bottom:10px;margin-left:44px;width:calc(100% - 44px - 22px)}","",{version:3,sources:["webpack://./apps/files/src/components/NavigationQuota.vue"],names:[],mappings:"AAIC,mGACC,eAAA,CAGD,gEACC,iBAAA,CACA,WAAA,CACA,gBAAA,CACA,8BAAA",sourcesContent:["\n// User storage stats display\n.app-navigation-entry__settings-quota {\n\t// Align title with progress and icon\n\t&--not-unlimited::v-deep .app-navigation-entry__title {\n\t\tmargin-top: -4px;\n\t}\n\n\tprogress {\n\t\tposition: absolute;\n\t\tbottom: 10px;\n\t\tmargin-left: 44px;\n\t\twidth: calc(100% - 44px - 22px);\n\t}\n}\n"],sourceRoot:""}]),e.Z=a},87027:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".template-picker__item[data-v-440aea22]{display:flex}.template-picker__label[data-v-440aea22]{display:flex;align-items:center;flex:1 1;flex-direction:column}.template-picker__label[data-v-440aea22],.template-picker__label *[data-v-440aea22]{cursor:pointer;user-select:none}.template-picker__label[data-v-440aea22]::before{display:none !important}.template-picker__preview[data-v-440aea22]{display:block;overflow:hidden;flex:1 1;width:var(--width);min-height:var(--height);max-height:var(--height);padding:0;border:var(--border) solid var(--color-border);border-radius:var(--border-radius-large)}input:checked+label>.template-picker__preview[data-v-440aea22]{border-color:var(--color-primary)}.template-picker__preview--failed[data-v-440aea22]{display:flex}.template-picker__image[data-v-440aea22]{max-width:100%;background-color:var(--color-main-background);object-fit:cover}.template-picker__preview--failed .template-picker__image[data-v-440aea22]{width:calc(var(--margin)*8);margin:auto;background-color:rgba(0,0,0,0) !important;object-fit:initial}.template-picker__title[data-v-440aea22]{overflow:hidden;max-width:calc(var(--width) + 4px);padding:var(--margin);white-space:nowrap;text-overflow:ellipsis}","",{version:3,sources:["webpack://./apps/files/src/components/TemplatePreview.vue"],names:[],mappings:"AAGC,wCACC,YAAA,CAGD,yCACC,YAAA,CAEA,kBAAA,CACA,QAAA,CACA,qBAAA,CAEA,oFACC,cAAA,CACA,gBAAA,CAGD,iDACC,uBAAA,CAIF,2CACC,aAAA,CACA,eAAA,CAEA,QAAA,CACA,kBAAA,CACA,wBAAA,CACA,wBAAA,CACA,SAAA,CACA,8CAAA,CACA,wCAAA,CAEA,+DACC,iCAAA,CAGD,mDAEC,YAAA,CAIF,yCACC,cAAA,CACA,6CAAA,CAEA,gBAAA,CAID,2EACC,2BAAA,CAEA,WAAA,CACA,yCAAA,CAEA,kBAAA,CAGD,yCACC,eAAA,CAEA,kCAAA,CACA,qBAAA,CACA,kBAAA,CACA,sBAAA",sourcesContent:["\n\n.template-picker {\n\t&__item {\n\t\tdisplay: flex;\n\t}\n\n\t&__label {\n\t\tdisplay: flex;\n\t\t// Align in the middle of the grid\n\t\talign-items: center;\n\t\tflex: 1 1;\n\t\tflex-direction: column;\n\n\t\t&, * {\n\t\t\tcursor: pointer;\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t&::before {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n\n\t&__preview {\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\t\t// Stretch so all entries are the same width\n\t\tflex: 1 1;\n\t\twidth: var(--width);\n\t\tmin-height: var(--height);\n\t\tmax-height: var(--height);\n\t\tpadding: 0;\n\t\tborder: var(--border) solid var(--color-border);\n\t\tborder-radius: var(--border-radius-large);\n\n\t\tinput:checked + label > & {\n\t\t\tborder-color: var(--color-primary);\n\t\t}\n\n\t\t&--failed {\n\t\t\t// Make sure to properly center fallback icon\n\t\t\tdisplay: flex;\n\t\t}\n\t}\n\n\t&__image {\n\t\tmax-width: 100%;\n\t\tbackground-color: var(--color-main-background);\n\n\t\tobject-fit: cover;\n\t}\n\n\t// Failed preview, fallback to mime icon\n\t&__preview--failed &__image {\n\t\twidth: calc(var(--margin) * 8);\n\t\t// Center mime icon\n\t\tmargin: auto;\n\t\tbackground-color: transparent !important;\n\n\t\tobject-fit: initial;\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\t// also count preview border\n\t\tmax-width: calc(var(--width) + 2*2px);\n\t\tpadding: var(--margin);\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n"],sourceRoot:""}]),e.Z=a},50375:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".app-navigation[data-v-83bb0f06] .app-navigation-entry-icon{background-repeat:no-repeat;background-position:center}.app-navigation>ul.app-navigation__list[data-v-83bb0f06]{padding-bottom:var(--default-grid-baseline, 4px)}.app-navigation-entry__settings[data-v-83bb0f06]{height:auto !important;overflow:hidden !important;padding-top:0 !important;flex:0 0 auto}","",{version:3,sources:["webpack://./apps/files/src/views/Navigation.vue"],names:[],mappings:"AAEA,4DACC,2BAAA,CACA,0BAAA,CAGD,yDAEC,gDAAA,CAGD,iDACC,sBAAA,CACA,0BAAA,CACA,wBAAA,CAEA,aAAA",sourcesContent:["\n// TODO: remove when https://github.com/nextcloud/nextcloud-vue/pull/3539 is in\n.app-navigation::v-deep .app-navigation-entry-icon {\n\tbackground-repeat: no-repeat;\n\tbackground-position: center;\n}\n\n.app-navigation > ul.app-navigation__list {\n\t// Use flex gap value for more elegant spacing\n\tpadding-bottom: var(--default-grid-baseline, 4px);\n}\n\n.app-navigation-entry__settings {\n\theight: auto !important;\n\toverflow: hidden !important;\n\tpadding-top: 0 !important;\n\t// Prevent shrinking or growing\n\tflex: 0 0 auto;\n}\n"],sourceRoot:""}]),e.Z=a},74502:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".templates-picker__form[data-v-55dd9121]{padding:calc(var(--margin)*2);padding-bottom:0}.templates-picker__form h2[data-v-55dd9121]{text-align:center;font-weight:bold;margin:var(--margin) 0 calc(var(--margin)*2)}.templates-picker__list[data-v-55dd9121]{display:grid;grid-gap:calc(var(--margin)*2);grid-auto-columns:1fr;max-width:calc(var(--fullwidth)*6);grid-template-columns:repeat(auto-fit, var(--fullwidth));grid-auto-rows:1fr;justify-content:center}.templates-picker__buttons[data-v-55dd9121]{display:flex;justify-content:space-between;padding:calc(var(--margin)*2) var(--margin);position:sticky;bottom:0;background-image:linear-gradient(0, var(--gradient-main-background))}.templates-picker__buttons button[data-v-55dd9121],.templates-picker__buttons input[type=submit][data-v-55dd9121]{height:44px}.templates-picker[data-v-55dd9121] .modal-container{position:relative}.templates-picker__loading[data-v-55dd9121]{position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;margin:0;background-color:var(--color-main-background-translucent)}","",{version:3,sources:["webpack://./apps/files/src/views/TemplatePicker.vue"],names:[],mappings:"AAEC,yCACC,6BAAA,CAEA,gBAAA,CAEA,4CACC,iBAAA,CACA,gBAAA,CACA,4CAAA,CAIF,yCACC,YAAA,CACA,8BAAA,CACA,qBAAA,CAEA,kCAAA,CACA,wDAAA,CAEA,kBAAA,CAEA,sBAAA,CAGD,4CACC,YAAA,CACA,6BAAA,CACA,2CAAA,CACA,eAAA,CACA,QAAA,CACA,oEAAA,CAEA,kHACC,WAAA,CAKF,oDACC,iBAAA,CAGD,4CACC,iBAAA,CACA,KAAA,CACA,MAAA,CACA,sBAAA,CACA,UAAA,CACA,WAAA,CACA,QAAA,CACA,yDAAA",sourcesContent:["\n.templates-picker {\n\t&__form {\n\t\tpadding: calc(var(--margin) * 2);\n\t\t// Will be handled by the buttons\n\t\tpadding-bottom: 0;\n\n\t\th2 {\n\t\t\ttext-align: center;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: var(--margin) 0 calc(var(--margin) * 2);\n\t\t}\n\t}\n\n\t&__list {\n\t\tdisplay: grid;\n\t\tgrid-gap: calc(var(--margin) * 2);\n\t\tgrid-auto-columns: 1fr;\n\t\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\n\t\tmax-width: calc(var(--fullwidth) * 6);\n\t\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\n\t\t// Make sure all rows are the same height\n\t\tgrid-auto-rows: 1fr;\n\t\t// Center the columns set\n\t\tjustify-content: center;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\tpadding: calc(var(--margin) * 2) var(--margin);\n\t\tposition: sticky;\n\t\tbottom: 0;\n\t\tbackground-image: linear-gradient(0, var(--gradient-main-background));\n\n\t\tbutton, input[type='submit'] {\n\t\t\theight: 44px;\n\t\t}\n\t}\n\n\t// Make sure we're relative for the loading emptycontent on top\n\t::v-deep .modal-container {\n\t\tposition: relative;\n\t}\n\n\t&__loading {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmargin: 0;\n\t\tbackground-color: var(--color-main-background-translucent);\n\t}\n}\n\n"],sourceRoot:""}]),e.Z=a}},i={};function r(t){var e=i[t];if(void 0!==e)return e.exports;var o=i[t]={id:t,loaded:!1,exports:{}};return n[t].call(o.exports,o,o.exports,r),o.loaded=!0,o.exports}r.m=n,e=[],r.O=function(t,n,i,o){if(!n){var a=1/0;for(u=0;u<e.length;u++){n=e[u][0],i=e[u][1],o=e[u][2];for(var s=!0,l=0;l<n.length;l++)(!1&o||a>=o)&&Object.keys(r.O).every((function(t){return r.O[t](n[l])}))?n.splice(l--,1):(s=!1,o<a&&(a=o));if(s){e.splice(u--,1);var c=i();void 0!==c&&(t=c)}}return t}o=o||0;for(var u=e.length;u>0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[n,i,o]},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,{a:e}),e},r.d=function(t,e){for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},r.j=2181,function(){r.b=document.baseURI||self.location.href;var t={2181:0};r.O.j=function(e){return 0===t[e]};var e=function(e,n){var i,o,a=n[0],s=n[1],l=n[2],c=0;if(a.some((function(e){return 0!==t[e]}))){for(i in s)r.o(s,i)&&(r.m[i]=s[i]);if(l)var u=l(r)}for(e&&e(n);c<a.length;c++)o=a[c],r.o(t,o)&&t[o]&&t[o][0](),t[o]=0;return r.O(u)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))}(),r.nc=void 0;var o=r.O(void 0,[7874],(function(){return r(27249)}));o=r.O(o)}();
+//# sourceMappingURL=files-main.js.map?v=e2f2b11dcc47b6c5bacb \ No newline at end of file
diff --git a/dist/files-main.js.map b/dist/files-main.js.map
index cd1b1dc523a..ebf260285f6 100644
--- a/dist/files-main.js.map
+++ b/dist/files-main.js.map
@@ -1 +1 @@
-{"version":3,"file":"files-main.js?v=56071802d06450665c60","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/files/src/utils/davUtils.js","webpack:///nextcloud/apps/files/src/services/Templates.js","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue","webpack:///nextcloud/apps/files/src/utils/fileUtils.js","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?c067","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?81db","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?c414","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?023e","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?afd8","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?1f7b","webpack:///nextcloud/apps/files/src/templates.js","webpack:///nextcloud/apps/files/src/legacy/filelistSearch.js","webpack:///nextcloud/apps/files/src/logger.js","webpack:///nextcloud/apps/files/src/legacy/navigationMapper.js","webpack:///nextcloud/apps/files/src/services/Navigation.ts","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?2b80","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?2966","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?08cb","webpack:///nextcloud/apps/files/src/components/Setting.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files/src/components/Setting.vue","webpack://nextcloud/./apps/files/src/components/Setting.vue?98ea","webpack://nextcloud/./apps/files/src/components/Setting.vue?8d57","webpack:///nextcloud/apps/files/src/views/Settings.vue","webpack:///nextcloud/apps/files/src/views/Settings.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/Settings.vue?b81b","webpack://nextcloud/./apps/files/src/views/Settings.vue?84f7","webpack:///nextcloud/apps/files/src/views/Navigation.vue","webpack:///nextcloud/apps/files/src/views/Navigation.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/Navigation.vue?98f5","webpack://nextcloud/./apps/files/src/views/Navigation.vue?74b9","webpack://nextcloud/./apps/files/src/views/Navigation.vue?8122","webpack:///nextcloud/apps/files/src/services/Settings.js","webpack:///nextcloud/apps/files/src/models/Setting.js","webpack:///nextcloud/apps/files/src/router/router.js","webpack:///nextcloud/apps/files/src/main.js","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue?vue&type=style&index=0&id=26c061ec&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue?vue&type=style&index=0&id=440aea22&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/views/Navigation.vue?vue&type=style&index=0&id=83bb0f06&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue?vue&type=style&index=0&id=55dd9121&prod&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateRemoteUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\n\nexport const getRootPath = function() {\n\tif (getCurrentUser()) {\n\t\treturn generateRemoteUrl(`dav/files/${getCurrentUser().uid}`)\n\t} else {\n\t\treturn generateRemoteUrl('webdav').replace('/remote.php', '/public.php')\n\t}\n}\n\nexport const isPublic = function() {\n\treturn !getCurrentUser()\n}\n\nexport const getToken = function() {\n\treturn document.getElementById('sharingToken') && document.getElementById('sharingToken').value\n}\n\n/**\n * Return the current directory, fallback to root\n *\n * @return {string}\n */\nexport const getCurrentDirectory = function() {\n\tconst currentDirInfo = OCA?.Files?.App?.currentFileList?.dirInfo\n\t\t|| { path: '/', name: '' }\n\n\t// Make sure we don't have double slashes\n\treturn `${currentDirInfo.path}/${currentDirInfo.name}`.replace(/\\/\\//gi, '/')\n}\n","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateOcsUrl } from '@nextcloud/router'\nimport axios from '@nextcloud/axios'\n\nexport const getTemplates = async function() {\n\tconst response = await axios.get(generateOcsUrl('apps/files/api/v1/templates'))\n\treturn response.data.ocs.data\n}\n\n/**\n * Create a new file from a specified template\n *\n * @param {string} filePath The new file destination path\n * @param {string} templatePath The template source path\n * @param {string} templateType The template type e.g 'user'\n */\nexport const createFromTemplate = async function(filePath, templatePath, templateType) {\n\tconst response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/create'), {\n\t\tfilePath,\n\t\ttemplatePath,\n\t\ttemplateType,\n\t})\n\treturn response.data.ocs.data\n}\n","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<li class=\"template-picker__item\">\n\t\t<input :id=\"id\"\n\t\t\t:checked=\"checked\"\n\t\t\ttype=\"radio\"\n\t\t\tclass=\"radio\"\n\t\t\tname=\"template-picker\"\n\t\t\t@change=\"onCheck\">\n\n\t\t<label :for=\"id\" class=\"template-picker__label\">\n\t\t\t<div class=\"template-picker__preview\"\n\t\t\t\t:class=\"failedPreview ? 'template-picker__preview--failed' : ''\">\n\t\t\t\t<img class=\"template-picker__image\"\n\t\t\t\t\t:src=\"realPreviewUrl\"\n\t\t\t\t\talt=\"\"\n\t\t\t\t\tdraggable=\"false\"\n\t\t\t\t\t@error=\"onFailure\">\n\t\t\t</div>\n\n\t\t\t<span class=\"template-picker__title\">\n\t\t\t\t{{ nameWithoutExt }}\n\t\t\t</span>\n\t\t</label>\n\t</li>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport { encodeFilePath } from '../utils/fileUtils'\nimport { getToken, isPublic } from '../utils/davUtils'\n\n// preview width generation\nconst previewWidth = 256\n\nexport default {\n\tname: 'TemplatePreview',\n\tinheritAttrs: false,\n\n\tprops: {\n\t\tbasename: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tchecked: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tfileid: {\n\t\t\ttype: [String, Number],\n\t\t\trequired: true,\n\t\t},\n\t\tfilename: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tpreviewUrl: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\thasPreview: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tmime: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tratio: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tfailedPreview: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Strip away extension from name\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tnameWithoutExt() {\n\t\t\treturn this.basename.indexOf('.') > -1 ? this.basename.split('.').slice(0, -1).join('.') : this.basename\n\t\t},\n\n\t\tid() {\n\t\t\treturn `template-picker-${this.fileid}`\n\t\t},\n\n\t\trealPreviewUrl() {\n\t\t\t// If original preview failed, fallback to mime icon\n\t\t\tif (this.failedPreview && this.mimeIcon) {\n\t\t\t\treturn this.mimeIcon\n\t\t\t}\n\n\t\t\tif (this.previewUrl) {\n\t\t\t\treturn this.previewUrl\n\t\t\t}\n\t\t\t// TODO: find a nicer standard way of doing this?\n\t\t\tif (isPublic()) {\n\t\t\t\treturn generateUrl(`/apps/files_sharing/publicpreview/${getToken()}?fileId=${this.fileid}&file=${encodeFilePath(this.filename)}&x=${previewWidth}&y=${previewWidth}&a=1`)\n\t\t\t}\n\t\t\treturn generateUrl(`/core/preview?fileId=${this.fileid}&x=${previewWidth}&y=${previewWidth}&a=1`)\n\t\t},\n\n\t\tmimeIcon() {\n\t\t\treturn OC.MimeType.getIconUrl(this.mime)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonCheck() {\n\t\t\tthis.$emit('check', this.fileid)\n\t\t},\n\t\tonFailure() {\n\t\t\tthis.failedPreview = true\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n.template-picker {\n\t&__item {\n\t\tdisplay: flex;\n\t}\n\n\t&__label {\n\t\tdisplay: flex;\n\t\t// Align in the middle of the grid\n\t\talign-items: center;\n\t\tflex: 1 1;\n\t\tflex-direction: column;\n\n\t\t&, * {\n\t\t\tcursor: pointer;\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t&::before {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n\n\t&__preview {\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\t\t// Stretch so all entries are the same width\n\t\tflex: 1 1;\n\t\twidth: var(--width);\n\t\tmin-height: var(--height);\n\t\tmax-height: var(--height);\n\t\tpadding: 0;\n\t\tborder: var(--border) solid var(--color-border);\n\t\tborder-radius: var(--border-radius-large);\n\n\t\tinput:checked + label > & {\n\t\t\tborder-color: var(--color-primary);\n\t\t}\n\n\t\t&--failed {\n\t\t\t// Make sure to properly center fallback icon\n\t\t\tdisplay: flex;\n\t\t}\n\t}\n\n\t&__image {\n\t\tmax-width: 100%;\n\t\tbackground-color: var(--color-main-background);\n\n\t\tobject-fit: cover;\n\t}\n\n\t// Failed preview, fallback to mime icon\n\t&__preview--failed &__image {\n\t\twidth: calc(var(--margin) * 8);\n\t\t// Center mime icon\n\t\tmargin: auto;\n\t\tbackground-color: transparent !important;\n\n\t\tobject-fit: initial;\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\t// also count preview border\n\t\tmax-width: calc(var(--width) + 2*2px);\n\t\tpadding: var(--margin);\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n</style>\n","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst encodeFilePath = function(path) {\n\tconst pathSections = (path.startsWith('/') ? path : `/${path}`).split('/')\n\tlet relativePath = ''\n\tpathSections.forEach((section) => {\n\t\tif (section !== '') {\n\t\t\trelativePath += '/' + encodeURIComponent(section)\n\t\t}\n\t})\n\treturn relativePath\n}\n\n/**\n * Extract dir and name from file path\n *\n * @param {string} path the full path\n * @return {string[]} [dirPath, fileName]\n */\nconst extractFilePaths = function(path) {\n\tconst pathSections = path.split('/')\n\tconst fileName = pathSections[pathSections.length - 1]\n\tconst dirPath = pathSections.slice(0, pathSections.length - 1).join('/')\n\treturn [dirPath, fileName]\n}\n\nexport { encodeFilePath, extractFilePaths }\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=style&index=0&id=440aea22&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=style&index=0&id=440aea22&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TemplatePreview.vue?vue&type=template&id=440aea22&scoped=true&\"\nimport script from \"./TemplatePreview.vue?vue&type=script&lang=js&\"\nexport * from \"./TemplatePreview.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TemplatePreview.vue?vue&type=style&index=0&id=440aea22&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"440aea22\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('li',{staticClass:\"template-picker__item\"},[_c('input',{staticClass:\"radio\",attrs:{\"id\":_vm.id,\"type\":\"radio\",\"name\":\"template-picker\"},domProps:{\"checked\":_vm.checked},on:{\"change\":_vm.onCheck}}),_vm._v(\" \"),_c('label',{staticClass:\"template-picker__label\",attrs:{\"for\":_vm.id}},[_c('div',{staticClass:\"template-picker__preview\",class:_vm.failedPreview ? 'template-picker__preview--failed' : ''},[_c('img',{staticClass:\"template-picker__image\",attrs:{\"src\":_vm.realPreviewUrl,\"alt\":\"\",\"draggable\":\"false\"},on:{\"error\":_vm.onFailure}})]),_vm._v(\" \"),_c('span',{staticClass:\"template-picker__title\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.nameWithoutExt)+\"\\n\\t\\t\")])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<NcModal v-if=\"opened\"\n\t\t:clear-view-delay=\"-1\"\n\t\tclass=\"templates-picker\"\n\t\tsize=\"normal\"\n\t\t@close=\"close\">\n\t\t<form class=\"templates-picker__form\"\n\t\t\t:style=\"style\"\n\t\t\t@submit.prevent.stop=\"onSubmit\">\n\t\t\t<h2>{{ t('files', 'Pick a template for {name}', { name: nameWithoutExt }) }}</h2>\n\n\t\t\t<!-- Templates list -->\n\t\t\t<ul class=\"templates-picker__list\">\n\t\t\t\t<TemplatePreview v-bind=\"emptyTemplate\"\n\t\t\t\t\t:checked=\"checked === emptyTemplate.fileid\"\n\t\t\t\t\t@check=\"onCheck\" />\n\n\t\t\t\t<TemplatePreview v-for=\"template in provider.templates\"\n\t\t\t\t\t:key=\"template.fileid\"\n\t\t\t\t\tv-bind=\"template\"\n\t\t\t\t\t:checked=\"checked === template.fileid\"\n\t\t\t\t\t:ratio=\"provider.ratio\"\n\t\t\t\t\t@check=\"onCheck\" />\n\t\t\t</ul>\n\n\t\t\t<!-- Cancel and submit -->\n\t\t\t<div class=\"templates-picker__buttons\">\n\t\t\t\t<button @click=\"close\">\n\t\t\t\t\t{{ t('files', 'Cancel') }}\n\t\t\t\t</button>\n\t\t\t\t<input type=\"submit\"\n\t\t\t\t\tclass=\"primary\"\n\t\t\t\t\t:value=\"t('files', 'Create')\"\n\t\t\t\t\t:aria-label=\"t('files', 'Create a new file with the selected template')\">\n\t\t\t</div>\n\t\t</form>\n\n\t\t<NcEmptyContent v-if=\"loading\" class=\"templates-picker__loading\" icon=\"icon-loading\">\n\t\t\t{{ t('files', 'Creating file') }}\n\t\t</NcEmptyContent>\n\t</NcModal>\n</template>\n\n<script>\nimport { normalize } from 'path'\nimport { showError } from '@nextcloud/dialogs'\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent'\nimport NcModal from '@nextcloud/vue/dist/Components/NcModal'\n\nimport { getCurrentDirectory } from '../utils/davUtils'\nimport { createFromTemplate, getTemplates } from '../services/Templates'\nimport TemplatePreview from '../components/TemplatePreview'\n\nconst border = 2\nconst margin = 8\nconst width = margin * 20\n\nexport default {\n\tname: 'TemplatePicker',\n\n\tcomponents: {\n\t\tNcEmptyContent,\n\t\tNcModal,\n\t\tTemplatePreview,\n\t},\n\n\tprops: {\n\t\tlogger: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\t// Check empty template by default\n\t\t\tchecked: -1,\n\t\t\tloading: false,\n\t\t\tname: null,\n\t\t\topened: false,\n\t\t\tprovider: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Strip away extension from name\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tnameWithoutExt() {\n\t\t\treturn this.name.indexOf('.') > -1\n\t\t\t\t? this.name.split('.').slice(0, -1).join('.')\n\t\t\t\t: this.name\n\t\t},\n\n\t\temptyTemplate() {\n\t\t\treturn {\n\t\t\t\tbasename: t('files', 'Blank'),\n\t\t\t\tfileid: -1,\n\t\t\t\tfilename: this.t('files', 'Blank'),\n\t\t\t\thasPreview: false,\n\t\t\t\tmime: this.provider?.mimetypes[0] || this.provider?.mimetypes,\n\t\t\t}\n\t\t},\n\n\t\tselectedTemplate() {\n\t\t\treturn this.provider.templates.find(template => template.fileid === this.checked)\n\t\t},\n\n\t\t/**\n\t\t * Style css vars bin,d\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\tstyle() {\n\t\t\treturn {\n\t\t\t\t'--margin': margin + 'px',\n\t\t\t\t'--width': width + 'px',\n\t\t\t\t'--border': border + 'px',\n\t\t\t\t'--fullwidth': width + 2 * margin + 2 * border + 'px',\n\t\t\t\t'--height': this.provider.ratio ? Math.round(width / this.provider.ratio) + 'px' : null,\n\t\t\t}\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Open the picker\n\t\t *\n\t\t * @param {string} name the file name to create\n\t\t * @param {object} provider the template provider picked\n\t\t */\n\t\tasync open(name, provider) {\n\n\t\t\tthis.checked = this.emptyTemplate.fileid\n\t\t\tthis.name = name\n\t\t\tthis.provider = provider\n\n\t\t\tconst templates = await getTemplates()\n\t\t\tconst fetchedProvider = templates.find((fetchedProvider) => fetchedProvider.app === provider.app && fetchedProvider.label === provider.label)\n\t\t\tif (fetchedProvider === null) {\n\t\t\t\tthrow new Error('Failed to match provider in results')\n\t\t\t}\n\t\t\tthis.provider = fetchedProvider\n\n\t\t\t// If there is no templates available, just create an empty file\n\t\t\tif (fetchedProvider.templates.length === 0) {\n\t\t\t\tthis.onSubmit()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Else, open the picker\n\t\t\tthis.opened = true\n\t\t},\n\n\t\t/**\n\t\t * Close the picker and reset variables\n\t\t */\n\t\tclose() {\n\t\t\tthis.checked = this.emptyTemplate.fileid\n\t\t\tthis.loading = false\n\t\t\tthis.name = null\n\t\t\tthis.opened = false\n\t\t\tthis.provider = null\n\t\t},\n\n\t\t/**\n\t\t * Manages the radio template picker change\n\t\t *\n\t\t * @param {number} fileid the selected template file id\n\t\t */\n\t\tonCheck(fileid) {\n\t\t\tthis.checked = fileid\n\t\t},\n\n\t\tasync onSubmit() {\n\t\t\tthis.loading = true\n\t\t\tconst currentDirectory = getCurrentDirectory()\n\t\t\tconst fileList = OCA?.Files?.App?.currentFileList\n\n\t\t\t// If the file doesn't have an extension, add the default one\n\t\t\tif (this.nameWithoutExt === this.name) {\n\t\t\t\tthis.logger.debug('Fixed invalid filename', { name: this.name, extension: this.provider?.extension })\n\t\t\t\tthis.name = this.name + this.provider?.extension\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst fileInfo = await createFromTemplate(\n\t\t\t\t\tnormalize(`${currentDirectory}/${this.name}`),\n\t\t\t\t\tthis.selectedTemplate?.filename,\n\t\t\t\t\tthis.selectedTemplate?.templateType,\n\t\t\t\t)\n\t\t\t\tthis.logger.debug('Created new file', fileInfo)\n\n\t\t\t\t// Fetch FileInfo and model\n\t\t\t\tconst data = await fileList?.addAndFetchFileInfo(this.name).then((status, data) => data)\n\t\t\t\tconst model = new OCA.Files.FileInfoModel(data, {\n\t\t\t\t\tfilesClient: fileList?.filesClient,\n\t\t\t\t})\n\n\t\t\t\t// Run default action\n\t\t\t\tconst fileAction = OCA.Files.fileActions.getDefaultFileAction(fileInfo.mime, 'file', OC.PERMISSION_ALL)\n\t\t\t\tif (fileAction) {\n\t\t\t\t\tfileAction.action(fileInfo.basename, {\n\t\t\t\t\t\t$file: fileList?.findFileEl(this.name),\n\t\t\t\t\t\tdir: currentDirectory,\n\t\t\t\t\t\tfileList,\n\t\t\t\t\t\tfileActions: fileList?.fileActions,\n\t\t\t\t\t\tfileInfoModel: model,\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.close()\n\t\t\t} catch (error) {\n\t\t\t\tthis.logger.error('Error while creating the new file from template')\n\t\t\t\tconsole.error(error)\n\t\t\t\tshowError(this.t('files', 'Unable to create new file from template'))\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.templates-picker {\n\t&__form {\n\t\tpadding: calc(var(--margin) * 2);\n\t\t// Will be handled by the buttons\n\t\tpadding-bottom: 0;\n\n\t\th2 {\n\t\t\ttext-align: center;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: var(--margin) 0 calc(var(--margin) * 2);\n\t\t}\n\t}\n\n\t&__list {\n\t\tdisplay: grid;\n\t\tgrid-gap: calc(var(--margin) * 2);\n\t\tgrid-auto-columns: 1fr;\n\t\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\n\t\tmax-width: calc(var(--fullwidth) * 6);\n\t\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\n\t\t// Make sure all rows are the same height\n\t\tgrid-auto-rows: 1fr;\n\t\t// Center the columns set\n\t\tjustify-content: center;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\tpadding: calc(var(--margin) * 2) var(--margin);\n\t\tposition: sticky;\n\t\tbottom: 0;\n\t\tbackground-image: linear-gradient(0, var(--gradient-main-background));\n\n\t\tbutton, input[type='submit'] {\n\t\t\theight: 44px;\n\t\t}\n\t}\n\n\t// Make sure we're relative for the loading emptycontent on top\n\t::v-deep .modal-container {\n\t\tposition: relative;\n\t}\n\n\t&__loading {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmargin: 0;\n\t\tbackground-color: var(--color-main-background-translucent);\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=style&index=0&id=55dd9121&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=style&index=0&id=55dd9121&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TemplatePicker.vue?vue&type=template&id=55dd9121&scoped=true&\"\nimport script from \"./TemplatePicker.vue?vue&type=script&lang=js&\"\nexport * from \"./TemplatePicker.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TemplatePicker.vue?vue&type=style&index=0&id=55dd9121&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"55dd9121\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.opened)?_c('NcModal',{staticClass:\"templates-picker\",attrs:{\"clear-view-delay\":-1,\"size\":\"normal\"},on:{\"close\":_vm.close}},[_c('form',{staticClass:\"templates-picker__form\",style:(_vm.style),on:{\"submit\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.onSubmit.apply(null, arguments)}}},[_c('h2',[_vm._v(_vm._s(_vm.t('files', 'Pick a template for {name}', { name: _vm.nameWithoutExt })))]),_vm._v(\" \"),_c('ul',{staticClass:\"templates-picker__list\"},[_c('TemplatePreview',_vm._b({attrs:{\"checked\":_vm.checked === _vm.emptyTemplate.fileid},on:{\"check\":_vm.onCheck}},'TemplatePreview',_vm.emptyTemplate,false)),_vm._v(\" \"),_vm._l((_vm.provider.templates),function(template){return _c('TemplatePreview',_vm._b({key:template.fileid,attrs:{\"checked\":_vm.checked === template.fileid,\"ratio\":_vm.provider.ratio},on:{\"check\":_vm.onCheck}},'TemplatePreview',template,false))})],2),_vm._v(\" \"),_c('div',{staticClass:\"templates-picker__buttons\"},[_c('button',{on:{\"click\":_vm.close}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'Cancel'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('input',{staticClass:\"primary\",attrs:{\"type\":\"submit\",\"aria-label\":_vm.t('files', 'Create a new file with the selected template')},domProps:{\"value\":_vm.t('files', 'Create')}})])]),_vm._v(\" \"),(_vm.loading)?_c('NcEmptyContent',{staticClass:\"templates-picker__loading\",attrs:{\"icon\":\"icon-loading\"}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('files', 'Creating file'))+\"\\n\\t\")]):_vm._e()],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\nimport { loadState } from '@nextcloud/initial-state'\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { getCurrentDirectory } from './utils/davUtils'\nimport axios from '@nextcloud/axios'\nimport Vue from 'vue'\n\nimport TemplatePickerView from './views/TemplatePicker'\nimport { showError } from '@nextcloud/dialogs'\n\n// Set up logger\nconst logger = getLoggerBuilder()\n\t.setApp('files')\n\t.detectUser()\n\t.build()\n\n// Add translates functions\nVue.mixin({\n\tmethods: {\n\t\tt,\n\t\tn,\n\t},\n})\n\n// Create document root\nconst TemplatePickerRoot = document.createElement('div')\nTemplatePickerRoot.id = 'template-picker'\ndocument.body.appendChild(TemplatePickerRoot)\n\n// Retrieve and init templates\nlet templates = loadState('files', 'templates', [])\nlet templatesPath = loadState('files', 'templates_path', false)\nlogger.debug('Templates providers', templates)\nlogger.debug('Templates folder', { templatesPath })\n\n// Init vue app\nconst View = Vue.extend(TemplatePickerView)\nconst TemplatePicker = new View({\n\tname: 'TemplatePicker',\n\tpropsData: {\n\t\tlogger,\n\t},\n})\nTemplatePicker.$mount('#template-picker')\n\n// Init template engine after load to make sure it's the last injected entry\nwindow.addEventListener('DOMContentLoaded', function() {\n\tif (!templatesPath) {\n\t\tlogger.debug('Templates folder not initialized')\n\t\tconst initTemplatesPlugin = {\n\t\t\tattach(menu) {\n\t\t\t\t// register the new menu entry\n\t\t\t\tmenu.addMenuEntry({\n\t\t\t\t\tid: 'template-init',\n\t\t\t\t\tdisplayName: t('files', 'Set up templates folder'),\n\t\t\t\t\ttemplateName: t('files', 'Templates'),\n\t\t\t\t\ticonClass: 'icon-template-add',\n\t\t\t\t\tfileType: 'file',\n\t\t\t\t\tactionHandler(name) {\n\t\t\t\t\t\tinitTemplatesFolder(name)\n\t\t\t\t\t\tmenu.removeMenuEntry('template-init')\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t},\n\t\t}\n\t\tOC.Plugins.register('OCA.Files.NewFileMenu', initTemplatesPlugin)\n\t}\n})\n\n// Init template files menu\ntemplates.forEach((provider, index) => {\n\tconst newTemplatePlugin = {\n\t\tattach(menu) {\n\t\t\tconst fileList = menu.fileList\n\n\t\t\t// only attach to main file list, public view is not supported yet\n\t\t\tif (fileList.id !== 'files' && fileList.id !== 'files.public') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// register the new menu entry\n\t\t\tmenu.addMenuEntry({\n\t\t\t\tid: `template-new-${provider.app}-${index}`,\n\t\t\t\tdisplayName: provider.label,\n\t\t\t\ttemplateName: provider.label + provider.extension,\n\t\t\t\ticonClass: provider.iconClass || 'icon-file',\n\t\t\t\tfileType: 'file',\n\t\t\t\tactionHandler(name) {\n\t\t\t\t\tTemplatePicker.open(name, provider)\n\t\t\t\t},\n\t\t\t})\n\t\t},\n\t}\n\tOC.Plugins.register('OCA.Files.NewFileMenu', newTemplatePlugin)\n})\n\n/**\n * Init the template directory\n *\n * @param {string} name the templates folder name\n */\nconst initTemplatesFolder = async function(name) {\n\tconst templatePath = (getCurrentDirectory() + `/${name}`).replace('//', '/')\n\ttry {\n\t\tlogger.debug('Initializing the templates directory', { templatePath })\n\t\tconst response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/path'), {\n\t\t\ttemplatePath,\n\t\t\tcopySystemTemplates: true,\n\t\t})\n\n\t\t// Go to template directory\n\t\tOCA.Files.App.currentFileList.changeDirectory(templatePath, true, true)\n\n\t\ttemplates = response.data.ocs.data.templates\n\t\ttemplatesPath = response.data.ocs.data.template_path\n\t} catch (error) {\n\t\tlogger.error('Unable to initialize the templates directory')\n\t\tshowError(t('files', 'Unable to initialize the templates directory'))\n\t}\n}\n","/*\n * @copyright Copyright (c) 2021 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { subscribe } from '@nextcloud/event-bus'\n\n(function() {\n\n\tconst FilesPlugin = {\n\t\tattach(fileList) {\n\t\t\tsubscribe('nextcloud:unified-search.search', ({ query }) => {\n\t\t\t\tfileList.setFilter(query)\n\t\t\t})\n\t\t\tsubscribe('nextcloud:unified-search.reset', () => {\n\t\t\t\tthis.query = null\n\t\t\t\tfileList.setFilter('')\n\t\t\t})\n\n\t\t},\n\t}\n\n\twindow.OC.Plugins.register('OCA.Files.FileList', FilesPlugin)\n\n})()\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport default getLoggerBuilder()\n\t.setApp('files')\n\t.detectUser()\n\t.build()\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\nimport logger from '../logger.js'\n\n/**\n * Fetch and register the legacy files views\n */\nexport default function() {\n\tconst legacyViews = Object.values(loadState('files', 'navigation', {}))\n\n\tif (legacyViews.length > 0) {\n\t\tlogger.debug('Legacy files views detected. Processing...', legacyViews)\n\t\tlegacyViews.forEach(view => {\n\t\t\tregisterLegacyView(view)\n\t\t\tif (view.sublist) {\n\t\t\t\tview.sublist.forEach(subview => registerLegacyView({ ...subview, parent: view.id }))\n\t\t\t}\n\t\t})\n\t}\n}\n\nconst registerLegacyView = function({ id, name, order, icon, parent, classes = '', expanded, params }) {\n\tOCP.Files.Navigation.register({\n\t\tid,\n\t\tname,\n\t\torder,\n\t\tparams,\n\t\tparent,\n\t\texpanded: expanded === true,\n\t\ticonClass: icon ? `icon-${icon}` : 'nav-icon-' + id,\n\t\tlegacy: true,\n\t\tsticky: classes.includes('pinned'),\n\t})\n}\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport type Node from '@nextcloud/files/dist/files/node'\nimport isSvg from 'is-svg'\n\nimport logger from '../logger'\n\nexport interface Column {\n\t/** Unique column ID */\n\tid: string\n\t/** Translated column title */\n\ttitle: string\n\t/** Property key from Node main or additional attributes.\n\tWill be used if no custom sort function is provided.\n\tSorting will be done by localCompare */\n\tproperty: string\n\t/** Special function used to sort Nodes between them */\n\tsortFunction?: (nodeA: Node, nodeB: Node) => number;\n\t/** Custom summary of the column to display at the end of the list.\n\t Will not be displayed if nothing is provided */\n\tsummary?: (node: Node[]) => string\n}\n\nexport interface Navigation {\n\t/** Unique view ID */\n\tid: string\n\t/** Translated view name */\n\tname: string\n\t/** Method return the content of the provided path */\n\tgetFiles: (path: string) => Node[]\n\t/** The view icon as an inline svg */\n\ticon: string\n\t/** The view order */\n\torder: number\n\t/** This view column(s). Name and actions are\n\tby default always included */\n\tcolumns?: Column[]\n\t/** The empty view element to render your empty content into */\n\temptyView?: (div: HTMLDivElement) => void\n\t/** The parent unique ID */\n\tparent?: string\n\t/** This view is sticky (sent at the bottom) */\n\tsticky?: boolean\n\t/** This view has children and is expanded or not */\n\texpanded?: boolean\n\n\t/**\n\t * This view is sticky a legacy view.\n\t * Here until all the views are migrated to Vue.\n\t * @deprecated It will be removed in a near future\n\t */\n\tlegacy?: boolean\n\t/**\n\t * An icon class. \n\t * @deprecated It will be removed in a near future\n\t */\n\ticonClass?: string\n}\n\nexport default class {\n\n\tprivate _views: Navigation[] = []\n\tprivate _currentView: Navigation | null = null\n\n\tconstructor() {\n\t\tlogger.debug('Navigation service initialized')\n\t}\n\n\tregister(view: Navigation) {\n\t\ttry {\n\t\t\tisValidNavigation(view)\n\t\t\tisUniqueNavigation(view, this._views)\n\t\t} catch (e) {\n\t\t\tif (e instanceof Error) {\n\t\t\t\tlogger.error(e.message, { view })\n\t\t\t}\n\t\t\tthrow e\n\t\t}\n\n\t\tif (view.legacy) {\n\t\t\tlogger.warn('Legacy view detected, please migrate to Vue')\n\t\t}\n\n\t\tif (view.iconClass) {\n\t\t\tview.legacy = true\n\t\t}\n\n\t\tthis._views.push(view)\n\t}\n\n\tget views(): Navigation[] {\n\t\treturn this._views\n\t}\n\n\tsetActive(view: Navigation | null) {\n\t\tthis._currentView = view\n\t}\n\n\tget active(): Navigation | null {\n\t\treturn this._currentView\n\t}\n\n}\n\n/**\n * Make sure the given view is unique\n * and not already registered.\n */\nconst isUniqueNavigation = function(view: Navigation, views: Navigation[]): boolean {\n\tif (views.find(search => search.id === view.id)) {\n\t\tthrow new Error(`Navigation id ${view.id} is already registered`)\n\t}\n\treturn true\n}\n\n/**\n * Typescript cannot validate an interface.\n * Please keep in sync with the Navigation interface requirements.\n */\nconst isValidNavigation = function(view: Navigation): boolean {\n\tif (!view.id || typeof view.id !== 'string') {\n\t\tthrow new Error('Navigation id is required and must be a string')\n\t}\n\n\tif (!view.name || typeof view.name !== 'string') {\n\t\tthrow new Error('Navigation name is required and must be a string')\n\t}\n\n\t/**\n\t * Legacy handle their content and icon differently\n\t * TODO: remove when support for legacy views is removed\n\t */\n\tif (!view.legacy) {\n\t\tif (!view.getFiles || typeof view.getFiles !== 'function') {\n\t\t\tthrow new Error('Navigation getFiles is required and must be a function')\n\t\t}\n\n\t\tif (!view.icon || typeof view.icon !== 'string' || !isSvg(view.icon)) {\n\t\t\tthrow new Error('Navigation icon is required and must be a valid svg string')\n\t\t}\n\t}\n\n\tif (!('order' in view) || typeof view.order !== 'number') {\n\t\tthrow new Error('Navigation order is required and must be a number')\n\t}\n\n\t// Optional properties\n\tif (view.columns) {\n\t\tview.columns.forEach(isValidColumn)\n\t}\n\n\tif (view.emptyView && typeof view.emptyView !== 'function') {\n\t\tthrow new Error('Navigation emptyView must be a function')\n\t}\n\n\tif (view.parent && typeof view.parent !== 'string') {\n\t\tthrow new Error('Navigation parent must be a string')\n\t}\n\n\tif ('sticky' in view && typeof view.sticky !== 'boolean') {\n\t\tthrow new Error('Navigation sticky must be a boolean')\n\t}\n\n\tif ('expanded' in view && typeof view.expanded !== 'boolean') {\n\t\tthrow new Error('Navigation expanded must be a boolean')\n\t}\n\n\treturn true\n}\n\n/**\n * Typescript cannot validate an interface.\n * Please keep in sync with the Column interface requirements.\n */\nconst isValidColumn = function(column: Column): boolean {\n\tif (!column.id || typeof column.id !== 'string') {\n\t\tthrow new Error('Column id is required')\n\t}\n\n\tif (!column.title || typeof column.title !== 'string') {\n\t\tthrow new Error('Column title is required')\n\t}\n\n\tif (!column.property || typeof column.property !== 'string') {\n\t\tthrow new Error('Column property is required')\n\t}\n\n\t// Optional properties\n\tif (column.sortFunction && typeof column.sortFunction !== 'function') {\n\t\tthrow new Error('Column sortFunction must be a function')\n\t}\n\n\tif (column.summary && typeof column.summary !== 'function') {\n\t\tthrow new Error('Column summary must be a function')\n\t}\n\n\treturn true\n}\n","<template>\n\t<NcAppNavigationItem v-if=\"storageStats\"\n\t\t:aria-label=\"t('files', 'Storage informations')\"\n\t\t:class=\"{ 'app-navigation-entry__settings-quota--not-unlimited': storageStats.quota >= 0}\"\n\t\t:loading=\"loadingStorageStats\"\n\t\t:name=\"storageStatsTitle\"\n\t\t:title=\"storageStatsTooltip\"\n\t\tclass=\"app-navigation-entry__settings-quota\"\n\t\tdata-cy-files-navigation-settings-quota\n\t\t@click.stop.prevent=\"debounceUpdateStorageStats\">\n\t\t<ChartPie slot=\"icon\" :size=\"20\" />\n\n\t\t<!-- Progress bar -->\n\t\t<NcProgressBar v-if=\"storageStats.quota >= 0\"\n\t\t\tslot=\"extra\"\n\t\t\t:error=\"storageStats.relative > 80\"\n\t\t\t:value=\"Math.min(storageStats.relative, 100)\" />\n\t</NcAppNavigationItem>\n</template>\n\n<script>\nimport { formatFileSize } from '@nextcloud/files'\nimport { generateUrl } from '@nextcloud/router'\nimport { loadState } from '@nextcloud/initial-state'\nimport { showError } from '@nextcloud/dialogs'\nimport { debounce, throttle } from 'throttle-debounce'\nimport { translate } from '@nextcloud/l10n'\nimport axios from '@nextcloud/axios'\nimport ChartPie from 'vue-material-design-icons/ChartPie.vue'\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\nimport NcProgressBar from '@nextcloud/vue/dist/Components/NcProgressBar.js'\n\nimport logger from '../logger.js'\nimport { subscribe } from '@nextcloud/event-bus'\n\nexport default {\n\tname: 'NavigationQuota',\n\n\tcomponents: {\n\t\tChartPie,\n\t\tNcAppNavigationItem,\n\t\tNcProgressBar,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloadingStorageStats: false,\n\t\t\tstorageStats: loadState('files', 'storageStats', null),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tstorageStatsTitle() {\n\t\t\tconst usedQuotaByte = formatFileSize(this.storageStats?.used)\n\t\t\tconst quotaByte = formatFileSize(this.storageStats?.quota)\n\n\t\t\t// If no quota set\n\t\t\tif (this.storageStats?.quota < 0) {\n\t\t\t\treturn this.t('files', '{usedQuotaByte} used', { usedQuotaByte })\n\t\t\t}\n\n\t\t\treturn this.t('files', '{used} of {quota} used', {\n\t\t\t\tused: usedQuotaByte,\n\t\t\t\tquota: quotaByte,\n\t\t\t})\n\t\t},\n\t\tstorageStatsTooltip() {\n\t\t\tif (!this.storageStats.relative) {\n\t\t\t\treturn ''\n\t\t\t}\n\n\t\t\treturn this.t('files', '{relative}% used', this.storageStats)\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\t/**\n\t\t * Update storage stats every minute\n\t\t * TODO: remove when all views are migrated to Vue\n\t\t */\n\t\tsetInterval(this.throttleUpdateStorageStats, 60 * 1000)\n\n\t\tsubscribe('files:file:created', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:file:deleted', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:file:moved', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:file:updated', this.throttleUpdateStorageStats)\n\n\t\tsubscribe('files:folder:created', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:folder:deleted', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:folder:moved', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:folder:updated', this.throttleUpdateStorageStats)\n\t},\n\n\tmethods: {\n\t\t// From user input\n\t\tdebounceUpdateStorageStats: debounce(200, function(event) {\n\t\t\tthis.updateStorageStats(event)\n\t\t}),\n\t\t// From interval or event bus\n\t\tthrottleUpdateStorageStats: throttle(1000, function(event) {\n\t\t\tthis.updateStorageStats(event)\n\t\t}),\n\n\t\t/**\n\t\t * Update the storage stats\n\t\t * Throttled at max 1 refresh per minute\n\t\t *\n\t\t * @param {Event} [event = null] if user interaction\n\t\t */\n\t\tasync updateStorageStats(event = null) {\n\t\t\tif (this.loadingStorageStats) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.loadingStorageStats = true\n\t\t\ttry {\n\t\t\t\tconst response = await axios.get(generateUrl('/apps/files/api/v1/stats'))\n\t\t\t\tif (!response?.data?.data) {\n\t\t\t\t\tthrow new Error('Invalid storage stats')\n\t\t\t\t}\n\t\t\t\tthis.storageStats = response.data.data\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Could not refresh storage stats', { error })\n\t\t\t\t// Only show to the user if it was manually triggered\n\t\t\t\tif (event) {\n\t\t\t\t\tshowError(t('files', 'Could not refresh storage stats'))\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tthis.loadingStorageStats = false\n\t\t\t}\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// User storage stats display\n.app-navigation-entry__settings-quota {\n\t// Align title with progress and icon\n\t&--not-unlimited::v-deep .app-navigation-entry__title {\n\t\tmargin-top: -4px;\n\t}\n\n\tprogress {\n\t\tposition: absolute;\n\t\tbottom: 10px;\n\t\tmargin-left: 44px;\n\t\twidth: calc(100% - 44px - 22px);\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=style&index=0&id=26c061ec&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=style&index=0&id=26c061ec&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./NavigationQuota.vue?vue&type=template&id=26c061ec&scoped=true&\"\nimport script from \"./NavigationQuota.vue?vue&type=script&lang=js&\"\nexport * from \"./NavigationQuota.vue?vue&type=script&lang=js&\"\nimport style0 from \"./NavigationQuota.vue?vue&type=style&index=0&id=26c061ec&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"26c061ec\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.storageStats)?_c('NcAppNavigationItem',{staticClass:\"app-navigation-entry__settings-quota\",class:{ 'app-navigation-entry__settings-quota--not-unlimited': _vm.storageStats.quota >= 0},attrs:{\"aria-label\":_vm.t('files', 'Storage informations'),\"loading\":_vm.loadingStorageStats,\"name\":_vm.storageStatsTitle,\"title\":_vm.storageStatsTooltip,\"data-cy-files-navigation-settings-quota\":\"\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.debounceUpdateStorageStats.apply(null, arguments)}}},[_c('ChartPie',{attrs:{\"slot\":\"icon\",\"size\":20},slot:\"icon\"}),_vm._v(\" \"),(_vm.storageStats.quota >= 0)?_c('NcProgressBar',{attrs:{\"slot\":\"extra\",\"error\":_vm.storageStats.relative > 80,\"value\":Math.min(_vm.storageStats.relative, 100)},slot:\"extra\"}):_vm._e()],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Setting.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Setting.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div />\n</template>\n<script>\nexport default {\n\tname: 'Setting',\n\tprops: {\n\t\tel: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.$el.appendChild(this.el())\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./Setting.vue?vue&type=template&id=03406edc&\"\nimport script from \"./Setting.vue?vue&type=script&lang=js&\"\nexport * from \"./Setting.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div')\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<NcAppSettingsDialog :open=\"open\"\n\t\t:show-navigation=\"true\"\n\t\t:title=\"t('files', 'Files settings')\"\n\t\t@update:open=\"onClose\">\n\t\t<!-- Settings API-->\n\t\t<NcAppSettingsSection id=\"settings\" :title=\"t('files', 'Files settings')\">\n\t\t\t<NcCheckboxRadioSwitch :checked.sync=\"show_hidden\"\n\t\t\t\t@update:checked=\"setConfig('show_hidden', $event)\">\n\t\t\t\t{{ t('files', 'Show hidden files') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t<NcCheckboxRadioSwitch :checked.sync=\"crop_image_previews\"\n\t\t\t\t@update:checked=\"setConfig('crop_image_previews', $event)\">\n\t\t\t\t{{ t('files', 'Crop image previews') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t</NcAppSettingsSection>\n\n\t\t<!-- Settings API-->\n\t\t<NcAppSettingsSection v-if=\"settings.length !== 0\"\n\t\t\tid=\"more-settings\"\n\t\t\t:title=\"t('files', 'Additional settings')\">\n\t\t\t<template v-for=\"setting in settings\">\n\t\t\t\t<Setting :key=\"setting.name\" :el=\"setting.el\" />\n\t\t\t</template>\n\t\t</NcAppSettingsSection>\n\n\t\t<!-- Webdav URL-->\n\t\t<NcAppSettingsSection id=\"webdav\" :title=\"t('files', 'Webdav')\">\n\t\t\t<NcInputField id=\"webdav-url-input\"\n\t\t\t\t:show-trailing-button=\"true\"\n\t\t\t\t:success=\"webdavUrlCopied\"\n\t\t\t\t:trailing-button-label=\"t('files', 'Copy to clipboard')\"\n\t\t\t\t:value=\"webdavUrl\"\n\t\t\t\treadonly=\"readonly\"\n\t\t\t\ttype=\"url\"\n\t\t\t\t@focus=\"$event.target.select()\"\n\t\t\t\t@trailing-button-click=\"copyCloudId\">\n\t\t\t\t<template #trailing-button-icon>\n\t\t\t\t\t<Clipboard :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcInputField>\n\t\t\t<em>\n\t\t\t\t<a :href=\"webdavDocs\" target=\"_blank\" rel=\"noreferrer noopener\">\n\t\t\t\t\t{{ t('files', 'Use this address to access your Files via WebDAV') }} ↗\n\t\t\t\t</a>\n\t\t\t</em>\n\t\t</NcAppSettingsSection>\n\t</NcAppSettingsDialog>\n</template>\n\n<script>\nimport NcAppSettingsDialog from '@nextcloud/vue/dist/Components/NcAppSettingsDialog.js'\nimport NcAppSettingsSection from '@nextcloud/vue/dist/Components/NcAppSettingsSection.js'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'\nimport Clipboard from 'vue-material-design-icons/Clipboard.vue'\nimport NcInputField from '@nextcloud/vue/dist/Components/NcInputField'\nimport Setting from '../components/Setting.vue'\n\nimport { emit } from '@nextcloud/event-bus'\nimport { generateRemoteUrl, generateUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { loadState } from '@nextcloud/initial-state'\nimport { showError, showSuccess } from '@nextcloud/dialogs'\nimport { translate } from '@nextcloud/l10n'\nimport axios from '@nextcloud/axios'\n\nconst userConfig = loadState('files', 'config', {\n\tshow_hidden: false,\n\tcrop_image_previews: true,\n})\n\nexport default {\n\tname: 'Settings',\n\tcomponents: {\n\t\tClipboard,\n\t\tNcAppSettingsDialog,\n\t\tNcAppSettingsSection,\n\t\tNcCheckboxRadioSwitch,\n\t\tNcInputField,\n\t\tSetting,\n\t},\n\n\tprops: {\n\t\topen: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\n\t\t\t...userConfig,\n\n\t\t\t// Settings API\n\t\t\tsettings: window.OCA?.Files?.Settings?.settings || [],\n\n\t\t\t// Webdav infos\n\t\t\twebdavUrl: generateRemoteUrl('dav/files/' + encodeURIComponent(getCurrentUser()?.uid)),\n\t\t\twebdavDocs: 'https://docs.nextcloud.com/server/stable/go.php?to=user-webdav',\n\t\t\twebdavUrlCopied: false,\n\t\t}\n\t},\n\n\tbeforeMount() {\n\t\t// Update the settings API entries state\n\t\tthis.settings.forEach(setting => setting.open())\n\t},\n\n\tbeforeDestroy() {\n\t\t// Update the settings API entries state\n\t\tthis.settings.forEach(setting => setting.close())\n\t},\n\n\tmethods: {\n\t\tonClose() {\n\t\t\tthis.$emit('close')\n\t\t},\n\n\t\tsetConfig(key, value) {\n\t\t\temit('files:config:updated', { key, value })\n\t\t\taxios.post(generateUrl('/apps/files/api/v1/config/' + key), {\n\t\t\t\tvalue,\n\t\t\t})\n\t\t},\n\n\t\tasync copyCloudId() {\n\t\t\tdocument.querySelector('input#webdav-url-input').select()\n\n\t\t\tif (!navigator.clipboard) {\n\t\t\t\t// Clipboard API not available\n\t\t\t\tshowError(t('files', 'Clipboard is not available'))\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tawait navigator.clipboard.writeText(this.webdavUrl)\n\t\t\tthis.webdavUrlCopied = true\n\t\t\tshowSuccess(t('files', 'Webdav URL copied to clipboard'))\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.webdavUrlCopied = false\n\t\t\t}, 5000)\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Settings.vue?vue&type=template&id=5313d0ff&scoped=true&\"\nimport script from \"./Settings.vue?vue&type=script&lang=js&\"\nexport * from \"./Settings.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5313d0ff\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcAppSettingsDialog',{attrs:{\"open\":_vm.open,\"show-navigation\":true,\"title\":_vm.t('files', 'Files settings')},on:{\"update:open\":_vm.onClose}},[_c('NcAppSettingsSection',{attrs:{\"id\":\"settings\",\"title\":_vm.t('files', 'Files settings')}},[_c('NcCheckboxRadioSwitch',{attrs:{\"checked\":_vm.show_hidden},on:{\"update:checked\":[function($event){_vm.show_hidden=$event},function($event){return _vm.setConfig('show_hidden', $event)}]}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files', 'Show hidden files'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('NcCheckboxRadioSwitch',{attrs:{\"checked\":_vm.crop_image_previews},on:{\"update:checked\":[function($event){_vm.crop_image_previews=$event},function($event){return _vm.setConfig('crop_image_previews', $event)}]}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files', 'Crop image previews'))+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(_vm.settings.length !== 0)?_c('NcAppSettingsSection',{attrs:{\"id\":\"more-settings\",\"title\":_vm.t('files', 'Additional settings')}},[_vm._l((_vm.settings),function(setting){return [_c('Setting',{key:setting.name,attrs:{\"el\":setting.el}})]})],2):_vm._e(),_vm._v(\" \"),_c('NcAppSettingsSection',{attrs:{\"id\":\"webdav\",\"title\":_vm.t('files', 'Webdav')}},[_c('NcInputField',{attrs:{\"id\":\"webdav-url-input\",\"show-trailing-button\":true,\"success\":_vm.webdavUrlCopied,\"trailing-button-label\":_vm.t('files', 'Copy to clipboard'),\"value\":_vm.webdavUrl,\"readonly\":\"readonly\",\"type\":\"url\"},on:{\"focus\":function($event){return $event.target.select()},\"trailing-button-click\":_vm.copyCloudId},scopedSlots:_vm._u([{key:\"trailing-button-icon\",fn:function(){return [_c('Clipboard',{attrs:{\"size\":20}})]},proxy:true}])}),_vm._v(\" \"),_c('em',[_c('a',{attrs:{\"href\":_vm.webdavDocs,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'Use this address to access your Files via WebDAV'))+\" ↗\\n\\t\\t\\t\")])])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<NcAppNavigation data-cy-files-navigation>\n\t\t<template #list>\n\t\t\t<NcAppNavigationItem v-for=\"view in parentViews\"\n\t\t\t\t:key=\"view.id\"\n\t\t\t\t:allow-collapse=\"true\"\n\t\t\t\t:data-cy-files-navigation-item=\"view.id\"\n\t\t\t\t:icon=\"view.iconClass\"\n\t\t\t\t:open=\"view.expanded\"\n\t\t\t\t:pinned=\"view.sticky\"\n\t\t\t\t:title=\"view.name\"\n\t\t\t\t:to=\"generateToNavigation(view)\"\n\t\t\t\t@update:open=\"onToggleExpand(view)\">\n\t\t\t\t<NcAppNavigationItem v-for=\"child in childViews[view.id]\"\n\t\t\t\t\t:key=\"child.id\"\n\t\t\t\t\t:data-cy-files-navigation-item=\"child.id\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t:icon=\"child.iconClass\"\n\t\t\t\t\t:title=\"child.name\"\n\t\t\t\t\t:to=\"generateToNavigation(child)\" />\n\t\t\t</NcAppNavigationItem>\n\t\t</template>\n\n\t\t<!-- Non-scrollable navigation bottom elements -->\n\t\t<template #footer>\n\t\t\t<ul class=\"app-navigation-entry__settings\">\n\t\t\t\t<!-- User storage usage statistics -->\n\t\t\t\t<NavigationQuota />\n\n\t\t\t\t<!-- Files settings modal toggle-->\n\t\t\t\t<NcAppNavigationItem :aria-label=\"t('files', 'Open the files app settings')\"\n\t\t\t\t\t:title=\"t('files', 'Files settings')\"\n\t\t\t\t\tdata-cy-files-navigation-settings-button\n\t\t\t\t\t@click.prevent.stop=\"openSettings\">\n\t\t\t\t\t<Cog slot=\"icon\" :size=\"20\" />\n\t\t\t\t</NcAppNavigationItem>\n\t\t\t</ul>\n\t\t</template>\n\n\t\t<!-- Settings modal-->\n\t\t<SettingsModal :open=\"settingsOpened\"\n\t\t\tdata-cy-files-navigation-settings\n\t\t\t@close=\"onSettingsClose\" />\n\t</NcAppNavigation>\n</template>\n\n<script>\nimport { emit, subscribe } from '@nextcloud/event-bus'\nimport { generateUrl } from '@nextcloud/router'\nimport { translate } from '@nextcloud/l10n'\n\nimport axios from '@nextcloud/axios'\nimport Cog from 'vue-material-design-icons/Cog.vue'\nimport NcAppNavigation from '@nextcloud/vue/dist/Components/NcAppNavigation.js'\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\n\nimport logger from '../logger.js'\nimport Navigation from '../services/Navigation.ts'\nimport NavigationQuota from '../components/NavigationQuota.vue'\nimport SettingsModal from './Settings.vue'\n\nexport default {\n\tname: 'Navigation',\n\n\tcomponents: {\n\t\tCog,\n\t\tNcAppNavigation,\n\t\tNcAppNavigationItem,\n\t\tSettingsModal,\n\t\tNavigationQuota,\n\t},\n\n\tprops: {\n\t\t// eslint-disable-next-line vue/prop-name-casing\n\t\tNavigation: {\n\t\t\ttype: Navigation,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tsettingsOpened: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcurrentViewId() {\n\t\t\treturn this.$route?.params?.view || 'files'\n\t\t},\n\n\t\t/** @return {Navigation} */\n\t\tcurrentView() {\n\t\t\treturn this.views.find(view => view.id === this.currentViewId)\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tviews() {\n\t\t\treturn this.Navigation.views\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tparentViews() {\n\t\t\treturn this.views\n\t\t\t\t// filter child views\n\t\t\t\t.filter(view => !view.parent)\n\t\t\t\t// sort views by order\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\treturn a.order - b.order\n\t\t\t\t})\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tchildViews() {\n\t\t\treturn this.views\n\t\t\t\t// filter parent views\n\t\t\t\t.filter(view => !!view.parent)\n\t\t\t\t// create a map of parents and their children\n\t\t\t\t.reduce((list, view) => {\n\t\t\t\t\tlist[view.parent] = [...(list[view.parent] || []), view]\n\t\t\t\t\t// Sort children by order\n\t\t\t\t\tlist[view.parent].sort((a, b) => {\n\t\t\t\t\t\treturn a.order - b.order\n\t\t\t\t\t})\n\t\t\t\t\treturn list\n\t\t\t\t}, {})\n\t\t},\n\t},\n\n\twatch: {\n\t\tcurrentView(view, oldView) {\n\t\t\tlogger.debug('View changed', { id: view.id, view })\n\t\t\tthis.showView(view, oldView)\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\tif (this.currentView) {\n\t\t\tlogger.debug('Navigation mounted. Showing requested view', { view: this.currentView })\n\t\t\tthis.showView(this.currentView)\n\t\t}\n\n\t\tsubscribe('files:legacy-navigation:changed', this.onLegacyNavigationChanged)\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * @param {Navigation} view the new active view\n\t\t * @param {Navigation} oldView the old active view\n\t\t */\n\t\tshowView(view, oldView) {\n\t\t\t// Closing any opened sidebar\n\t\t\twindow?.OCA?.Files?.Sidebar?.close?.()\n\n\t\t\tif (view.legacy) {\n\t\t\t\tconst newAppContent = document.querySelector('#app-content #app-content-' + this.currentView.id + '.viewcontainer')\n\t\t\t\tdocument.querySelectorAll('#app-content .viewcontainer').forEach(el => {\n\t\t\t\t\tel.classList.add('hidden')\n\t\t\t\t})\n\t\t\t\tnewAppContent.classList.remove('hidden')\n\n\t\t\t\t// Triggering legacy navigation events\n\t\t\t\tconst { dir = '/' } = OC.Util.History.parseUrlQuery()\n\t\t\t\tconst params = { itemId: view.id, dir }\n\n\t\t\t\tlogger.debug('Triggering legacy navigation event', params)\n\t\t\t\twindow.jQuery(newAppContent).trigger(new window.jQuery.Event('show', params))\n\t\t\t\twindow.jQuery(newAppContent).trigger(new window.jQuery.Event('urlChanged', params))\n\n\t\t\t}\n\n\t\t\tthis.Navigation.setActive(view)\n\t\t\temit('files:navigation:changed', view)\n\t\t},\n\n\t\t/**\n\t\t * Coming from the legacy files app.\n\t\t * TODO: remove when all views are migrated.\n\t\t *\n\t\t * @param {Navigation} view the new active view\n\t\t */\n\t\tonLegacyNavigationChanged({ id } = { id: 'files' }) {\n\t\t\tconst view = this.Navigation.views.find(view => view.id === id)\n\t\t\tif (view && view.legacy && view.id !== this.currentView.id) {\n\t\t\t\t// Force update the current route as the request comes\n\t\t\t\t// from the legacy files app router\n\t\t\t\tthis.$router.replace({ ...this.$route, params: { view: view.id } })\n\t\t\t\tthis.Navigation.setActive(view)\n\t\t\t\tthis.showView(view)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Expand/collapse a a view with children and permanently\n\t\t * save this setting in the server.\n\t\t *\n\t\t * @param {Navigation} view the view to toggle\n\t\t */\n\t\tonToggleExpand(view) {\n\t\t\t// Invert state\n\t\t\tview.expanded = !view.expanded\n\t\t\taxios.post(generateUrl(`/apps/files/api/v1/toggleShowFolder/${view.id}`), { show: view.expanded })\n\t\t},\n\n\t\t/**\n\t\t * Generate the route to a view\n\t\t *\n\t\t * @param {Navigation} view the view to toggle\n\t\t */\n\t\tgenerateToNavigation(view) {\n\t\t\tif (view.params) {\n\t\t\t\tconst { dir, fileid } = view.params\n\t\t\t\treturn { name: 'filelist', params: view.params, query: { dir, fileid } }\n\t\t\t}\n\t\t\treturn { name: 'filelist', params: { view: view.id } }\n\t\t},\n\n\t\t/**\n\t\t * Open the settings modal\n\t\t */\n\t\topenSettings() {\n\t\t\tthis.settingsOpened = true\n\t\t},\n\n\t\t/**\n\t\t * Close the settings modal\n\t\t */\n\t\tonSettingsClose() {\n\t\t\tthis.settingsOpened = false\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n// TODO: remove when https://github.com/nextcloud/nextcloud-vue/pull/3539 is in\n.app-navigation::v-deep .app-navigation-entry-icon {\n\tbackground-repeat: no-repeat;\n\tbackground-position: center;\n}\n\n.app-navigation > ul.app-navigation__list {\n\t// Use flex gap value for more elegant spacing\n\tpadding-bottom: var(--default-grid-baseline, 4px);\n}\n\n.app-navigation-entry__settings {\n\theight: auto !important;\n\toverflow: hidden !important;\n\tpadding-top: 0 !important;\n\t// Prevent shrinking or growing\n\tflex: 0 0 auto;\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=style&index=0&id=83bb0f06&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=style&index=0&id=83bb0f06&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Navigation.vue?vue&type=template&id=83bb0f06&scoped=true&\"\nimport script from \"./Navigation.vue?vue&type=script&lang=js&\"\nexport * from \"./Navigation.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Navigation.vue?vue&type=style&index=0&id=83bb0f06&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"83bb0f06\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcAppNavigation',{attrs:{\"data-cy-files-navigation\":\"\"},scopedSlots:_vm._u([{key:\"list\",fn:function(){return _vm._l((_vm.parentViews),function(view){return _c('NcAppNavigationItem',{key:view.id,attrs:{\"allow-collapse\":true,\"data-cy-files-navigation-item\":view.id,\"icon\":view.iconClass,\"open\":view.expanded,\"pinned\":view.sticky,\"title\":view.name,\"to\":_vm.generateToNavigation(view)},on:{\"update:open\":function($event){return _vm.onToggleExpand(view)}}},_vm._l((_vm.childViews[view.id]),function(child){return _c('NcAppNavigationItem',{key:child.id,attrs:{\"data-cy-files-navigation-item\":child.id,\"exact\":true,\"icon\":child.iconClass,\"title\":child.name,\"to\":_vm.generateToNavigation(child)}})}),1)})},proxy:true},{key:\"footer\",fn:function(){return [_c('ul',{staticClass:\"app-navigation-entry__settings\"},[_c('NavigationQuota'),_vm._v(\" \"),_c('NcAppNavigationItem',{attrs:{\"aria-label\":_vm.t('files', 'Open the files app settings'),\"title\":_vm.t('files', 'Files settings'),\"data-cy-files-navigation-settings-button\":\"\"},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.openSettings.apply(null, arguments)}}},[_c('Cog',{attrs:{\"slot\":\"icon\",\"size\":20},slot:\"icon\"})],1)],1)]},proxy:true}])},[_vm._v(\" \"),_vm._v(\" \"),_c('SettingsModal',{attrs:{\"open\":_vm.settingsOpened,\"data-cy-files-navigation-settings\":\"\"},on:{\"close\":_vm.onSettingsClose}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author Gary Kim <gary@garykim.dev>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class Settings {\n\n\t_settings\n\n\tconstructor() {\n\t\tthis._settings = []\n\t\tconsole.debug('OCA.Files.Settings initialized')\n\t}\n\n\t/**\n\t * Register a new setting\n\t *\n\t * @since 19.0.0\n\t * @param {OCA.Files.Settings.Setting} view element to add to settings\n\t * @return {boolean} whether registering was successful\n\t */\n\tregister(view) {\n\t\tif (this._settings.filter(e => e.name === view.name).length > 0) {\n\t\t\tconsole.error('A setting with the same name is already registered')\n\t\t\treturn false\n\t\t}\n\t\tthis._settings.push(view)\n\t\treturn true\n\t}\n\n\t/**\n\t * All settings elements\n\t *\n\t * @return {OCA.Files.Settings.Setting[]} All currently registered settings\n\t */\n\tget settings() {\n\t\treturn this._settings\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Gary Kim <gary@garykim.dev>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class Setting {\n\n\t_close\n\t_el\n\t_name\n\t_open\n\n\t/**\n\t * Create a new files app setting\n\t *\n\t * @since 19.0.0\n\t * @param {string} name the name of this setting\n\t * @param {object} component the component\n\t * @param {Function} component.el function that returns an unmounted dom element to be added\n\t * @param {Function} [component.open] callback for when setting is added\n\t * @param {Function} [component.close] callback for when setting is closed\n\t */\n\tconstructor(name, { el, open, close }) {\n\t\tthis._name = name\n\t\tthis._el = el\n\t\tthis._open = open\n\t\tthis._close = close\n\n\t\tif (typeof this._open !== 'function') {\n\t\t\tthis._open = () => {}\n\t\t}\n\n\t\tif (typeof this._close !== 'function') {\n\t\t\tthis._close = () => {}\n\t\t}\n\t}\n\n\tget name() {\n\t\treturn this._name\n\t}\n\n\tget el() {\n\t\treturn this._el\n\t}\n\n\tget open() {\n\t\treturn this._open\n\t}\n\n\tget close() {\n\t\treturn this._close\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Vue from 'vue'\nimport Router from 'vue-router'\nimport { generateUrl } from '@nextcloud/router'\nimport { stringify } from 'query-string'\n\nVue.use(Router)\n\nconst router = new Router({\n\tmode: 'history',\n\n\t// if index.php is in the url AND we got this far, then it's working:\n\t// let's keep using index.php in the url\n\tbase: generateUrl('/apps/files', ''),\n\tlinkActiveClass: 'active',\n\n\troutes: [\n\t\t{\n\t\t\tpath: '/',\n\t\t\t// Pretending we're using the default view\n\t\t\talias: '/files',\n\t\t},\n\t\t{\n\t\t\tpath: '/:view/:fileid?',\n\t\t\tname: 'filelist',\n\t\t\tprops: true,\n\t\t},\n\t],\n\n\t// Custom stringifyQuery to prevent encoding of slashes in the url\n\tstringifyQuery(query) {\n\t\tconst result = stringify(query).replace(/%2F/gmi, '/')\n\t\treturn result ? ('?' + result) : ''\n\t},\n})\n\nexport default router\n","import './templates.js'\nimport './legacy/filelistSearch.js'\nimport processLegacyFilesViews from './legacy/navigationMapper.js'\n\nimport Vue from 'vue'\nimport NavigationService from './services/Navigation.ts'\nimport NavigationView from './views/Navigation.vue'\n\nimport SettingsService from './services/Settings.js'\nimport SettingsModel from './models/Setting.js'\n\nimport router from './router/router.js'\n\n// Init private and public Files namespace\nwindow.OCA.Files = window.OCA.Files ?? {}\nwindow.OCP.Files = window.OCP.Files ?? {}\n\n// Init Navigation Service\nconst Navigation = new NavigationService()\nObject.assign(window.OCP.Files, { Navigation })\n\n// Init Files App Settings Service\nconst Settings = new SettingsService()\nObject.assign(window.OCA.Files, { Settings })\nObject.assign(window.OCA.Files.Settings, { Setting: SettingsModel })\n\n// Init Navigation View\nconst View = Vue.extend(NavigationView)\nconst FilesNavigationRoot = new View({\n\tname: 'FilesNavigationRoot',\n\tpropsData: {\n\t\tNavigation,\n\t},\n\trouter,\n})\nFilesNavigationRoot.$mount('#app-navigation-files')\n\n// Init legacy files views\nprocessLegacyFilesViews()\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-navigation-entry__settings-quota--not-unlimited[data-v-26c061ec] .app-navigation-entry__title{margin-top:-4px}.app-navigation-entry__settings-quota progress[data-v-26c061ec]{position:absolute;bottom:10px;margin-left:44px;width:calc(100% - 44px - 22px)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/NavigationQuota.vue\"],\"names\":[],\"mappings\":\"AAIC,mGACC,eAAA,CAGD,gEACC,iBAAA,CACA,WAAA,CACA,gBAAA,CACA,8BAAA\",\"sourcesContent\":[\"\\n// User storage stats display\\n.app-navigation-entry__settings-quota {\\n\\t// Align title with progress and icon\\n\\t&--not-unlimited::v-deep .app-navigation-entry__title {\\n\\t\\tmargin-top: -4px;\\n\\t}\\n\\n\\tprogress {\\n\\t\\tposition: absolute;\\n\\t\\tbottom: 10px;\\n\\t\\tmargin-left: 44px;\\n\\t\\twidth: calc(100% - 44px - 22px);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".template-picker__item[data-v-440aea22]{display:flex}.template-picker__label[data-v-440aea22]{display:flex;align-items:center;flex:1 1;flex-direction:column}.template-picker__label[data-v-440aea22],.template-picker__label *[data-v-440aea22]{cursor:pointer;user-select:none}.template-picker__label[data-v-440aea22]::before{display:none !important}.template-picker__preview[data-v-440aea22]{display:block;overflow:hidden;flex:1 1;width:var(--width);min-height:var(--height);max-height:var(--height);padding:0;border:var(--border) solid var(--color-border);border-radius:var(--border-radius-large)}input:checked+label>.template-picker__preview[data-v-440aea22]{border-color:var(--color-primary)}.template-picker__preview--failed[data-v-440aea22]{display:flex}.template-picker__image[data-v-440aea22]{max-width:100%;background-color:var(--color-main-background);object-fit:cover}.template-picker__preview--failed .template-picker__image[data-v-440aea22]{width:calc(var(--margin)*8);margin:auto;background-color:rgba(0,0,0,0) !important;object-fit:initial}.template-picker__title[data-v-440aea22]{overflow:hidden;max-width:calc(var(--width) + 4px);padding:var(--margin);white-space:nowrap;text-overflow:ellipsis}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/TemplatePreview.vue\"],\"names\":[],\"mappings\":\"AAGC,wCACC,YAAA,CAGD,yCACC,YAAA,CAEA,kBAAA,CACA,QAAA,CACA,qBAAA,CAEA,oFACC,cAAA,CACA,gBAAA,CAGD,iDACC,uBAAA,CAIF,2CACC,aAAA,CACA,eAAA,CAEA,QAAA,CACA,kBAAA,CACA,wBAAA,CACA,wBAAA,CACA,SAAA,CACA,8CAAA,CACA,wCAAA,CAEA,+DACC,iCAAA,CAGD,mDAEC,YAAA,CAIF,yCACC,cAAA,CACA,6CAAA,CAEA,gBAAA,CAID,2EACC,2BAAA,CAEA,WAAA,CACA,yCAAA,CAEA,kBAAA,CAGD,yCACC,eAAA,CAEA,kCAAA,CACA,qBAAA,CACA,kBAAA,CACA,sBAAA\",\"sourcesContent\":[\"\\n\\n.template-picker {\\n\\t&__item {\\n\\t\\tdisplay: flex;\\n\\t}\\n\\n\\t&__label {\\n\\t\\tdisplay: flex;\\n\\t\\t// Align in the middle of the grid\\n\\t\\talign-items: center;\\n\\t\\tflex: 1 1;\\n\\t\\tflex-direction: column;\\n\\n\\t\\t&, * {\\n\\t\\t\\tcursor: pointer;\\n\\t\\t\\tuser-select: none;\\n\\t\\t}\\n\\n\\t\\t&::before {\\n\\t\\t\\tdisplay: none !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&__preview {\\n\\t\\tdisplay: block;\\n\\t\\toverflow: hidden;\\n\\t\\t// Stretch so all entries are the same width\\n\\t\\tflex: 1 1;\\n\\t\\twidth: var(--width);\\n\\t\\tmin-height: var(--height);\\n\\t\\tmax-height: var(--height);\\n\\t\\tpadding: 0;\\n\\t\\tborder: var(--border) solid var(--color-border);\\n\\t\\tborder-radius: var(--border-radius-large);\\n\\n\\t\\tinput:checked + label > & {\\n\\t\\t\\tborder-color: var(--color-primary);\\n\\t\\t}\\n\\n\\t\\t&--failed {\\n\\t\\t\\t// Make sure to properly center fallback icon\\n\\t\\t\\tdisplay: flex;\\n\\t\\t}\\n\\t}\\n\\n\\t&__image {\\n\\t\\tmax-width: 100%;\\n\\t\\tbackground-color: var(--color-main-background);\\n\\n\\t\\tobject-fit: cover;\\n\\t}\\n\\n\\t// Failed preview, fallback to mime icon\\n\\t&__preview--failed &__image {\\n\\t\\twidth: calc(var(--margin) * 8);\\n\\t\\t// Center mime icon\\n\\t\\tmargin: auto;\\n\\t\\tbackground-color: transparent !important;\\n\\n\\t\\tobject-fit: initial;\\n\\t}\\n\\n\\t&__title {\\n\\t\\toverflow: hidden;\\n\\t\\t// also count preview border\\n\\t\\tmax-width: calc(var(--width) + 2*2px);\\n\\t\\tpadding: var(--margin);\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-navigation[data-v-83bb0f06] .app-navigation-entry-icon{background-repeat:no-repeat;background-position:center}.app-navigation>ul.app-navigation__list[data-v-83bb0f06]{padding-bottom:var(--default-grid-baseline, 4px)}.app-navigation-entry__settings[data-v-83bb0f06]{height:auto !important;overflow:hidden !important;padding-top:0 !important;flex:0 0 auto}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/Navigation.vue\"],\"names\":[],\"mappings\":\"AAEA,4DACC,2BAAA,CACA,0BAAA,CAGD,yDAEC,gDAAA,CAGD,iDACC,sBAAA,CACA,0BAAA,CACA,wBAAA,CAEA,aAAA\",\"sourcesContent\":[\"\\n// TODO: remove when https://github.com/nextcloud/nextcloud-vue/pull/3539 is in\\n.app-navigation::v-deep .app-navigation-entry-icon {\\n\\tbackground-repeat: no-repeat;\\n\\tbackground-position: center;\\n}\\n\\n.app-navigation > ul.app-navigation__list {\\n\\t// Use flex gap value for more elegant spacing\\n\\tpadding-bottom: var(--default-grid-baseline, 4px);\\n}\\n\\n.app-navigation-entry__settings {\\n\\theight: auto !important;\\n\\toverflow: hidden !important;\\n\\tpadding-top: 0 !important;\\n\\t// Prevent shrinking or growing\\n\\tflex: 0 0 auto;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".templates-picker__form[data-v-55dd9121]{padding:calc(var(--margin)*2);padding-bottom:0}.templates-picker__form h2[data-v-55dd9121]{text-align:center;font-weight:bold;margin:var(--margin) 0 calc(var(--margin)*2)}.templates-picker__list[data-v-55dd9121]{display:grid;grid-gap:calc(var(--margin)*2);grid-auto-columns:1fr;max-width:calc(var(--fullwidth)*6);grid-template-columns:repeat(auto-fit, var(--fullwidth));grid-auto-rows:1fr;justify-content:center}.templates-picker__buttons[data-v-55dd9121]{display:flex;justify-content:space-between;padding:calc(var(--margin)*2) var(--margin);position:sticky;bottom:0;background-image:linear-gradient(0, var(--gradient-main-background))}.templates-picker__buttons button[data-v-55dd9121],.templates-picker__buttons input[type=submit][data-v-55dd9121]{height:44px}.templates-picker[data-v-55dd9121] .modal-container{position:relative}.templates-picker__loading[data-v-55dd9121]{position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;margin:0;background-color:var(--color-main-background-translucent)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/TemplatePicker.vue\"],\"names\":[],\"mappings\":\"AAEC,yCACC,6BAAA,CAEA,gBAAA,CAEA,4CACC,iBAAA,CACA,gBAAA,CACA,4CAAA,CAIF,yCACC,YAAA,CACA,8BAAA,CACA,qBAAA,CAEA,kCAAA,CACA,wDAAA,CAEA,kBAAA,CAEA,sBAAA,CAGD,4CACC,YAAA,CACA,6BAAA,CACA,2CAAA,CACA,eAAA,CACA,QAAA,CACA,oEAAA,CAEA,kHACC,WAAA,CAKF,oDACC,iBAAA,CAGD,4CACC,iBAAA,CACA,KAAA,CACA,MAAA,CACA,sBAAA,CACA,UAAA,CACA,WAAA,CACA,QAAA,CACA,yDAAA\",\"sourcesContent\":[\"\\n.templates-picker {\\n\\t&__form {\\n\\t\\tpadding: calc(var(--margin) * 2);\\n\\t\\t// Will be handled by the buttons\\n\\t\\tpadding-bottom: 0;\\n\\n\\t\\th2 {\\n\\t\\t\\ttext-align: center;\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\tmargin: var(--margin) 0 calc(var(--margin) * 2);\\n\\t\\t}\\n\\t}\\n\\n\\t&__list {\\n\\t\\tdisplay: grid;\\n\\t\\tgrid-gap: calc(var(--margin) * 2);\\n\\t\\tgrid-auto-columns: 1fr;\\n\\t\\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\\n\\t\\tmax-width: calc(var(--fullwidth) * 6);\\n\\t\\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\\n\\t\\t// Make sure all rows are the same height\\n\\t\\tgrid-auto-rows: 1fr;\\n\\t\\t// Center the columns set\\n\\t\\tjustify-content: center;\\n\\t}\\n\\n\\t&__buttons {\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: space-between;\\n\\t\\tpadding: calc(var(--margin) * 2) var(--margin);\\n\\t\\tposition: sticky;\\n\\t\\tbottom: 0;\\n\\t\\tbackground-image: linear-gradient(0, var(--gradient-main-background));\\n\\n\\t\\tbutton, input[type='submit'] {\\n\\t\\t\\theight: 44px;\\n\\t\\t}\\n\\t}\\n\\n\\t// Make sure we're relative for the loading emptycontent on top\\n\\t::v-deep .modal-container {\\n\\t\\tposition: relative;\\n\\t}\\n\\n\\t&__loading {\\n\\t\\tposition: absolute;\\n\\t\\ttop: 0;\\n\\t\\tleft: 0;\\n\\t\\tjustify-content: center;\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\t\\tmargin: 0;\\n\\t\\tbackground-color: var(--color-main-background-translucent);\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 2181;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2181: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], function() { return __webpack_require__(78561); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","getCurrentDirectory","currentDirInfo","OCA","Files","App","currentFileList","dirInfo","path","name","replace","getTemplates","axios","generateOcsUrl","response","data","ocs","createFromTemplate","filePath","templatePath","templateType","inheritAttrs","props","basename","type","required","checked","default","fileid","filename","previewUrl","hasPreview","mime","ratio","failedPreview","computed","nameWithoutExt","id","realPreviewUrl","getCurrentUser","document","getElementById","value","pathSections","startsWith","split","relativePath","forEach","section","encodeURIComponent","mimeIcon","methods","onCheck","onFailure","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_c","_self","staticClass","attrs","domProps","on","_v","class","_s","components","NcEmptyContent","NcModal","TemplatePreview","logger","loading","opened","provider","emptyTemplate","selectedTemplate","style","open","templates","fetchedProvider","close","onSubmit","currentDirectory","fileList","extension","normalize","fileInfo","model","filesClient","fileAction","$file","dir","fileActions","fileInfoModel","console","showError","$event","preventDefault","stopPropagation","apply","arguments","t","_b","_l","template","key","_e","getLoggerBuilder","setApp","detectUser","build","Vue","n","TemplatePickerRoot","createElement","body","appendChild","loadState","templatesPath","debug","TemplatePicker","TemplatePickerView","propsData","$mount","window","addEventListener","initTemplatesPlugin","attach","menu","addMenuEntry","displayName","templateName","iconClass","fileType","actionHandler","initTemplatesFolder","removeMenuEntry","OC","Plugins","register","index","newTemplatePlugin","app","label","FilesPlugin","copySystemTemplates","changeDirectory","template_path","error","subscribe","query","setFilter","registerLegacyView","order","icon","parent","classes","expanded","params","OCP","Navigation","legacy","sticky","includes","view","isValidNavigation","isUniqueNavigation","_views","e","Error","message","push","_currentView","views","find","search","getFiles","isSvg","columns","isValidColumn","emptyView","column","title","property","sortFunction","summary","ChartPie","NcAppNavigationItem","NcProgressBar","loadingStorageStats","storageStats","storageStatsTitle","usedQuotaByte","used","quota","storageStatsTooltip","beforeMount","setInterval","debounceUpdateStorageStats","throttleUpdateStorageStats","updateStorageStats","event","slot","relative","Math","min","el","mounted","show_hidden","crop_image_previews","Clipboard","NcAppSettingsDialog","NcAppSettingsSection","NcCheckboxRadioSwitch","NcInputField","Setting","userConfig","settings","webdavUrl","webdavDocs","webdavUrlCopied","beforeDestroy","onClose","setConfig","emit","copyCloudId","navigator","showSuccess","setTimeout","length","setting","target","select","scopedSlots","_u","fn","proxy","Cog","NcAppNavigation","SettingsModal","NavigationQuota","settingsOpened","currentViewId","currentView","parentViews","filter","sort","childViews","reduce","list","watch","showView","newAppContent","itemId","onLegacyNavigationChanged","onToggleExpand","show","generateToNavigation","openSettings","onSettingsClose","child","Settings","_settings","_name","_el","_open","_close","Router","mode","base","generateUrl","linkActiveClass","routes","alias","stringifyQuery","result","stringify","NavigationService","Object","assign","legacyViews","SettingsService","SettingsModel","NavigationView","router","values","sublist","subview","___CSS_LOADER_EXPORT___","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","O","chunkIds","priority","notFulfilled","Infinity","i","fulfilled","j","keys","every","splice","r","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","nc","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"files-main.js?v=e2f2b11dcc47b6c5bacb","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/files/src/utils/davUtils.js","webpack:///nextcloud/apps/files/src/services/Templates.js","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue","webpack:///nextcloud/apps/files/src/utils/fileUtils.js","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?c067","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?81db","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?c414","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?023e","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?afd8","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?1f7b","webpack:///nextcloud/apps/files/src/templates.js","webpack:///nextcloud/apps/files/src/legacy/filelistSearch.js","webpack:///nextcloud/apps/files/src/logger.js","webpack:///nextcloud/apps/files/src/legacy/navigationMapper.js","webpack:///nextcloud/apps/files/src/services/Navigation.ts","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?2b80","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?2966","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?08cb","webpack:///nextcloud/apps/files/src/components/Setting.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files/src/components/Setting.vue","webpack://nextcloud/./apps/files/src/components/Setting.vue?98ea","webpack://nextcloud/./apps/files/src/components/Setting.vue?8d57","webpack:///nextcloud/apps/files/src/views/Settings.vue","webpack:///nextcloud/apps/files/src/views/Settings.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/Settings.vue?b81b","webpack://nextcloud/./apps/files/src/views/Settings.vue?84f7","webpack:///nextcloud/apps/files/src/views/Navigation.vue","webpack:///nextcloud/apps/files/src/views/Navigation.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/Navigation.vue?98f5","webpack://nextcloud/./apps/files/src/views/Navigation.vue?74b9","webpack://nextcloud/./apps/files/src/views/Navigation.vue?8122","webpack:///nextcloud/apps/files/src/services/Settings.js","webpack:///nextcloud/apps/files/src/models/Setting.js","webpack:///nextcloud/apps/files/src/router/router.js","webpack:///nextcloud/apps/files/src/main.js","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue?vue&type=style&index=0&id=26c061ec&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue?vue&type=style&index=0&id=440aea22&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/views/Navigation.vue?vue&type=style&index=0&id=83bb0f06&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue?vue&type=style&index=0&id=55dd9121&prod&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateRemoteUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\n\nexport const getRootPath = function() {\n\tif (getCurrentUser()) {\n\t\treturn generateRemoteUrl(`dav/files/${getCurrentUser().uid}`)\n\t} else {\n\t\treturn generateRemoteUrl('webdav').replace('/remote.php', '/public.php')\n\t}\n}\n\nexport const isPublic = function() {\n\treturn !getCurrentUser()\n}\n\nexport const getToken = function() {\n\treturn document.getElementById('sharingToken') && document.getElementById('sharingToken').value\n}\n\n/**\n * Return the current directory, fallback to root\n *\n * @return {string}\n */\nexport const getCurrentDirectory = function() {\n\tconst currentDirInfo = OCA?.Files?.App?.currentFileList?.dirInfo\n\t\t|| { path: '/', name: '' }\n\n\t// Make sure we don't have double slashes\n\treturn `${currentDirInfo.path}/${currentDirInfo.name}`.replace(/\\/\\//gi, '/')\n}\n","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateOcsUrl } from '@nextcloud/router'\nimport axios from '@nextcloud/axios'\n\nexport const getTemplates = async function() {\n\tconst response = await axios.get(generateOcsUrl('apps/files/api/v1/templates'))\n\treturn response.data.ocs.data\n}\n\n/**\n * Create a new file from a specified template\n *\n * @param {string} filePath The new file destination path\n * @param {string} templatePath The template source path\n * @param {string} templateType The template type e.g 'user'\n */\nexport const createFromTemplate = async function(filePath, templatePath, templateType) {\n\tconst response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/create'), {\n\t\tfilePath,\n\t\ttemplatePath,\n\t\ttemplateType,\n\t})\n\treturn response.data.ocs.data\n}\n","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<li class=\"template-picker__item\">\n\t\t<input :id=\"id\"\n\t\t\t:checked=\"checked\"\n\t\t\ttype=\"radio\"\n\t\t\tclass=\"radio\"\n\t\t\tname=\"template-picker\"\n\t\t\t@change=\"onCheck\">\n\n\t\t<label :for=\"id\" class=\"template-picker__label\">\n\t\t\t<div class=\"template-picker__preview\"\n\t\t\t\t:class=\"failedPreview ? 'template-picker__preview--failed' : ''\">\n\t\t\t\t<img class=\"template-picker__image\"\n\t\t\t\t\t:src=\"realPreviewUrl\"\n\t\t\t\t\talt=\"\"\n\t\t\t\t\tdraggable=\"false\"\n\t\t\t\t\t@error=\"onFailure\">\n\t\t\t</div>\n\n\t\t\t<span class=\"template-picker__title\">\n\t\t\t\t{{ nameWithoutExt }}\n\t\t\t</span>\n\t\t</label>\n\t</li>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport { encodeFilePath } from '../utils/fileUtils'\nimport { getToken, isPublic } from '../utils/davUtils'\n\n// preview width generation\nconst previewWidth = 256\n\nexport default {\n\tname: 'TemplatePreview',\n\tinheritAttrs: false,\n\n\tprops: {\n\t\tbasename: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tchecked: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tfileid: {\n\t\t\ttype: [String, Number],\n\t\t\trequired: true,\n\t\t},\n\t\tfilename: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tpreviewUrl: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\thasPreview: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tmime: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tratio: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tfailedPreview: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Strip away extension from name\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tnameWithoutExt() {\n\t\t\treturn this.basename.indexOf('.') > -1 ? this.basename.split('.').slice(0, -1).join('.') : this.basename\n\t\t},\n\n\t\tid() {\n\t\t\treturn `template-picker-${this.fileid}`\n\t\t},\n\n\t\trealPreviewUrl() {\n\t\t\t// If original preview failed, fallback to mime icon\n\t\t\tif (this.failedPreview && this.mimeIcon) {\n\t\t\t\treturn this.mimeIcon\n\t\t\t}\n\n\t\t\tif (this.previewUrl) {\n\t\t\t\treturn this.previewUrl\n\t\t\t}\n\t\t\t// TODO: find a nicer standard way of doing this?\n\t\t\tif (isPublic()) {\n\t\t\t\treturn generateUrl(`/apps/files_sharing/publicpreview/${getToken()}?fileId=${this.fileid}&file=${encodeFilePath(this.filename)}&x=${previewWidth}&y=${previewWidth}&a=1`)\n\t\t\t}\n\t\t\treturn generateUrl(`/core/preview?fileId=${this.fileid}&x=${previewWidth}&y=${previewWidth}&a=1`)\n\t\t},\n\n\t\tmimeIcon() {\n\t\t\treturn OC.MimeType.getIconUrl(this.mime)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonCheck() {\n\t\t\tthis.$emit('check', this.fileid)\n\t\t},\n\t\tonFailure() {\n\t\t\tthis.failedPreview = true\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n.template-picker {\n\t&__item {\n\t\tdisplay: flex;\n\t}\n\n\t&__label {\n\t\tdisplay: flex;\n\t\t// Align in the middle of the grid\n\t\talign-items: center;\n\t\tflex: 1 1;\n\t\tflex-direction: column;\n\n\t\t&, * {\n\t\t\tcursor: pointer;\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t&::before {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n\n\t&__preview {\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\t\t// Stretch so all entries are the same width\n\t\tflex: 1 1;\n\t\twidth: var(--width);\n\t\tmin-height: var(--height);\n\t\tmax-height: var(--height);\n\t\tpadding: 0;\n\t\tborder: var(--border) solid var(--color-border);\n\t\tborder-radius: var(--border-radius-large);\n\n\t\tinput:checked + label > & {\n\t\t\tborder-color: var(--color-primary);\n\t\t}\n\n\t\t&--failed {\n\t\t\t// Make sure to properly center fallback icon\n\t\t\tdisplay: flex;\n\t\t}\n\t}\n\n\t&__image {\n\t\tmax-width: 100%;\n\t\tbackground-color: var(--color-main-background);\n\n\t\tobject-fit: cover;\n\t}\n\n\t// Failed preview, fallback to mime icon\n\t&__preview--failed &__image {\n\t\twidth: calc(var(--margin) * 8);\n\t\t// Center mime icon\n\t\tmargin: auto;\n\t\tbackground-color: transparent !important;\n\n\t\tobject-fit: initial;\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\t// also count preview border\n\t\tmax-width: calc(var(--width) + 2*2px);\n\t\tpadding: var(--margin);\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n</style>\n","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst encodeFilePath = function(path) {\n\tconst pathSections = (path.startsWith('/') ? path : `/${path}`).split('/')\n\tlet relativePath = ''\n\tpathSections.forEach((section) => {\n\t\tif (section !== '') {\n\t\t\trelativePath += '/' + encodeURIComponent(section)\n\t\t}\n\t})\n\treturn relativePath\n}\n\n/**\n * Extract dir and name from file path\n *\n * @param {string} path the full path\n * @return {string[]} [dirPath, fileName]\n */\nconst extractFilePaths = function(path) {\n\tconst pathSections = path.split('/')\n\tconst fileName = pathSections[pathSections.length - 1]\n\tconst dirPath = pathSections.slice(0, pathSections.length - 1).join('/')\n\treturn [dirPath, fileName]\n}\n\nexport { encodeFilePath, extractFilePaths }\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=style&index=0&id=440aea22&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=style&index=0&id=440aea22&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TemplatePreview.vue?vue&type=template&id=440aea22&scoped=true&\"\nimport script from \"./TemplatePreview.vue?vue&type=script&lang=js&\"\nexport * from \"./TemplatePreview.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TemplatePreview.vue?vue&type=style&index=0&id=440aea22&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"440aea22\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('li',{staticClass:\"template-picker__item\"},[_c('input',{staticClass:\"radio\",attrs:{\"id\":_vm.id,\"type\":\"radio\",\"name\":\"template-picker\"},domProps:{\"checked\":_vm.checked},on:{\"change\":_vm.onCheck}}),_vm._v(\" \"),_c('label',{staticClass:\"template-picker__label\",attrs:{\"for\":_vm.id}},[_c('div',{staticClass:\"template-picker__preview\",class:_vm.failedPreview ? 'template-picker__preview--failed' : ''},[_c('img',{staticClass:\"template-picker__image\",attrs:{\"src\":_vm.realPreviewUrl,\"alt\":\"\",\"draggable\":\"false\"},on:{\"error\":_vm.onFailure}})]),_vm._v(\" \"),_c('span',{staticClass:\"template-picker__title\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.nameWithoutExt)+\"\\n\\t\\t\")])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<NcModal v-if=\"opened\"\n\t\t:clear-view-delay=\"-1\"\n\t\tclass=\"templates-picker\"\n\t\tsize=\"normal\"\n\t\t@close=\"close\">\n\t\t<form class=\"templates-picker__form\"\n\t\t\t:style=\"style\"\n\t\t\t@submit.prevent.stop=\"onSubmit\">\n\t\t\t<h2>{{ t('files', 'Pick a template for {name}', { name: nameWithoutExt }) }}</h2>\n\n\t\t\t<!-- Templates list -->\n\t\t\t<ul class=\"templates-picker__list\">\n\t\t\t\t<TemplatePreview v-bind=\"emptyTemplate\"\n\t\t\t\t\t:checked=\"checked === emptyTemplate.fileid\"\n\t\t\t\t\t@check=\"onCheck\" />\n\n\t\t\t\t<TemplatePreview v-for=\"template in provider.templates\"\n\t\t\t\t\t:key=\"template.fileid\"\n\t\t\t\t\tv-bind=\"template\"\n\t\t\t\t\t:checked=\"checked === template.fileid\"\n\t\t\t\t\t:ratio=\"provider.ratio\"\n\t\t\t\t\t@check=\"onCheck\" />\n\t\t\t</ul>\n\n\t\t\t<!-- Cancel and submit -->\n\t\t\t<div class=\"templates-picker__buttons\">\n\t\t\t\t<button @click=\"close\">\n\t\t\t\t\t{{ t('files', 'Cancel') }}\n\t\t\t\t</button>\n\t\t\t\t<input type=\"submit\"\n\t\t\t\t\tclass=\"primary\"\n\t\t\t\t\t:value=\"t('files', 'Create')\"\n\t\t\t\t\t:aria-label=\"t('files', 'Create a new file with the selected template')\">\n\t\t\t</div>\n\t\t</form>\n\n\t\t<NcEmptyContent v-if=\"loading\" class=\"templates-picker__loading\" icon=\"icon-loading\">\n\t\t\t{{ t('files', 'Creating file') }}\n\t\t</NcEmptyContent>\n\t</NcModal>\n</template>\n\n<script>\nimport { normalize } from 'path'\nimport { showError } from '@nextcloud/dialogs'\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent'\nimport NcModal from '@nextcloud/vue/dist/Components/NcModal'\n\nimport { getCurrentDirectory } from '../utils/davUtils'\nimport { createFromTemplate, getTemplates } from '../services/Templates'\nimport TemplatePreview from '../components/TemplatePreview'\n\nconst border = 2\nconst margin = 8\nconst width = margin * 20\n\nexport default {\n\tname: 'TemplatePicker',\n\n\tcomponents: {\n\t\tNcEmptyContent,\n\t\tNcModal,\n\t\tTemplatePreview,\n\t},\n\n\tprops: {\n\t\tlogger: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\t// Check empty template by default\n\t\t\tchecked: -1,\n\t\t\tloading: false,\n\t\t\tname: null,\n\t\t\topened: false,\n\t\t\tprovider: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Strip away extension from name\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tnameWithoutExt() {\n\t\t\treturn this.name.indexOf('.') > -1\n\t\t\t\t? this.name.split('.').slice(0, -1).join('.')\n\t\t\t\t: this.name\n\t\t},\n\n\t\temptyTemplate() {\n\t\t\treturn {\n\t\t\t\tbasename: t('files', 'Blank'),\n\t\t\t\tfileid: -1,\n\t\t\t\tfilename: this.t('files', 'Blank'),\n\t\t\t\thasPreview: false,\n\t\t\t\tmime: this.provider?.mimetypes[0] || this.provider?.mimetypes,\n\t\t\t}\n\t\t},\n\n\t\tselectedTemplate() {\n\t\t\treturn this.provider.templates.find(template => template.fileid === this.checked)\n\t\t},\n\n\t\t/**\n\t\t * Style css vars bin,d\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\tstyle() {\n\t\t\treturn {\n\t\t\t\t'--margin': margin + 'px',\n\t\t\t\t'--width': width + 'px',\n\t\t\t\t'--border': border + 'px',\n\t\t\t\t'--fullwidth': width + 2 * margin + 2 * border + 'px',\n\t\t\t\t'--height': this.provider.ratio ? Math.round(width / this.provider.ratio) + 'px' : null,\n\t\t\t}\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Open the picker\n\t\t *\n\t\t * @param {string} name the file name to create\n\t\t * @param {object} provider the template provider picked\n\t\t */\n\t\tasync open(name, provider) {\n\n\t\t\tthis.checked = this.emptyTemplate.fileid\n\t\t\tthis.name = name\n\t\t\tthis.provider = provider\n\n\t\t\tconst templates = await getTemplates()\n\t\t\tconst fetchedProvider = templates.find((fetchedProvider) => fetchedProvider.app === provider.app && fetchedProvider.label === provider.label)\n\t\t\tif (fetchedProvider === null) {\n\t\t\t\tthrow new Error('Failed to match provider in results')\n\t\t\t}\n\t\t\tthis.provider = fetchedProvider\n\n\t\t\t// If there is no templates available, just create an empty file\n\t\t\tif (fetchedProvider.templates.length === 0) {\n\t\t\t\tthis.onSubmit()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Else, open the picker\n\t\t\tthis.opened = true\n\t\t},\n\n\t\t/**\n\t\t * Close the picker and reset variables\n\t\t */\n\t\tclose() {\n\t\t\tthis.checked = this.emptyTemplate.fileid\n\t\t\tthis.loading = false\n\t\t\tthis.name = null\n\t\t\tthis.opened = false\n\t\t\tthis.provider = null\n\t\t},\n\n\t\t/**\n\t\t * Manages the radio template picker change\n\t\t *\n\t\t * @param {number} fileid the selected template file id\n\t\t */\n\t\tonCheck(fileid) {\n\t\t\tthis.checked = fileid\n\t\t},\n\n\t\tasync onSubmit() {\n\t\t\tthis.loading = true\n\t\t\tconst currentDirectory = getCurrentDirectory()\n\t\t\tconst fileList = OCA?.Files?.App?.currentFileList\n\n\t\t\t// If the file doesn't have an extension, add the default one\n\t\t\tif (this.nameWithoutExt === this.name) {\n\t\t\t\tthis.logger.debug('Fixed invalid filename', { name: this.name, extension: this.provider?.extension })\n\t\t\t\tthis.name = this.name + this.provider?.extension\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst fileInfo = await createFromTemplate(\n\t\t\t\t\tnormalize(`${currentDirectory}/${this.name}`),\n\t\t\t\t\tthis.selectedTemplate?.filename,\n\t\t\t\t\tthis.selectedTemplate?.templateType,\n\t\t\t\t)\n\t\t\t\tthis.logger.debug('Created new file', fileInfo)\n\n\t\t\t\t// Fetch FileInfo and model\n\t\t\t\tconst data = await fileList?.addAndFetchFileInfo(this.name).then((status, data) => data)\n\t\t\t\tconst model = new OCA.Files.FileInfoModel(data, {\n\t\t\t\t\tfilesClient: fileList?.filesClient,\n\t\t\t\t})\n\n\t\t\t\t// Run default action\n\t\t\t\tconst fileAction = OCA.Files.fileActions.getDefaultFileAction(fileInfo.mime, 'file', OC.PERMISSION_ALL)\n\t\t\t\tif (fileAction) {\n\t\t\t\t\tfileAction.action(fileInfo.basename, {\n\t\t\t\t\t\t$file: fileList?.findFileEl(this.name),\n\t\t\t\t\t\tdir: currentDirectory,\n\t\t\t\t\t\tfileList,\n\t\t\t\t\t\tfileActions: fileList?.fileActions,\n\t\t\t\t\t\tfileInfoModel: model,\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.close()\n\t\t\t} catch (error) {\n\t\t\t\tthis.logger.error('Error while creating the new file from template')\n\t\t\t\tconsole.error(error)\n\t\t\t\tshowError(this.t('files', 'Unable to create new file from template'))\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.templates-picker {\n\t&__form {\n\t\tpadding: calc(var(--margin) * 2);\n\t\t// Will be handled by the buttons\n\t\tpadding-bottom: 0;\n\n\t\th2 {\n\t\t\ttext-align: center;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: var(--margin) 0 calc(var(--margin) * 2);\n\t\t}\n\t}\n\n\t&__list {\n\t\tdisplay: grid;\n\t\tgrid-gap: calc(var(--margin) * 2);\n\t\tgrid-auto-columns: 1fr;\n\t\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\n\t\tmax-width: calc(var(--fullwidth) * 6);\n\t\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\n\t\t// Make sure all rows are the same height\n\t\tgrid-auto-rows: 1fr;\n\t\t// Center the columns set\n\t\tjustify-content: center;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\tpadding: calc(var(--margin) * 2) var(--margin);\n\t\tposition: sticky;\n\t\tbottom: 0;\n\t\tbackground-image: linear-gradient(0, var(--gradient-main-background));\n\n\t\tbutton, input[type='submit'] {\n\t\t\theight: 44px;\n\t\t}\n\t}\n\n\t// Make sure we're relative for the loading emptycontent on top\n\t::v-deep .modal-container {\n\t\tposition: relative;\n\t}\n\n\t&__loading {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmargin: 0;\n\t\tbackground-color: var(--color-main-background-translucent);\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=style&index=0&id=55dd9121&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=style&index=0&id=55dd9121&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TemplatePicker.vue?vue&type=template&id=55dd9121&scoped=true&\"\nimport script from \"./TemplatePicker.vue?vue&type=script&lang=js&\"\nexport * from \"./TemplatePicker.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TemplatePicker.vue?vue&type=style&index=0&id=55dd9121&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"55dd9121\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.opened)?_c('NcModal',{staticClass:\"templates-picker\",attrs:{\"clear-view-delay\":-1,\"size\":\"normal\"},on:{\"close\":_vm.close}},[_c('form',{staticClass:\"templates-picker__form\",style:(_vm.style),on:{\"submit\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.onSubmit.apply(null, arguments)}}},[_c('h2',[_vm._v(_vm._s(_vm.t('files', 'Pick a template for {name}', { name: _vm.nameWithoutExt })))]),_vm._v(\" \"),_c('ul',{staticClass:\"templates-picker__list\"},[_c('TemplatePreview',_vm._b({attrs:{\"checked\":_vm.checked === _vm.emptyTemplate.fileid},on:{\"check\":_vm.onCheck}},'TemplatePreview',_vm.emptyTemplate,false)),_vm._v(\" \"),_vm._l((_vm.provider.templates),function(template){return _c('TemplatePreview',_vm._b({key:template.fileid,attrs:{\"checked\":_vm.checked === template.fileid,\"ratio\":_vm.provider.ratio},on:{\"check\":_vm.onCheck}},'TemplatePreview',template,false))})],2),_vm._v(\" \"),_c('div',{staticClass:\"templates-picker__buttons\"},[_c('button',{on:{\"click\":_vm.close}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'Cancel'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('input',{staticClass:\"primary\",attrs:{\"type\":\"submit\",\"aria-label\":_vm.t('files', 'Create a new file with the selected template')},domProps:{\"value\":_vm.t('files', 'Create')}})])]),_vm._v(\" \"),(_vm.loading)?_c('NcEmptyContent',{staticClass:\"templates-picker__loading\",attrs:{\"icon\":\"icon-loading\"}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('files', 'Creating file'))+\"\\n\\t\")]):_vm._e()],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\nimport { loadState } from '@nextcloud/initial-state'\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { getCurrentDirectory } from './utils/davUtils'\nimport axios from '@nextcloud/axios'\nimport Vue from 'vue'\n\nimport TemplatePickerView from './views/TemplatePicker'\nimport { showError } from '@nextcloud/dialogs'\n\n// Set up logger\nconst logger = getLoggerBuilder()\n\t.setApp('files')\n\t.detectUser()\n\t.build()\n\n// Add translates functions\nVue.mixin({\n\tmethods: {\n\t\tt,\n\t\tn,\n\t},\n})\n\n// Create document root\nconst TemplatePickerRoot = document.createElement('div')\nTemplatePickerRoot.id = 'template-picker'\ndocument.body.appendChild(TemplatePickerRoot)\n\n// Retrieve and init templates\nlet templates = loadState('files', 'templates', [])\nlet templatesPath = loadState('files', 'templates_path', false)\nlogger.debug('Templates providers', templates)\nlogger.debug('Templates folder', { templatesPath })\n\n// Init vue app\nconst View = Vue.extend(TemplatePickerView)\nconst TemplatePicker = new View({\n\tname: 'TemplatePicker',\n\tpropsData: {\n\t\tlogger,\n\t},\n})\nTemplatePicker.$mount('#template-picker')\n\n// Init template engine after load to make sure it's the last injected entry\nwindow.addEventListener('DOMContentLoaded', function() {\n\tif (!templatesPath) {\n\t\tlogger.debug('Templates folder not initialized')\n\t\tconst initTemplatesPlugin = {\n\t\t\tattach(menu) {\n\t\t\t\t// register the new menu entry\n\t\t\t\tmenu.addMenuEntry({\n\t\t\t\t\tid: 'template-init',\n\t\t\t\t\tdisplayName: t('files', 'Set up templates folder'),\n\t\t\t\t\ttemplateName: t('files', 'Templates'),\n\t\t\t\t\ticonClass: 'icon-template-add',\n\t\t\t\t\tfileType: 'file',\n\t\t\t\t\tactionHandler(name) {\n\t\t\t\t\t\tinitTemplatesFolder(name)\n\t\t\t\t\t\tmenu.removeMenuEntry('template-init')\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t},\n\t\t}\n\t\tOC.Plugins.register('OCA.Files.NewFileMenu', initTemplatesPlugin)\n\t}\n})\n\n// Init template files menu\ntemplates.forEach((provider, index) => {\n\tconst newTemplatePlugin = {\n\t\tattach(menu) {\n\t\t\tconst fileList = menu.fileList\n\n\t\t\t// only attach to main file list, public view is not supported yet\n\t\t\tif (fileList.id !== 'files' && fileList.id !== 'files.public') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// register the new menu entry\n\t\t\tmenu.addMenuEntry({\n\t\t\t\tid: `template-new-${provider.app}-${index}`,\n\t\t\t\tdisplayName: provider.label,\n\t\t\t\ttemplateName: provider.label + provider.extension,\n\t\t\t\ticonClass: provider.iconClass || 'icon-file',\n\t\t\t\tfileType: 'file',\n\t\t\t\tactionHandler(name) {\n\t\t\t\t\tTemplatePicker.open(name, provider)\n\t\t\t\t},\n\t\t\t})\n\t\t},\n\t}\n\tOC.Plugins.register('OCA.Files.NewFileMenu', newTemplatePlugin)\n})\n\n/**\n * Init the template directory\n *\n * @param {string} name the templates folder name\n */\nconst initTemplatesFolder = async function(name) {\n\tconst templatePath = (getCurrentDirectory() + `/${name}`).replace('//', '/')\n\ttry {\n\t\tlogger.debug('Initializing the templates directory', { templatePath })\n\t\tconst response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/path'), {\n\t\t\ttemplatePath,\n\t\t\tcopySystemTemplates: true,\n\t\t})\n\n\t\t// Go to template directory\n\t\tOCA.Files.App.currentFileList.changeDirectory(templatePath, true, true)\n\n\t\ttemplates = response.data.ocs.data.templates\n\t\ttemplatesPath = response.data.ocs.data.template_path\n\t} catch (error) {\n\t\tlogger.error('Unable to initialize the templates directory')\n\t\tshowError(t('files', 'Unable to initialize the templates directory'))\n\t}\n}\n","/*\n * @copyright Copyright (c) 2021 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { subscribe } from '@nextcloud/event-bus'\n\n(function() {\n\n\tconst FilesPlugin = {\n\t\tattach(fileList) {\n\t\t\tsubscribe('nextcloud:unified-search.search', ({ query }) => {\n\t\t\t\tfileList.setFilter(query)\n\t\t\t})\n\t\t\tsubscribe('nextcloud:unified-search.reset', () => {\n\t\t\t\tthis.query = null\n\t\t\t\tfileList.setFilter('')\n\t\t\t})\n\n\t\t},\n\t}\n\n\twindow.OC.Plugins.register('OCA.Files.FileList', FilesPlugin)\n\n})()\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport default getLoggerBuilder()\n\t.setApp('files')\n\t.detectUser()\n\t.build()\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\nimport logger from '../logger.js'\n\n/**\n * Fetch and register the legacy files views\n */\nexport default function() {\n\tconst legacyViews = Object.values(loadState('files', 'navigation', {}))\n\n\tif (legacyViews.length > 0) {\n\t\tlogger.debug('Legacy files views detected. Processing...', legacyViews)\n\t\tlegacyViews.forEach(view => {\n\t\t\tregisterLegacyView(view)\n\t\t\tif (view.sublist) {\n\t\t\t\tview.sublist.forEach(subview => registerLegacyView({ ...subview, parent: view.id }))\n\t\t\t}\n\t\t})\n\t}\n}\n\nconst registerLegacyView = function({ id, name, order, icon, parent, classes = '', expanded, params }) {\n\tOCP.Files.Navigation.register({\n\t\tid,\n\t\tname,\n\t\torder,\n\t\tparams,\n\t\tparent,\n\t\texpanded: expanded === true,\n\t\ticonClass: icon ? `icon-${icon}` : 'nav-icon-' + id,\n\t\tlegacy: true,\n\t\tsticky: classes.includes('pinned'),\n\t})\n}\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport type Node from '@nextcloud/files/dist/files/node'\nimport isSvg from 'is-svg'\n\nimport logger from '../logger'\n\nexport interface Column {\n\t/** Unique column ID */\n\tid: string\n\t/** Translated column title */\n\ttitle: string\n\t/** Property key from Node main or additional attributes.\n\tWill be used if no custom sort function is provided.\n\tSorting will be done by localCompare */\n\tproperty: string\n\t/** Special function used to sort Nodes between them */\n\tsortFunction?: (nodeA: Node, nodeB: Node) => number;\n\t/** Custom summary of the column to display at the end of the list.\n\t Will not be displayed if nothing is provided */\n\tsummary?: (node: Node[]) => string\n}\n\nexport interface Navigation {\n\t/** Unique view ID */\n\tid: string\n\t/** Translated view name */\n\tname: string\n\t/** Method return the content of the provided path */\n\tgetFiles: (path: string) => Node[]\n\t/** The view icon as an inline svg */\n\ticon: string\n\t/** The view order */\n\torder: number\n\t/** This view column(s). Name and actions are\n\tby default always included */\n\tcolumns?: Column[]\n\t/** The empty view element to render your empty content into */\n\temptyView?: (div: HTMLDivElement) => void\n\t/** The parent unique ID */\n\tparent?: string\n\t/** This view is sticky (sent at the bottom) */\n\tsticky?: boolean\n\t/** This view has children and is expanded or not */\n\texpanded?: boolean\n\n\t/**\n\t * This view is sticky a legacy view.\n\t * Here until all the views are migrated to Vue.\n\t * @deprecated It will be removed in a near future\n\t */\n\tlegacy?: boolean\n\t/**\n\t * An icon class. \n\t * @deprecated It will be removed in a near future\n\t */\n\ticonClass?: string\n}\n\nexport default class {\n\n\tprivate _views: Navigation[] = []\n\tprivate _currentView: Navigation | null = null\n\n\tconstructor() {\n\t\tlogger.debug('Navigation service initialized')\n\t}\n\n\tregister(view: Navigation) {\n\t\ttry {\n\t\t\tisValidNavigation(view)\n\t\t\tisUniqueNavigation(view, this._views)\n\t\t} catch (e) {\n\t\t\tif (e instanceof Error) {\n\t\t\t\tlogger.error(e.message, { view })\n\t\t\t}\n\t\t\tthrow e\n\t\t}\n\n\t\tif (view.legacy) {\n\t\t\tlogger.warn('Legacy view detected, please migrate to Vue')\n\t\t}\n\n\t\tif (view.iconClass) {\n\t\t\tview.legacy = true\n\t\t}\n\n\t\tthis._views.push(view)\n\t}\n\n\tget views(): Navigation[] {\n\t\treturn this._views\n\t}\n\n\tsetActive(view: Navigation | null) {\n\t\tthis._currentView = view\n\t}\n\n\tget active(): Navigation | null {\n\t\treturn this._currentView\n\t}\n\n}\n\n/**\n * Make sure the given view is unique\n * and not already registered.\n */\nconst isUniqueNavigation = function(view: Navigation, views: Navigation[]): boolean {\n\tif (views.find(search => search.id === view.id)) {\n\t\tthrow new Error(`Navigation id ${view.id} is already registered`)\n\t}\n\treturn true\n}\n\n/**\n * Typescript cannot validate an interface.\n * Please keep in sync with the Navigation interface requirements.\n */\nconst isValidNavigation = function(view: Navigation): boolean {\n\tif (!view.id || typeof view.id !== 'string') {\n\t\tthrow new Error('Navigation id is required and must be a string')\n\t}\n\n\tif (!view.name || typeof view.name !== 'string') {\n\t\tthrow new Error('Navigation name is required and must be a string')\n\t}\n\n\t/**\n\t * Legacy handle their content and icon differently\n\t * TODO: remove when support for legacy views is removed\n\t */\n\tif (!view.legacy) {\n\t\tif (!view.getFiles || typeof view.getFiles !== 'function') {\n\t\t\tthrow new Error('Navigation getFiles is required and must be a function')\n\t\t}\n\n\t\tif (!view.icon || typeof view.icon !== 'string' || !isSvg(view.icon)) {\n\t\t\tthrow new Error('Navigation icon is required and must be a valid svg string')\n\t\t}\n\t}\n\n\tif (!('order' in view) || typeof view.order !== 'number') {\n\t\tthrow new Error('Navigation order is required and must be a number')\n\t}\n\n\t// Optional properties\n\tif (view.columns) {\n\t\tview.columns.forEach(isValidColumn)\n\t}\n\n\tif (view.emptyView && typeof view.emptyView !== 'function') {\n\t\tthrow new Error('Navigation emptyView must be a function')\n\t}\n\n\tif (view.parent && typeof view.parent !== 'string') {\n\t\tthrow new Error('Navigation parent must be a string')\n\t}\n\n\tif ('sticky' in view && typeof view.sticky !== 'boolean') {\n\t\tthrow new Error('Navigation sticky must be a boolean')\n\t}\n\n\tif ('expanded' in view && typeof view.expanded !== 'boolean') {\n\t\tthrow new Error('Navigation expanded must be a boolean')\n\t}\n\n\treturn true\n}\n\n/**\n * Typescript cannot validate an interface.\n * Please keep in sync with the Column interface requirements.\n */\nconst isValidColumn = function(column: Column): boolean {\n\tif (!column.id || typeof column.id !== 'string') {\n\t\tthrow new Error('Column id is required')\n\t}\n\n\tif (!column.title || typeof column.title !== 'string') {\n\t\tthrow new Error('Column title is required')\n\t}\n\n\tif (!column.property || typeof column.property !== 'string') {\n\t\tthrow new Error('Column property is required')\n\t}\n\n\t// Optional properties\n\tif (column.sortFunction && typeof column.sortFunction !== 'function') {\n\t\tthrow new Error('Column sortFunction must be a function')\n\t}\n\n\tif (column.summary && typeof column.summary !== 'function') {\n\t\tthrow new Error('Column summary must be a function')\n\t}\n\n\treturn true\n}\n","<template>\n\t<NcAppNavigationItem v-if=\"storageStats\"\n\t\t:aria-label=\"t('files', 'Storage informations')\"\n\t\t:class=\"{ 'app-navigation-entry__settings-quota--not-unlimited': storageStats.quota >= 0}\"\n\t\t:loading=\"loadingStorageStats\"\n\t\t:name=\"storageStatsTitle\"\n\t\t:title=\"storageStatsTooltip\"\n\t\tclass=\"app-navigation-entry__settings-quota\"\n\t\tdata-cy-files-navigation-settings-quota\n\t\t@click.stop.prevent=\"debounceUpdateStorageStats\">\n\t\t<ChartPie slot=\"icon\" :size=\"20\" />\n\n\t\t<!-- Progress bar -->\n\t\t<NcProgressBar v-if=\"storageStats.quota >= 0\"\n\t\t\tslot=\"extra\"\n\t\t\t:error=\"storageStats.relative > 80\"\n\t\t\t:value=\"Math.min(storageStats.relative, 100)\" />\n\t</NcAppNavigationItem>\n</template>\n\n<script>\nimport { formatFileSize } from '@nextcloud/files'\nimport { generateUrl } from '@nextcloud/router'\nimport { loadState } from '@nextcloud/initial-state'\nimport { showError } from '@nextcloud/dialogs'\nimport { debounce, throttle } from 'throttle-debounce'\nimport { translate } from '@nextcloud/l10n'\nimport axios from '@nextcloud/axios'\nimport ChartPie from 'vue-material-design-icons/ChartPie.vue'\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\nimport NcProgressBar from '@nextcloud/vue/dist/Components/NcProgressBar.js'\n\nimport logger from '../logger.js'\nimport { subscribe } from '@nextcloud/event-bus'\n\nexport default {\n\tname: 'NavigationQuota',\n\n\tcomponents: {\n\t\tChartPie,\n\t\tNcAppNavigationItem,\n\t\tNcProgressBar,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloadingStorageStats: false,\n\t\t\tstorageStats: loadState('files', 'storageStats', null),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tstorageStatsTitle() {\n\t\t\tconst usedQuotaByte = formatFileSize(this.storageStats?.used)\n\t\t\tconst quotaByte = formatFileSize(this.storageStats?.quota)\n\n\t\t\t// If no quota set\n\t\t\tif (this.storageStats?.quota < 0) {\n\t\t\t\treturn this.t('files', '{usedQuotaByte} used', { usedQuotaByte })\n\t\t\t}\n\n\t\t\treturn this.t('files', '{used} of {quota} used', {\n\t\t\t\tused: usedQuotaByte,\n\t\t\t\tquota: quotaByte,\n\t\t\t})\n\t\t},\n\t\tstorageStatsTooltip() {\n\t\t\tif (!this.storageStats.relative) {\n\t\t\t\treturn ''\n\t\t\t}\n\n\t\t\treturn this.t('files', '{relative}% used', this.storageStats)\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\t/**\n\t\t * Update storage stats every minute\n\t\t * TODO: remove when all views are migrated to Vue\n\t\t */\n\t\tsetInterval(this.throttleUpdateStorageStats, 60 * 1000)\n\n\t\tsubscribe('files:file:created', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:file:deleted', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:file:moved', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:file:updated', this.throttleUpdateStorageStats)\n\n\t\tsubscribe('files:folder:created', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:folder:deleted', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:folder:moved', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:folder:updated', this.throttleUpdateStorageStats)\n\t},\n\n\tmethods: {\n\t\t// From user input\n\t\tdebounceUpdateStorageStats: debounce(200, function(event) {\n\t\t\tthis.updateStorageStats(event)\n\t\t}),\n\t\t// From interval or event bus\n\t\tthrottleUpdateStorageStats: throttle(1000, function(event) {\n\t\t\tthis.updateStorageStats(event)\n\t\t}),\n\n\t\t/**\n\t\t * Update the storage stats\n\t\t * Throttled at max 1 refresh per minute\n\t\t *\n\t\t * @param {Event} [event = null] if user interaction\n\t\t */\n\t\tasync updateStorageStats(event = null) {\n\t\t\tif (this.loadingStorageStats) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.loadingStorageStats = true\n\t\t\ttry {\n\t\t\t\tconst response = await axios.get(generateUrl('/apps/files/api/v1/stats'))\n\t\t\t\tif (!response?.data?.data) {\n\t\t\t\t\tthrow new Error('Invalid storage stats')\n\t\t\t\t}\n\t\t\t\tthis.storageStats = response.data.data\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Could not refresh storage stats', { error })\n\t\t\t\t// Only show to the user if it was manually triggered\n\t\t\t\tif (event) {\n\t\t\t\t\tshowError(t('files', 'Could not refresh storage stats'))\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tthis.loadingStorageStats = false\n\t\t\t}\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// User storage stats display\n.app-navigation-entry__settings-quota {\n\t// Align title with progress and icon\n\t&--not-unlimited::v-deep .app-navigation-entry__title {\n\t\tmargin-top: -4px;\n\t}\n\n\tprogress {\n\t\tposition: absolute;\n\t\tbottom: 10px;\n\t\tmargin-left: 44px;\n\t\twidth: calc(100% - 44px - 22px);\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=style&index=0&id=26c061ec&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=style&index=0&id=26c061ec&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./NavigationQuota.vue?vue&type=template&id=26c061ec&scoped=true&\"\nimport script from \"./NavigationQuota.vue?vue&type=script&lang=js&\"\nexport * from \"./NavigationQuota.vue?vue&type=script&lang=js&\"\nimport style0 from \"./NavigationQuota.vue?vue&type=style&index=0&id=26c061ec&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"26c061ec\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.storageStats)?_c('NcAppNavigationItem',{staticClass:\"app-navigation-entry__settings-quota\",class:{ 'app-navigation-entry__settings-quota--not-unlimited': _vm.storageStats.quota >= 0},attrs:{\"aria-label\":_vm.t('files', 'Storage informations'),\"loading\":_vm.loadingStorageStats,\"name\":_vm.storageStatsTitle,\"title\":_vm.storageStatsTooltip,\"data-cy-files-navigation-settings-quota\":\"\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.debounceUpdateStorageStats.apply(null, arguments)}}},[_c('ChartPie',{attrs:{\"slot\":\"icon\",\"size\":20},slot:\"icon\"}),_vm._v(\" \"),(_vm.storageStats.quota >= 0)?_c('NcProgressBar',{attrs:{\"slot\":\"extra\",\"error\":_vm.storageStats.relative > 80,\"value\":Math.min(_vm.storageStats.relative, 100)},slot:\"extra\"}):_vm._e()],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Setting.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Setting.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div />\n</template>\n<script>\nexport default {\n\tname: 'Setting',\n\tprops: {\n\t\tel: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.$el.appendChild(this.el())\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./Setting.vue?vue&type=template&id=03406edc&\"\nimport script from \"./Setting.vue?vue&type=script&lang=js&\"\nexport * from \"./Setting.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div')\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<NcAppSettingsDialog :open=\"open\"\n\t\t:show-navigation=\"true\"\n\t\t:title=\"t('files', 'Files settings')\"\n\t\t@update:open=\"onClose\">\n\t\t<!-- Settings API-->\n\t\t<NcAppSettingsSection id=\"settings\" :title=\"t('files', 'Files settings')\">\n\t\t\t<NcCheckboxRadioSwitch :checked.sync=\"show_hidden\"\n\t\t\t\t@update:checked=\"setConfig('show_hidden', $event)\">\n\t\t\t\t{{ t('files', 'Show hidden files') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t<NcCheckboxRadioSwitch :checked.sync=\"crop_image_previews\"\n\t\t\t\t@update:checked=\"setConfig('crop_image_previews', $event)\">\n\t\t\t\t{{ t('files', 'Crop image previews') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t</NcAppSettingsSection>\n\n\t\t<!-- Settings API-->\n\t\t<NcAppSettingsSection v-if=\"settings.length !== 0\"\n\t\t\tid=\"more-settings\"\n\t\t\t:title=\"t('files', 'Additional settings')\">\n\t\t\t<template v-for=\"setting in settings\">\n\t\t\t\t<Setting :key=\"setting.name\" :el=\"setting.el\" />\n\t\t\t</template>\n\t\t</NcAppSettingsSection>\n\n\t\t<!-- Webdav URL-->\n\t\t<NcAppSettingsSection id=\"webdav\" :title=\"t('files', 'WebDAV')\">\n\t\t\t<NcInputField id=\"webdav-url-input\"\n\t\t\t\t:show-trailing-button=\"true\"\n\t\t\t\t:success=\"webdavUrlCopied\"\n\t\t\t\t:trailing-button-label=\"t('files', 'Copy to clipboard')\"\n\t\t\t\t:value=\"webdavUrl\"\n\t\t\t\treadonly=\"readonly\"\n\t\t\t\ttype=\"url\"\n\t\t\t\t@focus=\"$event.target.select()\"\n\t\t\t\t@trailing-button-click=\"copyCloudId\">\n\t\t\t\t<template #trailing-button-icon>\n\t\t\t\t\t<Clipboard :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcInputField>\n\t\t\t<em>\n\t\t\t\t<a :href=\"webdavDocs\" target=\"_blank\" rel=\"noreferrer noopener\">\n\t\t\t\t\t{{ t('files', 'Use this address to access your Files via WebDAV') }} ↗\n\t\t\t\t</a>\n\t\t\t</em>\n\t\t</NcAppSettingsSection>\n\t</NcAppSettingsDialog>\n</template>\n\n<script>\nimport NcAppSettingsDialog from '@nextcloud/vue/dist/Components/NcAppSettingsDialog.js'\nimport NcAppSettingsSection from '@nextcloud/vue/dist/Components/NcAppSettingsSection.js'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'\nimport Clipboard from 'vue-material-design-icons/Clipboard.vue'\nimport NcInputField from '@nextcloud/vue/dist/Components/NcInputField'\nimport Setting from '../components/Setting.vue'\n\nimport { emit } from '@nextcloud/event-bus'\nimport { generateRemoteUrl, generateUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { loadState } from '@nextcloud/initial-state'\nimport { showError, showSuccess } from '@nextcloud/dialogs'\nimport { translate } from '@nextcloud/l10n'\nimport axios from '@nextcloud/axios'\n\nconst userConfig = loadState('files', 'config', {\n\tshow_hidden: false,\n\tcrop_image_previews: true,\n})\n\nexport default {\n\tname: 'Settings',\n\tcomponents: {\n\t\tClipboard,\n\t\tNcAppSettingsDialog,\n\t\tNcAppSettingsSection,\n\t\tNcCheckboxRadioSwitch,\n\t\tNcInputField,\n\t\tSetting,\n\t},\n\n\tprops: {\n\t\topen: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\n\t\t\t...userConfig,\n\n\t\t\t// Settings API\n\t\t\tsettings: window.OCA?.Files?.Settings?.settings || [],\n\n\t\t\t// Webdav infos\n\t\t\twebdavUrl: generateRemoteUrl('dav/files/' + encodeURIComponent(getCurrentUser()?.uid)),\n\t\t\twebdavDocs: 'https://docs.nextcloud.com/server/stable/go.php?to=user-webdav',\n\t\t\twebdavUrlCopied: false,\n\t\t}\n\t},\n\n\tbeforeMount() {\n\t\t// Update the settings API entries state\n\t\tthis.settings.forEach(setting => setting.open())\n\t},\n\n\tbeforeDestroy() {\n\t\t// Update the settings API entries state\n\t\tthis.settings.forEach(setting => setting.close())\n\t},\n\n\tmethods: {\n\t\tonClose() {\n\t\t\tthis.$emit('close')\n\t\t},\n\n\t\tsetConfig(key, value) {\n\t\t\temit('files:config:updated', { key, value })\n\t\t\taxios.post(generateUrl('/apps/files/api/v1/config/' + key), {\n\t\t\t\tvalue,\n\t\t\t})\n\t\t},\n\n\t\tasync copyCloudId() {\n\t\t\tdocument.querySelector('input#webdav-url-input').select()\n\n\t\t\tif (!navigator.clipboard) {\n\t\t\t\t// Clipboard API not available\n\t\t\t\tshowError(t('files', 'Clipboard is not available'))\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tawait navigator.clipboard.writeText(this.webdavUrl)\n\t\t\tthis.webdavUrlCopied = true\n\t\t\tshowSuccess(t('files', 'WebDAV URL copied to clipboard'))\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.webdavUrlCopied = false\n\t\t\t}, 5000)\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Settings.vue?vue&type=template&id=54b74cff&scoped=true&\"\nimport script from \"./Settings.vue?vue&type=script&lang=js&\"\nexport * from \"./Settings.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"54b74cff\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcAppSettingsDialog',{attrs:{\"open\":_vm.open,\"show-navigation\":true,\"title\":_vm.t('files', 'Files settings')},on:{\"update:open\":_vm.onClose}},[_c('NcAppSettingsSection',{attrs:{\"id\":\"settings\",\"title\":_vm.t('files', 'Files settings')}},[_c('NcCheckboxRadioSwitch',{attrs:{\"checked\":_vm.show_hidden},on:{\"update:checked\":[function($event){_vm.show_hidden=$event},function($event){return _vm.setConfig('show_hidden', $event)}]}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files', 'Show hidden files'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('NcCheckboxRadioSwitch',{attrs:{\"checked\":_vm.crop_image_previews},on:{\"update:checked\":[function($event){_vm.crop_image_previews=$event},function($event){return _vm.setConfig('crop_image_previews', $event)}]}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files', 'Crop image previews'))+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(_vm.settings.length !== 0)?_c('NcAppSettingsSection',{attrs:{\"id\":\"more-settings\",\"title\":_vm.t('files', 'Additional settings')}},[_vm._l((_vm.settings),function(setting){return [_c('Setting',{key:setting.name,attrs:{\"el\":setting.el}})]})],2):_vm._e(),_vm._v(\" \"),_c('NcAppSettingsSection',{attrs:{\"id\":\"webdav\",\"title\":_vm.t('files', 'WebDAV')}},[_c('NcInputField',{attrs:{\"id\":\"webdav-url-input\",\"show-trailing-button\":true,\"success\":_vm.webdavUrlCopied,\"trailing-button-label\":_vm.t('files', 'Copy to clipboard'),\"value\":_vm.webdavUrl,\"readonly\":\"readonly\",\"type\":\"url\"},on:{\"focus\":function($event){return $event.target.select()},\"trailing-button-click\":_vm.copyCloudId},scopedSlots:_vm._u([{key:\"trailing-button-icon\",fn:function(){return [_c('Clipboard',{attrs:{\"size\":20}})]},proxy:true}])}),_vm._v(\" \"),_c('em',[_c('a',{attrs:{\"href\":_vm.webdavDocs,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'Use this address to access your Files via WebDAV'))+\" ↗\\n\\t\\t\\t\")])])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<NcAppNavigation data-cy-files-navigation>\n\t\t<template #list>\n\t\t\t<NcAppNavigationItem v-for=\"view in parentViews\"\n\t\t\t\t:key=\"view.id\"\n\t\t\t\t:allow-collapse=\"true\"\n\t\t\t\t:data-cy-files-navigation-item=\"view.id\"\n\t\t\t\t:icon=\"view.iconClass\"\n\t\t\t\t:open=\"view.expanded\"\n\t\t\t\t:pinned=\"view.sticky\"\n\t\t\t\t:title=\"view.name\"\n\t\t\t\t:to=\"generateToNavigation(view)\"\n\t\t\t\t@update:open=\"onToggleExpand(view)\">\n\t\t\t\t<NcAppNavigationItem v-for=\"child in childViews[view.id]\"\n\t\t\t\t\t:key=\"child.id\"\n\t\t\t\t\t:data-cy-files-navigation-item=\"child.id\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t:icon=\"child.iconClass\"\n\t\t\t\t\t:title=\"child.name\"\n\t\t\t\t\t:to=\"generateToNavigation(child)\" />\n\t\t\t</NcAppNavigationItem>\n\t\t</template>\n\n\t\t<!-- Non-scrollable navigation bottom elements -->\n\t\t<template #footer>\n\t\t\t<ul class=\"app-navigation-entry__settings\">\n\t\t\t\t<!-- User storage usage statistics -->\n\t\t\t\t<NavigationQuota />\n\n\t\t\t\t<!-- Files settings modal toggle-->\n\t\t\t\t<NcAppNavigationItem :aria-label=\"t('files', 'Open the files app settings')\"\n\t\t\t\t\t:title=\"t('files', 'Files settings')\"\n\t\t\t\t\tdata-cy-files-navigation-settings-button\n\t\t\t\t\t@click.prevent.stop=\"openSettings\">\n\t\t\t\t\t<Cog slot=\"icon\" :size=\"20\" />\n\t\t\t\t</NcAppNavigationItem>\n\t\t\t</ul>\n\t\t</template>\n\n\t\t<!-- Settings modal-->\n\t\t<SettingsModal :open=\"settingsOpened\"\n\t\t\tdata-cy-files-navigation-settings\n\t\t\t@close=\"onSettingsClose\" />\n\t</NcAppNavigation>\n</template>\n\n<script>\nimport { emit, subscribe } from '@nextcloud/event-bus'\nimport { generateUrl } from '@nextcloud/router'\nimport { translate } from '@nextcloud/l10n'\n\nimport axios from '@nextcloud/axios'\nimport Cog from 'vue-material-design-icons/Cog.vue'\nimport NcAppNavigation from '@nextcloud/vue/dist/Components/NcAppNavigation.js'\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\n\nimport logger from '../logger.js'\nimport Navigation from '../services/Navigation.ts'\nimport NavigationQuota from '../components/NavigationQuota.vue'\nimport SettingsModal from './Settings.vue'\n\nexport default {\n\tname: 'Navigation',\n\n\tcomponents: {\n\t\tCog,\n\t\tNcAppNavigation,\n\t\tNcAppNavigationItem,\n\t\tSettingsModal,\n\t\tNavigationQuota,\n\t},\n\n\tprops: {\n\t\t// eslint-disable-next-line vue/prop-name-casing\n\t\tNavigation: {\n\t\t\ttype: Navigation,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tsettingsOpened: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcurrentViewId() {\n\t\t\treturn this.$route?.params?.view || 'files'\n\t\t},\n\n\t\t/** @return {Navigation} */\n\t\tcurrentView() {\n\t\t\treturn this.views.find(view => view.id === this.currentViewId)\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tviews() {\n\t\t\treturn this.Navigation.views\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tparentViews() {\n\t\t\treturn this.views\n\t\t\t\t// filter child views\n\t\t\t\t.filter(view => !view.parent)\n\t\t\t\t// sort views by order\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\treturn a.order - b.order\n\t\t\t\t})\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tchildViews() {\n\t\t\treturn this.views\n\t\t\t\t// filter parent views\n\t\t\t\t.filter(view => !!view.parent)\n\t\t\t\t// create a map of parents and their children\n\t\t\t\t.reduce((list, view) => {\n\t\t\t\t\tlist[view.parent] = [...(list[view.parent] || []), view]\n\t\t\t\t\t// Sort children by order\n\t\t\t\t\tlist[view.parent].sort((a, b) => {\n\t\t\t\t\t\treturn a.order - b.order\n\t\t\t\t\t})\n\t\t\t\t\treturn list\n\t\t\t\t}, {})\n\t\t},\n\t},\n\n\twatch: {\n\t\tcurrentView(view, oldView) {\n\t\t\tlogger.debug('View changed', { id: view.id, view })\n\t\t\tthis.showView(view, oldView)\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\tif (this.currentView) {\n\t\t\tlogger.debug('Navigation mounted. Showing requested view', { view: this.currentView })\n\t\t\tthis.showView(this.currentView)\n\t\t}\n\n\t\tsubscribe('files:legacy-navigation:changed', this.onLegacyNavigationChanged)\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * @param {Navigation} view the new active view\n\t\t * @param {Navigation} oldView the old active view\n\t\t */\n\t\tshowView(view, oldView) {\n\t\t\t// Closing any opened sidebar\n\t\t\twindow?.OCA?.Files?.Sidebar?.close?.()\n\n\t\t\tif (view.legacy) {\n\t\t\t\tconst newAppContent = document.querySelector('#app-content #app-content-' + this.currentView.id + '.viewcontainer')\n\t\t\t\tdocument.querySelectorAll('#app-content .viewcontainer').forEach(el => {\n\t\t\t\t\tel.classList.add('hidden')\n\t\t\t\t})\n\t\t\t\tnewAppContent.classList.remove('hidden')\n\n\t\t\t\t// Triggering legacy navigation events\n\t\t\t\tconst { dir = '/' } = OC.Util.History.parseUrlQuery()\n\t\t\t\tconst params = { itemId: view.id, dir }\n\n\t\t\t\tlogger.debug('Triggering legacy navigation event', params)\n\t\t\t\twindow.jQuery(newAppContent).trigger(new window.jQuery.Event('show', params))\n\t\t\t\twindow.jQuery(newAppContent).trigger(new window.jQuery.Event('urlChanged', params))\n\n\t\t\t}\n\n\t\t\tthis.Navigation.setActive(view)\n\t\t\temit('files:navigation:changed', view)\n\t\t},\n\n\t\t/**\n\t\t * Coming from the legacy files app.\n\t\t * TODO: remove when all views are migrated.\n\t\t *\n\t\t * @param {Navigation} view the new active view\n\t\t */\n\t\tonLegacyNavigationChanged({ id } = { id: 'files' }) {\n\t\t\tconst view = this.Navigation.views.find(view => view.id === id)\n\t\t\tif (view && view.legacy && view.id !== this.currentView.id) {\n\t\t\t\t// Force update the current route as the request comes\n\t\t\t\t// from the legacy files app router\n\t\t\t\tthis.$router.replace({ ...this.$route, params: { view: view.id } })\n\t\t\t\tthis.Navigation.setActive(view)\n\t\t\t\tthis.showView(view)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Expand/collapse a a view with children and permanently\n\t\t * save this setting in the server.\n\t\t *\n\t\t * @param {Navigation} view the view to toggle\n\t\t */\n\t\tonToggleExpand(view) {\n\t\t\t// Invert state\n\t\t\tview.expanded = !view.expanded\n\t\t\taxios.post(generateUrl(`/apps/files/api/v1/toggleShowFolder/${view.id}`), { show: view.expanded })\n\t\t},\n\n\t\t/**\n\t\t * Generate the route to a view\n\t\t *\n\t\t * @param {Navigation} view the view to toggle\n\t\t */\n\t\tgenerateToNavigation(view) {\n\t\t\tif (view.params) {\n\t\t\t\tconst { dir, fileid } = view.params\n\t\t\t\treturn { name: 'filelist', params: view.params, query: { dir, fileid } }\n\t\t\t}\n\t\t\treturn { name: 'filelist', params: { view: view.id } }\n\t\t},\n\n\t\t/**\n\t\t * Open the settings modal\n\t\t */\n\t\topenSettings() {\n\t\t\tthis.settingsOpened = true\n\t\t},\n\n\t\t/**\n\t\t * Close the settings modal\n\t\t */\n\t\tonSettingsClose() {\n\t\t\tthis.settingsOpened = false\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n// TODO: remove when https://github.com/nextcloud/nextcloud-vue/pull/3539 is in\n.app-navigation::v-deep .app-navigation-entry-icon {\n\tbackground-repeat: no-repeat;\n\tbackground-position: center;\n}\n\n.app-navigation > ul.app-navigation__list {\n\t// Use flex gap value for more elegant spacing\n\tpadding-bottom: var(--default-grid-baseline, 4px);\n}\n\n.app-navigation-entry__settings {\n\theight: auto !important;\n\toverflow: hidden !important;\n\tpadding-top: 0 !important;\n\t// Prevent shrinking or growing\n\tflex: 0 0 auto;\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=style&index=0&id=83bb0f06&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=style&index=0&id=83bb0f06&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Navigation.vue?vue&type=template&id=83bb0f06&scoped=true&\"\nimport script from \"./Navigation.vue?vue&type=script&lang=js&\"\nexport * from \"./Navigation.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Navigation.vue?vue&type=style&index=0&id=83bb0f06&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"83bb0f06\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcAppNavigation',{attrs:{\"data-cy-files-navigation\":\"\"},scopedSlots:_vm._u([{key:\"list\",fn:function(){return _vm._l((_vm.parentViews),function(view){return _c('NcAppNavigationItem',{key:view.id,attrs:{\"allow-collapse\":true,\"data-cy-files-navigation-item\":view.id,\"icon\":view.iconClass,\"open\":view.expanded,\"pinned\":view.sticky,\"title\":view.name,\"to\":_vm.generateToNavigation(view)},on:{\"update:open\":function($event){return _vm.onToggleExpand(view)}}},_vm._l((_vm.childViews[view.id]),function(child){return _c('NcAppNavigationItem',{key:child.id,attrs:{\"data-cy-files-navigation-item\":child.id,\"exact\":true,\"icon\":child.iconClass,\"title\":child.name,\"to\":_vm.generateToNavigation(child)}})}),1)})},proxy:true},{key:\"footer\",fn:function(){return [_c('ul',{staticClass:\"app-navigation-entry__settings\"},[_c('NavigationQuota'),_vm._v(\" \"),_c('NcAppNavigationItem',{attrs:{\"aria-label\":_vm.t('files', 'Open the files app settings'),\"title\":_vm.t('files', 'Files settings'),\"data-cy-files-navigation-settings-button\":\"\"},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.openSettings.apply(null, arguments)}}},[_c('Cog',{attrs:{\"slot\":\"icon\",\"size\":20},slot:\"icon\"})],1)],1)]},proxy:true}])},[_vm._v(\" \"),_vm._v(\" \"),_c('SettingsModal',{attrs:{\"open\":_vm.settingsOpened,\"data-cy-files-navigation-settings\":\"\"},on:{\"close\":_vm.onSettingsClose}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author Gary Kim <gary@garykim.dev>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class Settings {\n\n\t_settings\n\n\tconstructor() {\n\t\tthis._settings = []\n\t\tconsole.debug('OCA.Files.Settings initialized')\n\t}\n\n\t/**\n\t * Register a new setting\n\t *\n\t * @since 19.0.0\n\t * @param {OCA.Files.Settings.Setting} view element to add to settings\n\t * @return {boolean} whether registering was successful\n\t */\n\tregister(view) {\n\t\tif (this._settings.filter(e => e.name === view.name).length > 0) {\n\t\t\tconsole.error('A setting with the same name is already registered')\n\t\t\treturn false\n\t\t}\n\t\tthis._settings.push(view)\n\t\treturn true\n\t}\n\n\t/**\n\t * All settings elements\n\t *\n\t * @return {OCA.Files.Settings.Setting[]} All currently registered settings\n\t */\n\tget settings() {\n\t\treturn this._settings\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Gary Kim <gary@garykim.dev>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class Setting {\n\n\t_close\n\t_el\n\t_name\n\t_open\n\n\t/**\n\t * Create a new files app setting\n\t *\n\t * @since 19.0.0\n\t * @param {string} name the name of this setting\n\t * @param {object} component the component\n\t * @param {Function} component.el function that returns an unmounted dom element to be added\n\t * @param {Function} [component.open] callback for when setting is added\n\t * @param {Function} [component.close] callback for when setting is closed\n\t */\n\tconstructor(name, { el, open, close }) {\n\t\tthis._name = name\n\t\tthis._el = el\n\t\tthis._open = open\n\t\tthis._close = close\n\n\t\tif (typeof this._open !== 'function') {\n\t\t\tthis._open = () => {}\n\t\t}\n\n\t\tif (typeof this._close !== 'function') {\n\t\t\tthis._close = () => {}\n\t\t}\n\t}\n\n\tget name() {\n\t\treturn this._name\n\t}\n\n\tget el() {\n\t\treturn this._el\n\t}\n\n\tget open() {\n\t\treturn this._open\n\t}\n\n\tget close() {\n\t\treturn this._close\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Vue from 'vue'\nimport Router from 'vue-router'\nimport { generateUrl } from '@nextcloud/router'\nimport { stringify } from 'query-string'\n\nVue.use(Router)\n\nconst router = new Router({\n\tmode: 'history',\n\n\t// if index.php is in the url AND we got this far, then it's working:\n\t// let's keep using index.php in the url\n\tbase: generateUrl('/apps/files', ''),\n\tlinkActiveClass: 'active',\n\n\troutes: [\n\t\t{\n\t\t\tpath: '/',\n\t\t\t// Pretending we're using the default view\n\t\t\talias: '/files',\n\t\t},\n\t\t{\n\t\t\tpath: '/:view/:fileid?',\n\t\t\tname: 'filelist',\n\t\t\tprops: true,\n\t\t},\n\t],\n\n\t// Custom stringifyQuery to prevent encoding of slashes in the url\n\tstringifyQuery(query) {\n\t\tconst result = stringify(query).replace(/%2F/gmi, '/')\n\t\treturn result ? ('?' + result) : ''\n\t},\n})\n\nexport default router\n","import './templates.js'\nimport './legacy/filelistSearch.js'\nimport processLegacyFilesViews from './legacy/navigationMapper.js'\n\nimport Vue from 'vue'\nimport NavigationService from './services/Navigation.ts'\nimport NavigationView from './views/Navigation.vue'\n\nimport SettingsService from './services/Settings.js'\nimport SettingsModel from './models/Setting.js'\n\nimport router from './router/router.js'\n\n// Init private and public Files namespace\nwindow.OCA.Files = window.OCA.Files ?? {}\nwindow.OCP.Files = window.OCP.Files ?? {}\n\n// Init Navigation Service\nconst Navigation = new NavigationService()\nObject.assign(window.OCP.Files, { Navigation })\n\n// Init Files App Settings Service\nconst Settings = new SettingsService()\nObject.assign(window.OCA.Files, { Settings })\nObject.assign(window.OCA.Files.Settings, { Setting: SettingsModel })\n\n// Init Navigation View\nconst View = Vue.extend(NavigationView)\nconst FilesNavigationRoot = new View({\n\tname: 'FilesNavigationRoot',\n\tpropsData: {\n\t\tNavigation,\n\t},\n\trouter,\n})\nFilesNavigationRoot.$mount('#app-navigation-files')\n\n// Init legacy files views\nprocessLegacyFilesViews()\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-navigation-entry__settings-quota--not-unlimited[data-v-26c061ec] .app-navigation-entry__title{margin-top:-4px}.app-navigation-entry__settings-quota progress[data-v-26c061ec]{position:absolute;bottom:10px;margin-left:44px;width:calc(100% - 44px - 22px)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/NavigationQuota.vue\"],\"names\":[],\"mappings\":\"AAIC,mGACC,eAAA,CAGD,gEACC,iBAAA,CACA,WAAA,CACA,gBAAA,CACA,8BAAA\",\"sourcesContent\":[\"\\n// User storage stats display\\n.app-navigation-entry__settings-quota {\\n\\t// Align title with progress and icon\\n\\t&--not-unlimited::v-deep .app-navigation-entry__title {\\n\\t\\tmargin-top: -4px;\\n\\t}\\n\\n\\tprogress {\\n\\t\\tposition: absolute;\\n\\t\\tbottom: 10px;\\n\\t\\tmargin-left: 44px;\\n\\t\\twidth: calc(100% - 44px - 22px);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".template-picker__item[data-v-440aea22]{display:flex}.template-picker__label[data-v-440aea22]{display:flex;align-items:center;flex:1 1;flex-direction:column}.template-picker__label[data-v-440aea22],.template-picker__label *[data-v-440aea22]{cursor:pointer;user-select:none}.template-picker__label[data-v-440aea22]::before{display:none !important}.template-picker__preview[data-v-440aea22]{display:block;overflow:hidden;flex:1 1;width:var(--width);min-height:var(--height);max-height:var(--height);padding:0;border:var(--border) solid var(--color-border);border-radius:var(--border-radius-large)}input:checked+label>.template-picker__preview[data-v-440aea22]{border-color:var(--color-primary)}.template-picker__preview--failed[data-v-440aea22]{display:flex}.template-picker__image[data-v-440aea22]{max-width:100%;background-color:var(--color-main-background);object-fit:cover}.template-picker__preview--failed .template-picker__image[data-v-440aea22]{width:calc(var(--margin)*8);margin:auto;background-color:rgba(0,0,0,0) !important;object-fit:initial}.template-picker__title[data-v-440aea22]{overflow:hidden;max-width:calc(var(--width) + 4px);padding:var(--margin);white-space:nowrap;text-overflow:ellipsis}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/TemplatePreview.vue\"],\"names\":[],\"mappings\":\"AAGC,wCACC,YAAA,CAGD,yCACC,YAAA,CAEA,kBAAA,CACA,QAAA,CACA,qBAAA,CAEA,oFACC,cAAA,CACA,gBAAA,CAGD,iDACC,uBAAA,CAIF,2CACC,aAAA,CACA,eAAA,CAEA,QAAA,CACA,kBAAA,CACA,wBAAA,CACA,wBAAA,CACA,SAAA,CACA,8CAAA,CACA,wCAAA,CAEA,+DACC,iCAAA,CAGD,mDAEC,YAAA,CAIF,yCACC,cAAA,CACA,6CAAA,CAEA,gBAAA,CAID,2EACC,2BAAA,CAEA,WAAA,CACA,yCAAA,CAEA,kBAAA,CAGD,yCACC,eAAA,CAEA,kCAAA,CACA,qBAAA,CACA,kBAAA,CACA,sBAAA\",\"sourcesContent\":[\"\\n\\n.template-picker {\\n\\t&__item {\\n\\t\\tdisplay: flex;\\n\\t}\\n\\n\\t&__label {\\n\\t\\tdisplay: flex;\\n\\t\\t// Align in the middle of the grid\\n\\t\\talign-items: center;\\n\\t\\tflex: 1 1;\\n\\t\\tflex-direction: column;\\n\\n\\t\\t&, * {\\n\\t\\t\\tcursor: pointer;\\n\\t\\t\\tuser-select: none;\\n\\t\\t}\\n\\n\\t\\t&::before {\\n\\t\\t\\tdisplay: none !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&__preview {\\n\\t\\tdisplay: block;\\n\\t\\toverflow: hidden;\\n\\t\\t// Stretch so all entries are the same width\\n\\t\\tflex: 1 1;\\n\\t\\twidth: var(--width);\\n\\t\\tmin-height: var(--height);\\n\\t\\tmax-height: var(--height);\\n\\t\\tpadding: 0;\\n\\t\\tborder: var(--border) solid var(--color-border);\\n\\t\\tborder-radius: var(--border-radius-large);\\n\\n\\t\\tinput:checked + label > & {\\n\\t\\t\\tborder-color: var(--color-primary);\\n\\t\\t}\\n\\n\\t\\t&--failed {\\n\\t\\t\\t// Make sure to properly center fallback icon\\n\\t\\t\\tdisplay: flex;\\n\\t\\t}\\n\\t}\\n\\n\\t&__image {\\n\\t\\tmax-width: 100%;\\n\\t\\tbackground-color: var(--color-main-background);\\n\\n\\t\\tobject-fit: cover;\\n\\t}\\n\\n\\t// Failed preview, fallback to mime icon\\n\\t&__preview--failed &__image {\\n\\t\\twidth: calc(var(--margin) * 8);\\n\\t\\t// Center mime icon\\n\\t\\tmargin: auto;\\n\\t\\tbackground-color: transparent !important;\\n\\n\\t\\tobject-fit: initial;\\n\\t}\\n\\n\\t&__title {\\n\\t\\toverflow: hidden;\\n\\t\\t// also count preview border\\n\\t\\tmax-width: calc(var(--width) + 2*2px);\\n\\t\\tpadding: var(--margin);\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-navigation[data-v-83bb0f06] .app-navigation-entry-icon{background-repeat:no-repeat;background-position:center}.app-navigation>ul.app-navigation__list[data-v-83bb0f06]{padding-bottom:var(--default-grid-baseline, 4px)}.app-navigation-entry__settings[data-v-83bb0f06]{height:auto !important;overflow:hidden !important;padding-top:0 !important;flex:0 0 auto}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/Navigation.vue\"],\"names\":[],\"mappings\":\"AAEA,4DACC,2BAAA,CACA,0BAAA,CAGD,yDAEC,gDAAA,CAGD,iDACC,sBAAA,CACA,0BAAA,CACA,wBAAA,CAEA,aAAA\",\"sourcesContent\":[\"\\n// TODO: remove when https://github.com/nextcloud/nextcloud-vue/pull/3539 is in\\n.app-navigation::v-deep .app-navigation-entry-icon {\\n\\tbackground-repeat: no-repeat;\\n\\tbackground-position: center;\\n}\\n\\n.app-navigation > ul.app-navigation__list {\\n\\t// Use flex gap value for more elegant spacing\\n\\tpadding-bottom: var(--default-grid-baseline, 4px);\\n}\\n\\n.app-navigation-entry__settings {\\n\\theight: auto !important;\\n\\toverflow: hidden !important;\\n\\tpadding-top: 0 !important;\\n\\t// Prevent shrinking or growing\\n\\tflex: 0 0 auto;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".templates-picker__form[data-v-55dd9121]{padding:calc(var(--margin)*2);padding-bottom:0}.templates-picker__form h2[data-v-55dd9121]{text-align:center;font-weight:bold;margin:var(--margin) 0 calc(var(--margin)*2)}.templates-picker__list[data-v-55dd9121]{display:grid;grid-gap:calc(var(--margin)*2);grid-auto-columns:1fr;max-width:calc(var(--fullwidth)*6);grid-template-columns:repeat(auto-fit, var(--fullwidth));grid-auto-rows:1fr;justify-content:center}.templates-picker__buttons[data-v-55dd9121]{display:flex;justify-content:space-between;padding:calc(var(--margin)*2) var(--margin);position:sticky;bottom:0;background-image:linear-gradient(0, var(--gradient-main-background))}.templates-picker__buttons button[data-v-55dd9121],.templates-picker__buttons input[type=submit][data-v-55dd9121]{height:44px}.templates-picker[data-v-55dd9121] .modal-container{position:relative}.templates-picker__loading[data-v-55dd9121]{position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;margin:0;background-color:var(--color-main-background-translucent)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/TemplatePicker.vue\"],\"names\":[],\"mappings\":\"AAEC,yCACC,6BAAA,CAEA,gBAAA,CAEA,4CACC,iBAAA,CACA,gBAAA,CACA,4CAAA,CAIF,yCACC,YAAA,CACA,8BAAA,CACA,qBAAA,CAEA,kCAAA,CACA,wDAAA,CAEA,kBAAA,CAEA,sBAAA,CAGD,4CACC,YAAA,CACA,6BAAA,CACA,2CAAA,CACA,eAAA,CACA,QAAA,CACA,oEAAA,CAEA,kHACC,WAAA,CAKF,oDACC,iBAAA,CAGD,4CACC,iBAAA,CACA,KAAA,CACA,MAAA,CACA,sBAAA,CACA,UAAA,CACA,WAAA,CACA,QAAA,CACA,yDAAA\",\"sourcesContent\":[\"\\n.templates-picker {\\n\\t&__form {\\n\\t\\tpadding: calc(var(--margin) * 2);\\n\\t\\t// Will be handled by the buttons\\n\\t\\tpadding-bottom: 0;\\n\\n\\t\\th2 {\\n\\t\\t\\ttext-align: center;\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\tmargin: var(--margin) 0 calc(var(--margin) * 2);\\n\\t\\t}\\n\\t}\\n\\n\\t&__list {\\n\\t\\tdisplay: grid;\\n\\t\\tgrid-gap: calc(var(--margin) * 2);\\n\\t\\tgrid-auto-columns: 1fr;\\n\\t\\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\\n\\t\\tmax-width: calc(var(--fullwidth) * 6);\\n\\t\\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\\n\\t\\t// Make sure all rows are the same height\\n\\t\\tgrid-auto-rows: 1fr;\\n\\t\\t// Center the columns set\\n\\t\\tjustify-content: center;\\n\\t}\\n\\n\\t&__buttons {\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: space-between;\\n\\t\\tpadding: calc(var(--margin) * 2) var(--margin);\\n\\t\\tposition: sticky;\\n\\t\\tbottom: 0;\\n\\t\\tbackground-image: linear-gradient(0, var(--gradient-main-background));\\n\\n\\t\\tbutton, input[type='submit'] {\\n\\t\\t\\theight: 44px;\\n\\t\\t}\\n\\t}\\n\\n\\t// Make sure we're relative for the loading emptycontent on top\\n\\t::v-deep .modal-container {\\n\\t\\tposition: relative;\\n\\t}\\n\\n\\t&__loading {\\n\\t\\tposition: absolute;\\n\\t\\ttop: 0;\\n\\t\\tleft: 0;\\n\\t\\tjustify-content: center;\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\t\\tmargin: 0;\\n\\t\\tbackground-color: var(--color-main-background-translucent);\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 2181;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2181: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], function() { return __webpack_require__(27249); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","getCurrentDirectory","currentDirInfo","OCA","Files","App","currentFileList","dirInfo","path","name","replace","getTemplates","axios","generateOcsUrl","response","data","ocs","createFromTemplate","filePath","templatePath","templateType","inheritAttrs","props","basename","type","required","checked","default","fileid","filename","previewUrl","hasPreview","mime","ratio","failedPreview","computed","nameWithoutExt","id","realPreviewUrl","getCurrentUser","document","getElementById","value","pathSections","startsWith","split","relativePath","forEach","section","encodeURIComponent","mimeIcon","methods","onCheck","onFailure","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_c","_self","staticClass","attrs","domProps","on","_v","class","_s","components","NcEmptyContent","NcModal","TemplatePreview","logger","loading","opened","provider","emptyTemplate","selectedTemplate","style","open","templates","fetchedProvider","close","onSubmit","currentDirectory","fileList","extension","normalize","fileInfo","model","filesClient","fileAction","$file","dir","fileActions","fileInfoModel","console","showError","$event","preventDefault","stopPropagation","apply","arguments","t","_b","_l","template","key","_e","getLoggerBuilder","setApp","detectUser","build","Vue","n","TemplatePickerRoot","createElement","body","appendChild","loadState","templatesPath","debug","TemplatePicker","TemplatePickerView","propsData","$mount","window","addEventListener","initTemplatesPlugin","attach","menu","addMenuEntry","displayName","templateName","iconClass","fileType","actionHandler","initTemplatesFolder","removeMenuEntry","OC","Plugins","register","index","newTemplatePlugin","app","label","FilesPlugin","copySystemTemplates","changeDirectory","template_path","error","subscribe","query","setFilter","registerLegacyView","order","icon","parent","classes","expanded","params","OCP","Navigation","legacy","sticky","includes","view","isValidNavigation","isUniqueNavigation","_views","e","Error","message","push","_currentView","views","find","search","getFiles","isSvg","columns","isValidColumn","emptyView","column","title","property","sortFunction","summary","ChartPie","NcAppNavigationItem","NcProgressBar","loadingStorageStats","storageStats","storageStatsTitle","usedQuotaByte","used","quota","storageStatsTooltip","beforeMount","setInterval","debounceUpdateStorageStats","throttleUpdateStorageStats","updateStorageStats","event","slot","relative","Math","min","el","mounted","show_hidden","crop_image_previews","Clipboard","NcAppSettingsDialog","NcAppSettingsSection","NcCheckboxRadioSwitch","NcInputField","Setting","userConfig","settings","webdavUrl","webdavDocs","webdavUrlCopied","beforeDestroy","onClose","setConfig","emit","copyCloudId","navigator","showSuccess","setTimeout","length","setting","target","select","scopedSlots","_u","fn","proxy","Cog","NcAppNavigation","SettingsModal","NavigationQuota","settingsOpened","currentViewId","currentView","parentViews","filter","sort","childViews","reduce","list","watch","showView","newAppContent","itemId","onLegacyNavigationChanged","onToggleExpand","show","generateToNavigation","openSettings","onSettingsClose","child","Settings","_settings","_name","_el","_open","_close","Router","mode","base","generateUrl","linkActiveClass","routes","alias","stringifyQuery","result","stringify","NavigationService","Object","assign","legacyViews","SettingsService","SettingsModel","NavigationView","router","values","sublist","subview","___CSS_LOADER_EXPORT___","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","O","chunkIds","priority","notFulfilled","Infinity","i","fulfilled","j","keys","every","splice","r","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","nc","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
diff --git a/dist/files_trashbin-files_trashbin.js b/dist/files_trashbin-files_trashbin.js
index 77813b5fb6e..17f7ca1afa7 100644
--- a/dist/files_trashbin-files_trashbin.js
+++ b/dist/files_trashbin-files_trashbin.js
@@ -1,3 +1,3 @@
/*! For license information please see files_trashbin-files_trashbin.js.LICENSE.txt */
-!function(){var e,i={6564:function(){OCA.Trashbin={},OCA.Trashbin.App={_initialized:!1,client:null,initialize:function(e){if(!this._initialized){this._initialized=!0,this.client=new OC.Files.Client({host:OC.getHost(),port:OC.getPort(),root:OC.linkToRemoteBase("dav")+"/trashbin/"+OC.getCurrentUser().uid,useHTTPS:"https"===OC.getProtocol()});var i=OC.Util.History.parseUrlQuery();this.fileList=new OCA.Trashbin.FileList($("#app-content-trashbin"),{fileActions:this._createFileActions(),detailsViewEnabled:!1,scrollTo:i.scrollto,config:OCA.Files.App.getFilesConfig(),multiSelectMenu:[{name:"restore",displayName:t("files_trashbin","Restore"),iconClass:"icon-history"},{name:"delete",displayName:t("files_trashbin","Delete permanently"),iconClass:"icon-delete"}],client:this.client,shown:!0})}},_createFileActions:function(){var e=this.client,i=new OCA.Files.FileActions;return i.register("dir","Open",OC.PERMISSION_READ,"",(function(e,t){var i=t.fileList.getCurrentDirectory();t.fileList.changeDirectory(OC.joinPaths(i,e))})),i.setDefault("dir","Open"),i.registerAction({name:"Restore",displayName:t("files_trashbin","Restore"),type:OCA.Files.FileActions.TYPE_INLINE,mime:"all",permissions:OC.PERMISSION_READ,iconClass:"icon-history",actionHandler:function(i,n){var r=n.fileList,a=r.findFileEl(i);r.showFileBusyState(a,!0);var s=n.fileList.getCurrentDirectory();e.move(OC.joinPaths("trash",s,i),OC.joinPaths("restore",i),!0).then(r._removeCallback.bind(r,[i]),(function(){r.showFileBusyState(a,!1),OC.Notification.show(t("files_trashbin","Error while restoring file from trash bin"))}))}}),i.registerAction({name:"Delete",displayName:t("files_trashbin","Delete permanently"),mime:"all",permissions:OC.PERMISSION_READ,iconClass:"icon-delete",render:function(e,n,r){var a=i._makeActionLink(e,r);return a.attr("original-title",t("files_trashbin","Delete permanently")),a.children("img").attr("alt",t("files_trashbin","Delete permanently")),r.$file.find("td:last").append(a),a},actionHandler:function(i,n){var r=n.fileList;$(".tipsy").remove();var a=r.findFileEl(i);r.showFileBusyState(a,!0);var s=n.fileList.getCurrentDirectory();e.remove(OC.joinPaths("trash",s,i)).then(r._removeCallback.bind(r,[i]),(function(){r.showFileBusyState(a,!1),OC.Notification.show(t("files_trashbin","Error while removing file from trash bin"))}))}}),i}},window.addEventListener("DOMContentLoaded",(function(){$("#app-content-trashbin").one("show",(function(){OCA.Trashbin.App.initialize($("#app-content-trashbin"))}))}))},92832:function(){!function(){var e=new RegExp(/^(.+)\.d[0-9]+$/),i="{http://nextcloud.org/ns}trashbin-filename",n="{http://nextcloud.org/ns}trashbin-deletion-time",r="{http://nextcloud.org/ns}trashbin-original-location",a="{http://nextcloud.org/ns}trashbin-title";function s(t){t=OC.basename(t);var i=e.exec(t);return i&&i.length>1&&(t=i[1]),t}var o=function(e,t){this.client=t.client,this.initialize(e,t)};o.prototype=_.extend({},OCA.Files.FileList.prototype,{id:"trashbin",appName:t("files_trashbin","Deleted files"),client:null,initialize:function(){this.client.addFileInfoParser((function(e,t){var s=e.propStat[0].properties,o=s[r],l=s[a];return{displayName:s[i],mtime:1e3*parseInt(s[n],10),hasPreview:!0,path:o,extraData:l}}));var e=OCA.Files.FileList.prototype.initialize.apply(this,arguments);return this.$el.find(".undelete").click("click",_.bind(this._onClickRestoreSelected,this)),this.setSort("mtime","desc"),this.breadcrumb._makeCrumbs=function(){for(var e=OCA.Files.BreadCrumb.prototype._makeCrumbs.apply(this,[].concat(Array.prototype.slice.call(arguments),["icon-delete no-hover"])),t=1;t<e.length;t++)e[t].name=s(e[t].name);return e},OC.Plugins.attach("OCA.Trashbin.FileList",this),e},getDirectoryPermissions:function(){return OC.PERMISSION_READ|OC.PERMISSION_DELETE},_setCurrentDir:function(e){OCA.Files.FileList.prototype._setCurrentDir.apply(this,arguments);var t=OC.basename(e);""!==t&&this.setPageTitle(s(t))},_createRow:function(){var e=OCA.Files.FileList.prototype._createRow.apply(this,arguments);return e.find("td.filesize").remove(),e},getAjaxUrl:function(e,t){var i="";return t&&(i="?"+OC.buildQueryString(t)),OC.filePath("files_trashbin","ajax",e+".php")+i},setupUploadEvents:function(){},linkTo:function(e){return OC.linkTo("files","index.php")+"?view=trashbin&dir="+encodeURIComponent(e).replace(/%2F/g,"/")},elementToFile:function(e){var t=OCA.Files.FileList.prototype.elementToFile(e);return"/"===this.getCurrentDirectory()&&(t.displayName=s(t.name)),delete t.size,t},updateEmptyContent:function(){var e=this.$fileList.find("tr:first").exists();this.$el.find(".emptyfilelist.emptycontent").toggleClass("hidden",e),this.$el.find(".files-filestable th").toggleClass("hidden",!e)},_removeCallback:function(e){for(var t,i=0;i<e.length;i++)t=this.remove(OC.basename(e[i]),{updateSummary:!1}),this.fileSummary.remove({type:t.attr("data-type"),size:t.attr("data-size")});this.fileSummary.update(),this.updateEmptyContent()},_onClickRestoreSelected:function(e){e.preventDefault();for(var i=this,n=_.pluck(this.getSelectedFiles(),"name"),r=0;r<n.length;r++){var a=this.findFileEl(n[r]);this.showFileBusyState(a,!0)}this.fileMultiSelectMenu.toggleLoading("restore",!0);var s=n.map((function(e){return i.client.move(OC.joinPaths("trash",i.getCurrentDirectory(),e),OC.joinPaths("restore",e),!0).then((function(){i._removeCallback([e])}))}));return Promise.all(s).then((function(){i.fileMultiSelectMenu.toggleLoading("restore",!1)}),(function(){OC.Notification.show(t("files_trashbin","Error while restoring files from trash bin"))}))},_onClickDeleteSelected:function(e){e.preventDefault();for(var i=this,n=this.$el.find(".select-all").is(":checked"),r=_.pluck(this.getSelectedFiles(),"name"),a=0;a<r.length;a++){var s=this.findFileEl(r[a]);this.showFileBusyState(s,!0)}if(n)return this.client.remove(OC.joinPaths("trash",this.getCurrentDirectory())).then((function(){i.hideMask(),i.setFiles([])}),(function(){OC.Notification.show(t("files_trashbin","Error while emptying trash bin"))}));this.fileMultiSelectMenu.toggleLoading("delete",!0);var o=r.map((function(e){return i.client.remove(OC.joinPaths("trash",i.getCurrentDirectory(),e)).then((function(){i._removeCallback([e])}))}));return Promise.all(o).then((function(){i.fileMultiSelectMenu.toggleLoading("delete",!1)}),(function(){OC.Notification.show(t("files_trashbin","Error while removing files from trash bin"))}))},_onClickFile:function(e){var t=$(this).parent().parent().data("mime");return"httpd/unix-directory"!==t&&e.preventDefault(),OCA.Files.FileList.prototype._onClickFile.apply(this,arguments)},generatePreviewUrl:function(e){return OC.generateUrl("/apps/files_trashbin/preview?")+$.param(e)},getDownloadUrl:function(){return"#"},getDefaultActionUrl:function(){return"#"},updateStorageStatistics:function(){},isSelectedDeletable:function(){return!0},_getWebdavProperties:function(){return[i,n,r,a].concat(this.filesClient.getPropfindProperties())},reload:function(){var e;this._selectedFiles={},this._selectionSummary.clear(),this.$el.find(".select-all").prop("checked",!1),this.showMask(),null!==(e=this._reloadCall)&&void 0!==e&&e.abort&&this._reloadCall.abort(),this._reloadCall=this.client.getFolderContents("trash/"+this.getCurrentDirectory(),{includeParent:!1,properties:this._getWebdavProperties()});var t=this.reloadCallback.bind(this);return this._reloadCall.then(t,t)},reloadCallback:function(e,i){return delete this._reloadCall,this.hideMask(),!(401===e||(403===e?(this.changeDirectory("/"),OC.Notification.show(t("files","This operation is forbidden")),1):500===e?(this.changeDirectory("/"),OC.Notification.show(t("files","This directory is unavailable, please check the logs or contact the administrator")),1):404===e?(this.changeDirectory("/"),1):(0===e||this.setFiles(i),0)))}}),OCA.Trashbin.FileList=o}()},69845:function(e,t,i){"use strict";i(6564),i(92832);var n=i(93379),r=i.n(n),a=i(7795),s=i.n(a),o=i(90569),l=i.n(o),c=i(3565),h=i.n(c),u=i(19216),f=i.n(u),d=i(44589),p=i.n(d),m=i(81412),C={};C.styleTagTransform=p(),C.setAttributes=h(),C.insert=l().bind(null,"head"),C.domAPI=s(),C.insertStyleElement=f(),r()(m.Z,C),m.Z&&m.Z.locals&&m.Z.locals,window.OCA.Trashbin=OCA.Trashbin},81412:function(e,t,i){"use strict";var n=i(87537),r=i.n(n),a=i(23645),s=i.n(a)()(r());s.push([e.id,"#app-content-trashbin tbody tr[data-type=file] td a.name,#app-content-trashbin tbody tr[data-type=file] td a.name span.nametext,#app-content-trashbin tbody tr[data-type=file] td a.name span.nametext span{cursor:default}#app-content-trashbin .summary :last-child{padding:0}#app-content-trashbin .files-filestable .summary .filesize{display:none}","",{version:3,sources:["webpack://./apps/files_trashbin/src/trash.scss"],names:[],mappings:"AASA,4MAGC,cAAA,CAGD,2CACC,SAAA,CAED,2DACC,YAAA",sourcesContent:['/*\n * Copyright (c) 2014\n *\n * This file is licensed under the Affero General Public License version 3\n * or later.\n *\n * See the COPYING-README file.\n *\n */\n#app-content-trashbin tbody tr[data-type="file"] td a.name,\n#app-content-trashbin tbody tr[data-type="file"] td a.name span.nametext,\n#app-content-trashbin tbody tr[data-type="file"] td a.name span.nametext span {\n\tcursor: default;\n}\n\n#app-content-trashbin .summary :last-child {\n\tpadding: 0;\n}\n#app-content-trashbin .files-filestable .summary .filesize {\n\tdisplay: none;\n}\n\n'],sourceRoot:""}]),t.Z=s}},n={};function r(e){var t=n[e];if(void 0!==t)return t.exports;var a=n[e]={id:e,loaded:!1,exports:{}};return i[e].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}r.m=i,e=[],r.O=function(t,i,n,a){if(!i){var s=1/0;for(h=0;h<e.length;h++){i=e[h][0],n=e[h][1],a=e[h][2];for(var o=!0,l=0;l<i.length;l++)(!1&a||s>=a)&&Object.keys(r.O).every((function(e){return r.O[e](i[l])}))?i.splice(l--,1):(o=!1,a<s&&(s=a));if(o){e.splice(h--,1);var c=n();void 0!==c&&(t=c)}}return t}a=a||0;for(var h=e.length;h>0&&e[h-1][2]>a;h--)e[h]=e[h-1];e[h]=[i,n,a]},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},r.d=function(e,t){for(var i in t)r.o(t,i)&&!r.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e},r.j=2325,function(){r.b=document.baseURI||self.location.href;var e={2325:0};r.O.j=function(t){return 0===e[t]};var t=function(t,i){var n,a,s=i[0],o=i[1],l=i[2],c=0;if(s.some((function(t){return 0!==e[t]}))){for(n in o)r.o(o,n)&&(r.m[n]=o[n]);if(l)var h=l(r)}for(t&&t(i);c<s.length;c++)a=s[c],r.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return r.O(h)},i=self.webpackChunknextcloud=self.webpackChunknextcloud||[];i.forEach(t.bind(null,0)),i.push=t.bind(null,i.push.bind(i))}(),r.nc=void 0;var a=r.O(void 0,[7874],(function(){return r(69845)}));a=r.O(a)}();
-//# sourceMappingURL=files_trashbin-files_trashbin.js.map?v=4b7d76edf5825c8f4d41 \ No newline at end of file
+!function(){var e,i={6564:function(){OCA.Trashbin={},OCA.Trashbin.App={_initialized:!1,client:null,initialize:function(e){if(!this._initialized){this._initialized=!0,this.client=new OC.Files.Client({host:OC.getHost(),port:OC.getPort(),root:OC.linkToRemoteBase("dav")+"/trashbin/"+OC.getCurrentUser().uid,useHTTPS:"https"===OC.getProtocol()});var i=OC.Util.History.parseUrlQuery();this.fileList=new OCA.Trashbin.FileList($("#app-content-trashbin"),{fileActions:this._createFileActions(),detailsViewEnabled:!1,scrollTo:i.scrollto,config:OCA.Files.App.getFilesConfig(),multiSelectMenu:[{name:"restore",displayName:t("files_trashbin","Restore"),iconClass:"icon-history"},{name:"delete",displayName:t("files_trashbin","Delete permanently"),iconClass:"icon-delete"}],client:this.client,shown:!0})}},_createFileActions:function(){var e=this.client,i=new OCA.Files.FileActions;return i.register("dir","Open",OC.PERMISSION_READ,"",(function(e,t){var i=t.fileList.getCurrentDirectory();t.fileList.changeDirectory(OC.joinPaths(i,e))})),i.setDefault("dir","Open"),i.registerAction({name:"Restore",displayName:t("files_trashbin","Restore"),type:OCA.Files.FileActions.TYPE_INLINE,mime:"all",permissions:OC.PERMISSION_READ,iconClass:"icon-history",actionHandler:function(i,n){var r=n.fileList,a=r.findFileEl(i);r.showFileBusyState(a,!0);var o=n.fileList.getCurrentDirectory();e.move(OC.joinPaths("trash",o,i),OC.joinPaths("restore",i),!0).then(r._removeCallback.bind(r,[i]),(function(){r.showFileBusyState(a,!1),OC.Notification.show(t("files_trashbin","Error while restoring file from trash bin"))}))}}),i.registerAction({name:"Delete",displayName:t("files_trashbin","Delete permanently"),mime:"all",permissions:OC.PERMISSION_READ,iconClass:"icon-delete",render:function(e,n,r){var a=i._makeActionLink(e,r);return a.attr("original-title",t("files_trashbin","Delete permanently")),a.children("img").attr("alt",t("files_trashbin","Delete permanently")),r.$file.find("td:last").append(a),a},actionHandler:function(i,n){var r=n.fileList;$(".tipsy").remove();var a=r.findFileEl(i);r.showFileBusyState(a,!0);var o=n.fileList.getCurrentDirectory();e.remove(OC.joinPaths("trash",o,i)).then(r._removeCallback.bind(r,[i]),(function(){r.showFileBusyState(a,!1),OC.Notification.show(t("files_trashbin","Error while removing file from trash bin"))}))}}),i}},window.addEventListener("DOMContentLoaded",(function(){$("#app-content-trashbin").one("show",(function(){OCA.Trashbin.App.initialize($("#app-content-trashbin"))}))}))},27262:function(e,i,n){"use strict";n(6564);var r=n(25746);function a(e,t,i,n,r,a,o){try{var s=e[a](o),l=s.value}catch(e){return void i(e)}s.done?t(l):Promise.resolve(l).then(n,r)}function o(e){return function(){var t=this,i=arguments;return new Promise((function(n,r){var o=e.apply(t,i);function s(e){a(o,n,r,s,l,"next",e)}function l(e){a(o,n,r,s,l,"throw",e)}s(void 0)}))}}!function(){var e=new RegExp(/^(.+)\.d[0-9]+$/),i="{http://nextcloud.org/ns}trashbin-filename",n="{http://nextcloud.org/ns}trashbin-deletion-time",a="{http://nextcloud.org/ns}trashbin-original-location",s="{http://nextcloud.org/ns}trashbin-title";function l(t){t=OC.basename(t);var i=e.exec(t);return i&&i.length>1&&(t=i[1]),t}var c=function(e,t){this.client=t.client,this.initialize(e,t),this.deleteOperationQueue=new r.Z({concurrency:4})};c.prototype=_.extend({},OCA.Files.FileList.prototype,{id:"trashbin",appName:t("files_trashbin","Deleted files"),client:null,initialize:function(){this.client.addFileInfoParser((function(e,t){var r=e.propStat[0].properties,o=r[a],l=r[s];return{displayName:r[i],mtime:1e3*parseInt(r[n],10),hasPreview:!0,path:o,extraData:l}}));var e=OCA.Files.FileList.prototype.initialize.apply(this,arguments);return this.$el.find(".undelete").click("click",_.bind(this._onClickRestoreSelected,this)),this.setSort("mtime","desc"),this.breadcrumb._makeCrumbs=function(){for(var e=OCA.Files.BreadCrumb.prototype._makeCrumbs.apply(this,[].concat(Array.prototype.slice.call(arguments),["icon-delete no-hover"])),t=1;t<e.length;t++)e[t].name=l(e[t].name);return e},OC.Plugins.attach("OCA.Trashbin.FileList",this),e},getDirectoryPermissions:function(){return OC.PERMISSION_READ|OC.PERMISSION_DELETE},_setCurrentDir:function(e){OCA.Files.FileList.prototype._setCurrentDir.apply(this,arguments);var t=OC.basename(e);""!==t&&this.setPageTitle(l(t))},_createRow:function(){var e=OCA.Files.FileList.prototype._createRow.apply(this,arguments);return e.find("td.filesize").remove(),e},getAjaxUrl:function(e,t){var i="";return t&&(i="?"+OC.buildQueryString(t)),OC.filePath("files_trashbin","ajax",e+".php")+i},setupUploadEvents:function(){},linkTo:function(e){return OC.linkTo("files","index.php")+"?view=trashbin&dir="+encodeURIComponent(e).replace(/%2F/g,"/")},elementToFile:function(e){var t=OCA.Files.FileList.prototype.elementToFile(e);return"/"===this.getCurrentDirectory()&&(t.displayName=l(t.name)),delete t.size,t},updateEmptyContent:function(){var e=this.$fileList.find("tr:first").exists();this.$el.find(".emptyfilelist.emptycontent").toggleClass("hidden",e),this.$el.find(".files-filestable th").toggleClass("hidden",!e)},_removeCallback:function(e){for(var t,i=0;i<e.length;i++)t=this.remove(OC.basename(e[i]),{updateSummary:!1}),this.fileSummary.remove({type:t.attr("data-type"),size:t.attr("data-size")});this.fileSummary.update(),this.updateEmptyContent()},_onClickRestoreSelected:function(e){e.preventDefault();for(var i=this,n=_.pluck(this.getSelectedFiles(),"name"),r=0;r<n.length;r++){var a=this.findFileEl(n[r]);this.showFileBusyState(a,!0)}this.fileMultiSelectMenu.toggleLoading("restore",!0);var s=n.map((function(e){return i.deleteOperationQueue.add(o(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:i.client.move(OC.joinPaths("trash",i.getCurrentDirectory(),e),OC.joinPaths("restore",e),!0),i._removeCallback([e]);case 2:case"end":return t.stop()}}),t)}))))}));return Promise.all(s).then((function(){i.fileMultiSelectMenu.toggleLoading("restore",!1)}),(function(){OC.Notification.show(t("files_trashbin","Error while restoring files from trash bin"))}))},_onClickDeleteSelected:function(e){e.preventDefault();for(var i=this,n=this.$el.find(".select-all").is(":checked"),r=_.pluck(this.getSelectedFiles(),"name"),a=0;a<r.length;a++){var s=this.findFileEl(r[a]);this.showFileBusyState(s,!0)}if(n)return this.client.remove(OC.joinPaths("trash",this.getCurrentDirectory())).then((function(){i.hideMask(),i.setFiles([])}),(function(){OC.Notification.show(t("files_trashbin","Error while emptying trash bin"))}));this.fileMultiSelectMenu.toggleLoading("delete",!0);var l=r.map((function(e){return i.deleteOperationQueue.add(o(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,i.client.remove(OC.joinPaths("trash",i.getCurrentDirectory(),e));case 2:i._removeCallback([e]);case 3:case"end":return t.stop()}}),t)}))))}));return Promise.all(l).then((function(){i.fileMultiSelectMenu.toggleLoading("delete",!1)}),(function(){OC.Notification.show(t("files_trashbin","Error while removing files from trash bin"))}))},_onClickFile:function(e){var t=$(this).parent().parent().data("mime");return"httpd/unix-directory"!==t&&e.preventDefault(),OCA.Files.FileList.prototype._onClickFile.apply(this,arguments)},generatePreviewUrl:function(e){return OC.generateUrl("/apps/files_trashbin/preview?")+$.param(e)},getDownloadUrl:function(){return"#"},getDefaultActionUrl:function(){return"#"},updateStorageStatistics:function(){},isSelectedDeletable:function(){return!0},_getWebdavProperties:function(){return[i,n,a,s].concat(this.filesClient.getPropfindProperties())},reload:function(){var e;this._selectedFiles={},this._selectionSummary.clear(),this.$el.find(".select-all").prop("checked",!1),this.showMask(),null!==(e=this._reloadCall)&&void 0!==e&&e.abort&&this._reloadCall.abort(),this._reloadCall=this.client.getFolderContents("trash/"+this.getCurrentDirectory(),{includeParent:!1,properties:this._getWebdavProperties()});var t=this.reloadCallback.bind(this);return this._reloadCall.then(t,t)},reloadCallback:function(e,i){return delete this._reloadCall,this.hideMask(),!(401===e||(403===e?(this.changeDirectory("/"),OC.Notification.show(t("files","This operation is forbidden")),1):500===e?(this.changeDirectory("/"),OC.Notification.show(t("files","This directory is unavailable, please check the logs or contact the administrator")),1):404===e?(this.changeDirectory("/"),1):(0===e||this.setFiles(i),0)))}}),OCA.Trashbin.FileList=c}();var s=n(93379),l=n.n(s),c=n(7795),u=n.n(c),h=n(90569),f=n.n(h),d=n(3565),p=n.n(d),m=n(19216),C=n.n(m),b=n(44589),y=n.n(b),v=n(81412),g={};g.styleTagTransform=y(),g.setAttributes=p(),g.insert=f().bind(null,"head"),g.domAPI=u(),g.insertStyleElement=C(),l()(v.Z,g),v.Z&&v.Z.locals&&v.Z.locals,window.OCA.Trashbin=OCA.Trashbin},81412:function(e,t,i){"use strict";var n=i(87537),r=i.n(n),a=i(23645),o=i.n(a)()(r());o.push([e.id,"#app-content-trashbin tbody tr[data-type=file] td a.name,#app-content-trashbin tbody tr[data-type=file] td a.name span.nametext,#app-content-trashbin tbody tr[data-type=file] td a.name span.nametext span{cursor:default}#app-content-trashbin .summary :last-child{padding:0}#app-content-trashbin .files-filestable .summary .filesize{display:none}","",{version:3,sources:["webpack://./apps/files_trashbin/src/trash.scss"],names:[],mappings:"AASA,4MAGC,cAAA,CAGD,2CACC,SAAA,CAED,2DACC,YAAA",sourcesContent:['/*\n * Copyright (c) 2014\n *\n * This file is licensed under the Affero General Public License version 3\n * or later.\n *\n * See the COPYING-README file.\n *\n */\n#app-content-trashbin tbody tr[data-type="file"] td a.name,\n#app-content-trashbin tbody tr[data-type="file"] td a.name span.nametext,\n#app-content-trashbin tbody tr[data-type="file"] td a.name span.nametext span {\n\tcursor: default;\n}\n\n#app-content-trashbin .summary :last-child {\n\tpadding: 0;\n}\n#app-content-trashbin .files-filestable .summary .filesize {\n\tdisplay: none;\n}\n\n'],sourceRoot:""}]),t.Z=o}},n={};function r(e){var t=n[e];if(void 0!==t)return t.exports;var a=n[e]={id:e,loaded:!1,exports:{}};return i[e].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}r.m=i,e=[],r.O=function(t,i,n,a){if(!i){var o=1/0;for(u=0;u<e.length;u++){i=e[u][0],n=e[u][1],a=e[u][2];for(var s=!0,l=0;l<i.length;l++)(!1&a||o>=a)&&Object.keys(r.O).every((function(e){return r.O[e](i[l])}))?i.splice(l--,1):(s=!1,a<o&&(o=a));if(s){e.splice(u--,1);var c=n();void 0!==c&&(t=c)}}return t}a=a||0;for(var u=e.length;u>0&&e[u-1][2]>a;u--)e[u]=e[u-1];e[u]=[i,n,a]},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},r.d=function(e,t){for(var i in t)r.o(t,i)&&!r.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e},r.j=2325,function(){r.b=document.baseURI||self.location.href;var e={2325:0};r.O.j=function(t){return 0===e[t]};var t=function(t,i){var n,a,o=i[0],s=i[1],l=i[2],c=0;if(o.some((function(t){return 0!==e[t]}))){for(n in s)r.o(s,n)&&(r.m[n]=s[n]);if(l)var u=l(r)}for(t&&t(i);c<o.length;c++)a=o[c],r.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return r.O(u)},i=self.webpackChunknextcloud=self.webpackChunknextcloud||[];i.forEach(t.bind(null,0)),i.push=t.bind(null,i.push.bind(i))}(),r.nc=void 0;var a=r.O(void 0,[7874],(function(){return r(27262)}));a=r.O(a)}();
+//# sourceMappingURL=files_trashbin-files_trashbin.js.map?v=0d22bfb85115310f12ca \ No newline at end of file
diff --git a/dist/files_trashbin-files_trashbin.js.map b/dist/files_trashbin-files_trashbin.js.map
index 5d31d894972..0c6a1ed6304 100644
--- a/dist/files_trashbin-files_trashbin.js.map
+++ b/dist/files_trashbin-files_trashbin.js.map
@@ -1 +1 @@
-{"version":3,"file":"files_trashbin-files_trashbin.js?v=4b7d76edf5825c8f4d41","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/files_trashbin/src/app.js","webpack:///nextcloud/apps/files_trashbin/src/filelist.js","webpack://nextcloud/./apps/files_trashbin/src/trash.scss?cfe4","webpack:///nextcloud/apps/files_trashbin/src/files_trashbin.js","webpack:///nextcloud/apps/files_trashbin/src/trash.scss","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * Copyright (c) 2014\n *\n * @author Abijeet <abijeetpatro@gmail.com>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nOCA.Trashbin = {}\n/**\n * @namespace OCA.Trashbin.App\n */\nOCA.Trashbin.App = {\n\t_initialized: false,\n\t/** @type {OC.Files.Client} */\n\tclient: null,\n\n\tinitialize($el) {\n\t\tif (this._initialized) {\n\t\t\treturn\n\t\t}\n\t\tthis._initialized = true\n\n\t\tthis.client = new OC.Files.Client({\n\t\t\thost: OC.getHost(),\n\t\t\tport: OC.getPort(),\n\t\t\troot: OC.linkToRemoteBase('dav') + '/trashbin/' + OC.getCurrentUser().uid,\n\t\t\tuseHTTPS: OC.getProtocol() === 'https',\n\t\t})\n\t\tconst urlParams = OC.Util.History.parseUrlQuery()\n\t\tthis.fileList = new OCA.Trashbin.FileList(\n\t\t\t$('#app-content-trashbin'), {\n\t\t\t\tfileActions: this._createFileActions(),\n\t\t\t\tdetailsViewEnabled: false,\n\t\t\t\tscrollTo: urlParams.scrollto,\n\t\t\t\tconfig: OCA.Files.App.getFilesConfig(),\n\t\t\t\tmultiSelectMenu: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'restore',\n\t\t\t\t\t\tdisplayName: t('files_trashbin', 'Restore'),\n\t\t\t\t\t\ticonClass: 'icon-history',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'delete',\n\t\t\t\t\t\tdisplayName: t('files_trashbin', 'Delete permanently'),\n\t\t\t\t\t\ticonClass: 'icon-delete',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tclient: this.client,\n\t\t\t\t// The file list is created when a \"show\" event is handled, so\n\t\t\t\t// it should be marked as \"shown\" like it would have been done\n\t\t\t\t// if handling the event with the file list already created.\n\t\t\t\tshown: true,\n\t\t\t}\n\t\t)\n\t},\n\n\t_createFileActions() {\n\t\tconst client = this.client\n\t\tconst fileActions = new OCA.Files.FileActions()\n\t\tfileActions.register('dir', 'Open', OC.PERMISSION_READ, '', function(filename, context) {\n\t\t\tconst dir = context.fileList.getCurrentDirectory()\n\t\t\tcontext.fileList.changeDirectory(OC.joinPaths(dir, filename))\n\t\t})\n\n\t\tfileActions.setDefault('dir', 'Open')\n\n\t\tfileActions.registerAction({\n\t\t\tname: 'Restore',\n\t\t\tdisplayName: t('files_trashbin', 'Restore'),\n\t\t\ttype: OCA.Files.FileActions.TYPE_INLINE,\n\t\t\tmime: 'all',\n\t\t\tpermissions: OC.PERMISSION_READ,\n\t\t\ticonClass: 'icon-history',\n\t\t\tactionHandler(filename, context) {\n\t\t\t\tconst fileList = context.fileList\n\t\t\t\tconst tr = fileList.findFileEl(filename)\n\t\t\t\tfileList.showFileBusyState(tr, true)\n\t\t\t\tconst dir = context.fileList.getCurrentDirectory()\n\t\t\t\tclient.move(OC.joinPaths('trash', dir, filename), OC.joinPaths('restore', filename), true)\n\t\t\t\t\t.then(\n\t\t\t\t\t\tfileList._removeCallback.bind(fileList, [filename]),\n\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\tfileList.showFileBusyState(tr, false)\n\t\t\t\t\t\t\tOC.Notification.show(t('files_trashbin', 'Error while restoring file from trash bin'))\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t},\n\t\t})\n\n\t\tfileActions.registerAction({\n\t\t\tname: 'Delete',\n\t\t\tdisplayName: t('files_trashbin', 'Delete permanently'),\n\t\t\tmime: 'all',\n\t\t\tpermissions: OC.PERMISSION_READ,\n\t\t\ticonClass: 'icon-delete',\n\t\t\trender(actionSpec, isDefault, context) {\n\t\t\t\tconst $actionLink = fileActions._makeActionLink(actionSpec, context)\n\t\t\t\t$actionLink.attr('original-title', t('files_trashbin', 'Delete permanently'))\n\t\t\t\t$actionLink.children('img').attr('alt', t('files_trashbin', 'Delete permanently'))\n\t\t\t\tcontext.$file.find('td:last').append($actionLink)\n\t\t\t\treturn $actionLink\n\t\t\t},\n\t\t\tactionHandler(filename, context) {\n\t\t\t\tconst fileList = context.fileList\n\t\t\t\t$('.tipsy').remove()\n\t\t\t\tconst tr = fileList.findFileEl(filename)\n\t\t\t\tfileList.showFileBusyState(tr, true)\n\t\t\t\tconst dir = context.fileList.getCurrentDirectory()\n\t\t\t\tclient.remove(OC.joinPaths('trash', dir, filename))\n\t\t\t\t\t.then(\n\t\t\t\t\t\tfileList._removeCallback.bind(fileList, [filename]),\n\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\tfileList.showFileBusyState(tr, false)\n\t\t\t\t\t\t\tOC.Notification.show(t('files_trashbin', 'Error while removing file from trash bin'))\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t},\n\t\t})\n\t\treturn fileActions\n\t},\n}\n\nwindow.addEventListener('DOMContentLoaded', function() {\n\t$('#app-content-trashbin').one('show', function() {\n\t\tconst App = OCA.Trashbin.App\n\t\tApp.initialize($('#app-content-trashbin'))\n\t\t// force breadcrumb init\n\t\t// App.fileList.changeDirectory(App.fileList.getCurrentDirectory(), false, true);\n\t})\n})\n","/**\n * Copyright (c) 2014\n *\n * @author Azul <azul@riseup.net>\n * @author Gary Kim <gary@garykim.dev>\n * @author Jan C. Borchardt <hey@jancborchardt.net>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\n(function() {\n\tvar DELETED_REGEXP = new RegExp(/^(.+)\\.d[0-9]+$/)\n\tvar FILENAME_PROP = '{http://nextcloud.org/ns}trashbin-filename'\n\tvar DELETION_TIME_PROP = '{http://nextcloud.org/ns}trashbin-deletion-time'\n\tvar TRASHBIN_ORIGINAL_LOCATION = '{http://nextcloud.org/ns}trashbin-original-location'\n\tvar TRASHBIN_TITLE = '{http://nextcloud.org/ns}trashbin-title'\n\n\t/**\n\t * Convert a file name in the format filename.d12345 to the real file name.\n\t * This will use basename.\n\t * The name will not be changed if it has no \".d12345\" suffix.\n\t * @param {String} name file name\n\t * @returns {String} converted file name\n\t */\n\tfunction getDeletedFileName(name) {\n\t\tname = OC.basename(name)\n\t\tvar match = DELETED_REGEXP.exec(name)\n\t\tif (match && match.length > 1) {\n\t\t\tname = match[1]\n\t\t}\n\t\treturn name\n\t}\n\n\t/**\n\t * @class OCA.Trashbin.FileList\n\t * @augments OCA.Files.FileList\n\t * @classdesc List of deleted files\n\t *\n\t * @param $el container element with existing markup for the .files-controls\n\t * and a table\n\t * @param [options] map of options\n\t */\n\tvar FileList = function($el, options) {\n\t\tthis.client = options.client\n\t\tthis.initialize($el, options)\n\t}\n\tFileList.prototype = _.extend({}, OCA.Files.FileList.prototype,\n\t\t/** @lends OCA.Trashbin.FileList.prototype */ {\n\t\tid: 'trashbin',\n\t\tappName: t('files_trashbin', 'Deleted files'),\n\t\t/** @type {OC.Files.Client} */\n\t\tclient: null,\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tinitialize: function() {\n\t\t\tthis.client.addFileInfoParser(function(response, data) {\n\t\t\t\tvar props = response.propStat[0].properties\n\t\t\t\tvar path = props[TRASHBIN_ORIGINAL_LOCATION]\n\t\t\t\tvar title = props[TRASHBIN_TITLE]\n\t\t\t\treturn {\n\t\t\t\t\tdisplayName: props[FILENAME_PROP],\n\t\t\t\t\tmtime: parseInt(props[DELETION_TIME_PROP], 10) * 1000,\n\t\t\t\t\thasPreview: true,\n\t\t\t\t\tpath: path,\n\t\t\t\t\textraData: title\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tvar result = OCA.Files.FileList.prototype.initialize.apply(this, arguments)\n\t\t\tthis.$el.find('.undelete').click('click', _.bind(this._onClickRestoreSelected, this))\n\n\t\t\t// Sort by most recently deleted first\n\t\t\tthis.setSort('mtime', 'desc')\n\n\t\t\t/**\n\t\t\t * Override crumb making to add \"Deleted Files\" entry\n\t\t\t * and convert files with \".d\" extensions to a more\n\t\t\t * user friendly name.\n\t\t\t */\n\t\t\t\tthis.breadcrumb._makeCrumbs = function() {\n\t\t\t\t\tvar parts = OCA.Files.BreadCrumb.prototype._makeCrumbs.apply(this, [...arguments, 'icon-delete no-hover'])\n\t\t\t\t\tfor (var i = 1; i < parts.length; i++) {\n\t\t\t\t\t\tparts[i].name = getDeletedFileName(parts[i].name)\n\t\t\t\t\t}\n\t\t\t\t\treturn parts\n\t\t\t\t}\n\n\t\t\t\tOC.Plugins.attach('OCA.Trashbin.FileList', this)\n\t\t\t\treturn result\n\t\t\t},\n\n\t\t\t/**\n\t\t * Override to only return read permissions\n\t\t */\n\t\t\tgetDirectoryPermissions: function() {\n\t\t\t\treturn OC.PERMISSION_READ | OC.PERMISSION_DELETE\n\t\t\t},\n\n\t\t\t_setCurrentDir: function(targetDir) {\n\t\t\t\tOCA.Files.FileList.prototype._setCurrentDir.apply(this, arguments)\n\n\t\t\t\tvar baseDir = OC.basename(targetDir)\n\t\t\t\tif (baseDir !== '') {\n\t\t\t\t\tthis.setPageTitle(getDeletedFileName(baseDir))\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t_createRow: function() {\n\t\t\t// FIXME: MEGAHACK until we find a better solution\n\t\t\t\tvar tr = OCA.Files.FileList.prototype._createRow.apply(this, arguments)\n\t\t\t\ttr.find('td.filesize').remove()\n\t\t\t\treturn tr\n\t\t\t},\n\n\t\t\tgetAjaxUrl: function(action, params) {\n\t\t\t\tvar q = ''\n\t\t\t\tif (params) {\n\t\t\t\t\tq = '?' + OC.buildQueryString(params)\n\t\t\t\t}\n\t\t\t\treturn OC.filePath('files_trashbin', 'ajax', action + '.php') + q\n\t\t\t},\n\n\t\t\tsetupUploadEvents: function() {\n\t\t\t// override and do nothing\n\t\t\t},\n\n\t\t\tlinkTo: function(dir) {\n\t\t\t\treturn OC.linkTo('files', 'index.php') + '?view=trashbin&dir=' + encodeURIComponent(dir).replace(/%2F/g, '/')\n\t\t\t},\n\n\t\t\telementToFile: function($el) {\n\t\t\t\tvar fileInfo = OCA.Files.FileList.prototype.elementToFile($el)\n\t\t\t\tif (this.getCurrentDirectory() === '/') {\n\t\t\t\t\tfileInfo.displayName = getDeletedFileName(fileInfo.name)\n\t\t\t\t}\n\t\t\t\t// no size available\n\t\t\t\tdelete fileInfo.size\n\t\t\t\treturn fileInfo\n\t\t\t},\n\n\t\t\tupdateEmptyContent: function() {\n\t\t\t\tvar exists = this.$fileList.find('tr:first').exists()\n\t\t\t\tthis.$el.find('.emptyfilelist.emptycontent').toggleClass('hidden', exists)\n\t\t\t\tthis.$el.find('.files-filestable th').toggleClass('hidden', !exists)\n\t\t\t},\n\n\t\t\t_removeCallback: function(files) {\n\t\t\t\tvar $el\n\t\t\t\tfor (var i = 0; i < files.length; i++) {\n\t\t\t\t\t$el = this.remove(OC.basename(files[i]), { updateSummary: false })\n\t\t\t\t\tthis.fileSummary.remove({ type: $el.attr('data-type'), size: $el.attr('data-size') })\n\t\t\t\t}\n\t\t\t\tthis.fileSummary.update()\n\t\t\t\tthis.updateEmptyContent()\n\t\t\t},\n\n\t\t\t_onClickRestoreSelected: function(event) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tvar self = this\n\t\t\t\tvar files = _.pluck(this.getSelectedFiles(), 'name')\n\t\t\t\tfor (var i = 0; i < files.length; i++) {\n\t\t\t\t\tvar tr = this.findFileEl(files[i])\n\t\t\t\t\tthis.showFileBusyState(tr, true)\n\t\t\t\t}\n\n\t\t\t\tthis.fileMultiSelectMenu.toggleLoading('restore', true)\n\t\t\t\tvar restorePromises = files.map(function(file) {\n\t\t\t\t\treturn self.client.move(OC.joinPaths('trash', self.getCurrentDirectory(), file), OC.joinPaths('restore', file), true)\n\t\t\t\t\t\t.then(\n\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\tself._removeCallback([file])\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t})\n\t\t\t\treturn Promise.all(restorePromises).then(\n\t\t\t\t\tfunction() {\n\t\t\t\t\t\tself.fileMultiSelectMenu.toggleLoading('restore', false)\n\t\t\t\t\t},\n\t\t\t\t\tfunction() {\n\t\t\t\t\t\tOC.Notification.show(t('files_trashbin', 'Error while restoring files from trash bin'))\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t},\n\n\t\t\t_onClickDeleteSelected: function(event) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tvar self = this\n\t\t\t\tvar allFiles = this.$el.find('.select-all').is(':checked')\n\t\t\t\tvar files = _.pluck(this.getSelectedFiles(), 'name')\n\t\t\t\tfor (var i = 0; i < files.length; i++) {\n\t\t\t\t\tvar tr = this.findFileEl(files[i])\n\t\t\t\t\tthis.showFileBusyState(tr, true)\n\t\t\t\t}\n\n\t\t\t\tif (allFiles) {\n\t\t\t\t\treturn this.client.remove(OC.joinPaths('trash', this.getCurrentDirectory()))\n\t\t\t\t\t\t.then(\n\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\tself.hideMask()\n\t\t\t\t\t\t\t\tself.setFiles([])\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\tOC.Notification.show(t('files_trashbin', 'Error while emptying trash bin'))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t} else {\n\t\t\t\t\tthis.fileMultiSelectMenu.toggleLoading('delete', true)\n\t\t\t\t\tvar deletePromises = files.map(function(file) {\n\t\t\t\t\t\treturn self.client.remove(OC.joinPaths('trash', self.getCurrentDirectory(), file))\n\t\t\t\t\t\t\t.then(\n\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\tself._removeCallback([file])\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t})\n\t\t\t\t\treturn Promise.all(deletePromises).then(\n\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\tself.fileMultiSelectMenu.toggleLoading('delete', false)\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\tOC.Notification.show(t('files_trashbin', 'Error while removing files from trash bin'))\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t_onClickFile: function(event) {\n\t\t\t\tvar mime = $(this).parent().parent().data('mime')\n\t\t\t\tif (mime !== 'httpd/unix-directory') {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t}\n\t\t\t\treturn OCA.Files.FileList.prototype._onClickFile.apply(this, arguments)\n\t\t\t},\n\n\t\t\tgeneratePreviewUrl: function(urlSpec) {\n\t\t\t\treturn OC.generateUrl('/apps/files_trashbin/preview?') + $.param(urlSpec)\n\t\t\t},\n\n\t\t\tgetDownloadUrl: function() {\n\t\t\t// no downloads\n\t\t\t\treturn '#'\n\t\t\t},\n\n\t\t\tgetDefaultActionUrl: function() {\n\t\t\t// no default action\n\t\t\t\treturn '#'\n\t\t\t},\n\n\t\t\tupdateStorageStatistics: function() {\n\t\t\t// no op because the trashbin doesn't have\n\t\t\t// storage info like free space / used space\n\t\t\t},\n\n\t\t\tisSelectedDeletable: function() {\n\t\t\t\treturn true\n\t\t\t},\n\n\t\t\t/**\n\t\t * Returns list of webdav properties to request\n\t\t */\n\t\t\t_getWebdavProperties: function() {\n\t\t\t\treturn [FILENAME_PROP, DELETION_TIME_PROP, TRASHBIN_ORIGINAL_LOCATION, TRASHBIN_TITLE].concat(this.filesClient.getPropfindProperties())\n\t\t\t},\n\n\t\t\t/**\n\t\t * Reloads the file list using ajax call\n\t\t *\n\t\t * @returns ajax call object\n\t\t */\n\t\t\treload: function() {\n\t\t\t\tthis._selectedFiles = {}\n\t\t\t\tthis._selectionSummary.clear()\n\t\t\t\tthis.$el.find('.select-all').prop('checked', false)\n\t\t\t\tthis.showMask()\n\t\t\t\tif (this._reloadCall?.abort) {\n\t\t\t\t\tthis._reloadCall.abort()\n\t\t\t\t}\n\t\t\t\tthis._reloadCall = this.client.getFolderContents(\n\t\t\t\t\t'trash/' + this.getCurrentDirectory(), {\n\t\t\t\t\t\tincludeParent: false,\n\t\t\t\t\t\tproperties: this._getWebdavProperties()\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t\tvar callBack = this.reloadCallback.bind(this)\n\t\t\t\treturn this._reloadCall.then(callBack, callBack)\n\t\t\t},\n\t\t\treloadCallback: function(status, result) {\n\t\t\t\tdelete this._reloadCall\n\t\t\t\tthis.hideMask()\n\n\t\t\t\tif (status === 401) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\t// Firewall Blocked request?\n\t\t\t\tif (status === 403) {\n\t\t\t\t// Go home\n\t\t\t\t\tthis.changeDirectory('/')\n\t\t\t\t\tOC.Notification.show(t('files', 'This operation is forbidden'))\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\t// Did share service die or something else fail?\n\t\t\t\tif (status === 500) {\n\t\t\t\t// Go home\n\t\t\t\t\tthis.changeDirectory('/')\n\t\t\t\t\tOC.Notification.show(t('files', 'This directory is unavailable, please check the logs or contact the administrator'))\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\tif (status === 404) {\n\t\t\t\t// go back home\n\t\t\t\t\tthis.changeDirectory('/')\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\t// aborted ?\n\t\t\t\tif (status === 0) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\n\t\t\t\tthis.setFiles(result)\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t})\n\n\tOCA.Trashbin.FileList = FileList\n})()\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./trash.scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./trash.scss\";\n export default content && content.locals ? content.locals : undefined;\n","/**\n * @copyright Copyright (c) 2016 Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport './app'\nimport './filelist'\nimport './trash.scss'\n\nwindow.OCA.Trashbin = OCA.Trashbin\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#app-content-trashbin tbody tr[data-type=file] td a.name,#app-content-trashbin tbody tr[data-type=file] td a.name span.nametext,#app-content-trashbin tbody tr[data-type=file] td a.name span.nametext span{cursor:default}#app-content-trashbin .summary :last-child{padding:0}#app-content-trashbin .files-filestable .summary .filesize{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_trashbin/src/trash.scss\"],\"names\":[],\"mappings\":\"AASA,4MAGC,cAAA,CAGD,2CACC,SAAA,CAED,2DACC,YAAA\",\"sourcesContent\":[\"/*\\n * Copyright (c) 2014\\n *\\n * This file is licensed under the Affero General Public License version 3\\n * or later.\\n *\\n * See the COPYING-README file.\\n *\\n */\\n#app-content-trashbin tbody tr[data-type=\\\"file\\\"] td a.name,\\n#app-content-trashbin tbody tr[data-type=\\\"file\\\"] td a.name span.nametext,\\n#app-content-trashbin tbody tr[data-type=\\\"file\\\"] td a.name span.nametext span {\\n\\tcursor: default;\\n}\\n\\n#app-content-trashbin .summary :last-child {\\n\\tpadding: 0;\\n}\\n#app-content-trashbin .files-filestable .summary .filesize {\\n\\tdisplay: none;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 2325;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2325: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], function() { return __webpack_require__(69845); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","OCA","Trashbin","App","_initialized","client","initialize","$el","this","OC","Files","Client","host","getHost","port","getPort","root","linkToRemoteBase","getCurrentUser","uid","useHTTPS","getProtocol","urlParams","Util","History","parseUrlQuery","fileList","FileList","$","fileActions","_createFileActions","detailsViewEnabled","scrollTo","scrollto","config","getFilesConfig","multiSelectMenu","name","displayName","t","iconClass","shown","FileActions","register","PERMISSION_READ","filename","context","dir","getCurrentDirectory","changeDirectory","joinPaths","setDefault","registerAction","type","TYPE_INLINE","mime","permissions","actionHandler","tr","findFileEl","showFileBusyState","move","then","_removeCallback","bind","Notification","show","render","actionSpec","isDefault","$actionLink","_makeActionLink","attr","children","$file","find","append","remove","window","addEventListener","one","DELETED_REGEXP","RegExp","FILENAME_PROP","DELETION_TIME_PROP","TRASHBIN_ORIGINAL_LOCATION","TRASHBIN_TITLE","getDeletedFileName","basename","match","exec","length","options","prototype","_","extend","id","appName","addFileInfoParser","response","data","props","propStat","properties","path","title","mtime","parseInt","hasPreview","extraData","result","apply","arguments","click","_onClickRestoreSelected","setSort","breadcrumb","_makeCrumbs","parts","BreadCrumb","i","Plugins","attach","getDirectoryPermissions","PERMISSION_DELETE","_setCurrentDir","targetDir","baseDir","setPageTitle","_createRow","getAjaxUrl","action","params","q","buildQueryString","filePath","setupUploadEvents","linkTo","encodeURIComponent","replace","elementToFile","fileInfo","size","updateEmptyContent","exists","$fileList","toggleClass","files","updateSummary","fileSummary","update","event","preventDefault","self","pluck","getSelectedFiles","fileMultiSelectMenu","toggleLoading","restorePromises","map","file","Promise","all","_onClickDeleteSelected","allFiles","is","hideMask","setFiles","deletePromises","_onClickFile","parent","generatePreviewUrl","urlSpec","generateUrl","param","getDownloadUrl","getDefaultActionUrl","updateStorageStatistics","isSelectedDeletable","_getWebdavProperties","concat","filesClient","getPropfindProperties","reload","_selectedFiles","_selectionSummary","clear","prop","showMask","_reloadCall","abort","getFolderContents","includeParent","callBack","reloadCallback","status","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","___CSS_LOADER_EXPORT___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","Object","keys","every","key","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","obj","hasOwnProperty","Symbol","toStringTag","value","nmd","paths","b","document","baseURI","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","forEach","nc","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"files_trashbin-files_trashbin.js?v=0d22bfb85115310f12ca","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/files_trashbin/src/app.js","webpack:///nextcloud/apps/files_trashbin/src/filelist.js","webpack://nextcloud/./apps/files_trashbin/src/trash.scss?cfe4","webpack:///nextcloud/apps/files_trashbin/src/files_trashbin.js","webpack:///nextcloud/apps/files_trashbin/src/trash.scss","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * Copyright (c) 2014\n *\n * @author Abijeet <abijeetpatro@gmail.com>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nOCA.Trashbin = {}\n/**\n * @namespace OCA.Trashbin.App\n */\nOCA.Trashbin.App = {\n\t_initialized: false,\n\t/** @type {OC.Files.Client} */\n\tclient: null,\n\n\tinitialize($el) {\n\t\tif (this._initialized) {\n\t\t\treturn\n\t\t}\n\t\tthis._initialized = true\n\n\t\tthis.client = new OC.Files.Client({\n\t\t\thost: OC.getHost(),\n\t\t\tport: OC.getPort(),\n\t\t\troot: OC.linkToRemoteBase('dav') + '/trashbin/' + OC.getCurrentUser().uid,\n\t\t\tuseHTTPS: OC.getProtocol() === 'https',\n\t\t})\n\t\tconst urlParams = OC.Util.History.parseUrlQuery()\n\t\tthis.fileList = new OCA.Trashbin.FileList(\n\t\t\t$('#app-content-trashbin'), {\n\t\t\t\tfileActions: this._createFileActions(),\n\t\t\t\tdetailsViewEnabled: false,\n\t\t\t\tscrollTo: urlParams.scrollto,\n\t\t\t\tconfig: OCA.Files.App.getFilesConfig(),\n\t\t\t\tmultiSelectMenu: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'restore',\n\t\t\t\t\t\tdisplayName: t('files_trashbin', 'Restore'),\n\t\t\t\t\t\ticonClass: 'icon-history',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'delete',\n\t\t\t\t\t\tdisplayName: t('files_trashbin', 'Delete permanently'),\n\t\t\t\t\t\ticonClass: 'icon-delete',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tclient: this.client,\n\t\t\t\t// The file list is created when a \"show\" event is handled, so\n\t\t\t\t// it should be marked as \"shown\" like it would have been done\n\t\t\t\t// if handling the event with the file list already created.\n\t\t\t\tshown: true,\n\t\t\t}\n\t\t)\n\t},\n\n\t_createFileActions() {\n\t\tconst client = this.client\n\t\tconst fileActions = new OCA.Files.FileActions()\n\t\tfileActions.register('dir', 'Open', OC.PERMISSION_READ, '', function(filename, context) {\n\t\t\tconst dir = context.fileList.getCurrentDirectory()\n\t\t\tcontext.fileList.changeDirectory(OC.joinPaths(dir, filename))\n\t\t})\n\n\t\tfileActions.setDefault('dir', 'Open')\n\n\t\tfileActions.registerAction({\n\t\t\tname: 'Restore',\n\t\t\tdisplayName: t('files_trashbin', 'Restore'),\n\t\t\ttype: OCA.Files.FileActions.TYPE_INLINE,\n\t\t\tmime: 'all',\n\t\t\tpermissions: OC.PERMISSION_READ,\n\t\t\ticonClass: 'icon-history',\n\t\t\tactionHandler(filename, context) {\n\t\t\t\tconst fileList = context.fileList\n\t\t\t\tconst tr = fileList.findFileEl(filename)\n\t\t\t\tfileList.showFileBusyState(tr, true)\n\t\t\t\tconst dir = context.fileList.getCurrentDirectory()\n\t\t\t\tclient.move(OC.joinPaths('trash', dir, filename), OC.joinPaths('restore', filename), true)\n\t\t\t\t\t.then(\n\t\t\t\t\t\tfileList._removeCallback.bind(fileList, [filename]),\n\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\tfileList.showFileBusyState(tr, false)\n\t\t\t\t\t\t\tOC.Notification.show(t('files_trashbin', 'Error while restoring file from trash bin'))\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t},\n\t\t})\n\n\t\tfileActions.registerAction({\n\t\t\tname: 'Delete',\n\t\t\tdisplayName: t('files_trashbin', 'Delete permanently'),\n\t\t\tmime: 'all',\n\t\t\tpermissions: OC.PERMISSION_READ,\n\t\t\ticonClass: 'icon-delete',\n\t\t\trender(actionSpec, isDefault, context) {\n\t\t\t\tconst $actionLink = fileActions._makeActionLink(actionSpec, context)\n\t\t\t\t$actionLink.attr('original-title', t('files_trashbin', 'Delete permanently'))\n\t\t\t\t$actionLink.children('img').attr('alt', t('files_trashbin', 'Delete permanently'))\n\t\t\t\tcontext.$file.find('td:last').append($actionLink)\n\t\t\t\treturn $actionLink\n\t\t\t},\n\t\t\tactionHandler(filename, context) {\n\t\t\t\tconst fileList = context.fileList\n\t\t\t\t$('.tipsy').remove()\n\t\t\t\tconst tr = fileList.findFileEl(filename)\n\t\t\t\tfileList.showFileBusyState(tr, true)\n\t\t\t\tconst dir = context.fileList.getCurrentDirectory()\n\t\t\t\tclient.remove(OC.joinPaths('trash', dir, filename))\n\t\t\t\t\t.then(\n\t\t\t\t\t\tfileList._removeCallback.bind(fileList, [filename]),\n\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\tfileList.showFileBusyState(tr, false)\n\t\t\t\t\t\t\tOC.Notification.show(t('files_trashbin', 'Error while removing file from trash bin'))\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t},\n\t\t})\n\t\treturn fileActions\n\t},\n}\n\nwindow.addEventListener('DOMContentLoaded', function() {\n\t$('#app-content-trashbin').one('show', function() {\n\t\tconst App = OCA.Trashbin.App\n\t\tApp.initialize($('#app-content-trashbin'))\n\t\t// force breadcrumb init\n\t\t// App.fileList.changeDirectory(App.fileList.getCurrentDirectory(), false, true);\n\t})\n})\n","/**\n * Copyright (c) 2014\n *\n * @author Azul <azul@riseup.net>\n * @author Gary Kim <gary@garykim.dev>\n * @author Jan C. Borchardt <hey@jancborchardt.net>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n// eslint-disable-next-line import/no-unresolved, node/no-missing-import\nimport PQueue from 'p-queue'\n\n/* eslint-disable */\n(function() {\n\tvar DELETED_REGEXP = new RegExp(/^(.+)\\.d[0-9]+$/)\n\tvar FILENAME_PROP = '{http://nextcloud.org/ns}trashbin-filename'\n\tvar DELETION_TIME_PROP = '{http://nextcloud.org/ns}trashbin-deletion-time'\n\tvar TRASHBIN_ORIGINAL_LOCATION = '{http://nextcloud.org/ns}trashbin-original-location'\n\tvar TRASHBIN_TITLE = '{http://nextcloud.org/ns}trashbin-title'\n\n\t/**\n\t * Convert a file name in the format filename.d12345 to the real file name.\n\t * This will use basename.\n\t * The name will not be changed if it has no \".d12345\" suffix.\n\t * @param {String} name file name\n\t * @returns {String} converted file name\n\t */\n\tfunction getDeletedFileName(name) {\n\t\tname = OC.basename(name)\n\t\tvar match = DELETED_REGEXP.exec(name)\n\t\tif (match && match.length > 1) {\n\t\t\tname = match[1]\n\t\t}\n\t\treturn name\n\t}\n\n\t/**\n\t * @class OCA.Trashbin.FileList\n\t * @augments OCA.Files.FileList\n\t * @classdesc List of deleted files\n\t *\n\t * @param $el container element with existing markup for the .files-controls\n\t * and a table\n\t * @param [options] map of options\n\t */\n\tvar FileList = function($el, options) {\n\t\tthis.client = options.client\n\t\tthis.initialize($el, options)\n\t\tthis.deleteOperationQueue = new PQueue({ concurrency: 4 })\n\t}\n\tFileList.prototype = _.extend({}, OCA.Files.FileList.prototype,\n\t\t/** @lends OCA.Trashbin.FileList.prototype */ {\n\t\tid: 'trashbin',\n\t\tappName: t('files_trashbin', 'Deleted files'),\n\t\t/** @type {OC.Files.Client} */\n\t\tclient: null,\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tinitialize: function() {\n\t\t\tthis.client.addFileInfoParser(function(response, data) {\n\t\t\t\tvar props = response.propStat[0].properties\n\t\t\t\tvar path = props[TRASHBIN_ORIGINAL_LOCATION]\n\t\t\t\tvar title = props[TRASHBIN_TITLE]\n\t\t\t\treturn {\n\t\t\t\t\tdisplayName: props[FILENAME_PROP],\n\t\t\t\t\tmtime: parseInt(props[DELETION_TIME_PROP], 10) * 1000,\n\t\t\t\t\thasPreview: true,\n\t\t\t\t\tpath: path,\n\t\t\t\t\textraData: title\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tvar result = OCA.Files.FileList.prototype.initialize.apply(this, arguments)\n\t\t\tthis.$el.find('.undelete').click('click', _.bind(this._onClickRestoreSelected, this))\n\n\t\t\t// Sort by most recently deleted first\n\t\t\tthis.setSort('mtime', 'desc')\n\n\t\t\t/**\n\t\t\t * Override crumb making to add \"Deleted Files\" entry\n\t\t\t * and convert files with \".d\" extensions to a more\n\t\t\t * user friendly name.\n\t\t\t */\n\t\t\t\tthis.breadcrumb._makeCrumbs = function() {\n\t\t\t\t\tvar parts = OCA.Files.BreadCrumb.prototype._makeCrumbs.apply(this, [...arguments, 'icon-delete no-hover'])\n\t\t\t\t\tfor (var i = 1; i < parts.length; i++) {\n\t\t\t\t\t\tparts[i].name = getDeletedFileName(parts[i].name)\n\t\t\t\t\t}\n\t\t\t\t\treturn parts\n\t\t\t\t}\n\n\t\t\t\tOC.Plugins.attach('OCA.Trashbin.FileList', this)\n\t\t\t\treturn result\n\t\t\t},\n\n\t\t\t/**\n\t\t * Override to only return read permissions\n\t\t */\n\t\t\tgetDirectoryPermissions: function() {\n\t\t\t\treturn OC.PERMISSION_READ | OC.PERMISSION_DELETE\n\t\t\t},\n\n\t\t\t_setCurrentDir: function(targetDir) {\n\t\t\t\tOCA.Files.FileList.prototype._setCurrentDir.apply(this, arguments)\n\n\t\t\t\tvar baseDir = OC.basename(targetDir)\n\t\t\t\tif (baseDir !== '') {\n\t\t\t\t\tthis.setPageTitle(getDeletedFileName(baseDir))\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t_createRow: function() {\n\t\t\t// FIXME: MEGAHACK until we find a better solution\n\t\t\t\tvar tr = OCA.Files.FileList.prototype._createRow.apply(this, arguments)\n\t\t\t\ttr.find('td.filesize').remove()\n\t\t\t\treturn tr\n\t\t\t},\n\n\t\t\tgetAjaxUrl: function(action, params) {\n\t\t\t\tvar q = ''\n\t\t\t\tif (params) {\n\t\t\t\t\tq = '?' + OC.buildQueryString(params)\n\t\t\t\t}\n\t\t\t\treturn OC.filePath('files_trashbin', 'ajax', action + '.php') + q\n\t\t\t},\n\n\t\t\tsetupUploadEvents: function() {\n\t\t\t// override and do nothing\n\t\t\t},\n\n\t\t\tlinkTo: function(dir) {\n\t\t\t\treturn OC.linkTo('files', 'index.php') + '?view=trashbin&dir=' + encodeURIComponent(dir).replace(/%2F/g, '/')\n\t\t\t},\n\n\t\t\telementToFile: function($el) {\n\t\t\t\tvar fileInfo = OCA.Files.FileList.prototype.elementToFile($el)\n\t\t\t\tif (this.getCurrentDirectory() === '/') {\n\t\t\t\t\tfileInfo.displayName = getDeletedFileName(fileInfo.name)\n\t\t\t\t}\n\t\t\t\t// no size available\n\t\t\t\tdelete fileInfo.size\n\t\t\t\treturn fileInfo\n\t\t\t},\n\n\t\t\tupdateEmptyContent: function() {\n\t\t\t\tvar exists = this.$fileList.find('tr:first').exists()\n\t\t\t\tthis.$el.find('.emptyfilelist.emptycontent').toggleClass('hidden', exists)\n\t\t\t\tthis.$el.find('.files-filestable th').toggleClass('hidden', !exists)\n\t\t\t},\n\n\t\t\t_removeCallback: function(files) {\n\t\t\t\tvar $el\n\t\t\t\tfor (var i = 0; i < files.length; i++) {\n\t\t\t\t\t$el = this.remove(OC.basename(files[i]), { updateSummary: false })\n\t\t\t\t\tthis.fileSummary.remove({ type: $el.attr('data-type'), size: $el.attr('data-size') })\n\t\t\t\t}\n\t\t\t\tthis.fileSummary.update()\n\t\t\t\tthis.updateEmptyContent()\n\t\t\t},\n\n\t\t\t_onClickRestoreSelected: function(event) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tvar self = this\n\t\t\t\tvar files = _.pluck(this.getSelectedFiles(), 'name')\n\t\t\t\tfor (var i = 0; i < files.length; i++) {\n\t\t\t\t\tvar tr = this.findFileEl(files[i])\n\t\t\t\t\tthis.showFileBusyState(tr, true)\n\t\t\t\t}\n\n\t\t\t\tthis.fileMultiSelectMenu.toggleLoading('restore', true)\n\t\t\t\tvar restorePromises = files.map(function(file) {\n\t\t\t\t\treturn self.deleteOperationQueue.add(async () => {\n\t\t\t\t\t\tself.client.move(OC.joinPaths('trash', self.getCurrentDirectory(), file), OC.joinPaths('restore', file), true)\n\t\t\t\t\t\tself._removeCallback([file])\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\treturn Promise.all(restorePromises).then(\n\t\t\t\t\tfunction() {\n\t\t\t\t\t\tself.fileMultiSelectMenu.toggleLoading('restore', false)\n\t\t\t\t\t},\n\t\t\t\t\tfunction() {\n\t\t\t\t\t\tOC.Notification.show(t('files_trashbin', 'Error while restoring files from trash bin'))\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t},\n\n\t\t\t_onClickDeleteSelected: function(event) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tvar self = this\n\t\t\t\tvar allFiles = this.$el.find('.select-all').is(':checked')\n\t\t\t\tvar files = _.pluck(this.getSelectedFiles(), 'name')\n\t\t\t\tfor (var i = 0; i < files.length; i++) {\n\t\t\t\t\tvar tr = this.findFileEl(files[i])\n\t\t\t\t\tthis.showFileBusyState(tr, true)\n\t\t\t\t}\n\n\t\t\t\tif (allFiles) {\n\t\t\t\t\treturn this.client.remove(OC.joinPaths('trash', this.getCurrentDirectory()))\n\t\t\t\t\t\t.then(\n\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\tself.hideMask()\n\t\t\t\t\t\t\t\tself.setFiles([])\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\tOC.Notification.show(t('files_trashbin', 'Error while emptying trash bin'))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t} else {\n\t\t\t\t\tthis.fileMultiSelectMenu.toggleLoading('delete', true)\n\t\t\t\t\tvar deletePromises = files.map(function(file) {\n\t\t\t\t\t\treturn self.deleteOperationQueue.add(async () => {\n\t\t\t\t\t\t\tawait self.client.remove(OC.joinPaths('trash', self.getCurrentDirectory(), file))\n\t\t\t\t\t\t\tself._removeCallback([file])\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\treturn Promise.all(deletePromises).then(\n\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\tself.fileMultiSelectMenu.toggleLoading('delete', false)\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\tOC.Notification.show(t('files_trashbin', 'Error while removing files from trash bin'))\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t_onClickFile: function(event) {\n\t\t\t\tvar mime = $(this).parent().parent().data('mime')\n\t\t\t\tif (mime !== 'httpd/unix-directory') {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t}\n\t\t\t\treturn OCA.Files.FileList.prototype._onClickFile.apply(this, arguments)\n\t\t\t},\n\n\t\t\tgeneratePreviewUrl: function(urlSpec) {\n\t\t\t\treturn OC.generateUrl('/apps/files_trashbin/preview?') + $.param(urlSpec)\n\t\t\t},\n\n\t\t\tgetDownloadUrl: function() {\n\t\t\t// no downloads\n\t\t\t\treturn '#'\n\t\t\t},\n\n\t\t\tgetDefaultActionUrl: function() {\n\t\t\t// no default action\n\t\t\t\treturn '#'\n\t\t\t},\n\n\t\t\tupdateStorageStatistics: function() {\n\t\t\t// no op because the trashbin doesn't have\n\t\t\t// storage info like free space / used space\n\t\t\t},\n\n\t\t\tisSelectedDeletable: function() {\n\t\t\t\treturn true\n\t\t\t},\n\n\t\t\t/**\n\t\t * Returns list of webdav properties to request\n\t\t */\n\t\t\t_getWebdavProperties: function() {\n\t\t\t\treturn [FILENAME_PROP, DELETION_TIME_PROP, TRASHBIN_ORIGINAL_LOCATION, TRASHBIN_TITLE].concat(this.filesClient.getPropfindProperties())\n\t\t\t},\n\n\t\t\t/**\n\t\t * Reloads the file list using ajax call\n\t\t *\n\t\t * @returns ajax call object\n\t\t */\n\t\t\treload: function() {\n\t\t\t\tthis._selectedFiles = {}\n\t\t\t\tthis._selectionSummary.clear()\n\t\t\t\tthis.$el.find('.select-all').prop('checked', false)\n\t\t\t\tthis.showMask()\n\t\t\t\tif (this._reloadCall?.abort) {\n\t\t\t\t\tthis._reloadCall.abort()\n\t\t\t\t}\n\t\t\t\tthis._reloadCall = this.client.getFolderContents(\n\t\t\t\t\t'trash/' + this.getCurrentDirectory(), {\n\t\t\t\t\t\tincludeParent: false,\n\t\t\t\t\t\tproperties: this._getWebdavProperties()\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t\tvar callBack = this.reloadCallback.bind(this)\n\t\t\t\treturn this._reloadCall.then(callBack, callBack)\n\t\t\t},\n\t\t\treloadCallback: function(status, result) {\n\t\t\t\tdelete this._reloadCall\n\t\t\t\tthis.hideMask()\n\n\t\t\t\tif (status === 401) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\t// Firewall Blocked request?\n\t\t\t\tif (status === 403) {\n\t\t\t\t// Go home\n\t\t\t\t\tthis.changeDirectory('/')\n\t\t\t\t\tOC.Notification.show(t('files', 'This operation is forbidden'))\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\t// Did share service die or something else fail?\n\t\t\t\tif (status === 500) {\n\t\t\t\t// Go home\n\t\t\t\t\tthis.changeDirectory('/')\n\t\t\t\t\tOC.Notification.show(t('files', 'This directory is unavailable, please check the logs or contact the administrator'))\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\tif (status === 404) {\n\t\t\t\t// go back home\n\t\t\t\t\tthis.changeDirectory('/')\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\t// aborted ?\n\t\t\t\tif (status === 0) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\n\t\t\t\tthis.setFiles(result)\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t})\n\n\tOCA.Trashbin.FileList = FileList\n})()\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./trash.scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./trash.scss\";\n export default content && content.locals ? content.locals : undefined;\n","/**\n * @copyright Copyright (c) 2016 Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport './app'\nimport './filelist'\nimport './trash.scss'\n\nwindow.OCA.Trashbin = OCA.Trashbin\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#app-content-trashbin tbody tr[data-type=file] td a.name,#app-content-trashbin tbody tr[data-type=file] td a.name span.nametext,#app-content-trashbin tbody tr[data-type=file] td a.name span.nametext span{cursor:default}#app-content-trashbin .summary :last-child{padding:0}#app-content-trashbin .files-filestable .summary .filesize{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_trashbin/src/trash.scss\"],\"names\":[],\"mappings\":\"AASA,4MAGC,cAAA,CAGD,2CACC,SAAA,CAED,2DACC,YAAA\",\"sourcesContent\":[\"/*\\n * Copyright (c) 2014\\n *\\n * This file is licensed under the Affero General Public License version 3\\n * or later.\\n *\\n * See the COPYING-README file.\\n *\\n */\\n#app-content-trashbin tbody tr[data-type=\\\"file\\\"] td a.name,\\n#app-content-trashbin tbody tr[data-type=\\\"file\\\"] td a.name span.nametext,\\n#app-content-trashbin tbody tr[data-type=\\\"file\\\"] td a.name span.nametext span {\\n\\tcursor: default;\\n}\\n\\n#app-content-trashbin .summary :last-child {\\n\\tpadding: 0;\\n}\\n#app-content-trashbin .files-filestable .summary .filesize {\\n\\tdisplay: none;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 2325;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2325: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], function() { return __webpack_require__(27262); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","OCA","Trashbin","App","_initialized","client","initialize","$el","this","OC","Files","Client","host","getHost","port","getPort","root","linkToRemoteBase","getCurrentUser","uid","useHTTPS","getProtocol","urlParams","Util","History","parseUrlQuery","fileList","FileList","$","fileActions","_createFileActions","detailsViewEnabled","scrollTo","scrollto","config","getFilesConfig","multiSelectMenu","name","displayName","t","iconClass","shown","FileActions","register","PERMISSION_READ","filename","context","dir","getCurrentDirectory","changeDirectory","joinPaths","setDefault","registerAction","type","TYPE_INLINE","mime","permissions","actionHandler","tr","findFileEl","showFileBusyState","move","then","_removeCallback","bind","Notification","show","render","actionSpec","isDefault","$actionLink","_makeActionLink","attr","children","$file","find","append","remove","window","addEventListener","one","DELETED_REGEXP","RegExp","FILENAME_PROP","DELETION_TIME_PROP","TRASHBIN_ORIGINAL_LOCATION","TRASHBIN_TITLE","getDeletedFileName","basename","match","exec","length","options","deleteOperationQueue","PQueue","concurrency","prototype","_","extend","id","appName","addFileInfoParser","response","data","props","propStat","properties","path","title","mtime","parseInt","hasPreview","extraData","result","apply","arguments","click","_onClickRestoreSelected","setSort","breadcrumb","_makeCrumbs","parts","BreadCrumb","i","Plugins","attach","getDirectoryPermissions","PERMISSION_DELETE","_setCurrentDir","targetDir","baseDir","setPageTitle","_createRow","getAjaxUrl","action","params","q","buildQueryString","filePath","setupUploadEvents","linkTo","encodeURIComponent","replace","elementToFile","fileInfo","size","updateEmptyContent","exists","$fileList","toggleClass","files","updateSummary","fileSummary","update","event","preventDefault","self","pluck","getSelectedFiles","fileMultiSelectMenu","toggleLoading","restorePromises","map","file","add","Promise","all","_onClickDeleteSelected","allFiles","is","hideMask","setFiles","deletePromises","_onClickFile","parent","generatePreviewUrl","urlSpec","generateUrl","param","getDownloadUrl","getDefaultActionUrl","updateStorageStatistics","isSelectedDeletable","_getWebdavProperties","concat","filesClient","getPropfindProperties","reload","_selectedFiles","_selectionSummary","clear","prop","showMask","_reloadCall","abort","getFolderContents","includeParent","callBack","reloadCallback","status","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","___CSS_LOADER_EXPORT___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","Object","keys","every","key","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","obj","hasOwnProperty","Symbol","toStringTag","value","nmd","paths","b","document","baseURI","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","forEach","nc","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php
index 6e0934c8fa1..62f66dca67b 100644
--- a/lib/composer/composer/autoload_classmap.php
+++ b/lib/composer/composer/autoload_classmap.php
@@ -1353,6 +1353,7 @@ return array(
'OC\\Memcache\\NullCache' => $baseDir . '/lib/private/Memcache/NullCache.php',
'OC\\Memcache\\ProfilerWrapperCache' => $baseDir . '/lib/private/Memcache/ProfilerWrapperCache.php',
'OC\\Memcache\\Redis' => $baseDir . '/lib/private/Memcache/Redis.php',
+ 'OC\\Memcache\\WithLocalCache' => $baseDir . '/lib/private/Memcache/WithLocalCache.php',
'OC\\MemoryInfo' => $baseDir . '/lib/private/MemoryInfo.php',
'OC\\Metadata\\Capabilities' => $baseDir . '/lib/private/Metadata/Capabilities.php',
'OC\\Metadata\\FileEventListener' => $baseDir . '/lib/private/Metadata/FileEventListener.php',
@@ -1391,6 +1392,7 @@ return array(
'OC\\Preview\\Generator' => $baseDir . '/lib/private/Preview/Generator.php',
'OC\\Preview\\GeneratorHelper' => $baseDir . '/lib/private/Preview/GeneratorHelper.php',
'OC\\Preview\\HEIC' => $baseDir . '/lib/private/Preview/HEIC.php',
+ 'OC\\Preview\\IMagickSupport' => $baseDir . '/lib/private/Preview/IMagickSupport.php',
'OC\\Preview\\Illustrator' => $baseDir . '/lib/private/Preview/Illustrator.php',
'OC\\Preview\\Image' => $baseDir . '/lib/private/Preview/Image.php',
'OC\\Preview\\Imaginary' => $baseDir . '/lib/private/Preview/Imaginary.php',
diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php
index 50aaa84ae77..33d63a26e3e 100644
--- a/lib/composer/composer/autoload_static.php
+++ b/lib/composer/composer/autoload_static.php
@@ -1386,6 +1386,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
'OC\\Memcache\\NullCache' => __DIR__ . '/../../..' . '/lib/private/Memcache/NullCache.php',
'OC\\Memcache\\ProfilerWrapperCache' => __DIR__ . '/../../..' . '/lib/private/Memcache/ProfilerWrapperCache.php',
'OC\\Memcache\\Redis' => __DIR__ . '/../../..' . '/lib/private/Memcache/Redis.php',
+ 'OC\\Memcache\\WithLocalCache' => __DIR__ . '/../../..' . '/lib/private/Memcache/WithLocalCache.php',
'OC\\MemoryInfo' => __DIR__ . '/../../..' . '/lib/private/MemoryInfo.php',
'OC\\Metadata\\Capabilities' => __DIR__ . '/../../..' . '/lib/private/Metadata/Capabilities.php',
'OC\\Metadata\\FileEventListener' => __DIR__ . '/../../..' . '/lib/private/Metadata/FileEventListener.php',
@@ -1424,6 +1425,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
'OC\\Preview\\Generator' => __DIR__ . '/../../..' . '/lib/private/Preview/Generator.php',
'OC\\Preview\\GeneratorHelper' => __DIR__ . '/../../..' . '/lib/private/Preview/GeneratorHelper.php',
'OC\\Preview\\HEIC' => __DIR__ . '/../../..' . '/lib/private/Preview/HEIC.php',
+ 'OC\\Preview\\IMagickSupport' => __DIR__ . '/../../..' . '/lib/private/Preview/IMagickSupport.php',
'OC\\Preview\\Illustrator' => __DIR__ . '/../../..' . '/lib/private/Preview/Illustrator.php',
'OC\\Preview\\Image' => __DIR__ . '/../../..' . '/lib/private/Preview/Image.php',
'OC\\Preview\\Imaginary' => __DIR__ . '/../../..' . '/lib/private/Preview/Imaginary.php',
diff --git a/lib/l10n/et_EE.js b/lib/l10n/et_EE.js
index 780dc75930d..4292f2f139d 100644
--- a/lib/l10n/et_EE.js
+++ b/lib/l10n/et_EE.js
@@ -31,6 +31,11 @@ OC.L10N.register(
"_%n hour ago_::_%n hours ago_" : ["%n tund tagasi","%n tundi tagasi"],
"in a few seconds" : "mõne sekundi jooksul",
"seconds ago" : "sekundit tagasi",
+ "Empty file" : "Tühi fail",
+ "File already exists" : "Fail on juba olemas",
+ "Invalid path" : "Vigane kataloogirada",
+ "Failed to create file from template" : "Ei saa luua mallist faili",
+ "Templates" : "Mallid",
"File name is a reserved word" : "Failinimi sisaldab keelatud sõna",
"File name contains at least one invalid character" : "Faili nimesonvähemalt üks keelatud märk",
"File name is too long" : "Faili nimi on liiga pikk",
@@ -40,6 +45,8 @@ OC.L10N.register(
"This is an automatically sent email, please do not reply." : "See on automaatselt saadetud e-kiri, palun ära vasta.",
"Help" : "Abi",
"Apps" : "Rakendused",
+ "Personal settings" : "Isiklikud seaded",
+ "Administration settings" : "Administreerimise seaded",
"Settings" : "Seaded",
"Log out" : "Logi välja",
"Users" : "Kasutajad",
@@ -51,6 +58,8 @@ OC.L10N.register(
"Profile picture" : "Profiili pilt",
"About" : "Info",
"Full name" : "Täisnimi",
+ "Organisation" : "Organisatsioon",
+ "Role" : "Roll",
"Unknown user" : "Tundmatu kasutaja",
"Additional settings" : "Lisaseaded",
"You need to enter details of an existing account." : "Sa pead sisestama olemasoleva konto andmed.",
@@ -135,7 +144,9 @@ OC.L10N.register(
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "See on tõenäoliselt põhjustatud puhver/kiirendist nagu Zend OPcache või eAccelerator.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP moodulid on paigaldatud, kuid neid näitatakse endiselt kui puuduolevad?",
"Please ask your server administrator to restart the web server." : "Palu oma serveri haldajal veebiserver taaskäivitada.",
+ "Please upgrade your database version." : "Palun uuenda oma andmebaasi versioon",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Palun muuda kataloogi õigused 0770-ks, et kataloogi sisu poleks teistele kasutajatele nähtav",
+ "Your data directory is invalid." : "Sinu andmekataloog on vigane",
"Could not obtain lock type %d on \"%s\"." : "Ei suutnud hankida %d tüüpi lukustust \"%s\".",
"Storage is temporarily not available" : "Salvestusruum pole ajutiselt kättesaadav",
"%s enter the database username and name." : "%s sisesta andmebaasi kasutajatunnus ja nimi.",
diff --git a/lib/l10n/et_EE.json b/lib/l10n/et_EE.json
index 05047ef31c1..05bd46aa279 100644
--- a/lib/l10n/et_EE.json
+++ b/lib/l10n/et_EE.json
@@ -29,6 +29,11 @@
"_%n hour ago_::_%n hours ago_" : ["%n tund tagasi","%n tundi tagasi"],
"in a few seconds" : "mõne sekundi jooksul",
"seconds ago" : "sekundit tagasi",
+ "Empty file" : "Tühi fail",
+ "File already exists" : "Fail on juba olemas",
+ "Invalid path" : "Vigane kataloogirada",
+ "Failed to create file from template" : "Ei saa luua mallist faili",
+ "Templates" : "Mallid",
"File name is a reserved word" : "Failinimi sisaldab keelatud sõna",
"File name contains at least one invalid character" : "Faili nimesonvähemalt üks keelatud märk",
"File name is too long" : "Faili nimi on liiga pikk",
@@ -38,6 +43,8 @@
"This is an automatically sent email, please do not reply." : "See on automaatselt saadetud e-kiri, palun ära vasta.",
"Help" : "Abi",
"Apps" : "Rakendused",
+ "Personal settings" : "Isiklikud seaded",
+ "Administration settings" : "Administreerimise seaded",
"Settings" : "Seaded",
"Log out" : "Logi välja",
"Users" : "Kasutajad",
@@ -49,6 +56,8 @@
"Profile picture" : "Profiili pilt",
"About" : "Info",
"Full name" : "Täisnimi",
+ "Organisation" : "Organisatsioon",
+ "Role" : "Roll",
"Unknown user" : "Tundmatu kasutaja",
"Additional settings" : "Lisaseaded",
"You need to enter details of an existing account." : "Sa pead sisestama olemasoleva konto andmed.",
@@ -133,7 +142,9 @@
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "See on tõenäoliselt põhjustatud puhver/kiirendist nagu Zend OPcache või eAccelerator.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP moodulid on paigaldatud, kuid neid näitatakse endiselt kui puuduolevad?",
"Please ask your server administrator to restart the web server." : "Palu oma serveri haldajal veebiserver taaskäivitada.",
+ "Please upgrade your database version." : "Palun uuenda oma andmebaasi versioon",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Palun muuda kataloogi õigused 0770-ks, et kataloogi sisu poleks teistele kasutajatele nähtav",
+ "Your data directory is invalid." : "Sinu andmekataloog on vigane",
"Could not obtain lock type %d on \"%s\"." : "Ei suutnud hankida %d tüüpi lukustust \"%s\".",
"Storage is temporarily not available" : "Salvestusruum pole ajutiselt kättesaadav",
"%s enter the database username and name." : "%s sisesta andmebaasi kasutajatunnus ja nimi.",
diff --git a/lib/l10n/hu.js b/lib/l10n/hu.js
index 06770c1f1b0..9fb6d495087 100644
--- a/lib/l10n/hu.js
+++ b/lib/l10n/hu.js
@@ -114,7 +114,7 @@ OC.L10N.register(
"Profile picture" : "Profilkép",
"About" : "Névjegy",
"Full name" : "Teljes név",
- "Headline" : "Főcím",
+ "Headline" : "Címsor",
"Organisation" : "Szervezet",
"Role" : "Szerepkör",
"Unknown user" : "Ismeretlen felhasználó",
diff --git a/lib/l10n/hu.json b/lib/l10n/hu.json
index 2b5dfb58ec6..a36249b02f6 100644
--- a/lib/l10n/hu.json
+++ b/lib/l10n/hu.json
@@ -112,7 +112,7 @@
"Profile picture" : "Profilkép",
"About" : "Névjegy",
"Full name" : "Teljes név",
- "Headline" : "Főcím",
+ "Headline" : "Címsor",
"Organisation" : "Szervezet",
"Role" : "Szerepkör",
"Unknown user" : "Ismeretlen felhasználó",
diff --git a/lib/l10n/nl.js b/lib/l10n/nl.js
index a98b5695f2c..1f5cc16f998 100644
--- a/lib/l10n/nl.js
+++ b/lib/l10n/nl.js
@@ -222,6 +222,8 @@ OC.L10N.register(
"Please ask your server administrator to install the module." : "Vraag je beheerder om de module te installeren.",
"PHP setting \"%s\" is not set to \"%s\"." : "PHP instelling \"%s\" staat niet op \"%s\".",
"Adjusting this setting in php.ini will make Nextcloud run again" : "Het aanpassen van deze instelling in php.ini zorgt ervoor dat Nextcloud weer start",
+ "<code>mbstring.func_overload</code> is set to <code>%s</code> instead of the expected value <code>0</code>." : "<code>mbstring.func_overload</code> is ingesteld op <code>%s</code> in plaats van de verwachte waarde <code>0</code>.",
+ "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini." : "Om dit op te lossen stel je <code>mbstring.func_overload</code> in op <code>0</code> in je php.ini.",
"libxml2 2.7.0 is at least required. Currently %s is installed." : "De minimale versie van libxml2 versie is 2.7.0. Momenteel is versie%s geïnstalleerd.",
"To fix this issue update your libxml2 version and restart your web server." : "Om dit probleem op te lossen, moet je de libxml2 versie bijwerken en je webserver herstarten.",
"PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP is nu zo ingesteld dat 'inline doc blocks' worden gestript. Hierdoor worden verschillende hoofd modules onbruikbaar.",
diff --git a/lib/l10n/nl.json b/lib/l10n/nl.json
index 978ce6781ca..a33d5186bf9 100644
--- a/lib/l10n/nl.json
+++ b/lib/l10n/nl.json
@@ -220,6 +220,8 @@
"Please ask your server administrator to install the module." : "Vraag je beheerder om de module te installeren.",
"PHP setting \"%s\" is not set to \"%s\"." : "PHP instelling \"%s\" staat niet op \"%s\".",
"Adjusting this setting in php.ini will make Nextcloud run again" : "Het aanpassen van deze instelling in php.ini zorgt ervoor dat Nextcloud weer start",
+ "<code>mbstring.func_overload</code> is set to <code>%s</code> instead of the expected value <code>0</code>." : "<code>mbstring.func_overload</code> is ingesteld op <code>%s</code> in plaats van de verwachte waarde <code>0</code>.",
+ "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini." : "Om dit op te lossen stel je <code>mbstring.func_overload</code> in op <code>0</code> in je php.ini.",
"libxml2 2.7.0 is at least required. Currently %s is installed." : "De minimale versie van libxml2 versie is 2.7.0. Momenteel is versie%s geïnstalleerd.",
"To fix this issue update your libxml2 version and restart your web server." : "Om dit probleem op te lossen, moet je de libxml2 versie bijwerken en je webserver herstarten.",
"PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP is nu zo ingesteld dat 'inline doc blocks' worden gestript. Hierdoor worden verschillende hoofd modules onbruikbaar.",
diff --git a/lib/private/AppFramework/App.php b/lib/private/AppFramework/App.php
index d2ef7da9e46..abf8a08a44b 100644
--- a/lib/private/AppFramework/App.php
+++ b/lib/private/AppFramework/App.php
@@ -34,7 +34,6 @@ namespace OC\AppFramework;
use OC\AppFramework\DependencyInjection\DIContainer;
use OC\AppFramework\Http\Dispatcher;
use OC\AppFramework\Http\Request;
-use OC\Diagnostics\EventLogger;
use OCP\Profiler\IProfiler;
use OC\Profiler\RoutingDataCollector;
use OCP\AppFramework\QueryException;
@@ -43,7 +42,6 @@ use OCP\AppFramework\Http\ICallbackResponse;
use OCP\AppFramework\Http\IOutput;
use OCP\Diagnostics\IEventLogger;
use OCP\HintException;
-use OCP\IConfig;
use OCP\IRequest;
/**
@@ -120,7 +118,7 @@ class App {
public static function main(string $controllerName, string $methodName, DIContainer $container, array $urlParams = null) {
/** @var IProfiler $profiler */
$profiler = $container->get(IProfiler::class);
- $config = $container->get(IConfig::class);
+ $eventLogger = $container->get(IEventLogger::class);
// Disable profiler on the profiler UI
$profiler->setEnabled($profiler->isEnabled() && !is_null($urlParams) && isset($urlParams['_route']) && !str_starts_with($urlParams['_route'], 'profiler.'));
if ($profiler->isEnabled()) {
@@ -128,6 +126,8 @@ class App {
$profiler->add(new RoutingDataCollector($container['AppName'], $controllerName, $methodName));
}
+ $eventLogger->start('app:controller:params', 'Gather controller parameters');
+
if (!is_null($urlParams)) {
/** @var Request $request */
$request = $container->get(IRequest::class);
@@ -139,6 +139,10 @@ class App {
}
$appName = $container['AppName'];
+ $eventLogger->end('app:controller:params');
+
+ $eventLogger->start('app:controller:load', 'Load app controller');
+
// first try $controllerName then go for \OCA\AppName\Controller\$controllerName
try {
$controller = $container->get($controllerName);
@@ -158,10 +162,18 @@ class App {
$controller = $container->query($controllerName);
}
+ $eventLogger->end('app:controller:load');
+
+ $eventLogger->start('app:controller:dispatcher', 'Initialize dispatcher and pre-middleware');
+
// initialize the dispatcher and run all the middleware before the controller
/** @var Dispatcher $dispatcher */
$dispatcher = $container['Dispatcher'];
+ $eventLogger->end('app:controller:dispatcher');
+
+ $eventLogger->start('app:controller:run', 'Run app controller');
+
[
$httpHeaders,
$responseHeaders,
@@ -170,11 +182,11 @@ class App {
$response
] = $dispatcher->dispatch($controller, $methodName);
+ $eventLogger->end('app:controller:run');
+
$io = $container[IOutput::class];
if ($profiler->isEnabled()) {
- /** @var EventLogger $eventLogger */
- $eventLogger = $container->get(IEventLogger::class);
$eventLogger->end('runtime');
$profile = $profiler->collect($container->get(IRequest::class), $response);
$profiler->saveProfile($profile);
diff --git a/lib/private/Config.php b/lib/private/Config.php
index ba3b8c6fe4d..7308a3769df 100644
--- a/lib/private/Config.php
+++ b/lib/private/Config.php
@@ -285,6 +285,13 @@ class Config {
'This can usually be fixed by giving the webserver write access to the config directory.');
}
+ // Never write file back if disk space should be too low
+ $df = disk_free_space($this->configDir);
+ $size = strlen($content) + 10240;
+ if ($df !== false && (int)$df < $size) {
+ throw new \Exception($this->configDir . " does not have enough space for writing the config file! Not writing it back!");
+ }
+
// Try to acquire a file lock
if (!flock($filePointer, LOCK_EX)) {
throw new \Exception(sprintf('Could not acquire an exclusive lock on the config file %s', $this->configFilePath));
diff --git a/lib/private/Contacts/ContactsMenu/ContactsStore.php b/lib/private/Contacts/ContactsMenu/ContactsStore.php
index a0a14cd9cbd..3a75e924d24 100644
--- a/lib/private/Contacts/ContactsMenu/ContactsStore.php
+++ b/lib/private/Contacts/ContactsMenu/ContactsStore.php
@@ -287,7 +287,13 @@ class ContactsStore implements IContactsStore {
if (isset($contact['UID'])) {
$uid = $contact['UID'];
$entry->setId($uid);
- $avatar = $this->urlGenerator->linkToRouteAbsolute('core.avatar.getAvatar', ['userId' => $uid, 'size' => 64]);
+ if (isset($contact['isLocalSystemBook'])) {
+ $avatar = $this->urlGenerator->linkToRouteAbsolute('core.avatar.getAvatar', ['userId' => $uid, 'size' => 64]);
+ } elseif (isset($contact['FN'])) {
+ $avatar = $this->urlGenerator->linkToRouteAbsolute('core.GuestAvatar.getAvatar', ['guestName' => $contact['FN'], 'size' => 64]);
+ } else {
+ $avatar = $this->urlGenerator->linkToRouteAbsolute('core.GuestAvatar.getAvatar', ['guestName' => $uid, 'size' => 64]);
+ }
$entry->setAvatar($avatar);
}
diff --git a/lib/private/DB/BacktraceDebugStack.php b/lib/private/DB/BacktraceDebugStack.php
index be37e5a35da..6a19be89225 100644
--- a/lib/private/DB/BacktraceDebugStack.php
+++ b/lib/private/DB/BacktraceDebugStack.php
@@ -30,5 +30,6 @@ class BacktraceDebugStack extends DebugStack {
parent::startQuery($sql, $params, $types);
$backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
$this->queries[$this->currentQuery]['backtrace'] = $backtrace;
+ $this->queries[$this->currentQuery]['start'] = $this->start;
}
}
diff --git a/lib/private/Files/Config/MountProviderCollection.php b/lib/private/Files/Config/MountProviderCollection.php
index 0e08d9d0e83..ae6481e45bb 100644
--- a/lib/private/Files/Config/MountProviderCollection.php
+++ b/lib/private/Files/Config/MountProviderCollection.php
@@ -26,6 +26,7 @@ namespace OC\Files\Config;
use OC\Hooks\Emitter;
use OC\Hooks\EmitterTrait;
+use OCP\Diagnostics\IEventLogger;
use OCP\Files\Config\IHomeMountProvider;
use OCP\Files\Config\IMountProvider;
use OCP\Files\Config\IMountProviderCollection;
@@ -65,13 +66,29 @@ class MountProviderCollection implements IMountProviderCollection, Emitter {
/** @var callable[] */
private $mountFilters = [];
+ private IEventLogger $eventLogger;
+
/**
* @param \OCP\Files\Storage\IStorageFactory $loader
* @param IUserMountCache $mountCache
*/
- public function __construct(IStorageFactory $loader, IUserMountCache $mountCache) {
+ public function __construct(
+ IStorageFactory $loader,
+ IUserMountCache $mountCache,
+ IEventLogger $eventLogger
+ ) {
$this->loader = $loader;
$this->mountCache = $mountCache;
+ $this->eventLogger = $eventLogger;
+ }
+
+ private function getMountsFromProvider(IMountProvider $provider, IUser $user, IStorageFactory $loader): array {
+ $class = str_replace('\\', '_', get_class($provider));
+ $uid = $user->getUID();
+ $this->eventLogger->start('fs:setup:provider:' . $class, "Getting mounts from $class for $uid");
+ $mounts = $provider->getMountsForUser($user, $loader) ?? [];
+ $this->eventLogger->end('fs:setup:provider:' . $class);
+ return $mounts;
}
/**
@@ -82,11 +99,8 @@ class MountProviderCollection implements IMountProviderCollection, Emitter {
private function getUserMountsForProviders(IUser $user, array $providers): array {
$loader = $this->loader;
$mounts = array_map(function (IMountProvider $provider) use ($user, $loader) {
- return $provider->getMountsForUser($user, $loader);
+ return $this->getMountsFromProvider($provider, $user, $loader);
}, $providers);
- $mounts = array_filter($mounts, function ($result) {
- return is_array($result);
- });
$mounts = array_reduce($mounts, function (array $mounts, array $providerMounts) {
return array_merge($mounts, $providerMounts);
}, []);
@@ -121,24 +135,22 @@ class MountProviderCollection implements IMountProviderCollection, Emitter {
return (get_class($provider) === 'OCA\Files_Sharing\MountProvider');
});
foreach ($firstProviders as $provider) {
- $mounts = $provider->getMountsForUser($user, $this->loader);
- if (is_array($mounts)) {
- $firstMounts = array_merge($firstMounts, $mounts);
- }
+ $mounts = $this->getMountsFromProvider($provider, $user, $this->loader);
+ $firstMounts = array_merge($firstMounts, $mounts);
}
$firstMounts = $this->filterMounts($user, $firstMounts);
array_walk($firstMounts, [$mountManager, 'addMount']);
$lateMounts = [];
foreach ($lastProviders as $provider) {
- $mounts = $provider->getMountsForUser($user, $this->loader);
- if (is_array($mounts)) {
- $lateMounts = array_merge($lateMounts, $mounts);
- }
+ $mounts = $this->getMountsFromProvider($provider, $user, $this->loader);
+ $lateMounts = array_merge($lateMounts, $mounts);
}
$lateMounts = $this->filterMounts($user, $lateMounts);
+ $this->eventLogger->start("fs:setup:add-mounts", "Add mounts to the filesystem");
array_walk($lateMounts, [$mountManager, 'addMount']);
+ $this->eventLogger->end("fs:setup:add-mounts");
return array_merge($lateMounts, $firstMounts);
}
diff --git a/lib/private/Files/Config/UserMountCache.php b/lib/private/Files/Config/UserMountCache.php
index 3540b563742..fe677c5ea52 100644
--- a/lib/private/Files/Config/UserMountCache.php
+++ b/lib/private/Files/Config/UserMountCache.php
@@ -31,6 +31,7 @@ namespace OC\Files\Config;
use OCP\Cache\CappedMemoryCache;
use OCA\Files_Sharing\SharedMount;
use OCP\DB\QueryBuilder\IQueryBuilder;
+use OCP\Diagnostics\IEventLogger;
use OCP\Files\Config\ICachedMountFileInfo;
use OCP\Files\Config\ICachedMountInfo;
use OCP\Files\Config\IUserMountCache;
@@ -56,19 +57,27 @@ class UserMountCache implements IUserMountCache {
private LoggerInterface $logger;
/** @var CappedMemoryCache<array> */
private CappedMemoryCache $cacheInfoCache;
+ private IEventLogger $eventLogger;
/**
* UserMountCache constructor.
*/
- public function __construct(IDBConnection $connection, IUserManager $userManager, LoggerInterface $logger) {
+ public function __construct(
+ IDBConnection $connection,
+ IUserManager $userManager,
+ LoggerInterface $logger,
+ IEventLogger $eventLogger
+ ) {
$this->connection = $connection;
$this->userManager = $userManager;
$this->logger = $logger;
+ $this->eventLogger = $eventLogger;
$this->cacheInfoCache = new CappedMemoryCache();
$this->mountsForUsers = new CappedMemoryCache();
}
public function registerMounts(IUser $user, array $mounts, array $mountProviderClasses = null) {
+ $this->eventLogger->start('fs:setup:user:register', 'Registering mounts for user');
// filter out non-proper storages coming from unit tests
$mounts = array_filter($mounts, function (IMountPoint $mount) {
return $mount instanceof SharedMount || ($mount->getStorage() && $mount->getStorage()->getCache());
@@ -134,6 +143,7 @@ class UserMountCache implements IUserMountCache {
foreach ($changedMounts as $mount) {
$this->updateCachedMount($mount);
}
+ $this->eventLogger->end('fs:setup:user:register');
}
/**
diff --git a/lib/private/Files/SetupManager.php b/lib/private/Files/SetupManager.php
index 979e4ce966a..4cbd0328d76 100644
--- a/lib/private/Files/SetupManager.php
+++ b/lib/private/Files/SetupManager.php
@@ -212,6 +212,8 @@ class SetupManager {
}
$this->setupUsersComplete[] = $user->getUID();
+ $this->eventLogger->start('fs:setup:user:full', 'Setup full filesystem for user');
+
if (!isset($this->setupUserMountProviders[$user->getUID()])) {
$this->setupUserMountProviders[$user->getUID()] = [];
}
@@ -226,6 +228,7 @@ class SetupManager {
});
});
$this->afterUserFullySetup($user, $previouslySetupProviders);
+ $this->eventLogger->end('fs:setup:user:full');
}
/**
@@ -237,6 +240,8 @@ class SetupManager {
}
$this->setupUsers[] = $user->getUID();
+ $this->eventLogger->start('fs:setup:user:onetime', 'Onetime filesystem for user');
+
$this->setupBuiltinWrappers();
$prevLogging = Filesystem::logWarningWhenAddingStorageWrapper(false);
@@ -250,14 +255,18 @@ class SetupManager {
Filesystem::initInternal($userDir);
if ($this->lockdownManager->canAccessFilesystem()) {
+ $this->eventLogger->start('fs:setup:user:home', 'Setup home filesystem for user');
// home mounts are handled separate since we need to ensure this is mounted before we call the other mount providers
$homeMount = $this->mountProviderCollection->getHomeMountForUser($user);
$this->mountManager->addMount($homeMount);
if ($homeMount->getStorageRootId() === -1) {
+ $this->eventLogger->start('fs:setup:user:home:scan', 'Scan home filesystem for user');
$homeMount->getStorage()->mkdir('');
$homeMount->getStorage()->getScanner()->scan('');
+ $this->eventLogger->end('fs:setup:user:home:scan');
}
+ $this->eventLogger->end('fs:setup:user:home');
} else {
$this->mountManager->addMount(new MountPoint(
new NullStorage([]),
@@ -271,12 +280,15 @@ class SetupManager {
}
$this->listenForNewMountProviders();
+
+ $this->eventLogger->end('fs:setup:user:onetime');
}
/**
* Final housekeeping after a user has been fully setup
*/
private function afterUserFullySetup(IUser $user, array $previouslySetupProviders): void {
+ $this->eventLogger->start('fs:setup:user:full:post', 'Housekeeping after user is setup');
$userRoot = '/' . $user->getUID() . '/';
$mounts = $this->mountManager->getAll();
$mounts = array_filter($mounts, function (IMountPoint $mount) use ($userRoot) {
@@ -296,6 +308,7 @@ class SetupManager {
$this->cache->set($user->getUID(), true, $cacheDuration);
$this->fullSetupRequired[$user->getUID()] = false;
}
+ $this->eventLogger->end('fs:setup:user:full:post');
}
/**
@@ -312,17 +325,17 @@ class SetupManager {
$this->oneTimeUserSetup($user);
}
- $this->eventLogger->start('setup_fs', 'Setup filesystem');
-
if ($this->lockdownManager->canAccessFilesystem()) {
$mountCallback();
}
+ $this->eventLogger->start('fs:setup:user:post-init-mountpoint', 'post_initMountPoints legacy hook');
\OC_Hook::emit('OC_Filesystem', 'post_initMountPoints', ['user' => $user->getUID()]);
+ $this->eventLogger->end('fs:setup:user:post-init-mountpoint');
$userDir = '/' . $user->getUID() . '/files';
+ $this->eventLogger->start('fs:setup:user:setup-hook', 'setup legacy hook');
OC_Hook::emit('OC_Filesystem', 'setup', ['user' => $user->getUID(), 'user_dir' => $userDir]);
-
- $this->eventLogger->end('setup_fs');
+ $this->eventLogger->end('fs:setup:user:setup-hook');
}
/**
@@ -335,7 +348,7 @@ class SetupManager {
}
$this->rootSetup = true;
- $this->eventLogger->start('setup_root_fs', 'Setup root filesystem');
+ $this->eventLogger->start('fs:setup:root', 'Setup root filesystem');
$this->setupBuiltinWrappers();
@@ -344,7 +357,7 @@ class SetupManager {
$this->mountManager->addMount($rootMountProvider);
}
- $this->eventLogger->end('setup_root_fs');
+ $this->eventLogger->end('fs:setup:root');
}
/**
@@ -413,6 +426,9 @@ class SetupManager {
$this->oneTimeUserSetup($user);
}
+ $this->eventLogger->start('fs:setup:user:path', "Setup $path filesystem for user");
+ $this->eventLogger->start('fs:setup:user:path:find', "Find mountpoint for $path");
+
$mounts = [];
if (!in_array($cachedMount->getMountProvider(), $setupProviders)) {
$currentProviders[] = $cachedMount->getMountProvider();
@@ -421,13 +437,16 @@ class SetupManager {
$mounts = $this->mountProviderCollection->getUserMountsForProviderClasses($user, [$cachedMount->getMountProvider()]);
} else {
$this->logger->debug("mount at " . $cachedMount->getMountPoint() . " has no provider set, performing full setup");
+ $this->eventLogger->end('fs:setup:user:path:find');
$this->setupForUser($user);
+ $this->eventLogger->end('fs:setup:user:path');
return;
}
}
if ($includeChildren) {
$subCachedMounts = $this->userMountCache->getMountsInPath($user, $path);
+ $this->eventLogger->end('fs:setup:user:path:find');
$needsFullSetup = array_reduce($subCachedMounts, function (bool $needsFullSetup, ICachedMountInfo $cachedMountInfo) {
return $needsFullSetup || $cachedMountInfo->getMountProvider() === '';
@@ -436,6 +455,7 @@ class SetupManager {
if ($needsFullSetup) {
$this->logger->debug("mount has no provider set, performing full setup");
$this->setupForUser($user);
+ $this->eventLogger->end('fs:setup:user:path');
return;
} else {
foreach ($subCachedMounts as $cachedMount) {
@@ -446,6 +466,8 @@ class SetupManager {
}
}
}
+ } else {
+ $this->eventLogger->end('fs:setup:user:path:find');
}
if (count($mounts)) {
@@ -456,6 +478,7 @@ class SetupManager {
} elseif (!$this->isSetupStarted($user)) {
$this->oneTimeUserSetup($user);
}
+ $this->eventLogger->end('fs:setup:user:path');
}
private function fullSetupRequired(IUser $user): bool {
@@ -488,6 +511,8 @@ class SetupManager {
return;
}
+ $this->eventLogger->start('fs:setup:user:providers', "Setup filesystem for " . implode(', ', $providers));
+
// home providers are always used
$providers = array_filter($providers, function (string $provider) {
return !is_subclass_of($provider, IHomeMountProvider::class);
@@ -504,6 +529,7 @@ class SetupManager {
if (!$this->isSetupStarted($user)) {
$this->oneTimeUserSetup($user);
}
+ $this->eventLogger->end('fs:setup:user:providers');
return;
} else {
$this->setupUserMountProviders[$user->getUID()] = array_merge($setupProviders, $providers);
@@ -514,6 +540,7 @@ class SetupManager {
$this->setupForUserWith($user, function () use ($mounts) {
array_walk($mounts, [$this->mountManager, 'addMount']);
});
+ $this->eventLogger->end('fs:setup:user:providers');
}
public function tearDown() {
diff --git a/lib/private/Memcache/WithLocalCache.php b/lib/private/Memcache/WithLocalCache.php
new file mode 100644
index 00000000000..5b7ccc10e39
--- /dev/null
+++ b/lib/private/Memcache/WithLocalCache.php
@@ -0,0 +1,54 @@
+<?php
+
+namespace OC\Memcache;
+
+use OCP\Cache\CappedMemoryCache;
+use OCP\ICache;
+
+/**
+ * Wrap a cache instance with an extra later of local, in-memory caching
+ */
+class WithLocalCache implements ICache {
+ private ICache $inner;
+ private CappedMemoryCache $cached;
+
+ public function __construct(ICache $inner, int $localCapacity = 512) {
+ $this->inner = $inner;
+ $this->cached = new CappedMemoryCache($localCapacity);
+ }
+
+ public function get($key) {
+ if (isset($this->cached[$key])) {
+ return $this->cached[$key];
+ } else {
+ $value = $this->inner->get($key);
+ if (!is_null($value)) {
+ $this->cached[$key] = $value;
+ }
+ return $value;
+ }
+ }
+
+ public function set($key, $value, $ttl = 0) {
+ $this->cached[$key] = $value;
+ return $this->inner->set($key, $value, $ttl);
+ }
+
+ public function hasKey($key) {
+ return isset($this->cached[$key]) || $this->inner->hasKey($key);
+ }
+
+ public function remove($key) {
+ unset($this->cached[$key]);
+ return $this->inner->remove($key);
+ }
+
+ public function clear($prefix = '') {
+ $this->cached->clear();
+ return $this->inner->clear($prefix);
+ }
+
+ public static function isAvailable(): bool {
+ return false;
+ }
+}
diff --git a/lib/private/Preview/IMagickSupport.php b/lib/private/Preview/IMagickSupport.php
new file mode 100644
index 00000000000..e22ae93ab94
--- /dev/null
+++ b/lib/private/Preview/IMagickSupport.php
@@ -0,0 +1,40 @@
+<?php
+
+namespace OC\Preview;
+
+use OCP\ICache;
+use OCP\ICacheFactory;
+
+class IMagickSupport {
+ private ICache $cache;
+ private ?\Imagick $imagick;
+
+ public function __construct(ICacheFactory $cacheFactory) {
+ $this->cache = $cacheFactory->createLocal('imagick');
+
+ if (extension_loaded('imagick')) {
+ $this->imagick = new \Imagick();
+ } else {
+ $this->imagick = null;
+ }
+ }
+
+ public function hasExtension(): bool {
+ return !is_null($this->imagick);
+ }
+
+ public function supportsFormat(string $format): bool {
+ if (is_null($this->imagick)) {
+ return false;
+ }
+
+ $cached = $this->cache->get($format);
+ if (!is_null($cached)) {
+ return $cached;
+ }
+
+ $formatSupported = count($this->imagick->queryFormats($format)) === 1;
+ $this->cache->set($format, $cached);
+ return $formatSupported;
+ }
+}
diff --git a/lib/private/PreviewManager.php b/lib/private/PreviewManager.php
index 367f0c1c057..dd6b6ba8ee1 100644
--- a/lib/private/PreviewManager.php
+++ b/lib/private/PreviewManager.php
@@ -33,6 +33,7 @@ namespace OC;
use OC\AppFramework\Bootstrap\Coordinator;
use OC\Preview\Generator;
use OC\Preview\GeneratorHelper;
+use OC\Preview\IMagickSupport;
use OCP\AppFramework\QueryException;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\Files\File;
@@ -73,6 +74,7 @@ class PreviewManager implements IPreview {
private array $loadedBootstrapProviders = [];
private IServerContainer $container;
private IBinaryFinder $binaryFinder;
+ private IMagickSupport $imagickSupport;
public function __construct(
IConfig $config,
@@ -84,7 +86,8 @@ class PreviewManager implements IPreview {
?string $userId,
Coordinator $bootstrapCoordinator,
IServerContainer $container,
- IBinaryFinder $binaryFinder
+ IBinaryFinder $binaryFinder,
+ IMagickSupport $imagickSupport
) {
$this->config = $config;
$this->rootFolder = $rootFolder;
@@ -96,6 +99,7 @@ class PreviewManager implements IPreview {
$this->bootstrapCoordinator = $bootstrapCoordinator;
$this->container = $container;
$this->binaryFinder = $binaryFinder;
+ $this->imagickSupport = $imagickSupport;
}
/**
@@ -368,9 +372,7 @@ class PreviewManager implements IPreview {
$this->registerCoreProvider(Preview\Imaginary::class, Preview\Imaginary::supportedMimeTypes());
// SVG, Office and Bitmap require imagick
- if (extension_loaded('imagick')) {
- $checkImagick = new \Imagick();
-
+ if ($this->imagickSupport->hasExtension()) {
$imagickProviders = [
'SVG' => ['mimetype' => '/image\/svg\+xml/', 'class' => Preview\SVG::class],
'TIFF' => ['mimetype' => '/image\/tiff/', 'class' => Preview\TIFF::class],
@@ -390,12 +392,12 @@ class PreviewManager implements IPreview {
continue;
}
- if (count($checkImagick->queryFormats($queryFormat)) === 1) {
+ if ($this->imagickSupport->supportsFormat($queryFormat)) {
$this->registerCoreProvider($class, $provider['mimetype']);
}
}
- if (count($checkImagick->queryFormats('PDF')) === 1) {
+ if ($this->imagickSupport->supportsFormat('PDF')) {
// Office requires openoffice or libreoffice
$officeBinary = $this->config->getSystemValue('preview_libreoffice_path', null);
if (!is_string($officeBinary)) {
diff --git a/lib/private/Route/CachingRouter.php b/lib/private/Route/CachingRouter.php
index f65060e710b..69fb3c986c9 100644
--- a/lib/private/Route/CachingRouter.php
+++ b/lib/private/Route/CachingRouter.php
@@ -24,20 +24,27 @@
*/
namespace OC\Route;
+use OCP\Diagnostics\IEventLogger;
+use OCP\ICache;
+use OCP\ICacheFactory;
+use OCP\IConfig;
+use OCP\IRequest;
+use Psr\Container\ContainerInterface;
use Psr\Log\LoggerInterface;
class CachingRouter extends Router {
- /**
- * @var \OCP\ICache
- */
- protected $cache;
+ protected ICache $cache;
- /**
- * @param \OCP\ICache $cache
- */
- public function __construct($cache, LoggerInterface $logger) {
- $this->cache = $cache;
- parent::__construct($logger);
+ public function __construct(
+ ICacheFactory $cacheFactory,
+ LoggerInterface $logger,
+ IRequest $request,
+ IConfig $config,
+ IEventLogger $eventLogger,
+ ContainerInterface $container
+ ) {
+ $this->cache = $cacheFactory->createLocal('route');
+ parent::__construct($logger, $request, $config, $eventLogger, $container);
}
/**
diff --git a/lib/private/Route/Router.php b/lib/private/Route/Router.php
index 7e1acd49800..e2a092d861e 100644
--- a/lib/private/Route/Router.php
+++ b/lib/private/Route/Router.php
@@ -34,8 +34,12 @@ namespace OC\Route;
use OC\AppFramework\Routing\RouteParser;
use OCP\AppFramework\App;
+use OCP\Diagnostics\IEventLogger;
+use OCP\IConfig;
+use OCP\IRequest;
use OCP\Route\IRouter;
use OCP\Util;
+use Psr\Container\ContainerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Component\Routing\Exception\ResourceNotFoundException;
use Symfony\Component\Routing\Exception\RouteNotFoundException;
@@ -64,11 +68,21 @@ class Router implements IRouter {
protected LoggerInterface $logger;
/** @var RequestContext */
protected $context;
-
- public function __construct(LoggerInterface $logger) {
+ private IEventLogger $eventLogger;
+ private IConfig $config;
+ private ContainerInterface $container;
+
+ public function __construct(
+ LoggerInterface $logger,
+ IRequest $request,
+ IConfig $config,
+ IEventLogger $eventLogger,
+ ContainerInterface $container
+ ) {
$this->logger = $logger;
+ $this->config = $config;
$baseUrl = \OC::$WEBROOT;
- if (!(\OC::$server->getConfig()->getSystemValue('htaccess.IgnoreFrontController', false) === true || getenv('front_controller_active') === 'true')) {
+ if (!($config->getSystemValue('htaccess.IgnoreFrontController', false) === true || getenv('front_controller_active') === 'true')) {
$baseUrl .= '/index.php';
}
if (!\OC::$CLI && isset($_SERVER['REQUEST_METHOD'])) {
@@ -76,12 +90,13 @@ class Router implements IRouter {
} else {
$method = 'GET';
}
- $request = \OC::$server->getRequest();
$host = $request->getServerHost();
$schema = $request->getServerProtocol();
$this->context = new RequestContext($baseUrl, $method, $host, $schema);
// TODO cache
$this->root = $this->getCollection('root');
+ $this->eventLogger = $eventLogger;
+ $this->container = $container;
}
/**
@@ -134,7 +149,7 @@ class Router implements IRouter {
$routingFiles = [];
}
}
- \OC::$server->getEventLogger()->start('loadroutes' . $requestedApp, 'Loading Routes');
+ $this->eventLogger->start('route:load:' . $requestedApp, 'Loading Routes for ' . $requestedApp);
foreach ($routingFiles as $app => $file) {
if (!isset($this->loadedApps[$app])) {
if (!\OC_App::isAppLoaded($app)) {
@@ -170,7 +185,7 @@ class Router implements IRouter {
$collection->addPrefix('/ocs');
$this->root->addCollection($collection);
}
- \OC::$server->getEventLogger()->end('loadroutes' . $requestedApp);
+ $this->eventLogger->end('route:load:' . $requestedApp);
}
/**
@@ -231,6 +246,7 @@ class Router implements IRouter {
* @return array
*/
public function findMatchingRoute(string $url): array {
+ $this->eventLogger->start('route:match', 'Match route');
if (substr($url, 0, 6) === '/apps/') {
// empty string / 'apps' / $app / rest of the route
[, , $app,] = explode('/', $url, 4);
@@ -249,7 +265,7 @@ class Router implements IRouter {
$this->loadRoutes('settings');
} elseif (substr($url, 0, 6) === '/core/') {
\OC::$REQUESTEDAPP = $url;
- if (!\OC::$server->getConfig()->getSystemValueBool('maintenance') && !Util::needUpgrade()) {
+ if (!$this->config->getSystemValueBool('maintenance') && !Util::needUpgrade()) {
\OC_App::loadApps();
}
$this->loadRoutes('core');
@@ -276,6 +292,7 @@ class Router implements IRouter {
}
}
+ $this->eventLogger->end('route:match');
return $parameters;
}
@@ -289,7 +306,7 @@ class Router implements IRouter {
public function match($url) {
$parameters = $this->findMatchingRoute($url);
- \OC::$server->getEventLogger()->start('run_route', 'Run route');
+ $this->eventLogger->start('route:run', 'Run route');
if (isset($parameters['caller'])) {
$caller = $parameters['caller'];
unset($parameters['caller']);
@@ -303,13 +320,15 @@ class Router implements IRouter {
}
unset($parameters['action']);
unset($parameters['caller']);
+ $this->eventLogger->start('route:run:call', 'Run callable route');
call_user_func($action, $parameters);
+ $this->eventLogger->end('route:run:call');
} elseif (isset($parameters['file'])) {
include $parameters['file'];
} else {
throw new \Exception('no action available');
}
- \OC::$server->getEventLogger()->end('run_route');
+ $this->eventLogger->end('route:run');
}
/**
@@ -434,7 +453,7 @@ class Router implements IRouter {
$applicationClassName = $appNameSpace . '\\AppInfo\\Application';
if (class_exists($applicationClassName)) {
- $application = \OC::$server->query($applicationClassName);
+ $application = $this->container->get($applicationClassName);
} else {
$application = new App($appName);
}
diff --git a/lib/private/Server.php b/lib/private/Server.php
index bd33cdf58bd..35f63686457 100644
--- a/lib/private/Server.php
+++ b/lib/private/Server.php
@@ -86,6 +86,7 @@ use OC\EventDispatcher\SymfonyAdapter;
use OC\Federation\CloudFederationFactory;
use OC\Federation\CloudFederationProviderManager;
use OC\Federation\CloudIdManager;
+use OC\Files\Config\MountProviderCollection;
use OC\Files\Config\UserMountCache;
use OC\Files\Config\UserMountCacheListener;
use OC\Files\Lock\LockManager;
@@ -126,9 +127,11 @@ use OC\Metadata\MetadataManager;
use OC\Notification\Manager;
use OC\OCS\DiscoveryService;
use OC\Preview\GeneratorHelper;
+use OC\Preview\IMagickSupport;
use OC\Remote\Api\ApiFactory;
use OC\Remote\InstanceFactory;
use OC\RichObjectStrings\Validator;
+use OC\Route\CachingRouter;
use OC\Route\Router;
use OC\Security\Bruteforce\Throttler;
use OC\Security\CertificateManager;
@@ -336,7 +339,8 @@ class Server extends ServerContainer implements IServerContainer {
$c->get(ISession::class)->get('user_id'),
$c->get(Coordinator::class),
$c->get(IServerContainer::class),
- $c->get(IBinaryFinder::class)
+ $c->get(IBinaryFinder::class),
+ $c->get(IMagickSupport::class)
);
});
/** @deprecated 19.0.0 */
@@ -819,11 +823,10 @@ class Server extends ServerContainer implements IServerContainer {
$this->registerService(Router::class, function (Server $c) {
$cacheFactory = $c->get(ICacheFactory::class);
- $logger = $c->get(LoggerInterface::class);
if ($cacheFactory->isLocalCacheAvailable()) {
- $router = new \OC\Route\CachingRouter($cacheFactory->createLocal('route'), $logger);
+ $router = $c->resolve(CachingRouter::class);
} else {
- $router = new \OC\Route\Router($logger);
+ $router = $c->resolve(Router::class);
}
return $router;
});
@@ -946,11 +949,7 @@ class Server extends ServerContainer implements IServerContainer {
$this->registerDeprecatedAlias('DateTimeFormatter', IDateTimeFormatter::class);
$this->registerService(IUserMountCache::class, function (ContainerInterface $c) {
- $mountCache = new UserMountCache(
- $c->get(IDBConnection::class),
- $c->get(IUserManager::class),
- $c->get(LoggerInterface::class)
- );
+ $mountCache = $c->get(UserMountCache::class);
$listener = new UserMountCacheListener($mountCache);
$listener->listen($c->get(IUserManager::class));
return $mountCache;
@@ -959,9 +958,10 @@ class Server extends ServerContainer implements IServerContainer {
$this->registerDeprecatedAlias('UserMountCache', IUserMountCache::class);
$this->registerService(IMountProviderCollection::class, function (ContainerInterface $c) {
- $loader = \OC\Files\Filesystem::getLoader();
+ $loader = $c->get(IStorageFactory::class);
$mountCache = $c->get(IUserMountCache::class);
- $manager = new \OC\Files\Config\MountProviderCollection($loader, $mountCache);
+ $eventLogger = $c->get(IEventLogger::class);
+ $manager = new MountProviderCollection($loader, $mountCache, $eventLogger);
// builtin providers
diff --git a/lib/private/User/Manager.php b/lib/private/User/Manager.php
index 937d825ed77..859ebd2a604 100644
--- a/lib/private/User/Manager.php
+++ b/lib/private/User/Manager.php
@@ -34,6 +34,7 @@
namespace OC\User;
use OC\Hooks\PublicEmitter;
+use OC\Memcache\WithLocalCache;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\HintException;
@@ -104,7 +105,7 @@ class Manager extends PublicEmitter implements IUserManager {
IEventDispatcher $eventDispatcher) {
$this->config = $config;
$this->dispatcher = $oldDispatcher;
- $this->cache = $cacheFactory->createDistributed('user_backend_map');
+ $this->cache = new WithLocalCache($cacheFactory->createDistributed('user_backend_map'));
$cachedUsers = &$this->cachedUsers;
$this->listen('\OC\User', 'postDelete', function ($user) use (&$cachedUsers) {
/** @var \OC\User\User $user */
diff --git a/lib/private/legacy/OC_Response.php b/lib/private/legacy/OC_Response.php
index e4525fe9e10..9440feae3cd 100644
--- a/lib/private/legacy/OC_Response.php
+++ b/lib/private/legacy/OC_Response.php
@@ -99,7 +99,7 @@ class OC_Response {
header('X-Content-Type-Options: nosniff'); // Disable sniffing the content type for IE
header('X-Frame-Options: SAMEORIGIN'); // Disallow iFraming from other domains
header('X-Permitted-Cross-Domain-Policies: none'); // https://www.adobe.com/devnet/adobe-media-server/articles/cross-domain-xml-for-streaming.html
- header('X-Robots-Tag: none'); // https://developers.google.com/webmasters/control-crawl-index/docs/robots_meta_tag
+ header('X-Robots-Tag: noindex, nofollow'); // https://developers.google.com/webmasters/control-crawl-index/docs/robots_meta_tag
header('X-XSS-Protection: 1; mode=block'); // Enforce browser based XSS filters
}
}
diff --git a/lib/public/AppFramework/Controller.php b/lib/public/AppFramework/Controller.php
index 89cfd2e55fc..e8500d5ae1a 100644
--- a/lib/public/AppFramework/Controller.php
+++ b/lib/public/AppFramework/Controller.php
@@ -91,6 +91,9 @@ abstract class Controller {
if ($data->getLastModified() !== null) {
$response->setLastModified($data->getLastModified());
}
+ if ($data->isThrottled()) {
+ $response->throttle($data->getThrottleMetadata());
+ }
return $response;
}
diff --git a/lib/public/AppFramework/Http/Response.php b/lib/public/AppFramework/Http/Response.php
index 4db6caa556c..152f8c4a3c5 100644
--- a/lib/public/AppFramework/Http/Response.php
+++ b/lib/public/AppFramework/Http/Response.php
@@ -257,7 +257,7 @@ class Response {
$this->headers['Content-Security-Policy'] = $this->getContentSecurityPolicy()->buildPolicy();
$this->headers['Feature-Policy'] = $this->getFeaturePolicy()->buildPolicy();
- $this->headers['X-Robots-Tag'] = 'none';
+ $this->headers['X-Robots-Tag'] = 'noindex, nofollow';
if ($this->ETag) {
$mergeWith['ETag'] = '"' . $this->ETag . '"';
diff --git a/tests/data/setUploadLimit/htaccess b/tests/data/setUploadLimit/htaccess
index 53b06d5ae22..53f743f45e7 100644
--- a/tests/data/setUploadLimit/htaccess
+++ b/tests/data/setUploadLimit/htaccess
@@ -11,7 +11,7 @@
# Add security and privacy related headers
Header set X-Content-Type-Options "nosniff"
Header set X-XSS-Protection "1; mode=block"
- Header set X-Robots-Tag "none"
+ Header set X-Robots-Tag "noindex, nofollow"
Header set X-Frame-Options "SAMEORIGIN"
SetEnv modHeadersAvailable true
</IfModule>
diff --git a/tests/lib/AppFramework/Controller/ControllerTest.php b/tests/lib/AppFramework/Controller/ControllerTest.php
index 1f347cea535..cb6fc777dee 100644
--- a/tests/lib/AppFramework/Controller/ControllerTest.php
+++ b/tests/lib/AppFramework/Controller/ControllerTest.php
@@ -116,7 +116,7 @@ class ControllerTest extends \Test\TestCase {
'Content-Security-Policy' => "default-src 'none';base-uri 'none';manifest-src 'self';frame-ancestors 'none'",
'Feature-Policy' => "autoplay 'none';camera 'none';fullscreen 'none';geolocation 'none';microphone 'none';payment 'none'",
'X-Request-Id' => $this->request->getId(),
- 'X-Robots-Tag' => 'none',
+ 'X-Robots-Tag' => 'noindex, nofollow',
];
$response = $this->controller->customDataResponse(['hi']);
diff --git a/tests/lib/AppFramework/Http/DataResponseTest.php b/tests/lib/AppFramework/Http/DataResponseTest.php
index 575698dd878..ccde23b48bb 100644
--- a/tests/lib/AppFramework/Http/DataResponseTest.php
+++ b/tests/lib/AppFramework/Http/DataResponseTest.php
@@ -67,7 +67,7 @@ class DataResponseTest extends \Test\TestCase {
'Cache-Control' => 'no-cache, no-store, must-revalidate',
'Content-Security-Policy' => "default-src 'none';base-uri 'none';manifest-src 'self';frame-ancestors 'none'",
'Feature-Policy' => "autoplay 'none';camera 'none';fullscreen 'none';geolocation 'none';microphone 'none';payment 'none'",
- 'X-Robots-Tag' => 'none',
+ 'X-Robots-Tag' => 'noindex, nofollow',
'X-Request-Id' => \OC::$server->get(IRequest::class)->getId(),
];
$expectedHeaders = array_merge($expectedHeaders, $headers);
diff --git a/tests/lib/AppFramework/Http/ResponseTest.php b/tests/lib/AppFramework/Http/ResponseTest.php
index c5d228e5753..6473a5bf55f 100644
--- a/tests/lib/AppFramework/Http/ResponseTest.php
+++ b/tests/lib/AppFramework/Http/ResponseTest.php
@@ -51,7 +51,7 @@ class ResponseTest extends \Test\TestCase {
'Last-Modified' => 1,
'ETag' => 3,
'Something-Else' => 'hi',
- 'X-Robots-Tag' => 'none',
+ 'X-Robots-Tag' => 'noindex, nofollow',
];
$this->childResponse->setHeaders($expected);
diff --git a/tests/lib/AppFramework/Routing/RoutingTest.php b/tests/lib/AppFramework/Routing/RoutingTest.php
index 22037c31d0d..d7fde02dbcb 100644
--- a/tests/lib/AppFramework/Routing/RoutingTest.php
+++ b/tests/lib/AppFramework/Routing/RoutingTest.php
@@ -6,8 +6,12 @@ use OC\AppFramework\DependencyInjection\DIContainer;
use OC\AppFramework\Routing\RouteConfig;
use OC\Route\Route;
use OC\Route\Router;
+use OCP\Diagnostics\IEventLogger;
+use OCP\IConfig;
+use OCP\IRequest;
use OCP\Route\IRouter;
use PHPUnit\Framework\MockObject\MockObject;
+use Psr\Container\ContainerInterface;
use Psr\Log\LoggerInterface;
class RoutingTest extends \Test\TestCase {
@@ -133,7 +137,13 @@ class RoutingTest extends \Test\TestCase {
/** @var IRouter|MockObject $router */
$router = $this->getMockBuilder(Router::class)
->onlyMethods(['create'])
- ->setConstructorArgs([$this->createMock(LoggerInterface::class)])
+ ->setConstructorArgs([
+ $this->createMock(LoggerInterface::class),
+ $this->createMock(IRequest::class),
+ $this->createMock(IConfig::class),
+ $this->createMock(IEventLogger::class),
+ $this->createMock(ContainerInterface::class)
+ ])
->getMock();
// load route configuration
@@ -154,7 +164,13 @@ class RoutingTest extends \Test\TestCase {
/** @var IRouter|MockObject $router */
$router = $this->getMockBuilder(Router::class)
->onlyMethods(['create'])
- ->setConstructorArgs([$this->createMock(LoggerInterface::class)])
+ ->setConstructorArgs([
+ $this->createMock(LoggerInterface::class),
+ $this->createMock(IRequest::class),
+ $this->createMock(IConfig::class),
+ $this->createMock(IEventLogger::class),
+ $this->createMock(ContainerInterface::class)
+ ])
->getMock();
// load route configuration
@@ -214,7 +230,13 @@ class RoutingTest extends \Test\TestCase {
/** @var IRouter|MockObject $router */
$router = $this->getMockBuilder(Router::class)
->onlyMethods(['create'])
- ->setConstructorArgs([$this->createMock(LoggerInterface::class)])
+ ->setConstructorArgs([
+ $this->createMock(LoggerInterface::class),
+ $this->createMock(IRequest::class),
+ $this->createMock(IConfig::class),
+ $this->createMock(IEventLogger::class),
+ $this->createMock(ContainerInterface::class)
+ ])
->getMock();
// we expect create to be called once:
@@ -264,7 +286,13 @@ class RoutingTest extends \Test\TestCase {
/** @var IRouter|MockObject $router */
$router = $this->getMockBuilder(Router::class)
->onlyMethods(['create'])
- ->setConstructorArgs([$this->createMock(LoggerInterface::class)])
+ ->setConstructorArgs([
+ $this->createMock(LoggerInterface::class),
+ $this->createMock(IRequest::class),
+ $this->createMock(IConfig::class),
+ $this->createMock(IEventLogger::class),
+ $this->createMock(ContainerInterface::class)
+ ])
->getMock();
// we expect create to be called once:
@@ -291,7 +319,13 @@ class RoutingTest extends \Test\TestCase {
/** @var IRouter|MockObject $router */
$router = $this->getMockBuilder(Router::class)
->onlyMethods(['create'])
- ->setConstructorArgs([$this->createMock(LoggerInterface::class)])
+ ->setConstructorArgs([
+ $this->createMock(LoggerInterface::class),
+ $this->createMock(IRequest::class),
+ $this->createMock(IConfig::class),
+ $this->createMock(IEventLogger::class),
+ $this->createMock(ContainerInterface::class)
+ ])
->getMock();
// route mocks
@@ -338,7 +372,13 @@ class RoutingTest extends \Test\TestCase {
/** @var IRouter|MockObject $router */
$router = $this->getMockBuilder(Router::class)
->onlyMethods(['create'])
- ->setConstructorArgs([$this->createMock(LoggerInterface::class)])
+ ->setConstructorArgs([
+ $this->createMock(LoggerInterface::class),
+ $this->createMock(IRequest::class),
+ $this->createMock(IConfig::class),
+ $this->createMock(IEventLogger::class),
+ $this->createMock(ContainerInterface::class)
+ ])
->getMock();
// route mocks
diff --git a/tests/lib/Contacts/ContactsMenu/ContactsStoreTest.php b/tests/lib/Contacts/ContactsMenu/ContactsStoreTest.php
index a038058069e..ccb888a6c3d 100644
--- a/tests/lib/Contacts/ContactsMenu/ContactsStoreTest.php
+++ b/tests/lib/Contacts/ContactsMenu/ContactsStoreTest.php
@@ -142,7 +142,7 @@ class ContactsStoreTest extends TestCase {
$user = $this->createMock(IUser::class);
$this->urlGenerator->expects($this->any())
->method('linkToRouteAbsolute')
- ->with('core.avatar.getAvatar', $this->anything())
+ ->with('core.GuestAvatar.getAvatar', $this->anything())
->willReturn('https://urlToNcAvatar.test');
$this->contactsManager->expects($this->once())
->method('search')
diff --git a/tests/lib/Files/Config/UserMountCacheTest.php b/tests/lib/Files/Config/UserMountCacheTest.php
index f1206781c5e..a9a88cb85c9 100644
--- a/tests/lib/Files/Config/UserMountCacheTest.php
+++ b/tests/lib/Files/Config/UserMountCacheTest.php
@@ -13,6 +13,7 @@ use OC\Files\Mount\MountPoint;
use OC\Files\Storage\Storage;
use OCP\Cache\CappedMemoryCache;
use OC\User\Manager;
+use OCP\Diagnostics\IEventLogger;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\Files\Config\ICachedMountInfo;
use OCP\ICacheFactory;
@@ -67,7 +68,7 @@ class UserMountCacheTest extends TestCase {
$userBackend->createUser('u2', '');
$userBackend->createUser('u3', '');
$this->userManager->registerBackend($userBackend);
- $this->cache = new \OC\Files\Config\UserMountCache($this->connection, $this->userManager, $this->createMock(LoggerInterface::class));
+ $this->cache = new \OC\Files\Config\UserMountCache($this->connection, $this->userManager, $this->createMock(LoggerInterface::class), $this->createMock(IEventLogger::class));
}
protected function tearDown(): void {
diff --git a/tests/lib/Route/RouterTest.php b/tests/lib/Route/RouterTest.php
index 44fef6f1d4f..301058f74a6 100644
--- a/tests/lib/Route/RouterTest.php
+++ b/tests/lib/Route/RouterTest.php
@@ -24,6 +24,10 @@ declare(strict_types=1);
namespace Test\Route;
use OC\Route\Router;
+use OCP\Diagnostics\IEventLogger;
+use OCP\IConfig;
+use OCP\IRequest;
+use Psr\Container\ContainerInterface;
use Psr\Log\LoggerInterface;
use Test\TestCase;
@@ -44,7 +48,13 @@ class RouterTest extends TestCase {
$this->fail('Unexpected info log: '.(string)($data['exception'] ?? $message));
}
);
- $router = new Router($logger);
+ $router = new Router(
+ $logger,
+ $this->createMock(IRequest::class),
+ $this->createMock(IConfig::class),
+ $this->createMock(IEventLogger::class),
+ $this->createMock(ContainerInterface::class),
+ );
$this->assertEquals('/index.php/apps/files/', $router->generate('files.view.index'));