aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/accessibility/l10n/fr.js2
-rw-r--r--apps/accessibility/l10n/fr.json2
-rw-r--r--apps/admin_audit/l10n/fr.js2
-rw-r--r--apps/admin_audit/l10n/fr.json2
-rw-r--r--apps/cloud_federation_api/l10n/fr.js2
-rw-r--r--apps/cloud_federation_api/l10n/fr.json2
-rw-r--r--apps/comments/l10n/fr.js2
-rw-r--r--apps/comments/l10n/fr.json2
-rw-r--r--apps/contactsinteraction/l10n/fr.js2
-rw-r--r--apps/contactsinteraction/l10n/fr.json2
-rw-r--r--apps/dashboard/l10n/fr.js2
-rw-r--r--apps/dashboard/l10n/fr.json2
-rw-r--r--apps/dav/composer/composer/autoload_classmap.php1
-rw-r--r--apps/dav/composer/composer/autoload_static.php1
-rw-r--r--apps/dav/l10n/fr.js2
-rw-r--r--apps/dav/l10n/fr.json2
-rw-r--r--apps/dav/l10n/pt_BR.js12
-rw-r--r--apps/dav/l10n/pt_BR.json12
-rw-r--r--apps/dav/lib/Connector/Sabre/ChecksumUpdatePlugin.php83
-rw-r--r--apps/dav/lib/Connector/Sabre/Directory.php3
-rw-r--r--apps/dav/lib/Connector/Sabre/File.php15
-rw-r--r--apps/dav/lib/Connector/Sabre/ServerFactory.php1
-rw-r--r--apps/dav/lib/Server.php2
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php8
-rw-r--r--apps/encryption/l10n/fr.js2
-rw-r--r--apps/encryption/l10n/fr.json2
-rw-r--r--apps/federatedfilesharing/l10n/fr.js2
-rw-r--r--apps/federatedfilesharing/l10n/fr.json2
-rw-r--r--apps/federation/l10n/fr.js2
-rw-r--r--apps/federation/l10n/fr.json2
-rw-r--r--apps/files/js/fileactions.js2
-rw-r--r--apps/files/js/files.js6
-rw-r--r--apps/files/js/sidebarpreviewtext.js2
-rw-r--r--apps/files/l10n/fr.js2
-rw-r--r--apps/files/l10n/fr.json2
-rw-r--r--apps/files_external/js/settings.js2
-rw-r--r--apps/files_external/l10n/fr.js2
-rw-r--r--apps/files_external/l10n/fr.json2
-rw-r--r--apps/files_sharing/js/public.js4
-rw-r--r--apps/files_sharing/l10n/fr.js2
-rw-r--r--apps/files_sharing/l10n/fr.json2
-rw-r--r--apps/files_sharing/l10n/hu.js1
-rw-r--r--apps/files_sharing/l10n/hu.json1
-rw-r--r--apps/files_trashbin/l10n/fr.js2
-rw-r--r--apps/files_trashbin/l10n/fr.json2
-rw-r--r--apps/files_versions/l10n/fr.js2
-rw-r--r--apps/files_versions/l10n/fr.json2
-rw-r--r--apps/lookup_server_connector/l10n/fr.js2
-rw-r--r--apps/lookup_server_connector/l10n/fr.json2
-rw-r--r--apps/oauth2/l10n/fr.js2
-rw-r--r--apps/oauth2/l10n/fr.json2
-rw-r--r--apps/provisioning_api/l10n/fr.js2
-rw-r--r--apps/provisioning_api/l10n/fr.json2
-rw-r--r--apps/settings/l10n/fr.js2
-rw-r--r--apps/settings/l10n/fr.json2
-rw-r--r--apps/settings/templates/settings/admin/additional-mail.php2
-rw-r--r--apps/sharebymail/l10n/fr.js2
-rw-r--r--apps/sharebymail/l10n/fr.json2
-rw-r--r--apps/systemtags/l10n/fr.js2
-rw-r--r--apps/systemtags/l10n/fr.json2
-rw-r--r--apps/theming/l10n/fr.js2
-rw-r--r--apps/theming/l10n/fr.json2
-rw-r--r--apps/twofactor_backupcodes/l10n/fr.js2
-rw-r--r--apps/twofactor_backupcodes/l10n/fr.json2
-rw-r--r--apps/updatenotification/l10n/fr.js2
-rw-r--r--apps/updatenotification/l10n/fr.json2
-rw-r--r--apps/user_ldap/appinfo/info.xml1
-rw-r--r--apps/user_ldap/composer/composer/autoload_classmap.php1
-rw-r--r--apps/user_ldap/composer/composer/autoload_static.php1
-rw-r--r--apps/user_ldap/l10n/fr.js2
-rw-r--r--apps/user_ldap/l10n/fr.json2
-rw-r--r--apps/user_ldap/lib/Command/ResetGroup.php111
-rw-r--r--apps/user_ldap/lib/GroupPluginManager.php28
-rw-r--r--apps/user_ldap/lib/Group_LDAP.php27
-rw-r--r--apps/user_ldap/lib/Group_Proxy.php10
-rw-r--r--apps/user_ldap/lib/UserPluginManager.php7
-rw-r--r--apps/user_ldap/tests/GroupLDAPPluginTest.php16
-rw-r--r--apps/user_ldap/tests/Group_LDAPTest.php4
-rw-r--r--apps/user_status/l10n/fr.js2
-rw-r--r--apps/user_status/l10n/fr.json2
-rw-r--r--apps/weather_status/l10n/fr.js2
-rw-r--r--apps/weather_status/l10n/fr.json2
-rw-r--r--apps/weather_status/l10n/pl.js12
-rw-r--r--apps/weather_status/l10n/pl.json12
-rw-r--r--apps/workflowengine/l10n/fr.js2
-rw-r--r--apps/workflowengine/l10n/fr.json2
-rw-r--r--core/Command/Group/Delete.php2
-rw-r--r--core/l10n/fr.js2
-rw-r--r--core/l10n/fr.json2
-rw-r--r--core/l10n/hu.js2
-rw-r--r--core/l10n/hu.json2
-rw-r--r--core/l10n/pl.js2
-rw-r--r--core/l10n/pl.json2
-rw-r--r--core/l10n/pt_BR.js3
-rw-r--r--core/l10n/pt_BR.json3
-rw-r--r--core/src/OC/eventsource.js2
-rw-r--r--core/src/components/MainMenu.js4
-rw-r--r--core/src/components/UserMenu.js2
-rw-r--r--core/src/jquery/ocdialog.js4
-rw-r--r--dist/core-login.js4
-rw-r--r--dist/core-login.js.map2
-rw-r--r--dist/core-main.js4
-rw-r--r--dist/core-main.js.map2
-rw-r--r--lib/l10n/fr.js2
-rw-r--r--lib/l10n/fr.json2
-rw-r--r--lib/private/Files/Cache/Storage.php17
-rw-r--r--lib/private/Files/Cache/StorageGlobal.php32
-rw-r--r--lib/private/Files/View.php1
-rw-r--r--lib/private/Group/Group.php3
-rw-r--r--lib/private/legacy/OC_Helper.php4
110 files changed, 458 insertions, 147 deletions
diff --git a/apps/accessibility/l10n/fr.js b/apps/accessibility/l10n/fr.js
index 20b104a8c35..a0b979adfb4 100644
--- a/apps/accessibility/l10n/fr.js
+++ b/apps/accessibility/l10n/fr.js
@@ -16,4 +16,4 @@ OC.L10N.register(
"Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "L'accès universel est très important pour nous. Nous suivons les standards du web et nous assurons que tout soit également utilisable sans souris et avec des logiciels d'assistance technique tels que les lecteurs d'écran. Nous visons à respecter les {guidelines}Règles pour l'accessibilité des contenus Web{linkend} 2.1 de niveau AA et même de niveau AAA avec le thème à fort contraste.",
"If you find any issues, don’t hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!" : "Si vous rencontrez un problème, n'hésitez pas à nous le signaler sur {issuetracker}notre traqueur de problèmes{linkend}. Et si vous souhaitez vous impliquer, rejoignez {designteam}notre équipe de conception{linkend} !"
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/accessibility/l10n/fr.json b/apps/accessibility/l10n/fr.json
index 904b928d023..e684f3fde9f 100644
--- a/apps/accessibility/l10n/fr.json
+++ b/apps/accessibility/l10n/fr.json
@@ -13,5 +13,5 @@
"Provides multiple accessibilities options to ease your use of Nextcloud" : "Offre de multiples options d'accessibilité pour faciliter votre utilisation de Nextcloud",
"Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "L'accès universel est très important pour nous. Nous suivons les standards du web et nous assurons que tout soit également utilisable sans souris et avec des logiciels d'assistance technique tels que les lecteurs d'écran. Nous visons à respecter les {guidelines}Règles pour l'accessibilité des contenus Web{linkend} 2.1 de niveau AA et même de niveau AAA avec le thème à fort contraste.",
"If you find any issues, don’t hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!" : "Si vous rencontrez un problème, n'hésitez pas à nous le signaler sur {issuetracker}notre traqueur de problèmes{linkend}. Et si vous souhaitez vous impliquer, rejoignez {designteam}notre équipe de conception{linkend} !"
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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/admin_audit/l10n/fr.js b/apps/admin_audit/l10n/fr.js
index 31f8de41cf8..a69f15c0f47 100644
--- a/apps/admin_audit/l10n/fr.js
+++ b/apps/admin_audit/l10n/fr.js
@@ -4,4 +4,4 @@ OC.L10N.register(
"Auditing / Logging" : "Audit / journalisation",
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Fournit des capacités de journalisation pour Nextcloud telles que l'enregistrement des accès aux fichiers ou d'autres actions sensibles."
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/admin_audit/l10n/fr.json b/apps/admin_audit/l10n/fr.json
index 2cd134664f3..e52723ebc0f 100644
--- a/apps/admin_audit/l10n/fr.json
+++ b/apps/admin_audit/l10n/fr.json
@@ -1,5 +1,5 @@
{ "translations": {
"Auditing / Logging" : "Audit / journalisation",
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Fournit des capacités de journalisation pour Nextcloud telles que l'enregistrement des accès aux fichiers ou d'autres actions sensibles."
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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/cloud_federation_api/l10n/fr.js b/apps/cloud_federation_api/l10n/fr.js
index b4aaa45f0e0..19b39948c87 100644
--- a/apps/cloud_federation_api/l10n/fr.js
+++ b/apps/cloud_federation_api/l10n/fr.js
@@ -5,4 +5,4 @@ OC.L10N.register(
"Enable clouds to communicate with each other and exchange data" : "Permettre aux clouds de communiquer entre eux et d'échanger des données",
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "L'API Cloud Federation permet à diverses instances Nextcloud de communiquer entre elles et d'échanger des données."
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/cloud_federation_api/l10n/fr.json b/apps/cloud_federation_api/l10n/fr.json
index 95816791116..b1936c0617e 100644
--- a/apps/cloud_federation_api/l10n/fr.json
+++ b/apps/cloud_federation_api/l10n/fr.json
@@ -2,5 +2,5 @@
"Cloud Federation API" : "API Cloud Federation",
"Enable clouds to communicate with each other and exchange data" : "Permettre aux clouds de communiquer entre eux et d'échanger des données",
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "L'API Cloud Federation permet à diverses instances Nextcloud de communiquer entre elles et d'échanger des données."
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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/comments/l10n/fr.js b/apps/comments/l10n/fr.js
index 662de67ace5..c1b71c1fea0 100644
--- a/apps/comments/l10n/fr.js
+++ b/apps/comments/l10n/fr.js
@@ -31,4 +31,4 @@ OC.L10N.register(
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Vous avez été mentionné sur \"{file}\", dans un commentaire par un utilisateur qui a depuis été supprimé",
"{user} mentioned you in a comment on “{file}”" : "{user} vous a mentionné⋅e dans un commentaire sur “{file}”"
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/comments/l10n/fr.json b/apps/comments/l10n/fr.json
index b201ded0b64..2a53eca9090 100644
--- a/apps/comments/l10n/fr.json
+++ b/apps/comments/l10n/fr.json
@@ -28,5 +28,5 @@
"An error occurred while trying to create the comment" : "Une erreur s'est produite lors de la tentative de création du commentaire",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Vous avez été mentionné sur \"{file}\", dans un commentaire par un utilisateur qui a depuis été supprimé",
"{user} mentioned you in a comment on “{file}”" : "{user} vous a mentionné⋅e dans un commentaire sur “{file}”"
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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/contactsinteraction/l10n/fr.js b/apps/contactsinteraction/l10n/fr.js
index d78f4b743ef..d0eb32facd0 100644
--- a/apps/contactsinteraction/l10n/fr.js
+++ b/apps/contactsinteraction/l10n/fr.js
@@ -6,4 +6,4 @@ OC.L10N.register(
"Manages interaction between users and contacts" : "Gère l'interaction entre les utilisateurs et les contacts",
"Collect data about user and contacts interactions and provide an address book for the data" : "Recueillir des données sur les interactions des utilisateurs et des contacts et fournir un carnet d'adresses pour les données"
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/contactsinteraction/l10n/fr.json b/apps/contactsinteraction/l10n/fr.json
index a22c1c385d3..23920f77906 100644
--- a/apps/contactsinteraction/l10n/fr.json
+++ b/apps/contactsinteraction/l10n/fr.json
@@ -3,5 +3,5 @@
"Contacts Interaction" : "Interaction des contacts",
"Manages interaction between users and contacts" : "Gère l'interaction entre les utilisateurs et les contacts",
"Collect data about user and contacts interactions and provide an address book for the data" : "Recueillir des données sur les interactions des utilisateurs et des contacts et fournir un carnet d'adresses pour les données"
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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/dashboard/l10n/fr.js b/apps/dashboard/l10n/fr.js
index 8ea4ec17204..f7741c35506 100644
--- a/apps/dashboard/l10n/fr.js
+++ b/apps/dashboard/l10n/fr.js
@@ -29,4 +29,4 @@ OC.L10N.register(
"Show something" : "Montre quelque chose",
"Get more widgets from the app store" : "Obtenez plus de widgets de l'App Store"
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/dashboard/l10n/fr.json b/apps/dashboard/l10n/fr.json
index 3583484b90a..4fae965706b 100644
--- a/apps/dashboard/l10n/fr.json
+++ b/apps/dashboard/l10n/fr.json
@@ -26,5 +26,5 @@
"Insert from {productName}" : "Insérer depuis {productName}",
"Show something" : "Montre quelque chose",
"Get more widgets from the app store" : "Obtenez plus de widgets de l'App Store"
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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/dav/composer/composer/autoload_classmap.php b/apps/dav/composer/composer/autoload_classmap.php
index b1043fcbbec..b797099dc0d 100644
--- a/apps/dav/composer/composer/autoload_classmap.php
+++ b/apps/dav/composer/composer/autoload_classmap.php
@@ -145,6 +145,7 @@ return array(
'OCA\\DAV\\Connector\\Sabre\\BlockLegacyClientPlugin' => $baseDir . '/../lib/Connector/Sabre/BlockLegacyClientPlugin.php',
'OCA\\DAV\\Connector\\Sabre\\CachingTree' => $baseDir . '/../lib/Connector/Sabre/CachingTree.php',
'OCA\\DAV\\Connector\\Sabre\\ChecksumList' => $baseDir . '/../lib/Connector/Sabre/ChecksumList.php',
+ 'OCA\\DAV\\Connector\\Sabre\\ChecksumUpdatePlugin' => $baseDir . '/../lib/Connector/Sabre/ChecksumUpdatePlugin.php',
'OCA\\DAV\\Connector\\Sabre\\CommentPropertiesPlugin' => $baseDir . '/../lib/Connector/Sabre/CommentPropertiesPlugin.php',
'OCA\\DAV\\Connector\\Sabre\\CopyEtagHeaderPlugin' => $baseDir . '/../lib/Connector/Sabre/CopyEtagHeaderPlugin.php',
'OCA\\DAV\\Connector\\Sabre\\DavAclPlugin' => $baseDir . '/../lib/Connector/Sabre/DavAclPlugin.php',
diff --git a/apps/dav/composer/composer/autoload_static.php b/apps/dav/composer/composer/autoload_static.php
index b94e383cb0e..930b531b335 100644
--- a/apps/dav/composer/composer/autoload_static.php
+++ b/apps/dav/composer/composer/autoload_static.php
@@ -160,6 +160,7 @@ class ComposerStaticInitDAV
'OCA\\DAV\\Connector\\Sabre\\BlockLegacyClientPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/BlockLegacyClientPlugin.php',
'OCA\\DAV\\Connector\\Sabre\\CachingTree' => __DIR__ . '/..' . '/../lib/Connector/Sabre/CachingTree.php',
'OCA\\DAV\\Connector\\Sabre\\ChecksumList' => __DIR__ . '/..' . '/../lib/Connector/Sabre/ChecksumList.php',
+ 'OCA\\DAV\\Connector\\Sabre\\ChecksumUpdatePlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/ChecksumUpdatePlugin.php',
'OCA\\DAV\\Connector\\Sabre\\CommentPropertiesPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/CommentPropertiesPlugin.php',
'OCA\\DAV\\Connector\\Sabre\\CopyEtagHeaderPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/CopyEtagHeaderPlugin.php',
'OCA\\DAV\\Connector\\Sabre\\DavAclPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/DavAclPlugin.php',
diff --git a/apps/dav/l10n/fr.js b/apps/dav/l10n/fr.js
index 1a614722d48..52d9a58837b 100644
--- a/apps/dav/l10n/fr.js
+++ b/apps/dav/l10n/fr.js
@@ -173,4 +173,4 @@ OC.L10N.register(
"Your attendance was updated successfully." : "Votre présence a été mise à jour avec succès.",
"Calendar and tasks" : "Agenda et tâches"
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/dav/l10n/fr.json b/apps/dav/l10n/fr.json
index f728c2d1b3b..f11499dbefd 100644
--- a/apps/dav/l10n/fr.json
+++ b/apps/dav/l10n/fr.json
@@ -170,5 +170,5 @@
"Comment" : "Commentaire",
"Your attendance was updated successfully." : "Votre présence a été mise à jour avec succès.",
"Calendar and tasks" : "Agenda et tâches"
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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/dav/l10n/pt_BR.js b/apps/dav/l10n/pt_BR.js
index abdf7451380..bd1c369268d 100644
--- a/apps/dav/l10n/pt_BR.js
+++ b/apps/dav/l10n/pt_BR.js
@@ -113,6 +113,18 @@ OC.L10N.register(
"Could not write file contents" : "Não foi possível gravar o conteúdo do arquivo",
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "Erro ao copiar o arquivo para o local de destino (copiado: %1$s, tamanho de arquivo esperado: %2$s)",
+ "Expected filesize of %1$s but read (from Nextcloud client) and wrote (to Nextcloud storage) %2$s. Could either be a network problem on the sending side or a problem writing to the storage on the server side." : "Tamanho de arquivo esperado de %1$s mas lido (do cliente Nextcloud) e gravado (no armazenamento Nextcloud) %2$s. Pode ser um problema de rede no lado de envio ou um problema de gravação no armazenamento no lado do servidor.",
+ "Could not rename part file to final file, canceled by hook" : "Não foi possível renomear o arquivo de parte para o arquivo final, cancelado pelo gancho",
+ "Could not rename part file to final file" : "Não foi possível renomear o arquivo de parte para o arquivo final",
+ "Failed to check file size: %1$s" : "Falha ao verificar o tamanho do arquivo: %1$s",
+ "Could not open file" : "Não pode abrir o arquivo",
+ "Encryption not ready: %1$s" : "A criptografia não está pronta: %1$s",
+ "Failed to open file: %1$s" : "Falha ao abrir arquivo: %1$s",
+ "Failed to unlink: %1$s" : "Falha ao desvincular: %1$s",
+ "Invalid chunk name" : "Nome do bloco inválido",
+ "Could not rename part file assembled from chunks" : "Não foi possível renomear parte do arquivo montado a partir de pedaços",
+ "Failed to write file contents: %1$s" : "Falha ao gravar o conteúdo do arquivo:%1$s",
+ "File not found: %1$s" : "Arquivo não encontrado:%1$s",
"System is in maintenance mode." : "O sistema está em modo de manutenção",
"Upgrade needed" : "Upgrade necessário",
"Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "Seu %s precisa estar configurado para usar HTTPS a fim de usar o CalDAV e o CardDAV com o iOS/macOS.",
diff --git a/apps/dav/l10n/pt_BR.json b/apps/dav/l10n/pt_BR.json
index 26c62d6bed8..ffa2f55511e 100644
--- a/apps/dav/l10n/pt_BR.json
+++ b/apps/dav/l10n/pt_BR.json
@@ -111,6 +111,18 @@
"Could not write file contents" : "Não foi possível gravar o conteúdo do arquivo",
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "Erro ao copiar o arquivo para o local de destino (copiado: %1$s, tamanho de arquivo esperado: %2$s)",
+ "Expected filesize of %1$s but read (from Nextcloud client) and wrote (to Nextcloud storage) %2$s. Could either be a network problem on the sending side or a problem writing to the storage on the server side." : "Tamanho de arquivo esperado de %1$s mas lido (do cliente Nextcloud) e gravado (no armazenamento Nextcloud) %2$s. Pode ser um problema de rede no lado de envio ou um problema de gravação no armazenamento no lado do servidor.",
+ "Could not rename part file to final file, canceled by hook" : "Não foi possível renomear o arquivo de parte para o arquivo final, cancelado pelo gancho",
+ "Could not rename part file to final file" : "Não foi possível renomear o arquivo de parte para o arquivo final",
+ "Failed to check file size: %1$s" : "Falha ao verificar o tamanho do arquivo: %1$s",
+ "Could not open file" : "Não pode abrir o arquivo",
+ "Encryption not ready: %1$s" : "A criptografia não está pronta: %1$s",
+ "Failed to open file: %1$s" : "Falha ao abrir arquivo: %1$s",
+ "Failed to unlink: %1$s" : "Falha ao desvincular: %1$s",
+ "Invalid chunk name" : "Nome do bloco inválido",
+ "Could not rename part file assembled from chunks" : "Não foi possível renomear parte do arquivo montado a partir de pedaços",
+ "Failed to write file contents: %1$s" : "Falha ao gravar o conteúdo do arquivo:%1$s",
+ "File not found: %1$s" : "Arquivo não encontrado:%1$s",
"System is in maintenance mode." : "O sistema está em modo de manutenção",
"Upgrade needed" : "Upgrade necessário",
"Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "Seu %s precisa estar configurado para usar HTTPS a fim de usar o CalDAV e o CardDAV com o iOS/macOS.",
diff --git a/apps/dav/lib/Connector/Sabre/ChecksumUpdatePlugin.php b/apps/dav/lib/Connector/Sabre/ChecksumUpdatePlugin.php
new file mode 100644
index 00000000000..3247259357f
--- /dev/null
+++ b/apps/dav/lib/Connector/Sabre/ChecksumUpdatePlugin.php
@@ -0,0 +1,83 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * @copyright Copyright (c) 2021 Robin Appelman <robin@icewind.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\DAV\Connector\Sabre;
+
+use Sabre\DAV\ServerPlugin;
+use Sabre\HTTP\RequestInterface;
+use Sabre\HTTP\ResponseInterface;
+
+class ChecksumUpdatePlugin extends ServerPlugin {
+ /**
+ * @var \Sabre\DAV\Server
+ */
+ protected $server;
+
+ public function initialize(\Sabre\DAV\Server $server) {
+ $this->server = $server;
+ $server->on('method:PATCH', [$this, 'httpPatch']);
+ }
+
+ public function getPluginName(): string {
+ return 'checksumupdate';
+ }
+
+ public function getHTTPMethods($path): array {
+ $tree = $this->server->tree;
+
+ if ($tree->nodeExists($path)) {
+ $node = $tree->getNodeForPath($path);
+ if ($node instanceof File) {
+ return ['PATCH'];
+ }
+ }
+
+ return [];
+ }
+
+ public function getFeatures(): array {
+ return ['nextcloud-checksum-update'];
+ }
+
+ public function httpPatch(RequestInterface $request, ResponseInterface $response) {
+ $path = $request->getPath();
+
+ $node = $this->server->tree->getNodeForPath($path);
+ if ($node instanceof File) {
+ $type = strtolower(
+ (string)$request->getHeader('X-Recalculate-Hash')
+ );
+
+ $hash = $node->hash($type);
+ if ($hash) {
+ $checksum = strtoupper($type) . ':' . $hash;
+ $node->setChecksum($checksum);
+ $response->addHeader('OC-Checksum', $checksum);
+ $response->setHeader('Content-Length', '0');
+ $response->setStatus(204);
+
+ return false;
+ }
+ }
+ }
+}
diff --git a/apps/dav/lib/Connector/Sabre/Directory.php b/apps/dav/lib/Connector/Sabre/Directory.php
index 3ae4416d363..bd92b3b22a4 100644
--- a/apps/dav/lib/Connector/Sabre/Directory.php
+++ b/apps/dav/lib/Connector/Sabre/Directory.php
@@ -327,8 +327,7 @@ class Directory extends \OCA\DAV\Connector\Sabre\Node implements \Sabre\DAV\ICol
return $this->quotaInfo;
}
try {
- $info = $this->fileView->getFileInfo($this->path, false);
- $storageInfo = \OC_Helper::getStorageInfo($this->info->getPath(), $info);
+ $storageInfo = \OC_Helper::getStorageInfo($this->info->getPath(), $this->info, false);
if ($storageInfo['quota'] === \OCP\Files\FileInfo::SPACE_UNLIMITED) {
$free = \OCP\Files\FileInfo::SPACE_UNLIMITED;
} else {
diff --git a/apps/dav/lib/Connector/Sabre/File.php b/apps/dav/lib/Connector/Sabre/File.php
index 4768fc3dc44..70dffbaaaed 100644
--- a/apps/dav/lib/Connector/Sabre/File.php
+++ b/apps/dav/lib/Connector/Sabre/File.php
@@ -388,11 +388,9 @@ class File extends Node implements IFile {
if (isset($this->request->server['HTTP_OC_CHECKSUM'])) {
$checksum = trim($this->request->server['HTTP_OC_CHECKSUM']);
- $this->fileView->putFileInfo($this->path, ['checksum' => $checksum]);
- $this->refreshInfo();
+ $this->setChecksum($checksum);
} elseif ($this->getChecksum() !== null && $this->getChecksum() !== '') {
- $this->fileView->putFileInfo($this->path, ['checksum' => '']);
- $this->refreshInfo();
+ $this->setChecksum('');
}
} catch (StorageNotAvailableException $e) {
throw new ServiceUnavailable($this->l10n->t('Failed to check file size: %1$s', [$e->getMessage()]), 0, $e);
@@ -741,9 +739,18 @@ class File extends Node implements IFile {
return $this->info->getChecksum();
}
+ public function setChecksum(string $checksum) {
+ $this->fileView->putFileInfo($this->path, ['checksum' => $checksum]);
+ $this->refreshInfo();
+ }
+
protected function header($string) {
if (!\OC::$CLI) {
\header($string);
}
}
+
+ public function hash(string $type) {
+ return $this->fileView->hash($type, $this->path);
+ }
}
diff --git a/apps/dav/lib/Connector/Sabre/ServerFactory.php b/apps/dav/lib/Connector/Sabre/ServerFactory.php
index 095fb631c2b..b13dbd20ca9 100644
--- a/apps/dav/lib/Connector/Sabre/ServerFactory.php
+++ b/apps/dav/lib/Connector/Sabre/ServerFactory.php
@@ -180,6 +180,7 @@ class ServerFactory {
)
);
$server->addPlugin(new \OCA\DAV\Connector\Sabre\QuotaPlugin($view, true));
+ $server->addPlugin(new \OCA\DAV\Connector\Sabre\ChecksumUpdatePlugin());
if ($this->userSession->isLoggedIn()) {
$server->addPlugin(new \OCA\DAV\Connector\Sabre\TagsPlugin($objectTree, $this->tagManager));
diff --git a/apps/dav/lib/Server.php b/apps/dav/lib/Server.php
index ff64da2a238..589e6c2bd6c 100644
--- a/apps/dav/lib/Server.php
+++ b/apps/dav/lib/Server.php
@@ -52,6 +52,7 @@ use OCA\DAV\Connector\Sabre\Auth;
use OCA\DAV\Connector\Sabre\BearerAuth;
use OCA\DAV\Connector\Sabre\BlockLegacyClientPlugin;
use OCA\DAV\Connector\Sabre\CachingTree;
+use OCA\DAV\Connector\Sabre\ChecksumUpdatePlugin;
use OCA\DAV\Connector\Sabre\CommentPropertiesPlugin;
use OCA\DAV\Connector\Sabre\CopyEtagHeaderPlugin;
use OCA\DAV\Connector\Sabre\DavAclPlugin;
@@ -253,6 +254,7 @@ class Server {
!\OC::$server->getConfig()->getSystemValue('debug', false)
)
);
+ $this->server->addPlugin(new ChecksumUpdatePlugin());
$this->server->addPlugin(
new \Sabre\DAV\PropertyStorage\Plugin(
diff --git a/apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php b/apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php
index 024a6432d01..c88d2302bec 100644
--- a/apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php
@@ -299,10 +299,6 @@ class DirectoryTest extends \Test\TestCase {
->method('getMountPoint')
->willReturn($mountPoint);
- $this->view->expects($this->once())
- ->method('getFileInfo')
- ->willReturn($this->info);
-
$mountPoint->method('getMountPoint')
->willReturn('/user/files/mymountpoint');
@@ -344,10 +340,6 @@ class DirectoryTest extends \Test\TestCase {
$mountPoint->method('getMountPoint')
->willReturn('/user/files/mymountpoint');
- $this->view->expects($this->once())
- ->method('getFileInfo')
- ->willReturn($this->info);
-
$dir = new Directory($this->view, $this->info);
$this->assertEquals([200, 800], $dir->getQuotaInfo()); //200 used, 800 free
}
diff --git a/apps/encryption/l10n/fr.js b/apps/encryption/l10n/fr.js
index 3e943717528..ecc2e37b13f 100644
--- a/apps/encryption/l10n/fr.js
+++ b/apps/encryption/l10n/fr.js
@@ -65,4 +65,4 @@ OC.L10N.register(
"Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Bonjour,\n<br><br>\nL'administrateur a activé le chiffrement sur le serveur. Vos fichiers ont été chiffrés avec le mot de passe suivant :\n\n<p style=\"font-family: monospace;\"><b>%s</b></p>\n\n<p>\nVeuillez suivre ces instructions :\n<ol>\n<li>Connectez-vous à l'interface web et trouvez la section <em>\"Module de chiffrement de base d'\"</em> dans vos paramètres personnels;</li>\n<li>Entrez le mot de passe fourni ci-dessus dans le champ <em>\"Ancien mot de passe de connexion\"</em>;</li>\n<li>Entrez le mot de passe que vous utilisez actuellement pour vous connecter dans le champ <em>\"Actuel mot de passe de connexion\"</em>;</li>\n<li>Validez en cliquant sur le bouton <em>\"Mettre à jour le mot de passe de votre clef privée\"</em>.</li>\n</ol>\n</p>",
"Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password \"%s\".\n\nPlease login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.\n\n" : "Bonjour,\n\nL'administrateur a activé le chiffrement côté serveur. Vos fichiers ont été chiffrés avec le mot de passe \"%s\".\n\nVeuillez vous connecter à l'interface web, vous rendre à la section \"Module de chiffrement de base\" de vos paramètres personnels et mettre à jour votre mot de passe de chiffrement en insérant ce mot de passe dans le champ \"Ancien mot de passe de connexion\" ainsi que votre mot de passe actuel.\n\n"
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/encryption/l10n/fr.json b/apps/encryption/l10n/fr.json
index 3928cae76e8..06c8550db74 100644
--- a/apps/encryption/l10n/fr.json
+++ b/apps/encryption/l10n/fr.json
@@ -62,5 +62,5 @@
"Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Bonjour,\n\nL'administrateur a activé le chiffrement sur le serveur. Vos fichiers ont été chiffrés avec le mot de passe suivant :\n\n%s\n\nVeuillez suivre ces instructions :\n\n1. Connectez-vous à l'interface web et trouvez la section \"Module de chiffrement de base d'\" dans vos paramètres personnels;\n\n2. Entrez le mot de passe fourni ci-dessus dans le champ \"Ancien mot de passe de connexion\";\n\n3. Entrez le mot de passe que vous utilisez actuellement pour vous connecter dans le champ \"Actuel mot de passe de connexion\";\n\n4. Validez en cliquant sur le bouton \"Mettre à jour le mot de passe de votre clef privée\".\n",
"Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Bonjour,\n<br><br>\nL'administrateur a activé le chiffrement sur le serveur. Vos fichiers ont été chiffrés avec le mot de passe suivant :\n\n<p style=\"font-family: monospace;\"><b>%s</b></p>\n\n<p>\nVeuillez suivre ces instructions :\n<ol>\n<li>Connectez-vous à l'interface web et trouvez la section <em>\"Module de chiffrement de base d'\"</em> dans vos paramètres personnels;</li>\n<li>Entrez le mot de passe fourni ci-dessus dans le champ <em>\"Ancien mot de passe de connexion\"</em>;</li>\n<li>Entrez le mot de passe que vous utilisez actuellement pour vous connecter dans le champ <em>\"Actuel mot de passe de connexion\"</em>;</li>\n<li>Validez en cliquant sur le bouton <em>\"Mettre à jour le mot de passe de votre clef privée\"</em>.</li>\n</ol>\n</p>",
"Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password \"%s\".\n\nPlease login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.\n\n" : "Bonjour,\n\nL'administrateur a activé le chiffrement côté serveur. Vos fichiers ont été chiffrés avec le mot de passe \"%s\".\n\nVeuillez vous connecter à l'interface web, vous rendre à la section \"Module de chiffrement de base\" de vos paramètres personnels et mettre à jour votre mot de passe de chiffrement en insérant ce mot de passe dans le champ \"Ancien mot de passe de connexion\" ainsi que votre mot de passe actuel.\n\n"
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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/federatedfilesharing/l10n/fr.js b/apps/federatedfilesharing/l10n/fr.js
index c7d247ed4b3..b36a05a2be8 100644
--- a/apps/federatedfilesharing/l10n/fr.js
+++ b/apps/federatedfilesharing/l10n/fr.js
@@ -52,4 +52,4 @@ OC.L10N.register(
"HTML Code:" : "Code HTML :",
"Adjust how people can share between servers." : "Réglez comment les personnes peuvent partager entre les serveurs."
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/federatedfilesharing/l10n/fr.json b/apps/federatedfilesharing/l10n/fr.json
index 33c510fffc6..bda2d626ada 100644
--- a/apps/federatedfilesharing/l10n/fr.json
+++ b/apps/federatedfilesharing/l10n/fr.json
@@ -49,5 +49,5 @@
"Share with me via Nextcloud" : "Partagez avec moi via Nextcloud",
"HTML Code:" : "Code HTML :",
"Adjust how people can share between servers." : "Réglez comment les personnes peuvent partager entre les serveurs."
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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/federation/l10n/fr.js b/apps/federation/l10n/fr.js
index 365a1dbc273..212928d43b1 100644
--- a/apps/federation/l10n/fr.js
+++ b/apps/federation/l10n/fr.js
@@ -14,4 +14,4 @@ OC.L10N.register(
"Trusted server" : "Serveur de confiance",
"Add" : "Ajouter"
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/federation/l10n/fr.json b/apps/federation/l10n/fr.json
index c100c46ee86..ca5471977bf 100644
--- a/apps/federation/l10n/fr.json
+++ b/apps/federation/l10n/fr.json
@@ -11,5 +11,5 @@
"+ Add trusted server" : "+ Ajouter un serveur de confiance",
"Trusted server" : "Serveur de confiance",
"Add" : "Ajouter"
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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/js/fileactions.js b/apps/files/js/fileactions.js
index 505ab21c10c..8790eae9c98 100644
--- a/apps/files/js/fileactions.js
+++ b/apps/files/js/fileactions.js
@@ -557,7 +557,7 @@
// recreate fileactions container
nameLinks = parent.children('a.name');
nameLinks.find('.fileactions, .nametext .action').remove();
- nameLinks.append('<span class="fileactions" />');
+ nameLinks.append('<span class="fileactions"></span>');
var defaultAction = this.getDefaultFileAction(
this.getCurrentMimeType(),
this.getCurrentType(),
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index 03778fb92f9..ae247584682 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -422,12 +422,12 @@ var createDragShadow = function(event) {
$(selectedFiles).each(function(i,elem) {
// TODO: refactor this with the table row creation code
- var newtr = $('<tr/>')
+ var newtr = $('<tr></tr>')
.attr('data-dir', dir)
.attr('data-file', elem.name)
.attr('data-origin', elem.origin);
- newtr.append($('<td class="filename" />').text(elem.name).css('background-size', 32));
- newtr.append($('<td class="size" />').text(OC.Util.humanFileSize(elem.size)));
+ newtr.append($('<td class="filename"></td>').text(elem.name).css('background-size', 32));
+ newtr.append($('<td class="size"></td>').text(OC.Util.humanFileSize(elem.size)));
tbody.append(newtr);
if (elem.type === 'dir') {
newtr.find('td.filename')
diff --git a/apps/files/js/sidebarpreviewtext.js b/apps/files/js/sidebarpreviewtext.js
index 3053cd6945d..f786a9a3e4d 100644
--- a/apps/files/js/sidebarpreviewtext.js
+++ b/apps/files/js/sidebarpreviewtext.js
@@ -25,7 +25,7 @@
$thumbnailDiv.removeClass('icon-loading icon-32');
$thumbnailContainer.addClass('large');
$thumbnailContainer.addClass('text');
- var $textPreview = $('<pre/>').text(content);
+ var $textPreview = $('<pre></pre>').text(content);
$thumbnailDiv.children('.stretcher').remove();
$thumbnailDiv.append($textPreview);
$thumbnailContainer.css("max-height", previewHeight);
diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js
index 34fb95fc5f4..6a1fe9634c7 100644
--- a/apps/files/l10n/fr.js
+++ b/apps/files/l10n/fr.js
@@ -217,4 +217,4 @@ OC.L10N.register(
"Your storage is full, files can not be updated or synced anymore!" : "Votre espace de stockage est plein. Les fichiers ne peuvent plus être mis à jour ni synchronisés !",
"_matches '{filter}'_::_match '{filter}'_" : ["correspond à '{filter}'","correspondent à '{filter}'"]
},
-"nplurals=2; plural=(n > 1);");
+"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 4954a479c53..f3325029bfc 100644
--- a/apps/files/l10n/fr.json
+++ b/apps/files/l10n/fr.json
@@ -214,5 +214,5 @@
"External storage \"{mountPoint}\" is full, files can not be updated or synced anymore!" : "L'espace de stockage externe \"{mountPoint}\" est plein, les fichiers ne peuvent plus être mis à jour ni synchronisés !",
"Your storage is full, files can not be updated or synced anymore!" : "Votre espace de stockage est plein. Les fichiers ne peuvent plus être mis à jour ni synchronisés !",
"_matches '{filter}'_::_match '{filter}'_" : ["correspond à '{filter}'","correspondent à '{filter}'"]
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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_external/js/settings.js b/apps/files_external/js/settings.js
index 01c2c3bc953..46092d57e67 100644
--- a/apps/files_external/js/settings.js
+++ b/apps/files_external/js/settings.js
@@ -141,7 +141,7 @@ function addSelect2 ($elements, userListLimit) {
return element.name;
},
formatResult: function (element) {
- var $result = $('<span><div class="avatardiv"/><span>'+escapeHTML(element.displayname)+'</span></span>');
+ var $result = $('<span><div class="avatardiv"></div><span>'+escapeHTML(element.displayname)+'</span></span>');
var $div = $result.find('.avatardiv')
.attr('data-type', element.type)
.attr('data-name', element.name)
diff --git a/apps/files_external/l10n/fr.js b/apps/files_external/l10n/fr.js
index a50d3511709..a82a0e90e86 100644
--- a/apps/files_external/l10n/fr.js
+++ b/apps/files_external/l10n/fr.js
@@ -139,4 +139,4 @@ OC.L10N.register(
"SMB / CIFS" : "SMB / CIFS",
"SMB / CIFS using OC login" : "SMB / CIFS en utilisant les identifiants OC"
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/files_external/l10n/fr.json b/apps/files_external/l10n/fr.json
index 5924e6c9eba..c9ca07e930d 100644
--- a/apps/files_external/l10n/fr.json
+++ b/apps/files_external/l10n/fr.json
@@ -136,5 +136,5 @@
"(group)" : "(groupe)",
"SMB / CIFS" : "SMB / CIFS",
"SMB / CIFS using OC login" : "SMB / CIFS en utilisant les identifiants OC"
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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_sharing/js/public.js b/apps/files_sharing/js/public.js
index 6b063896b7f..bfb035fb817 100644
--- a/apps/files_sharing/js/public.js
+++ b/apps/files_sharing/js/public.js
@@ -355,12 +355,12 @@ OCA.Sharing.PublicApp = {
},
_showTextPreview: function (data, previewHeight) {
- var textDiv = $('<div/>').addClass('text-preview');
+ var textDiv = $('<div></div>').addClass('text-preview');
textDiv.text(data);
textDiv.appendTo('#imgframe');
var divHeight = textDiv.height();
if (data.length > 999) {
- var ellipsis = $('<div/>').addClass('ellipsis');
+ var ellipsis = $('<div></div>').addClass('ellipsis');
ellipsis.html('(&#133;)');
ellipsis.appendTo('#imgframe');
}
diff --git a/apps/files_sharing/l10n/fr.js b/apps/files_sharing/l10n/fr.js
index ff4480866e0..6a5e9aced0e 100644
--- a/apps/files_sharing/l10n/fr.js
+++ b/apps/files_sharing/l10n/fr.js
@@ -255,4 +255,4 @@ OC.L10N.register(
"Download %s" : "Télécharger %s",
"Cannot change permissions for public share links" : "Impossible de changer les autorisations pour les liens publics partagés"
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/files_sharing/l10n/fr.json b/apps/files_sharing/l10n/fr.json
index bec5504c88d..8fafa4151d8 100644
--- a/apps/files_sharing/l10n/fr.json
+++ b/apps/files_sharing/l10n/fr.json
@@ -252,5 +252,5 @@
"Sharing sending the password by Nextcloud Talk failed because Nextcloud Talk is not enabled" : "Le partage de l'envoi du mot de passe par Nextcloud Talk a échoué parce que Nextcloud Talk n'est pas activé.",
"Download %s" : "Télécharger %s",
"Cannot change permissions for public share links" : "Impossible de changer les autorisations pour les liens publics partagés"
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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_sharing/l10n/hu.js b/apps/files_sharing/l10n/hu.js
index 68058b83832..d644dfe78db 100644
--- a/apps/files_sharing/l10n/hu.js
+++ b/apps/files_sharing/l10n/hu.js
@@ -124,6 +124,7 @@ OC.L10N.register(
"Could not lock path" : "Nem sikerült zárolni az útvonalat",
"Wrong or no update parameter given" : "Hibás vagy üres frissítési paraméter",
"Share must at least have READ or CREATE permissions" : "A megosztásnak legalább OLVASÁSI és LÉTREHOZÁSI engedéllyel kell rendelkeznie",
+ "Share must have READ permission if UPDATE or DELETE permission is set" : "A megosztásnak OLVASÁSI jogosultsággal kell rendelkeznie, ha a FRISSÍTÉSI vagy TÖRLÉSI jogosultság meg van adva",
"\"Sending the password by Nextcloud Talk\" for sharing a file or folder failed because Nextcloud Talk is not enabled." : "A „Jelszó kiküldése a Nextcloud Beszélgetéssel” nem sikerült a fájlnál vagy mappánál, mert a Nextcloud Beszélgetés nem engedélyezett.",
"shared by %s" : "megosztotta: %s",
"Download all files" : "Összes fájl letöltése",
diff --git a/apps/files_sharing/l10n/hu.json b/apps/files_sharing/l10n/hu.json
index fa7077dfbde..1a8da9691e9 100644
--- a/apps/files_sharing/l10n/hu.json
+++ b/apps/files_sharing/l10n/hu.json
@@ -122,6 +122,7 @@
"Could not lock path" : "Nem sikerült zárolni az útvonalat",
"Wrong or no update parameter given" : "Hibás vagy üres frissítési paraméter",
"Share must at least have READ or CREATE permissions" : "A megosztásnak legalább OLVASÁSI és LÉTREHOZÁSI engedéllyel kell rendelkeznie",
+ "Share must have READ permission if UPDATE or DELETE permission is set" : "A megosztásnak OLVASÁSI jogosultsággal kell rendelkeznie, ha a FRISSÍTÉSI vagy TÖRLÉSI jogosultság meg van adva",
"\"Sending the password by Nextcloud Talk\" for sharing a file or folder failed because Nextcloud Talk is not enabled." : "A „Jelszó kiküldése a Nextcloud Beszélgetéssel” nem sikerült a fájlnál vagy mappánál, mert a Nextcloud Beszélgetés nem engedélyezett.",
"shared by %s" : "megosztotta: %s",
"Download all files" : "Összes fájl letöltése",
diff --git a/apps/files_trashbin/l10n/fr.js b/apps/files_trashbin/l10n/fr.js
index 23f5d61a3e1..25e1eea585f 100644
--- a/apps/files_trashbin/l10n/fr.js
+++ b/apps/files_trashbin/l10n/fr.js
@@ -28,4 +28,4 @@ OC.L10N.register(
"Error while emptying trashbin" : "Erreur lors du vidage de la corbeille",
"Error while removing files from trashbin" : "Erreur lors de la suppression des fichiers de la corbeille"
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/files_trashbin/l10n/fr.json b/apps/files_trashbin/l10n/fr.json
index 04f4c1dcdad..21b04506c4d 100644
--- a/apps/files_trashbin/l10n/fr.json
+++ b/apps/files_trashbin/l10n/fr.json
@@ -25,5 +25,5 @@
"Error while restoring files from trashbin" : "Erreur lors de la restauration des fichiers de la corbeille",
"Error while emptying trashbin" : "Erreur lors du vidage de la corbeille",
"Error while removing files from trashbin" : "Erreur lors de la suppression des fichiers de la corbeille"
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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_versions/l10n/fr.js b/apps/files_versions/l10n/fr.js
index 4f42ff26e91..ad4d6b7e15b 100644
--- a/apps/files_versions/l10n/fr.js
+++ b/apps/files_versions/l10n/fr.js
@@ -9,4 +9,4 @@ OC.L10N.register(
"Restore" : "Restaurer",
"No other versions available" : "Aucune autre version n'est disponible"
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/files_versions/l10n/fr.json b/apps/files_versions/l10n/fr.json
index aa138df6cc4..097a057d305 100644
--- a/apps/files_versions/l10n/fr.json
+++ b/apps/files_versions/l10n/fr.json
@@ -6,5 +6,5 @@
"_%n byte_::_%n bytes_" : ["%n octet","%n octets"],
"Restore" : "Restaurer",
"No other versions available" : "Aucune autre version n'est disponible"
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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/lookup_server_connector/l10n/fr.js b/apps/lookup_server_connector/l10n/fr.js
index 87fc8406884..1adb735ff96 100644
--- a/apps/lookup_server_connector/l10n/fr.js
+++ b/apps/lookup_server_connector/l10n/fr.js
@@ -4,4 +4,4 @@ OC.L10N.register(
"Lookup Server Connector" : "Connecteur de serveur de recherche",
"Sync public user information with the lookup server" : "Synchroniser les informations utilisateur publiques avec le serveur de recherche"
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/lookup_server_connector/l10n/fr.json b/apps/lookup_server_connector/l10n/fr.json
index 346d7bb5766..8554a0baee9 100644
--- a/apps/lookup_server_connector/l10n/fr.json
+++ b/apps/lookup_server_connector/l10n/fr.json
@@ -1,5 +1,5 @@
{ "translations": {
"Lookup Server Connector" : "Connecteur de serveur de recherche",
"Sync public user information with the lookup server" : "Synchroniser les informations utilisateur publiques avec le serveur de recherche"
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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/oauth2/l10n/fr.js b/apps/oauth2/l10n/fr.js
index c8080f0319d..e334cc79b87 100644
--- a/apps/oauth2/l10n/fr.js
+++ b/apps/oauth2/l10n/fr.js
@@ -17,4 +17,4 @@ OC.L10N.register(
"Show client secret" : "Afficher client secret",
"Delete" : "Supprimer"
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/oauth2/l10n/fr.json b/apps/oauth2/l10n/fr.json
index 9f079bd9ad2..9c47f7a24d2 100644
--- a/apps/oauth2/l10n/fr.json
+++ b/apps/oauth2/l10n/fr.json
@@ -14,5 +14,5 @@
"Secret" : "Secret",
"Show client secret" : "Afficher client secret",
"Delete" : "Supprimer"
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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/provisioning_api/l10n/fr.js b/apps/provisioning_api/l10n/fr.js
index 6f6bf89f040..3470575d390 100644
--- a/apps/provisioning_api/l10n/fr.js
+++ b/apps/provisioning_api/l10n/fr.js
@@ -15,4 +15,4 @@ OC.L10N.register(
"This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Cette application active un ensemble d'API qui peuvent être utilisées par un système externe pour créer, modifier, supprimer et rechercher des attributs d'utilisateur, rechercher, ajouter et retirer des groupes, fixer des quotas et rechercher l'espace de stockage total utilisé sur Nextcloud. Les administrateurs de groupe peuvent aussi rechercher Nextcloud et accéder aux même fonctionnalités que les administrateurs pour les groupes dont ils ont la gestion. L'API permet aussi à un administrateur de rechercher les applications Nextcloud actives et les informations d'application ainsi que d'activer et désactiver les applications à distance. Une fois l'application activée, des requêtes HTTP peuvent être utilisées au moyen d'un entête Basic Auth pour exécuter chacune des fonctionnalités listées ci-dessus. Des informations supplémentaires sont accessibles dans la documentation sur l'API de provisionnement, avec des exemples de demandes et réponses serveur.",
"An unexpected error occurred. Please consult your sysadmin." : "Une erreur inattendue est survenue. Veuillez contacter votre administrateur système."
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/provisioning_api/l10n/fr.json b/apps/provisioning_api/l10n/fr.json
index 440a83f4168..206f3571917 100644
--- a/apps/provisioning_api/l10n/fr.json
+++ b/apps/provisioning_api/l10n/fr.json
@@ -12,5 +12,5 @@
"This application enables a set of APIs that external systems can use to manage users, groups and apps." : "Cette application active un ensemble d'API que les systèmes externes peuvent utiliser pour gérer les utilisateurs, les groupes et les applications.",
"This application enables a set of APIs that external systems can use to create, edit, delete and query user\n\t\tattributes, query, set and remove groups, set quota and query total storage used in Nextcloud. Group admin users\n\t\tcan also query Nextcloud and perform the same functions as an admin for groups they manage. The API also enables\n\t\tan admin to query for active Nextcloud applications, application info, and to enable or disable an app remotely.\n\t\tOnce the app is enabled, HTTP requests can be used via a Basic Auth header to perform any of the functions\n\t\tlisted above. More information is available in the Provisioning API documentation, including example calls\n\t\tand server responses." : "Cette application active un ensemble d'API qui peuvent être utilisées par un système externe pour créer, modifier, supprimer et rechercher des attributs d'utilisateur, rechercher, ajouter et retirer des groupes, fixer des quotas et rechercher l'espace de stockage total utilisé sur Nextcloud. Les administrateurs de groupe peuvent aussi rechercher Nextcloud et accéder aux même fonctionnalités que les administrateurs pour les groupes dont ils ont la gestion. L'API permet aussi à un administrateur de rechercher les applications Nextcloud actives et les informations d'application ainsi que d'activer et désactiver les applications à distance. Une fois l'application activée, des requêtes HTTP peuvent être utilisées au moyen d'un entête Basic Auth pour exécuter chacune des fonctionnalités listées ci-dessus. Des informations supplémentaires sont accessibles dans la documentation sur l'API de provisionnement, avec des exemples de demandes et réponses serveur.",
"An unexpected error occurred. Please consult your sysadmin." : "Une erreur inattendue est survenue. Veuillez contacter votre administrateur système."
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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/settings/l10n/fr.js b/apps/settings/l10n/fr.js
index 96cc598eb43..5ac44bbd9af 100644
--- a/apps/settings/l10n/fr.js
+++ b/apps/settings/l10n/fr.js
@@ -510,4 +510,4 @@ OC.L10N.register(
"For password reset and notifications" : "Pour la réinitialisation du mot de passe et les notifications",
"Set as primary mail" : "Définir comme e-mail principal"
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/settings/l10n/fr.json b/apps/settings/l10n/fr.json
index 4f3b4f08f68..4a108185728 100644
--- a/apps/settings/l10n/fr.json
+++ b/apps/settings/l10n/fr.json
@@ -507,5 +507,5 @@
"Change privacy level of email" : "Changer le niveau de confidentialité de l'e-mail",
"For password reset and notifications" : "Pour la réinitialisation du mot de passe et les notifications",
"Set as primary mail" : "Définir comme e-mail principal"
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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/settings/templates/settings/admin/additional-mail.php b/apps/settings/templates/settings/admin/additional-mail.php
index a7e8382de18..6b85fcbe867 100644
--- a/apps/settings/templates/settings/admin/additional-mail.php
+++ b/apps/settings/templates/settings/admin/additional-mail.php
@@ -140,7 +140,7 @@ $mail_sendmailmode = [
<input type="text" name="mail_smtphost" id="mail_smtphost" placeholder="smtp.example.com"
value="<?php p($_['mail_smtphost']) ?>" />
:
- <input type="text" name="mail_smtpport" id="mail_smtpport" placeholder="<?php p($l->t('Port'))?>"
+ <input type="text" inputmode="numeric" name="mail_smtpport" id="mail_smtpport" placeholder="<?php p($l->t('Port'))?>"
value="<?php p($_['mail_smtpport']) ?>" />
</p>
</form>
diff --git a/apps/sharebymail/l10n/fr.js b/apps/sharebymail/l10n/fr.js
index 5a8b687a6c0..51d0fa944a3 100644
--- a/apps/sharebymail/l10n/fr.js
+++ b/apps/sharebymail/l10n/fr.js
@@ -54,4 +54,4 @@ OC.L10N.register(
"We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Nous ne pouvons pas vous envoyer le mot de passe généré automatiquement. Veuillez renseigner une adresse e-mail valide dans vos paramètres personnels puis réessayer.",
"Enforce password protection" : "Imposer la protection par mot de passe"
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/sharebymail/l10n/fr.json b/apps/sharebymail/l10n/fr.json
index c2666e70f09..ae72df39da1 100644
--- a/apps/sharebymail/l10n/fr.json
+++ b/apps/sharebymail/l10n/fr.json
@@ -51,5 +51,5 @@
"Reply to initiator" : "Répondre à l'initiateur",
"We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Nous ne pouvons pas vous envoyer le mot de passe généré automatiquement. Veuillez renseigner une adresse e-mail valide dans vos paramètres personnels puis réessayer.",
"Enforce password protection" : "Imposer la protection par mot de passe"
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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/systemtags/l10n/fr.js b/apps/systemtags/l10n/fr.js
index 381c6c41eb9..8301f0182b4 100644
--- a/apps/systemtags/l10n/fr.js
+++ b/apps/systemtags/l10n/fr.js
@@ -64,4 +64,4 @@ OC.L10N.register(
"Size" : "Taille",
"Modified" : "Modifié"
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/systemtags/l10n/fr.json b/apps/systemtags/l10n/fr.json
index cc20ad1d967..a132c5176aa 100644
--- a/apps/systemtags/l10n/fr.json
+++ b/apps/systemtags/l10n/fr.json
@@ -61,5 +61,5 @@
"No entries found in this folder" : "Aucune entrée trouvée dans ce dossier",
"Size" : "Taille",
"Modified" : "Modifié"
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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/theming/l10n/fr.js b/apps/theming/l10n/fr.js
index 1165934ccec..8b8193e3c34 100644
--- a/apps/theming/l10n/fr.js
+++ b/apps/theming/l10n/fr.js
@@ -51,4 +51,4 @@ OC.L10N.register(
"Upload new favicon" : "Téléverser un nouveau favicon",
"Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Installez l'extension PHP Imagemagick avec le support pour les images SVG afin de générer automatiquement les favicons sur base du logo téléversé et de la couleur."
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/theming/l10n/fr.json b/apps/theming/l10n/fr.json
index 8e0e69e3f03..37aa5065982 100644
--- a/apps/theming/l10n/fr.json
+++ b/apps/theming/l10n/fr.json
@@ -48,5 +48,5 @@
"Favicon" : "Favicon",
"Upload new favicon" : "Téléverser un nouveau favicon",
"Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Installez l'extension PHP Imagemagick avec le support pour les images SVG afin de générer automatiquement les favicons sur base du logo téléversé et de la couleur."
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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/twofactor_backupcodes/l10n/fr.js b/apps/twofactor_backupcodes/l10n/fr.js
index 8f44815a5f8..31aefb65a68 100644
--- a/apps/twofactor_backupcodes/l10n/fr.js
+++ b/apps/twofactor_backupcodes/l10n/fr.js
@@ -20,4 +20,4 @@ OC.L10N.register(
"Use one of the backup codes you saved when setting up two-factor authentication." : "Utilisez l'un des codes de secours que vous avez crée lors du paramétrage de l'authentification à deux facteurs.",
"Submit" : "Envoyer"
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/twofactor_backupcodes/l10n/fr.json b/apps/twofactor_backupcodes/l10n/fr.json
index 48157e74a03..4e31f7462f1 100644
--- a/apps/twofactor_backupcodes/l10n/fr.json
+++ b/apps/twofactor_backupcodes/l10n/fr.json
@@ -17,5 +17,5 @@
"{name} backup codes" : "{name} codes de récupération",
"Use one of the backup codes you saved when setting up two-factor authentication." : "Utilisez l'un des codes de secours que vous avez crée lors du paramétrage de l'authentification à deux facteurs.",
"Submit" : "Envoyer"
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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/updatenotification/l10n/fr.js b/apps/updatenotification/l10n/fr.js
index 10975f22db1..dfd80eee223 100644
--- a/apps/updatenotification/l10n/fr.js
+++ b/apps/updatenotification/l10n/fr.js
@@ -52,4 +52,4 @@ OC.L10N.register(
"<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong></strong>Applications compatibles pour cette version de Nexctloud",
"_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> application n'a pas de version compatible avec cette version disponible de Nextcloud","<strong>%n</strong> applications n'ont pas de version compatible avec cette version disponible de Nextcloud"]
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/updatenotification/l10n/fr.json b/apps/updatenotification/l10n/fr.json
index e5948800f77..714a2e3770b 100644
--- a/apps/updatenotification/l10n/fr.json
+++ b/apps/updatenotification/l10n/fr.json
@@ -49,5 +49,5 @@
"_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> application n'a pas de mise à jour disponible pour cette version","<strong>%n</strong> applications n'ont pas de mise à jour disponible pour cette version"],
"<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong></strong>Applications compatibles pour cette version de Nexctloud",
"_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> application n'a pas de version compatible avec cette version disponible de Nextcloud","<strong>%n</strong> applications n'ont pas de version compatible avec cette version disponible de Nextcloud"]
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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/user_ldap/appinfo/info.xml b/apps/user_ldap/appinfo/info.xml
index 2dae4845241..d654d34d66e 100644
--- a/apps/user_ldap/appinfo/info.xml
+++ b/apps/user_ldap/appinfo/info.xml
@@ -50,6 +50,7 @@ A user logs into Nextcloud with their LDAP or AD credentials, and is granted acc
<command>OCA\User_LDAP\Command\CheckUser</command>
<command>OCA\User_LDAP\Command\CreateEmptyConfig</command>
<command>OCA\User_LDAP\Command\DeleteConfig</command>
+ <command>OCA\User_LDAP\Command\ResetGroup</command>
<command>OCA\User_LDAP\Command\ResetUser</command>
<command>OCA\User_LDAP\Command\Search</command>
<command>OCA\User_LDAP\Command\SetConfig</command>
diff --git a/apps/user_ldap/composer/composer/autoload_classmap.php b/apps/user_ldap/composer/composer/autoload_classmap.php
index 005f1a70a4e..ae112b2b604 100644
--- a/apps/user_ldap/composer/composer/autoload_classmap.php
+++ b/apps/user_ldap/composer/composer/autoload_classmap.php
@@ -14,6 +14,7 @@ return array(
'OCA\\User_LDAP\\Command\\CheckUser' => $baseDir . '/../lib/Command/CheckUser.php',
'OCA\\User_LDAP\\Command\\CreateEmptyConfig' => $baseDir . '/../lib/Command/CreateEmptyConfig.php',
'OCA\\User_LDAP\\Command\\DeleteConfig' => $baseDir . '/../lib/Command/DeleteConfig.php',
+ 'OCA\\User_LDAP\\Command\\ResetGroup' => $baseDir . '/../lib/Command/ResetGroup.php',
'OCA\\User_LDAP\\Command\\ResetUser' => $baseDir . '/../lib/Command/ResetUser.php',
'OCA\\User_LDAP\\Command\\Search' => $baseDir . '/../lib/Command/Search.php',
'OCA\\User_LDAP\\Command\\SetConfig' => $baseDir . '/../lib/Command/SetConfig.php',
diff --git a/apps/user_ldap/composer/composer/autoload_static.php b/apps/user_ldap/composer/composer/autoload_static.php
index f888b46ad9d..3ff92c350f5 100644
--- a/apps/user_ldap/composer/composer/autoload_static.php
+++ b/apps/user_ldap/composer/composer/autoload_static.php
@@ -29,6 +29,7 @@ class ComposerStaticInitUser_LDAP
'OCA\\User_LDAP\\Command\\CheckUser' => __DIR__ . '/..' . '/../lib/Command/CheckUser.php',
'OCA\\User_LDAP\\Command\\CreateEmptyConfig' => __DIR__ . '/..' . '/../lib/Command/CreateEmptyConfig.php',
'OCA\\User_LDAP\\Command\\DeleteConfig' => __DIR__ . '/..' . '/../lib/Command/DeleteConfig.php',
+ 'OCA\\User_LDAP\\Command\\ResetGroup' => __DIR__ . '/..' . '/../lib/Command/ResetGroup.php',
'OCA\\User_LDAP\\Command\\ResetUser' => __DIR__ . '/..' . '/../lib/Command/ResetUser.php',
'OCA\\User_LDAP\\Command\\Search' => __DIR__ . '/..' . '/../lib/Command/Search.php',
'OCA\\User_LDAP\\Command\\SetConfig' => __DIR__ . '/..' . '/../lib/Command/SetConfig.php',
diff --git a/apps/user_ldap/l10n/fr.js b/apps/user_ldap/l10n/fr.js
index 8d1fa7d2ae2..369808d859d 100644
--- a/apps/user_ldap/l10n/fr.js
+++ b/apps/user_ldap/l10n/fr.js
@@ -199,4 +199,4 @@ OC.L10N.register(
"LDAP / AD Email Address:" : "Adresse mail LDAP / AD :",
"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Par défaut le nom d'utilisateur interne sera créé depuis l'attribut UUID. Cela permet de s'assurer que le nom d'utilisateur est unique et que les caractères n'ont pas besoin d'être convertis. Le nom d'utilisateur interne a pour restriction de ne contenir que les caractères suivants : [ a-zA-Z0-9_.@- ]. Les autres caractères sont remplacés par leurs correspondants ASCII ou simplement omis. En cas de collisions, un nombre sera ajouté/incrémenté. Le nom d'utilisateur interne est utilisé pour identifier un utilisateur en interne. C'est aussi le nom par défaut du dossier personnel de l'utilisateur. Il fait aussi parti des URLs distantes, par exemple pour tous les services *DAV. Avec ce paramètre, le comportement par défaut peut être écrasé. Laissez le vide pour utiliser le comportement par défaut. Les modifications prendront effet seulement pour les nouveaux utilisateurs LDAP mappés (ajoutés)."
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/user_ldap/l10n/fr.json b/apps/user_ldap/l10n/fr.json
index a6990467d5d..701ce8dfb78 100644
--- a/apps/user_ldap/l10n/fr.json
+++ b/apps/user_ldap/l10n/fr.json
@@ -196,5 +196,5 @@
"Allows login against the LDAP / AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Autorise l'authentification à partir du nom d'utilisateur LDAP / AD.Celui-ci sera détecté et pourra être soit \"uid\", soit \"sAMAccountName\".",
"LDAP / AD Email Address:" : "Adresse mail LDAP / AD :",
"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Par défaut le nom d'utilisateur interne sera créé depuis l'attribut UUID. Cela permet de s'assurer que le nom d'utilisateur est unique et que les caractères n'ont pas besoin d'être convertis. Le nom d'utilisateur interne a pour restriction de ne contenir que les caractères suivants : [ a-zA-Z0-9_.@- ]. Les autres caractères sont remplacés par leurs correspondants ASCII ou simplement omis. En cas de collisions, un nombre sera ajouté/incrémenté. Le nom d'utilisateur interne est utilisé pour identifier un utilisateur en interne. C'est aussi le nom par défaut du dossier personnel de l'utilisateur. Il fait aussi parti des URLs distantes, par exemple pour tous les services *DAV. Avec ce paramètre, le comportement par défaut peut être écrasé. Laissez le vide pour utiliser le comportement par défaut. Les modifications prendront effet seulement pour les nouveaux utilisateurs LDAP mappés (ajoutés)."
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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/user_ldap/lib/Command/ResetGroup.php b/apps/user_ldap/lib/Command/ResetGroup.php
new file mode 100644
index 00000000000..f3c3019f919
--- /dev/null
+++ b/apps/user_ldap/lib/Command/ResetGroup.php
@@ -0,0 +1,111 @@
+<?php
+/**
+ * @copyright Copyright (c) 2021 Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ * @author Côme Chilliet <come.chilliet@nextcloud.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+namespace OCA\User_LDAP\Command;
+
+use OCA\User_LDAP\Group_Proxy;
+use OCA\User_LDAP\GroupPluginManager;
+use OCP\IGroup;
+use OCP\IGroupManager;
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Helper\QuestionHelper;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Question\Question;
+
+class ResetGroup extends Command {
+ private IGroupManager $groupManager;
+ private GroupPluginManager $pluginManager;
+ private Group_Proxy $backend;
+
+ public function __construct(
+ IGroupManager $groupManager,
+ GroupPluginManager $pluginManager,
+ Group_Proxy $backend
+ ) {
+ $this->groupManager = $groupManager;
+ $this->pluginManager = $pluginManager;
+ $this->backend = $backend;
+ parent::__construct();
+ }
+
+ protected function configure(): void {
+ $this
+ ->setName('ldap:reset-group')
+ ->setDescription('deletes an LDAP group independent of the group state in the LDAP')
+ ->addArgument(
+ 'gid',
+ InputArgument::REQUIRED,
+ 'the group name as used in Nextcloud'
+ )
+ ->addOption(
+ 'yes',
+ 'y',
+ InputOption::VALUE_NONE,
+ 'do not ask for confirmation'
+ );
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output): int {
+ try {
+ $gid = $input->getArgument('gid');
+ $group = $this->groupManager->get($gid);
+ if (!$group instanceof IGroup) {
+ throw new \Exception('Group not found');
+ }
+ $backends = $group->getBackendNames();
+ if (!in_array('LDAP', $backends)) {
+ throw new \Exception('The given group is not a recognized LDAP group.');
+ }
+ if ($input->getOption('yes') === false) {
+ /** @var QuestionHelper $helper */
+ $helper = $this->getHelper('question');
+ $q = new Question('Delete all local data of this group (y|N)? ');
+ $input->setOption('yes', $helper->ask($input, $output, $q) === 'y');
+ }
+ if ($input->getOption('yes') !== true) {
+ throw new \Exception('Reset cancelled by operator');
+ }
+
+ // Disable real deletion if a plugin supports it
+ $pluginManagerSuppressed = $this->pluginManager->setSuppressDeletion(true);
+ // Bypass groupExists test to force mapping deletion
+ $this->backend->getLDAPAccess($gid)->connection->writeToCache('groupExists' . $gid, false);
+ echo "calling delete $gid\n";
+ if ($group->delete()) {
+ $this->pluginManager->setSuppressDeletion($pluginManagerSuppressed);
+ return 0;
+ }
+ } catch (\Throwable $e) {
+ if (isset($pluginManagerSuppressed)) {
+ $this->pluginManager->setSuppressDeletion($pluginManagerSuppressed);
+ }
+ $output->writeln('<error>' . $e->getMessage() . '</error>');
+ return 1;
+ }
+ $output->writeln('<error>Error while resetting group</error>');
+ return 2;
+ }
+}
diff --git a/apps/user_ldap/lib/GroupPluginManager.php b/apps/user_ldap/lib/GroupPluginManager.php
index d23e9d4d443..5999409cdba 100644
--- a/apps/user_ldap/lib/GroupPluginManager.php
+++ b/apps/user_ldap/lib/GroupPluginManager.php
@@ -26,9 +26,10 @@ namespace OCA\User_LDAP;
use OCP\GroupInterface;
class GroupPluginManager {
- private $respondToActions = 0;
+ private int $respondToActions = 0;
- private $which = [
+ /** @var array<int, ?ILDAPGroupPlugin> */
+ private array $which = [
GroupInterface::CREATE_GROUP => null,
GroupInterface::DELETE_GROUP => null,
GroupInterface::ADD_TO_GROUP => null,
@@ -37,6 +38,8 @@ class GroupPluginManager {
GroupInterface::GROUP_DETAILS => null
];
+ private bool $suppressDeletion = false;
+
/**
* @return int All implemented actions
*/
@@ -84,16 +87,31 @@ class GroupPluginManager {
throw new \Exception('No plugin implements createGroup in this LDAP Backend.');
}
+ public function canDeleteGroup(): bool {
+ return !$this->suppressDeletion && $this->implementsActions(GroupInterface::DELETE_GROUP);
+ }
+
+ /**
+ * @return bool – the value before the change
+ */
+ public function setSuppressDeletion(bool $value): bool {
+ $old = $this->suppressDeletion;
+ $this->suppressDeletion = $value;
+ return $old;
+ }
+
/**
* Delete a group
- * @param string $gid Group Id of the group to delete
- * @return bool
+ *
* @throws \Exception
*/
- public function deleteGroup($gid) {
+ public function deleteGroup(string $gid): bool {
$plugin = $this->which[GroupInterface::DELETE_GROUP];
if ($plugin) {
+ if ($this->suppressDeletion) {
+ return false;
+ }
return $plugin->deleteGroup($gid);
}
throw new \Exception('No plugin implements deleteGroup in this LDAP Backend.');
diff --git a/apps/user_ldap/lib/Group_LDAP.php b/apps/user_ldap/lib/Group_LDAP.php
index 766b77bf521..f9d9b061743 100644
--- a/apps/user_ldap/lib/Group_LDAP.php
+++ b/apps/user_ldap/lib/Group_LDAP.php
@@ -48,10 +48,11 @@ use OC;
use OC\Cache\CappedMemoryCache;
use OC\ServerNotAvailableException;
use OCP\Group\Backend\IGetDisplayNameBackend;
+use OCP\Group\Backend\IDeleteGroupBackend;
use OCP\GroupInterface;
use Psr\Log\LoggerInterface;
-class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, IGetDisplayNameBackend {
+class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, IGetDisplayNameBackend, IDeleteGroupBackend {
protected $enabled = false;
/** @var string[][] $cachedGroupMembers array of users with gid as key */
@@ -1204,6 +1205,7 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I
*/
public function implementsActions($actions) {
return (bool)((GroupInterface::COUNT_USERS |
+ GroupInterface::DELETE_GROUP |
$this->groupPluginManager->getImplementedActions()) & $actions);
}
@@ -1249,19 +1251,32 @@ class Group_LDAP extends BackendUtility implements GroupInterface, IGroupLDAP, I
* delete a group
*
* @param string $gid gid of the group to delete
- * @return bool
* @throws Exception
*/
- public function deleteGroup($gid) {
- if ($this->groupPluginManager->implementsActions(GroupInterface::DELETE_GROUP)) {
+ public function deleteGroup(string $gid): bool {
+ if ($this->groupPluginManager->canDeleteGroup()) {
if ($ret = $this->groupPluginManager->deleteGroup($gid)) {
- #delete group in nextcloud internal db
+ // Delete group in nextcloud internal db
$this->access->getGroupMapper()->unmap($gid);
$this->access->connection->writeToCache("groupExists" . $gid, false);
}
return $ret;
}
- throw new Exception('Could not delete group in LDAP backend.');
+
+ // Getting dn, if false the group is not mapped
+ $dn = $this->access->groupname2dn($gid);
+ if (!$dn) {
+ throw new Exception('Could not delete unknown group '.$gid.' in LDAP backend.');
+ }
+
+ if (!$this->groupExists($gid)) {
+ // The group does not exist in the LDAP, remove the mapping
+ $this->access->getGroupMapper()->unmap($gid);
+ $this->access->connection->writeToCache("groupExists" . $gid, false);
+ return true;
+ }
+
+ throw new Exception('Could not delete existing group '.$gid.' in LDAP backend.');
}
/**
diff --git a/apps/user_ldap/lib/Group_Proxy.php b/apps/user_ldap/lib/Group_Proxy.php
index 92a9041949e..ea2fcce679c 100644
--- a/apps/user_ldap/lib/Group_Proxy.php
+++ b/apps/user_ldap/lib/Group_Proxy.php
@@ -28,10 +28,11 @@
*/
namespace OCA\User_LDAP;
-use OCP\Group\Backend\INamedBackend;
+use OCP\Group\Backend\IDeleteGroupBackend;
use OCP\Group\Backend\IGetDisplayNameBackend;
+use OCP\Group\Backend\INamedBackend;
-class Group_Proxy extends Proxy implements \OCP\GroupInterface, IGroupLDAP, IGetDisplayNameBackend, INamedBackend {
+class Group_Proxy extends Proxy implements \OCP\GroupInterface, IGroupLDAP, IGetDisplayNameBackend, INamedBackend, IDeleteGroupBackend {
private $backends = [];
private $refBackend = null;
@@ -171,11 +172,8 @@ class Group_Proxy extends Proxy implements \OCP\GroupInterface, IGroupLDAP, IGet
/**
* delete a group
- *
- * @param string $gid gid of the group to delete
- * @return bool
*/
- public function deleteGroup($gid) {
+ public function deleteGroup(string $gid): bool {
return $this->handleRequest(
$gid, 'deleteGroup', [$gid]);
}
diff --git a/apps/user_ldap/lib/UserPluginManager.php b/apps/user_ldap/lib/UserPluginManager.php
index 035b7952dce..748a210cf60 100644
--- a/apps/user_ldap/lib/UserPluginManager.php
+++ b/apps/user_ldap/lib/UserPluginManager.php
@@ -28,9 +28,9 @@ namespace OCA\User_LDAP;
use OC\User\Backend;
class UserPluginManager {
- private $respondToActions = 0;
+ private int $respondToActions = 0;
- private $which = [
+ private array $which = [
Backend::CREATE_USER => null,
Backend::SET_PASSWORD => null,
Backend::GET_HOME => null,
@@ -41,8 +41,7 @@ class UserPluginManager {
'deleteUser' => null
];
- /** @var bool */
- private $suppressDeletion = false;
+ private bool $suppressDeletion = false;
/**
* @return int All implemented actions, except for 'deleteUser'
diff --git a/apps/user_ldap/tests/GroupLDAPPluginTest.php b/apps/user_ldap/tests/GroupLDAPPluginTest.php
index b55f57990a0..660608d6b1f 100644
--- a/apps/user_ldap/tests/GroupLDAPPluginTest.php
+++ b/apps/user_ldap/tests/GroupLDAPPluginTest.php
@@ -84,7 +84,7 @@ class GroupLDAPPluginTest extends \Test\TestCase {
$pluginManager->createGroup('group');
}
-
+
public function testCreateGroupNotRegistered() {
$this->expectException(\Exception::class);
$this->expectExceptionMessage('No plugin implements createGroup in this LDAP Backend.');
@@ -108,13 +108,13 @@ class GroupLDAPPluginTest extends \Test\TestCase {
->method('deleteGroup')
->with(
$this->equalTo('group')
- );
+ )->willReturn(true);
$pluginManager->register($plugin);
- $pluginManager->deleteGroup('group');
+ $this->assertTrue($pluginManager->deleteGroup('group'));
}
-
+
public function testDeleteGroupNotRegistered() {
$this->expectException(\Exception::class);
$this->expectExceptionMessage('No plugin implements deleteGroup in this LDAP Backend.');
@@ -145,7 +145,7 @@ class GroupLDAPPluginTest extends \Test\TestCase {
$pluginManager->addToGroup('uid', 'gid');
}
-
+
public function testAddToGroupNotRegistered() {
$this->expectException(\Exception::class);
$this->expectExceptionMessage('No plugin implements addToGroup in this LDAP Backend.');
@@ -176,7 +176,7 @@ class GroupLDAPPluginTest extends \Test\TestCase {
$pluginManager->removeFromGroup('uid', 'gid');
}
-
+
public function testRemoveFromGroupNotRegistered() {
$this->expectException(\Exception::class);
$this->expectExceptionMessage('No plugin implements removeFromGroup in this LDAP Backend.');
@@ -207,7 +207,7 @@ class GroupLDAPPluginTest extends \Test\TestCase {
$pluginManager->countUsersInGroup('gid', 'search');
}
-
+
public function testCountUsersInGroupNotRegistered() {
$this->expectException(\Exception::class);
$this->expectExceptionMessage('No plugin implements countUsersInGroup in this LDAP Backend.');
@@ -237,7 +237,7 @@ class GroupLDAPPluginTest extends \Test\TestCase {
$pluginManager->getGroupDetails('gid');
}
-
+
public function testgetGroupDetailsNotRegistered() {
$this->expectException(\Exception::class);
$this->expectExceptionMessage('No plugin implements getGroupDetails in this LDAP Backend.');
diff --git a/apps/user_ldap/tests/Group_LDAPTest.php b/apps/user_ldap/tests/Group_LDAPTest.php
index f8327c0776c..6204c22cb9e 100644
--- a/apps/user_ldap/tests/Group_LDAPTest.php
+++ b/apps/user_ldap/tests/Group_LDAPTest.php
@@ -1092,7 +1092,7 @@ class Group_LDAPTest extends TestCase {
$pluginManager->expects($this->once())
->method('deleteGroup')
->with('gid')
- ->willReturn('result');
+ ->willReturn(true);
$mapper = $this->getMockBuilder(GroupMapping::class)
->setMethods(['unmap'])
@@ -1108,7 +1108,7 @@ class Group_LDAPTest extends TestCase {
$ldap = new GroupLDAP($access, $pluginManager);
- $this->assertEquals($ldap->deleteGroup('gid'), 'result');
+ $this->assertTrue($ldap->deleteGroup('gid'));
}
diff --git a/apps/user_status/l10n/fr.js b/apps/user_status/l10n/fr.js
index 01abc796d3c..4ad763c6852 100644
--- a/apps/user_status/l10n/fr.js
+++ b/apps/user_status/l10n/fr.js
@@ -37,4 +37,4 @@ OC.L10N.register(
"Appear offline" : "Apparaitre hors-ligne",
"What's your status?" : "Quel est votre statut ?"
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/user_status/l10n/fr.json b/apps/user_status/l10n/fr.json
index a62900e8f1f..8b0dbe805f0 100644
--- a/apps/user_status/l10n/fr.json
+++ b/apps/user_status/l10n/fr.json
@@ -34,5 +34,5 @@
"Mute all notifications" : "Désactiver toutes les notifications",
"Appear offline" : "Apparaitre hors-ligne",
"What's your status?" : "Quel est votre statut ?"
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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/weather_status/l10n/fr.js b/apps/weather_status/l10n/fr.js
index 2d6500f1890..ec78c344202 100644
--- a/apps/weather_status/l10n/fr.js
+++ b/apps/weather_status/l10n/fr.js
@@ -47,4 +47,4 @@ OC.L10N.register(
"{temperature} {unit} Light rain showers at {time}" : "{temperature} {unit} Faibles averses à {time}",
"{temperature} {unit} Heavy rain showers at {time}" : "{temperature} {unit} Fortes averses à {time}"
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/weather_status/l10n/fr.json b/apps/weather_status/l10n/fr.json
index f655d207345..969a8fa3a99 100644
--- a/apps/weather_status/l10n/fr.json
+++ b/apps/weather_status/l10n/fr.json
@@ -44,5 +44,5 @@
"{temperature} {unit} Rain showers at {time}" : "{temperature} {unit} Averses à {time}",
"{temperature} {unit} Light rain showers at {time}" : "{temperature} {unit} Faibles averses à {time}",
"{temperature} {unit} Heavy rain showers at {time}" : "{temperature} {unit} Fortes averses à {time}"
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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/weather_status/l10n/pl.js b/apps/weather_status/l10n/pl.js
index 20bca6a2fe8..02f2e6756bb 100644
--- a/apps/weather_status/l10n/pl.js
+++ b/apps/weather_status/l10n/pl.js
@@ -21,6 +21,18 @@ OC.L10N.register(
"{temperature} {unit} partly cloudy" : "{temperature} {unit} częściowe zachmurzenie",
"{temperature} {unit} foggy later today" : "{temperature} {unit} mgła później dzisiaj",
"{temperature} {unit} foggy" : "{temperature} {unit} mgła",
+ "{temperature} {unit} light rainfall later today" : "{temperature} {unit} lekkie opady deszczu później dzisiaj",
+ "{temperature} {unit} light rainfall" : "{temperature} {unit} lekkie opady deszczu",
+ "{temperature} {unit} rainfall later today" : "{temperature} {unit} opady deszczu później dzisiaj",
+ "{temperature} {unit} rainfall" : "{temperature} {unit} opady deszczu",
+ "{temperature} {unit} heavy rainfall later today" : "{temperature} {unit} ulewne opady deszczu później dzisiaj",
+ "{temperature} {unit} heavy rainfall" : "{temperature} {unit} ulewne opady deszczu",
+ "{temperature} {unit} rainfall showers later today" : "{temperature} {unit} przelotne opady deszczu później dzisiaj",
+ "{temperature} {unit} rainfall showers" : "{temperature} {unit} przelotne opady deszczu",
+ "{temperature} {unit} light rainfall showers later today" : "{temperature} {unit} lekkie przelotne opady deszczu później dzisiaj",
+ "{temperature} {unit} light rainfall showers" : "{temperature} {unit} lekkie przelotne opady deszczu",
+ "{temperature} {unit} heavy rainfall showers later today" : "{temperature} {unit} obfite opady deszczu później dzisiaj",
+ "{temperature} {unit} heavy rainfall showers" : "{temperature} {unit} ulewne opady deszczu",
"More weather for {adr}" : "Więcej pogody dla {adr}",
"Loading weather" : "Wczytywanie pogody",
"Remove from favorites" : "Usuń z ulubionych",
diff --git a/apps/weather_status/l10n/pl.json b/apps/weather_status/l10n/pl.json
index 597c8cc449e..5cebe9bcf35 100644
--- a/apps/weather_status/l10n/pl.json
+++ b/apps/weather_status/l10n/pl.json
@@ -19,6 +19,18 @@
"{temperature} {unit} partly cloudy" : "{temperature} {unit} częściowe zachmurzenie",
"{temperature} {unit} foggy later today" : "{temperature} {unit} mgła później dzisiaj",
"{temperature} {unit} foggy" : "{temperature} {unit} mgła",
+ "{temperature} {unit} light rainfall later today" : "{temperature} {unit} lekkie opady deszczu później dzisiaj",
+ "{temperature} {unit} light rainfall" : "{temperature} {unit} lekkie opady deszczu",
+ "{temperature} {unit} rainfall later today" : "{temperature} {unit} opady deszczu później dzisiaj",
+ "{temperature} {unit} rainfall" : "{temperature} {unit} opady deszczu",
+ "{temperature} {unit} heavy rainfall later today" : "{temperature} {unit} ulewne opady deszczu później dzisiaj",
+ "{temperature} {unit} heavy rainfall" : "{temperature} {unit} ulewne opady deszczu",
+ "{temperature} {unit} rainfall showers later today" : "{temperature} {unit} przelotne opady deszczu później dzisiaj",
+ "{temperature} {unit} rainfall showers" : "{temperature} {unit} przelotne opady deszczu",
+ "{temperature} {unit} light rainfall showers later today" : "{temperature} {unit} lekkie przelotne opady deszczu później dzisiaj",
+ "{temperature} {unit} light rainfall showers" : "{temperature} {unit} lekkie przelotne opady deszczu",
+ "{temperature} {unit} heavy rainfall showers later today" : "{temperature} {unit} obfite opady deszczu później dzisiaj",
+ "{temperature} {unit} heavy rainfall showers" : "{temperature} {unit} ulewne opady deszczu",
"More weather for {adr}" : "Więcej pogody dla {adr}",
"Loading weather" : "Wczytywanie pogody",
"Remove from favorites" : "Usuń z ulubionych",
diff --git a/apps/workflowengine/l10n/fr.js b/apps/workflowengine/l10n/fr.js
index 9e8b3b53280..655eeb7772f 100644
--- a/apps/workflowengine/l10n/fr.js
+++ b/apps/workflowengine/l10n/fr.js
@@ -117,4 +117,4 @@ OC.L10N.register(
"is not member of" : "n'est pas membre de",
"Browse the app store" : "Parcourir l'App Store"
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/workflowengine/l10n/fr.json b/apps/workflowengine/l10n/fr.json
index ce154bf9794..1286dc5262a 100644
--- a/apps/workflowengine/l10n/fr.json
+++ b/apps/workflowengine/l10n/fr.json
@@ -114,5 +114,5 @@
"is member of" : "est membre de",
"is not member of" : "n'est pas membre de",
"Browse the app store" : "Parcourir l'App Store"
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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/core/Command/Group/Delete.php b/core/Command/Group/Delete.php
index 75202308944..be97be83407 100644
--- a/core/Command/Group/Delete.php
+++ b/core/Command/Group/Delete.php
@@ -61,7 +61,7 @@ class Delete extends Base {
$output->writeln('<error>Group "' . $gid . '" could not be deleted.</error>');
return 1;
}
- if (! $this->groupManager->groupExists($gid)) {
+ if (!$this->groupManager->groupExists($gid)) {
$output->writeln('<error>Group "' . $gid . '" does not exist.</error>');
return 1;
}
diff --git a/core/l10n/fr.js b/core/l10n/fr.js
index d877fcb9a8f..383b62e0062 100644
--- a/core/l10n/fr.js
+++ b/core/l10n/fr.js
@@ -427,4 +427,4 @@ OC.L10N.register(
"You haven't added any info yet" : "Vous n'avez pas encore ajouté de données",
"{user} hasn't added any info yet" : "{user} n'a pas encore ajouté de données"
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/core/l10n/fr.json b/core/l10n/fr.json
index 6d4fc36f4fe..26f16282e86 100644
--- a/core/l10n/fr.json
+++ b/core/l10n/fr.json
@@ -424,5 +424,5 @@
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the {linkstart}documentation ↗{linkend}." : "Pour migrer vers une autre base de données, utiliser la ligne de commande : 'occ db:convert-type', ou se reporter à la {linkstart}documentation ↗{linkend}.",
"You haven't added any info yet" : "Vous n'avez pas encore ajouté de données",
"{user} hasn't added any info yet" : "{user} n'a pas encore ajouté de données"
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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/core/l10n/hu.js b/core/l10n/hu.js
index 5281ec32e93..0fd53c331b3 100644
--- a/core/l10n/hu.js
+++ b/core/l10n/hu.js
@@ -100,8 +100,10 @@ OC.L10N.register(
"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.",
"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. ",
"This is particularly recommended when using the desktop client for file synchronisation." : "Ezt különösen akkor javasoljuk, ha asztali klienst használ fájlszinkronizálásához.",
+ "To migrate to another database use the command line tool: \"occ db:convert-type\", or see the {linkstart}documentation ↗{linkend}." : "Más adatbázisba történő áttéréshez használja a parancssori eszközt: „occ db: convert-type”, vagy tekintse meg a {linkstart}dokumentációt ↗{linkend}.",
"The PHP memory limit is below the recommended value of 512MB." : "A PHP memóriakorlátja az ajánlott 512 MB alatt van.",
"Some app directories are owned by a different user than the web server one. This may be the case if apps have been installed manually. Check the permissions of the following app directories:" : "Néhány alkalmazáskönyvtár tulajdonosa különbözik a webkiszolgálóétól. Ez akkor fordul elő, ha az alkalmazás kézileg lett telepítve. Ellenőrizze az alábbi alkalmazáskönyvtárak jogosultságát:",
"MySQL is used as database but does not support 4-byte characters. To be able to handle 4-byte characters (like emojis) without issues in filenames or comments for example it is recommended to enable the 4-byte support in MySQL. For further details read {linkstart}the documentation page about this ↗{linkend}." : "A MySQL adatbázis van használatban, de nem támogatja a 4 bájtos karaktereket. Hogy a 4 bájtos karakterek (például az emodzsikat) problémák nélkül kezelhetők legyenek, például a fájlnevekben vagy a megjegyzésekben, ajánlott engedélyezni a 4 bájtos támogatást a MySQL-ben. További részletekért olvassa el a {linkstart}erről szóló dokumentációs oldalt ↗{linkend}.",
diff --git a/core/l10n/hu.json b/core/l10n/hu.json
index 835b9d82ee7..077262166ed 100644
--- a/core/l10n/hu.json
+++ b/core/l10n/hu.json
@@ -98,8 +98,10 @@
"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.",
"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. ",
"This is particularly recommended when using the desktop client for file synchronisation." : "Ezt különösen akkor javasoljuk, ha asztali klienst használ fájlszinkronizálásához.",
+ "To migrate to another database use the command line tool: \"occ db:convert-type\", or see the {linkstart}documentation ↗{linkend}." : "Más adatbázisba történő áttéréshez használja a parancssori eszközt: „occ db: convert-type”, vagy tekintse meg a {linkstart}dokumentációt ↗{linkend}.",
"The PHP memory limit is below the recommended value of 512MB." : "A PHP memóriakorlátja az ajánlott 512 MB alatt van.",
"Some app directories are owned by a different user than the web server one. This may be the case if apps have been installed manually. Check the permissions of the following app directories:" : "Néhány alkalmazáskönyvtár tulajdonosa különbözik a webkiszolgálóétól. Ez akkor fordul elő, ha az alkalmazás kézileg lett telepítve. Ellenőrizze az alábbi alkalmazáskönyvtárak jogosultságát:",
"MySQL is used as database but does not support 4-byte characters. To be able to handle 4-byte characters (like emojis) without issues in filenames or comments for example it is recommended to enable the 4-byte support in MySQL. For further details read {linkstart}the documentation page about this ↗{linkend}." : "A MySQL adatbázis van használatban, de nem támogatja a 4 bájtos karaktereket. Hogy a 4 bájtos karakterek (például az emodzsikat) problémák nélkül kezelhetők legyenek, például a fájlnevekben vagy a megjegyzésekben, ajánlott engedélyezni a 4 bájtos támogatást a MySQL-ben. További részletekért olvassa el a {linkstart}erről szóló dokumentációs oldalt ↗{linkend}.",
diff --git a/core/l10n/pl.js b/core/l10n/pl.js
index 8cdb3531a64..9cec8fcb8c8 100644
--- a/core/l10n/pl.js
+++ b/core/l10n/pl.js
@@ -100,8 +100,10 @@ OC.L10N.register(
"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." : "Moduł PHP \"imagick\" nie jest włączony, pomimo że aplikacja motywu jest. Aby generowanie favicon działało poprawnie, musisz zainstalować i włączyć ten moduł.",
"The PHP modules \"gmp\" and/or \"bcmath\" are not enabled. If you use WebAuthn passwordless authentication, these modules are required." : "Moduły PHP \"gmp\" i/lub \"bcmath\" nie są włączone. Jeśli używasz uwierzytelniania WebAuthn bez hasła, te moduły są wymagane.",
"Module php-imagick in this instance has no SVG support. For better compatibility it is recommended to install it." : "Moduł php-imagick w tej instancji nie obsługuje formatu SVG. Aby uzyskać lepszą kompatybilność, zaleca się jego zainstalowanie.",
+ "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}." : "Niektóre kolumny w bazie danych nie zawierają konwersji do big integers. Ze względu na to, że zmiana typów kolumn w dużych tabelach może zająć dużo czasu, nie zostały one zmienione automatycznie. Oczekujące zmiany można wykonać ręcznie, uruchamiając \"occ db:convert-filecache-bigint\". Ta operacja musi zostać wykonana, gdy instancja jest w trybie offline. Więcej informacji na ten temat przeczytasz na {linkstart}stronie dokumentacji ↗{linkend}.",
"SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "SQLite jest aktualnie używany jako baza danych. Dla większych instalacji zalecamy przełączenie na inną bazę danych.",
"This is particularly recommended when using the desktop client for file synchronisation." : "Jest to szczególnie zalecane podczas używania klienta desktopowego do synchronizacji plików.",
+ "To migrate to another database use the command line tool: \"occ db:convert-type\", or see the {linkstart}documentation ↗{linkend}." : "Aby przeprowadzić migrację do innej bazy danych, użyj narzędzia wiersza poleceń: \"occ db:convert-type\" lub zapoznaj się z {linkstart}dokumentacją ↗{linkend}.",
"The PHP memory limit is below the recommended value of 512MB." : "Limit pamięci PHP jest poniżej zalecanej wartości 512MB.",
"Some app directories are owned by a different user than the web server one. This may be the case if apps have been installed manually. Check the permissions of the following app directories:" : "Niektóre katalogi aplikacji są własnością innego użytkownika tego serwera WWW. Może to wystąpić, gdy aplikacje zostały zainstalowane ręcznie. Sprawdź uprawnienia poniższych katalogów:",
"MySQL is used as database but does not support 4-byte characters. To be able to handle 4-byte characters (like emojis) without issues in filenames or comments for example it is recommended to enable the 4-byte support in MySQL. For further details read {linkstart}the documentation page about this ↗{linkend}." : "MySQL jest używany jako baza danych, ale nie obsługuje znaków 4-bajtowych. Aby korzystać ze znaków 4-bajtowych w nazwach plików lub komentarzach (np. Emoji), zaleca się włączenie tej obsługi w MySQL. Więcej informacji na ten temat przeczytasz na {linkstart}stronie dokumentacji ↗{linkend}.",
diff --git a/core/l10n/pl.json b/core/l10n/pl.json
index bf8688bcbce..b0f75e0c05f 100644
--- a/core/l10n/pl.json
+++ b/core/l10n/pl.json
@@ -98,8 +98,10 @@
"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." : "Moduł PHP \"imagick\" nie jest włączony, pomimo że aplikacja motywu jest. Aby generowanie favicon działało poprawnie, musisz zainstalować i włączyć ten moduł.",
"The PHP modules \"gmp\" and/or \"bcmath\" are not enabled. If you use WebAuthn passwordless authentication, these modules are required." : "Moduły PHP \"gmp\" i/lub \"bcmath\" nie są włączone. Jeśli używasz uwierzytelniania WebAuthn bez hasła, te moduły są wymagane.",
"Module php-imagick in this instance has no SVG support. For better compatibility it is recommended to install it." : "Moduł php-imagick w tej instancji nie obsługuje formatu SVG. Aby uzyskać lepszą kompatybilność, zaleca się jego zainstalowanie.",
+ "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}." : "Niektóre kolumny w bazie danych nie zawierają konwersji do big integers. Ze względu na to, że zmiana typów kolumn w dużych tabelach może zająć dużo czasu, nie zostały one zmienione automatycznie. Oczekujące zmiany można wykonać ręcznie, uruchamiając \"occ db:convert-filecache-bigint\". Ta operacja musi zostać wykonana, gdy instancja jest w trybie offline. Więcej informacji na ten temat przeczytasz na {linkstart}stronie dokumentacji ↗{linkend}.",
"SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "SQLite jest aktualnie używany jako baza danych. Dla większych instalacji zalecamy przełączenie na inną bazę danych.",
"This is particularly recommended when using the desktop client for file synchronisation." : "Jest to szczególnie zalecane podczas używania klienta desktopowego do synchronizacji plików.",
+ "To migrate to another database use the command line tool: \"occ db:convert-type\", or see the {linkstart}documentation ↗{linkend}." : "Aby przeprowadzić migrację do innej bazy danych, użyj narzędzia wiersza poleceń: \"occ db:convert-type\" lub zapoznaj się z {linkstart}dokumentacją ↗{linkend}.",
"The PHP memory limit is below the recommended value of 512MB." : "Limit pamięci PHP jest poniżej zalecanej wartości 512MB.",
"Some app directories are owned by a different user than the web server one. This may be the case if apps have been installed manually. Check the permissions of the following app directories:" : "Niektóre katalogi aplikacji są własnością innego użytkownika tego serwera WWW. Może to wystąpić, gdy aplikacje zostały zainstalowane ręcznie. Sprawdź uprawnienia poniższych katalogów:",
"MySQL is used as database but does not support 4-byte characters. To be able to handle 4-byte characters (like emojis) without issues in filenames or comments for example it is recommended to enable the 4-byte support in MySQL. For further details read {linkstart}the documentation page about this ↗{linkend}." : "MySQL jest używany jako baza danych, ale nie obsługuje znaków 4-bajtowych. Aby korzystać ze znaków 4-bajtowych w nazwach plików lub komentarzach (np. Emoji), zaleca się włączenie tej obsługi w MySQL. Więcej informacji na ten temat przeczytasz na {linkstart}stronie dokumentacji ↗{linkend}.",
diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js
index 825e11d27cb..294dcd6967a 100644
--- a/core/l10n/pt_BR.js
+++ b/core/l10n/pt_BR.js
@@ -86,6 +86,7 @@ OC.L10N.register(
"The reverse proxy header configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If not, this is a security issue and can allow an attacker to spoof their IP address as visible to the Nextcloud. Further information can be found in the {linkstart}documentation ↗{linkend}." : "A configuração do cabeçalho do proxy reverso está incorreta ou você está acessando o Nextcloud de um proxy confiável. Caso contrário, este é um problema de segurança e pode permitir que um invasor falsifique seu endereço IP como visível para o Nextcloud. Mais informações podem ser encontradas na {linkstart}documentação ↗{linkend}. ",
"Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the {linkstart}memcached wiki about both modules ↗{linkend}." : "Memcached está configurado como cache distribuído, mas a extensão PHP incorreta \"memcache\" está instalada. \\OC\\Memcache\\Memcached suporta apenas \"memcached\" e não \"memcache\". Veja o {linkstart}memcached wiki sobre ambas as extensões ↗{linkend}.",
"Some files have not passed the integrity check. Further information on how to resolve this issue can be found in the {linkstart1}documentation ↗{linkend}. ({linkstart2}List of invalid files…{linkend} / {linkstart3}Rescan…{linkend})" : "Alguns arquivos não passaram na verificação de integridade. Mais informações sobre como resolver esse problema podem ser encontradas na {linkstart1}documentação ↗{linkend}. ({linkstart2}Lista de arquivos inválidos…{linkend} / {linkstart3}Verificar novamente…{linkend})",
+ "The PHP OPcache module is not properly configured. See the {linkstart}documentation ↗{linkend} for more information." : "O módulo PHP OPcache não está configurado corretamente. Veja a{linkstart}documentação ↗{linkend} para mais informações.",
"The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. Enabling this function is strongly recommended." : "A função PHP \"set_time_limit\" não está disponível. Isso pode resultar em travamento de scripts, quebrando sua instalação. A ativação desta função é altamente recomendada.",
"Your PHP does not have FreeType support, resulting in breakage of profile pictures and the settings interface." : "Seu PHP não possui suporte à FreeType, resultando em problemas nas fotos de perfil e interface de configurações.",
"Missing index \"{indexName}\" in table \"{tableName}\"." : "Falta o índice \"{indexName}\" na tabela \"{tableName}\".",
@@ -95,6 +96,8 @@ OC.L10N.register(
"Missing optional column \"{columnName}\" in table \"{tableName}\"." : "Falta a coluna opcional \"{columnName}\" na tabela \"{tableName}\".",
"The database is missing some optional columns. Due to the fact that adding columns on big tables could take some time they were not added automatically when they can be optional. By running \"occ db:add-missing-columns\" those missing columns could be added manually while the instance keeps running. Once the columns are added some features might improve responsiveness or usability." : "Estão faltando algumas colunas opcionais no banco de dados. Devido ao fato de que adicionar colunas em grandes tabelas pode levar algum tempo, elas não foram adicionadas automaticamente por serem opcionais. Ao executar \"occ db: add-missing-columns\", elas podem ser adicionadas manualmente enquanto a instância continua em execução. Depois que as colunas são adicionadas, alguns recursos podem melhorar a capacidade de resposta ou a usabilidade.",
"This instance is missing some recommended PHP modules. For improved performance and better compatibility it is highly recommended to install them." : "Nesta instalação estão faltando alguns módulos PHP recomendados. Para melhor desempenho e compatibilidade, é altamente recomendável instalá-los.",
+ "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." : "O módulo PHP \"imagick\" não está habilitado, embora o aplicativo de temas esteja. Para que a geração de favicon funcione corretamente, você precisa instalar e habilitar este módulo.",
+ "The PHP modules \"gmp\" and/or \"bcmath\" are not enabled. If you use WebAuthn passwordless authentication, these modules are required." : "Os módulos PHP \"gmp\" e/ou \"bcmath\" não estão habilitados. Se você usar a autenticação sem senha do WebAuthn, esses módulos serão necessários.",
"Module php-imagick in this instance has no SVG support. For better compatibility it is recommended to install it." : "A extensão php-imagick nesta instância não tem suporte para SVG. Para melhor compatibilidade é recomendado instalá-la.",
"SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "Atualmente, o SQLite está sendo usado como plataforma de banco de dados. Para instalações maiores, recomendamos que migre para outra.",
"This is particularly recommended when using the desktop client for file synchronisation." : "Isso é recomendado ao usar o cliente da área de trabalho para sincronização de arquivos.",
diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json
index e35c18b01a8..94b03d87929 100644
--- a/core/l10n/pt_BR.json
+++ b/core/l10n/pt_BR.json
@@ -84,6 +84,7 @@
"The reverse proxy header configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If not, this is a security issue and can allow an attacker to spoof their IP address as visible to the Nextcloud. Further information can be found in the {linkstart}documentation ↗{linkend}." : "A configuração do cabeçalho do proxy reverso está incorreta ou você está acessando o Nextcloud de um proxy confiável. Caso contrário, este é um problema de segurança e pode permitir que um invasor falsifique seu endereço IP como visível para o Nextcloud. Mais informações podem ser encontradas na {linkstart}documentação ↗{linkend}. ",
"Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the {linkstart}memcached wiki about both modules ↗{linkend}." : "Memcached está configurado como cache distribuído, mas a extensão PHP incorreta \"memcache\" está instalada. \\OC\\Memcache\\Memcached suporta apenas \"memcached\" e não \"memcache\". Veja o {linkstart}memcached wiki sobre ambas as extensões ↗{linkend}.",
"Some files have not passed the integrity check. Further information on how to resolve this issue can be found in the {linkstart1}documentation ↗{linkend}. ({linkstart2}List of invalid files…{linkend} / {linkstart3}Rescan…{linkend})" : "Alguns arquivos não passaram na verificação de integridade. Mais informações sobre como resolver esse problema podem ser encontradas na {linkstart1}documentação ↗{linkend}. ({linkstart2}Lista de arquivos inválidos…{linkend} / {linkstart3}Verificar novamente…{linkend})",
+ "The PHP OPcache module is not properly configured. See the {linkstart}documentation ↗{linkend} for more information." : "O módulo PHP OPcache não está configurado corretamente. Veja a{linkstart}documentação ↗{linkend} para mais informações.",
"The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. Enabling this function is strongly recommended." : "A função PHP \"set_time_limit\" não está disponível. Isso pode resultar em travamento de scripts, quebrando sua instalação. A ativação desta função é altamente recomendada.",
"Your PHP does not have FreeType support, resulting in breakage of profile pictures and the settings interface." : "Seu PHP não possui suporte à FreeType, resultando em problemas nas fotos de perfil e interface de configurações.",
"Missing index \"{indexName}\" in table \"{tableName}\"." : "Falta o índice \"{indexName}\" na tabela \"{tableName}\".",
@@ -93,6 +94,8 @@
"Missing optional column \"{columnName}\" in table \"{tableName}\"." : "Falta a coluna opcional \"{columnName}\" na tabela \"{tableName}\".",
"The database is missing some optional columns. Due to the fact that adding columns on big tables could take some time they were not added automatically when they can be optional. By running \"occ db:add-missing-columns\" those missing columns could be added manually while the instance keeps running. Once the columns are added some features might improve responsiveness or usability." : "Estão faltando algumas colunas opcionais no banco de dados. Devido ao fato de que adicionar colunas em grandes tabelas pode levar algum tempo, elas não foram adicionadas automaticamente por serem opcionais. Ao executar \"occ db: add-missing-columns\", elas podem ser adicionadas manualmente enquanto a instância continua em execução. Depois que as colunas são adicionadas, alguns recursos podem melhorar a capacidade de resposta ou a usabilidade.",
"This instance is missing some recommended PHP modules. For improved performance and better compatibility it is highly recommended to install them." : "Nesta instalação estão faltando alguns módulos PHP recomendados. Para melhor desempenho e compatibilidade, é altamente recomendável instalá-los.",
+ "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." : "O módulo PHP \"imagick\" não está habilitado, embora o aplicativo de temas esteja. Para que a geração de favicon funcione corretamente, você precisa instalar e habilitar este módulo.",
+ "The PHP modules \"gmp\" and/or \"bcmath\" are not enabled. If you use WebAuthn passwordless authentication, these modules are required." : "Os módulos PHP \"gmp\" e/ou \"bcmath\" não estão habilitados. Se você usar a autenticação sem senha do WebAuthn, esses módulos serão necessários.",
"Module php-imagick in this instance has no SVG support. For better compatibility it is recommended to install it." : "A extensão php-imagick nesta instância não tem suporte para SVG. Para melhor compatibilidade é recomendado instalá-la.",
"SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "Atualmente, o SQLite está sendo usado como plataforma de banco de dados. Para instalações maiores, recomendamos que migre para outra.",
"This is particularly recommended when using the desktop client for file synchronisation." : "Isso é recomendado ao usar o cliente da área de trabalho para sincronização de arquivos.",
diff --git a/core/src/OC/eventsource.js b/core/src/OC/eventsource.js
index 0a0a150cd78..537d68cb434 100644
--- a/core/src/OC/eventsource.js
+++ b/core/src/OC/eventsource.js
@@ -65,7 +65,7 @@ const OCEventSource = function(src, data) {
} else {
var iframeId = 'oc_eventsource_iframe_' + OCEventSource.iframeCount
OCEventSource.fallBackSources[OCEventSource.iframeCount] = this
- this.iframe = $('<iframe/>')
+ this.iframe = $('<iframe></iframe>')
this.iframe.attr('id', iframeId)
this.iframe.hide()
diff --git a/core/src/components/MainMenu.js b/core/src/components/MainMenu.js
index 23b75c1610e..436fd835cc3 100644
--- a/core/src/components/MainMenu.js
+++ b/core/src/components/MainMenu.js
@@ -77,7 +77,7 @@ export const setUp = () => {
$app.find('div').remove() // prevent odd double-clicks
// no need for theming, loader is already inverted on dark mode
// but we need it over the primary colour
- $app.prepend($('<div/>').addClass('icon-loading-small'))
+ $app.prepend($('<div></div>').addClass('icon-loading-small'))
} else {
// Close navigation when opening app in
// a new tab
@@ -103,7 +103,7 @@ export const setUp = () => {
if (event.which === 1 && !event.ctrlKey && !event.metaKey && $app.parent('#more-apps').length === 0 && $app.attr('target') !== '_blank') {
$app.find('svg').remove()
$app.find('div').remove() // prevent odd double-clicks
- $app.prepend($('<div/>').addClass(
+ $app.prepend($('<div></div>').addClass(
OCA.Theming && OCA.Theming.inverted
? 'icon-loading-small'
: 'icon-loading-small-dark'
diff --git a/core/src/components/UserMenu.js b/core/src/components/UserMenu.js
index ef80eb1e338..f82a303d1fd 100644
--- a/core/src/components/UserMenu.js
+++ b/core/src/components/UserMenu.js
@@ -41,7 +41,7 @@ export const setUp = () => {
if (!$excludedPageClasses.includes($page.attr('class'))) {
$page.find('img').remove()
$page.find('div').remove() // prevent odd double-clicks
- $page.prepend($('<div/>').addClass('icon-loading-small'))
+ $page.prepend($('<div></div>').addClass('icon-loading-small'))
}
} else {
// Close navigation when opening menu entry in
diff --git a/core/src/jquery/ocdialog.js b/core/src/jquery/ocdialog.js
index 4148c16e92b..51a1c479e99 100644
--- a/core/src/jquery/ocdialog.js
+++ b/core/src/jquery/ocdialog.js
@@ -46,7 +46,7 @@ $.widget('oc.ocdialog', {
this.originalTitle = this.element.attr('title')
this.options.title = this.options.title || this.originalTitle
- this.$dialog = $('<div class="oc-dialog" />')
+ this.$dialog = $('<div class="oc-dialog"></div>')
.attr({
// Setting tabIndex makes the div focusable
tabIndex: -1,
@@ -133,7 +133,7 @@ $.widget('oc.ocdialog', {
if (this.$buttonrow) {
this.$buttonrow.empty()
} else {
- const $buttonrow = $('<div class="oc-dialog-buttonrow" />')
+ const $buttonrow = $('<div class="oc-dialog-buttonrow"></div>')
this.$buttonrow = $buttonrow.appendTo(this.$dialog)
}
if (value.length === 1) {
diff --git a/dist/core-login.js b/dist/core-login.js
index 4ad770102af..00e3b4219e0 100644
--- a/dist/core-login.js
+++ b/dist/core-login.js
@@ -1,3 +1,3 @@
/*! For license information please see core-login.js.LICENSE.txt */
-!function(){var e,o={10473:function(e,o,r){"use strict";var i=r(20144),a=r(74854),s=r(19755),l=r.n(s),c=r(79753),u={},d=[],p=r(64492),f=r(26932),h={updatableNotification:null,getDefaultNotificationFunction:null,setDefault:function(t){this.getDefaultNotificationFunction=t},hide:function(t,e){p.default.isFunction(t)&&(e=t,t=void 0),t?(t.each((function(){l()(this)[0].toastify?l()(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:f.Rl;var n=(0,f.PV)(t,e);return n.toastElement.toastify=n,l()(n.toastElement)},show:function(t,e){(e=e||{}).timeout=e.timeout?e.timeout:f.Rl;var n=(0,f.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,l()(n.toastElement)},showUpdate:function(t){return this.updatableNotification&&this.updatableNotification.hideToast(),this.updatableNotification=(0,f.PV)(t,{timeout:f.Rl}),this.updatableNotification.toastElement.toastify=this.updatableNotification,l()(this.updatableNotification.toastElement)},showTemporary:function(t,e){(e=e||{}).timeout=e.timeout||f.TN;var n=(0,f.PV)(t,e);return n.toastElement.toastify=n,l()(n.toastElement)},isHidden:function(){return!l()("#content").find(".toastify").length}},m=p.default.throttle((function(){h.showTemporary(t("core","Connection to server lost"))}),7e3,{trailing:!1}),g={enableDynamicSlideToggle:function(){},showAppSidebar:function(t){(t||l()("#app-sidebar")).removeClass("disappear").show(),l()("#app-content").trigger(new(l().Event)("appresized"))},hideAppSidebar:function(t){(t||l()("#app-sidebar")).hide().addClass("disappear"),l()("#app-content").trigger(new(l().Event)("appresized"))}};function v(t,e,n){"post"!==t&&"delete"!==t||!Ut.PasswordConfirmation.requiresPasswordConfirmation()?(n=n||{},l().ajax({type:t.toUpperCase(),url:(0,c.generateOcsUrl)("apps/provisioning_api/api/v1/config/apps")+e,data:n.data||{},success:n.success,error:n.error})):Ut.PasswordConfirmation.requirePasswordConfirmation(_.bind(v,this,t,e,n))}var w=window.oc_appconfig||{},y={getValue:function(t,e,n,o){!function(t,e,n,o){(o=o||{}).data={defaultValue:n},v("get","/"+t+"/"+e,o)}(t,e,n,{success:o})},setValue:function(t,e,n){!function(t,e,n,o){(o=o||{}).data={value:n},v("post","/"+t+"/"+e,o)}(t,e,n)},getApps:function(t){!function(t){v("get","",t)}({success:t})},getKeys:function(t,e){!function(t,e){v("get","/"+t,e)}(t,{success:e})},deleteKey:function(t,e){!function(t,e,n){v("delete","/"+t+"/"+e,void 0)}(t,e)}},b=void 0!==window._oc_appswebroots&&window._oc_appswebroots,P=r(72316),C=r.n(P),k=r(87240),x={create:"POST",update:"PROPPATCH",patch:"PROPPATCH",delete:"DELETE",read:"PROPFIND"};function T(t,e){if(p.default.isArray(t))return p.default.map(t,(function(t){return T(t,e)}));var n={href:t.href};return p.default.each(t.propStat,(function(t){if("HTTP/1.1 200 OK"===t.status)for(var o in t.properties){var r=o;o in e&&(r=e[o]),n[r]=t.properties[o]}})),n.id||(n.id=O(n.href)),n}function O(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 A(t){return t>=200&&t<=299}function S(t,e,n,o){return t.propPatch(e.url,function(t,e){var n,o={};for(n in t){var r=e[n],i=t[n];r||(console.warn('No matching DAV property for property "'+n),r=n),(p.default.isBoolean(i)||p.default.isNumber(i))&&(i=""+i),o[r]=i}return o}(n.changed,e.davProperties),o).then((function(t){A(t.status)?p.default.isFunction(e.success)&&e.success(n.toJSON()):p.default.isFunction(e.error)&&e.error(t)}))}var E=C().noConflict();Object.assign(E,{davCall:function(t,e){var n=new k.dav.Client({baseUrl:t.url,xmlNamespaces:p.default.extend({"DAV:":"d","http://owncloud.org/ns":"oc"},t.xmlNamespaces||{})});n.resolveUrl=function(){return t.url};var o=p.default.extend({"X-Requested-With":"XMLHttpRequest",requesttoken:OC.requestToken},t.headers);return"PROPFIND"===t.type?function(t,e,n,o){return t.propFind(e.url,p.default.values(e.davProperties)||[],e.depth,o).then((function(t){if(A(t.status)){if(p.default.isFunction(e.success)){var n=p.default.invert(e.davProperties),o=T(t.body,n);e.depth>0&&o.shift(),e.success(o)}}else p.default.isFunction(e.error)&&e.error(t)}))}(n,t,0,o):"PROPPATCH"===t.type?S(n,t,e,o):"MKCOL"===t.type?function(t,e,n,o){return t.request(e.type,e.url,o,null).then((function(r){A(r.status)?S(t,e,n,o):p.default.isFunction(e.error)&&e.error(r)}))}(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(A(t.status)){if(p.default.isFunction(e.success)){if("PUT"===e.type||"POST"===e.type||"MKCOL"===e.type){var o=t.body||n.toJSON(),r=t.xhr.getResponseHeader("Content-Location");return"POST"===e.type&&r&&(o.id=O(r)),void e.success(o)}if(207===t.status){var i=p.default.invert(e.davProperties);e.success(T(t.body,i))}else e.success(t.body)}}else p.default.isFunction(e.error)&&e.error(t)}))}(n,t,e,o)},davSync:function(t){return function(e,n,o){var r={type:x[e]||e},i=n instanceof t.Collection;if("update"===e&&(n.hasInnerCollection?r.type="MKCOL":(n.usePUT||n.collection&&n.collection.usePUT)&&(r.type="PUT")),o.url||(r.url=p.default.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||(r.data=JSON.stringify(o.attrs||n.toJSON(o))),"PROPFIND"!==r.type&&(r.processData=!1),"PROPFIND"===r.type||"PROPPATCH"===r.type){var a=n.davProperties;!a&&n.model&&(a=n.model.prototype.davProperties),a&&(p.default.isFunction(a)?r.davProperties=a.call(n):r.davProperties=a),r.davProperties=p.default.extend(r.davProperties||{},o.davProperties),p.default.isUndefined(o.depth)&&(o.depth=i?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(p.default.extend(r,o),n);return n.trigger("request",n,l,o),l}}(E)});var j=E,L=r(76632),U=window._oc_config||{},I=P.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)}}),R=P.Collection.extend({model:I}),F=P.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 $({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)}))}}),$=P.View.extend({className:"contact",_template:void 0,_model:void 0,_actionMenuShown:!1,events:{"click .icon-more":"_onToggleActionsMenu"},contactTemplate:r(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())}}),N=P.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:r(95386),error:r(20421),menu:r(66115),list:r(34083)},_onSearch:p.default.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(p.default.extend({couldNotLoadText:t("core","Could not load your contacts")},e))},contentTemplate:function(e){return this.templates.menu(p.default.extend({searchContactsText:t("core","Search contacts …")},e))},contactsTemplate:function(e){return this.templates.list(p.default.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 F({collection:t.contacts});n.render(),this.$(".content").html(this.contactsTemplate({contacts:t.contacts,searchTerm:e,contactsAppEnabled:t.contactsAppEnabled,contactsAppURL:Ut.generateUrl("/apps/contacts"),canInstallApp:Ut.isUserAdmin(),contactsAppMgmtURL:Ut.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}}),M=function(t){this.initialize(t)};M.prototype={$el:void 0,_$trigger:void 0,_view:void 0,_contactsPromise:void 0,initialize:function(t){this.$el=t.el,this._$trigger=t.trigger,this._view=new N({el:this.$el}),this._view.on("search",(function(t){this._loadContacts(t)}),this),Ut.registerMenu(this._$trigger,this.$el,function(){this._toggleVisibility(!0)}.bind(this),!0),this.$el.on("beforeHide",function(){this._toggleVisibility(!1)}.bind(this))},_toggleVisibility:function(t){return t?this._loadContacts():(this.$el.html(""),Promise.resolve())},_getContacts:function(t){var e=Ut.generateUrl("/contactsmenu/contacts");return Promise.resolve(l().ajax(e,{method:"POST",data:{filter:t}}))},_loadContacts:function(e){var n=this;return n._contactsPromise||(n._contactsPromise=n._getContacts(e)),p.default.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 R(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 z=M,D=document.getElementsByTagName("head")[0].getAttribute("data-user"),B=document.getElementsByTagName("head")[0].getAttribute("data-user-displayname"),q=void 0!==D&&D;function H(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,o.key,o)}}function Y(t,e,n){return e&&H(t.prototype,e),n&&H(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}var K={Search:Y((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")}))};function G(t){return G="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},G(t)}var V,Z,W,J={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",J.OK_BUTTON,n,o)},info:function(t,e,n,o){this.message(t,e,"info",J.OK_BUTTON,n,o)},confirm:function(t,e,n,o){return this.message(t,e,"notice",J.YES_NO_BUTTONS,n,o)},confirmDestructive:function(t,e,n,o,r){return this.message(t,e,"none",n,o,void 0===r||r)},confirmHtml:function(t,e,n,o){return this.message(t,e,"notice",J.YES_NO_BUTTONS,n,o,!0)},prompt:function(e,n,o,r,i,a){return l().when(this._getMessageTemplate()).then((function(s){var c="oc-dialog-"+J.dialogsCounter+"-content",u="#"+c,d=s.octemplate({dialog_name:c,title:n,message:e,type:"notice"}),f=l()("<input/>");f.attr("type",a?"password":"text").attr("id",c+"-input").attr("placeholder",i);var h=l()("<label/>").attr("for",c+"-input").text(i+": ");d.append(h),d.append(f),void 0===r&&(r=!1),l()("body").append(d),void 0!==o&&(o=p.default.once(o));var m=[{text:t("core","No"),click:function(){void 0!==o&&o(!1,f.val()),l()(u).ocdialog("close")}},{text:t("core","Yes"),click:function(){void 0!==o&&o(!0,f.val()),l()(u).ocdialog("close")},defaultButton:!0}];l()(u).ocdialog({closeOnEscape:!0,modal:r,buttons:m,close:function(){void 0!==o&&o(!1,f.val())}}),f.focus(),J.dialogsCounter++}))},filepicker:function(e,n,o,r,i,a,s,c){var u=this;if(this.filepicker.sortField="name",this.filepicker.sortOrder="asc",!this.filepicker.loading){void 0===a&&(a=this.FILEPICKER_TYPE_CHOOSE);var d=t("core","No files in here"),f=t("files","New folder");a!==this.FILEPICKER_TYPE_COPY&&a!==this.FILEPICKER_TYPE_MOVE&&a!==this.FILEPICKER_TYPE_COPY_MOVE||(d=t("core","No more subfolders in here")),this.filepicker.loading=!0,this.filepicker.filesClient=K.Sharing&&K.Sharing.PublicApp&&K.Sharing.PublicApp.fileList?K.Sharing.PublicApp.fileList.filesClient:Ut.Files.getClient(),this.filelist=null,s=s||"",c=Object.assign({allowDirectoryChooser:!1},c),l().when(this._getFilePickerTemplate()).then((function(h){u.filepicker.loading=!1,u.$filePicker&&u.$filePicker.ocdialog("close"),null==r&&(r=[]),"string"==typeof r&&(r=[r]),u.$filePicker=h.octemplate({dialog_name:"oc-dialog-filepicker-content",title:e,emptytext:d,newtext:f,nameCol:t("core","Name"),sizeCol:t("core","Size"),modifiedCol:t("core","Modified")}).data("path",s).data("multiselect",o).data("mimetype",r).data("allowDirectoryChooser",c.allowDirectoryChooser),void 0===i&&(i=!1),void 0===o&&(o=!1),u.$filePicker.find("#picker-view-toggle").remove(),u.$filePicker.find("#picker-filestable").removeClass("view-grid"),l()("body").append(u.$filePicker),u.$showGridView=l()("input#picker-showgridview"),u.$showGridView.on("change",p.default.bind(u._onGridviewChange,u)),u._getGridSettings();var m=u.$filePicker.find(".actions.creatable .button-add");a!==u.FILEPICKER_TYPE_CHOOSE||c.allowDirectoryChooser||m.hide(),m.on("focus",(function(){u.$filePicker.ocdialog("setEnterCallback",(function(){event.stopImmediatePropagation(),event.preventDefault(),m.click()}))})),m.on("blur",(function(){u.$filePicker.ocdialog("unsetEnterCallback")})),Ut.registerMenu(m,u.$filePicker.find(".menu"),(function(){v.tooltip("hide"),v.focus(),u.$filePicker.ocdialog("setEnterCallback",(function(){event.stopImmediatePropagation(),event.preventDefault(),u.$filePicker.submit()}));var t=v.val(),e=t.lastIndexOf(".");-1===e&&(e=t.length),v.selectRange(0,e)}));var g=u.$filePicker.find(".filenameform"),v=g.find("input[type='text']");g.find("input[type='submit']").on("click",(function(t){t.stopImmediatePropagation(),t.preventDefault(),g.submit()}));g.on("submit",(function(e){if(e.stopPropagation(),e.preventDefault(),function(){var e=v.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(Ut.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){v.attr("title",t),v.tooltip({placement:"right",trigger:"manual",container:".newFolderMenu"}),v.tooltip("_fixTitle"),v.tooltip("show"),v.addClass("error")}return!1}()){var n=v.val();u.filepicker.filesClient.createDirectory(u.$filePicker.data("path")+"/"+n).always((function(t){u._fillFilePicker(u.$filePicker.data("path")+"/"+n)})),Ut.hideMenus(),u.$filePicker.ocdialog("unsetEnterCallback"),u.$filePicker.click(),v.val(f)}})),v.keypress((function(t){13!==t.keyCode&&13!==t.which||(t.stopImmediatePropagation(),t.preventDefault(),g.submit())})),v.on("input",(function(t){v.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","div:not(:last-child)",u,(function(t){u._handleTreeListSelect(t,a)})),u.$filelist.on("click","tr",(function(t){u._handlePickerClick(t,l()(this),a)})),u.$fileListHeader.on("click","a",(function(t){var e=u.$filePicker.data("path");u.filepicker.sortField=l()(t.currentTarget).data("sort"),u.filepicker.sortOrder="asc"===u.filepicker.sortOrder?"desc":"asc",u._fillFilePicker(e)})),u._fillFilePicker(s)}));var w=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")+"/"+l()(n).data("entryname"))}));else{e=u.$filePicker.data("path");var r=u.$filelist.find("tr.filepicker_element_selected").data("entryname");r&&(e+="/"+r)}n(e,t),u.$filePicker.ocdialog("close")}},y=[];a===J.FILEPICKER_TYPE_CHOOSE?y.push({text:t("core","Choose"),click:function(){w(J.FILEPICKER_TYPE_CHOOSE)},defaultButton:!0}):a===J.FILEPICKER_TYPE_CUSTOM?c.buttons.forEach((function(t){y.push({text:t.text,click:function(){w(t.type)},defaultButton:t.defaultButton})})):(a!==J.FILEPICKER_TYPE_COPY&&a!==J.FILEPICKER_TYPE_COPY_MOVE||y.push({text:t("core","Copy"),click:function(){w(J.FILEPICKER_TYPE_COPY)},defaultButton:!1}),a!==J.FILEPICKER_TYPE_MOVE&&a!==J.FILEPICKER_TYPE_COPY_MOVE||y.push({text:t("core","Move"),click:function(){w(J.FILEPICKER_TYPE_MOVE)},defaultButton:!0})),u.$filePicker.ocdialog({closeOnEscape:!0,width:600,height:500,modal:i,buttons:y,style:{buttons:"aside"},close:function(){try{l()(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,r,i,a,s){return l().when(this._getMessageTemplate()).then((function(c){var u="oc-dialog-"+J.dialogsCounter+"-content",d="#"+u,p=c.octemplate({dialog_name:u,title:n,message:e,type:o},s?{escapeFunction:""}:{});void 0===a&&(a=!1),l()("body").append(p);var f=[];switch(r){case J.YES_NO_BUTTONS:f=[{text:t("core","No"),click:function(){void 0!==i&&i(!1),l()(d).ocdialog("close")}},{text:t("core","Yes"),click:function(){void 0!==i&&i(!0),l()(d).ocdialog("close")},defaultButton:!0}];break;case J.OK_BUTTON:f[0]={text:t("core","OK"),click:function(){l()(d).ocdialog("close"),void 0!==i&&i()},defaultButton:!0};break;default:"object"===G(r)&&r.type===J.YES_NO_BUTTONS&&(f=[{text:r.cancel||t("core","No"),click:function(){void 0!==i&&i(!1),l()(d).ocdialog("close")}},{text:r.confirm||t("core","Yes"),click:function(){void 0!==i&&i(!0),l()(d).ocdialog("close")},defaultButton:!0,classes:r.confirmClasses}])}l()(d).ocdialog({closeOnEscape:!0,closeCallback:function(){i&&i(!1)},modal:a,buttons:f}),J.dialogsCounter++})).fail((function(o,r){0===o?alert(n+": "+e):alert(t("core","Error loading message template: {error}",{error:r}))}))},_fileexistsshown:!1,fileexists:function(e,o,r,i){var a=this,s=new(l().Deferred),c=function(t,e,n,o,r){o=Math.round(o),r=Math.round(r);for(var i=t.getContext("2d").getImageData(0,0,e,n),a=t.getContext("2d").getImageData(0,0,o,r),s=i.data,l=a.data,c=e/o,u=n/r,d=Math.ceil(c/2),p=Math.ceil(u/2),f=0;f<r;f++)for(var h=0;h<o;h++){for(var m=4*(h+f*o),g=0,v=0,w=0,y=0,b=0,_=0,P=0,C=(f+.5)*u,k=Math.floor(f*u);k<(f+1)*u;k++)for(var x=Math.abs(C-(k+.5))/p,T=(h+.5)*c,O=x*x,A=Math.floor(h*c);A<(h+1)*c;A++){var S=Math.abs(T-(A+.5))/d,E=Math.sqrt(O+S*S);E>=-1&&E<=1&&(g=2*E*E*E-3*E*E+1)>0&&(P+=g*s[3+(S=4*(A+k*e))],w+=g,s[S+3]<255&&(g=g*s[S+3]/250),y+=g*s[S],b+=g*s[S+1],_+=g*s[S+2],v+=g)}l[m]=y/v,l[m+1]=b/v,l[m+2]=_/v,l[m+3]=P/w}t.getContext("2d").clearRect(0,0,Math.max(e,o),Math.max(n,r)),t.width=o,t.height=r,t.getContext("2d").putImageData(a,0,0)},u=function(n,o,r){var i=n.find(".template").clone().removeClass("template").addClass("conflict"),a=i.find(".original"),s=i.find(".replacement");i.data("data",e),i.find(".filename").text(o.name),a.find(".size").text(Ut.Util.humanFileSize(o.size)),a.find(".mtime").text(Ut.Util.formatDate(o.mtime)),r.size&&r.lastModified&&(s.find(".size").text(Ut.Util.humanFileSize(r.size)),s.find(".mtime").text(Ut.Util.formatDate(r.lastModified)));var u=o.directory+"/"+o.name,d={file:u,x:96,y:96,c:o.etag,forceIcon:0},p=Files.generatePreviewUrl(d);p=p.replace(/'/g,"%27"),a.find(".icon").css({"background-image":"url('"+p+"')"}),function(t){var e=new(l().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),r=new Image;r.src=o,r.onload=function(){var t,n,o,i,a,s,l,u=(t=r,a=document.createElement("canvas"),s=t.width,l=t.height,s>l?(o=0,n=(s-l)/2):(o=(l-s)/2,n=0),i=Math.min(s,l),a.width=i,a.height=i,a.getContext("2d").drawImage(t,n,o,i,i,0,0,i,i),c(a,i,i,96,96),a.toDataURL("image/png",.7));e.resolve(u)}},o.readAsArrayBuffer(t)}else e.reject();return e}(r).then((function(t){s.find(".icon").css("background-image","url("+t+")")}),(function(){u=Ut.MimeType.getIconUrl(r.type),s.find(".icon").css("background-image","url("+u+")")}));var f=n.find(".conflict").length;a.find("input:checkbox").attr("id","checkbox_original_"+f),s.find("input:checkbox").attr("id","checkbox_replacement_"+f),n.append(i),r.lastModified>o.mtime?s.find(".mtime").css("font-weight","bold"):r.lastModified<o.mtime&&a.find(".mtime").css("font-weight","bold"),r.size&&r.size>o.size?s.find(".size").css("font-weight","bold"):r.size&&r.size<o.size&&a.find(".size").css("font-weight","bold"),"readonly"===o.status&&(a.addClass("readonly").find('input[type="checkbox"]').prop("checked",!0).prop("disabled",!0),a.find(".message").text(t("core","read-only")))},d="oc-dialog-fileexists-content",p="#"+d;if(this._fileexistsshown){var f=l()(p+" .conflicts");u(f,o,r);var h=l()(p+" .conflict").length,m=n("core","{count} file conflict","{count} file conflicts",h,{count:h});l()(p).parent().children(".oc-dialog-title").text(m),l()(window).trigger("resize"),s.resolve()}else this._fileexistsshown=!0,l().when(this._getFileExistsTemplate()).then((function(n){var c=t("core","One file conflict"),f=n.octemplate({dialog_name:d,title:c,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(l()("body").append(f),o&&r){var h=f.find(".conflicts");u(h,o,r)}var m=[{text:t("core","Cancel"),classes:"cancel",click:function(){void 0!==i.onCancel&&i.onCancel(e),l()(p).ocdialog("close")}},{text:t("core","Continue"),classes:"continue",click:function(){void 0!==i.onContinue&&i.onContinue(l()(p+" .conflict")),l()(p).ocdialog("close")}}];l()(p).ocdialog({width:500,closeOnEscape:!0,modal:!0,buttons:m,closeButton:null,close:function(){a._fileexistsshown=!1;try{l()(this).ocdialog("destroy").remove()}catch(t){}}}),l()(p).css("height","auto");var g=f.closest(".oc-dialog").find("button.continue");function v(){var t=f.find(".conflicts .checkbox:checked").length;g.prop("disabled",0===t)}g.prop("disabled",!0),l()(p).find(".allnewfiles").on("click",(function(){l()(p).find('.conflict .replacement input[type="checkbox"]').prop("checked",l()(this).prop("checked"))})),l()(p).find(".allexistingfiles").on("click",(function(){l()(p).find('.conflict .original:not(.readonly) input[type="checkbox"]').prop("checked",l()(this).prop("checked"))})),l()(p).find(".conflicts").on("click",".replacement,.original:not(.readonly)",(function(){var t=l()(this).find('input[type="checkbox"]');t.prop("checked",!t.prop("checked"))})),l()(p).find(".conflicts").on("click",'.replacement input[type="checkbox"],.original:not(.readonly) input[type="checkbox"]',(function(){var t=l()(this);t.prop("checked",!t.prop("checked"))})),l()(p).on("click",".replacement,.allnewfiles",(function(){var e=l()(p).find('.conflict .replacement input[type="checkbox"]:checked').length;e===l()(p+" .conflict").length?(l()(p).find(".allnewfiles").prop("checked",!0),l()(p).find(".allnewfiles + .count").text(t("core","(all selected)"))):e>0?(l()(p).find(".allnewfiles").prop("checked",!1),l()(p).find(".allnewfiles + .count").text(t("core","({count} selected)",{count:e}))):(l()(p).find(".allnewfiles").prop("checked",!1),l()(p).find(".allnewfiles + .count").text("")),v()})),l()(p).on("click",".original,.allexistingfiles",(function(){var e=l()(p).find('.conflict .original input[type="checkbox"]:checked').length;e===l()(p+" .conflict").length?(l()(p).find(".allexistingfiles").prop("checked",!0),l()(p).find(".allexistingfiles + .count").text(t("core","(all selected)"))):e>0?(l()(p).find(".allexistingfiles").prop("checked",!1),l()(p).find(".allexistingfiles + .count").text(t("core","({count} selected)",{count:e}))):(l()(p).find(".allexistingfiles").prop("checked",!1),l()(p).find(".allexistingfiles + .count").text("")),v()})),s.resolve()})).fail((function(){s.reject(),alert(t("core","Error loading file exists template"))}));return s.promise()},_getGridSettings:function(){var t=this;l().get(Ut.generateUrl("/apps/files/api/v1/showgridview"),(function(e){t.$showGridView.get(0).checked=e.gridview,t.$showGridView.next("#picker-view-toggle").removeClass("icon-toggle-filelist icon-toggle-pictures").addClass(e.gridview?"icon-toggle-filelist":"icon-toggle-pictures"),l()(".list-container").toggleClass("view-grid",e.gridview)}))},_onGridviewChange:function(){var t=this.$showGridView.is(":checked");Ut.currentUser&&l().post(Ut.generateUrl("/apps/files/api/v1/showgridview"),{show:t}),this.$showGridView.next("#picker-view-toggle").removeClass("icon-toggle-filelist icon-toggle-pictures").addClass(t?"icon-toggle-filelist":"icon-toggle-pictures"),l()(".list-container").toggleClass("view-grid",t)},_getFilePickerTemplate:function(){var t=l().Deferred();if(this.$filePickerTemplate)t.resolve(this.$filePickerTemplate);else{var e=this;l().get(Ut.filePath("core","templates","filepicker.html"),(function(n){e.$filePickerTemplate=l()(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=l().Deferred();if(this.$messageTemplate)t.resolve(this.$messageTemplate);else{var e=this;l().get(Ut.filePath("core","templates","message.html"),(function(n){e.$messageTemplate=l()(n),t.resolve(e.$messageTemplate)})).fail((function(e,n,o){t.reject(e.status,o)}))}return t.promise()},_getFileExistsTemplate:function(){var t=l().Deferred();if(this.$fileexistsTemplate)t.resolve(this.$fileexistsTemplate);else{var e=this;l().get(Ut.filePath("files","templates","fileexists.html"),(function(n){e.$fileexistsTemplate=l()(n),t.resolve(e.$fileexistsTemplate)})).fail((function(){t.reject()}))}return t.promise()},_getFileList:function(t,e){return"string"==typeof e&&(e=[e]),l().getJSON(Ut.filePath("files","ajax","list.php"),{dir:t,mimetypes:JSON.stringify(e)})},_fillFilePicker:function(e){var n=this;this.$filelist.empty(),this.$filePicker.find(".emptycontent").hide(),this.$filelistContainer.addClass("icon-loading"),this.$filePicker.data("path",e);var o=this.$filePicker.data("mimetype");"string"==typeof o&&(o=[o]),n.$fileListHeader.find(".sort-indicator").addClass("hidden").removeClass("icon-triangle-n").removeClass("icon-triangle-s"),n.$fileListHeader.find("[data-sort="+n.filepicker.sortField+"] .sort-indicator").removeClass("hidden"),"asc"===n.filepicker.sortOrder?n.$fileListHeader.find("[data-sort="+n.filepicker.sortField+"] .sort-indicator").addClass("icon-triangle-n"):n.$fileListHeader.find("[data-sort="+n.filepicker.sortField+"] .sort-indicator").addClass("icon-triangle-s"),n.filepicker.filesClient.getFolderContents(e).then((function(r,i){n.filelist=i,o&&o.length>0&&-1===o.indexOf("*")&&(i=i.filter((function(t){return"dir"===t.type||-1!==o.indexOf(t.mimetype)})));var a=document.getElementById("showHiddenFiles");null===a||"1"===a.value||(i=i.filter((function(t){return!t.name.startsWith(".")})));var s={name:function(t,e){return"dir"===t.type&&"dir"!==e.type?-1:"dir"!==t.type&&"dir"===e.type?1:Ut.Util.naturalSortCompare(t.name,e.name)},size:function(t,e){return t.size-e.size},mtime:function(t,e){return t.mtime-e.mtime}},c=s[n.filepicker.sortField]||s.name;i=i.sort((function(t,e){var o=function(t){return t.tags&&t.tags.indexOf(Ut.TAG_FAVORITE)>=0};return o(t)&&!o(e)?-1:!o(t)&&o(e)?1:"asc"===n.filepicker.sortOrder?c(t,e):-c(t,e)})),n._fillSlug(),0===i.length?(n.$filePicker.find(".emptycontent").show(),n.$fileListHeader.hide()):(n.$filePicker.find(".emptycontent").hide(),n.$fileListHeader.show()),n.$filelist.empty(),l().each(i,(function(o,r){var i,a;if(r.icon=Ut.MimeType.getIconUrl(r.mimetype),void 0!==r.size&&r.size>=0?(i=Ut.Util.humanFileSize(parseInt(r.size,10),!0),a=Math.round(160-Math.pow(r.size/1048576,2))):(i=t("files","Pending"),a=80),r.name.length>=10)var s=Math.min(Math.floor(r.name.length/2),10),c=r.name.substr(0,r.name.length-s),u=r.name.substr(r.name.length-s);else c=r.name,u="";var d=n.$listTmpl.octemplate({type:r.type,dir:e,filename:r.name,filename1:c,filename2:u,date:Ut.Util.relativeModifiedDate(r.mtime),size:i,sizeColor:a,icon:r.icon});if("file"===r.type){var p={file:e+"/"+r.name,x:100,y:100},f=new Image,h=Ut.generateUrl("/core/preview.png?")+l().param(p);f.onload=function(){f.width>5&&d.find("td.filename").attr("style","background-image:url("+h+")")},f.src=h}n.$filelist.append(d)})),n.$filelistContainer.removeClass("icon-loading")}))},_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=l()('<div data-dir="{dir}"><a>{name}</a></div>').addClass("crumb");if(n){var r=n.split("/");l().each(r,(function(t,n){if(""===(n=r.pop()))return!1;e.$dirTree.prepend(o.octemplate({dir:r.join("/")+"/"+n,name:n}))}))}o.octemplate({dir:"",name:""},{escapeFunction:null}).prependTo(this.$dirTree)},_handleTreeListSelect:function(t,e){var n=t.data,o=l()(t.target).closest(".crumb").data("dir");n._fillFilePicker(o);var r=t.target.closest(".oc-dialog"),i=l()(".primary",r);this._changeButtonsText(e,o.split(/[/]+/).pop()),-1!==this.$filePicker.data("mimetype").indexOf("httpd/unix-directory")||this.$filePicker.data("allowDirectoryChooser")?i.prop("disabled",!1):i.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")),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}),r=""===n?t("core","Move"):t("core","Move to {folder}",{folder:n}),i=l()(".oc-dialog-buttonrow button");switch(e){case this.FILEPICKER_TYPE_CHOOSE:case this.FILEPICKER_TYPE_CUSTOM:break;case this.FILEPICKER_TYPE_COPY:i.text(o);break;case this.FILEPICKER_TYPE_MOVE:i.text(r);break;case this.FILEPICKER_TYPE_COPY_MOVE:i.eq(0).text(o),i.eq(1).text(r)}}},Q=J,X=(V=document,Z=a.emit,W=V.getElementsByTagName("head")[0].getAttribute("data-requesttoken"),{getToken:function(){return W},setToken:function(t){Z("csrf-token-update",{token:W=t})}}).getToken,tt=function t(e,n){var o,r,i="";if(this.typelessListeners=[],this.closed=!1,this.listeners={},n)for(o in n)i+=o+"="+encodeURIComponent(n[o])+"&";if(i+="requesttoken="+encodeURIComponent(X()),this.useFallBack||"undefined"==typeof EventSource){var a="oc_eventsource_iframe_"+t.iframeCount;t.fallBackSources[t.iframeCount]=this,this.iframe=l()("<iframe/>"),this.iframe.attr("id",a),this.iframe.hide(),r="&",-1===e.indexOf("?")&&(r="?"),this.iframe.attr("src",e+r+"fallback=true&fallback_id="+t.iframeCount+"&"+i),l()("body").append(this.iframe),this.useFallBack=!0,t.iframeCount++}else r="&",-1===e.indexOf("?")&&(r="?"),this.source=new EventSource(e+r+i),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))};tt.fallBackSources=[],tt.iframeCount=0,tt.fallBackCallBack=function(t,e,n){tt.fallBackSources[t].fallBackCallBack(e,n)},tt.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 et=tt,nt=r(42515),ot=null,rt=function(t){if(ot){var e=ot;ot.trigger(new(l().Event)("beforeHide")),ot.slideUp(50,(function(){e.trigger(new(l().Event)("afterHide")),t&&t.apply(this,arguments)}))}l()(".menutoggle").attr("aria-expanded",!1),l()(".openedMenu").removeClass("openedMenu"),ot=null},it=!!window._oc_isadmin,at=r(27856),st=r.n(at),lt=r(86834),ct=r.n(lt),ut=r(46488),dt=r.n(ut),pt=r(95573),ft=r.n(pt);window._oc_l10n_registry_translations=window._oc_l10n_registry_translations||{},window._oc_l10n_registry_plural_functions=window._oc_l10n_registry_plural_functions||{};var ht=function(t){return void 0!==window._oc_l10n_registry_translations[t]&&void 0!==window._oc_l10n_registry_plural_functions[t]},mt=function(t){return{translations:window._oc_l10n_registry_translations[t]||{},pluralFunction:window._oc_l10n_registry_plural_functions[t]}};function gt(t){return gt="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},gt(t)}var vt={load:function(t,e){if(ht(t)||"en"===Ut.getLocale()){var n=l().Deferred(),o=n.promise();return o.then(e),n.resolve(),o}var r=this,i=(0,c.generateFilePath)(t,"l10n",Ut.getLocale()+".json");return l().get(i).then((function(e){e.translations&&r.register(t,e.translations,e.pluralForm)})).then(e)},register:function(t,e){var n,o,r;n=t,o=e,r=this._getPlural,ht(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,r):function(t,e,n){window._oc_l10n_registry_translations[t]=e,window._oc_l10n_registry_plural_functions[t]=n}(n,o,r)},_unregister:function(t){delete window._oc_l10n_registry_translations[t],delete window._oc_l10n_registry_plural_functions[t]},translate:function(t,e,n,o,r){var i=r||{};p.default.defaults(i,{escape:!0,sanitize:!0});var a=i.sanitize?st().sanitize:dt(),s=i.escape?ft():dt(),l=e,c=mt(t).translations[e];return void 0!==c&&(l=c),"object"===gt(n)||void 0!==o?a(function(t,e,n){return t.replace(/%n/g,n).replace(/{([^{}]*)}/g,(function(t,n){var o=e[n];return a("string"==typeof o||"number"==typeof o?s(o):t)}))}(l,n,o)):a(l)},translatePlural:function(t,e,n,o,r,i){var a="_"+e+"_::_"+n+"_",s=mt(t),c=s.translations[a];if(void 0!==c){var u=c;if(l().isArray(u)){var d=s.pluralFunction(o);return this.translate(t,u[d],r,o,i)}}return 1===o?this.translate(t,e,r,o,i):this.translate(t,n,r,o,i)},_getPlural:function(t){var e=Ut.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}}},wt=vt;ct().registerHelper("t",(function(t,e){return vt.translate(t,e)}));var yt=r(9944),bt={startSaving:function(e){this.startAction(e,t("core","Saving …"))},startAction:function(t,e){l()(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){l()(t).text(e).addClass("success").removeClass("error").stop(!0,!0).delay(3e3).fadeOut(900).show()},finishedError:function(t,e){l()(t).text(e).addClass("error").removeClass("success").show()}},_t=r(30381),Pt=r.n(_t),Ct={callback:null,pageLoadTime:null,init:function(){l()(".password-confirm-required").on("click",p.default.bind(this.requirePasswordConfirmation,this)),this.pageLoadTime=Pt().now()},requiresPasswordConfirmation:function(){var t=this.pageLoadTime-1e3*window.nc_pageLoad,e=Pt().now()-(t+1e3*window.nc_lastLogin);return window.backendAllowsPasswordConfirmation&&e>18e5},requirePasswordConfirmation:function(e,n,o){n=void 0!==n?n:{};var r={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:""},i=p.default.extend(r,n),a=this;this.requiresPasswordConfirmation()&&Ut.dialogs.prompt(i.text,i.title,(function(t,e){t&&""!==e?a._confirmPassword(e,i):p.default.isFunction(o)&&o()}),!0,i.label,!0).then((function(){var t=l()(".oc-dialog:visible");if(t.find(".ui-icon").remove(),t.addClass("password-confirmation"),""!==i.error){var e=l()("<p></p>").addClass("msg warning").text(i.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(i.confirm)})),this.callback=e},_confirmPassword:function(e,n){var o=this;l().ajax({url:(0,c.generateUrl)("/login/confirm"),data:{password:e},type:"POST",success:function(t){window.nc_lastLogin=t.lastLogin,p.default.isFunction(o.callback)&&o.callback()},error:function(){n.error=t("core","Failed to authenticate, try again"),Ut.PasswordConfirmation.requirePasswordConfirmation(o.callback,n)}})}},kt=window._theme||{},xt={_handlers:[],_pushState:function(t,e,n){var o;if(o="string"==typeof t?t:Ut.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 r,i=document.querySelectorAll('[fill^="url(#"], [stroke^="url(#"], [filter^="url(#invert"]'),a=0,s=i.length;a<s;a++)(r=i[a]).style.fill=r.style.fill,r.style.stroke=r.style.stroke,r.removeAttribute("filter"),r.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=Ut.parseQueryString(this._decodeQuery(e))),(t=p.default.extend(t||{},Ut.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,p.default.isString(e)?e=Ut.parseQueryString(e):e||(e=this.parseUrlQuery()||{});for(var n=0;n<this._handlers.length;n++)this._handlers[n](e)}}};function Tt(t){for(var e,n=[],o=0,r=-1,i=0;o<t.length;){e=t.charAt(o);var a=!i&&"."===e||e>="0"&&e<="9";a!==i&&(n[++r]="",i=a),n[r]+=e,o++}return n}var Ot={History:xt,humanFileSize:r(3378).s,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",Pt()(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=Pt()().diff(Pt()(e));return n>=0&&n<45e3?t("core","seconds ago"):Pt()(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=Tt(t),r=Tt(e);for(n=0;o[n]&&r[n];n++)if(o[n]!==r[n]){var i=Number(o[n]),a=Number(r[n]);return i==o[n]&&a==r[n]?i-a:o[n].localeCompare(r[n],Ut.getLanguage())}return o.length-r.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 r=n[o].split("=");if(r[0].trim()===t&&r[1].trim()===e)return!0}return!1}},At=window._oc_debug,St=window._oc_webroot;if(void 0===St){var Et=(St=location.pathname).indexOf("/index.php/");St=-1!==Et?St.substr(0,Et):St.substr(0,St.lastIndexOf("/"))}var jt,Lt=St,Ut={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(U.blacklist_files_regex)},addScript:function(t,e,n){var o;console.warn("OC.addScript is deprecated, use OCP.Loader.loadScript instead");var r=(0,c.generateFilePath)(t,"js",e+".js");return u[r]?n&&n():(o=l().Deferred(),l().getScript(r,(function(){return o.resolve()})),u[r]=o),u[r]},addStyle:function(t,e){console.warn("OC.addStyle is deprecated, use OCP.Loader.loadStylesheet instead");var n=(0,c.generateFilePath)(t,"css",e+".css");-1===d.indexOf(n)&&(d.push(n),document.createStyleSheet?document.createStyleSheet(n):(e=l()('<link rel="stylesheet" type="text/css" href="'+n+'"/>'),l()("head").append(e)))},Apps:g,AppConfig:y,appConfig:w,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};l().extend(n,e);var o=l()("#appsettings");if(0===o.length)throw{name:"MissingDOMElement",message:'There has be be an element with id "appsettings" for the popup to show.'};var r=l()("#appsettings_popup");if(0===r.length&&(l()("body").prepend('<div class="popup hidden" id="appsettings_popup"></div>'),(r=l()("#appsettings_popup")).addClass(o.hasClass("topright")?"topright":"bottomleft")),r.is(":visible"))r.hide().remove();else{var i=o.hasClass("topright")?"up":"left";l().get((0,c.generateFilePath)(n.appid,"",n.scriptName),(function(e){r.html(e).ready((function(){if(r.prepend('<span class="arrow '+i+'"></span><h2>'+t("core","Settings")+'</h2><a class="close"></a>').show(),r.find(".close").bind("click",(function(){r.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&&l().ajaxSetup({cache:!0}),l().getScript((0,c.generateFilePath)(n.appid,"js",e)).fail((function(t,e,n){throw n}))}})).show()}),"html")}},appswebroots:b,Backbone:j,ContactsMenu:z,config:U,currentUser:q,dialogs:Q,EventSource:et,getCurrentUser:function(){return{uid:q,displayName:B}},isUserAdmin:function(){return it},L10N:wt,_ajaxConnectionLostHandler:m,_processAjaxError:function(t){(0!==t.status||"abort"!==t.statusText&&"timeout"!==t.statusText&&!Ut._reloadCalled)&&(p.default.contains([302,303,307,401],t.status)&&Ut.currentUser?setTimeout((function(){if(!Ut._userIsNavigatingAway&&!Ut._reloadCalled){var t=0,e=setInterval((function(){h.showUpdate(n("core","Problem loading page, reloading in %n second","Problem loading page, reloading in %n seconds",5-t)),t>=5&&(clearInterval(e),Ut.reload()),t++}),1e3);Ut._reloadCalled=!0}}),100):0===t.status&&setTimeout((function(){Ut._userIsNavigatingAway||Ut._reloadCalled||Ut._ajaxConnectionLostHandler()}),100))},registerXHRForErrorProcessing:function(t){t.addEventListener&&(t.addEventListener("load",(function(){4===t.readyState&&(t.status>=200&&t.status<300||304===t.status||l()(document).trigger(new(l().Event)("ajaxError"),t))})),t.addEventListener("error",(function(){l()(document).trigger(new(l().Event)("ajaxError"),t)})))},getCapabilities:function(){return console.warn("OC.getCapabilities is deprecated and will be removed in Nextcloud 21. See @nextcloud/capabilities"),(0,nt.getCapabilities)()},hideMenus:rt,registerMenu:function(t,e,n,o){e.addClass("menu");var r="A"===t.prop("tagName")||"BUTTON"===t.prop("tagName");t.on(r?"click.menu":"click.menu keyup.menu",(function(r){r.preventDefault(),r.key&&"Enter"!==r.key||(e.is(ot)?rt():(ot&&rt(),!0===o&&e.parent().addClass("openedMenu"),t.attr("aria-expanded",!0),e.slideToggle(50,n),ot=e))}))},showMenu:function(t,e,n){e.is(ot)||(rt(),ot=e,e.trigger(new(l().Event)("beforeShow")),e.show(),e.trigger(new(l().Event)("afterShow")),p.default.isFunction(n)&&n())},unregisterMenu:function(t,e){e.is(ot)&&rt(),t.off("click.menu").removeClass("menutoggle"),e.removeClass("menu")},basename:L.EZ,encodePath:L.Ec,dirname:L.XX,isSamePath:L.Mg,joinPaths:L.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:yt.getCanonicalLocale,getLocale:function(){var t;return null!==(t=l()("html").data("locale"))&&void 0!==t?t:"en"},getLanguage:function(){return l()("html").prop("lang")},addTranslations:wt.load,buildQueryString:function(t){return t?l().map(t,(function(t,e){var n=encodeURIComponent(e);return null!=t&&(n+="="+encodeURIComponent(t)),n})).join("&"):""},parseQueryString:function(t){var e,n,o,r={};if(!t)return null;(e=t.indexOf("?"))>=0&&(t=t.substr(e+1));for(var i=t.replace(/\+/g,"%20").split("&"),a=0;a<i.length;a++){var s=i[a];(n=(e=s.indexOf("="))>=0?[s.substr(0,e),s.substr(e+1)]:[s]).length&&(o=decodeURIComponent(n[0]))&&(r[o]=n.length>1?decodeURIComponent(n[1]):null)}return r},msg:bt,Notification:h,PasswordConfirmation:Ct,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),r=0;r<o.length;r++)o[r].attach&&o[r].attach(e,n)},detach:function(t,e,n){for(var o=this.getPlugins(t),r=0;r<o.length;r++)o[r].detach&&o[r].detach(e,n)}},theme:kt,Util:Ot,debug:At,filePath:c.generateFilePath,generateUrl:c.generateUrl,get:(jt=window,function(t){for(var e=t.split("."),n=e.pop(),o=0;o<e.length;o++)if(!(jt=jt[e[o]]))return!1;return jt[n]}),set:function(t){return function(e,n){for(var o=e.split("."),r=o.pop(),i=0;i<o.length;i++)t[o[i]]||(t[o[i]]={}),t=t[o[i]];return t[r]=n,n}}(window),getRootPath:c.getRootUrl,imagePath:c.imagePath,redirect:function(t){window.location=t},reload:function(){window.location.reload()},requestToken:X(),linkTo:c.linkTo,linkToOCS:function(t,e){return(0,c.generateOcsUrl)(t,{},{ocsVersion:e||1})+"/"},linkToRemote:c.generateRemoteUrl,linkToRemoteBase:function(t){return(0,c.getRootUrl)()+"/remote.php/"+t},webroot:Lt};(0,a.subscribe)("csrf-token-update",(function(t){OC.requestToken=t.token,console.info("OC.requestToken changed",t.token)}));var It=r(16453),Rt=r(17563),Ft=r(55586),$t=r.n(Ft),Nt={name:"LoginButton",props:{loading:{type:Boolean,required:!0},invertedColors:{type:Boolean,default:!1}}},Mt=r(51900),zt=(0,Mt.Z)(Nt,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{attrs:{id:"submit-wrapper"},on:{click:function(e){return t.$emit("click")}}},[n("input",{staticClass:"login primary",attrs:{id:"submit-form",type:"submit",title:""},domProps:{value:t.loading?t.t("core","Logging in …"):t.t("core","Log in")}}),t._v(" "),n("div",{staticClass:"submit-icon",class:{"icon-confirm-white":!t.loading,"icon-loading-small":t.loading&&t.invertedColors,"icon-loading-small-dark":t.loading&&!t.invertedColors}})])}),[],!1,null,"125b100b",null).exports,Dt={name:"LoginForm",components:{LoginButton:zt},props:{username:{type:String,default:""},redirectUrl:{type:[String,Boolean],default:!1},errors:{type:Array,default:function(){return[]}},messages:{type:Array,default:function(){return[]}},throttleDelay:{type:Number,default:0},invertedColors:{type:Boolean,default:!1},autoCompleteAllowed:{type:Boolean,default:!0},directLogin:{type:Boolean,default:!1}},data:function(){return{loading:!1,timezone:$t().determine().name(),timezoneOffset:-(new Date).getTimezoneOffset()/60,user:this.username,password:"",passwordInputType:"password"}},computed:{apacheAuthFailed:function(){return-1!==this.errors.indexOf("apacheAuthFailed")},internalException:function(){return-1!==this.errors.indexOf("internalexception")},invalidPassword:function(){return-1!==this.errors.indexOf("invalidpassword")},userDisabled:function(){return-1!==this.errors.indexOf("userdisabled")},toggleIcon:function(){return(0,c.imagePath)("core","actions/toggle.svg")},loadingIcon:function(){return(0,c.imagePath)("core","loading-dark.gif")},loginActionUrl:function(){return(0,c.generateUrl)("login")}},mounted:function(){""===this.username?this.$refs.user.focus():this.$refs.password.focus()},methods:{togglePassword:function(){"password"===this.passwordInputType?this.passwordInputType="text":this.passwordInputType="password"},updateUsername:function(){this.$emit("update:username",this.user)},submit:function(){this.loading=!0,this.$emit("submit")}}},Bt=(0,Mt.Z)(Dt,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("form",{ref:"loginForm",attrs:{method:"post",name:"login",action:t.loginActionUrl},on:{submit:t.submit}},[n("fieldset",[t.apacheAuthFailed?n("div",{staticClass:"warning"},[t._v("\n\t\t\t"+t._s(t.t("core","Server side authentication failed!"))),n("br"),t._v(" "),n("small",[t._v(t._s(t.t("core","Please contact your administrator."))+"\n\t\t\t")])]):t._e(),t._v(" "),t._l(t.messages,(function(e,o){return n("div",{key:o,staticClass:"warning"},[t._v("\n\t\t\t"+t._s(e)),n("br")])})),t._v(" "),t.internalException?n("div",{staticClass:"warning"},[t._v("\n\t\t\t"+t._s(t.t("core","An internal error occurred."))),n("br"),t._v(" "),n("small",[t._v(t._s(t.t("core","Please try again or contact your administrator."))+"\n\t\t\t")])]):t._e(),t._v(" "),n("div",{staticClass:"hidden",attrs:{id:"message"}},[n("img",{staticClass:"float-spinner",attrs:{alt:"",src:t.loadingIcon}}),t._v(" "),n("span",{attrs:{id:"messageText"}}),t._v(" "),n("div",{staticStyle:{clear:"both"}})]),t._v(" "),n("p",{staticClass:"grouptop",class:{shake:t.invalidPassword}},[n("input",{directives:[{name:"model",rawName:"v-model",value:t.user,expression:"user"}],ref:"user",attrs:{id:"user",type:"text",name:"user",autocapitalize:"none",autocorrect:"off",autocomplete:t.autoCompleteAllowed?"on":"off",placeholder:t.t("core","Username or email"),"aria-label":t.t("core","Username or email"),required:""},domProps:{value:t.user},on:{change:t.updateUsername,input:function(e){e.target.composing||(t.user=e.target.value)}}}),t._v(" "),n("label",{staticClass:"infield",attrs:{for:"user"}},[t._v(t._s(t.t("core","Username or email")))])]),t._v(" "),n("p",{staticClass:"groupbottom",class:{shake:t.invalidPassword}},[n("input",{ref:"password",staticClass:"password-with-toggle",attrs:{id:"password",type:t.passwordInputType,name:"password",autocorrect:"off",autocapitalize:"none",autocomplete:t.autoCompleteAllowed?"current-password":"off",placeholder:t.t("core","Password"),"aria-label":t.t("core","Password"),required:""}}),t._v(" "),n("label",{staticClass:"infield",attrs:{for:"password"}},[t._v(t._s(t.t("Password")))]),t._v(" "),n("a",{staticClass:"toggle-password",attrs:{href:"#"},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.togglePassword.apply(null,arguments)}}},[n("img",{attrs:{src:t.toggleIcon,alt:t.t("core","Toggle password visibility")}})])]),t._v(" "),n("LoginButton",{attrs:{loading:t.loading,"inverted-colors":t.invertedColors}}),t._v(" "),t.invalidPassword?n("p",{staticClass:"warning wrongPasswordMsg"},[t._v("\n\t\t\t"+t._s(t.t("core","Wrong username or password."))+"\n\t\t")]):t.userDisabled?n("p",{staticClass:"warning userDisabledMsg"},[t._v("\n\t\t\t"+t._s(t.t("core","User disabled"))+"\n\t\t")]):t._e(),t._v(" "),t.throttleDelay&&t.throttleDelay>5e3?n("p",{staticClass:"warning throttledMsg"},[t._v("\n\t\t\t"+t._s(t.t("core","We have detected multiple invalid login attempts from your IP. Therefore your next login is throttled up to 30 seconds."))+"\n\t\t")]):t._e(),t._v(" "),t.redirectUrl?n("input",{attrs:{type:"hidden",name:"redirect_url"},domProps:{value:t.redirectUrl}}):t._e(),t._v(" "),n("input",{attrs:{type:"hidden",name:"timezone"},domProps:{value:t.timezone}}),t._v(" "),n("input",{attrs:{type:"hidden",name:"timezone_offset"},domProps:{value:t.timezoneOffset}}),t._v(" "),n("input",{attrs:{type:"hidden",name:"requesttoken"},domProps:{value:t.OC.requestToken}}),t._v(" "),t.directLogin?n("input",{attrs:{type:"hidden",name:"direct",value:"1"}}):t._e()],2)])}),[],!1,null,"0b3a0522",null),qt=Bt.exports,Ht=r(4820),Yt=r(85963),Kt=r(64150);function Gt(t){return Gt="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},Gt(t)}function Vt(t){return function(t){if(Array.isArray(t))return Zt(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return Zt(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)?Zt(t,e):void 0}}(t)||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.")}()}function Zt(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,o=new Array(e);n<e;n++)o[n]=t[n];return o}function Wt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,o)}return n}function Jt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Wt(Object(n),!0).forEach((function(e){Qt(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Wt(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function Qt(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Xt(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function te(t,e){if(e&&("object"===Gt(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}function ee(t){var e="function"==typeof Map?new Map:void 0;return ee=function(t){if(null===t||(n=t,-1===Function.toString.call(n).indexOf("[native code]")))return t;var n;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,o)}function o(){return ne(t,arguments,ie(this).constructor)}return o.prototype=Object.create(t.prototype,{constructor:{value:o,enumerable:!1,writable:!0,configurable:!0}}),re(o,t)},ee(t)}function ne(t,e,n){return ne=oe()?Reflect.construct:function(t,e,n){var o=[null];o.push.apply(o,e);var r=new(Function.bind.apply(t,o));return n&&re(r,n.prototype),r},ne.apply(null,arguments)}function oe(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}function re(t,e){return re=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},re(t,e)}function ie(t){return ie=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},ie(t)}var ae=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&re(t,e)}(i,t);var e,n,o,r=(e=i,n=oe(),function(){var t,o=ie(e);if(n){var r=ie(this).constructor;t=Reflect.construct(o,arguments,r)}else t=o.apply(this,arguments);return te(this,t)});function i(){return Xt(this,i),r.apply(this,arguments)}return o=i,Object.defineProperty(o,"prototype",{writable:!1}),o}(ee(Error)),se={name:"PasswordLessLoginForm",components:{LoginButton:zt,InformationIcon:Yt.Z,LockOpenIcon:Kt.Z},props:{username:{type:String,default:""},redirectUrl:{type:[String,Boolean],default:!1},invertedColors:{type:Boolean,default:!1},autoCompleteAllowed:{type:Boolean,default:!0},isHttps:{type:Boolean,default:!1},isLocalhost:{type:Boolean,default:!1},hasPublicKeyCredential:{type:Boolean,default:!1}},data:function(){return{user:this.username,loading:!1,validCredentials:!0}},methods:{authenticate:function(){var t=this;console.debug("passwordless login initiated"),this.getAuthenticationData(this.user).then((function(t){return console.debug(t),t})).then(this.sign).then(this.completeAuthentication).catch((function(e){e instanceof ae?t.validCredentials=!1:console.debug(e)}))},getAuthenticationData:function(t){var e,n,o=function(t){var e=(t=t.replace(/-/g,"+").replace(/_/g,"/")).length%4;if(e){if(1===e)throw new Error("InvalidLengthError: Input base64url string is the wrong length to determine padding");t+=new Array(5-e).join("=")}return window.atob(t)};return(e=t,n=(0,c.generateUrl)("/login/webauthn/start"),Ht.default.post(n,{loginName:e}).then((function(t){return t.data}))).then((function(t){if(console.debug("Obtained PublicKeyCredentialRequestOptions"),console.debug(t),!Object.prototype.hasOwnProperty.call(t,"allowCredentials"))throw console.debug("No credentials found."),new ae;return t.challenge=Uint8Array.from(o(t.challenge),(function(t){return t.charCodeAt(0)})),t.allowCredentials=t.allowCredentials.map((function(t){return Jt(Jt({},t),{},{id:Uint8Array.from(o(t.id),(function(t){return t.charCodeAt(0)}))})})),console.debug("Converted PublicKeyCredentialRequestOptions"),console.debug(t),t})).catch((function(t){throw console.debug("Error while obtaining data"),t}))},sign:function(t){var e=function(t){return window.btoa(String.fromCharCode.apply(String,Vt(t)))};return navigator.credentials.get({publicKey:t}).then((function(t){return console.debug(t),console.debug(new Uint8Array(t.rawId)),console.debug(e(new Uint8Array(t.rawId))),{id:t.id,type:t.type,rawId:e(new Uint8Array(t.rawId)),response:{authenticatorData:e(new Uint8Array(t.response.authenticatorData)),clientDataJSON:e(new Uint8Array(t.response.clientDataJSON)),signature:e(new Uint8Array(t.response.signature)),userHandle:t.response.userHandle?(n=new Uint8Array(t.response.userHandle),String.fromCharCode.apply(String,Vt(n))):null}};var n})).then((function(t){return console.debug(t),t})).catch((function(t){console.debug("GOT AN ERROR!"),console.debug(t)}))},completeAuthentication:function(t){console.debug("TIME TO COMPLETE");var e,n,o=this.redirectUrl;return(e=JSON.stringify(t),n=(0,c.generateUrl)("/login/webauthn/finish"),Ht.default.post(n,{data:e}).then((function(t){return t.data}))).then((function(t){console.debug("Logged in redirecting"),window.location.href=o})).catch((function(t){console.debug("GOT AN ERROR WHILE SUBMITTING CHALLENGE!"),console.debug(t)}))},submit:function(){}}},le=r(93379),ce=r.n(le),ue=r(7795),de=r.n(ue),pe=r(90569),fe=r.n(pe),he=r(3565),me=r.n(he),ge=r(19216),ve=r.n(ge),we=r(44589),ye=r.n(we),be=r(27429),_e={};_e.styleTagTransform=ye(),_e.setAttributes=me(),_e.insert=fe().bind(null,"head"),_e.domAPI=de(),_e.insertStyleElement=ve(),ce()(be.Z,_e),be.Z&&be.Z.locals&&be.Z.locals;var Pe=(0,Mt.Z)(se,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return(t.isHttps||t.isLocalhost)&&t.hasPublicKeyCredential?n("form",{ref:"loginForm",attrs:{method:"post",name:"login"},on:{submit:function(e){return e.preventDefault(),t.submit.apply(null,arguments)}}},[n("fieldset",[n("p",{staticClass:"grouptop groupbottom"},[n("label",{staticClass:"infield",attrs:{for:"user"}},[t._v(t._s(t.t("core","Username or\temail")))]),t._v(" "),n("input",{directives:[{name:"model",rawName:"v-model",value:t.user,expression:"user"}],ref:"user",attrs:{id:"user",type:"text",name:"user",autocomplete:t.autoCompleteAllowed?"on":"off",placeholder:t.t("core","Username or email"),"aria-label":t.t("core","Username or email"),required:""},domProps:{value:t.user},on:{change:function(e){return t.$emit("update:username",t.user)},input:function(e){e.target.composing||(t.user=e.target.value)}}})]),t._v(" "),t.validCredentials?t._e():n("div",{staticClass:"body-login-container update form__message-box"},[t._v("\n\t\t\t"+t._s(t.t("core","Your account is not setup for passwordless login."))+"\n\t\t")]),t._v(" "),t.validCredentials?n("LoginButton",{attrs:{loading:t.loading,"inverted-colors":t.invertedColors},on:{click:t.authenticate}}):t._e()],1)]):t.hasPublicKeyCredential?t.isHttps||t.isLocalhost?t._e():n("div",{staticClass:"body-login-container update"},[n("LockOpenIcon",{attrs:{size:"70"}}),t._v(" "),n("h2",[t._v(t._s(t.t("core","Your connection is not secure")))]),t._v(" "),n("p",{staticClass:"infogroup"},[t._v("\n\t\t"+t._s(t.t("core","Passwordless authentication is only available over a secure connection."))+"\n\t")])],1):n("div",{staticClass:"body-login-container update"},[n("InformationIcon",{attrs:{size:"70"}}),t._v(" "),n("h2",[t._v(t._s(t.t("core","Browser not supported")))]),t._v(" "),n("p",{staticClass:"infogroup"},[t._v("\n\t\t"+t._s(t.t("core","Passwordless authentication is not supported in your browser."))+"\n\t")])],1)}),[],!1,null,"4f29a6e2",null),Ce=Pe.exports,ke={name:"ResetPassword",props:{username:{type:String,required:!0},resetPasswordLink:{type:String,required:!0},invertedColors:{type:Boolean,default:!1}},data:function(){return{error:!1,loading:!1,message:void 0,user:this.username}},watch:{username:function(t){this.user=t}},methods:{updateUsername:function(){this.$emit("update:username",this.user)},submit:function(){var t=this;this.loading=!0,this.error=!1,this.message="";var e=(0,c.generateUrl)("/lostpassword/email"),n={user:this.user};return Ht.default.post(e,n).then((function(t){return t.data})).then((function(e){if("success"!==e.status)throw new Error("got status ".concat(e.status));t.message="send-success"})).catch((function(e){console.error("could not send reset email request",e),t.error=!0,t.message="send-error"})).then((function(){t.loading=!1}))}}},xe=r(44685),Te={};Te.styleTagTransform=ye(),Te.setAttributes=me(),Te.insert=fe().bind(null,"head"),Te.domAPI=de(),Te.insertStyleElement=ve(),ce()(xe.Z,Te),xe.Z&&xe.Z.locals&&xe.Z.locals;var Oe=(0,Mt.Z)(ke,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("form",{on:{submit:function(e){return e.preventDefault(),t.submit.apply(null,arguments)}}},[n("fieldset",[n("p",[n("input",{directives:[{name:"model",rawName:"v-model",value:t.user,expression:"user"}],attrs:{id:"user",type:"text",name:"user",autocapitalize:"off",placeholder:t.t("core","Username or email"),"aria-label":t.t("core","Username or email"),required:""},domProps:{value:t.user},on:{change:t.updateUsername,input:function(e){e.target.composing||(t.user=e.target.value)}}}),t._v(" "),n("label",{staticClass:"infield",attrs:{for:"user"}},[t._v(t._s(t.t("core","Username or email")))])]),t._v(" "),n("div",{attrs:{id:"reset-password-wrapper"}},[n("input",{staticClass:"login primary",attrs:{id:"reset-password-submit",type:"submit",title:""},domProps:{value:t.t("core","Reset password")}}),t._v(" "),n("div",{staticClass:"submit-icon",class:{"icon-confirm-white":!t.loading,"icon-loading-small":t.loading&&t.invertedColors,"icon-loading-small-dark":t.loading&&!t.invertedColors}})]),t._v(" "),"send-success"===t.message?n("p",{staticClass:"update"},[t._v("\n\t\t\t"+t._s(t.t("core","A password reset message has been sent to the email address of this account. If you do not receive it, check your spam/junk folders or ask your local administrator for help."))+"\n\t\t\t"),n("br"),t._v("\n\t\t\t"+t._s(t.t("core","If it is not there ask your local administrator."))+"\n\t\t")]):"send-error"===t.message?n("p",{staticClass:"update warning"},[t._v("\n\t\t\t"+t._s(t.t("core","Couldn't send reset email. Please contact your administrator."))+"\n\t\t")]):"reset-error"===t.message?n("p",{staticClass:"update warning"},[t._v("\n\t\t\t"+t._s(t.t("core","Password cannot be changed. Please contact your administrator."))+"\n\t\t")]):t.message?n("p",{staticClass:"update",class:{warning:t.error}}):t._e(),t._v(" "),n("a",{attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.$emit("abort")}}},[t._v("\n\t\t\t"+t._s(t.t("core","Back to login"))+"\n\t\t")])])])}),[],!1,null,"d9d670b8",null),Ae=Oe.exports;function Se(t,e,n,o,r,i,a){try{var s=t[i](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(o,r)}var Ee={name:"UpdatePassword",props:{username:{type:String,required:!0},resetPasswordTarget:{type:String,required:!0},invertedColors:{type:Boolean,default:!1}},data:function(){return{error:!1,loading:!1,message:void 0,user:this.username,password:"",encrypted:!1,proceed:!1}},watch:{username:function(t){this.user=t}},methods:{submit:function(){var e,n=this;return(e=regeneratorRuntime.mark((function e(){var o,r;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.loading=!0,n.error=!1,n.message="",e.prev=3,e.next=6,Ht.default.post(n.resetPasswordTarget,{password:n.password,proceed:n.proceed});case 6:if(o=e.sent,!(r=o.data)||"success"!==r.status){e.next=14;break}n.message="send-success",n.$emit("update:username",n.user),n.$emit("done"),e.next=23;break;case 14:if(!r||!r.encryption){e.next=18;break}n.encrypted=!0,e.next=23;break;case 18:if(!r||!r.msg){e.next=22;break}throw new Error(r.msg);case 22:throw new Error;case 23:e.next=29;break;case 25:e.prev=25,e.t0=e.catch(3),n.error=!0,n.message=e.t0.message?e.t0.message:t("core","Password cannot be changed. Please contact your administrator.");case 29:return e.prev=29,n.loading=!1,e.finish(29);case 32:case"end":return e.stop()}}),e,null,[[3,25,29,32]])})),function(){var t=this,n=arguments;return new Promise((function(o,r){var i=e.apply(t,n);function a(t){Se(i,o,r,a,s,"next",t)}function s(t){Se(i,o,r,a,s,"throw",t)}a(void 0)}))})()}}},je=Ee,Le=r(91123),Ue={};Ue.styleTagTransform=ye(),Ue.setAttributes=me(),Ue.insert=fe().bind(null,"head"),Ue.domAPI=de(),Ue.insertStyleElement=ve(),ce()(Le.Z,Ue),Le.Z&&Le.Z.locals&&Le.Z.locals;var Ie=(0,Mt.Z)(je,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("form",{on:{submit:function(e){return e.preventDefault(),t.submit.apply(null,arguments)}}},[n("fieldset",[n("p",[n("label",{staticClass:"infield",attrs:{for:"password"}},[t._v(t._s(t.t("core","New password")))]),t._v(" "),n("input",{directives:[{name:"model",rawName:"v-model",value:t.password,expression:"password"}],attrs:{id:"password",type:"password",name:"password",autocomplete:"new-password",autocapitalize:"none",autocorrect:"off",required:"",placeholder:t.t("core","New password")},domProps:{value:t.password},on:{input:function(e){e.target.composing||(t.password=e.target.value)}}})]),t._v(" "),t.encrypted?n("div",{staticClass:"update"},[n("p",[t._v("\n\t\t\t\t"+t._s(t.t("core","Your files are encrypted. There will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?"))+"\n\t\t\t")]),t._v(" "),n("input",{directives:[{name:"model",rawName:"v-model",value:t.proceed,expression:"proceed"}],staticClass:"checkbox",attrs:{id:"encrypted-continue",type:"checkbox"},domProps:{checked:Array.isArray(t.proceed)?t._i(t.proceed,null)>-1:t.proceed},on:{change:function(e){var n=t.proceed,o=e.target,r=!!o.checked;if(Array.isArray(n)){var i=t._i(n,null);o.checked?i<0&&(t.proceed=n.concat([null])):i>-1&&(t.proceed=n.slice(0,i).concat(n.slice(i+1)))}else t.proceed=r}}}),t._v(" "),n("label",{attrs:{for:"encrypted-continue"}},[t._v("\n\t\t\t\t"+t._s(t.t("core","I know what I'm doing"))+"\n\t\t\t")])]):t._e(),t._v(" "),n("div",{attrs:{id:"submit-wrapper"}},[n("input",{staticClass:"login primary",attrs:{id:"submit",type:"submit",title:""},domProps:{value:t.loading?t.t("core","Resetting password"):t.t("core","Reset password")}}),t._v(" "),n("div",{staticClass:"submit-icon",class:{"icon-loading-small":t.loading&&t.invertedColors,"icon-loading-small-dark":t.loading&&!t.invertedColors}})]),t._v(" "),t.error&&t.message?n("p",{class:{warning:t.error}},[t._v("\n\t\t\t"+t._s(t.message)+"\n\t\t")]):t._e()])])}),[],!1,null,"9ae5fdb4",null),Re=Ie.exports,Fe=Rt.parse(location.search);if("1"===Fe.clear)try{window.localStorage.clear(),window.sessionStorage.clear(),console.debug("Browser storage cleared")}catch(t){console.error("Could not clear browser storage",t)}var $e={name:"Login",components:{LoginForm:qt,PasswordLessLoginForm:Ce,ResetPassword:Ae,UpdatePassword:Re},data:function(){return{loading:!1,user:(0,It.loadState)("core","loginUsername",""),passwordlessLogin:!1,resetPassword:!1,errors:(0,It.loadState)("core","loginErrors",[]),messages:(0,It.loadState)("core","loginMessages",[]),redirectUrl:(0,It.loadState)("core","loginRedirectUrl",!1),throttleDelay:(0,It.loadState)("core","loginThrottleDelay",0),invertedColors:OCA.Theming&&OCA.Theming.inverted,canResetPassword:(0,It.loadState)("core","loginCanResetPassword",!1),resetPasswordLink:(0,It.loadState)("core","loginResetPasswordLink",""),autoCompleteAllowed:(0,It.loadState)("core","loginAutocomplete",!0),resetPasswordTarget:(0,It.loadState)("core","resetPasswordTarget",""),resetPasswordUser:(0,It.loadState)("core","resetPasswordUser",""),directLogin:"1"===Fe.direct,hasPasswordless:(0,It.loadState)("core","webauthn-available",!1),countAlternativeLogins:(0,It.loadState)("core","countAlternativeLogins",!1),isHttps:"https:"===window.location.protocol,isLocalhost:"localhost"===window.location.hostname,hasPublicKeyCredential:void 0!==window.PublicKeyCredential,hideLoginForm:(0,It.loadState)("core","hideLoginForm",!1)}},methods:{passwordResetFinished:function(){this.resetPasswordTarget="",this.directLogin=!0}}},Ne=r(35162),Me={};Me.styleTagTransform=ye(),Me.setAttributes=me(),Me.insert=fe().bind(null,"head"),Me.domAPI=de(),Me.insertStyleElement=ve(),ce()(Ne.Z,Me),Ne.Z&&Ne.Z.locals&&Ne.Z.locals;var ze=(0,Mt.Z)($e,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return!t.hideLoginForm||t.directLogin?n("div",[n("transition",{attrs:{name:"fade",mode:"out-in"}},[t.passwordlessLogin||t.resetPassword||""!==t.resetPasswordTarget?!t.loading&&t.passwordlessLogin?n("div",{key:"reset",staticClass:"login-additional"},[n("PasswordLessLoginForm",{attrs:{username:t.user,"redirect-url":t.redirectUrl,"inverted-colors":t.invertedColors,"auto-complete-allowed":t.autoCompleteAllowed,"is-https":t.isHttps,"is-localhost":t.isLocalhost,"has-public-key-credential":t.hasPublicKeyCredential},on:{"update:username":function(e){t.user=e},submit:function(e){t.loading=!0}}}),t._v(" "),n("a",{attrs:{href:"#"},on:{click:function(e){e.preventDefault(),t.passwordlessLogin=!1}}},[t._v("\n\t\t\t\t"+t._s(t.t("core","Back"))+"\n\t\t\t")])],1):!t.loading&&t.canResetPassword?n("div",{key:"reset",staticClass:"login-additional"},[n("div",{staticClass:"lost-password-container"},[t.resetPassword?n("ResetPassword",{attrs:{username:t.user,"reset-password-link":t.resetPasswordLink,"inverted-colors":t.invertedColors},on:{"update:username":function(e){t.user=e},abort:function(e){t.resetPassword=!1}}}):t._e()],1)]):""!==t.resetPasswordTarget?n("div",[n("UpdatePassword",{attrs:{username:t.user,"reset-password-target":t.resetPasswordTarget,"inverted-colors":t.invertedColors},on:{"update:username":function(e){t.user=e},done:t.passwordResetFinished}})],1):t._e():n("div",{key:"login"},[n("LoginForm",{attrs:{username:t.user,"redirect-url":t.redirectUrl,"direct-login":t.directLogin,messages:t.messages,errors:t.errors,"throttle-delay":t.throttleDelay,"inverted-colors":t.invertedColors,"auto-complete-allowed":t.autoCompleteAllowed},on:{"update:username":function(e){t.user=e},submit:function(e){t.loading=!0}}}),t._v(" "),t.canResetPassword&&""!==t.resetPasswordLink?n("a",{attrs:{id:"lost-password",href:t.resetPasswordLink}},[t._v("\n\t\t\t\t"+t._s(t.t("core","Forgot password?"))+"\n\t\t\t")]):t.canResetPassword&&!t.resetPassword?n("a",{attrs:{id:"lost-password",href:t.resetPasswordLink},on:{click:function(e){e.preventDefault(),t.resetPassword=!0}}},[t._v("\n\t\t\t\t"+t._s(t.t("core","Forgot password?"))+"\n\t\t\t")]):t._e(),t._v(" "),n("br"),t._v(" "),t.hasPasswordless?[t.countAlternativeLogins?n("div",{staticClass:"alternative-logins"},[t.hasPasswordless?n("a",{staticClass:"button",class:{"single-alt-login-option":t.countAlternativeLogins},attrs:{href:"#"},on:{click:function(e){e.preventDefault(),t.passwordlessLogin=!0}}},[t._v("\n\t\t\t\t\t\t"+t._s(t.t("core","Log in with a device"))+"\n\t\t\t\t\t")]):t._e()]):n("a",{attrs:{href:"#"},on:{click:function(e){e.preventDefault(),t.passwordlessLogin=!0}}},[t._v("\n\t\t\t\t\t"+t._s(t.t("core","Log in with a device"))+"\n\t\t\t\t")])]:t._e()],2)])],1):n("div",[n("transition",{attrs:{name:"fade",mode:"out-in"}},[n("div",{staticClass:"warning"},[t._v("\n\t\t\t"+t._s(t.t("core","Login form is disabled."))),n("br"),t._v(" "),n("small",[t._v(t._s(t.t("core","Please contact your administrator."))+"\n\t\t\t")])])])],1)}),[],!1,null,null,null).exports,De={data:function(){return{OC:Ut}},methods:{t:wt.translate.bind(wt),n:wt.translatePlural.bind(wt)}};i.default.mixin(De),(new(i.default.extend(ze))).$mount("#login")},27429:function(t,e,n){"use strict";var o=n(87537),r=n.n(o),i=n(23645),a=n.n(i)()(r());a.push([t.id,".body-login-container.update[data-v-4f29a6e2]{margin:15px 0}.body-login-container.update.form__message-box[data-v-4f29a6e2]{width:240px;margin:5px}","",{version:3,sources:["webpack://./core/src/components/login/PasswordLessLoginForm.vue"],names:[],mappings:"AAmOA,8CACC,aAAA,CAEA,gEACC,WAAA,CACA,UAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.body-login-container.update {\n\tmargin: 15px 0;\n\n\t&.form__message-box {\n\t\twidth: 240px;\n\t\tmargin: 5px;\n\t}\n}\n"],sourceRoot:""}]),e.Z=a},44685:function(t,e,n){"use strict";var o=n(87537),r=n.n(o),i=n(23645),a=n.n(i)()(r());a.push([t.id,"\n.update[data-v-d9d670b8] {\n\twidth: auto;\n}\n","",{version:3,sources:["webpack://./core/src/components/login/ResetPassword.vue"],names:[],mappings:";AAmJA;CACA,WAAA;AACA",sourcesContent:["\x3c!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\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 --\x3e\n\n<template>\n\t<form @submit.prevent=\"submit\">\n\t\t<fieldset>\n\t\t\t<p>\n\t\t\t\t<input id=\"user\"\n\t\t\t\t\tv-model=\"user\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tname=\"user\"\n\t\t\t\t\tautocapitalize=\"off\"\n\t\t\t\t\t:placeholder=\"t('core', 'Username or email')\"\n\t\t\t\t\t:aria-label=\"t('core', 'Username or email')\"\n\t\t\t\t\trequired\n\t\t\t\t\t@change=\"updateUsername\">\n\t\t\t\t\x3c!--<?php p($_['user_autofocus'] ? 'autofocus' : ''); ?>\n\t\t\t\tautocomplete=\"<?php p($_['login_form_autocomplete']); ?>\" autocapitalize=\"none\" autocorrect=\"off\"--\x3e\n\t\t\t\t<label for=\"user\" class=\"infield\">{{ t('core', 'Username or email') }}</label>\n\t\t\t</p>\n\t\t\t<div id=\"reset-password-wrapper\">\n\t\t\t\t<input id=\"reset-password-submit\"\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\tclass=\"login primary\"\n\t\t\t\t\ttitle=\"\"\n\t\t\t\t\t:value=\"t('core', 'Reset password')\">\n\t\t\t\t<div class=\"submit-icon\"\n\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t'icon-confirm-white': !loading,\n\t\t\t\t\t\t'icon-loading-small': loading && invertedColors,\n\t\t\t\t\t\t'icon-loading-small-dark': loading && !invertedColors,\n\t\t\t\t\t}\" />\n\t\t\t</div>\n\t\t\t<p v-if=\"message === 'send-success'\"\n\t\t\t\tclass=\"update\">\n\t\t\t\t{{ t('core', 'A password reset message has been sent to the email address of this account. If you do not receive it, check your spam/junk folders or ask your local administrator for help.') }}\n\t\t\t\t<br>\n\t\t\t\t{{ t('core', 'If it is not there ask your local administrator.') }}\n\t\t\t</p>\n\t\t\t<p v-else-if=\"message === 'send-error'\"\n\t\t\t\tclass=\"update warning\">\n\t\t\t\t{{ t('core', 'Couldn\\'t send reset email. Please contact your administrator.') }}\n\t\t\t</p>\n\t\t\t<p v-else-if=\"message === 'reset-error'\"\n\t\t\t\tclass=\"update warning\">\n\t\t\t\t{{ t('core', 'Password cannot be changed. Please contact your administrator.') }}\n\t\t\t</p>\n\t\t\t<p v-else-if=\"message\"\n\t\t\t\tclass=\"update\"\n\t\t\t\t:class=\"{warning: error}\" />\n\n\t\t\t<a href=\"#\"\n\t\t\t\t@click.prevent=\"$emit('abort')\">\n\t\t\t\t{{ t('core', 'Back to login') }}\n\t\t\t</a>\n\t\t</fieldset>\n\t</form>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\n\nimport { generateUrl } from '@nextcloud/router'\n\nexport default {\n\tname: 'ResetPassword',\n\tprops: {\n\t\tusername: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tresetPasswordLink: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tinvertedColors: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\terror: false,\n\t\t\tloading: false,\n\t\t\tmessage: undefined,\n\t\t\tuser: this.username,\n\t\t}\n\t},\n\twatch: {\n\t\tusername(value) {\n\t\t\tthis.user = value\n\t\t},\n\t},\n\tmethods: {\n\t\tupdateUsername() {\n\t\t\tthis.$emit('update:username', this.user)\n\t\t},\n\t\tsubmit() {\n\t\t\tthis.loading = true\n\t\t\tthis.error = false\n\t\t\tthis.message = ''\n\t\t\tconst url = generateUrl('/lostpassword/email')\n\n\t\t\tconst data = {\n\t\t\t\tuser: this.user,\n\t\t\t}\n\n\t\t\treturn axios.post(url, data)\n\t\t\t\t.then(resp => resp.data)\n\t\t\t\t.then(data => {\n\t\t\t\t\tif (data.status !== 'success') {\n\t\t\t\t\t\tthrow new Error(`got status ${data.status}`)\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.message = 'send-success'\n\t\t\t\t})\n\t\t\t\t.catch(e => {\n\t\t\t\t\tconsole.error('could not send reset email request', e)\n\n\t\t\t\t\tthis.error = true\n\t\t\t\t\tthis.message = 'send-error'\n\t\t\t\t})\n\t\t\t\t.then(() => { this.loading = false })\n\t\t},\n\t},\n}\n<\/script>\n\n<style scoped>\n\t.update {\n\t\twidth: auto;\n\t}\n</style>\n"],sourceRoot:""}]),e.Z=a},91123:function(t,e,n){"use strict";var o=n(87537),r=n.n(o),i=n(23645),a=n.n(i)()(r());a.push([t.id,"\nfieldset[data-v-9ae5fdb4] {\n\ttext-align: center;\n}\ninput[type=submit][data-v-9ae5fdb4] {\n\tmargin-top: 20px;\n}\n","",{version:3,sources:["webpack://./core/src/components/login/UpdatePassword.vue"],names:[],mappings:";AA4IA;CACA,kBAAA;AACA;AAEA;CACA,gBAAA;AACA",sourcesContent:['\x3c!--\n - @copyright Copyright (c) 2019 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 --\x3e\n\n<template>\n\t<form @submit.prevent="submit">\n\t\t<fieldset>\n\t\t\t<p>\n\t\t\t\t<label for="password" class="infield">{{ t(\'core\', \'New password\') }}</label>\n\t\t\t\t<input id="password"\n\t\t\t\t\tv-model="password"\n\t\t\t\t\ttype="password"\n\t\t\t\t\tname="password"\n\t\t\t\t\tautocomplete="new-password"\n\t\t\t\t\tautocapitalize="none"\n\t\t\t\t\tautocorrect="off"\n\t\t\t\t\trequired\n\t\t\t\t\t:placeholder="t(\'core\', \'New password\')">\n\t\t\t</p>\n\n\t\t\t<div v-if="encrypted" class="update">\n\t\t\t\t<p>\n\t\t\t\t\t{{ t(\'core\', \'Your files are encrypted. There will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?\') }}\n\t\t\t\t</p>\n\t\t\t\t<input id="encrypted-continue"\n\t\t\t\t\tv-model="proceed"\n\t\t\t\t\ttype="checkbox"\n\t\t\t\t\tclass="checkbox">\n\t\t\t\t<label for="encrypted-continue">\n\t\t\t\t\t{{ t(\'core\', \'I know what I\\\'m doing\') }}\n\t\t\t\t</label>\n\t\t\t</div>\n\n\t\t\t<div id="submit-wrapper">\n\t\t\t\t<input id="submit"\n\t\t\t\t\ttype="submit"\n\t\t\t\t\tclass="login primary"\n\t\t\t\t\ttitle=""\n\t\t\t\t\t:value="!loading ? t(\'core\', \'Reset password\') : t(\'core\', \'Resetting password\')">\n\t\t\t\t<div class="submit-icon"\n\t\t\t\t\t:class="{\n\t\t\t\t\t\t\'icon-loading-small\': loading && invertedColors,\n\t\t\t\t\t\t\'icon-loading-small-dark\': loading && !invertedColors\n\t\t\t\t\t}" />\n\t\t\t</div>\n\n\t\t\t<p v-if="error && message" :class="{warning: error}">\n\t\t\t\t{{ message }}\n\t\t\t</p>\n\t\t</fieldset>\n\t</form>\n</template>\n\n<script>\nimport Axios from \'@nextcloud/axios\'\n\nexport default {\n\tname: \'UpdatePassword\',\n\tprops: {\n\t\tusername: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tresetPasswordTarget: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tinvertedColors: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\terror: false,\n\t\t\tloading: false,\n\t\t\tmessage: undefined,\n\t\t\tuser: this.username,\n\t\t\tpassword: \'\',\n\t\t\tencrypted: false,\n\t\t\tproceed: false,\n\t\t}\n\t},\n\twatch: {\n\t\tusername(value) {\n\t\t\tthis.user = value\n\t\t},\n\t},\n\tmethods: {\n\t\tasync submit() {\n\t\t\tthis.loading = true\n\t\t\tthis.error = false\n\t\t\tthis.message = \'\'\n\n\t\t\ttry {\n\t\t\t\tconst { data } = await Axios.post(this.resetPasswordTarget, {\n\t\t\t\t\tpassword: this.password,\n\t\t\t\t\tproceed: this.proceed,\n\t\t\t\t})\n\t\t\t\tif (data && data.status === \'success\') {\n\t\t\t\t\tthis.message = \'send-success\'\n\t\t\t\t\tthis.$emit(\'update:username\', this.user)\n\t\t\t\t\tthis.$emit(\'done\')\n\t\t\t\t} else if (data && data.encryption) {\n\t\t\t\t\tthis.encrypted = true\n\t\t\t\t} else if (data && data.msg) {\n\t\t\t\t\tthrow new Error(data.msg)\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tthis.error = true\n\t\t\t\tthis.message = e.message ? e.message : t(\'core\', \'Password cannot be changed. Please contact your administrator.\')\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 scoped>\n\tfieldset {\n\t\ttext-align: center;\n\t}\n\n\tinput[type=submit] {\n\t\tmargin-top: 20px;\n\t}\n</style>\n'],sourceRoot:""}]),e.Z=a},35162:function(t,e,n){"use strict";var o=n(87537),r=n.n(o),i=n(23645),a=n.n(i)()(r());a.push([t.id,"\n.fade-enter-active, .fade-leave-active {\n\ttransition: opacity .3s;\n}\n.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {\n\topacity: 0;\n}\n","",{version:3,sources:["webpack://./core/src/views/Login.vue"],names:[],mappings:";AAiLA;CACA,uBAAA;AACA;AACA;CACA,UAAA;AACA",sourcesContent:["\x3c!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\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 --\x3e\n\n<template>\n\t<div v-if=\"!hideLoginForm || directLogin\">\n\t\t<transition name=\"fade\" mode=\"out-in\">\n\t\t\t<div v-if=\"!passwordlessLogin && !resetPassword && resetPasswordTarget === ''\"\n\t\t\t\tkey=\"login\">\n\t\t\t\t<LoginForm :username.sync=\"user\"\n\t\t\t\t\t:redirect-url=\"redirectUrl\"\n\t\t\t\t\t:direct-login=\"directLogin\"\n\t\t\t\t\t:messages=\"messages\"\n\t\t\t\t\t:errors=\"errors\"\n\t\t\t\t\t:throttle-delay=\"throttleDelay\"\n\t\t\t\t\t:inverted-colors=\"invertedColors\"\n\t\t\t\t\t:auto-complete-allowed=\"autoCompleteAllowed\"\n\t\t\t\t\t@submit=\"loading = true\" />\n\t\t\t\t<a v-if=\"canResetPassword && resetPasswordLink !== ''\"\n\t\t\t\t\tid=\"lost-password\"\n\t\t\t\t\t:href=\"resetPasswordLink\">\n\t\t\t\t\t{{ t('core', 'Forgot password?') }}\n\t\t\t\t</a>\n\t\t\t\t<a v-else-if=\"canResetPassword && !resetPassword\"\n\t\t\t\t\tid=\"lost-password\"\n\t\t\t\t\t:href=\"resetPasswordLink\"\n\t\t\t\t\t@click.prevent=\"resetPassword = true\">\n\t\t\t\t\t{{ t('core', 'Forgot password?') }}\n\t\t\t\t</a>\n\t\t\t\t<br>\n\t\t\t\t<template v-if=\"hasPasswordless\">\n\t\t\t\t\t<div v-if=\"countAlternativeLogins\"\n\t\t\t\t\t\tclass=\"alternative-logins\">\n\t\t\t\t\t\t<a v-if=\"hasPasswordless\"\n\t\t\t\t\t\t\tclass=\"button\"\n\t\t\t\t\t\t\t:class=\"{ 'single-alt-login-option': countAlternativeLogins }\"\n\t\t\t\t\t\t\thref=\"#\"\n\t\t\t\t\t\t\t@click.prevent=\"passwordlessLogin = true\">\n\t\t\t\t\t\t\t{{ t('core', 'Log in with a device') }}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<a v-else\n\t\t\t\t\t\thref=\"#\"\n\t\t\t\t\t\t@click.prevent=\"passwordlessLogin = true\">\n\t\t\t\t\t\t{{ t('core', 'Log in with a device') }}\n\t\t\t\t\t</a>\n\t\t\t\t</template>\n\t\t\t</div>\n\t\t\t<div v-else-if=\"!loading && passwordlessLogin\"\n\t\t\t\tkey=\"reset\"\n\t\t\t\tclass=\"login-additional\">\n\t\t\t\t<PasswordLessLoginForm :username.sync=\"user\"\n\t\t\t\t\t:redirect-url=\"redirectUrl\"\n\t\t\t\t\t:inverted-colors=\"invertedColors\"\n\t\t\t\t\t:auto-complete-allowed=\"autoCompleteAllowed\"\n\t\t\t\t\t:is-https=\"isHttps\"\n\t\t\t\t\t:is-localhost=\"isLocalhost\"\n\t\t\t\t\t:has-public-key-credential=\"hasPublicKeyCredential\"\n\t\t\t\t\t@submit=\"loading = true\" />\n\t\t\t\t<a href=\"#\" @click.prevent=\"passwordlessLogin = false\">\n\t\t\t\t\t{{ t('core', 'Back') }}\n\t\t\t\t</a>\n\t\t\t</div>\n\t\t\t<div v-else-if=\"!loading && canResetPassword\"\n\t\t\t\tkey=\"reset\"\n\t\t\t\tclass=\"login-additional\">\n\t\t\t\t<div class=\"lost-password-container\">\n\t\t\t\t\t<ResetPassword v-if=\"resetPassword\"\n\t\t\t\t\t\t:username.sync=\"user\"\n\t\t\t\t\t\t:reset-password-link=\"resetPasswordLink\"\n\t\t\t\t\t\t:inverted-colors=\"invertedColors\"\n\t\t\t\t\t\t@abort=\"resetPassword = false\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div v-else-if=\"resetPasswordTarget !== ''\">\n\t\t\t\t<UpdatePassword :username.sync=\"user\"\n\t\t\t\t\t:reset-password-target=\"resetPasswordTarget\"\n\t\t\t\t\t:inverted-colors=\"invertedColors\"\n\t\t\t\t\t@done=\"passwordResetFinished\" />\n\t\t\t</div>\n\t\t</transition>\n\t</div>\n\t<div v-else>\n\t\t<transition name=\"fade\" mode=\"out-in\">\n\t\t\t<div class=\"warning\">\n\t\t\t\t{{ t('core', 'Login form is disabled.') }}<br>\n\t\t\t\t<small>{{ t('core', 'Please contact your administrator.') }}\n\t\t\t\t</small>\n\t\t\t</div>\n\t\t</transition>\n\t</div>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\nimport queryString from 'query-string'\n\nimport LoginForm from '../components/login/LoginForm.vue'\nimport PasswordLessLoginForm from '../components/login/PasswordLessLoginForm.vue'\nimport ResetPassword from '../components/login/ResetPassword.vue'\nimport UpdatePassword from '../components/login/UpdatePassword.vue'\n\nconst query = queryString.parse(location.search)\nif (query.clear === '1') {\n\ttry {\n\t\twindow.localStorage.clear()\n\t\twindow.sessionStorage.clear()\n\t\tconsole.debug('Browser storage cleared')\n\t} catch (e) {\n\t\tconsole.error('Could not clear browser storage', e)\n\t}\n}\n\nexport default {\n\tname: 'Login',\n\n\tcomponents: {\n\t\tLoginForm,\n\t\tPasswordLessLoginForm,\n\t\tResetPassword,\n\t\tUpdatePassword,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t\tuser: loadState('core', 'loginUsername', ''),\n\t\t\tpasswordlessLogin: false,\n\t\t\tresetPassword: false,\n\n\t\t\t// Initial data\n\t\t\terrors: loadState('core', 'loginErrors', []),\n\t\t\tmessages: loadState('core', 'loginMessages', []),\n\t\t\tredirectUrl: loadState('core', 'loginRedirectUrl', false),\n\t\t\tthrottleDelay: loadState('core', 'loginThrottleDelay', 0),\n\t\t\tinvertedColors: OCA.Theming && OCA.Theming.inverted,\n\t\t\tcanResetPassword: loadState('core', 'loginCanResetPassword', false),\n\t\t\tresetPasswordLink: loadState('core', 'loginResetPasswordLink', ''),\n\t\t\tautoCompleteAllowed: loadState('core', 'loginAutocomplete', true),\n\t\t\tresetPasswordTarget: loadState('core', 'resetPasswordTarget', ''),\n\t\t\tresetPasswordUser: loadState('core', 'resetPasswordUser', ''),\n\t\t\tdirectLogin: query.direct === '1',\n\t\t\thasPasswordless: loadState('core', 'webauthn-available', false),\n\t\t\tcountAlternativeLogins: loadState('core', 'countAlternativeLogins', false),\n\t\t\tisHttps: window.location.protocol === 'https:',\n\t\t\tisLocalhost: window.location.hostname === 'localhost',\n\t\t\thasPublicKeyCredential: typeof (window.PublicKeyCredential) !== 'undefined',\n\t\t\thideLoginForm: loadState('core', 'hideLoginForm', false),\n\t\t}\n\t},\n\tmethods: {\n\t\tpasswordResetFinished() {\n\t\t\tthis.resetPasswordTarget = ''\n\t\t\tthis.directLogin = true\n\t\t},\n\t},\n}\n<\/script>\n\n<style>\n\t.fade-enter-active, .fade-leave-active {\n\t\ttransition: opacity .3s;\n\t}\n\t.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {\n\t\topacity: 0;\n\t}\n</style>\n"],sourceRoot:""}]),e.Z=a},10944:function(t,e,n){var o=n(40202);t.exports=(o.default||o).template({1:function(t,e,n,o,r){var i,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(i=a(n,"if").call(null!=e?e:t.nullContext||{},null!=(i=null!=e?a(e,"contact"):e)?a(i,"profileUrl"):i,{name:"if",hash:{},fn:t.program(2,r,0),inverse:t.program(5,r,0),data:r,loc:{start:{line:2,column:1},end:{line:10,column:8}}}))?i:""},2:function(t,e,n,o,r){var i,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(i=a(n,"if").call(null!=e?e:t.nullContext||{},null!=(i=null!=e?a(e,"contact"):e)?a(i,"profileTitle"):i,{name:"if",hash:{},fn:t.program(3,r,0),inverse:t.noop,data:r,loc:{start:{line:3,column:2},end:{line:7,column:9}}}))?i:""},3:function(t,e,n,o,r){var i,a=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(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"profileUrl"):i,e))+'">\n\t\t\t\t<img src="'+s(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"avatar"):i,e))+'&size=32" class="avatar" srcset="'+s(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"avatar"):i,e))+"&size=32 1x, "+s(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"avatar"):i,e))+"&size=64 2x, "+s(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"avatar"):i,e))+'&size=128 4x" alt="">\n\t\t\t</a>\n'},5:function(t,e,n,o,r){var i,a=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(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"avatar"):i,e))+'&size=32" class="avatar" srcset="'+s(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"avatar"):i,e))+"&size=32 1x, "+s(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"avatar"):i,e))+"&size=64 2x, "+s(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"avatar"):i,e))+'&size=128 4x" alt="">\n'},7:function(t,e,n,o,r){var i,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(i=a(n,"if").call(null!=e?e:t.nullContext||{},null!=(i=null!=e?a(e,"contact"):e)?a(i,"profileUrl"):i,{name:"if",hash:{},fn:t.program(8,r,0),inverse:t.program(11,r,0),data:r,loc:{start:{line:12,column:1},end:{line:20,column:8}}}))?i:""},8:function(t,e,n,o,r){var i,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(i=a(n,"if").call(null!=e?e:t.nullContext||{},null!=(i=null!=e?a(e,"contact"):e)?a(i,"profileTitle"):i,{name:"if",hash:{},fn:t.program(9,r,0),inverse:t.noop,data:r,loc:{start:{line:13,column:2},end:{line:17,column:9}}}))?i:""},9:function(t,e,n,o,r){var i,a=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!=(i=null!=e?a(e,"contact"):e)?a(i,"profileUrl"):i,e))+'">\n\t\t\t\t<div class="avatar"></div>\n\t\t\t</a>\n'},11:function(t,e,n,o,r){return'\t\t<div class="avatar"></div>\n'},13:function(t,e,n,o,r){var i,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(i=a(n,"if").call(null!=e?e:t.nullContext||{},null!=(i=null!=e?a(e,"contact"):e)?a(i,"profileTitle"):i,{name:"if",hash:{},fn:t.program(14,r,0),inverse:t.noop,data:r,loc:{start:{line:23,column:1},end:{line:29,column:8}}}))?i:""},14:function(t,e,n,o,r){var i,a=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(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"profileUrl"):i,e))+'">\n\t\t\t<div class="full-name">'+s(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"fullName"):i,e))+'</div>\n\t\t\t<div class="last-message">'+s(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"lastMessage"):i,e))+'</div>\n\t\t\t<div class="email-address">'+s(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"emailAddresses"):i,e))+"</div>\n\t\t</a>\n"},16:function(t,e,n,o,r){var i,a=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(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"fullName"):i,e))+'</div>\n\t\t<div class="last-message">'+s(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"lastMessage"):i,e))+'</div>\n\t\t<div class="email-address">'+s(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"emailAddresses"):i,e))+"</div>\n\t</div>\n"},18:function(t,e,n,o,r){var i,a=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<a class="top-action" href="'+s(a(null!=(i=null!=(i=null!=e?l(e,"contact"):e)?l(i,"topAction"):i)?l(i,"hyperlink"):i,e))+'" title="'+s(a(null!=(i=null!=(i=null!=e?l(e,"contact"):e)?l(i,"topAction"):i)?l(i,"title"):i,e))+'">\n\t<img src="'+s(a(null!=(i=null!=(i=null!=e?l(e,"contact"):e)?l(i,"topAction"):i)?l(i,"icon"):i,e))+'" alt="'+s(a(null!=(i=null!=(i=null!=e?l(e,"contact"):e)?l(i,"topAction"):i)?l(i,"title"):i,e))+'">\n</a>\n'},20:function(t,e,n,o,r){var i,a=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(a(null!=(i=null!=(i=null!=e?l(e,"contact"):e)?l(i,"secondAction"):i)?l(i,"hyperlink"):i,e))+'" title="'+s(a(null!=(i=null!=(i=null!=e?l(e,"contact"):e)?l(i,"secondAction"):i)?l(i,"title"):i,e))+'">\n\t<img src="'+s(a(null!=(i=null!=(i=null!=e?l(e,"contact"):e)?l(i,"secondAction"):i)?l(i,"icon"):i,e))+'" alt="'+s(a(null!=(i=null!=(i=null!=e?l(e,"contact"):e)?l(i,"secondAction"):i)?l(i,"title"):i,e))+'">\n</a>\n'},22:function(t,e,n,o,r){var i,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t<span class="other-actions icon-more"></span>\n\t<div class="menu popovermenu">\n\t\t<ul>\n'+(null!=(i=a(n,"each").call(null!=e?e:t.nullContext||{},null!=(i=null!=e?a(e,"contact"):e)?a(i,"actions"):i,{name:"each",hash:{},fn:t.program(23,r,0),inverse:t.noop,data:r,loc:{start:{line:51,column:3},end:{line:58,column:12}}}))?i:"")+"\t\t</ul>\n\t</div>\n"},23:function(t,e,n,o,r){var i,a=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(i=null!=(i=u(n,"hyperlink")||(null!=e?u(e,"hyperlink"):e))?i:s)===l?i.call(a,{name:"hyperlink",hash:{},data:r,loc:{start:{line:53,column:13},end:{line:53,column:26}}}):i)+'">\n\t\t\t\t\t<img src="'+c(typeof(i=null!=(i=u(n,"icon")||(null!=e?u(e,"icon"):e))?i:s)===l?i.call(a,{name:"icon",hash:{},data:r,loc:{start:{line:54,column:15},end:{line:54,column:23}}}):i)+'" alt="">\n\t\t\t\t\t<span>'+c(typeof(i=null!=(i=u(n,"title")||(null!=e?u(e,"title"):e))?i:s)===l?i.call(a,{name:"title",hash:{},data:r,loc:{start:{line:55,column:11},end:{line:55,column:20}}}):i)+"</span>\n\t\t\t\t</a>\n\t\t\t</li>\n"},compiler:[8,">= 4.3.0"],main:function(t,e,n,o,r){var i,a=null!=e?e:t.nullContext||{},s=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return(null!=(i=s(n,"if").call(a,null!=(i=null!=e?s(e,"contact"):e)?s(i,"avatar"):i,{name:"if",hash:{},fn:t.program(1,r,0),inverse:t.program(7,r,0),data:r,loc:{start:{line:1,column:0},end:{line:21,column:7}}}))?i:"")+(null!=(i=s(n,"if").call(a,null!=(i=null!=e?s(e,"contact"):e)?s(i,"profileUrl"):i,{name:"if",hash:{},fn:t.program(13,r,0),inverse:t.program(16,r,0),data:r,loc:{start:{line:22,column:0},end:{line:36,column:7}}}))?i:"")+(null!=(i=s(n,"if").call(a,null!=(i=null!=e?s(e,"contact"):e)?s(i,"topAction"):i,{name:"if",hash:{},fn:t.program(18,r,0),inverse:t.noop,data:r,loc:{start:{line:37,column:0},end:{line:41,column:7}}}))?i:"")+(null!=(i=s(n,"if").call(a,null!=(i=null!=e?s(e,"contact"):e)?s(i,"hasTwoActions"):i,{name:"if",hash:{},fn:t.program(20,r,0),inverse:t.noop,data:r,loc:{start:{line:42,column:0},end:{line:46,column:7}}}))?i:"")+(null!=(i=s(n,"if").call(a,null!=(i=null!=e?s(e,"contact"):e)?s(i,"hasManyActions"):i,{name:"if",hash:{},fn:t.program(22,r,0),inverse:t.noop,data:r,loc:{start:{line:47,column:0},end:{line:61,column:7}}}))?i:"")},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,r){var i,a=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(i=null!=(i=a(n,"couldNotLoadText")||(null!=e?a(e,"couldNotLoadText"):e))?i:t.hooks.helperMissing)?i.call(null!=e?e:t.nullContext||{},{name:"couldNotLoadText",hash:{},data:r,loc:{start:{line:3,column:5},end:{line:3,column:25}}}):i)+"</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,r){var i,a=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(i=null!=(i=a(n,"noContactsFoundText")||(null!=e?a(e,"noContactsFoundText"):e))?i:t.hooks.helperMissing)?i.call(null!=e?e:t.nullContext||{},{name:"noContactsFoundText",hash:{},data:r,loc:{start:{line:4,column:5},end:{line:4,column:28}}}):i)+"</h2>\n</div>\n"},3:function(t,e,n,o,r){var i,a=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(i=null!=(i=u(n,"contactsAppURL")||(null!=e?u(e,"contactsAppURL"):e))?i:s)===l?i.call(a,{name:"contactsAppURL",hash:{},data:r,loc:{start:{line:9,column:29},end:{line:9,column:47}}}):i)+'">'+c(typeof(i=null!=(i=u(n,"showAllContactsText")||(null!=e?u(e,"showAllContactsText"):e))?i:s)===l?i.call(a,{name:"showAllContactsText",hash:{},data:r,loc:{start:{line:9,column:49},end:{line:9,column:72}}}):i)+"</a></div>\n"},5:function(t,e,n,o,r){var i,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(i=a(n,"if").call(null!=e?e:t.nullContext||{},null!=e?a(e,"canInstallApp"):e,{name:"if",hash:{},fn:t.program(6,r,0),inverse:t.noop,data:r,loc:{start:{line:10,column:0},end:{line:12,column:0}}}))?i:""},6:function(t,e,n,o,r){var i,a=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(i=null!=(i=u(n,"contactsAppMgmtURL")||(null!=e?u(e,"contactsAppMgmtURL"):e))?i:s)===l?i.call(a,{name:"contactsAppMgmtURL",hash:{},data:r,loc:{start:{line:11,column:29},end:{line:11,column:51}}}):i)+'">'+c(typeof(i=null!=(i=u(n,"contactsAppMgmtText")||(null!=e?u(e,"contactsAppMgmtText"):e))?i:s)===l?i.call(a,{name:"contactsAppMgmtText",hash:{},data:r,loc:{start:{line:11,column:53},end:{line:11,column:76}}}):i)+"</a></div>\n"},compiler:[8,">= 4.3.0"],main:function(t,e,n,o,r){var i,a=null!=e?e:t.nullContext||{},s=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return(null!=(i=s(n,"unless").call(a,null!=(i=null!=e?s(e,"contacts"):e)?s(i,"length"):i,{name:"unless",hash:{},fn:t.program(1,r,0),inverse:t.noop,data:r,loc:{start:{line:1,column:0},end:{line:6,column:11}}}))?i:"")+'<div id="contactsmenu-contacts"></div>\n'+(null!=(i=s(n,"if").call(a,null!=e?s(e,"contactsAppEnabled"):e,{name:"if",hash:{},fn:t.program(3,r,0),inverse:t.program(5,r,0),data:r,loc:{start:{line:8,column:0},end:{line:12,column:7}}}))?i:"")},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,r){var i,a=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(i=null!=(i=a(n,"loadingText")||(null!=e?a(e,"loadingText"):e))?i:t.hooks.helperMissing)?i.call(null!=e?e:t.nullContext||{},{name:"loadingText",hash:{},data:r,loc:{start:{line:3,column:5},end:{line:3,column:20}}}):i)+"</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,r){var i,a=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(i=null!=(i=u(n,"searchContactsText")||(null!=e?u(e,"searchContactsText"):e))?i:s)===l?i.call(a,{name:"searchContactsText",hash:{},data:r,loc:{start:{line:1,column:57},end:{line:1,column:79}}}):i)+'</label>\n<input id="contactsmenu-search" type="search" placeholder="'+c(typeof(i=null!=(i=u(n,"searchContactsText")||(null!=e?u(e,"searchContactsText"):e))?i:s)===l?i.call(a,{name:"searchContactsText",hash:{},data:r,loc:{start:{line:2,column:59},end:{line:2,column:81}}}):i)+'" value="'+c(typeof(i=null!=(i=u(n,"searchTerm")||(null!=e?u(e,"searchTerm"):e))?i:s)===l?i.call(a,{name:"searchTerm",hash:{},data:r,loc:{start:{line:2,column:90},end:{line:2,column:104}}}):i)+'">\n<div class="content">\n</div>\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 r(t){var e=i(t);return n(e)}function i(t){if(!n.o(o,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return o[t]}r.keys=function(){return Object.keys(o)},r.resolve=i,t.exports=r,r.id=46700}},r={};function i(t){var e=r[t];if(void 0!==e)return e.exports;var n=r[t]={id:t,loaded:!1,exports:{}};return o[t].call(n.exports,n,n.exports,i),n.loaded=!0,n.exports}i.m=o,i.amdD=function(){throw new Error("define cannot be used indirect")},i.amdO={},e=[],i.O=function(t,n,o,r){if(!n){var a=1/0;for(u=0;u<e.length;u++){n=e[u][0],o=e[u][1],r=e[u][2];for(var s=!0,l=0;l<n.length;l++)(!1&r||a>=r)&&Object.keys(i.O).every((function(t){return i.O[t](n[l])}))?n.splice(l--,1):(s=!1,r<a&&(a=r));if(s){e.splice(u--,1);var c=o();void 0!==c&&(t=c)}}return t}r=r||0;for(var u=e.length;u>0&&e[u-1][2]>r;u--)e[u]=e[u-1];e[u]=[n,o,r]},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,{a:e}),e},i.d=function(t,e){for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},i.j=4577,function(){i.b=document.baseURI||self.location.href;var t={4577:0};i.O.j=function(e){return 0===t[e]};var e=function(e,n){var o,r,a=n[0],s=n[1],l=n[2],c=0;if(a.some((function(e){return 0!==t[e]}))){for(o in s)i.o(s,o)&&(i.m[o]=s[o]);if(l)var u=l(i)}for(e&&e(n);c<a.length;c++)r=a[c],i.o(t,r)&&t[r]&&t[r][0](),t[r]=0;return i.O(u)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))}();var a=i.O(void 0,[7874],(function(){return i(10473)}));a=i.O(a)}();
-//# sourceMappingURL=core-login.js.map?v=44a989243446297134dd \ No newline at end of file
+!function(){var e,o={10473:function(e,o,r){"use strict";var i=r(20144),a=r(74854),s=r(19755),l=r.n(s),c=r(79753),u={},d=[],p=r(64492),f=r(26932),h={updatableNotification:null,getDefaultNotificationFunction:null,setDefault:function(t){this.getDefaultNotificationFunction=t},hide:function(t,e){p.default.isFunction(t)&&(e=t,t=void 0),t?(t.each((function(){l()(this)[0].toastify?l()(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:f.Rl;var n=(0,f.PV)(t,e);return n.toastElement.toastify=n,l()(n.toastElement)},show:function(t,e){(e=e||{}).timeout=e.timeout?e.timeout:f.Rl;var n=(0,f.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,l()(n.toastElement)},showUpdate:function(t){return this.updatableNotification&&this.updatableNotification.hideToast(),this.updatableNotification=(0,f.PV)(t,{timeout:f.Rl}),this.updatableNotification.toastElement.toastify=this.updatableNotification,l()(this.updatableNotification.toastElement)},showTemporary:function(t,e){(e=e||{}).timeout=e.timeout||f.TN;var n=(0,f.PV)(t,e);return n.toastElement.toastify=n,l()(n.toastElement)},isHidden:function(){return!l()("#content").find(".toastify").length}},m=p.default.throttle((function(){h.showTemporary(t("core","Connection to server lost"))}),7e3,{trailing:!1}),g={enableDynamicSlideToggle:function(){},showAppSidebar:function(t){(t||l()("#app-sidebar")).removeClass("disappear").show(),l()("#app-content").trigger(new(l().Event)("appresized"))},hideAppSidebar:function(t){(t||l()("#app-sidebar")).hide().addClass("disappear"),l()("#app-content").trigger(new(l().Event)("appresized"))}};function v(t,e,n){"post"!==t&&"delete"!==t||!Ut.PasswordConfirmation.requiresPasswordConfirmation()?(n=n||{},l().ajax({type:t.toUpperCase(),url:(0,c.generateOcsUrl)("apps/provisioning_api/api/v1/config/apps")+e,data:n.data||{},success:n.success,error:n.error})):Ut.PasswordConfirmation.requirePasswordConfirmation(_.bind(v,this,t,e,n))}var w=window.oc_appconfig||{},y={getValue:function(t,e,n,o){!function(t,e,n,o){(o=o||{}).data={defaultValue:n},v("get","/"+t+"/"+e,o)}(t,e,n,{success:o})},setValue:function(t,e,n){!function(t,e,n,o){(o=o||{}).data={value:n},v("post","/"+t+"/"+e,o)}(t,e,n)},getApps:function(t){!function(t){v("get","",t)}({success:t})},getKeys:function(t,e){!function(t,e){v("get","/"+t,e)}(t,{success:e})},deleteKey:function(t,e){!function(t,e,n){v("delete","/"+t+"/"+e,void 0)}(t,e)}},b=void 0!==window._oc_appswebroots&&window._oc_appswebroots,P=r(72316),C=r.n(P),k=r(87240),x={create:"POST",update:"PROPPATCH",patch:"PROPPATCH",delete:"DELETE",read:"PROPFIND"};function T(t,e){if(p.default.isArray(t))return p.default.map(t,(function(t){return T(t,e)}));var n={href:t.href};return p.default.each(t.propStat,(function(t){if("HTTP/1.1 200 OK"===t.status)for(var o in t.properties){var r=o;o in e&&(r=e[o]),n[r]=t.properties[o]}})),n.id||(n.id=O(n.href)),n}function O(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 A(t){return t>=200&&t<=299}function S(t,e,n,o){return t.propPatch(e.url,function(t,e){var n,o={};for(n in t){var r=e[n],i=t[n];r||(console.warn('No matching DAV property for property "'+n),r=n),(p.default.isBoolean(i)||p.default.isNumber(i))&&(i=""+i),o[r]=i}return o}(n.changed,e.davProperties),o).then((function(t){A(t.status)?p.default.isFunction(e.success)&&e.success(n.toJSON()):p.default.isFunction(e.error)&&e.error(t)}))}var E=C().noConflict();Object.assign(E,{davCall:function(t,e){var n=new k.dav.Client({baseUrl:t.url,xmlNamespaces:p.default.extend({"DAV:":"d","http://owncloud.org/ns":"oc"},t.xmlNamespaces||{})});n.resolveUrl=function(){return t.url};var o=p.default.extend({"X-Requested-With":"XMLHttpRequest",requesttoken:OC.requestToken},t.headers);return"PROPFIND"===t.type?function(t,e,n,o){return t.propFind(e.url,p.default.values(e.davProperties)||[],e.depth,o).then((function(t){if(A(t.status)){if(p.default.isFunction(e.success)){var n=p.default.invert(e.davProperties),o=T(t.body,n);e.depth>0&&o.shift(),e.success(o)}}else p.default.isFunction(e.error)&&e.error(t)}))}(n,t,0,o):"PROPPATCH"===t.type?S(n,t,e,o):"MKCOL"===t.type?function(t,e,n,o){return t.request(e.type,e.url,o,null).then((function(r){A(r.status)?S(t,e,n,o):p.default.isFunction(e.error)&&e.error(r)}))}(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(A(t.status)){if(p.default.isFunction(e.success)){if("PUT"===e.type||"POST"===e.type||"MKCOL"===e.type){var o=t.body||n.toJSON(),r=t.xhr.getResponseHeader("Content-Location");return"POST"===e.type&&r&&(o.id=O(r)),void e.success(o)}if(207===t.status){var i=p.default.invert(e.davProperties);e.success(T(t.body,i))}else e.success(t.body)}}else p.default.isFunction(e.error)&&e.error(t)}))}(n,t,e,o)},davSync:function(t){return function(e,n,o){var r={type:x[e]||e},i=n instanceof t.Collection;if("update"===e&&(n.hasInnerCollection?r.type="MKCOL":(n.usePUT||n.collection&&n.collection.usePUT)&&(r.type="PUT")),o.url||(r.url=p.default.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||(r.data=JSON.stringify(o.attrs||n.toJSON(o))),"PROPFIND"!==r.type&&(r.processData=!1),"PROPFIND"===r.type||"PROPPATCH"===r.type){var a=n.davProperties;!a&&n.model&&(a=n.model.prototype.davProperties),a&&(p.default.isFunction(a)?r.davProperties=a.call(n):r.davProperties=a),r.davProperties=p.default.extend(r.davProperties||{},o.davProperties),p.default.isUndefined(o.depth)&&(o.depth=i?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(p.default.extend(r,o),n);return n.trigger("request",n,l,o),l}}(E)});var j=E,L=r(76632),U=window._oc_config||{},I=P.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)}}),R=P.Collection.extend({model:I}),F=P.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 $({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)}))}}),$=P.View.extend({className:"contact",_template:void 0,_model:void 0,_actionMenuShown:!1,events:{"click .icon-more":"_onToggleActionsMenu"},contactTemplate:r(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())}}),N=P.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:r(95386),error:r(20421),menu:r(66115),list:r(34083)},_onSearch:p.default.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(p.default.extend({couldNotLoadText:t("core","Could not load your contacts")},e))},contentTemplate:function(e){return this.templates.menu(p.default.extend({searchContactsText:t("core","Search contacts …")},e))},contactsTemplate:function(e){return this.templates.list(p.default.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 F({collection:t.contacts});n.render(),this.$(".content").html(this.contactsTemplate({contacts:t.contacts,searchTerm:e,contactsAppEnabled:t.contactsAppEnabled,contactsAppURL:Ut.generateUrl("/apps/contacts"),canInstallApp:Ut.isUserAdmin(),contactsAppMgmtURL:Ut.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}}),M=function(t){this.initialize(t)};M.prototype={$el:void 0,_$trigger:void 0,_view:void 0,_contactsPromise:void 0,initialize:function(t){this.$el=t.el,this._$trigger=t.trigger,this._view=new N({el:this.$el}),this._view.on("search",(function(t){this._loadContacts(t)}),this),Ut.registerMenu(this._$trigger,this.$el,function(){this._toggleVisibility(!0)}.bind(this),!0),this.$el.on("beforeHide",function(){this._toggleVisibility(!1)}.bind(this))},_toggleVisibility:function(t){return t?this._loadContacts():(this.$el.html(""),Promise.resolve())},_getContacts:function(t){var e=Ut.generateUrl("/contactsmenu/contacts");return Promise.resolve(l().ajax(e,{method:"POST",data:{filter:t}}))},_loadContacts:function(e){var n=this;return n._contactsPromise||(n._contactsPromise=n._getContacts(e)),p.default.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 R(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 z=M,D=document.getElementsByTagName("head")[0].getAttribute("data-user"),B=document.getElementsByTagName("head")[0].getAttribute("data-user-displayname"),q=void 0!==D&&D;function H(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,o.key,o)}}function Y(t,e,n){return e&&H(t.prototype,e),n&&H(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}var K={Search:Y((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")}))};function G(t){return G="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},G(t)}var V,Z,W,J={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",J.OK_BUTTON,n,o)},info:function(t,e,n,o){this.message(t,e,"info",J.OK_BUTTON,n,o)},confirm:function(t,e,n,o){return this.message(t,e,"notice",J.YES_NO_BUTTONS,n,o)},confirmDestructive:function(t,e,n,o,r){return this.message(t,e,"none",n,o,void 0===r||r)},confirmHtml:function(t,e,n,o){return this.message(t,e,"notice",J.YES_NO_BUTTONS,n,o,!0)},prompt:function(e,n,o,r,i,a){return l().when(this._getMessageTemplate()).then((function(s){var c="oc-dialog-"+J.dialogsCounter+"-content",u="#"+c,d=s.octemplate({dialog_name:c,title:n,message:e,type:"notice"}),f=l()("<input/>");f.attr("type",a?"password":"text").attr("id",c+"-input").attr("placeholder",i);var h=l()("<label/>").attr("for",c+"-input").text(i+": ");d.append(h),d.append(f),void 0===r&&(r=!1),l()("body").append(d),void 0!==o&&(o=p.default.once(o));var m=[{text:t("core","No"),click:function(){void 0!==o&&o(!1,f.val()),l()(u).ocdialog("close")}},{text:t("core","Yes"),click:function(){void 0!==o&&o(!0,f.val()),l()(u).ocdialog("close")},defaultButton:!0}];l()(u).ocdialog({closeOnEscape:!0,modal:r,buttons:m,close:function(){void 0!==o&&o(!1,f.val())}}),f.focus(),J.dialogsCounter++}))},filepicker:function(e,n,o,r,i,a,s,c){var u=this;if(this.filepicker.sortField="name",this.filepicker.sortOrder="asc",!this.filepicker.loading){void 0===a&&(a=this.FILEPICKER_TYPE_CHOOSE);var d=t("core","No files in here"),f=t("files","New folder");a!==this.FILEPICKER_TYPE_COPY&&a!==this.FILEPICKER_TYPE_MOVE&&a!==this.FILEPICKER_TYPE_COPY_MOVE||(d=t("core","No more subfolders in here")),this.filepicker.loading=!0,this.filepicker.filesClient=K.Sharing&&K.Sharing.PublicApp&&K.Sharing.PublicApp.fileList?K.Sharing.PublicApp.fileList.filesClient:Ut.Files.getClient(),this.filelist=null,s=s||"",c=Object.assign({allowDirectoryChooser:!1},c),l().when(this._getFilePickerTemplate()).then((function(h){u.filepicker.loading=!1,u.$filePicker&&u.$filePicker.ocdialog("close"),null==r&&(r=[]),"string"==typeof r&&(r=[r]),u.$filePicker=h.octemplate({dialog_name:"oc-dialog-filepicker-content",title:e,emptytext:d,newtext:f,nameCol:t("core","Name"),sizeCol:t("core","Size"),modifiedCol:t("core","Modified")}).data("path",s).data("multiselect",o).data("mimetype",r).data("allowDirectoryChooser",c.allowDirectoryChooser),void 0===i&&(i=!1),void 0===o&&(o=!1),u.$filePicker.find("#picker-view-toggle").remove(),u.$filePicker.find("#picker-filestable").removeClass("view-grid"),l()("body").append(u.$filePicker),u.$showGridView=l()("input#picker-showgridview"),u.$showGridView.on("change",p.default.bind(u._onGridviewChange,u)),u._getGridSettings();var m=u.$filePicker.find(".actions.creatable .button-add");a!==u.FILEPICKER_TYPE_CHOOSE||c.allowDirectoryChooser||m.hide(),m.on("focus",(function(){u.$filePicker.ocdialog("setEnterCallback",(function(){event.stopImmediatePropagation(),event.preventDefault(),m.click()}))})),m.on("blur",(function(){u.$filePicker.ocdialog("unsetEnterCallback")})),Ut.registerMenu(m,u.$filePicker.find(".menu"),(function(){v.tooltip("hide"),v.focus(),u.$filePicker.ocdialog("setEnterCallback",(function(){event.stopImmediatePropagation(),event.preventDefault(),u.$filePicker.submit()}));var t=v.val(),e=t.lastIndexOf(".");-1===e&&(e=t.length),v.selectRange(0,e)}));var g=u.$filePicker.find(".filenameform"),v=g.find("input[type='text']");g.find("input[type='submit']").on("click",(function(t){t.stopImmediatePropagation(),t.preventDefault(),g.submit()}));g.on("submit",(function(e){if(e.stopPropagation(),e.preventDefault(),function(){var e=v.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(Ut.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){v.attr("title",t),v.tooltip({placement:"right",trigger:"manual",container:".newFolderMenu"}),v.tooltip("_fixTitle"),v.tooltip("show"),v.addClass("error")}return!1}()){var n=v.val();u.filepicker.filesClient.createDirectory(u.$filePicker.data("path")+"/"+n).always((function(t){u._fillFilePicker(u.$filePicker.data("path")+"/"+n)})),Ut.hideMenus(),u.$filePicker.ocdialog("unsetEnterCallback"),u.$filePicker.click(),v.val(f)}})),v.keypress((function(t){13!==t.keyCode&&13!==t.which||(t.stopImmediatePropagation(),t.preventDefault(),g.submit())})),v.on("input",(function(t){v.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","div:not(:last-child)",u,(function(t){u._handleTreeListSelect(t,a)})),u.$filelist.on("click","tr",(function(t){u._handlePickerClick(t,l()(this),a)})),u.$fileListHeader.on("click","a",(function(t){var e=u.$filePicker.data("path");u.filepicker.sortField=l()(t.currentTarget).data("sort"),u.filepicker.sortOrder="asc"===u.filepicker.sortOrder?"desc":"asc",u._fillFilePicker(e)})),u._fillFilePicker(s)}));var w=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")+"/"+l()(n).data("entryname"))}));else{e=u.$filePicker.data("path");var r=u.$filelist.find("tr.filepicker_element_selected").data("entryname");r&&(e+="/"+r)}n(e,t),u.$filePicker.ocdialog("close")}},y=[];a===J.FILEPICKER_TYPE_CHOOSE?y.push({text:t("core","Choose"),click:function(){w(J.FILEPICKER_TYPE_CHOOSE)},defaultButton:!0}):a===J.FILEPICKER_TYPE_CUSTOM?c.buttons.forEach((function(t){y.push({text:t.text,click:function(){w(t.type)},defaultButton:t.defaultButton})})):(a!==J.FILEPICKER_TYPE_COPY&&a!==J.FILEPICKER_TYPE_COPY_MOVE||y.push({text:t("core","Copy"),click:function(){w(J.FILEPICKER_TYPE_COPY)},defaultButton:!1}),a!==J.FILEPICKER_TYPE_MOVE&&a!==J.FILEPICKER_TYPE_COPY_MOVE||y.push({text:t("core","Move"),click:function(){w(J.FILEPICKER_TYPE_MOVE)},defaultButton:!0})),u.$filePicker.ocdialog({closeOnEscape:!0,width:600,height:500,modal:i,buttons:y,style:{buttons:"aside"},close:function(){try{l()(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,r,i,a,s){return l().when(this._getMessageTemplate()).then((function(c){var u="oc-dialog-"+J.dialogsCounter+"-content",d="#"+u,p=c.octemplate({dialog_name:u,title:n,message:e,type:o},s?{escapeFunction:""}:{});void 0===a&&(a=!1),l()("body").append(p);var f=[];switch(r){case J.YES_NO_BUTTONS:f=[{text:t("core","No"),click:function(){void 0!==i&&i(!1),l()(d).ocdialog("close")}},{text:t("core","Yes"),click:function(){void 0!==i&&i(!0),l()(d).ocdialog("close")},defaultButton:!0}];break;case J.OK_BUTTON:f[0]={text:t("core","OK"),click:function(){l()(d).ocdialog("close"),void 0!==i&&i()},defaultButton:!0};break;default:"object"===G(r)&&r.type===J.YES_NO_BUTTONS&&(f=[{text:r.cancel||t("core","No"),click:function(){void 0!==i&&i(!1),l()(d).ocdialog("close")}},{text:r.confirm||t("core","Yes"),click:function(){void 0!==i&&i(!0),l()(d).ocdialog("close")},defaultButton:!0,classes:r.confirmClasses}])}l()(d).ocdialog({closeOnEscape:!0,closeCallback:function(){i&&i(!1)},modal:a,buttons:f}),J.dialogsCounter++})).fail((function(o,r){0===o?alert(n+": "+e):alert(t("core","Error loading message template: {error}",{error:r}))}))},_fileexistsshown:!1,fileexists:function(e,o,r,i){var a=this,s=new(l().Deferred),c=function(t,e,n,o,r){o=Math.round(o),r=Math.round(r);for(var i=t.getContext("2d").getImageData(0,0,e,n),a=t.getContext("2d").getImageData(0,0,o,r),s=i.data,l=a.data,c=e/o,u=n/r,d=Math.ceil(c/2),p=Math.ceil(u/2),f=0;f<r;f++)for(var h=0;h<o;h++){for(var m=4*(h+f*o),g=0,v=0,w=0,y=0,b=0,_=0,P=0,C=(f+.5)*u,k=Math.floor(f*u);k<(f+1)*u;k++)for(var x=Math.abs(C-(k+.5))/p,T=(h+.5)*c,O=x*x,A=Math.floor(h*c);A<(h+1)*c;A++){var S=Math.abs(T-(A+.5))/d,E=Math.sqrt(O+S*S);E>=-1&&E<=1&&(g=2*E*E*E-3*E*E+1)>0&&(P+=g*s[3+(S=4*(A+k*e))],w+=g,s[S+3]<255&&(g=g*s[S+3]/250),y+=g*s[S],b+=g*s[S+1],_+=g*s[S+2],v+=g)}l[m]=y/v,l[m+1]=b/v,l[m+2]=_/v,l[m+3]=P/w}t.getContext("2d").clearRect(0,0,Math.max(e,o),Math.max(n,r)),t.width=o,t.height=r,t.getContext("2d").putImageData(a,0,0)},u=function(n,o,r){var i=n.find(".template").clone().removeClass("template").addClass("conflict"),a=i.find(".original"),s=i.find(".replacement");i.data("data",e),i.find(".filename").text(o.name),a.find(".size").text(Ut.Util.humanFileSize(o.size)),a.find(".mtime").text(Ut.Util.formatDate(o.mtime)),r.size&&r.lastModified&&(s.find(".size").text(Ut.Util.humanFileSize(r.size)),s.find(".mtime").text(Ut.Util.formatDate(r.lastModified)));var u=o.directory+"/"+o.name,d={file:u,x:96,y:96,c:o.etag,forceIcon:0},p=Files.generatePreviewUrl(d);p=p.replace(/'/g,"%27"),a.find(".icon").css({"background-image":"url('"+p+"')"}),function(t){var e=new(l().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),r=new Image;r.src=o,r.onload=function(){var t,n,o,i,a,s,l,u=(t=r,a=document.createElement("canvas"),s=t.width,l=t.height,s>l?(o=0,n=(s-l)/2):(o=(l-s)/2,n=0),i=Math.min(s,l),a.width=i,a.height=i,a.getContext("2d").drawImage(t,n,o,i,i,0,0,i,i),c(a,i,i,96,96),a.toDataURL("image/png",.7));e.resolve(u)}},o.readAsArrayBuffer(t)}else e.reject();return e}(r).then((function(t){s.find(".icon").css("background-image","url("+t+")")}),(function(){u=Ut.MimeType.getIconUrl(r.type),s.find(".icon").css("background-image","url("+u+")")}));var f=n.find(".conflict").length;a.find("input:checkbox").attr("id","checkbox_original_"+f),s.find("input:checkbox").attr("id","checkbox_replacement_"+f),n.append(i),r.lastModified>o.mtime?s.find(".mtime").css("font-weight","bold"):r.lastModified<o.mtime&&a.find(".mtime").css("font-weight","bold"),r.size&&r.size>o.size?s.find(".size").css("font-weight","bold"):r.size&&r.size<o.size&&a.find(".size").css("font-weight","bold"),"readonly"===o.status&&(a.addClass("readonly").find('input[type="checkbox"]').prop("checked",!0).prop("disabled",!0),a.find(".message").text(t("core","read-only")))},d="oc-dialog-fileexists-content",p="#"+d;if(this._fileexistsshown){var f=l()(p+" .conflicts");u(f,o,r);var h=l()(p+" .conflict").length,m=n("core","{count} file conflict","{count} file conflicts",h,{count:h});l()(p).parent().children(".oc-dialog-title").text(m),l()(window).trigger("resize"),s.resolve()}else this._fileexistsshown=!0,l().when(this._getFileExistsTemplate()).then((function(n){var c=t("core","One file conflict"),f=n.octemplate({dialog_name:d,title:c,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(l()("body").append(f),o&&r){var h=f.find(".conflicts");u(h,o,r)}var m=[{text:t("core","Cancel"),classes:"cancel",click:function(){void 0!==i.onCancel&&i.onCancel(e),l()(p).ocdialog("close")}},{text:t("core","Continue"),classes:"continue",click:function(){void 0!==i.onContinue&&i.onContinue(l()(p+" .conflict")),l()(p).ocdialog("close")}}];l()(p).ocdialog({width:500,closeOnEscape:!0,modal:!0,buttons:m,closeButton:null,close:function(){a._fileexistsshown=!1;try{l()(this).ocdialog("destroy").remove()}catch(t){}}}),l()(p).css("height","auto");var g=f.closest(".oc-dialog").find("button.continue");function v(){var t=f.find(".conflicts .checkbox:checked").length;g.prop("disabled",0===t)}g.prop("disabled",!0),l()(p).find(".allnewfiles").on("click",(function(){l()(p).find('.conflict .replacement input[type="checkbox"]').prop("checked",l()(this).prop("checked"))})),l()(p).find(".allexistingfiles").on("click",(function(){l()(p).find('.conflict .original:not(.readonly) input[type="checkbox"]').prop("checked",l()(this).prop("checked"))})),l()(p).find(".conflicts").on("click",".replacement,.original:not(.readonly)",(function(){var t=l()(this).find('input[type="checkbox"]');t.prop("checked",!t.prop("checked"))})),l()(p).find(".conflicts").on("click",'.replacement input[type="checkbox"],.original:not(.readonly) input[type="checkbox"]',(function(){var t=l()(this);t.prop("checked",!t.prop("checked"))})),l()(p).on("click",".replacement,.allnewfiles",(function(){var e=l()(p).find('.conflict .replacement input[type="checkbox"]:checked').length;e===l()(p+" .conflict").length?(l()(p).find(".allnewfiles").prop("checked",!0),l()(p).find(".allnewfiles + .count").text(t("core","(all selected)"))):e>0?(l()(p).find(".allnewfiles").prop("checked",!1),l()(p).find(".allnewfiles + .count").text(t("core","({count} selected)",{count:e}))):(l()(p).find(".allnewfiles").prop("checked",!1),l()(p).find(".allnewfiles + .count").text("")),v()})),l()(p).on("click",".original,.allexistingfiles",(function(){var e=l()(p).find('.conflict .original input[type="checkbox"]:checked').length;e===l()(p+" .conflict").length?(l()(p).find(".allexistingfiles").prop("checked",!0),l()(p).find(".allexistingfiles + .count").text(t("core","(all selected)"))):e>0?(l()(p).find(".allexistingfiles").prop("checked",!1),l()(p).find(".allexistingfiles + .count").text(t("core","({count} selected)",{count:e}))):(l()(p).find(".allexistingfiles").prop("checked",!1),l()(p).find(".allexistingfiles + .count").text("")),v()})),s.resolve()})).fail((function(){s.reject(),alert(t("core","Error loading file exists template"))}));return s.promise()},_getGridSettings:function(){var t=this;l().get(Ut.generateUrl("/apps/files/api/v1/showgridview"),(function(e){t.$showGridView.get(0).checked=e.gridview,t.$showGridView.next("#picker-view-toggle").removeClass("icon-toggle-filelist icon-toggle-pictures").addClass(e.gridview?"icon-toggle-filelist":"icon-toggle-pictures"),l()(".list-container").toggleClass("view-grid",e.gridview)}))},_onGridviewChange:function(){var t=this.$showGridView.is(":checked");Ut.currentUser&&l().post(Ut.generateUrl("/apps/files/api/v1/showgridview"),{show:t}),this.$showGridView.next("#picker-view-toggle").removeClass("icon-toggle-filelist icon-toggle-pictures").addClass(t?"icon-toggle-filelist":"icon-toggle-pictures"),l()(".list-container").toggleClass("view-grid",t)},_getFilePickerTemplate:function(){var t=l().Deferred();if(this.$filePickerTemplate)t.resolve(this.$filePickerTemplate);else{var e=this;l().get(Ut.filePath("core","templates","filepicker.html"),(function(n){e.$filePickerTemplate=l()(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=l().Deferred();if(this.$messageTemplate)t.resolve(this.$messageTemplate);else{var e=this;l().get(Ut.filePath("core","templates","message.html"),(function(n){e.$messageTemplate=l()(n),t.resolve(e.$messageTemplate)})).fail((function(e,n,o){t.reject(e.status,o)}))}return t.promise()},_getFileExistsTemplate:function(){var t=l().Deferred();if(this.$fileexistsTemplate)t.resolve(this.$fileexistsTemplate);else{var e=this;l().get(Ut.filePath("files","templates","fileexists.html"),(function(n){e.$fileexistsTemplate=l()(n),t.resolve(e.$fileexistsTemplate)})).fail((function(){t.reject()}))}return t.promise()},_getFileList:function(t,e){return"string"==typeof e&&(e=[e]),l().getJSON(Ut.filePath("files","ajax","list.php"),{dir:t,mimetypes:JSON.stringify(e)})},_fillFilePicker:function(e){var n=this;this.$filelist.empty(),this.$filePicker.find(".emptycontent").hide(),this.$filelistContainer.addClass("icon-loading"),this.$filePicker.data("path",e);var o=this.$filePicker.data("mimetype");"string"==typeof o&&(o=[o]),n.$fileListHeader.find(".sort-indicator").addClass("hidden").removeClass("icon-triangle-n").removeClass("icon-triangle-s"),n.$fileListHeader.find("[data-sort="+n.filepicker.sortField+"] .sort-indicator").removeClass("hidden"),"asc"===n.filepicker.sortOrder?n.$fileListHeader.find("[data-sort="+n.filepicker.sortField+"] .sort-indicator").addClass("icon-triangle-n"):n.$fileListHeader.find("[data-sort="+n.filepicker.sortField+"] .sort-indicator").addClass("icon-triangle-s"),n.filepicker.filesClient.getFolderContents(e).then((function(r,i){n.filelist=i,o&&o.length>0&&-1===o.indexOf("*")&&(i=i.filter((function(t){return"dir"===t.type||-1!==o.indexOf(t.mimetype)})));var a=document.getElementById("showHiddenFiles");null===a||"1"===a.value||(i=i.filter((function(t){return!t.name.startsWith(".")})));var s={name:function(t,e){return"dir"===t.type&&"dir"!==e.type?-1:"dir"!==t.type&&"dir"===e.type?1:Ut.Util.naturalSortCompare(t.name,e.name)},size:function(t,e){return t.size-e.size},mtime:function(t,e){return t.mtime-e.mtime}},c=s[n.filepicker.sortField]||s.name;i=i.sort((function(t,e){var o=function(t){return t.tags&&t.tags.indexOf(Ut.TAG_FAVORITE)>=0};return o(t)&&!o(e)?-1:!o(t)&&o(e)?1:"asc"===n.filepicker.sortOrder?c(t,e):-c(t,e)})),n._fillSlug(),0===i.length?(n.$filePicker.find(".emptycontent").show(),n.$fileListHeader.hide()):(n.$filePicker.find(".emptycontent").hide(),n.$fileListHeader.show()),n.$filelist.empty(),l().each(i,(function(o,r){var i,a;if(r.icon=Ut.MimeType.getIconUrl(r.mimetype),void 0!==r.size&&r.size>=0?(i=Ut.Util.humanFileSize(parseInt(r.size,10),!0),a=Math.round(160-Math.pow(r.size/1048576,2))):(i=t("files","Pending"),a=80),r.name.length>=10)var s=Math.min(Math.floor(r.name.length/2),10),c=r.name.substr(0,r.name.length-s),u=r.name.substr(r.name.length-s);else c=r.name,u="";var d=n.$listTmpl.octemplate({type:r.type,dir:e,filename:r.name,filename1:c,filename2:u,date:Ut.Util.relativeModifiedDate(r.mtime),size:i,sizeColor:a,icon:r.icon});if("file"===r.type){var p={file:e+"/"+r.name,x:100,y:100},f=new Image,h=Ut.generateUrl("/core/preview.png?")+l().param(p);f.onload=function(){f.width>5&&d.find("td.filename").attr("style","background-image:url("+h+")")},f.src=h}n.$filelist.append(d)})),n.$filelistContainer.removeClass("icon-loading")}))},_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=l()('<div data-dir="{dir}"><a>{name}</a></div>').addClass("crumb");if(n){var r=n.split("/");l().each(r,(function(t,n){if(""===(n=r.pop()))return!1;e.$dirTree.prepend(o.octemplate({dir:r.join("/")+"/"+n,name:n}))}))}o.octemplate({dir:"",name:""},{escapeFunction:null}).prependTo(this.$dirTree)},_handleTreeListSelect:function(t,e){var n=t.data,o=l()(t.target).closest(".crumb").data("dir");n._fillFilePicker(o);var r=t.target.closest(".oc-dialog"),i=l()(".primary",r);this._changeButtonsText(e,o.split(/[/]+/).pop()),-1!==this.$filePicker.data("mimetype").indexOf("httpd/unix-directory")||this.$filePicker.data("allowDirectoryChooser")?i.prop("disabled",!1):i.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")),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}),r=""===n?t("core","Move"):t("core","Move to {folder}",{folder:n}),i=l()(".oc-dialog-buttonrow button");switch(e){case this.FILEPICKER_TYPE_CHOOSE:case this.FILEPICKER_TYPE_CUSTOM:break;case this.FILEPICKER_TYPE_COPY:i.text(o);break;case this.FILEPICKER_TYPE_MOVE:i.text(r);break;case this.FILEPICKER_TYPE_COPY_MOVE:i.eq(0).text(o),i.eq(1).text(r)}}},Q=J,X=(V=document,Z=a.emit,W=V.getElementsByTagName("head")[0].getAttribute("data-requesttoken"),{getToken:function(){return W},setToken:function(t){Z("csrf-token-update",{token:W=t})}}).getToken,tt=function t(e,n){var o,r,i="";if(this.typelessListeners=[],this.closed=!1,this.listeners={},n)for(o in n)i+=o+"="+encodeURIComponent(n[o])+"&";if(i+="requesttoken="+encodeURIComponent(X()),this.useFallBack||"undefined"==typeof EventSource){var a="oc_eventsource_iframe_"+t.iframeCount;t.fallBackSources[t.iframeCount]=this,this.iframe=l()("<iframe></iframe>"),this.iframe.attr("id",a),this.iframe.hide(),r="&",-1===e.indexOf("?")&&(r="?"),this.iframe.attr("src",e+r+"fallback=true&fallback_id="+t.iframeCount+"&"+i),l()("body").append(this.iframe),this.useFallBack=!0,t.iframeCount++}else r="&",-1===e.indexOf("?")&&(r="?"),this.source=new EventSource(e+r+i),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))};tt.fallBackSources=[],tt.iframeCount=0,tt.fallBackCallBack=function(t,e,n){tt.fallBackSources[t].fallBackCallBack(e,n)},tt.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 et=tt,nt=r(42515),ot=null,rt=function(t){if(ot){var e=ot;ot.trigger(new(l().Event)("beforeHide")),ot.slideUp(50,(function(){e.trigger(new(l().Event)("afterHide")),t&&t.apply(this,arguments)}))}l()(".menutoggle").attr("aria-expanded",!1),l()(".openedMenu").removeClass("openedMenu"),ot=null},it=!!window._oc_isadmin,at=r(27856),st=r.n(at),lt=r(86834),ct=r.n(lt),ut=r(46488),dt=r.n(ut),pt=r(95573),ft=r.n(pt);window._oc_l10n_registry_translations=window._oc_l10n_registry_translations||{},window._oc_l10n_registry_plural_functions=window._oc_l10n_registry_plural_functions||{};var ht=function(t){return void 0!==window._oc_l10n_registry_translations[t]&&void 0!==window._oc_l10n_registry_plural_functions[t]},mt=function(t){return{translations:window._oc_l10n_registry_translations[t]||{},pluralFunction:window._oc_l10n_registry_plural_functions[t]}};function gt(t){return gt="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},gt(t)}var vt={load:function(t,e){if(ht(t)||"en"===Ut.getLocale()){var n=l().Deferred(),o=n.promise();return o.then(e),n.resolve(),o}var r=this,i=(0,c.generateFilePath)(t,"l10n",Ut.getLocale()+".json");return l().get(i).then((function(e){e.translations&&r.register(t,e.translations,e.pluralForm)})).then(e)},register:function(t,e){var n,o,r;n=t,o=e,r=this._getPlural,ht(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,r):function(t,e,n){window._oc_l10n_registry_translations[t]=e,window._oc_l10n_registry_plural_functions[t]=n}(n,o,r)},_unregister:function(t){delete window._oc_l10n_registry_translations[t],delete window._oc_l10n_registry_plural_functions[t]},translate:function(t,e,n,o,r){var i=r||{};p.default.defaults(i,{escape:!0,sanitize:!0});var a=i.sanitize?st().sanitize:dt(),s=i.escape?ft():dt(),l=e,c=mt(t).translations[e];return void 0!==c&&(l=c),"object"===gt(n)||void 0!==o?a(function(t,e,n){return t.replace(/%n/g,n).replace(/{([^{}]*)}/g,(function(t,n){var o=e[n];return a("string"==typeof o||"number"==typeof o?s(o):t)}))}(l,n,o)):a(l)},translatePlural:function(t,e,n,o,r,i){var a="_"+e+"_::_"+n+"_",s=mt(t),c=s.translations[a];if(void 0!==c){var u=c;if(l().isArray(u)){var d=s.pluralFunction(o);return this.translate(t,u[d],r,o,i)}}return 1===o?this.translate(t,e,r,o,i):this.translate(t,n,r,o,i)},_getPlural:function(t){var e=Ut.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}}},wt=vt;ct().registerHelper("t",(function(t,e){return vt.translate(t,e)}));var yt=r(9944),bt={startSaving:function(e){this.startAction(e,t("core","Saving …"))},startAction:function(t,e){l()(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){l()(t).text(e).addClass("success").removeClass("error").stop(!0,!0).delay(3e3).fadeOut(900).show()},finishedError:function(t,e){l()(t).text(e).addClass("error").removeClass("success").show()}},_t=r(30381),Pt=r.n(_t),Ct={callback:null,pageLoadTime:null,init:function(){l()(".password-confirm-required").on("click",p.default.bind(this.requirePasswordConfirmation,this)),this.pageLoadTime=Pt().now()},requiresPasswordConfirmation:function(){var t=this.pageLoadTime-1e3*window.nc_pageLoad,e=Pt().now()-(t+1e3*window.nc_lastLogin);return window.backendAllowsPasswordConfirmation&&e>18e5},requirePasswordConfirmation:function(e,n,o){n=void 0!==n?n:{};var r={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:""},i=p.default.extend(r,n),a=this;this.requiresPasswordConfirmation()&&Ut.dialogs.prompt(i.text,i.title,(function(t,e){t&&""!==e?a._confirmPassword(e,i):p.default.isFunction(o)&&o()}),!0,i.label,!0).then((function(){var t=l()(".oc-dialog:visible");if(t.find(".ui-icon").remove(),t.addClass("password-confirmation"),""!==i.error){var e=l()("<p></p>").addClass("msg warning").text(i.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(i.confirm)})),this.callback=e},_confirmPassword:function(e,n){var o=this;l().ajax({url:(0,c.generateUrl)("/login/confirm"),data:{password:e},type:"POST",success:function(t){window.nc_lastLogin=t.lastLogin,p.default.isFunction(o.callback)&&o.callback()},error:function(){n.error=t("core","Failed to authenticate, try again"),Ut.PasswordConfirmation.requirePasswordConfirmation(o.callback,n)}})}},kt=window._theme||{},xt={_handlers:[],_pushState:function(t,e,n){var o;if(o="string"==typeof t?t:Ut.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 r,i=document.querySelectorAll('[fill^="url(#"], [stroke^="url(#"], [filter^="url(#invert"]'),a=0,s=i.length;a<s;a++)(r=i[a]).style.fill=r.style.fill,r.style.stroke=r.style.stroke,r.removeAttribute("filter"),r.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=Ut.parseQueryString(this._decodeQuery(e))),(t=p.default.extend(t||{},Ut.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,p.default.isString(e)?e=Ut.parseQueryString(e):e||(e=this.parseUrlQuery()||{});for(var n=0;n<this._handlers.length;n++)this._handlers[n](e)}}};function Tt(t){for(var e,n=[],o=0,r=-1,i=0;o<t.length;){e=t.charAt(o);var a=!i&&"."===e||e>="0"&&e<="9";a!==i&&(n[++r]="",i=a),n[r]+=e,o++}return n}var Ot={History:xt,humanFileSize:r(3378).s,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",Pt()(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=Pt()().diff(Pt()(e));return n>=0&&n<45e3?t("core","seconds ago"):Pt()(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=Tt(t),r=Tt(e);for(n=0;o[n]&&r[n];n++)if(o[n]!==r[n]){var i=Number(o[n]),a=Number(r[n]);return i==o[n]&&a==r[n]?i-a:o[n].localeCompare(r[n],Ut.getLanguage())}return o.length-r.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 r=n[o].split("=");if(r[0].trim()===t&&r[1].trim()===e)return!0}return!1}},At=window._oc_debug,St=window._oc_webroot;if(void 0===St){var Et=(St=location.pathname).indexOf("/index.php/");St=-1!==Et?St.substr(0,Et):St.substr(0,St.lastIndexOf("/"))}var jt,Lt=St,Ut={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(U.blacklist_files_regex)},addScript:function(t,e,n){var o;console.warn("OC.addScript is deprecated, use OCP.Loader.loadScript instead");var r=(0,c.generateFilePath)(t,"js",e+".js");return u[r]?n&&n():(o=l().Deferred(),l().getScript(r,(function(){return o.resolve()})),u[r]=o),u[r]},addStyle:function(t,e){console.warn("OC.addStyle is deprecated, use OCP.Loader.loadStylesheet instead");var n=(0,c.generateFilePath)(t,"css",e+".css");-1===d.indexOf(n)&&(d.push(n),document.createStyleSheet?document.createStyleSheet(n):(e=l()('<link rel="stylesheet" type="text/css" href="'+n+'"/>'),l()("head").append(e)))},Apps:g,AppConfig:y,appConfig:w,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};l().extend(n,e);var o=l()("#appsettings");if(0===o.length)throw{name:"MissingDOMElement",message:'There has be be an element with id "appsettings" for the popup to show.'};var r=l()("#appsettings_popup");if(0===r.length&&(l()("body").prepend('<div class="popup hidden" id="appsettings_popup"></div>'),(r=l()("#appsettings_popup")).addClass(o.hasClass("topright")?"topright":"bottomleft")),r.is(":visible"))r.hide().remove();else{var i=o.hasClass("topright")?"up":"left";l().get((0,c.generateFilePath)(n.appid,"",n.scriptName),(function(e){r.html(e).ready((function(){if(r.prepend('<span class="arrow '+i+'"></span><h2>'+t("core","Settings")+'</h2><a class="close"></a>').show(),r.find(".close").bind("click",(function(){r.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&&l().ajaxSetup({cache:!0}),l().getScript((0,c.generateFilePath)(n.appid,"js",e)).fail((function(t,e,n){throw n}))}})).show()}),"html")}},appswebroots:b,Backbone:j,ContactsMenu:z,config:U,currentUser:q,dialogs:Q,EventSource:et,getCurrentUser:function(){return{uid:q,displayName:B}},isUserAdmin:function(){return it},L10N:wt,_ajaxConnectionLostHandler:m,_processAjaxError:function(t){(0!==t.status||"abort"!==t.statusText&&"timeout"!==t.statusText&&!Ut._reloadCalled)&&(p.default.contains([302,303,307,401],t.status)&&Ut.currentUser?setTimeout((function(){if(!Ut._userIsNavigatingAway&&!Ut._reloadCalled){var t=0,e=setInterval((function(){h.showUpdate(n("core","Problem loading page, reloading in %n second","Problem loading page, reloading in %n seconds",5-t)),t>=5&&(clearInterval(e),Ut.reload()),t++}),1e3);Ut._reloadCalled=!0}}),100):0===t.status&&setTimeout((function(){Ut._userIsNavigatingAway||Ut._reloadCalled||Ut._ajaxConnectionLostHandler()}),100))},registerXHRForErrorProcessing:function(t){t.addEventListener&&(t.addEventListener("load",(function(){4===t.readyState&&(t.status>=200&&t.status<300||304===t.status||l()(document).trigger(new(l().Event)("ajaxError"),t))})),t.addEventListener("error",(function(){l()(document).trigger(new(l().Event)("ajaxError"),t)})))},getCapabilities:function(){return console.warn("OC.getCapabilities is deprecated and will be removed in Nextcloud 21. See @nextcloud/capabilities"),(0,nt.getCapabilities)()},hideMenus:rt,registerMenu:function(t,e,n,o){e.addClass("menu");var r="A"===t.prop("tagName")||"BUTTON"===t.prop("tagName");t.on(r?"click.menu":"click.menu keyup.menu",(function(r){r.preventDefault(),r.key&&"Enter"!==r.key||(e.is(ot)?rt():(ot&&rt(),!0===o&&e.parent().addClass("openedMenu"),t.attr("aria-expanded",!0),e.slideToggle(50,n),ot=e))}))},showMenu:function(t,e,n){e.is(ot)||(rt(),ot=e,e.trigger(new(l().Event)("beforeShow")),e.show(),e.trigger(new(l().Event)("afterShow")),p.default.isFunction(n)&&n())},unregisterMenu:function(t,e){e.is(ot)&&rt(),t.off("click.menu").removeClass("menutoggle"),e.removeClass("menu")},basename:L.EZ,encodePath:L.Ec,dirname:L.XX,isSamePath:L.Mg,joinPaths:L.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:yt.getCanonicalLocale,getLocale:function(){var t;return null!==(t=l()("html").data("locale"))&&void 0!==t?t:"en"},getLanguage:function(){return l()("html").prop("lang")},addTranslations:wt.load,buildQueryString:function(t){return t?l().map(t,(function(t,e){var n=encodeURIComponent(e);return null!=t&&(n+="="+encodeURIComponent(t)),n})).join("&"):""},parseQueryString:function(t){var e,n,o,r={};if(!t)return null;(e=t.indexOf("?"))>=0&&(t=t.substr(e+1));for(var i=t.replace(/\+/g,"%20").split("&"),a=0;a<i.length;a++){var s=i[a];(n=(e=s.indexOf("="))>=0?[s.substr(0,e),s.substr(e+1)]:[s]).length&&(o=decodeURIComponent(n[0]))&&(r[o]=n.length>1?decodeURIComponent(n[1]):null)}return r},msg:bt,Notification:h,PasswordConfirmation:Ct,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),r=0;r<o.length;r++)o[r].attach&&o[r].attach(e,n)},detach:function(t,e,n){for(var o=this.getPlugins(t),r=0;r<o.length;r++)o[r].detach&&o[r].detach(e,n)}},theme:kt,Util:Ot,debug:At,filePath:c.generateFilePath,generateUrl:c.generateUrl,get:(jt=window,function(t){for(var e=t.split("."),n=e.pop(),o=0;o<e.length;o++)if(!(jt=jt[e[o]]))return!1;return jt[n]}),set:function(t){return function(e,n){for(var o=e.split("."),r=o.pop(),i=0;i<o.length;i++)t[o[i]]||(t[o[i]]={}),t=t[o[i]];return t[r]=n,n}}(window),getRootPath:c.getRootUrl,imagePath:c.imagePath,redirect:function(t){window.location=t},reload:function(){window.location.reload()},requestToken:X(),linkTo:c.linkTo,linkToOCS:function(t,e){return(0,c.generateOcsUrl)(t,{},{ocsVersion:e||1})+"/"},linkToRemote:c.generateRemoteUrl,linkToRemoteBase:function(t){return(0,c.getRootUrl)()+"/remote.php/"+t},webroot:Lt};(0,a.subscribe)("csrf-token-update",(function(t){OC.requestToken=t.token,console.info("OC.requestToken changed",t.token)}));var It=r(16453),Rt=r(17563),Ft=r(55586),$t=r.n(Ft),Nt={name:"LoginButton",props:{loading:{type:Boolean,required:!0},invertedColors:{type:Boolean,default:!1}}},Mt=r(51900),zt=(0,Mt.Z)(Nt,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{attrs:{id:"submit-wrapper"},on:{click:function(e){return t.$emit("click")}}},[n("input",{staticClass:"login primary",attrs:{id:"submit-form",type:"submit",title:""},domProps:{value:t.loading?t.t("core","Logging in …"):t.t("core","Log in")}}),t._v(" "),n("div",{staticClass:"submit-icon",class:{"icon-confirm-white":!t.loading,"icon-loading-small":t.loading&&t.invertedColors,"icon-loading-small-dark":t.loading&&!t.invertedColors}})])}),[],!1,null,"125b100b",null).exports,Dt={name:"LoginForm",components:{LoginButton:zt},props:{username:{type:String,default:""},redirectUrl:{type:[String,Boolean],default:!1},errors:{type:Array,default:function(){return[]}},messages:{type:Array,default:function(){return[]}},throttleDelay:{type:Number,default:0},invertedColors:{type:Boolean,default:!1},autoCompleteAllowed:{type:Boolean,default:!0},directLogin:{type:Boolean,default:!1}},data:function(){return{loading:!1,timezone:$t().determine().name(),timezoneOffset:-(new Date).getTimezoneOffset()/60,user:this.username,password:"",passwordInputType:"password"}},computed:{apacheAuthFailed:function(){return-1!==this.errors.indexOf("apacheAuthFailed")},internalException:function(){return-1!==this.errors.indexOf("internalexception")},invalidPassword:function(){return-1!==this.errors.indexOf("invalidpassword")},userDisabled:function(){return-1!==this.errors.indexOf("userdisabled")},toggleIcon:function(){return(0,c.imagePath)("core","actions/toggle.svg")},loadingIcon:function(){return(0,c.imagePath)("core","loading-dark.gif")},loginActionUrl:function(){return(0,c.generateUrl)("login")}},mounted:function(){""===this.username?this.$refs.user.focus():this.$refs.password.focus()},methods:{togglePassword:function(){"password"===this.passwordInputType?this.passwordInputType="text":this.passwordInputType="password"},updateUsername:function(){this.$emit("update:username",this.user)},submit:function(){this.loading=!0,this.$emit("submit")}}},Bt=(0,Mt.Z)(Dt,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("form",{ref:"loginForm",attrs:{method:"post",name:"login",action:t.loginActionUrl},on:{submit:t.submit}},[n("fieldset",[t.apacheAuthFailed?n("div",{staticClass:"warning"},[t._v("\n\t\t\t"+t._s(t.t("core","Server side authentication failed!"))),n("br"),t._v(" "),n("small",[t._v(t._s(t.t("core","Please contact your administrator."))+"\n\t\t\t")])]):t._e(),t._v(" "),t._l(t.messages,(function(e,o){return n("div",{key:o,staticClass:"warning"},[t._v("\n\t\t\t"+t._s(e)),n("br")])})),t._v(" "),t.internalException?n("div",{staticClass:"warning"},[t._v("\n\t\t\t"+t._s(t.t("core","An internal error occurred."))),n("br"),t._v(" "),n("small",[t._v(t._s(t.t("core","Please try again or contact your administrator."))+"\n\t\t\t")])]):t._e(),t._v(" "),n("div",{staticClass:"hidden",attrs:{id:"message"}},[n("img",{staticClass:"float-spinner",attrs:{alt:"",src:t.loadingIcon}}),t._v(" "),n("span",{attrs:{id:"messageText"}}),t._v(" "),n("div",{staticStyle:{clear:"both"}})]),t._v(" "),n("p",{staticClass:"grouptop",class:{shake:t.invalidPassword}},[n("input",{directives:[{name:"model",rawName:"v-model",value:t.user,expression:"user"}],ref:"user",attrs:{id:"user",type:"text",name:"user",autocapitalize:"none",autocorrect:"off",autocomplete:t.autoCompleteAllowed?"on":"off",placeholder:t.t("core","Username or email"),"aria-label":t.t("core","Username or email"),required:""},domProps:{value:t.user},on:{change:t.updateUsername,input:function(e){e.target.composing||(t.user=e.target.value)}}}),t._v(" "),n("label",{staticClass:"infield",attrs:{for:"user"}},[t._v(t._s(t.t("core","Username or email")))])]),t._v(" "),n("p",{staticClass:"groupbottom",class:{shake:t.invalidPassword}},[n("input",{ref:"password",staticClass:"password-with-toggle",attrs:{id:"password",type:t.passwordInputType,name:"password",autocorrect:"off",autocapitalize:"none",autocomplete:t.autoCompleteAllowed?"current-password":"off",placeholder:t.t("core","Password"),"aria-label":t.t("core","Password"),required:""}}),t._v(" "),n("label",{staticClass:"infield",attrs:{for:"password"}},[t._v(t._s(t.t("Password")))]),t._v(" "),n("a",{staticClass:"toggle-password",attrs:{href:"#"},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.togglePassword.apply(null,arguments)}}},[n("img",{attrs:{src:t.toggleIcon,alt:t.t("core","Toggle password visibility")}})])]),t._v(" "),n("LoginButton",{attrs:{loading:t.loading,"inverted-colors":t.invertedColors}}),t._v(" "),t.invalidPassword?n("p",{staticClass:"warning wrongPasswordMsg"},[t._v("\n\t\t\t"+t._s(t.t("core","Wrong username or password."))+"\n\t\t")]):t.userDisabled?n("p",{staticClass:"warning userDisabledMsg"},[t._v("\n\t\t\t"+t._s(t.t("core","User disabled"))+"\n\t\t")]):t._e(),t._v(" "),t.throttleDelay&&t.throttleDelay>5e3?n("p",{staticClass:"warning throttledMsg"},[t._v("\n\t\t\t"+t._s(t.t("core","We have detected multiple invalid login attempts from your IP. Therefore your next login is throttled up to 30 seconds."))+"\n\t\t")]):t._e(),t._v(" "),t.redirectUrl?n("input",{attrs:{type:"hidden",name:"redirect_url"},domProps:{value:t.redirectUrl}}):t._e(),t._v(" "),n("input",{attrs:{type:"hidden",name:"timezone"},domProps:{value:t.timezone}}),t._v(" "),n("input",{attrs:{type:"hidden",name:"timezone_offset"},domProps:{value:t.timezoneOffset}}),t._v(" "),n("input",{attrs:{type:"hidden",name:"requesttoken"},domProps:{value:t.OC.requestToken}}),t._v(" "),t.directLogin?n("input",{attrs:{type:"hidden",name:"direct",value:"1"}}):t._e()],2)])}),[],!1,null,"0b3a0522",null),qt=Bt.exports,Ht=r(4820),Yt=r(85963),Kt=r(64150);function Gt(t){return Gt="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},Gt(t)}function Vt(t){return function(t){if(Array.isArray(t))return Zt(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return Zt(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)?Zt(t,e):void 0}}(t)||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.")}()}function Zt(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,o=new Array(e);n<e;n++)o[n]=t[n];return o}function Wt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,o)}return n}function Jt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Wt(Object(n),!0).forEach((function(e){Qt(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Wt(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function Qt(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Xt(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function te(t,e){if(e&&("object"===Gt(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}function ee(t){var e="function"==typeof Map?new Map:void 0;return ee=function(t){if(null===t||(n=t,-1===Function.toString.call(n).indexOf("[native code]")))return t;var n;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,o)}function o(){return ne(t,arguments,ie(this).constructor)}return o.prototype=Object.create(t.prototype,{constructor:{value:o,enumerable:!1,writable:!0,configurable:!0}}),re(o,t)},ee(t)}function ne(t,e,n){return ne=oe()?Reflect.construct:function(t,e,n){var o=[null];o.push.apply(o,e);var r=new(Function.bind.apply(t,o));return n&&re(r,n.prototype),r},ne.apply(null,arguments)}function oe(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}function re(t,e){return re=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},re(t,e)}function ie(t){return ie=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},ie(t)}var ae=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&re(t,e)}(i,t);var e,n,o,r=(e=i,n=oe(),function(){var t,o=ie(e);if(n){var r=ie(this).constructor;t=Reflect.construct(o,arguments,r)}else t=o.apply(this,arguments);return te(this,t)});function i(){return Xt(this,i),r.apply(this,arguments)}return o=i,Object.defineProperty(o,"prototype",{writable:!1}),o}(ee(Error)),se={name:"PasswordLessLoginForm",components:{LoginButton:zt,InformationIcon:Yt.Z,LockOpenIcon:Kt.Z},props:{username:{type:String,default:""},redirectUrl:{type:[String,Boolean],default:!1},invertedColors:{type:Boolean,default:!1},autoCompleteAllowed:{type:Boolean,default:!0},isHttps:{type:Boolean,default:!1},isLocalhost:{type:Boolean,default:!1},hasPublicKeyCredential:{type:Boolean,default:!1}},data:function(){return{user:this.username,loading:!1,validCredentials:!0}},methods:{authenticate:function(){var t=this;console.debug("passwordless login initiated"),this.getAuthenticationData(this.user).then((function(t){return console.debug(t),t})).then(this.sign).then(this.completeAuthentication).catch((function(e){e instanceof ae?t.validCredentials=!1:console.debug(e)}))},getAuthenticationData:function(t){var e,n,o=function(t){var e=(t=t.replace(/-/g,"+").replace(/_/g,"/")).length%4;if(e){if(1===e)throw new Error("InvalidLengthError: Input base64url string is the wrong length to determine padding");t+=new Array(5-e).join("=")}return window.atob(t)};return(e=t,n=(0,c.generateUrl)("/login/webauthn/start"),Ht.default.post(n,{loginName:e}).then((function(t){return t.data}))).then((function(t){if(console.debug("Obtained PublicKeyCredentialRequestOptions"),console.debug(t),!Object.prototype.hasOwnProperty.call(t,"allowCredentials"))throw console.debug("No credentials found."),new ae;return t.challenge=Uint8Array.from(o(t.challenge),(function(t){return t.charCodeAt(0)})),t.allowCredentials=t.allowCredentials.map((function(t){return Jt(Jt({},t),{},{id:Uint8Array.from(o(t.id),(function(t){return t.charCodeAt(0)}))})})),console.debug("Converted PublicKeyCredentialRequestOptions"),console.debug(t),t})).catch((function(t){throw console.debug("Error while obtaining data"),t}))},sign:function(t){var e=function(t){return window.btoa(String.fromCharCode.apply(String,Vt(t)))};return navigator.credentials.get({publicKey:t}).then((function(t){return console.debug(t),console.debug(new Uint8Array(t.rawId)),console.debug(e(new Uint8Array(t.rawId))),{id:t.id,type:t.type,rawId:e(new Uint8Array(t.rawId)),response:{authenticatorData:e(new Uint8Array(t.response.authenticatorData)),clientDataJSON:e(new Uint8Array(t.response.clientDataJSON)),signature:e(new Uint8Array(t.response.signature)),userHandle:t.response.userHandle?(n=new Uint8Array(t.response.userHandle),String.fromCharCode.apply(String,Vt(n))):null}};var n})).then((function(t){return console.debug(t),t})).catch((function(t){console.debug("GOT AN ERROR!"),console.debug(t)}))},completeAuthentication:function(t){console.debug("TIME TO COMPLETE");var e,n,o=this.redirectUrl;return(e=JSON.stringify(t),n=(0,c.generateUrl)("/login/webauthn/finish"),Ht.default.post(n,{data:e}).then((function(t){return t.data}))).then((function(t){console.debug("Logged in redirecting"),window.location.href=o})).catch((function(t){console.debug("GOT AN ERROR WHILE SUBMITTING CHALLENGE!"),console.debug(t)}))},submit:function(){}}},le=r(93379),ce=r.n(le),ue=r(7795),de=r.n(ue),pe=r(90569),fe=r.n(pe),he=r(3565),me=r.n(he),ge=r(19216),ve=r.n(ge),we=r(44589),ye=r.n(we),be=r(27429),_e={};_e.styleTagTransform=ye(),_e.setAttributes=me(),_e.insert=fe().bind(null,"head"),_e.domAPI=de(),_e.insertStyleElement=ve(),ce()(be.Z,_e),be.Z&&be.Z.locals&&be.Z.locals;var Pe=(0,Mt.Z)(se,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return(t.isHttps||t.isLocalhost)&&t.hasPublicKeyCredential?n("form",{ref:"loginForm",attrs:{method:"post",name:"login"},on:{submit:function(e){return e.preventDefault(),t.submit.apply(null,arguments)}}},[n("fieldset",[n("p",{staticClass:"grouptop groupbottom"},[n("label",{staticClass:"infield",attrs:{for:"user"}},[t._v(t._s(t.t("core","Username or\temail")))]),t._v(" "),n("input",{directives:[{name:"model",rawName:"v-model",value:t.user,expression:"user"}],ref:"user",attrs:{id:"user",type:"text",name:"user",autocomplete:t.autoCompleteAllowed?"on":"off",placeholder:t.t("core","Username or email"),"aria-label":t.t("core","Username or email"),required:""},domProps:{value:t.user},on:{change:function(e){return t.$emit("update:username",t.user)},input:function(e){e.target.composing||(t.user=e.target.value)}}})]),t._v(" "),t.validCredentials?t._e():n("div",{staticClass:"body-login-container update form__message-box"},[t._v("\n\t\t\t"+t._s(t.t("core","Your account is not setup for passwordless login."))+"\n\t\t")]),t._v(" "),t.validCredentials?n("LoginButton",{attrs:{loading:t.loading,"inverted-colors":t.invertedColors},on:{click:t.authenticate}}):t._e()],1)]):t.hasPublicKeyCredential?t.isHttps||t.isLocalhost?t._e():n("div",{staticClass:"body-login-container update"},[n("LockOpenIcon",{attrs:{size:"70"}}),t._v(" "),n("h2",[t._v(t._s(t.t("core","Your connection is not secure")))]),t._v(" "),n("p",{staticClass:"infogroup"},[t._v("\n\t\t"+t._s(t.t("core","Passwordless authentication is only available over a secure connection."))+"\n\t")])],1):n("div",{staticClass:"body-login-container update"},[n("InformationIcon",{attrs:{size:"70"}}),t._v(" "),n("h2",[t._v(t._s(t.t("core","Browser not supported")))]),t._v(" "),n("p",{staticClass:"infogroup"},[t._v("\n\t\t"+t._s(t.t("core","Passwordless authentication is not supported in your browser."))+"\n\t")])],1)}),[],!1,null,"4f29a6e2",null),Ce=Pe.exports,ke={name:"ResetPassword",props:{username:{type:String,required:!0},resetPasswordLink:{type:String,required:!0},invertedColors:{type:Boolean,default:!1}},data:function(){return{error:!1,loading:!1,message:void 0,user:this.username}},watch:{username:function(t){this.user=t}},methods:{updateUsername:function(){this.$emit("update:username",this.user)},submit:function(){var t=this;this.loading=!0,this.error=!1,this.message="";var e=(0,c.generateUrl)("/lostpassword/email"),n={user:this.user};return Ht.default.post(e,n).then((function(t){return t.data})).then((function(e){if("success"!==e.status)throw new Error("got status ".concat(e.status));t.message="send-success"})).catch((function(e){console.error("could not send reset email request",e),t.error=!0,t.message="send-error"})).then((function(){t.loading=!1}))}}},xe=r(44685),Te={};Te.styleTagTransform=ye(),Te.setAttributes=me(),Te.insert=fe().bind(null,"head"),Te.domAPI=de(),Te.insertStyleElement=ve(),ce()(xe.Z,Te),xe.Z&&xe.Z.locals&&xe.Z.locals;var Oe=(0,Mt.Z)(ke,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("form",{on:{submit:function(e){return e.preventDefault(),t.submit.apply(null,arguments)}}},[n("fieldset",[n("p",[n("input",{directives:[{name:"model",rawName:"v-model",value:t.user,expression:"user"}],attrs:{id:"user",type:"text",name:"user",autocapitalize:"off",placeholder:t.t("core","Username or email"),"aria-label":t.t("core","Username or email"),required:""},domProps:{value:t.user},on:{change:t.updateUsername,input:function(e){e.target.composing||(t.user=e.target.value)}}}),t._v(" "),n("label",{staticClass:"infield",attrs:{for:"user"}},[t._v(t._s(t.t("core","Username or email")))])]),t._v(" "),n("div",{attrs:{id:"reset-password-wrapper"}},[n("input",{staticClass:"login primary",attrs:{id:"reset-password-submit",type:"submit",title:""},domProps:{value:t.t("core","Reset password")}}),t._v(" "),n("div",{staticClass:"submit-icon",class:{"icon-confirm-white":!t.loading,"icon-loading-small":t.loading&&t.invertedColors,"icon-loading-small-dark":t.loading&&!t.invertedColors}})]),t._v(" "),"send-success"===t.message?n("p",{staticClass:"update"},[t._v("\n\t\t\t"+t._s(t.t("core","A password reset message has been sent to the email address of this account. If you do not receive it, check your spam/junk folders or ask your local administrator for help."))+"\n\t\t\t"),n("br"),t._v("\n\t\t\t"+t._s(t.t("core","If it is not there ask your local administrator."))+"\n\t\t")]):"send-error"===t.message?n("p",{staticClass:"update warning"},[t._v("\n\t\t\t"+t._s(t.t("core","Couldn't send reset email. Please contact your administrator."))+"\n\t\t")]):"reset-error"===t.message?n("p",{staticClass:"update warning"},[t._v("\n\t\t\t"+t._s(t.t("core","Password cannot be changed. Please contact your administrator."))+"\n\t\t")]):t.message?n("p",{staticClass:"update",class:{warning:t.error}}):t._e(),t._v(" "),n("a",{attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.$emit("abort")}}},[t._v("\n\t\t\t"+t._s(t.t("core","Back to login"))+"\n\t\t")])])])}),[],!1,null,"d9d670b8",null),Ae=Oe.exports;function Se(t,e,n,o,r,i,a){try{var s=t[i](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(o,r)}var Ee={name:"UpdatePassword",props:{username:{type:String,required:!0},resetPasswordTarget:{type:String,required:!0},invertedColors:{type:Boolean,default:!1}},data:function(){return{error:!1,loading:!1,message:void 0,user:this.username,password:"",encrypted:!1,proceed:!1}},watch:{username:function(t){this.user=t}},methods:{submit:function(){var e,n=this;return(e=regeneratorRuntime.mark((function e(){var o,r;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.loading=!0,n.error=!1,n.message="",e.prev=3,e.next=6,Ht.default.post(n.resetPasswordTarget,{password:n.password,proceed:n.proceed});case 6:if(o=e.sent,!(r=o.data)||"success"!==r.status){e.next=14;break}n.message="send-success",n.$emit("update:username",n.user),n.$emit("done"),e.next=23;break;case 14:if(!r||!r.encryption){e.next=18;break}n.encrypted=!0,e.next=23;break;case 18:if(!r||!r.msg){e.next=22;break}throw new Error(r.msg);case 22:throw new Error;case 23:e.next=29;break;case 25:e.prev=25,e.t0=e.catch(3),n.error=!0,n.message=e.t0.message?e.t0.message:t("core","Password cannot be changed. Please contact your administrator.");case 29:return e.prev=29,n.loading=!1,e.finish(29);case 32:case"end":return e.stop()}}),e,null,[[3,25,29,32]])})),function(){var t=this,n=arguments;return new Promise((function(o,r){var i=e.apply(t,n);function a(t){Se(i,o,r,a,s,"next",t)}function s(t){Se(i,o,r,a,s,"throw",t)}a(void 0)}))})()}}},je=Ee,Le=r(91123),Ue={};Ue.styleTagTransform=ye(),Ue.setAttributes=me(),Ue.insert=fe().bind(null,"head"),Ue.domAPI=de(),Ue.insertStyleElement=ve(),ce()(Le.Z,Ue),Le.Z&&Le.Z.locals&&Le.Z.locals;var Ie=(0,Mt.Z)(je,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("form",{on:{submit:function(e){return e.preventDefault(),t.submit.apply(null,arguments)}}},[n("fieldset",[n("p",[n("label",{staticClass:"infield",attrs:{for:"password"}},[t._v(t._s(t.t("core","New password")))]),t._v(" "),n("input",{directives:[{name:"model",rawName:"v-model",value:t.password,expression:"password"}],attrs:{id:"password",type:"password",name:"password",autocomplete:"new-password",autocapitalize:"none",autocorrect:"off",required:"",placeholder:t.t("core","New password")},domProps:{value:t.password},on:{input:function(e){e.target.composing||(t.password=e.target.value)}}})]),t._v(" "),t.encrypted?n("div",{staticClass:"update"},[n("p",[t._v("\n\t\t\t\t"+t._s(t.t("core","Your files are encrypted. There will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?"))+"\n\t\t\t")]),t._v(" "),n("input",{directives:[{name:"model",rawName:"v-model",value:t.proceed,expression:"proceed"}],staticClass:"checkbox",attrs:{id:"encrypted-continue",type:"checkbox"},domProps:{checked:Array.isArray(t.proceed)?t._i(t.proceed,null)>-1:t.proceed},on:{change:function(e){var n=t.proceed,o=e.target,r=!!o.checked;if(Array.isArray(n)){var i=t._i(n,null);o.checked?i<0&&(t.proceed=n.concat([null])):i>-1&&(t.proceed=n.slice(0,i).concat(n.slice(i+1)))}else t.proceed=r}}}),t._v(" "),n("label",{attrs:{for:"encrypted-continue"}},[t._v("\n\t\t\t\t"+t._s(t.t("core","I know what I'm doing"))+"\n\t\t\t")])]):t._e(),t._v(" "),n("div",{attrs:{id:"submit-wrapper"}},[n("input",{staticClass:"login primary",attrs:{id:"submit",type:"submit",title:""},domProps:{value:t.loading?t.t("core","Resetting password"):t.t("core","Reset password")}}),t._v(" "),n("div",{staticClass:"submit-icon",class:{"icon-loading-small":t.loading&&t.invertedColors,"icon-loading-small-dark":t.loading&&!t.invertedColors}})]),t._v(" "),t.error&&t.message?n("p",{class:{warning:t.error}},[t._v("\n\t\t\t"+t._s(t.message)+"\n\t\t")]):t._e()])])}),[],!1,null,"9ae5fdb4",null),Re=Ie.exports,Fe=Rt.parse(location.search);if("1"===Fe.clear)try{window.localStorage.clear(),window.sessionStorage.clear(),console.debug("Browser storage cleared")}catch(t){console.error("Could not clear browser storage",t)}var $e={name:"Login",components:{LoginForm:qt,PasswordLessLoginForm:Ce,ResetPassword:Ae,UpdatePassword:Re},data:function(){return{loading:!1,user:(0,It.loadState)("core","loginUsername",""),passwordlessLogin:!1,resetPassword:!1,errors:(0,It.loadState)("core","loginErrors",[]),messages:(0,It.loadState)("core","loginMessages",[]),redirectUrl:(0,It.loadState)("core","loginRedirectUrl",!1),throttleDelay:(0,It.loadState)("core","loginThrottleDelay",0),invertedColors:OCA.Theming&&OCA.Theming.inverted,canResetPassword:(0,It.loadState)("core","loginCanResetPassword",!1),resetPasswordLink:(0,It.loadState)("core","loginResetPasswordLink",""),autoCompleteAllowed:(0,It.loadState)("core","loginAutocomplete",!0),resetPasswordTarget:(0,It.loadState)("core","resetPasswordTarget",""),resetPasswordUser:(0,It.loadState)("core","resetPasswordUser",""),directLogin:"1"===Fe.direct,hasPasswordless:(0,It.loadState)("core","webauthn-available",!1),countAlternativeLogins:(0,It.loadState)("core","countAlternativeLogins",!1),isHttps:"https:"===window.location.protocol,isLocalhost:"localhost"===window.location.hostname,hasPublicKeyCredential:void 0!==window.PublicKeyCredential,hideLoginForm:(0,It.loadState)("core","hideLoginForm",!1)}},methods:{passwordResetFinished:function(){this.resetPasswordTarget="",this.directLogin=!0}}},Ne=r(35162),Me={};Me.styleTagTransform=ye(),Me.setAttributes=me(),Me.insert=fe().bind(null,"head"),Me.domAPI=de(),Me.insertStyleElement=ve(),ce()(Ne.Z,Me),Ne.Z&&Ne.Z.locals&&Ne.Z.locals;var ze=(0,Mt.Z)($e,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return!t.hideLoginForm||t.directLogin?n("div",[n("transition",{attrs:{name:"fade",mode:"out-in"}},[t.passwordlessLogin||t.resetPassword||""!==t.resetPasswordTarget?!t.loading&&t.passwordlessLogin?n("div",{key:"reset",staticClass:"login-additional"},[n("PasswordLessLoginForm",{attrs:{username:t.user,"redirect-url":t.redirectUrl,"inverted-colors":t.invertedColors,"auto-complete-allowed":t.autoCompleteAllowed,"is-https":t.isHttps,"is-localhost":t.isLocalhost,"has-public-key-credential":t.hasPublicKeyCredential},on:{"update:username":function(e){t.user=e},submit:function(e){t.loading=!0}}}),t._v(" "),n("a",{attrs:{href:"#"},on:{click:function(e){e.preventDefault(),t.passwordlessLogin=!1}}},[t._v("\n\t\t\t\t"+t._s(t.t("core","Back"))+"\n\t\t\t")])],1):!t.loading&&t.canResetPassword?n("div",{key:"reset",staticClass:"login-additional"},[n("div",{staticClass:"lost-password-container"},[t.resetPassword?n("ResetPassword",{attrs:{username:t.user,"reset-password-link":t.resetPasswordLink,"inverted-colors":t.invertedColors},on:{"update:username":function(e){t.user=e},abort:function(e){t.resetPassword=!1}}}):t._e()],1)]):""!==t.resetPasswordTarget?n("div",[n("UpdatePassword",{attrs:{username:t.user,"reset-password-target":t.resetPasswordTarget,"inverted-colors":t.invertedColors},on:{"update:username":function(e){t.user=e},done:t.passwordResetFinished}})],1):t._e():n("div",{key:"login"},[n("LoginForm",{attrs:{username:t.user,"redirect-url":t.redirectUrl,"direct-login":t.directLogin,messages:t.messages,errors:t.errors,"throttle-delay":t.throttleDelay,"inverted-colors":t.invertedColors,"auto-complete-allowed":t.autoCompleteAllowed},on:{"update:username":function(e){t.user=e},submit:function(e){t.loading=!0}}}),t._v(" "),t.canResetPassword&&""!==t.resetPasswordLink?n("a",{attrs:{id:"lost-password",href:t.resetPasswordLink}},[t._v("\n\t\t\t\t"+t._s(t.t("core","Forgot password?"))+"\n\t\t\t")]):t.canResetPassword&&!t.resetPassword?n("a",{attrs:{id:"lost-password",href:t.resetPasswordLink},on:{click:function(e){e.preventDefault(),t.resetPassword=!0}}},[t._v("\n\t\t\t\t"+t._s(t.t("core","Forgot password?"))+"\n\t\t\t")]):t._e(),t._v(" "),n("br"),t._v(" "),t.hasPasswordless?[t.countAlternativeLogins?n("div",{staticClass:"alternative-logins"},[t.hasPasswordless?n("a",{staticClass:"button",class:{"single-alt-login-option":t.countAlternativeLogins},attrs:{href:"#"},on:{click:function(e){e.preventDefault(),t.passwordlessLogin=!0}}},[t._v("\n\t\t\t\t\t\t"+t._s(t.t("core","Log in with a device"))+"\n\t\t\t\t\t")]):t._e()]):n("a",{attrs:{href:"#"},on:{click:function(e){e.preventDefault(),t.passwordlessLogin=!0}}},[t._v("\n\t\t\t\t\t"+t._s(t.t("core","Log in with a device"))+"\n\t\t\t\t")])]:t._e()],2)])],1):n("div",[n("transition",{attrs:{name:"fade",mode:"out-in"}},[n("div",{staticClass:"warning"},[t._v("\n\t\t\t"+t._s(t.t("core","Login form is disabled."))),n("br"),t._v(" "),n("small",[t._v(t._s(t.t("core","Please contact your administrator."))+"\n\t\t\t")])])])],1)}),[],!1,null,null,null).exports,De={data:function(){return{OC:Ut}},methods:{t:wt.translate.bind(wt),n:wt.translatePlural.bind(wt)}};i.default.mixin(De),(new(i.default.extend(ze))).$mount("#login")},27429:function(t,e,n){"use strict";var o=n(87537),r=n.n(o),i=n(23645),a=n.n(i)()(r());a.push([t.id,".body-login-container.update[data-v-4f29a6e2]{margin:15px 0}.body-login-container.update.form__message-box[data-v-4f29a6e2]{width:240px;margin:5px}","",{version:3,sources:["webpack://./core/src/components/login/PasswordLessLoginForm.vue"],names:[],mappings:"AAmOA,8CACC,aAAA,CAEA,gEACC,WAAA,CACA,UAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.body-login-container.update {\n\tmargin: 15px 0;\n\n\t&.form__message-box {\n\t\twidth: 240px;\n\t\tmargin: 5px;\n\t}\n}\n"],sourceRoot:""}]),e.Z=a},44685:function(t,e,n){"use strict";var o=n(87537),r=n.n(o),i=n(23645),a=n.n(i)()(r());a.push([t.id,"\n.update[data-v-d9d670b8] {\n\twidth: auto;\n}\n","",{version:3,sources:["webpack://./core/src/components/login/ResetPassword.vue"],names:[],mappings:";AAmJA;CACA,WAAA;AACA",sourcesContent:["\x3c!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\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 --\x3e\n\n<template>\n\t<form @submit.prevent=\"submit\">\n\t\t<fieldset>\n\t\t\t<p>\n\t\t\t\t<input id=\"user\"\n\t\t\t\t\tv-model=\"user\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tname=\"user\"\n\t\t\t\t\tautocapitalize=\"off\"\n\t\t\t\t\t:placeholder=\"t('core', 'Username or email')\"\n\t\t\t\t\t:aria-label=\"t('core', 'Username or email')\"\n\t\t\t\t\trequired\n\t\t\t\t\t@change=\"updateUsername\">\n\t\t\t\t\x3c!--<?php p($_['user_autofocus'] ? 'autofocus' : ''); ?>\n\t\t\t\tautocomplete=\"<?php p($_['login_form_autocomplete']); ?>\" autocapitalize=\"none\" autocorrect=\"off\"--\x3e\n\t\t\t\t<label for=\"user\" class=\"infield\">{{ t('core', 'Username or email') }}</label>\n\t\t\t</p>\n\t\t\t<div id=\"reset-password-wrapper\">\n\t\t\t\t<input id=\"reset-password-submit\"\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\tclass=\"login primary\"\n\t\t\t\t\ttitle=\"\"\n\t\t\t\t\t:value=\"t('core', 'Reset password')\">\n\t\t\t\t<div class=\"submit-icon\"\n\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t'icon-confirm-white': !loading,\n\t\t\t\t\t\t'icon-loading-small': loading && invertedColors,\n\t\t\t\t\t\t'icon-loading-small-dark': loading && !invertedColors,\n\t\t\t\t\t}\" />\n\t\t\t</div>\n\t\t\t<p v-if=\"message === 'send-success'\"\n\t\t\t\tclass=\"update\">\n\t\t\t\t{{ t('core', 'A password reset message has been sent to the email address of this account. If you do not receive it, check your spam/junk folders or ask your local administrator for help.') }}\n\t\t\t\t<br>\n\t\t\t\t{{ t('core', 'If it is not there ask your local administrator.') }}\n\t\t\t</p>\n\t\t\t<p v-else-if=\"message === 'send-error'\"\n\t\t\t\tclass=\"update warning\">\n\t\t\t\t{{ t('core', 'Couldn\\'t send reset email. Please contact your administrator.') }}\n\t\t\t</p>\n\t\t\t<p v-else-if=\"message === 'reset-error'\"\n\t\t\t\tclass=\"update warning\">\n\t\t\t\t{{ t('core', 'Password cannot be changed. Please contact your administrator.') }}\n\t\t\t</p>\n\t\t\t<p v-else-if=\"message\"\n\t\t\t\tclass=\"update\"\n\t\t\t\t:class=\"{warning: error}\" />\n\n\t\t\t<a href=\"#\"\n\t\t\t\t@click.prevent=\"$emit('abort')\">\n\t\t\t\t{{ t('core', 'Back to login') }}\n\t\t\t</a>\n\t\t</fieldset>\n\t</form>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\n\nimport { generateUrl } from '@nextcloud/router'\n\nexport default {\n\tname: 'ResetPassword',\n\tprops: {\n\t\tusername: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tresetPasswordLink: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tinvertedColors: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\terror: false,\n\t\t\tloading: false,\n\t\t\tmessage: undefined,\n\t\t\tuser: this.username,\n\t\t}\n\t},\n\twatch: {\n\t\tusername(value) {\n\t\t\tthis.user = value\n\t\t},\n\t},\n\tmethods: {\n\t\tupdateUsername() {\n\t\t\tthis.$emit('update:username', this.user)\n\t\t},\n\t\tsubmit() {\n\t\t\tthis.loading = true\n\t\t\tthis.error = false\n\t\t\tthis.message = ''\n\t\t\tconst url = generateUrl('/lostpassword/email')\n\n\t\t\tconst data = {\n\t\t\t\tuser: this.user,\n\t\t\t}\n\n\t\t\treturn axios.post(url, data)\n\t\t\t\t.then(resp => resp.data)\n\t\t\t\t.then(data => {\n\t\t\t\t\tif (data.status !== 'success') {\n\t\t\t\t\t\tthrow new Error(`got status ${data.status}`)\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.message = 'send-success'\n\t\t\t\t})\n\t\t\t\t.catch(e => {\n\t\t\t\t\tconsole.error('could not send reset email request', e)\n\n\t\t\t\t\tthis.error = true\n\t\t\t\t\tthis.message = 'send-error'\n\t\t\t\t})\n\t\t\t\t.then(() => { this.loading = false })\n\t\t},\n\t},\n}\n<\/script>\n\n<style scoped>\n\t.update {\n\t\twidth: auto;\n\t}\n</style>\n"],sourceRoot:""}]),e.Z=a},91123:function(t,e,n){"use strict";var o=n(87537),r=n.n(o),i=n(23645),a=n.n(i)()(r());a.push([t.id,"\nfieldset[data-v-9ae5fdb4] {\n\ttext-align: center;\n}\ninput[type=submit][data-v-9ae5fdb4] {\n\tmargin-top: 20px;\n}\n","",{version:3,sources:["webpack://./core/src/components/login/UpdatePassword.vue"],names:[],mappings:";AA4IA;CACA,kBAAA;AACA;AAEA;CACA,gBAAA;AACA",sourcesContent:['\x3c!--\n - @copyright Copyright (c) 2019 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 --\x3e\n\n<template>\n\t<form @submit.prevent="submit">\n\t\t<fieldset>\n\t\t\t<p>\n\t\t\t\t<label for="password" class="infield">{{ t(\'core\', \'New password\') }}</label>\n\t\t\t\t<input id="password"\n\t\t\t\t\tv-model="password"\n\t\t\t\t\ttype="password"\n\t\t\t\t\tname="password"\n\t\t\t\t\tautocomplete="new-password"\n\t\t\t\t\tautocapitalize="none"\n\t\t\t\t\tautocorrect="off"\n\t\t\t\t\trequired\n\t\t\t\t\t:placeholder="t(\'core\', \'New password\')">\n\t\t\t</p>\n\n\t\t\t<div v-if="encrypted" class="update">\n\t\t\t\t<p>\n\t\t\t\t\t{{ t(\'core\', \'Your files are encrypted. There will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?\') }}\n\t\t\t\t</p>\n\t\t\t\t<input id="encrypted-continue"\n\t\t\t\t\tv-model="proceed"\n\t\t\t\t\ttype="checkbox"\n\t\t\t\t\tclass="checkbox">\n\t\t\t\t<label for="encrypted-continue">\n\t\t\t\t\t{{ t(\'core\', \'I know what I\\\'m doing\') }}\n\t\t\t\t</label>\n\t\t\t</div>\n\n\t\t\t<div id="submit-wrapper">\n\t\t\t\t<input id="submit"\n\t\t\t\t\ttype="submit"\n\t\t\t\t\tclass="login primary"\n\t\t\t\t\ttitle=""\n\t\t\t\t\t:value="!loading ? t(\'core\', \'Reset password\') : t(\'core\', \'Resetting password\')">\n\t\t\t\t<div class="submit-icon"\n\t\t\t\t\t:class="{\n\t\t\t\t\t\t\'icon-loading-small\': loading && invertedColors,\n\t\t\t\t\t\t\'icon-loading-small-dark\': loading && !invertedColors\n\t\t\t\t\t}" />\n\t\t\t</div>\n\n\t\t\t<p v-if="error && message" :class="{warning: error}">\n\t\t\t\t{{ message }}\n\t\t\t</p>\n\t\t</fieldset>\n\t</form>\n</template>\n\n<script>\nimport Axios from \'@nextcloud/axios\'\n\nexport default {\n\tname: \'UpdatePassword\',\n\tprops: {\n\t\tusername: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tresetPasswordTarget: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tinvertedColors: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\terror: false,\n\t\t\tloading: false,\n\t\t\tmessage: undefined,\n\t\t\tuser: this.username,\n\t\t\tpassword: \'\',\n\t\t\tencrypted: false,\n\t\t\tproceed: false,\n\t\t}\n\t},\n\twatch: {\n\t\tusername(value) {\n\t\t\tthis.user = value\n\t\t},\n\t},\n\tmethods: {\n\t\tasync submit() {\n\t\t\tthis.loading = true\n\t\t\tthis.error = false\n\t\t\tthis.message = \'\'\n\n\t\t\ttry {\n\t\t\t\tconst { data } = await Axios.post(this.resetPasswordTarget, {\n\t\t\t\t\tpassword: this.password,\n\t\t\t\t\tproceed: this.proceed,\n\t\t\t\t})\n\t\t\t\tif (data && data.status === \'success\') {\n\t\t\t\t\tthis.message = \'send-success\'\n\t\t\t\t\tthis.$emit(\'update:username\', this.user)\n\t\t\t\t\tthis.$emit(\'done\')\n\t\t\t\t} else if (data && data.encryption) {\n\t\t\t\t\tthis.encrypted = true\n\t\t\t\t} else if (data && data.msg) {\n\t\t\t\t\tthrow new Error(data.msg)\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tthis.error = true\n\t\t\t\tthis.message = e.message ? e.message : t(\'core\', \'Password cannot be changed. Please contact your administrator.\')\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 scoped>\n\tfieldset {\n\t\ttext-align: center;\n\t}\n\n\tinput[type=submit] {\n\t\tmargin-top: 20px;\n\t}\n</style>\n'],sourceRoot:""}]),e.Z=a},35162:function(t,e,n){"use strict";var o=n(87537),r=n.n(o),i=n(23645),a=n.n(i)()(r());a.push([t.id,"\n.fade-enter-active, .fade-leave-active {\n\ttransition: opacity .3s;\n}\n.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {\n\topacity: 0;\n}\n","",{version:3,sources:["webpack://./core/src/views/Login.vue"],names:[],mappings:";AAiLA;CACA,uBAAA;AACA;AACA;CACA,UAAA;AACA",sourcesContent:["\x3c!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\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 --\x3e\n\n<template>\n\t<div v-if=\"!hideLoginForm || directLogin\">\n\t\t<transition name=\"fade\" mode=\"out-in\">\n\t\t\t<div v-if=\"!passwordlessLogin && !resetPassword && resetPasswordTarget === ''\"\n\t\t\t\tkey=\"login\">\n\t\t\t\t<LoginForm :username.sync=\"user\"\n\t\t\t\t\t:redirect-url=\"redirectUrl\"\n\t\t\t\t\t:direct-login=\"directLogin\"\n\t\t\t\t\t:messages=\"messages\"\n\t\t\t\t\t:errors=\"errors\"\n\t\t\t\t\t:throttle-delay=\"throttleDelay\"\n\t\t\t\t\t:inverted-colors=\"invertedColors\"\n\t\t\t\t\t:auto-complete-allowed=\"autoCompleteAllowed\"\n\t\t\t\t\t@submit=\"loading = true\" />\n\t\t\t\t<a v-if=\"canResetPassword && resetPasswordLink !== ''\"\n\t\t\t\t\tid=\"lost-password\"\n\t\t\t\t\t:href=\"resetPasswordLink\">\n\t\t\t\t\t{{ t('core', 'Forgot password?') }}\n\t\t\t\t</a>\n\t\t\t\t<a v-else-if=\"canResetPassword && !resetPassword\"\n\t\t\t\t\tid=\"lost-password\"\n\t\t\t\t\t:href=\"resetPasswordLink\"\n\t\t\t\t\t@click.prevent=\"resetPassword = true\">\n\t\t\t\t\t{{ t('core', 'Forgot password?') }}\n\t\t\t\t</a>\n\t\t\t\t<br>\n\t\t\t\t<template v-if=\"hasPasswordless\">\n\t\t\t\t\t<div v-if=\"countAlternativeLogins\"\n\t\t\t\t\t\tclass=\"alternative-logins\">\n\t\t\t\t\t\t<a v-if=\"hasPasswordless\"\n\t\t\t\t\t\t\tclass=\"button\"\n\t\t\t\t\t\t\t:class=\"{ 'single-alt-login-option': countAlternativeLogins }\"\n\t\t\t\t\t\t\thref=\"#\"\n\t\t\t\t\t\t\t@click.prevent=\"passwordlessLogin = true\">\n\t\t\t\t\t\t\t{{ t('core', 'Log in with a device') }}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<a v-else\n\t\t\t\t\t\thref=\"#\"\n\t\t\t\t\t\t@click.prevent=\"passwordlessLogin = true\">\n\t\t\t\t\t\t{{ t('core', 'Log in with a device') }}\n\t\t\t\t\t</a>\n\t\t\t\t</template>\n\t\t\t</div>\n\t\t\t<div v-else-if=\"!loading && passwordlessLogin\"\n\t\t\t\tkey=\"reset\"\n\t\t\t\tclass=\"login-additional\">\n\t\t\t\t<PasswordLessLoginForm :username.sync=\"user\"\n\t\t\t\t\t:redirect-url=\"redirectUrl\"\n\t\t\t\t\t:inverted-colors=\"invertedColors\"\n\t\t\t\t\t:auto-complete-allowed=\"autoCompleteAllowed\"\n\t\t\t\t\t:is-https=\"isHttps\"\n\t\t\t\t\t:is-localhost=\"isLocalhost\"\n\t\t\t\t\t:has-public-key-credential=\"hasPublicKeyCredential\"\n\t\t\t\t\t@submit=\"loading = true\" />\n\t\t\t\t<a href=\"#\" @click.prevent=\"passwordlessLogin = false\">\n\t\t\t\t\t{{ t('core', 'Back') }}\n\t\t\t\t</a>\n\t\t\t</div>\n\t\t\t<div v-else-if=\"!loading && canResetPassword\"\n\t\t\t\tkey=\"reset\"\n\t\t\t\tclass=\"login-additional\">\n\t\t\t\t<div class=\"lost-password-container\">\n\t\t\t\t\t<ResetPassword v-if=\"resetPassword\"\n\t\t\t\t\t\t:username.sync=\"user\"\n\t\t\t\t\t\t:reset-password-link=\"resetPasswordLink\"\n\t\t\t\t\t\t:inverted-colors=\"invertedColors\"\n\t\t\t\t\t\t@abort=\"resetPassword = false\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div v-else-if=\"resetPasswordTarget !== ''\">\n\t\t\t\t<UpdatePassword :username.sync=\"user\"\n\t\t\t\t\t:reset-password-target=\"resetPasswordTarget\"\n\t\t\t\t\t:inverted-colors=\"invertedColors\"\n\t\t\t\t\t@done=\"passwordResetFinished\" />\n\t\t\t</div>\n\t\t</transition>\n\t</div>\n\t<div v-else>\n\t\t<transition name=\"fade\" mode=\"out-in\">\n\t\t\t<div class=\"warning\">\n\t\t\t\t{{ t('core', 'Login form is disabled.') }}<br>\n\t\t\t\t<small>{{ t('core', 'Please contact your administrator.') }}\n\t\t\t\t</small>\n\t\t\t</div>\n\t\t</transition>\n\t</div>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\nimport queryString from 'query-string'\n\nimport LoginForm from '../components/login/LoginForm.vue'\nimport PasswordLessLoginForm from '../components/login/PasswordLessLoginForm.vue'\nimport ResetPassword from '../components/login/ResetPassword.vue'\nimport UpdatePassword from '../components/login/UpdatePassword.vue'\n\nconst query = queryString.parse(location.search)\nif (query.clear === '1') {\n\ttry {\n\t\twindow.localStorage.clear()\n\t\twindow.sessionStorage.clear()\n\t\tconsole.debug('Browser storage cleared')\n\t} catch (e) {\n\t\tconsole.error('Could not clear browser storage', e)\n\t}\n}\n\nexport default {\n\tname: 'Login',\n\n\tcomponents: {\n\t\tLoginForm,\n\t\tPasswordLessLoginForm,\n\t\tResetPassword,\n\t\tUpdatePassword,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t\tuser: loadState('core', 'loginUsername', ''),\n\t\t\tpasswordlessLogin: false,\n\t\t\tresetPassword: false,\n\n\t\t\t// Initial data\n\t\t\terrors: loadState('core', 'loginErrors', []),\n\t\t\tmessages: loadState('core', 'loginMessages', []),\n\t\t\tredirectUrl: loadState('core', 'loginRedirectUrl', false),\n\t\t\tthrottleDelay: loadState('core', 'loginThrottleDelay', 0),\n\t\t\tinvertedColors: OCA.Theming && OCA.Theming.inverted,\n\t\t\tcanResetPassword: loadState('core', 'loginCanResetPassword', false),\n\t\t\tresetPasswordLink: loadState('core', 'loginResetPasswordLink', ''),\n\t\t\tautoCompleteAllowed: loadState('core', 'loginAutocomplete', true),\n\t\t\tresetPasswordTarget: loadState('core', 'resetPasswordTarget', ''),\n\t\t\tresetPasswordUser: loadState('core', 'resetPasswordUser', ''),\n\t\t\tdirectLogin: query.direct === '1',\n\t\t\thasPasswordless: loadState('core', 'webauthn-available', false),\n\t\t\tcountAlternativeLogins: loadState('core', 'countAlternativeLogins', false),\n\t\t\tisHttps: window.location.protocol === 'https:',\n\t\t\tisLocalhost: window.location.hostname === 'localhost',\n\t\t\thasPublicKeyCredential: typeof (window.PublicKeyCredential) !== 'undefined',\n\t\t\thideLoginForm: loadState('core', 'hideLoginForm', false),\n\t\t}\n\t},\n\tmethods: {\n\t\tpasswordResetFinished() {\n\t\t\tthis.resetPasswordTarget = ''\n\t\t\tthis.directLogin = true\n\t\t},\n\t},\n}\n<\/script>\n\n<style>\n\t.fade-enter-active, .fade-leave-active {\n\t\ttransition: opacity .3s;\n\t}\n\t.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {\n\t\topacity: 0;\n\t}\n</style>\n"],sourceRoot:""}]),e.Z=a},10944:function(t,e,n){var o=n(40202);t.exports=(o.default||o).template({1:function(t,e,n,o,r){var i,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(i=a(n,"if").call(null!=e?e:t.nullContext||{},null!=(i=null!=e?a(e,"contact"):e)?a(i,"profileUrl"):i,{name:"if",hash:{},fn:t.program(2,r,0),inverse:t.program(5,r,0),data:r,loc:{start:{line:2,column:1},end:{line:10,column:8}}}))?i:""},2:function(t,e,n,o,r){var i,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(i=a(n,"if").call(null!=e?e:t.nullContext||{},null!=(i=null!=e?a(e,"contact"):e)?a(i,"profileTitle"):i,{name:"if",hash:{},fn:t.program(3,r,0),inverse:t.noop,data:r,loc:{start:{line:3,column:2},end:{line:7,column:9}}}))?i:""},3:function(t,e,n,o,r){var i,a=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(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"profileUrl"):i,e))+'">\n\t\t\t\t<img src="'+s(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"avatar"):i,e))+'&size=32" class="avatar" srcset="'+s(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"avatar"):i,e))+"&size=32 1x, "+s(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"avatar"):i,e))+"&size=64 2x, "+s(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"avatar"):i,e))+'&size=128 4x" alt="">\n\t\t\t</a>\n'},5:function(t,e,n,o,r){var i,a=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(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"avatar"):i,e))+'&size=32" class="avatar" srcset="'+s(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"avatar"):i,e))+"&size=32 1x, "+s(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"avatar"):i,e))+"&size=64 2x, "+s(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"avatar"):i,e))+'&size=128 4x" alt="">\n'},7:function(t,e,n,o,r){var i,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(i=a(n,"if").call(null!=e?e:t.nullContext||{},null!=(i=null!=e?a(e,"contact"):e)?a(i,"profileUrl"):i,{name:"if",hash:{},fn:t.program(8,r,0),inverse:t.program(11,r,0),data:r,loc:{start:{line:12,column:1},end:{line:20,column:8}}}))?i:""},8:function(t,e,n,o,r){var i,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(i=a(n,"if").call(null!=e?e:t.nullContext||{},null!=(i=null!=e?a(e,"contact"):e)?a(i,"profileTitle"):i,{name:"if",hash:{},fn:t.program(9,r,0),inverse:t.noop,data:r,loc:{start:{line:13,column:2},end:{line:17,column:9}}}))?i:""},9:function(t,e,n,o,r){var i,a=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!=(i=null!=e?a(e,"contact"):e)?a(i,"profileUrl"):i,e))+'">\n\t\t\t\t<div class="avatar"></div>\n\t\t\t</a>\n'},11:function(t,e,n,o,r){return'\t\t<div class="avatar"></div>\n'},13:function(t,e,n,o,r){var i,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(i=a(n,"if").call(null!=e?e:t.nullContext||{},null!=(i=null!=e?a(e,"contact"):e)?a(i,"profileTitle"):i,{name:"if",hash:{},fn:t.program(14,r,0),inverse:t.noop,data:r,loc:{start:{line:23,column:1},end:{line:29,column:8}}}))?i:""},14:function(t,e,n,o,r){var i,a=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(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"profileUrl"):i,e))+'">\n\t\t\t<div class="full-name">'+s(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"fullName"):i,e))+'</div>\n\t\t\t<div class="last-message">'+s(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"lastMessage"):i,e))+'</div>\n\t\t\t<div class="email-address">'+s(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"emailAddresses"):i,e))+"</div>\n\t\t</a>\n"},16:function(t,e,n,o,r){var i,a=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(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"fullName"):i,e))+'</div>\n\t\t<div class="last-message">'+s(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"lastMessage"):i,e))+'</div>\n\t\t<div class="email-address">'+s(a(null!=(i=null!=e?l(e,"contact"):e)?l(i,"emailAddresses"):i,e))+"</div>\n\t</div>\n"},18:function(t,e,n,o,r){var i,a=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<a class="top-action" href="'+s(a(null!=(i=null!=(i=null!=e?l(e,"contact"):e)?l(i,"topAction"):i)?l(i,"hyperlink"):i,e))+'" title="'+s(a(null!=(i=null!=(i=null!=e?l(e,"contact"):e)?l(i,"topAction"):i)?l(i,"title"):i,e))+'">\n\t<img src="'+s(a(null!=(i=null!=(i=null!=e?l(e,"contact"):e)?l(i,"topAction"):i)?l(i,"icon"):i,e))+'" alt="'+s(a(null!=(i=null!=(i=null!=e?l(e,"contact"):e)?l(i,"topAction"):i)?l(i,"title"):i,e))+'">\n</a>\n'},20:function(t,e,n,o,r){var i,a=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(a(null!=(i=null!=(i=null!=e?l(e,"contact"):e)?l(i,"secondAction"):i)?l(i,"hyperlink"):i,e))+'" title="'+s(a(null!=(i=null!=(i=null!=e?l(e,"contact"):e)?l(i,"secondAction"):i)?l(i,"title"):i,e))+'">\n\t<img src="'+s(a(null!=(i=null!=(i=null!=e?l(e,"contact"):e)?l(i,"secondAction"):i)?l(i,"icon"):i,e))+'" alt="'+s(a(null!=(i=null!=(i=null!=e?l(e,"contact"):e)?l(i,"secondAction"):i)?l(i,"title"):i,e))+'">\n</a>\n'},22:function(t,e,n,o,r){var i,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t<span class="other-actions icon-more"></span>\n\t<div class="menu popovermenu">\n\t\t<ul>\n'+(null!=(i=a(n,"each").call(null!=e?e:t.nullContext||{},null!=(i=null!=e?a(e,"contact"):e)?a(i,"actions"):i,{name:"each",hash:{},fn:t.program(23,r,0),inverse:t.noop,data:r,loc:{start:{line:51,column:3},end:{line:58,column:12}}}))?i:"")+"\t\t</ul>\n\t</div>\n"},23:function(t,e,n,o,r){var i,a=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(i=null!=(i=u(n,"hyperlink")||(null!=e?u(e,"hyperlink"):e))?i:s)===l?i.call(a,{name:"hyperlink",hash:{},data:r,loc:{start:{line:53,column:13},end:{line:53,column:26}}}):i)+'">\n\t\t\t\t\t<img src="'+c(typeof(i=null!=(i=u(n,"icon")||(null!=e?u(e,"icon"):e))?i:s)===l?i.call(a,{name:"icon",hash:{},data:r,loc:{start:{line:54,column:15},end:{line:54,column:23}}}):i)+'" alt="">\n\t\t\t\t\t<span>'+c(typeof(i=null!=(i=u(n,"title")||(null!=e?u(e,"title"):e))?i:s)===l?i.call(a,{name:"title",hash:{},data:r,loc:{start:{line:55,column:11},end:{line:55,column:20}}}):i)+"</span>\n\t\t\t\t</a>\n\t\t\t</li>\n"},compiler:[8,">= 4.3.0"],main:function(t,e,n,o,r){var i,a=null!=e?e:t.nullContext||{},s=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return(null!=(i=s(n,"if").call(a,null!=(i=null!=e?s(e,"contact"):e)?s(i,"avatar"):i,{name:"if",hash:{},fn:t.program(1,r,0),inverse:t.program(7,r,0),data:r,loc:{start:{line:1,column:0},end:{line:21,column:7}}}))?i:"")+(null!=(i=s(n,"if").call(a,null!=(i=null!=e?s(e,"contact"):e)?s(i,"profileUrl"):i,{name:"if",hash:{},fn:t.program(13,r,0),inverse:t.program(16,r,0),data:r,loc:{start:{line:22,column:0},end:{line:36,column:7}}}))?i:"")+(null!=(i=s(n,"if").call(a,null!=(i=null!=e?s(e,"contact"):e)?s(i,"topAction"):i,{name:"if",hash:{},fn:t.program(18,r,0),inverse:t.noop,data:r,loc:{start:{line:37,column:0},end:{line:41,column:7}}}))?i:"")+(null!=(i=s(n,"if").call(a,null!=(i=null!=e?s(e,"contact"):e)?s(i,"hasTwoActions"):i,{name:"if",hash:{},fn:t.program(20,r,0),inverse:t.noop,data:r,loc:{start:{line:42,column:0},end:{line:46,column:7}}}))?i:"")+(null!=(i=s(n,"if").call(a,null!=(i=null!=e?s(e,"contact"):e)?s(i,"hasManyActions"):i,{name:"if",hash:{},fn:t.program(22,r,0),inverse:t.noop,data:r,loc:{start:{line:47,column:0},end:{line:61,column:7}}}))?i:"")},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,r){var i,a=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(i=null!=(i=a(n,"couldNotLoadText")||(null!=e?a(e,"couldNotLoadText"):e))?i:t.hooks.helperMissing)?i.call(null!=e?e:t.nullContext||{},{name:"couldNotLoadText",hash:{},data:r,loc:{start:{line:3,column:5},end:{line:3,column:25}}}):i)+"</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,r){var i,a=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(i=null!=(i=a(n,"noContactsFoundText")||(null!=e?a(e,"noContactsFoundText"):e))?i:t.hooks.helperMissing)?i.call(null!=e?e:t.nullContext||{},{name:"noContactsFoundText",hash:{},data:r,loc:{start:{line:4,column:5},end:{line:4,column:28}}}):i)+"</h2>\n</div>\n"},3:function(t,e,n,o,r){var i,a=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(i=null!=(i=u(n,"contactsAppURL")||(null!=e?u(e,"contactsAppURL"):e))?i:s)===l?i.call(a,{name:"contactsAppURL",hash:{},data:r,loc:{start:{line:9,column:29},end:{line:9,column:47}}}):i)+'">'+c(typeof(i=null!=(i=u(n,"showAllContactsText")||(null!=e?u(e,"showAllContactsText"):e))?i:s)===l?i.call(a,{name:"showAllContactsText",hash:{},data:r,loc:{start:{line:9,column:49},end:{line:9,column:72}}}):i)+"</a></div>\n"},5:function(t,e,n,o,r){var i,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(i=a(n,"if").call(null!=e?e:t.nullContext||{},null!=e?a(e,"canInstallApp"):e,{name:"if",hash:{},fn:t.program(6,r,0),inverse:t.noop,data:r,loc:{start:{line:10,column:0},end:{line:12,column:0}}}))?i:""},6:function(t,e,n,o,r){var i,a=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(i=null!=(i=u(n,"contactsAppMgmtURL")||(null!=e?u(e,"contactsAppMgmtURL"):e))?i:s)===l?i.call(a,{name:"contactsAppMgmtURL",hash:{},data:r,loc:{start:{line:11,column:29},end:{line:11,column:51}}}):i)+'">'+c(typeof(i=null!=(i=u(n,"contactsAppMgmtText")||(null!=e?u(e,"contactsAppMgmtText"):e))?i:s)===l?i.call(a,{name:"contactsAppMgmtText",hash:{},data:r,loc:{start:{line:11,column:53},end:{line:11,column:76}}}):i)+"</a></div>\n"},compiler:[8,">= 4.3.0"],main:function(t,e,n,o,r){var i,a=null!=e?e:t.nullContext||{},s=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return(null!=(i=s(n,"unless").call(a,null!=(i=null!=e?s(e,"contacts"):e)?s(i,"length"):i,{name:"unless",hash:{},fn:t.program(1,r,0),inverse:t.noop,data:r,loc:{start:{line:1,column:0},end:{line:6,column:11}}}))?i:"")+'<div id="contactsmenu-contacts"></div>\n'+(null!=(i=s(n,"if").call(a,null!=e?s(e,"contactsAppEnabled"):e,{name:"if",hash:{},fn:t.program(3,r,0),inverse:t.program(5,r,0),data:r,loc:{start:{line:8,column:0},end:{line:12,column:7}}}))?i:"")},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,r){var i,a=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(i=null!=(i=a(n,"loadingText")||(null!=e?a(e,"loadingText"):e))?i:t.hooks.helperMissing)?i.call(null!=e?e:t.nullContext||{},{name:"loadingText",hash:{},data:r,loc:{start:{line:3,column:5},end:{line:3,column:20}}}):i)+"</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,r){var i,a=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(i=null!=(i=u(n,"searchContactsText")||(null!=e?u(e,"searchContactsText"):e))?i:s)===l?i.call(a,{name:"searchContactsText",hash:{},data:r,loc:{start:{line:1,column:57},end:{line:1,column:79}}}):i)+'</label>\n<input id="contactsmenu-search" type="search" placeholder="'+c(typeof(i=null!=(i=u(n,"searchContactsText")||(null!=e?u(e,"searchContactsText"):e))?i:s)===l?i.call(a,{name:"searchContactsText",hash:{},data:r,loc:{start:{line:2,column:59},end:{line:2,column:81}}}):i)+'" value="'+c(typeof(i=null!=(i=u(n,"searchTerm")||(null!=e?u(e,"searchTerm"):e))?i:s)===l?i.call(a,{name:"searchTerm",hash:{},data:r,loc:{start:{line:2,column:90},end:{line:2,column:104}}}):i)+'">\n<div class="content">\n</div>\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 r(t){var e=i(t);return n(e)}function i(t){if(!n.o(o,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return o[t]}r.keys=function(){return Object.keys(o)},r.resolve=i,t.exports=r,r.id=46700}},r={};function i(t){var e=r[t];if(void 0!==e)return e.exports;var n=r[t]={id:t,loaded:!1,exports:{}};return o[t].call(n.exports,n,n.exports,i),n.loaded=!0,n.exports}i.m=o,i.amdD=function(){throw new Error("define cannot be used indirect")},i.amdO={},e=[],i.O=function(t,n,o,r){if(!n){var a=1/0;for(u=0;u<e.length;u++){n=e[u][0],o=e[u][1],r=e[u][2];for(var s=!0,l=0;l<n.length;l++)(!1&r||a>=r)&&Object.keys(i.O).every((function(t){return i.O[t](n[l])}))?n.splice(l--,1):(s=!1,r<a&&(a=r));if(s){e.splice(u--,1);var c=o();void 0!==c&&(t=c)}}return t}r=r||0;for(var u=e.length;u>0&&e[u-1][2]>r;u--)e[u]=e[u-1];e[u]=[n,o,r]},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,{a:e}),e},i.d=function(t,e){for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},i.j=4577,function(){i.b=document.baseURI||self.location.href;var t={4577:0};i.O.j=function(e){return 0===t[e]};var e=function(e,n){var o,r,a=n[0],s=n[1],l=n[2],c=0;if(a.some((function(e){return 0!==t[e]}))){for(o in s)i.o(s,o)&&(i.m[o]=s[o]);if(l)var u=l(i)}for(e&&e(n);c<a.length;c++)r=a[c],i.o(t,r)&&t[r]&&t[r][0](),t[r]=0;return i.O(u)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))}();var a=i.O(void 0,[7874],(function(){return i(10473)}));a=i.O(a)}();
+//# sourceMappingURL=core-login.js.map?v=c18ca6ea01ee60bfe54b \ No newline at end of file
diff --git a/dist/core-login.js.map b/dist/core-login.js.map
index 5d279c3b1d8..060e704e959 100644
--- a/dist/core-login.js.map
+++ b/dist/core-login.js.map
@@ -1 +1 @@
-{"version":3,"file":"core-login.js?v=44a989243446297134dd","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/index.js","webpack:///nextcloud/core/src/OCA/search.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/views/Login.vue?vue&type=template&id=cdd35698&","webpack:///nextcloud/core/src/components/login/LoginButton.vue?vue&type=script&lang=js&","webpack:///nextcloud/core/src/components/login/LoginButton.vue","webpack://nextcloud/./core/src/components/login/LoginButton.vue?14f0","webpack:///nextcloud/core/src/components/login/LoginButton.vue?vue&type=template&id=125b100b&scoped=true&","webpack:///nextcloud/core/src/components/login/LoginForm.vue?vue&type=script&lang=js&","webpack:///nextcloud/core/src/components/login/LoginForm.vue","webpack://nextcloud/./core/src/components/login/LoginForm.vue?a678","webpack:///nextcloud/core/src/components/login/LoginForm.vue?vue&type=template&id=0b3a0522&scoped=true&","webpack:///nextcloud/core/src/components/login/PasswordLessLoginForm.vue","webpack:///nextcloud/core/src/components/login/PasswordLessLoginForm.vue?vue&type=script&lang=js&","webpack:///nextcloud/core/src/services/WebAuthnAuthenticationService.js","webpack://nextcloud/./core/src/components/login/PasswordLessLoginForm.vue?d427","webpack://nextcloud/./core/src/components/login/PasswordLessLoginForm.vue?09eb","webpack:///nextcloud/core/src/components/login/PasswordLessLoginForm.vue?vue&type=template&id=4f29a6e2&scoped=true&","webpack:///nextcloud/core/src/components/login/ResetPassword.vue?vue&type=script&lang=js&","webpack:///nextcloud/core/src/components/login/ResetPassword.vue","webpack://nextcloud/./core/src/components/login/ResetPassword.vue?0bfe","webpack://nextcloud/./core/src/components/login/ResetPassword.vue?9d75","webpack:///nextcloud/core/src/components/login/ResetPassword.vue?vue&type=template&id=d9d670b8&scoped=true&","webpack:///nextcloud/core/src/components/login/UpdatePassword.vue","webpack:///nextcloud/core/src/components/login/UpdatePassword.vue?vue&type=script&lang=js&","webpack://nextcloud/./core/src/components/login/UpdatePassword.vue?9464","webpack://nextcloud/./core/src/components/login/UpdatePassword.vue?30ca","webpack:///nextcloud/core/src/components/login/UpdatePassword.vue?vue&type=template&id=9ae5fdb4&scoped=true&","webpack:///nextcloud/core/src/views/Login.vue","webpack:///nextcloud/core/src/views/Login.vue?vue&type=script&lang=js&","webpack://nextcloud/./core/src/views/Login.vue?8b77","webpack://nextcloud/./core/src/views/Login.vue?3468","webpack:///nextcloud/core/src/mixins/Nextcloud.js","webpack:///nextcloud/core/src/login.js","webpack:///nextcloud/core/src/components/login/PasswordLessLoginForm.vue?vue&type=style&index=0&id=4f29a6e2&lang=scss&scoped=true&","webpack:///nextcloud/core/src/components/login/ResetPassword.vue?vue&type=style&index=0&id=d9d670b8&scoped=true&lang=css&","webpack:///nextcloud/core/src/components/login/UpdatePassword.vue?vue&type=style&index=0&id=9ae5fdb4&scoped=true&lang=css&","webpack:///nextcloud/core/src/views/Login.vue?vue&type=style&index=0&lang=css&","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/node_modules/moment/locale|sync|/^\\.\\/.*$","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/amd define","webpack:///nextcloud/webpack/runtime/amd options","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/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 {jQuery} options.el\n * @param {jQuery} options.trigger\n * @class ContactsMenu\n * @memberOf OC\n */\nconst ContactsMenu = function(options) {\n\tthis.initialize(options)\n}\n\nContactsMenu.prototype = {\n\t/** @type {jQuery} */\n\t$el: undefined,\n\n\t/** @type {jQuery} */\n\t_$trigger: 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 {jQuery} options.el - the element to render the menu in\n\t * @param {jQuery} options.trigger - the element to click on to open the menu\n\t * @returns {undefined}\n\t */\n\tinitialize: function(options) {\n\t\tthis.$el = options.el\n\t\tthis._$trigger = options.trigger\n\n\t\tthis._view = new ContactsMenuView({\n\t\t\tel: this.$el\n\t\t})\n\t\tthis._view.on('search', function(searchTerm) {\n\t\t\tthis._loadContacts(searchTerm)\n\t\t}, this)\n\n\t\tOC.registerMenu(this._$trigger, this.$el, function() {\n\t\t\tthis._toggleVisibility(true)\n\t\t}.bind(this), true)\n\t\tthis.$el.on('beforeHide', function() {\n\t\t\tthis._toggleVisibility(false)\n\t\t}.bind(this))\n\t},\n\n\t/**\n\t * @private\n\t * @param {boolean} show\n\t * @returns {Promise}\n\t */\n\t_toggleVisibility: function(show) {\n\t\tif (show) {\n\t\t\treturn this._loadContacts()\n\t\t} else {\n\t\t\tthis.$el.html('')\n\t\t\treturn Promise.resolve()\n\t\t}\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\t_loadContacts: 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 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 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 * @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'\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 {{type: Int, 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 */\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\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\tself.$filePicker.find('#picker-view-toggle').remove()\n\t\t\tself.$filePicker.find('#picker-filestable').removeClass('view-grid')\n\n\t\t\t$('body').append(self.$filePicker)\n\n\t\t\tself.$showGridView = $('input#picker-showgridview')\n\t\t\tself.$showGridView.on('change', _.bind(self._onGridviewChange, self))\n\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\tnewButton.hide()\n\t\t\t}\n\t\t\tnewButton.on('focus', function() {\n\t\t\t\tself.$filePicker.ocdialog('setEnterCallback', function() {\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() {\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$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)\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.keypress(function(event) {\n\t\t\t\tif (event.keyCode === 13 || event.which === 13) {\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$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', 'div:not(:last-child)', self, function(event) {\n\t\t\t\t\tself._handleTreeListSelect(event, type)\n\t\t\t\t})\n\t\t\t\tself.$filelist.on('click', 'tr', function(event) {\n\t\t\t\t\tself._handlePickerClick(event, $(this), type)\n\t\t\t\t})\n\t\t\t\tself.$fileListHeader.on('click', 'a', function(event) {\n\t\t\t\t\tvar dir = self.$filePicker.data('path')\n\t\t\t\t\tself.filepicker.sortField = $(event.currentTarget).data('sort')\n\t\t\t\t\tself.filepicker.sortOrder = self.filepicker.sortOrder === 'asc' ? 'desc' : 'asc'\n\t\t\t\t\tself._fillFilePicker(dir)\n\t\t\t\t})\n\t\t\t\tself._fillFilePicker(path)\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\tvar self = this\n\t\t$.get(OC.generateUrl('/apps/files/api/v1/showgridview'), function(response) {\n\t\t\tself.$showGridView.get(0).checked = response.gridview\n\t\t\tself.$showGridView.next('#picker-view-toggle')\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\t$('.list-container').toggleClass('view-grid', response.gridview)\n\t\t})\n\t},\n\t_onGridviewChange: function() {\n\t\tvar show = this.$showGridView.is(':checked')\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'), {\n\t\t\t\tshow: show\n\t\t\t})\n\t\t}\n\t\tthis.$showGridView.next('#picker-view-toggle')\n\t\t\t.removeClass('icon-toggle-filelist icon-toggle-pictures')\n\t\t\t.addClass(show ? 'icon-toggle-filelist' : 'icon-toggle-pictures')\n\t\t$('.list-container').toggleClass('view-grid', show)\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\t_getFileList: function(dir, mimeType) { // this is only used by the spreedme app atm\n\t\tif (typeof (mimeType) === 'string') {\n\t\t\tmimeType = [mimeType]\n\t\t}\n\n\t\treturn $.getJSON(\n\t\t\tOC.filePath('files', 'ajax', 'list.php'),\n\t\t\t{\n\t\t\t\tdir: dir,\n\t\t\t\tmimetypes: JSON.stringify(mimeType)\n\t\t\t}\n\t\t)\n\t},\n\n\t/**\n\t * fills the filepicker with files\n\t */\n\t_fillFilePicker: function(dir) {\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\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\t\tself.filepicker.filesClient.getFolderContents(dir).then(function(status, files) {\n\t\t\tself.filelist = files\n\t\t\tif (filter && filter.length > 0 && filter.indexOf('*') === -1) {\n\t\t\t\tfiles = files.filter(function(file) {\n\t\t\t\t\treturn file.type === 'dir' || filter.indexOf(file.mimetype) !== -1\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// Check if the showHidden input field exist and if it exist follow it\n\t\t\t// Otherwise just show the hidden files\n\t\t\tconst showHiddenInput = document.getElementById('showHiddenFiles')\n\t\t\tconst showHidden = showHiddenInput === null || showHiddenInput.value === \"1\"\n\t\t\tif (!showHidden) {\n\t\t\t\tfiles = files.filter(function(file) {\n\t\t\t\t\treturn !file.name.startsWith('.')\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tvar Comparators = {\n\t\t\t\tname: function(fileInfo1, fileInfo2) {\n\t\t\t\t\tif (fileInfo1.type === 'dir' && fileInfo2.type !== 'dir') {\n\t\t\t\t\t\treturn -1\n\t\t\t\t\t}\n\t\t\t\t\tif (fileInfo1.type !== 'dir' && fileInfo2.type === 'dir') {\n\t\t\t\t\t\treturn 1\n\t\t\t\t\t}\n\t\t\t\t\treturn OC.Util.naturalSortCompare(fileInfo1.name, fileInfo2.name)\n\t\t\t\t},\n\t\t\t\tsize: function(fileInfo1, fileInfo2) {\n\t\t\t\t\treturn fileInfo1.size - fileInfo2.size\n\t\t\t\t},\n\t\t\t\tmtime: function(fileInfo1, fileInfo2) {\n\t\t\t\t\treturn fileInfo1.mtime - fileInfo2.mtime\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar comparator = Comparators[self.filepicker.sortField] || Comparators.name\n\t\t\tfiles = files.sort(function(file1, file2) {\n\t\t\t\tvar isFavorite = function(fileInfo) {\n\t\t\t\t\treturn fileInfo.tags && fileInfo.tags.indexOf(OC.TAG_FAVORITE) >= 0\n\t\t\t\t}\n\n\t\t\t\tif (isFavorite(file1) && !isFavorite(file2)) {\n\t\t\t\t\treturn -1\n\t\t\t\t} else if (!isFavorite(file1) && isFavorite(file2)) {\n\t\t\t\t\treturn 1\n\t\t\t\t}\n\n\t\t\t\treturn self.filepicker.sortOrder === 'asc' ? comparator(file1, file2) : -comparator(file1, file2)\n\t\t\t})\n\n\t\t\tself._fillSlug()\n\n\t\t\tif (files.length === 0) {\n\t\t\t\tself.$filePicker.find('.emptycontent').show()\n\t\t\t\tself.$fileListHeader.hide()\n\t\t\t} else {\n\t\t\t\tself.$filePicker.find('.emptycontent').hide()\n\t\t\t\tself.$fileListHeader.show()\n\t\t\t}\n\n\t\t\tself.$filelist.empty();\n\n\t\t\t$.each(files, function(idx, entry) {\n\t\t\t\tentry.icon = OC.MimeType.getIconUrl(entry.mimetype)\n\t\t\t\tvar simpleSize, sizeColor\n\t\t\t\tif (typeof (entry.size) !== 'undefined' && entry.size >= 0) {\n\t\t\t\t\tsimpleSize = OC.Util.humanFileSize(parseInt(entry.size, 10), true)\n\t\t\t\t\tsizeColor = Math.round(160 - Math.pow((entry.size / (1024 * 1024)), 2))\n\t\t\t\t} else {\n\t\t\t\t\tsimpleSize = t('files', 'Pending')\n\t\t\t\t\tsizeColor = 80\n\t\t\t\t}\n\n\t\t\t\t// split the filename in half if the size is bigger than 20 char\n\t\t\t\t// for ellipsis\n\t\t\t\tif (entry.name.length >= 10) {\n\t\t\t\t\t// leave maximum 10 letters\n\t\t\t\t\tvar split = Math.min(Math.floor(entry.name.length / 2), 10)\n\t\t\t\t\tvar filename1 = entry.name.substr(0, entry.name.length - split)\n\t\t\t\t\tvar filename2 = entry.name.substr(entry.name.length - split)\n\t\t\t\t} else {\n\t\t\t\t\tvar filename1 = entry.name\n\t\t\t\t\tvar filename2 = ''\n\t\t\t\t}\n\n\t\t\t\tvar $row = self.$listTmpl.octemplate({\n\t\t\t\t\ttype: entry.type,\n\t\t\t\t\tdir: dir,\n\t\t\t\t\tfilename: entry.name,\n\t\t\t\t\tfilename1: filename1,\n\t\t\t\t\tfilename2: filename2,\n\t\t\t\t\tdate: OC.Util.relativeModifiedDate(entry.mtime),\n\t\t\t\t\tsize: simpleSize,\n\t\t\t\t\tsizeColor: sizeColor,\n\t\t\t\t\ticon: entry.icon\n\t\t\t\t})\n\t\t\t\tif (entry.type === 'file') {\n\t\t\t\t\tvar urlSpec = {\n\t\t\t\t\t\tfile: dir + '/' + entry.name,\n\t\t\t\t\t\tx: 100,\n\t\t\t\t\t\ty: 100\n\t\t\t\t\t}\n\t\t\t\t\tvar img = new Image()\n\t\t\t\t\tvar previewUrl = OC.generateUrl('/core/preview.png?') + $.param(urlSpec)\n\t\t\t\t\timg.onload = function() {\n\t\t\t\t\t\tif (img.width > 5) {\n\t\t\t\t\t\t\t$row.find('td.filename').attr('style', 'background-image:url(' + previewUrl + ')')\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\timg.src = previewUrl\n\t\t\t\t}\n\t\t\t\tself.$filelist.append($row)\n\t\t\t})\n\n\t\t\tself.$filelistContainer.removeClass('icon-loading')\n\t\t})\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}\"><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)\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'))\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/>')\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\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","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.hideLoginForm || _vm.directLogin)?_c('div',[_c('transition',{attrs:{\"name\":\"fade\",\"mode\":\"out-in\"}},[(!_vm.passwordlessLogin && !_vm.resetPassword && _vm.resetPasswordTarget === '')?_c('div',{key:\"login\"},[_c('LoginForm',{attrs:{\"username\":_vm.user,\"redirect-url\":_vm.redirectUrl,\"direct-login\":_vm.directLogin,\"messages\":_vm.messages,\"errors\":_vm.errors,\"throttle-delay\":_vm.throttleDelay,\"inverted-colors\":_vm.invertedColors,\"auto-complete-allowed\":_vm.autoCompleteAllowed},on:{\"update:username\":function($event){_vm.user=$event},\"submit\":function($event){_vm.loading = true}}}),_vm._v(\" \"),(_vm.canResetPassword && _vm.resetPasswordLink !== '')?_c('a',{attrs:{\"id\":\"lost-password\",\"href\":_vm.resetPasswordLink}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Forgot password?'))+\"\\n\\t\\t\\t\")]):(_vm.canResetPassword && !_vm.resetPassword)?_c('a',{attrs:{\"id\":\"lost-password\",\"href\":_vm.resetPasswordLink},on:{\"click\":function($event){$event.preventDefault();_vm.resetPassword = true}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Forgot password?'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('br'),_vm._v(\" \"),(_vm.hasPasswordless)?[(_vm.countAlternativeLogins)?_c('div',{staticClass:\"alternative-logins\"},[(_vm.hasPasswordless)?_c('a',{staticClass:\"button\",class:{ 'single-alt-login-option': _vm.countAlternativeLogins },attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.passwordlessLogin = true}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Log in with a device'))+\"\\n\\t\\t\\t\\t\\t\")]):_vm._e()]):_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.passwordlessLogin = true}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Log in with a device'))+\"\\n\\t\\t\\t\\t\")])]:_vm._e()],2):(!_vm.loading && _vm.passwordlessLogin)?_c('div',{key:\"reset\",staticClass:\"login-additional\"},[_c('PasswordLessLoginForm',{attrs:{\"username\":_vm.user,\"redirect-url\":_vm.redirectUrl,\"inverted-colors\":_vm.invertedColors,\"auto-complete-allowed\":_vm.autoCompleteAllowed,\"is-https\":_vm.isHttps,\"is-localhost\":_vm.isLocalhost,\"has-public-key-credential\":_vm.hasPublicKeyCredential},on:{\"update:username\":function($event){_vm.user=$event},\"submit\":function($event){_vm.loading = true}}}),_vm._v(\" \"),_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.passwordlessLogin = false}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Back'))+\"\\n\\t\\t\\t\")])],1):(!_vm.loading && _vm.canResetPassword)?_c('div',{key:\"reset\",staticClass:\"login-additional\"},[_c('div',{staticClass:\"lost-password-container\"},[(_vm.resetPassword)?_c('ResetPassword',{attrs:{\"username\":_vm.user,\"reset-password-link\":_vm.resetPasswordLink,\"inverted-colors\":_vm.invertedColors},on:{\"update:username\":function($event){_vm.user=$event},\"abort\":function($event){_vm.resetPassword = false}}}):_vm._e()],1)]):(_vm.resetPasswordTarget !== '')?_c('div',[_c('UpdatePassword',{attrs:{\"username\":_vm.user,\"reset-password-target\":_vm.resetPasswordTarget,\"inverted-colors\":_vm.invertedColors},on:{\"update:username\":function($event){_vm.user=$event},\"done\":_vm.passwordResetFinished}})],1):_vm._e()])],1):_c('div',[_c('transition',{attrs:{\"name\":\"fade\",\"mode\":\"out-in\"}},[_c('div',{staticClass:\"warning\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Login form is disabled.'))),_c('br'),_vm._v(\" \"),_c('small',[_vm._v(_vm._s(_vm.t('core', 'Please contact your administrator.'))+\"\\n\\t\\t\\t\")])])])],1)}\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!./LoginButton.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!./LoginButton.vue?vue&type=script&lang=js&\"","<!--\n - @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2020 Christoph Wurst <christoph@winzerhof-wurst.at>\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<div id=\"submit-wrapper\" @click=\"$emit('click')\">\n\t\t<input id=\"submit-form\"\n\t\t\ttype=\"submit\"\n\t\t\tclass=\"login primary\"\n\t\t\ttitle=\"\"\n\t\t\t:value=\"!loading ? t('core', 'Log in') : t('core', 'Logging in …')\">\n\t\t<div class=\"submit-icon\"\n\t\t\t:class=\"{\n\t\t\t\t'icon-confirm-white': !loading,\n\t\t\t\t'icon-loading-small': loading && invertedColors,\n\t\t\t\t'icon-loading-small-dark': loading && !invertedColors,\n\t\t\t}\" />\n\t</div>\n</template>\n\n<script>\nexport default {\n\tname: 'LoginButton',\n\tprops: {\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tinvertedColors: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n\n</style>\n","import { render, staticRenderFns } from \"./LoginButton.vue?vue&type=template&id=125b100b&scoped=true&\"\nimport script from \"./LoginButton.vue?vue&type=script&lang=js&\"\nexport * from \"./LoginButton.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 \"125b100b\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"submit-wrapper\"},on:{\"click\":function($event){return _vm.$emit('click')}}},[_c('input',{staticClass:\"login primary\",attrs:{\"id\":\"submit-form\",\"type\":\"submit\",\"title\":\"\"},domProps:{\"value\":!_vm.loading ? _vm.t('core', 'Log in') : _vm.t('core', 'Logging in …')}}),_vm._v(\" \"),_c('div',{staticClass:\"submit-icon\",class:{\n\t\t\t'icon-confirm-white': !_vm.loading,\n\t\t\t'icon-loading-small': _vm.loading && _vm.invertedColors,\n\t\t\t'icon-loading-small-dark': _vm.loading && !_vm.invertedColors,\n\t\t}})])}\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!./LoginForm.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!./LoginForm.vue?vue&type=script&lang=js&\"","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\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<form ref=\"loginForm\"\n\t\tmethod=\"post\"\n\t\tname=\"login\"\n\t\t:action=\"loginActionUrl\"\n\t\t@submit=\"submit\">\n\t\t<fieldset>\n\t\t\t<div v-if=\"apacheAuthFailed\"\n\t\t\t\tclass=\"warning\">\n\t\t\t\t{{ t('core', 'Server side authentication failed!') }}<br>\n\t\t\t\t<small>{{ t('core', 'Please contact your administrator.') }}\n\t\t\t\t</small>\n\t\t\t</div>\n\t\t\t<div v-for=\"(message, index) in messages\"\n\t\t\t\t:key=\"index\"\n\t\t\t\tclass=\"warning\">\n\t\t\t\t{{ message }}<br>\n\t\t\t</div>\n\t\t\t<div v-if=\"internalException\"\n\t\t\t\tclass=\"warning\">\n\t\t\t\t{{ t('core', 'An internal error occurred.') }}<br>\n\t\t\t\t<small>{{ t('core', 'Please try again or contact your administrator.') }}\n\t\t\t\t</small>\n\t\t\t</div>\n\t\t\t<div id=\"message\"\n\t\t\t\tclass=\"hidden\">\n\t\t\t\t<img class=\"float-spinner\"\n\t\t\t\t\talt=\"\"\n\t\t\t\t\t:src=\"loadingIcon\">\n\t\t\t\t<span id=\"messageText\" />\n\t\t\t\t<!-- the following div ensures that the spinner is always inside the #message div -->\n\t\t\t\t<div style=\"clear: both;\" />\n\t\t\t</div>\n\t\t\t<p class=\"grouptop\"\n\t\t\t\t:class=\"{shake: invalidPassword}\">\n\t\t\t\t<input id=\"user\"\n\t\t\t\t\tref=\"user\"\n\t\t\t\t\tv-model=\"user\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tname=\"user\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\t:autocomplete=\"autoCompleteAllowed ? 'on' : 'off'\"\n\t\t\t\t\t:placeholder=\"t('core', 'Username or email')\"\n\t\t\t\t\t:aria-label=\"t('core', 'Username or email')\"\n\t\t\t\t\trequired\n\t\t\t\t\t@change=\"updateUsername\">\n\t\t\t\t<label for=\"user\" class=\"infield\">{{ t('core', 'Username or email') }}</label>\n\t\t\t</p>\n\n\t\t\t<p class=\"groupbottom\"\n\t\t\t\t:class=\"{shake: invalidPassword}\">\n\t\t\t\t<input id=\"password\"\n\t\t\t\t\tref=\"password\"\n\t\t\t\t\t:type=\"passwordInputType\"\n\t\t\t\t\tclass=\"password-with-toggle\"\n\t\t\t\t\tname=\"password\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\t:autocomplete=\"autoCompleteAllowed ? 'current-password' : 'off'\"\n\t\t\t\t\t:placeholder=\"t('core', 'Password')\"\n\t\t\t\t\t:aria-label=\"t('core', 'Password')\"\n\t\t\t\t\trequired>\n\t\t\t\t<label for=\"password\"\n\t\t\t\t\tclass=\"infield\">{{ t('Password') }}</label>\n\t\t\t\t<a href=\"#\" class=\"toggle-password\" @click.stop.prevent=\"togglePassword\">\n\t\t\t\t\t<img :src=\"toggleIcon\" :alt=\"t('core', 'Toggle password visibility')\">\n\t\t\t\t</a>\n\t\t\t</p>\n\n\t\t\t<LoginButton :loading=\"loading\" :inverted-colors=\"invertedColors\" />\n\n\t\t\t<p v-if=\"invalidPassword\"\n\t\t\t\tclass=\"warning wrongPasswordMsg\">\n\t\t\t\t{{ t('core', 'Wrong username or password.') }}\n\t\t\t</p>\n\t\t\t<p v-else-if=\"userDisabled\"\n\t\t\t\tclass=\"warning userDisabledMsg\">\n\t\t\t\t{{ t('core', 'User disabled') }}\n\t\t\t</p>\n\n\t\t\t<p v-if=\"throttleDelay && throttleDelay > 5000\"\n\t\t\t\tclass=\"warning throttledMsg\">\n\t\t\t\t{{ t('core', 'We have detected multiple invalid login attempts from your IP. Therefore your next login is throttled up to 30 seconds.') }}\n\t\t\t</p>\n\n\t\t\t<input v-if=\"redirectUrl\"\n\t\t\t\ttype=\"hidden\"\n\t\t\t\tname=\"redirect_url\"\n\t\t\t\t:value=\"redirectUrl\">\n\t\t\t<input type=\"hidden\"\n\t\t\t\tname=\"timezone\"\n\t\t\t\t:value=\"timezone\">\n\t\t\t<input type=\"hidden\"\n\t\t\t\tname=\"timezone_offset\"\n\t\t\t\t:value=\"timezoneOffset\">\n\t\t\t<input type=\"hidden\"\n\t\t\t\tname=\"requesttoken\"\n\t\t\t\t:value=\"OC.requestToken\">\n\t\t\t<input v-if=\"directLogin\"\n\t\t\t\ttype=\"hidden\"\n\t\t\t\tname=\"direct\"\n\t\t\t\tvalue=\"1\">\n\t\t</fieldset>\n\t</form>\n</template>\n\n<script>\nimport jstz from 'jstimezonedetect'\nimport LoginButton from './LoginButton'\nimport {\n\tgenerateUrl,\n\timagePath,\n} from '@nextcloud/router'\n\nexport default {\n\tname: 'LoginForm',\n\tcomponents: { LoginButton },\n\tprops: {\n\t\tusername: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tredirectUrl: {\n\t\t\ttype: [String, Boolean],\n\t\t\tdefault: false,\n\t\t},\n\t\terrors: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tmessages: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tthrottleDelay: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\t\tinvertedColors: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tautoCompleteAllowed: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tdirectLogin: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t\ttimezone: jstz.determine().name(),\n\t\t\ttimezoneOffset: (-new Date().getTimezoneOffset() / 60),\n\t\t\tuser: this.username,\n\t\t\tpassword: '',\n\t\t\tpasswordInputType: 'password',\n\t\t}\n\t},\n\tcomputed: {\n\t\tapacheAuthFailed() {\n\t\t\treturn this.errors.indexOf('apacheAuthFailed') !== -1\n\t\t},\n\t\tinternalException() {\n\t\t\treturn this.errors.indexOf('internalexception') !== -1\n\t\t},\n\t\tinvalidPassword() {\n\t\t\treturn this.errors.indexOf('invalidpassword') !== -1\n\t\t},\n\t\tuserDisabled() {\n\t\t\treturn this.errors.indexOf('userdisabled') !== -1\n\t\t},\n\t\ttoggleIcon() {\n\t\t\treturn imagePath('core', 'actions/toggle.svg')\n\t\t},\n\t\tloadingIcon() {\n\t\t\treturn imagePath('core', 'loading-dark.gif')\n\t\t},\n\t\tloginActionUrl() {\n\t\t\treturn generateUrl('login')\n\t\t},\n\t},\n\tmounted() {\n\t\tif (this.username === '') {\n\t\t\tthis.$refs.user.focus()\n\t\t} else {\n\t\t\tthis.$refs.password.focus()\n\t\t}\n\t},\n\tmethods: {\n\t\ttogglePassword() {\n\t\t\tif (this.passwordInputType === 'password') {\n\t\t\t\tthis.passwordInputType = 'text'\n\t\t\t} else {\n\t\t\t\tthis.passwordInputType = 'password'\n\t\t\t}\n\t\t},\n\t\tupdateUsername() {\n\t\t\tthis.$emit('update:username', this.user)\n\t\t},\n\t\tsubmit() {\n\t\t\tthis.loading = true\n\t\t\tthis.$emit('submit')\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n\n</style>\n","import { render, staticRenderFns } from \"./LoginForm.vue?vue&type=template&id=0b3a0522&scoped=true&\"\nimport script from \"./LoginForm.vue?vue&type=script&lang=js&\"\nexport * from \"./LoginForm.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 \"0b3a0522\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('form',{ref:\"loginForm\",attrs:{\"method\":\"post\",\"name\":\"login\",\"action\":_vm.loginActionUrl},on:{\"submit\":_vm.submit}},[_c('fieldset',[(_vm.apacheAuthFailed)?_c('div',{staticClass:\"warning\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Server side authentication failed!'))),_c('br'),_vm._v(\" \"),_c('small',[_vm._v(_vm._s(_vm.t('core', 'Please contact your administrator.'))+\"\\n\\t\\t\\t\")])]):_vm._e(),_vm._v(\" \"),_vm._l((_vm.messages),function(message,index){return _c('div',{key:index,staticClass:\"warning\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(message)),_c('br')])}),_vm._v(\" \"),(_vm.internalException)?_c('div',{staticClass:\"warning\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'An internal error occurred.'))),_c('br'),_vm._v(\" \"),_c('small',[_vm._v(_vm._s(_vm.t('core', 'Please try again or contact your administrator.'))+\"\\n\\t\\t\\t\")])]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"hidden\",attrs:{\"id\":\"message\"}},[_c('img',{staticClass:\"float-spinner\",attrs:{\"alt\":\"\",\"src\":_vm.loadingIcon}}),_vm._v(\" \"),_c('span',{attrs:{\"id\":\"messageText\"}}),_vm._v(\" \"),_c('div',{staticStyle:{\"clear\":\"both\"}})]),_vm._v(\" \"),_c('p',{staticClass:\"grouptop\",class:{shake: _vm.invalidPassword}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.user),expression:\"user\"}],ref:\"user\",attrs:{\"id\":\"user\",\"type\":\"text\",\"name\":\"user\",\"autocapitalize\":\"none\",\"autocorrect\":\"off\",\"autocomplete\":_vm.autoCompleteAllowed ? 'on' : 'off',\"placeholder\":_vm.t('core', 'Username or email'),\"aria-label\":_vm.t('core', 'Username or email'),\"required\":\"\"},domProps:{\"value\":(_vm.user)},on:{\"change\":_vm.updateUsername,\"input\":function($event){if($event.target.composing){ return; }_vm.user=$event.target.value}}}),_vm._v(\" \"),_c('label',{staticClass:\"infield\",attrs:{\"for\":\"user\"}},[_vm._v(_vm._s(_vm.t('core', 'Username or email')))])]),_vm._v(\" \"),_c('p',{staticClass:\"groupbottom\",class:{shake: _vm.invalidPassword}},[_c('input',{ref:\"password\",staticClass:\"password-with-toggle\",attrs:{\"id\":\"password\",\"type\":_vm.passwordInputType,\"name\":\"password\",\"autocorrect\":\"off\",\"autocapitalize\":\"none\",\"autocomplete\":_vm.autoCompleteAllowed ? 'current-password' : 'off',\"placeholder\":_vm.t('core', 'Password'),\"aria-label\":_vm.t('core', 'Password'),\"required\":\"\"}}),_vm._v(\" \"),_c('label',{staticClass:\"infield\",attrs:{\"for\":\"password\"}},[_vm._v(_vm._s(_vm.t('Password')))]),_vm._v(\" \"),_c('a',{staticClass:\"toggle-password\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.togglePassword.apply(null, arguments)}}},[_c('img',{attrs:{\"src\":_vm.toggleIcon,\"alt\":_vm.t('core', 'Toggle password visibility')}})])]),_vm._v(\" \"),_c('LoginButton',{attrs:{\"loading\":_vm.loading,\"inverted-colors\":_vm.invertedColors}}),_vm._v(\" \"),(_vm.invalidPassword)?_c('p',{staticClass:\"warning wrongPasswordMsg\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Wrong username or password.'))+\"\\n\\t\\t\")]):(_vm.userDisabled)?_c('p',{staticClass:\"warning userDisabledMsg\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'User disabled'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.throttleDelay && _vm.throttleDelay > 5000)?_c('p',{staticClass:\"warning throttledMsg\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'We have detected multiple invalid login attempts from your IP. Therefore your next login is throttled up to 30 seconds.'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.redirectUrl)?_c('input',{attrs:{\"type\":\"hidden\",\"name\":\"redirect_url\"},domProps:{\"value\":_vm.redirectUrl}}):_vm._e(),_vm._v(\" \"),_c('input',{attrs:{\"type\":\"hidden\",\"name\":\"timezone\"},domProps:{\"value\":_vm.timezone}}),_vm._v(\" \"),_c('input',{attrs:{\"type\":\"hidden\",\"name\":\"timezone_offset\"},domProps:{\"value\":_vm.timezoneOffset}}),_vm._v(\" \"),_c('input',{attrs:{\"type\":\"hidden\",\"name\":\"requesttoken\"},domProps:{\"value\":_vm.OC.requestToken}}),_vm._v(\" \"),(_vm.directLogin)?_c('input',{attrs:{\"type\":\"hidden\",\"name\":\"direct\",\"value\":\"1\"}}):_vm._e()],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n\t<form v-if=\"(isHttps || isLocalhost) && hasPublicKeyCredential\"\n\t\tref=\"loginForm\"\n\t\tmethod=\"post\"\n\t\tname=\"login\"\n\t\t@submit.prevent=\"submit\">\n\t\t<fieldset>\n\t\t\t<p class=\"grouptop groupbottom\">\n\t\t\t\t<label for=\"user\" class=\"infield\">{{ t('core', 'Username or\temail') }}</label>\n\t\t\t\t<input id=\"user\"\n\t\t\t\t\tref=\"user\"\n\t\t\t\t\tv-model=\"user\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tname=\"user\"\n\t\t\t\t\t:autocomplete=\"autoCompleteAllowed ? 'on' : 'off'\"\n\t\t\t\t\t:placeholder=\"t('core', 'Username or email')\"\n\t\t\t\t\t:aria-label=\"t('core', 'Username or email')\"\n\t\t\t\t\trequired\n\t\t\t\t\t@change=\"$emit('update:username', user)\">\n\t\t\t</p>\n\n\t\t\t<div v-if=\"!validCredentials\" class=\"body-login-container update form__message-box\">\n\t\t\t\t{{ t('core', 'Your account is not setup for passwordless login.') }}\n\t\t\t</div>\n\n\t\t\t<LoginButton v-if=\"validCredentials\"\n\t\t\t\t:loading=\"loading\"\n\t\t\t\t:inverted-colors=\"invertedColors\"\n\t\t\t\t@click=\"authenticate\" />\n\t\t</fieldset>\n\t</form>\n\t<div v-else-if=\"!hasPublicKeyCredential\" class=\"body-login-container update\">\n\t\t<InformationIcon size=\"70\" />\n\t\t<h2>{{ t('core', 'Browser not supported') }}</h2>\n\t\t<p class=\"infogroup\">\n\t\t\t{{ t('core', 'Passwordless authentication is not supported in your browser.') }}\n\t\t</p>\n\t</div>\n\t<div v-else-if=\"!isHttps && !isLocalhost\" class=\"body-login-container update\">\n\t\t<LockOpenIcon size=\"70\" />\n\t\t<h2>{{ t('core', 'Your connection is not secure') }}</h2>\n\t\t<p class=\"infogroup\">\n\t\t\t{{ t('core', 'Passwordless authentication is only available over a secure connection.') }}\n\t\t</p>\n\t</div>\n</template>\n\n<script>\nimport {\n\tstartAuthentication,\n\tfinishAuthentication,\n} from '../../services/WebAuthnAuthenticationService'\nimport LoginButton from './LoginButton'\nimport InformationIcon from 'vue-material-design-icons/Information'\nimport LockOpenIcon from 'vue-material-design-icons/LockOpen'\n\nclass NoValidCredentials extends Error {\n\n}\n\nexport default {\n\tname: 'PasswordLessLoginForm',\n\tcomponents: {\n\t\tLoginButton,\n\t\tInformationIcon,\n\t\tLockOpenIcon,\n\t},\n\tprops: {\n\t\tusername: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tredirectUrl: {\n\t\t\ttype: [String, Boolean],\n\t\t\tdefault: false,\n\t\t},\n\t\tinvertedColors: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tautoCompleteAllowed: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tisHttps: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tisLocalhost: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\thasPublicKeyCredential: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tuser: this.username,\n\t\t\tloading: false,\n\t\t\tvalidCredentials: true,\n\t\t}\n\t},\n\tmethods: {\n\t\tauthenticate() {\n\t\t\tconsole.debug('passwordless login initiated')\n\n\t\t\tthis.getAuthenticationData(this.user)\n\t\t\t\t.then(publicKey => {\n\t\t\t\t\tconsole.debug(publicKey)\n\t\t\t\t\treturn publicKey\n\t\t\t\t})\n\t\t\t\t.then(this.sign)\n\t\t\t\t.then(this.completeAuthentication)\n\t\t\t\t.catch(error => {\n\t\t\t\t\tif (error instanceof NoValidCredentials) {\n\t\t\t\t\t\tthis.validCredentials = false\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tconsole.debug(error)\n\t\t\t\t})\n\t\t},\n\t\tgetAuthenticationData(uid) {\n\t\t\tconst base64urlDecode = function(input) {\n\t\t\t\t// Replace non-url compatible chars with base64 standard chars\n\t\t\t\tinput = input\n\t\t\t\t\t.replace(/-/g, '+')\n\t\t\t\t\t.replace(/_/g, '/')\n\n\t\t\t\t// Pad out with standard base64 required padding characters\n\t\t\t\tconst pad = input.length % 4\n\t\t\t\tif (pad) {\n\t\t\t\t\tif (pad === 1) {\n\t\t\t\t\t\tthrow new Error('InvalidLengthError: Input base64url string is the wrong length to determine padding')\n\t\t\t\t\t}\n\t\t\t\t\tinput += new Array(5 - pad).join('=')\n\t\t\t\t}\n\n\t\t\t\treturn window.atob(input)\n\t\t\t}\n\n\t\t\treturn startAuthentication(uid)\n\t\t\t\t.then(publicKey => {\n\t\t\t\t\tconsole.debug('Obtained PublicKeyCredentialRequestOptions')\n\t\t\t\t\tconsole.debug(publicKey)\n\n\t\t\t\t\tif (!Object.prototype.hasOwnProperty.call(publicKey, 'allowCredentials')) {\n\t\t\t\t\t\tconsole.debug('No credentials found.')\n\t\t\t\t\t\tthrow new NoValidCredentials()\n\t\t\t\t\t}\n\n\t\t\t\t\tpublicKey.challenge = Uint8Array.from(base64urlDecode(publicKey.challenge), c => c.charCodeAt(0))\n\t\t\t\t\tpublicKey.allowCredentials = publicKey.allowCredentials.map(function(data) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...data,\n\t\t\t\t\t\t\tid: Uint8Array.from(base64urlDecode(data.id), c => c.charCodeAt(0)),\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\n\t\t\t\t\tconsole.debug('Converted PublicKeyCredentialRequestOptions')\n\t\t\t\t\tconsole.debug(publicKey)\n\t\t\t\t\treturn publicKey\n\t\t\t\t})\n\t\t\t\t.catch(error => {\n\t\t\t\t\tconsole.debug('Error while obtaining data')\n\t\t\t\t\tthrow error\n\t\t\t\t})\n\t\t},\n\t\tsign(publicKey) {\n\t\t\tconst arrayToBase64String = function(a) {\n\t\t\t\treturn window.btoa(String.fromCharCode(...a))\n\t\t\t}\n\n\t\t\tconst arrayToString = function(a) {\n\t\t\t\treturn String.fromCharCode(...a)\n\t\t\t}\n\n\t\t\treturn navigator.credentials.get({ publicKey })\n\t\t\t\t.then(data => {\n\t\t\t\t\tconsole.debug(data)\n\t\t\t\t\tconsole.debug(new Uint8Array(data.rawId))\n\t\t\t\t\tconsole.debug(arrayToBase64String(new Uint8Array(data.rawId)))\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: data.id,\n\t\t\t\t\t\ttype: data.type,\n\t\t\t\t\t\trawId: arrayToBase64String(new Uint8Array(data.rawId)),\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tauthenticatorData: arrayToBase64String(new Uint8Array(data.response.authenticatorData)),\n\t\t\t\t\t\t\tclientDataJSON: arrayToBase64String(new Uint8Array(data.response.clientDataJSON)),\n\t\t\t\t\t\t\tsignature: arrayToBase64String(new Uint8Array(data.response.signature)),\n\t\t\t\t\t\t\tuserHandle: data.response.userHandle ? arrayToString(new Uint8Array(data.response.userHandle)) : null,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.then(challenge => {\n\t\t\t\t\tconsole.debug(challenge)\n\t\t\t\t\treturn challenge\n\t\t\t\t})\n\t\t\t\t.catch(error => {\n\t\t\t\t\tconsole.debug('GOT AN ERROR!')\n\t\t\t\t\tconsole.debug(error) // Example: timeout, interaction refused...\n\t\t\t\t})\n\t\t},\n\t\tcompleteAuthentication(challenge) {\n\t\t\tconsole.debug('TIME TO COMPLETE')\n\n\t\t\tconst location = this.redirectUrl\n\n\t\t\treturn finishAuthentication(JSON.stringify(challenge))\n\t\t\t\t.then(data => {\n\t\t\t\t\tconsole.debug('Logged in redirecting')\n\t\t\t\t\twindow.location.href = location\n\t\t\t\t})\n\t\t\t\t.catch(error => {\n\t\t\t\t\tconsole.debug('GOT AN ERROR WHILE SUBMITTING CHALLENGE!')\n\t\t\t\t\tconsole.debug(error) // Example: timeout, interaction refused...\n\t\t\t\t})\n\t\t},\n\t\tsubmit() {\n\t\t\t// noop\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.body-login-container.update {\n\t\tmargin: 15px 0;\n\n\t\t&.form__message-box {\n\t\t\twidth: 240px;\n\t\t\tmargin: 5px;\n\t\t}\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PasswordLessLoginForm.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!./PasswordLessLoginForm.vue?vue&type=script&lang=js&\"","/**\n * @copyright 2020, 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 Axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\n\n/**\n * @param {any} loginName -\n */\nexport function startAuthentication(loginName) {\n\tconst url = generateUrl('/login/webauthn/start')\n\n\treturn Axios.post(url, { loginName })\n\t\t.then(resp => resp.data)\n}\n\n/**\n * @param {any} data -\n */\nexport function finishAuthentication(data) {\n\tconst url = generateUrl('/login/webauthn/finish')\n\n\treturn Axios.post(url, { data })\n\t\t.then(resp => resp.data)\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/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PasswordLessLoginForm.vue?vue&type=style&index=0&id=4f29a6e2&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!./PasswordLessLoginForm.vue?vue&type=style&index=0&id=4f29a6e2&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./PasswordLessLoginForm.vue?vue&type=template&id=4f29a6e2&scoped=true&\"\nimport script from \"./PasswordLessLoginForm.vue?vue&type=script&lang=js&\"\nexport * from \"./PasswordLessLoginForm.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PasswordLessLoginForm.vue?vue&type=style&index=0&id=4f29a6e2&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 \"4f29a6e2\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return ((_vm.isHttps || _vm.isLocalhost) && _vm.hasPublicKeyCredential)?_c('form',{ref:\"loginForm\",attrs:{\"method\":\"post\",\"name\":\"login\"},on:{\"submit\":function($event){$event.preventDefault();return _vm.submit.apply(null, arguments)}}},[_c('fieldset',[_c('p',{staticClass:\"grouptop groupbottom\"},[_c('label',{staticClass:\"infield\",attrs:{\"for\":\"user\"}},[_vm._v(_vm._s(_vm.t('core', 'Username or\temail')))]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.user),expression:\"user\"}],ref:\"user\",attrs:{\"id\":\"user\",\"type\":\"text\",\"name\":\"user\",\"autocomplete\":_vm.autoCompleteAllowed ? 'on' : 'off',\"placeholder\":_vm.t('core', 'Username or email'),\"aria-label\":_vm.t('core', 'Username or email'),\"required\":\"\"},domProps:{\"value\":(_vm.user)},on:{\"change\":function($event){return _vm.$emit('update:username', _vm.user)},\"input\":function($event){if($event.target.composing){ return; }_vm.user=$event.target.value}}})]),_vm._v(\" \"),(!_vm.validCredentials)?_c('div',{staticClass:\"body-login-container update form__message-box\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Your account is not setup for passwordless login.'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.validCredentials)?_c('LoginButton',{attrs:{\"loading\":_vm.loading,\"inverted-colors\":_vm.invertedColors},on:{\"click\":_vm.authenticate}}):_vm._e()],1)]):(!_vm.hasPublicKeyCredential)?_c('div',{staticClass:\"body-login-container update\"},[_c('InformationIcon',{attrs:{\"size\":\"70\"}}),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.t('core', 'Browser not supported')))]),_vm._v(\" \"),_c('p',{staticClass:\"infogroup\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('core', 'Passwordless authentication is not supported in your browser.'))+\"\\n\\t\")])],1):(!_vm.isHttps && !_vm.isLocalhost)?_c('div',{staticClass:\"body-login-container update\"},[_c('LockOpenIcon',{attrs:{\"size\":\"70\"}}),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.t('core', 'Your connection is not secure')))]),_vm._v(\" \"),_c('p',{staticClass:\"infogroup\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('core', 'Passwordless authentication is only available over a secure connection.'))+\"\\n\\t\")])],1):_vm._e()}\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!./ResetPassword.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!./ResetPassword.vue?vue&type=script&lang=js&\"","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\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<form @submit.prevent=\"submit\">\n\t\t<fieldset>\n\t\t\t<p>\n\t\t\t\t<input id=\"user\"\n\t\t\t\t\tv-model=\"user\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tname=\"user\"\n\t\t\t\t\tautocapitalize=\"off\"\n\t\t\t\t\t:placeholder=\"t('core', 'Username or email')\"\n\t\t\t\t\t:aria-label=\"t('core', 'Username or email')\"\n\t\t\t\t\trequired\n\t\t\t\t\t@change=\"updateUsername\">\n\t\t\t\t<!--<?php p($_['user_autofocus'] ? 'autofocus' : ''); ?>\n\t\t\t\tautocomplete=\"<?php p($_['login_form_autocomplete']); ?>\" autocapitalize=\"none\" autocorrect=\"off\"-->\n\t\t\t\t<label for=\"user\" class=\"infield\">{{ t('core', 'Username or email') }}</label>\n\t\t\t</p>\n\t\t\t<div id=\"reset-password-wrapper\">\n\t\t\t\t<input id=\"reset-password-submit\"\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\tclass=\"login primary\"\n\t\t\t\t\ttitle=\"\"\n\t\t\t\t\t:value=\"t('core', 'Reset password')\">\n\t\t\t\t<div class=\"submit-icon\"\n\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t'icon-confirm-white': !loading,\n\t\t\t\t\t\t'icon-loading-small': loading && invertedColors,\n\t\t\t\t\t\t'icon-loading-small-dark': loading && !invertedColors,\n\t\t\t\t\t}\" />\n\t\t\t</div>\n\t\t\t<p v-if=\"message === 'send-success'\"\n\t\t\t\tclass=\"update\">\n\t\t\t\t{{ t('core', 'A password reset message has been sent to the email address of this account. If you do not receive it, check your spam/junk folders or ask your local administrator for help.') }}\n\t\t\t\t<br>\n\t\t\t\t{{ t('core', 'If it is not there ask your local administrator.') }}\n\t\t\t</p>\n\t\t\t<p v-else-if=\"message === 'send-error'\"\n\t\t\t\tclass=\"update warning\">\n\t\t\t\t{{ t('core', 'Couldn\\'t send reset email. Please contact your administrator.') }}\n\t\t\t</p>\n\t\t\t<p v-else-if=\"message === 'reset-error'\"\n\t\t\t\tclass=\"update warning\">\n\t\t\t\t{{ t('core', 'Password cannot be changed. Please contact your administrator.') }}\n\t\t\t</p>\n\t\t\t<p v-else-if=\"message\"\n\t\t\t\tclass=\"update\"\n\t\t\t\t:class=\"{warning: error}\" />\n\n\t\t\t<a href=\"#\"\n\t\t\t\t@click.prevent=\"$emit('abort')\">\n\t\t\t\t{{ t('core', 'Back to login') }}\n\t\t\t</a>\n\t\t</fieldset>\n\t</form>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\n\nimport { generateUrl } from '@nextcloud/router'\n\nexport default {\n\tname: 'ResetPassword',\n\tprops: {\n\t\tusername: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tresetPasswordLink: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tinvertedColors: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\terror: false,\n\t\t\tloading: false,\n\t\t\tmessage: undefined,\n\t\t\tuser: this.username,\n\t\t}\n\t},\n\twatch: {\n\t\tusername(value) {\n\t\t\tthis.user = value\n\t\t},\n\t},\n\tmethods: {\n\t\tupdateUsername() {\n\t\t\tthis.$emit('update:username', this.user)\n\t\t},\n\t\tsubmit() {\n\t\t\tthis.loading = true\n\t\t\tthis.error = false\n\t\t\tthis.message = ''\n\t\t\tconst url = generateUrl('/lostpassword/email')\n\n\t\t\tconst data = {\n\t\t\t\tuser: this.user,\n\t\t\t}\n\n\t\t\treturn axios.post(url, data)\n\t\t\t\t.then(resp => resp.data)\n\t\t\t\t.then(data => {\n\t\t\t\t\tif (data.status !== 'success') {\n\t\t\t\t\t\tthrow new Error(`got status ${data.status}`)\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.message = 'send-success'\n\t\t\t\t})\n\t\t\t\t.catch(e => {\n\t\t\t\t\tconsole.error('could not send reset email request', e)\n\n\t\t\t\t\tthis.error = true\n\t\t\t\t\tthis.message = 'send-error'\n\t\t\t\t})\n\t\t\t\t.then(() => { this.loading = false })\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n\t.update {\n\t\twidth: auto;\n\t}\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/vue-loader/lib/index.js??vue-loader-options!./ResetPassword.vue?vue&type=style&index=0&id=d9d670b8&scoped=true&lang=css&\";\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/vue-loader/lib/index.js??vue-loader-options!./ResetPassword.vue?vue&type=style&index=0&id=d9d670b8&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ResetPassword.vue?vue&type=template&id=d9d670b8&scoped=true&\"\nimport script from \"./ResetPassword.vue?vue&type=script&lang=js&\"\nexport * from \"./ResetPassword.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ResetPassword.vue?vue&type=style&index=0&id=d9d670b8&scoped=true&lang=css&\"\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 \"d9d670b8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.submit.apply(null, arguments)}}},[_c('fieldset',[_c('p',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.user),expression:\"user\"}],attrs:{\"id\":\"user\",\"type\":\"text\",\"name\":\"user\",\"autocapitalize\":\"off\",\"placeholder\":_vm.t('core', 'Username or email'),\"aria-label\":_vm.t('core', 'Username or email'),\"required\":\"\"},domProps:{\"value\":(_vm.user)},on:{\"change\":_vm.updateUsername,\"input\":function($event){if($event.target.composing){ return; }_vm.user=$event.target.value}}}),_vm._v(\" \"),_c('label',{staticClass:\"infield\",attrs:{\"for\":\"user\"}},[_vm._v(_vm._s(_vm.t('core', 'Username or email')))])]),_vm._v(\" \"),_c('div',{attrs:{\"id\":\"reset-password-wrapper\"}},[_c('input',{staticClass:\"login primary\",attrs:{\"id\":\"reset-password-submit\",\"type\":\"submit\",\"title\":\"\"},domProps:{\"value\":_vm.t('core', 'Reset password')}}),_vm._v(\" \"),_c('div',{staticClass:\"submit-icon\",class:{\n\t\t\t\t\t'icon-confirm-white': !_vm.loading,\n\t\t\t\t\t'icon-loading-small': _vm.loading && _vm.invertedColors,\n\t\t\t\t\t'icon-loading-small-dark': _vm.loading && !_vm.invertedColors,\n\t\t\t\t}})]),_vm._v(\" \"),(_vm.message === 'send-success')?_c('p',{staticClass:\"update\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'A password reset message has been sent to the email address of this account. If you do not receive it, check your spam/junk folders or ask your local administrator for help.'))+\"\\n\\t\\t\\t\"),_c('br'),_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'If it is not there ask your local administrator.'))+\"\\n\\t\\t\")]):(_vm.message === 'send-error')?_c('p',{staticClass:\"update warning\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Couldn\\'t send reset email. Please contact your administrator.'))+\"\\n\\t\\t\")]):(_vm.message === 'reset-error')?_c('p',{staticClass:\"update warning\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Password cannot be changed. Please contact your administrator.'))+\"\\n\\t\\t\")]):(_vm.message)?_c('p',{staticClass:\"update\",class:{warning: _vm.error}}):_vm._e(),_vm._v(\" \"),_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.$emit('abort')}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Back to login'))+\"\\n\\t\\t\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 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\n<template>\n\t<form @submit.prevent=\"submit\">\n\t\t<fieldset>\n\t\t\t<p>\n\t\t\t\t<label for=\"password\" class=\"infield\">{{ t('core', 'New password') }}</label>\n\t\t\t\t<input id=\"password\"\n\t\t\t\t\tv-model=\"password\"\n\t\t\t\t\ttype=\"password\"\n\t\t\t\t\tname=\"password\"\n\t\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\trequired\n\t\t\t\t\t:placeholder=\"t('core', 'New password')\">\n\t\t\t</p>\n\n\t\t\t<div v-if=\"encrypted\" class=\"update\">\n\t\t\t\t<p>\n\t\t\t\t\t{{ t('core', 'Your files are encrypted. There will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?') }}\n\t\t\t\t</p>\n\t\t\t\t<input id=\"encrypted-continue\"\n\t\t\t\t\tv-model=\"proceed\"\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t<label for=\"encrypted-continue\">\n\t\t\t\t\t{{ t('core', 'I know what I\\'m doing') }}\n\t\t\t\t</label>\n\t\t\t</div>\n\n\t\t\t<div id=\"submit-wrapper\">\n\t\t\t\t<input id=\"submit\"\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\tclass=\"login primary\"\n\t\t\t\t\ttitle=\"\"\n\t\t\t\t\t:value=\"!loading ? t('core', 'Reset password') : t('core', 'Resetting password')\">\n\t\t\t\t<div class=\"submit-icon\"\n\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t'icon-loading-small': loading && invertedColors,\n\t\t\t\t\t\t'icon-loading-small-dark': loading && !invertedColors\n\t\t\t\t\t}\" />\n\t\t\t</div>\n\n\t\t\t<p v-if=\"error && message\" :class=\"{warning: error}\">\n\t\t\t\t{{ message }}\n\t\t\t</p>\n\t\t</fieldset>\n\t</form>\n</template>\n\n<script>\nimport Axios from '@nextcloud/axios'\n\nexport default {\n\tname: 'UpdatePassword',\n\tprops: {\n\t\tusername: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tresetPasswordTarget: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tinvertedColors: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\terror: false,\n\t\t\tloading: false,\n\t\t\tmessage: undefined,\n\t\t\tuser: this.username,\n\t\t\tpassword: '',\n\t\t\tencrypted: false,\n\t\t\tproceed: false,\n\t\t}\n\t},\n\twatch: {\n\t\tusername(value) {\n\t\t\tthis.user = value\n\t\t},\n\t},\n\tmethods: {\n\t\tasync submit() {\n\t\t\tthis.loading = true\n\t\t\tthis.error = false\n\t\t\tthis.message = ''\n\n\t\t\ttry {\n\t\t\t\tconst { data } = await Axios.post(this.resetPasswordTarget, {\n\t\t\t\t\tpassword: this.password,\n\t\t\t\t\tproceed: this.proceed,\n\t\t\t\t})\n\t\t\t\tif (data && data.status === 'success') {\n\t\t\t\t\tthis.message = 'send-success'\n\t\t\t\t\tthis.$emit('update:username', this.user)\n\t\t\t\t\tthis.$emit('done')\n\t\t\t\t} else if (data && data.encryption) {\n\t\t\t\t\tthis.encrypted = true\n\t\t\t\t} else if (data && data.msg) {\n\t\t\t\t\tthrow new Error(data.msg)\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tthis.error = true\n\t\t\t\tthis.message = e.message ? e.message : t('core', 'Password cannot be changed. Please contact your administrator.')\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 scoped>\n\tfieldset {\n\t\ttext-align: center;\n\t}\n\n\tinput[type=submit] {\n\t\tmargin-top: 20px;\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdatePassword.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!./UpdatePassword.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/vue-loader/lib/index.js??vue-loader-options!./UpdatePassword.vue?vue&type=style&index=0&id=9ae5fdb4&scoped=true&lang=css&\";\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/vue-loader/lib/index.js??vue-loader-options!./UpdatePassword.vue?vue&type=style&index=0&id=9ae5fdb4&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UpdatePassword.vue?vue&type=template&id=9ae5fdb4&scoped=true&\"\nimport script from \"./UpdatePassword.vue?vue&type=script&lang=js&\"\nexport * from \"./UpdatePassword.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UpdatePassword.vue?vue&type=style&index=0&id=9ae5fdb4&scoped=true&lang=css&\"\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 \"9ae5fdb4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.submit.apply(null, arguments)}}},[_c('fieldset',[_c('p',[_c('label',{staticClass:\"infield\",attrs:{\"for\":\"password\"}},[_vm._v(_vm._s(_vm.t('core', 'New password')))]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.password),expression:\"password\"}],attrs:{\"id\":\"password\",\"type\":\"password\",\"name\":\"password\",\"autocomplete\":\"new-password\",\"autocapitalize\":\"none\",\"autocorrect\":\"off\",\"required\":\"\",\"placeholder\":_vm.t('core', 'New password')},domProps:{\"value\":(_vm.password)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.password=$event.target.value}}})]),_vm._v(\" \"),(_vm.encrypted)?_c('div',{staticClass:\"update\"},[_c('p',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Your files are encrypted. There will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.proceed),expression:\"proceed\"}],staticClass:\"checkbox\",attrs:{\"id\":\"encrypted-continue\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.proceed)?_vm._i(_vm.proceed,null)>-1:(_vm.proceed)},on:{\"change\":function($event){var $$a=_vm.proceed,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.proceed=$$a.concat([$$v]))}else{$$i>-1&&(_vm.proceed=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.proceed=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"encrypted-continue\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'I know what I\\'m doing'))+\"\\n\\t\\t\\t\")])]):_vm._e(),_vm._v(\" \"),_c('div',{attrs:{\"id\":\"submit-wrapper\"}},[_c('input',{staticClass:\"login primary\",attrs:{\"id\":\"submit\",\"type\":\"submit\",\"title\":\"\"},domProps:{\"value\":!_vm.loading ? _vm.t('core', 'Reset password') : _vm.t('core', 'Resetting password')}}),_vm._v(\" \"),_c('div',{staticClass:\"submit-icon\",class:{\n\t\t\t\t\t'icon-loading-small': _vm.loading && _vm.invertedColors,\n\t\t\t\t\t'icon-loading-small-dark': _vm.loading && !_vm.invertedColors\n\t\t\t\t}})]),_vm._v(\" \"),(_vm.error && _vm.message)?_c('p',{class:{warning: _vm.error}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.message)+\"\\n\\t\\t\")]):_vm._e()])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\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<div v-if=\"!hideLoginForm || directLogin\">\n\t\t<transition name=\"fade\" mode=\"out-in\">\n\t\t\t<div v-if=\"!passwordlessLogin && !resetPassword && resetPasswordTarget === ''\"\n\t\t\t\tkey=\"login\">\n\t\t\t\t<LoginForm :username.sync=\"user\"\n\t\t\t\t\t:redirect-url=\"redirectUrl\"\n\t\t\t\t\t:direct-login=\"directLogin\"\n\t\t\t\t\t:messages=\"messages\"\n\t\t\t\t\t:errors=\"errors\"\n\t\t\t\t\t:throttle-delay=\"throttleDelay\"\n\t\t\t\t\t:inverted-colors=\"invertedColors\"\n\t\t\t\t\t:auto-complete-allowed=\"autoCompleteAllowed\"\n\t\t\t\t\t@submit=\"loading = true\" />\n\t\t\t\t<a v-if=\"canResetPassword && resetPasswordLink !== ''\"\n\t\t\t\t\tid=\"lost-password\"\n\t\t\t\t\t:href=\"resetPasswordLink\">\n\t\t\t\t\t{{ t('core', 'Forgot password?') }}\n\t\t\t\t</a>\n\t\t\t\t<a v-else-if=\"canResetPassword && !resetPassword\"\n\t\t\t\t\tid=\"lost-password\"\n\t\t\t\t\t:href=\"resetPasswordLink\"\n\t\t\t\t\t@click.prevent=\"resetPassword = true\">\n\t\t\t\t\t{{ t('core', 'Forgot password?') }}\n\t\t\t\t</a>\n\t\t\t\t<br>\n\t\t\t\t<template v-if=\"hasPasswordless\">\n\t\t\t\t\t<div v-if=\"countAlternativeLogins\"\n\t\t\t\t\t\tclass=\"alternative-logins\">\n\t\t\t\t\t\t<a v-if=\"hasPasswordless\"\n\t\t\t\t\t\t\tclass=\"button\"\n\t\t\t\t\t\t\t:class=\"{ 'single-alt-login-option': countAlternativeLogins }\"\n\t\t\t\t\t\t\thref=\"#\"\n\t\t\t\t\t\t\t@click.prevent=\"passwordlessLogin = true\">\n\t\t\t\t\t\t\t{{ t('core', 'Log in with a device') }}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<a v-else\n\t\t\t\t\t\thref=\"#\"\n\t\t\t\t\t\t@click.prevent=\"passwordlessLogin = true\">\n\t\t\t\t\t\t{{ t('core', 'Log in with a device') }}\n\t\t\t\t\t</a>\n\t\t\t\t</template>\n\t\t\t</div>\n\t\t\t<div v-else-if=\"!loading && passwordlessLogin\"\n\t\t\t\tkey=\"reset\"\n\t\t\t\tclass=\"login-additional\">\n\t\t\t\t<PasswordLessLoginForm :username.sync=\"user\"\n\t\t\t\t\t:redirect-url=\"redirectUrl\"\n\t\t\t\t\t:inverted-colors=\"invertedColors\"\n\t\t\t\t\t:auto-complete-allowed=\"autoCompleteAllowed\"\n\t\t\t\t\t:is-https=\"isHttps\"\n\t\t\t\t\t:is-localhost=\"isLocalhost\"\n\t\t\t\t\t:has-public-key-credential=\"hasPublicKeyCredential\"\n\t\t\t\t\t@submit=\"loading = true\" />\n\t\t\t\t<a href=\"#\" @click.prevent=\"passwordlessLogin = false\">\n\t\t\t\t\t{{ t('core', 'Back') }}\n\t\t\t\t</a>\n\t\t\t</div>\n\t\t\t<div v-else-if=\"!loading && canResetPassword\"\n\t\t\t\tkey=\"reset\"\n\t\t\t\tclass=\"login-additional\">\n\t\t\t\t<div class=\"lost-password-container\">\n\t\t\t\t\t<ResetPassword v-if=\"resetPassword\"\n\t\t\t\t\t\t:username.sync=\"user\"\n\t\t\t\t\t\t:reset-password-link=\"resetPasswordLink\"\n\t\t\t\t\t\t:inverted-colors=\"invertedColors\"\n\t\t\t\t\t\t@abort=\"resetPassword = false\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div v-else-if=\"resetPasswordTarget !== ''\">\n\t\t\t\t<UpdatePassword :username.sync=\"user\"\n\t\t\t\t\t:reset-password-target=\"resetPasswordTarget\"\n\t\t\t\t\t:inverted-colors=\"invertedColors\"\n\t\t\t\t\t@done=\"passwordResetFinished\" />\n\t\t\t</div>\n\t\t</transition>\n\t</div>\n\t<div v-else>\n\t\t<transition name=\"fade\" mode=\"out-in\">\n\t\t\t<div class=\"warning\">\n\t\t\t\t{{ t('core', 'Login form is disabled.') }}<br>\n\t\t\t\t<small>{{ t('core', 'Please contact your administrator.') }}\n\t\t\t\t</small>\n\t\t\t</div>\n\t\t</transition>\n\t</div>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\nimport queryString from 'query-string'\n\nimport LoginForm from '../components/login/LoginForm.vue'\nimport PasswordLessLoginForm from '../components/login/PasswordLessLoginForm.vue'\nimport ResetPassword from '../components/login/ResetPassword.vue'\nimport UpdatePassword from '../components/login/UpdatePassword.vue'\n\nconst query = queryString.parse(location.search)\nif (query.clear === '1') {\n\ttry {\n\t\twindow.localStorage.clear()\n\t\twindow.sessionStorage.clear()\n\t\tconsole.debug('Browser storage cleared')\n\t} catch (e) {\n\t\tconsole.error('Could not clear browser storage', e)\n\t}\n}\n\nexport default {\n\tname: 'Login',\n\n\tcomponents: {\n\t\tLoginForm,\n\t\tPasswordLessLoginForm,\n\t\tResetPassword,\n\t\tUpdatePassword,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t\tuser: loadState('core', 'loginUsername', ''),\n\t\t\tpasswordlessLogin: false,\n\t\t\tresetPassword: false,\n\n\t\t\t// Initial data\n\t\t\terrors: loadState('core', 'loginErrors', []),\n\t\t\tmessages: loadState('core', 'loginMessages', []),\n\t\t\tredirectUrl: loadState('core', 'loginRedirectUrl', false),\n\t\t\tthrottleDelay: loadState('core', 'loginThrottleDelay', 0),\n\t\t\tinvertedColors: OCA.Theming && OCA.Theming.inverted,\n\t\t\tcanResetPassword: loadState('core', 'loginCanResetPassword', false),\n\t\t\tresetPasswordLink: loadState('core', 'loginResetPasswordLink', ''),\n\t\t\tautoCompleteAllowed: loadState('core', 'loginAutocomplete', true),\n\t\t\tresetPasswordTarget: loadState('core', 'resetPasswordTarget', ''),\n\t\t\tresetPasswordUser: loadState('core', 'resetPasswordUser', ''),\n\t\t\tdirectLogin: query.direct === '1',\n\t\t\thasPasswordless: loadState('core', 'webauthn-available', false),\n\t\t\tcountAlternativeLogins: loadState('core', 'countAlternativeLogins', false),\n\t\t\tisHttps: window.location.protocol === 'https:',\n\t\t\tisLocalhost: window.location.hostname === 'localhost',\n\t\t\thasPublicKeyCredential: typeof (window.PublicKeyCredential) !== 'undefined',\n\t\t\thideLoginForm: loadState('core', 'hideLoginForm', false),\n\t\t}\n\t},\n\tmethods: {\n\t\tpasswordResetFinished() {\n\t\t\tthis.resetPasswordTarget = ''\n\t\t\tthis.directLogin = true\n\t\t},\n\t},\n}\n</script>\n\n<style>\n\t.fade-enter-active, .fade-leave-active {\n\t\ttransition: opacity .3s;\n\t}\n\t.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {\n\t\topacity: 0;\n\t}\n</style>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.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!./Login.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/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=style&index=0&lang=css&\";\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/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=style&index=0&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Login.vue?vue&type=template&id=cdd35698&\"\nimport script from \"./Login.vue?vue&type=script&lang=js&\"\nexport * from \"./Login.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Login.vue?vue&type=style&index=0&lang=css&\"\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","/**\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 L10n from '../OC/l10n'\nimport OC from '../OC/index'\n\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tOC,\n\t\t}\n\t},\n\tmethods: {\n\t\tt: L10n.translate.bind(L10n),\n\t\tn: L10n.translatePlural.bind(L10n),\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\nimport Vue from 'vue'\n\n// eslint-disable-next-line no-unused-vars\nimport OC from './OC/index' // TODO: Not needed but L10n breaks if removed\nimport LoginView from './views/Login.vue'\nimport Nextcloud from './mixins/Nextcloud'\n\nVue.mixin(Nextcloud)\n\nconst View = Vue.extend(LoginView)\nnew View().$mount('#login')\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, \".body-login-container.update[data-v-4f29a6e2]{margin:15px 0}.body-login-container.update.form__message-box[data-v-4f29a6e2]{width:240px;margin:5px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/login/PasswordLessLoginForm.vue\"],\"names\":[],\"mappings\":\"AAmOA,8CACC,aAAA,CAEA,gEACC,WAAA,CACA,UAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.body-login-container.update {\\n\\tmargin: 15px 0;\\n\\n\\t&.form__message-box {\\n\\t\\twidth: 240px;\\n\\t\\tmargin: 5px;\\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, \"\\n.update[data-v-d9d670b8] {\\n\\twidth: auto;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/login/ResetPassword.vue\"],\"names\":[],\"mappings\":\";AAmJA;CACA,WAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\\n -\\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\\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<form @submit.prevent=\\\"submit\\\">\\n\\t\\t<fieldset>\\n\\t\\t\\t<p>\\n\\t\\t\\t\\t<input id=\\\"user\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"user\\\"\\n\\t\\t\\t\\t\\ttype=\\\"text\\\"\\n\\t\\t\\t\\t\\tname=\\\"user\\\"\\n\\t\\t\\t\\t\\tautocapitalize=\\\"off\\\"\\n\\t\\t\\t\\t\\t:placeholder=\\\"t('core', 'Username or email')\\\"\\n\\t\\t\\t\\t\\t:aria-label=\\\"t('core', 'Username or email')\\\"\\n\\t\\t\\t\\t\\trequired\\n\\t\\t\\t\\t\\t@change=\\\"updateUsername\\\">\\n\\t\\t\\t\\t<!--<?php p($_['user_autofocus'] ? 'autofocus' : ''); ?>\\n\\t\\t\\t\\tautocomplete=\\\"<?php p($_['login_form_autocomplete']); ?>\\\" autocapitalize=\\\"none\\\" autocorrect=\\\"off\\\"-->\\n\\t\\t\\t\\t<label for=\\\"user\\\" class=\\\"infield\\\">{{ t('core', 'Username or email') }}</label>\\n\\t\\t\\t</p>\\n\\t\\t\\t<div id=\\\"reset-password-wrapper\\\">\\n\\t\\t\\t\\t<input id=\\\"reset-password-submit\\\"\\n\\t\\t\\t\\t\\ttype=\\\"submit\\\"\\n\\t\\t\\t\\t\\tclass=\\\"login primary\\\"\\n\\t\\t\\t\\t\\ttitle=\\\"\\\"\\n\\t\\t\\t\\t\\t:value=\\\"t('core', 'Reset password')\\\">\\n\\t\\t\\t\\t<div class=\\\"submit-icon\\\"\\n\\t\\t\\t\\t\\t:class=\\\"{\\n\\t\\t\\t\\t\\t\\t'icon-confirm-white': !loading,\\n\\t\\t\\t\\t\\t\\t'icon-loading-small': loading && invertedColors,\\n\\t\\t\\t\\t\\t\\t'icon-loading-small-dark': loading && !invertedColors,\\n\\t\\t\\t\\t\\t}\\\" />\\n\\t\\t\\t</div>\\n\\t\\t\\t<p v-if=\\\"message === 'send-success'\\\"\\n\\t\\t\\t\\tclass=\\\"update\\\">\\n\\t\\t\\t\\t{{ t('core', 'A password reset message has been sent to the email address of this account. If you do not receive it, check your spam/junk folders or ask your local administrator for help.') }}\\n\\t\\t\\t\\t<br>\\n\\t\\t\\t\\t{{ t('core', 'If it is not there ask your local administrator.') }}\\n\\t\\t\\t</p>\\n\\t\\t\\t<p v-else-if=\\\"message === 'send-error'\\\"\\n\\t\\t\\t\\tclass=\\\"update warning\\\">\\n\\t\\t\\t\\t{{ t('core', 'Couldn\\\\'t send reset email. Please contact your administrator.') }}\\n\\t\\t\\t</p>\\n\\t\\t\\t<p v-else-if=\\\"message === 'reset-error'\\\"\\n\\t\\t\\t\\tclass=\\\"update warning\\\">\\n\\t\\t\\t\\t{{ t('core', 'Password cannot be changed. Please contact your administrator.') }}\\n\\t\\t\\t</p>\\n\\t\\t\\t<p v-else-if=\\\"message\\\"\\n\\t\\t\\t\\tclass=\\\"update\\\"\\n\\t\\t\\t\\t:class=\\\"{warning: error}\\\" />\\n\\n\\t\\t\\t<a href=\\\"#\\\"\\n\\t\\t\\t\\t@click.prevent=\\\"$emit('abort')\\\">\\n\\t\\t\\t\\t{{ t('core', 'Back to login') }}\\n\\t\\t\\t</a>\\n\\t\\t</fieldset>\\n\\t</form>\\n</template>\\n\\n<script>\\nimport axios from '@nextcloud/axios'\\n\\nimport { generateUrl } from '@nextcloud/router'\\n\\nexport default {\\n\\tname: 'ResetPassword',\\n\\tprops: {\\n\\t\\tusername: {\\n\\t\\t\\ttype: String,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t\\tresetPasswordLink: {\\n\\t\\t\\ttype: String,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t\\tinvertedColors: {\\n\\t\\t\\ttype: Boolean,\\n\\t\\t\\tdefault: false,\\n\\t\\t},\\n\\t},\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\terror: false,\\n\\t\\t\\tloading: false,\\n\\t\\t\\tmessage: undefined,\\n\\t\\t\\tuser: this.username,\\n\\t\\t}\\n\\t},\\n\\twatch: {\\n\\t\\tusername(value) {\\n\\t\\t\\tthis.user = value\\n\\t\\t},\\n\\t},\\n\\tmethods: {\\n\\t\\tupdateUsername() {\\n\\t\\t\\tthis.$emit('update:username', this.user)\\n\\t\\t},\\n\\t\\tsubmit() {\\n\\t\\t\\tthis.loading = true\\n\\t\\t\\tthis.error = false\\n\\t\\t\\tthis.message = ''\\n\\t\\t\\tconst url = generateUrl('/lostpassword/email')\\n\\n\\t\\t\\tconst data = {\\n\\t\\t\\t\\tuser: this.user,\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn axios.post(url, data)\\n\\t\\t\\t\\t.then(resp => resp.data)\\n\\t\\t\\t\\t.then(data => {\\n\\t\\t\\t\\t\\tif (data.status !== 'success') {\\n\\t\\t\\t\\t\\t\\tthrow new Error(`got status ${data.status}`)\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\tthis.message = 'send-success'\\n\\t\\t\\t\\t})\\n\\t\\t\\t\\t.catch(e => {\\n\\t\\t\\t\\t\\tconsole.error('could not send reset email request', e)\\n\\n\\t\\t\\t\\t\\tthis.error = true\\n\\t\\t\\t\\t\\tthis.message = 'send-error'\\n\\t\\t\\t\\t})\\n\\t\\t\\t\\t.then(() => { this.loading = false })\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n\\n<style scoped>\\n\\t.update {\\n\\t\\twidth: auto;\\n\\t}\\n</style>\\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, \"\\nfieldset[data-v-9ae5fdb4] {\\n\\ttext-align: center;\\n}\\ninput[type=submit][data-v-9ae5fdb4] {\\n\\tmargin-top: 20px;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/login/UpdatePassword.vue\"],\"names\":[],\"mappings\":\";AA4IA;CACA,kBAAA;AACA;AAEA;CACA,gBAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2019 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\\n<template>\\n\\t<form @submit.prevent=\\\"submit\\\">\\n\\t\\t<fieldset>\\n\\t\\t\\t<p>\\n\\t\\t\\t\\t<label for=\\\"password\\\" class=\\\"infield\\\">{{ t('core', 'New password') }}</label>\\n\\t\\t\\t\\t<input id=\\\"password\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"password\\\"\\n\\t\\t\\t\\t\\ttype=\\\"password\\\"\\n\\t\\t\\t\\t\\tname=\\\"password\\\"\\n\\t\\t\\t\\t\\tautocomplete=\\\"new-password\\\"\\n\\t\\t\\t\\t\\tautocapitalize=\\\"none\\\"\\n\\t\\t\\t\\t\\tautocorrect=\\\"off\\\"\\n\\t\\t\\t\\t\\trequired\\n\\t\\t\\t\\t\\t:placeholder=\\\"t('core', 'New password')\\\">\\n\\t\\t\\t</p>\\n\\n\\t\\t\\t<div v-if=\\\"encrypted\\\" class=\\\"update\\\">\\n\\t\\t\\t\\t<p>\\n\\t\\t\\t\\t\\t{{ t('core', 'Your files are encrypted. There will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?') }}\\n\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t<input id=\\\"encrypted-continue\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"proceed\\\"\\n\\t\\t\\t\\t\\ttype=\\\"checkbox\\\"\\n\\t\\t\\t\\t\\tclass=\\\"checkbox\\\">\\n\\t\\t\\t\\t<label for=\\\"encrypted-continue\\\">\\n\\t\\t\\t\\t\\t{{ t('core', 'I know what I\\\\'m doing') }}\\n\\t\\t\\t\\t</label>\\n\\t\\t\\t</div>\\n\\n\\t\\t\\t<div id=\\\"submit-wrapper\\\">\\n\\t\\t\\t\\t<input id=\\\"submit\\\"\\n\\t\\t\\t\\t\\ttype=\\\"submit\\\"\\n\\t\\t\\t\\t\\tclass=\\\"login primary\\\"\\n\\t\\t\\t\\t\\ttitle=\\\"\\\"\\n\\t\\t\\t\\t\\t:value=\\\"!loading ? t('core', 'Reset password') : t('core', 'Resetting password')\\\">\\n\\t\\t\\t\\t<div class=\\\"submit-icon\\\"\\n\\t\\t\\t\\t\\t:class=\\\"{\\n\\t\\t\\t\\t\\t\\t'icon-loading-small': loading && invertedColors,\\n\\t\\t\\t\\t\\t\\t'icon-loading-small-dark': loading && !invertedColors\\n\\t\\t\\t\\t\\t}\\\" />\\n\\t\\t\\t</div>\\n\\n\\t\\t\\t<p v-if=\\\"error && message\\\" :class=\\\"{warning: error}\\\">\\n\\t\\t\\t\\t{{ message }}\\n\\t\\t\\t</p>\\n\\t\\t</fieldset>\\n\\t</form>\\n</template>\\n\\n<script>\\nimport Axios from '@nextcloud/axios'\\n\\nexport default {\\n\\tname: 'UpdatePassword',\\n\\tprops: {\\n\\t\\tusername: {\\n\\t\\t\\ttype: String,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t\\tresetPasswordTarget: {\\n\\t\\t\\ttype: String,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t\\tinvertedColors: {\\n\\t\\t\\ttype: Boolean,\\n\\t\\t\\tdefault: false,\\n\\t\\t},\\n\\t},\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\terror: false,\\n\\t\\t\\tloading: false,\\n\\t\\t\\tmessage: undefined,\\n\\t\\t\\tuser: this.username,\\n\\t\\t\\tpassword: '',\\n\\t\\t\\tencrypted: false,\\n\\t\\t\\tproceed: false,\\n\\t\\t}\\n\\t},\\n\\twatch: {\\n\\t\\tusername(value) {\\n\\t\\t\\tthis.user = value\\n\\t\\t},\\n\\t},\\n\\tmethods: {\\n\\t\\tasync submit() {\\n\\t\\t\\tthis.loading = true\\n\\t\\t\\tthis.error = false\\n\\t\\t\\tthis.message = ''\\n\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tconst { data } = await Axios.post(this.resetPasswordTarget, {\\n\\t\\t\\t\\t\\tpassword: this.password,\\n\\t\\t\\t\\t\\tproceed: this.proceed,\\n\\t\\t\\t\\t})\\n\\t\\t\\t\\tif (data && data.status === 'success') {\\n\\t\\t\\t\\t\\tthis.message = 'send-success'\\n\\t\\t\\t\\t\\tthis.$emit('update:username', this.user)\\n\\t\\t\\t\\t\\tthis.$emit('done')\\n\\t\\t\\t\\t} else if (data && data.encryption) {\\n\\t\\t\\t\\t\\tthis.encrypted = true\\n\\t\\t\\t\\t} else if (data && data.msg) {\\n\\t\\t\\t\\t\\tthrow new Error(data.msg)\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tthrow new Error()\\n\\t\\t\\t\\t}\\n\\t\\t\\t} catch (e) {\\n\\t\\t\\t\\tthis.error = true\\n\\t\\t\\t\\tthis.message = e.message ? e.message : t('core', 'Password cannot be changed. Please contact your administrator.')\\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 scoped>\\n\\tfieldset {\\n\\t\\ttext-align: center;\\n\\t}\\n\\n\\tinput[type=submit] {\\n\\t\\tmargin-top: 20px;\\n\\t}\\n</style>\\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, \"\\n.fade-enter-active, .fade-leave-active {\\n\\ttransition: opacity .3s;\\n}\\n.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {\\n\\topacity: 0;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/views/Login.vue\"],\"names\":[],\"mappings\":\";AAiLA;CACA,uBAAA;AACA;AACA;CACA,UAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\\n -\\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\\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<div v-if=\\\"!hideLoginForm || directLogin\\\">\\n\\t\\t<transition name=\\\"fade\\\" mode=\\\"out-in\\\">\\n\\t\\t\\t<div v-if=\\\"!passwordlessLogin && !resetPassword && resetPasswordTarget === ''\\\"\\n\\t\\t\\t\\tkey=\\\"login\\\">\\n\\t\\t\\t\\t<LoginForm :username.sync=\\\"user\\\"\\n\\t\\t\\t\\t\\t:redirect-url=\\\"redirectUrl\\\"\\n\\t\\t\\t\\t\\t:direct-login=\\\"directLogin\\\"\\n\\t\\t\\t\\t\\t:messages=\\\"messages\\\"\\n\\t\\t\\t\\t\\t:errors=\\\"errors\\\"\\n\\t\\t\\t\\t\\t:throttle-delay=\\\"throttleDelay\\\"\\n\\t\\t\\t\\t\\t:inverted-colors=\\\"invertedColors\\\"\\n\\t\\t\\t\\t\\t:auto-complete-allowed=\\\"autoCompleteAllowed\\\"\\n\\t\\t\\t\\t\\t@submit=\\\"loading = true\\\" />\\n\\t\\t\\t\\t<a v-if=\\\"canResetPassword && resetPasswordLink !== ''\\\"\\n\\t\\t\\t\\t\\tid=\\\"lost-password\\\"\\n\\t\\t\\t\\t\\t:href=\\\"resetPasswordLink\\\">\\n\\t\\t\\t\\t\\t{{ t('core', 'Forgot password?') }}\\n\\t\\t\\t\\t</a>\\n\\t\\t\\t\\t<a v-else-if=\\\"canResetPassword && !resetPassword\\\"\\n\\t\\t\\t\\t\\tid=\\\"lost-password\\\"\\n\\t\\t\\t\\t\\t:href=\\\"resetPasswordLink\\\"\\n\\t\\t\\t\\t\\t@click.prevent=\\\"resetPassword = true\\\">\\n\\t\\t\\t\\t\\t{{ t('core', 'Forgot password?') }}\\n\\t\\t\\t\\t</a>\\n\\t\\t\\t\\t<br>\\n\\t\\t\\t\\t<template v-if=\\\"hasPasswordless\\\">\\n\\t\\t\\t\\t\\t<div v-if=\\\"countAlternativeLogins\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"alternative-logins\\\">\\n\\t\\t\\t\\t\\t\\t<a v-if=\\\"hasPasswordless\\\"\\n\\t\\t\\t\\t\\t\\t\\tclass=\\\"button\\\"\\n\\t\\t\\t\\t\\t\\t\\t:class=\\\"{ 'single-alt-login-option': countAlternativeLogins }\\\"\\n\\t\\t\\t\\t\\t\\t\\thref=\\\"#\\\"\\n\\t\\t\\t\\t\\t\\t\\t@click.prevent=\\\"passwordlessLogin = true\\\">\\n\\t\\t\\t\\t\\t\\t\\t{{ t('core', 'Log in with a device') }}\\n\\t\\t\\t\\t\\t\\t</a>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<a v-else\\n\\t\\t\\t\\t\\t\\thref=\\\"#\\\"\\n\\t\\t\\t\\t\\t\\t@click.prevent=\\\"passwordlessLogin = true\\\">\\n\\t\\t\\t\\t\\t\\t{{ t('core', 'Log in with a device') }}\\n\\t\\t\\t\\t\\t</a>\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div v-else-if=\\\"!loading && passwordlessLogin\\\"\\n\\t\\t\\t\\tkey=\\\"reset\\\"\\n\\t\\t\\t\\tclass=\\\"login-additional\\\">\\n\\t\\t\\t\\t<PasswordLessLoginForm :username.sync=\\\"user\\\"\\n\\t\\t\\t\\t\\t:redirect-url=\\\"redirectUrl\\\"\\n\\t\\t\\t\\t\\t:inverted-colors=\\\"invertedColors\\\"\\n\\t\\t\\t\\t\\t:auto-complete-allowed=\\\"autoCompleteAllowed\\\"\\n\\t\\t\\t\\t\\t:is-https=\\\"isHttps\\\"\\n\\t\\t\\t\\t\\t:is-localhost=\\\"isLocalhost\\\"\\n\\t\\t\\t\\t\\t:has-public-key-credential=\\\"hasPublicKeyCredential\\\"\\n\\t\\t\\t\\t\\t@submit=\\\"loading = true\\\" />\\n\\t\\t\\t\\t<a href=\\\"#\\\" @click.prevent=\\\"passwordlessLogin = false\\\">\\n\\t\\t\\t\\t\\t{{ t('core', 'Back') }}\\n\\t\\t\\t\\t</a>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div v-else-if=\\\"!loading && canResetPassword\\\"\\n\\t\\t\\t\\tkey=\\\"reset\\\"\\n\\t\\t\\t\\tclass=\\\"login-additional\\\">\\n\\t\\t\\t\\t<div class=\\\"lost-password-container\\\">\\n\\t\\t\\t\\t\\t<ResetPassword v-if=\\\"resetPassword\\\"\\n\\t\\t\\t\\t\\t\\t:username.sync=\\\"user\\\"\\n\\t\\t\\t\\t\\t\\t:reset-password-link=\\\"resetPasswordLink\\\"\\n\\t\\t\\t\\t\\t\\t:inverted-colors=\\\"invertedColors\\\"\\n\\t\\t\\t\\t\\t\\t@abort=\\\"resetPassword = false\\\" />\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div v-else-if=\\\"resetPasswordTarget !== ''\\\">\\n\\t\\t\\t\\t<UpdatePassword :username.sync=\\\"user\\\"\\n\\t\\t\\t\\t\\t:reset-password-target=\\\"resetPasswordTarget\\\"\\n\\t\\t\\t\\t\\t:inverted-colors=\\\"invertedColors\\\"\\n\\t\\t\\t\\t\\t@done=\\\"passwordResetFinished\\\" />\\n\\t\\t\\t</div>\\n\\t\\t</transition>\\n\\t</div>\\n\\t<div v-else>\\n\\t\\t<transition name=\\\"fade\\\" mode=\\\"out-in\\\">\\n\\t\\t\\t<div class=\\\"warning\\\">\\n\\t\\t\\t\\t{{ t('core', 'Login form is disabled.') }}<br>\\n\\t\\t\\t\\t<small>{{ t('core', 'Please contact your administrator.') }}\\n\\t\\t\\t\\t</small>\\n\\t\\t\\t</div>\\n\\t\\t</transition>\\n\\t</div>\\n</template>\\n\\n<script>\\nimport { loadState } from '@nextcloud/initial-state'\\nimport queryString from 'query-string'\\n\\nimport LoginForm from '../components/login/LoginForm.vue'\\nimport PasswordLessLoginForm from '../components/login/PasswordLessLoginForm.vue'\\nimport ResetPassword from '../components/login/ResetPassword.vue'\\nimport UpdatePassword from '../components/login/UpdatePassword.vue'\\n\\nconst query = queryString.parse(location.search)\\nif (query.clear === '1') {\\n\\ttry {\\n\\t\\twindow.localStorage.clear()\\n\\t\\twindow.sessionStorage.clear()\\n\\t\\tconsole.debug('Browser storage cleared')\\n\\t} catch (e) {\\n\\t\\tconsole.error('Could not clear browser storage', e)\\n\\t}\\n}\\n\\nexport default {\\n\\tname: 'Login',\\n\\n\\tcomponents: {\\n\\t\\tLoginForm,\\n\\t\\tPasswordLessLoginForm,\\n\\t\\tResetPassword,\\n\\t\\tUpdatePassword,\\n\\t},\\n\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tloading: false,\\n\\t\\t\\tuser: loadState('core', 'loginUsername', ''),\\n\\t\\t\\tpasswordlessLogin: false,\\n\\t\\t\\tresetPassword: false,\\n\\n\\t\\t\\t// Initial data\\n\\t\\t\\terrors: loadState('core', 'loginErrors', []),\\n\\t\\t\\tmessages: loadState('core', 'loginMessages', []),\\n\\t\\t\\tredirectUrl: loadState('core', 'loginRedirectUrl', false),\\n\\t\\t\\tthrottleDelay: loadState('core', 'loginThrottleDelay', 0),\\n\\t\\t\\tinvertedColors: OCA.Theming && OCA.Theming.inverted,\\n\\t\\t\\tcanResetPassword: loadState('core', 'loginCanResetPassword', false),\\n\\t\\t\\tresetPasswordLink: loadState('core', 'loginResetPasswordLink', ''),\\n\\t\\t\\tautoCompleteAllowed: loadState('core', 'loginAutocomplete', true),\\n\\t\\t\\tresetPasswordTarget: loadState('core', 'resetPasswordTarget', ''),\\n\\t\\t\\tresetPasswordUser: loadState('core', 'resetPasswordUser', ''),\\n\\t\\t\\tdirectLogin: query.direct === '1',\\n\\t\\t\\thasPasswordless: loadState('core', 'webauthn-available', false),\\n\\t\\t\\tcountAlternativeLogins: loadState('core', 'countAlternativeLogins', false),\\n\\t\\t\\tisHttps: window.location.protocol === 'https:',\\n\\t\\t\\tisLocalhost: window.location.hostname === 'localhost',\\n\\t\\t\\thasPublicKeyCredential: typeof (window.PublicKeyCredential) !== 'undefined',\\n\\t\\t\\thideLoginForm: loadState('core', 'hideLoginForm', false),\\n\\t\\t}\\n\\t},\\n\\tmethods: {\\n\\t\\tpasswordResetFinished() {\\n\\t\\t\\tthis.resetPasswordTarget = ''\\n\\t\\t\\tthis.directLogin = true\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n\\n<style>\\n\\t.fade-enter-active, .fade-leave-active {\\n\\t\\ttransition: opacity .3s;\\n\\t}\\n\\t.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {\\n\\t\\topacity: 0;\\n\\t}\\n</style>\\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, 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(14, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":23,\"column\":1},\"end\":{\"line\":29,\"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<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},\"18\":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=\\\"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<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</a>\\n\";\n},\"20\":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},\"22\":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<span class=\\\"other-actions icon-more\\\"></span>\\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(23, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":51,\"column\":3},\"end\":{\"line\":58,\"column\":12}}})) != null ? stack1 : \"\")\n + \"\t\t</ul>\\n\t</div>\\n\";\n},\"23\":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\":53,\"column\":13},\"end\":{\"line\":53,\"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\":54,\"column\":15},\"end\":{\"line\":54,\"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\":55,\"column\":11},\"end\":{\"line\":55,\"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(16, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":22,\"column\":0},\"end\":{\"line\":36,\"column\":7}}})) != 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(18, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":37,\"column\":0},\"end\":{\"line\":41,\"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(20, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":42,\"column\":0},\"end\":{\"line\":46,\"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(22, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":47,\"column\":0},\"end\":{\"line\":61,\"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 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","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// 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 = 4577;","__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\t4577: 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));","// 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__(10473); })\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","enableDynamicSlideToggle","Apps","$el","removeClass","trigger","addClass","method","endpoint","OC","type","toUpperCase","url","generateOcsUrl","data","success","bind","appConfig","window","oc_appconfig","AppConfig","getValue","app","key","defaultValue","setValue","value","getApps","getKeys","deleteKey","_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","_$trigger","_view","_contactsPromise","el","_loadContacts","_toggleVisibility","Promise","resolve","_getContacts","filter","term","catch","rawUid","document","getElementsByTagName","getAttribute","displayName","currentUser","Search","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","filelist","allowDirectoryChooser","_getFilePickerTemplate","$filePicker","emptytext","newtext","nameCol","sizeCol","modifiedCol","remove","$showGridView","_onGridviewChange","_getGridSettings","newButton","event","stopImmediatePropagation","preventDefault","$input","submit","newName","lastPos","lastIndexOf","selectRange","$form","stopPropagation","filename","trimmedName","trim","match","isFileNameValid","file","escape","checkInput","newname","createDirectory","always","_fillFilePicker","keypress","keyCode","which","ready","$fileListHeader","$filelist","$filelistContainer","$dirTree","_handleTreeListSelect","_handlePickerClick","dir","currentTarget","functionToCall","returnType","datapath","index","element","selectedName","button","width","height","style","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","checked","gridview","next","toggleClass","defer","$filePickerTemplate","tmpl","$listTmpl","detach","jqXHR","$messageTemplate","$fileexistsTemplate","_getFileList","mimeType","mimetypes","empty","getFolderContents","files","mimetype","showHiddenInput","getElementById","startsWith","Comparators","fileInfo1","fileInfo2","comparator","sort","file1","file2","isFavorite","fileInfo","tags","_fillSlug","idx","entry","simpleSize","sizeColor","icon","parseInt","pow","filename1","filename2","date","previewUrl","addButton","$template","paths","prepend","prependTo","getOcDialog","_changeButtonsText","$element","ctrlKey","copyText","folder","moveText","eq","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","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","hasClass","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","_vm","_h","$createElement","_c","_self","$event","$emit","staticClass","domProps","_v","class","invertedColors","ref","loginActionUrl","_s","_e","_l","loadingIcon","staticStyle","shake","invalidPassword","directives","rawName","expression","autoCompleteAllowed","updateUsername","composing","user","passwordInputType","togglePassword","toggleIcon","throttleDelay","redirectUrl","timezone","timezoneOffset","loginName","Axios","resp","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","isHttps","isLocalhost","hasPublicKeyCredential","validCredentials","authenticate","warning","Array","isArray","proceed","_i","$$a","$$el","$$c","$$i","concat","slice","clear","hideLoginForm","directLogin","passwordlessLogin","resetPassword","resetPasswordTarget","canResetPassword","resetPasswordLink","passwordResetFinished","messages","errors","countAlternativeLogins","methods","Vue","Nextcloud","LoginView","$mount","___CSS_LOADER_EXPORT___","module","exports","container","depth0","helpers","partials","stack1","lookupProperty","propertyName","hasOwnProperty","nullContext","program","noop","alias1","lambda","alias2","escapeExpression","helper","hooks","helperMissing","alias3","alias4","map","webpackContext","req","webpackContextResolve","__webpack_require__","o","code","keys","__webpack_module_cache__","moduleId","cachedModule","loaded","__webpack_modules__","amdD","amdO","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","every","splice","getter","__esModule","d","definition","defineProperty","enumerable","globalThis","Function","obj","Symbol","toStringTag","nmd","baseURI","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"core-login.js?v=c18ca6ea01ee60bfe54b","mappings":";gBAAIA,iGC4BEC,EAAgB,GAChBC,EAAe,yBCQrB,GAECC,sBAAuB,KAEvBC,+BAAgC,KAMhCC,WAVc,SAUHC,GACVC,KAAKH,+BAAiCE,GAavCE,KAxBc,SAwBTC,EAAMH,GACNI,EAAAA,QAAAA,WAAaD,KAEhBH,EAAWG,EACXA,OAAOE,GAGHF,GAMLA,EAAKG,MAAK,WACLC,GAAAA,CAAEN,MAAM,GAAGO,SACdD,GAAAA,CAAEN,MAAM,GAAGO,SAASC,YAEpBC,QAAQC,MAAM,+CAEXV,OAASA,KAAKJ,wBACjBI,KAAKJ,sBAAwB,SAG3BG,GACHA,EAASY,OAENX,KAAKH,gCACRG,KAAKH,kCAnBLY,QAAQC,MAAM,2HAmChBE,SAnEc,SAmELC,EAAMC,IACdA,EAAUA,GAAW,IACbC,QAAS,EACjBD,EAAQE,QAAYF,EAAQE,QAAqCF,EAAQE,QAAlCC,EAAAA,GACvC,IAAMC,GAAQC,EAAAA,EAAAA,IAAYN,EAAMC,GAEhC,OADAI,EAAME,aAAab,SAAWW,EACvBZ,GAAAA,CAAEY,EAAME,eAahBC,KAtFc,SAsFTC,EAAMR,IAUVA,EAAUA,GAAW,IACbE,QAAYF,EAAQE,QAAqCF,EAAQE,QAAlCC,EAAAA,GACvC,IAAMC,GAAQC,EAAAA,EAAAA,IAXK,SAASG,GAC3B,OAAOA,EAAKC,WACVC,MAAM,KAAKC,KAAK,SAChBD,MAAM,KAAKC,KAAK,QAChBD,MAAM,KAAKC,KAAK,QAChBD,MAAM,KAAKC,KAAK,UAChBD,MAAM,KAAMC,KAAK,UAKMC,CAAWJ,GAAOR,GAE5C,OADAI,EAAME,aAAab,SAAWW,EACvBZ,GAAAA,CAAEY,EAAME,eAUhBO,WA9Gc,SA8GHL,GAMV,OALItB,KAAKJ,uBACRI,KAAKJ,sBAAsBY,YAE5BR,KAAKJ,uBAAwBuB,EAAAA,EAAAA,IAAYG,EAAM,CAAEN,QAASC,EAAAA,KAC1DjB,KAAKJ,sBAAsBwB,aAAab,SAAWP,KAAKJ,sBACjDU,GAAAA,CAAEN,KAAKJ,sBAAsBwB,eAerCQ,cAnIc,SAmIAN,EAAMR,IACnBA,EAAUA,GAAW,IACbE,QAAUF,EAAQE,SAAWa,EAAAA,GACrC,IAAMX,GAAQC,EAAAA,EAAAA,IAAYG,EAAMR,GAEhC,OADAI,EAAME,aAAab,SAAWW,EACvBZ,GAAAA,CAAEY,EAAME,eAShBU,SAjJc,WAkJb,OAAQxB,GAAAA,CAAE,YAAYyB,KAAK,aAAaC,SCnJ7BC,EAA4B9B,EAAAA,QAAAA,UAAW,WACnD+B,EAAAA,cAA2BC,EAAE,OAAQ,gCACnC,IAAU,CAAEC,UAAU,ICgGzB,EA3Ga,CACZC,yBADY,aAWbC,eAAsB,SAASC,IACVA,GAAOjC,GAAAA,CAAE,iBACjBkC,YAAY,aAAanB,OACrCf,GAAAA,CAAE,gBAAgBmC,QAAQ,IAAInC,IAAAA,OAAQ,gBASvCgC,eAAsB,SAASC,IACVA,GAAOjC,GAAAA,CAAE,iBACjBL,OAAOyC,SAAS,aAC5BpC,GAAAA,CAAE,gBAAgBmC,QAAQ,IAAInC,IAAAA,OAAQ,iBCjBvC,SAASK,EAAKgC,EAAQC,EAAU9B,GACf,SAAX6B,GAAgC,WAAXA,IAAwBE,GAAAA,qBAAAA,gCAKlD/B,EAAUA,GAAW,GACrBR,IAAAA,KAAO,CACNwC,KAAMH,EAAOI,cACbC,KAAKC,EAAAA,EAAAA,gBAAe,4CAA8CL,EAClEM,KAAMpC,EAAQoC,MAAQ,GACtBC,QAASrC,EAAQqC,QACjBzC,MAAOI,EAAQJ,SAVfmC,GAAAA,qBAAAA,4BAAoD1C,EAAEiD,KAAKzC,EAAMX,KAAM2C,EAAQC,EAAU9B,ICRpF,IAAMuC,EAAYC,OAAOC,cAAgB,GAMnCC,EAAY,CAIxBC,SAAU,SAASC,EAAKC,EAAKC,EAAc7D,IDyCrC,SAAkB2D,EAAKC,EAAKC,EAAc9C,IAChDA,EAAUA,GAAW,IACboC,KAAO,CACdU,aAAAA,GAGDjD,EAAK,MAAO,IAAM+C,EAAM,IAAMC,EAAK7C,GC9ClC2C,CAASC,EAAKC,EAAKC,EAAc,CAChCT,QAASpD,KAOX8D,SAAU,SAASH,EAAKC,EAAKG,IDkDvB,SAAkBJ,EAAKC,EAAKG,EAAOhD,IACzCA,EAAUA,GAAW,IACboC,KAAO,CACdY,MAAAA,GAGDnD,EAAK,OAAQ,IAAM+C,EAAM,IAAMC,EAAK7C,GCvDnC+C,CAASH,EAAKC,EAAKG,IAMpBC,QAAS,SAAShE,IDCZ,SAAiBe,GACvBH,EAAK,MAAO,GAAIG,GCDfiD,CAAQ,CACPZ,QAASpD,KAOXiE,QAAS,SAASN,EAAK3D,IDGjB,SAAiB2D,EAAK5C,GAC5BH,EAAK,MAAO,IAAM+C,EAAK5C,GCHtBkD,CAAQN,EAAK,CACZP,QAASpD,KAOXkE,UAAW,SAASP,EAAKC,ID0CnB,SAAmBD,EAAKC,EAAK7C,GACnCH,EAAK,SAAU,IAAM+C,EAAM,IAAMC,OC1ChCM,GAAAA,CAAUP,EAAKC,KCnDjB,OAFkDvD,IAA5BkD,OAAOY,kBAAkCZ,OAAOY,gDCMhEC,EAAY,CACjBC,OAAQ,OACRC,OAAQ,YACRC,MAAO,YACPC,OAAQ,SACRC,KAAM,YAcP,SAASC,EAAoBC,EAAQC,GACpC,GAAIxE,EAAAA,QAAAA,QAAUuE,GACb,OAAOvE,EAAAA,QAAAA,IAAMuE,GAAQ,SAASE,GAC7B,OAAOH,EAAoBG,EAAWD,MAGxC,IAAIE,EAAQ,CACXC,KAAMJ,EAAOI,MAsBd,OAnBA3E,EAAAA,QAAAA,KAAOuE,EAAOK,UAAU,SAASA,GAChC,GAAwB,oBAApBA,EAASC,OAIb,IAAK,IAAIrB,KAAOoB,EAASE,WAAY,CACpC,IAAIC,EAAUvB,EACVA,KAAOgB,IACVO,EAAUP,EAAchB,IAEzBkB,EAAMK,GAAWH,EAASE,WAAWtB,OAIlCkB,EAAMM,KAEVN,EAAMM,GAAKC,EAAoBP,EAAMC,OAG/BD,EASR,SAASO,EAAoBpC,GAC5B,IAAIqC,EAAWrC,EAAIsC,QAAQ,KACvBD,EAAW,IACdrC,EAAMA,EAAIuC,OAAO,EAAGF,IAGrB,IACIX,EADAc,EAAQxC,EAAIxB,MAAM,KAEtB,GACCkD,EAASc,EAAMA,EAAMxD,OAAS,GAC9BwD,EAAMC,aAGGf,GAAUc,EAAMxD,OAAS,GAEnC,OAAO0C,EAGR,SAASgB,EAAgBV,GACxB,OAAOA,GAAU,KAAOA,GAAU,IA+CnC,SAASW,EAAcC,EAAQ9E,EAAS+E,EAAOC,GAC9C,OAAOF,EAAOG,UACbjF,EAAQkC,IA9CV,SAA+CgD,EAAOrB,GACrD,IACIhB,EADAkB,EAAQ,GAEZ,IAAKlB,KAAOqC,EAAO,CAClB,IAAIC,EAActB,EAAchB,GAC5BG,EAAQkC,EAAMrC,GACbsC,IACJxF,QAAQyF,KAAK,0CAA4CvC,GACzDsC,EAActC,IAEXxD,EAAAA,QAAAA,UAAY2D,IAAU3D,EAAAA,QAAAA,SAAW2D,MAEpCA,EAAQ,GAAKA,GAEde,EAAMoB,GAAenC,EAEtB,OAAOe,EA+BNsB,CAAsCN,EAAMO,QAAStF,EAAQ6D,eAC7DmB,GACCO,MAAK,SAAS3B,GACXgB,EAAgBhB,EAAOM,QACtB7E,EAAAA,QAAAA,WAAaW,EAAQqC,UAGxBrC,EAAQqC,QAAQ0C,EAAMS,UAEbnG,EAAAA,QAAAA,WAAaW,EAAQJ,QAC/BI,EAAQJ,MAAMgE,MA+DV,ICzMD6B,EAAWC,IAAAA,aAGjBC,OAAOC,OAAOH,EAAU,CACvBI,QDqMsB,SAAC7F,EAAS+E,GAChC,IAAID,EAAS,IAAIgB,EAAAA,IAAAA,OAAW,CAC3BC,QAAS/F,EAAQkC,IACjB8D,cAAe3G,EAAAA,QAAAA,OAAS,CACvB,OAAQ,IACR,yBAA0B,MACxBW,EAAQgG,eAAiB,MAE7BlB,EAAOmB,WAAa,WACnB,OAAOjG,EAAQkC,KAEhB,IAAI8C,EAAU3F,EAAAA,QAAAA,OAAS,CACtB,mBAAoB,iBACpB,aAAgB0C,GAAGmE,cACjBlG,EAAQgF,SACX,MAAqB,aAAjBhF,EAAQgC,KApHb,SAAsB8C,EAAQ9E,EAAS+E,EAAOC,GAC7C,OAAOF,EAAOqB,SACbnG,EAAQkC,IACR7C,EAAAA,QAAAA,OAASW,EAAQ6D,gBAAkB,GACnC7D,EAAQoG,MACRpB,GACCO,MAAK,SAASc,GACf,GAAIzB,EAAgByB,EAASnC,SAC5B,GAAI7E,EAAAA,QAAAA,WAAaW,EAAQqC,SAAU,CAClC,IAAIiE,EAAejH,EAAAA,QAAAA,OAASW,EAAQ6D,eAChC0C,EAAU5C,EAAoB0C,EAASG,KAAMF,GAC7CtG,EAAQoG,MAAQ,GAEnBG,EAAQE,QAGTzG,EAAQqC,QAAQkE,SAGPlH,EAAAA,QAAAA,WAAaW,EAAQJ,QAC/BI,EAAQJ,MAAMyG,MAiGRK,CAAa5B,EAAQ9E,EAAS+E,EAAOC,GACjB,cAAjBhF,EAAQgC,KACX6C,EAAcC,EAAQ9E,EAAS+E,EAAOC,GAClB,UAAjBhF,EAAQgC,KA5EpB,SAAmB8C,EAAQ9E,EAAS+E,EAAOC,GAE1C,OAAOF,EAAO6B,QACb3G,EAAQgC,KACRhC,EAAQkC,IACR8C,EACA,MACCO,MAAK,SAAS3B,GACVgB,EAAgBhB,EAAOM,QAO5BW,EAAcC,EAAQ9E,EAAS+E,EAAOC,GANjC3F,EAAAA,QAAAA,WAAaW,EAAQJ,QACxBI,EAAQJ,MAAMgE,MAmETgD,CAAU9B,EAAQ9E,EAAS+E,EAAOC,GA1D3C,SAAoBF,EAAQ9E,EAAS+E,EAAOC,GAE3C,OADAA,EAAQ,gBAAkB,mBACnBF,EAAO6B,QACb3G,EAAQgC,KACRhC,EAAQkC,IACR8C,EACAhF,EAAQoC,MACPmD,MAAK,SAAS3B,GACf,GAAKgB,EAAgBhB,EAAOM,SAO5B,GAAI7E,EAAAA,QAAAA,WAAaW,EAAQqC,SAAU,CAClC,GAAqB,QAAjBrC,EAAQgC,MAAmC,SAAjBhC,EAAQgC,MAAoC,UAAjBhC,EAAQgC,KAAkB,CAGlF,IAAI6E,EAAejD,EAAO4C,MAAQzB,EAAMS,SACpCsB,EAAiBlD,EAAOmD,IAAIC,kBAAkB,oBAKlD,MAJqB,SAAjBhH,EAAQgC,MAAmB8E,IAC9BD,EAAaxC,GAAKC,EAAoBwC,SAEvC9G,EAAQqC,QAAQwE,GAIjB,GAAsB,MAAlBjD,EAAOM,OAAgB,CAC1B,IAAIoC,EAAejH,EAAAA,QAAAA,OAASW,EAAQ6D,eACpC7D,EAAQqC,QAAQsB,EAAoBC,EAAO4C,KAAMF,SAEjDtG,EAAQqC,QAAQuB,EAAO4C,YAvBpBnH,EAAAA,QAAAA,WAAaW,EAAQJ,QACxBI,EAAQJ,MAAMgE,MAkDTqD,CAAWnC,EAAQ9E,EAAS+E,EAAOC,IC1N3CkC,QDiOsB,SAAAzB,GAAQ,OAAI,SAAC5D,EAAQkD,EAAO/E,GAClD,IAAImH,EAAS,CAAEnF,KAAMqB,EAAUxB,IAAWA,GACtCuF,EAAgBrC,aAAiBU,EAAS4B,WA6B9C,GA3Be,WAAXxF,IAGCkD,EAAMuC,mBAETH,EAAOnF,KAAO,SACJ+C,EAAMwC,QAAWxC,EAAMyC,YAAczC,EAAMyC,WAAWD,UAEhEJ,EAAOnF,KAAO,QAKXhC,EAAQkC,MACZiF,EAAOjF,IAAM7C,EAAAA,QAAAA,OAAS0F,EAAO,QA7O/B,WACC,MAAM,IAAI0C,MAAM,kDA4OwBC,IAIpB,MAAhB1H,EAAQoC,OAAgB2C,GAAqB,WAAXlD,GAAkC,WAAXA,GAAkC,UAAXA,IACnFsF,EAAO/E,KAAOuF,KAAKC,UAAU5H,EAAQkF,OAASH,EAAMS,OAAOxF,KAIxC,aAAhBmH,EAAOnF,OACVmF,EAAOU,aAAc,GAGF,aAAhBV,EAAOnF,MAAuC,cAAhBmF,EAAOnF,KAAsB,CAC9D,IAAI6B,EAAgBkB,EAAMlB,eACrBA,GAAiBkB,EAAMA,QAE3BlB,EAAgBkB,EAAMA,MAAM+C,UAAUjE,eAEnCA,IACCxE,EAAAA,QAAAA,WAAawE,GAChBsD,EAAOtD,cAAgBA,EAAchE,KAAKkF,GAE1CoC,EAAOtD,cAAgBA,GAIzBsD,EAAOtD,cAAgBxE,EAAAA,QAAAA,OAAS8H,EAAOtD,eAAiB,GAAI7D,EAAQ6D,eAEhExE,EAAAA,QAAAA,YAAcW,EAAQoG,SAExBpG,EAAQoG,MADLgB,EACa,EAEA,GAMnB,IAAIxH,EAAQI,EAAQJ,MACpBI,EAAQJ,MAAQ,SAASmH,EAAKgB,EAAYC,GACzChI,EAAQ+H,WAAaA,EACrB/H,EAAQgI,YAAcA,EAClBpI,GACHA,EAAMC,KAAKG,EAAQiI,QAASlB,EAAKgB,EAAYC,IAK/C,IAAIjB,EAAM/G,EAAQ+G,IAAMtB,EAASI,QAAQxG,EAAAA,QAAAA,OAAS8H,EAAQnH,GAAU+E,GAEpE,OADAA,EAAMpD,QAAQ,UAAWoD,EAAOgC,EAAK/G,GAC9B+G,GCtSEG,CAAQzB,KAGlB,mBCVA,EAFejD,OAAO0F,YAAc,GCY9BC,EAAUC,EAAAA,MAAAA,OAAa,CAC5BC,SAAU,CACTC,SAAU,GACVC,YAAa,GACbC,QAAS,GACTC,cAAc,EACdC,eAAe,EACfC,gBAAgB,GAMjBC,WAAY,WAEwB,IAA/B1J,KAAK2J,IAAI,WAAW3H,OACvBhC,KAAK4J,IAAI,gBAAgB,GACgB,IAA/B5J,KAAK2J,IAAI,WAAW3H,QAC9BhC,KAAK4J,IAAI,iBAAiB,GAC1B5J,KAAK4J,IAAI,eAAgB5J,KAAK2J,IAAI,WAAW,KAE7C3J,KAAK4J,IAAI,kBAAkB,MASxBC,EAAoB1B,EAAAA,WAAAA,OAAkB,CAC3CtC,MAAOoD,IAOFa,EAAmBC,EAAAA,KAAAA,OAAY,CAGpCC,iBAAa5J,EAGb6J,UAAW,GAMXP,WAAY,SAAS5I,GACpBd,KAAKgK,YAAclJ,EAAQwH,YAM5B4B,OAAQ,WACP,IAAIC,EAAOnK,KAcX,OAbAmK,EAAK5H,IAAI1B,KAAK,IACdsJ,EAAKF,UAAY,GAEjBE,EAAKH,YAAYI,SAAQ,SAASC,GACjC,IAAIC,EAAO,IAAIC,EAAqB,CACnC1E,MAAOwE,IAERC,EAAKJ,SACLC,EAAK5H,IAAIiI,OAAOF,EAAK/H,KACrB+H,EAAKG,GAAG,oBAAqBN,EAAKO,yBAA0BP,GAC5DA,EAAKF,UAAUU,KAAKL,MAGdH,GASRO,yBAA0B,SAASE,GAClC5K,KAAKiK,UAAUG,SAAQ,SAASS,GAC/BA,EAAKpI,QAAQ,2BAA4BmI,SAStCL,EAAuBR,EAAAA,KAAAA,OAAY,CAGxCe,UAAW,UAGXC,eAAW3K,EAGX4K,YAAQ5K,EAGR6K,kBAAkB,EAElBC,OAAQ,CACP,mBAAoB,wBAGrBC,gBAAiBC,EAAQ,OAMzBC,SAAU,SAASnI,GAClB,OAAOlD,KAAKmL,gBAAgBjI,IAO7BwG,WAAY,SAAS5I,GACpBd,KAAKgL,OAASlK,EAAQ+E,MACtB7F,KAAKyK,GAAG,2BAA4BzK,KAAKsL,yBAA0BtL,OAMpEkK,OAAQ,WAcP,OAbAlK,KAAKuC,IAAI1B,KAAKb,KAAKqL,SAAS,CAC3BhB,QAASrK,KAAKgL,OAAO1E,YAEtBtG,KAAKuL,iBAGLvL,KAAKM,EAAE,cAAckL,iBAAiBxL,KAAKgL,OAAOrB,IAAI,aAGtD3J,KAAKM,EAAE,eAAemL,QAAQ,CAAEC,UAAW,SAE3C1L,KAAKM,EAAE,kBAAkBmL,QAAQ,CAAEC,UAAW,SAEvC1L,MASR2L,qBAAsB,WACrB3L,KAAKiL,kBAAoBjL,KAAKiL,iBAC1BjL,KAAKiL,iBACRjL,KAAKM,EAAE,SAASe,OAEhBrB,KAAKM,EAAE,SAASL,OAEjBD,KAAKyC,QAAQ,oBAAqBzC,KAAKuC,MAQxC+I,yBAA0B,SAASV,GAC9B5K,KAAKuC,IAAIqJ,GAAGhB,KAIhB5K,KAAKiL,kBAAmB,EACxBjL,KAAKM,EAAE,SAASL,WAQZ4L,EAAmB9B,EAAAA,KAAAA,OAAY,CAGpC+B,sBAAkB1L,EAGlB2L,oBAAgB3L,EAGhB4L,sBAAkB5L,EAGlB6L,uBAAmB7L,EAGnB8L,eAAW9L,EAGX+L,YAAa,GAEbjB,OAAQ,CACP,6BAA8B,aAG/BkB,UAAW,CACVC,QAASjB,EAAQ,OACjB1K,MAAO0K,EAAQ,OACfkB,KAAMlB,EAAQ,OACdmB,KAAMnB,EAAQ,QAMfoB,UAAWrM,EAAAA,QAAAA,UAAW,SAASsM,GAC9B,IAAIC,EAAa1M,KAAKM,EAAE,wBAAwBqM,MAK5CD,IAAe1M,KAAKmM,cACvBnM,KAAKyC,QAAQ,SAAUzC,KAAKM,EAAE,wBAAwBqM,OACtD3M,KAAKmM,YAAcO,KAElB,KAMHE,gBAAiB,SAAS1J,GACzB,OAAOlD,KAAKoM,UAAUC,QAAQnJ,IAO/B2J,cAAe,SAAS3J,GACvB,OAAOlD,KAAKoM,UAAU1L,MACrBP,EAAAA,QAAAA,OAAS,CACR2M,iBAAkB3K,EAAE,OAAQ,iCAC1Be,KAQL6J,gBAAiB,SAAS7J,GACzB,OAAOlD,KAAKoM,UAAUE,KACrBnM,EAAAA,QAAAA,OAAS,CACR6M,mBAAoB7K,EAAE,OAAQ,sBAC5Be,KAQL+J,iBAAkB,SAAS/J,GAC1B,OAAOlD,KAAKoM,UAAUG,KACrBpM,EAAAA,QAAAA,OAAS,CACR+M,oBAAqB/K,EAAE,OAAQ,qBAC/BgL,oBAAqBhL,EAAE,OAAQ,uBAC/BiL,oBAAqBjL,EAAE,OAAQ,6BAC7Be,KAQLwG,WAAY,SAAS5I,GACpBd,KAAKc,QAAUA,GAOhBuM,YAAa,SAAS/L,GACrBtB,KAAKkK,SACLlK,KAAKkM,eAAY9L,EACjBJ,KAAKM,EAAE,YAAYO,KAAKb,KAAK4M,gBAAgB,CAC5CU,YAAahM,MAOfiM,UAAW,WACVvN,KAAKkK,SACLlK,KAAKkM,eAAY9L,EACjBJ,KAAKM,EAAE,YAAYO,KAAKb,KAAK6M,kBAQ9BW,aAAc,SAASC,EAAUf,GAChC1M,KAAKkM,UAAYuB,EAASC,SAC1B1N,KAAKkK,OAAO,CACXwD,SAAUD,EAASC,WAGpB,IAAInB,EAAO,IAAIzC,EAAiB,CAC/BxB,WAAYmF,EAASC,WAEtBnB,EAAKrC,SACLlK,KAAKM,EAAE,YAAYO,KAAKb,KAAKiN,iBAAiB,CAC7CS,SAAUD,EAASC,SACnBhB,WAAYA,EACZiB,mBAAoBF,EAASE,mBAC7BC,eAAgB/K,GAAAA,YAAe,kBAC/BgL,cAAehL,GAAAA,cACfiL,mBAAoBjL,GAAAA,YAAe,qCAEpC7C,KAAKM,EAAE,0BAA0BO,KAAK0L,EAAKhK,MAO5C2H,OAAQ,SAAShH,GAChB,IAAI6K,EAAY/N,KAAKM,EAAE,wBAAwBqM,MAM/C,OALA3M,KAAKuC,IAAI1B,KAAKb,KAAK+M,gBAAgB7J,IAGnClD,KAAKM,EAAE,wBAAwBqM,IAAIoB,GACnC/N,KAAKM,EAAE,wBAAwB0N,QACxBhO,QAYHiO,EAAe,SAASnN,GAC7Bd,KAAK0J,WAAW5I,IAGjBmN,EAAarF,UAAY,CAExBrG,SAAKnC,EAGL8N,eAAW9N,EAGX+N,WAAO/N,EAGPgO,sBAAkBhO,EAQlBsJ,WAAY,SAAS5I,GACpBd,KAAKuC,IAAMzB,EAAQuN,GACnBrO,KAAKkO,UAAYpN,EAAQ2B,QAEzBzC,KAAKmO,MAAQ,IAAItC,EAAiB,CACjCwC,GAAIrO,KAAKuC,MAEVvC,KAAKmO,MAAM1D,GAAG,UAAU,SAASiC,GAChC1M,KAAKsO,cAAc5B,KACjB1M,MAEH6C,GAAAA,aAAgB7C,KAAKkO,UAAWlO,KAAKuC,IAAK,WACzCvC,KAAKuO,mBAAkB,IACtBnL,KAAKpD,OAAO,GACdA,KAAKuC,IAAIkI,GAAG,aAAc,WACzBzK,KAAKuO,mBAAkB,IACtBnL,KAAKpD,QAQRuO,kBAAmB,SAASlN,GAC3B,OAAIA,EACIrB,KAAKsO,iBAEZtO,KAAKuC,IAAI1B,KAAK,IACP2N,QAAQC,YASjBC,aAAc,SAAShC,GACtB,IAAI1J,EAAMH,GAAAA,YAAe,0BACzB,OAAO2L,QAAQC,QAAQnO,IAAAA,KAAO0C,EAAK,CAClCL,OAAQ,OACRO,KAAM,CACLyL,OAAQjC,OASX4B,cAAe,SAAS5B,GACvB,IAAIvC,EAAOnK,KAaX,OAXKmK,EAAKiE,mBACTjE,EAAKiE,iBAAmBjE,EAAKuE,aAAahC,IAGvCvM,EAAAA,QAAAA,YAAcuM,IAA8B,KAAfA,EAChCvC,EAAKgE,MAAMd,YAAYlL,EAAE,OAAQ,4BAEjCgI,EAAKgE,MAAMd,YAAYlL,EAAE,OAAQ,uBAAwB,CACxDyM,KAAMlC,KAGDvC,EAAKiE,iBAAiB/H,MAAK,SAASnD,GAE1CA,EAAKwK,SAAW,IAAI7D,EAAkB3G,EAAKwK,UAE3CvD,EAAKgE,MAAMX,aAAatK,EAAMwJ,MAC5B,SAASD,GACXtC,EAAKgE,MAAMZ,YACX9M,QAAQC,MAAM,2CAA4C+L,MACxDpG,MAAK,kBAGA8D,EAAKiE,oBACVS,MAAMpO,QAAQC,MAAM0C,KAAKpD,SAI9B,QCtdM8O,EAASC,SACbC,qBAAqB,QAAQ,GAC7BC,aAAa,aACTC,EAAcH,SAClBC,qBAAqB,QAAQ,GAC7BC,aAAa,yBAEFE,OAAyB/O,IAAX0O,GAAuBA,wRCDlD,GAICM,OCXoBA,GAKpB,0GAAc,SACb3O,QAAQyF,KAAK,iTC2Bf,ICxB4BmJ,EAAQC,EAC/BC,EDuBCC,EAAU,CAEfC,eAAgB,GAChBC,WAAY,GAEZC,uBAAwB,EACxBC,qBAAsB,EACtBC,qBAAsB,EACtBC,0BAA2B,EAC3BC,uBAAwB,EAGxBC,eAAgB,EAShBC,MAAO,SAAS3O,EAAM4O,EAAOnQ,EAAUoQ,GACtCnQ,KAAKoQ,QACJ9O,EACA4O,EACA,QACAV,EAAQa,UACRtQ,EACAoQ,IAUFG,KAAM,SAAShP,EAAM4O,EAAOnQ,EAAUoQ,GACrCnQ,KAAKoQ,QAAQ9O,EAAM4O,EAAO,OAAQV,EAAQa,UAAWtQ,EAAUoQ,IAWhEI,QAAS,SAASjP,EAAM4O,EAAOnQ,EAAUoQ,GACxC,OAAOnQ,KAAKoQ,QACX9O,EACA4O,EACA,SACAV,EAAQC,eACR1P,EACAoQ,IAYFK,mBAAoB,SAASlP,EAAM4O,EAAOO,EAAS1Q,EAAUoQ,GAC5D,OAAOnQ,KAAKoQ,QACX9O,EACA4O,EACA,OACAO,EACA1Q,OACUK,IAAV+P,GAA6BA,IAW/BO,YAAa,SAASpP,EAAM4O,EAAOnQ,EAAUoQ,GAC5C,OAAOnQ,KAAKoQ,QACX9O,EACA4O,EACA,SACAV,EAAQC,eACR1P,EACAoQ,GACA,IAaFQ,OAAQ,SAASrP,EAAM4O,EAAOnQ,EAAUoQ,EAAOS,EAAMC,GACpD,OAAOvQ,IAAAA,KAAON,KAAK8Q,uBAAuBzK,MAAK,SAAS0K,GACvD,IAAIC,EAAa,aAAexB,EAAQQ,eAAiB,WACrDiB,EAAW,IAAMD,EACjBE,EAAOH,EAAMI,WAAW,CAC3BC,YAAaJ,EACbd,MAAOA,EACPE,QAAS9O,EACTwB,KAAM,WAEHuO,EAAQ/Q,GAAAA,CAAE,YACd+Q,EAAMC,KAAK,OAAQT,EAAW,WAAa,QAAQS,KAAK,KAAMN,EAAa,UAAUM,KAAK,cAAeV,GACzG,IAAIW,EAAQjR,GAAAA,CAAE,YAAYgR,KAAK,MAAON,EAAa,UAAU1P,KAAKsP,EAAO,MACzEM,EAAK1G,OAAO+G,GACZL,EAAK1G,OAAO6G,QACEjR,IAAV+P,IACHA,GAAQ,GAET7P,GAAAA,CAAE,QAAQkK,OAAO0G,QAKA9Q,IAAbL,IACHA,EAAWI,EAAAA,QAAAA,KAAOJ,IAGnB,IAAIyR,EAAa,CAAC,CACjBlQ,KAAMa,EAAE,OAAQ,MAChBsP,MAAO,gBACWrR,IAAbL,GAEHA,GAAS,EAAOsR,EAAM1E,OAEvBrM,GAAAA,CAAE2Q,GAAUS,SAAS,WAEpB,CACFpQ,KAAMa,EAAE,OAAQ,OAChBsP,MAAO,gBACWrR,IAAbL,GAEHA,GAAS,EAAMsR,EAAM1E,OAEtBrM,GAAAA,CAAE2Q,GAAUS,SAAS,UAEtBC,eAAe,IAGhBrR,GAAAA,CAAE2Q,GAAUS,SAAS,CACpBE,eAAe,EACfzB,MAAOA,EACPM,QAASe,EACTK,MAAO,gBAEWzR,IAAbL,GAEHA,GAAS,EAAOsR,EAAM1E,UAIzB0E,EAAMrD,QACNwB,EAAQQ,qBAsBV8B,WAAY,SAAS5B,EAAOnQ,EAAUgS,EAAaC,EAAgB7B,EAAOrN,EAAMmP,EAAMnR,GACrF,IAAIqJ,EAAOnK,KAKX,GAHAA,KAAK8R,WAAWI,UAAY,OAC5BlS,KAAK8R,WAAWK,UAAY,OAExBnS,KAAK8R,WAAWzF,QAApB,MAIajM,IAAT0C,IACHA,EAAO9C,KAAK2P,wBAGb,IAAIyC,EAAYjQ,EAAE,OAAQ,oBACtBkQ,EAAUlQ,EAAE,QAAS,cACrBW,IAAS9C,KAAK6P,sBAAwB/M,IAAS9C,KAAK4P,sBAAwB9M,IAAS9C,KAAK8P,4BAC7FsC,EAAYjQ,EAAE,OAAQ,+BAGvBnC,KAAK8R,WAAWzF,SAAU,EAC1BrM,KAAK8R,WAAWQ,YAAeC,EAAAA,SAAeA,EAAAA,QAAAA,WAAyBA,EAAAA,QAAAA,UAAAA,SAAkCA,EAAAA,QAAAA,UAAAA,SAAAA,YAA6C1P,GAAAA,MAAAA,YAEtJ7C,KAAKwS,SAAW,KAChBP,EAAOA,GAAQ,GACfnR,EAAU2F,OAAOC,OAAO,CACvB+L,uBAAuB,GACrB3R,GAEHR,IAAAA,KAAON,KAAK0S,0BAA0BrM,MAAK,SAAS0K,GACnD5G,EAAK2H,WAAWzF,SAAU,EAEtBlC,EAAKwI,aACRxI,EAAKwI,YAAYjB,SAAS,SAGvBM,MAAAA,IACHA,EAAiB,IAEc,iBAApBA,IACXA,EAAiB,CAACA,IAGnB7H,EAAKwI,YAAc5B,EAAMI,WAAW,CACnCC,YAbgB,+BAchBlB,MAAOA,EACP0C,UAAWR,EACXS,QAASR,EACTS,QAAS3Q,EAAE,OAAQ,QACnB4Q,QAAS5Q,EAAE,OAAQ,QACnB6Q,YAAa7Q,EAAE,OAAQ,cACrBe,KAAK,OAAQ+O,GAAM/O,KAAK,cAAe6O,GAAa7O,KAAK,WAAY8O,GAAgB9O,KAAK,wBAAyBpC,EAAQ2R,4BAEhHrS,IAAV+P,IACHA,GAAQ,QAEW/P,IAAhB2R,IACHA,GAAc,GAGf5H,EAAKwI,YAAY5Q,KAAK,uBAAuBkR,SAC7C9I,EAAKwI,YAAY5Q,KAAK,sBAAsBS,YAAY,aAExDlC,GAAAA,CAAE,QAAQkK,OAAOL,EAAKwI,aAEtBxI,EAAK+I,cAAgB5S,GAAAA,CAAE,6BACvB6J,EAAK+I,cAAczI,GAAG,SAAUtK,EAAAA,QAAAA,KAAOgK,EAAKgJ,kBAAmBhJ,IAE/DA,EAAKiJ,mBAEL,IAAIC,EAAYlJ,EAAKwI,YAAY5Q,KAAK,kCAClCe,IAASqH,EAAKwF,wBAA2B7O,EAAQ2R,uBACpDY,EAAUpT,OAEXoT,EAAU5I,GAAG,SAAS,WACrBN,EAAKwI,YAAYjB,SAAS,oBAAoB,WAC7C4B,MAAMC,2BACND,MAAME,iBACNH,EAAU5B,cAGZ4B,EAAU5I,GAAG,QAAQ,WACpBN,EAAKwI,YAAYjB,SAAS,yBAG3B7O,GAAAA,aAAgBwQ,EAAWlJ,EAAKwI,YAAY5Q,KAAK,UAAU,WAC1D0R,EAAOhI,QAAQ,QACfgI,EAAOzF,QACP7D,EAAKwI,YAAYjB,SAAS,oBAAoB,WAC7C4B,MAAMC,2BACND,MAAME,iBACNrJ,EAAKwI,YAAYe,YAElB,IAAIC,EAAUF,EAAO9G,MACjBiH,EAAUD,EAAQE,YAAY,MACjB,IAAbD,IACHA,EAAUD,EAAQ3R,QAEnByR,EAAOK,YAAY,EAAGF,MAEvB,IAAIG,EAAQ5J,EAAKwI,YAAY5Q,KAAK,iBAC9B0R,EAASM,EAAMhS,KAAK,sBACVgS,EAAMhS,KAAK,wBACjB0I,GAAG,SAAS,SAAS6I,GAC5BA,EAAMC,2BACND,EAAME,iBACNO,EAAML,YA0DPK,EAAMtJ,GAAG,UAAU,SAAS6I,GAI3B,GAHAA,EAAMU,kBACNV,EAAME,iBA9BU,WAChB,IAAIS,EAAWR,EAAO9G,MACtB,IACC,GAnBoB,SAAUiE,GAC/B,IAAIsD,EAActD,EAAKuD,OACvB,GAAoB,MAAhBD,GAAuC,OAAhBA,EAE1B,MAAM/R,EAAE,QAAS,oCAAqC,CAACyO,KAAMA,IACvD,GAA2B,IAAvBsD,EAAYlS,OACtB,MAAMG,EAAE,QAAS,8BACX,IAAkC,IAA9B+R,EAAY5O,QAAQ,KAC9B,MAAMnD,EAAE,QAAS,0CACX,GAAO+R,EAAYE,MAAMvR,GAAAA,OAAAA,uBAC/B,MAAMV,EAAE,QAAS,sCAAuC,CAACyO,KAAMA,IAGhE,OAAO,EAMDyD,CAAgBJ,GAEd,IAAI9J,EAAKqI,SAASzQ,MAAK,SAASuS,GACtC,OAAOA,EAAK1D,OAAS5Q,OACnBiU,GACF,MAAM9R,EAAE,QAAS,2BAA4B,CAAEwR,QAASM,QAAY7T,EAAW,CAC9EmU,QAAQ,IAGT,OAAO,GAEP,MAAO7T,GACR+S,EAAOnC,KAAK,QAAS5Q,GACrB+S,EAAOhI,QAAQ,CACdC,UAAW,QACXjJ,QAAS,SACT,UAAa,mBAEdgR,EAAOhI,QAAQ,aACfgI,EAAOhI,QAAQ,QACfgI,EAAO/Q,SAAS,SAEjB,OAAO,EAOH8R,GAAc,CACjB,IAAIC,EAAUhB,EAAO9G,MACrBxC,EAAK2H,WAAWQ,YAAYoC,gBAAgBvK,EAAKwI,YAAYzP,KAAK,QAAU,IAAMuR,GAASE,QAAO,SAAU3P,GAC3GmF,EAAKyK,gBAAgBzK,EAAKwI,YAAYzP,KAAK,QAAU,IAAMuR,MAE5D5R,GAAAA,YACAsH,EAAKwI,YAAYjB,SAAS,sBAC1BvH,EAAKwI,YAAYlB,QACjBgC,EAAO9G,IAAI0F,OAGboB,EAAOoB,UAAS,SAASvB,GACF,KAAlBA,EAAMwB,SAAkC,KAAhBxB,EAAMyB,QACjCzB,EAAMC,2BACND,EAAME,iBACNO,EAAML,aAGRD,EAAOhJ,GAAG,SAAS,SAAS6I,GAC3BG,EAAOhI,QAAQ,WAGhBtB,EAAKwI,YAAYqC,OAAM,WACtB7K,EAAK8K,gBAAkB9K,EAAKwI,YAAY5Q,KAAK,sBAC7CoI,EAAK+K,UAAY/K,EAAKwI,YAAY5Q,KAAK,mBACvCoI,EAAKgL,mBAAqBhL,EAAKwI,YAAY5Q,KAAK,uBAChDoI,EAAKiL,SAAWjL,EAAKwI,YAAY5Q,KAAK,YACtCoI,EAAKiL,SAAS3K,GAAG,QAAS,uBAAwBN,GAAM,SAASmJ,GAChEnJ,EAAKkL,sBAAsB/B,EAAOxQ,MAEnCqH,EAAK+K,UAAUzK,GAAG,QAAS,MAAM,SAAS6I,GACzCnJ,EAAKmL,mBAAmBhC,EAAOhT,GAAAA,CAAEN,MAAO8C,MAEzCqH,EAAK8K,gBAAgBxK,GAAG,QAAS,KAAK,SAAS6I,GAC9C,IAAIiC,EAAMpL,EAAKwI,YAAYzP,KAAK,QAChCiH,EAAK2H,WAAWI,UAAY5R,GAAAA,CAAEgT,EAAMkC,eAAetS,KAAK,QACxDiH,EAAK2H,WAAWK,UAA0C,QAA9BhI,EAAK2H,WAAWK,UAAsB,OAAS,MAC3EhI,EAAKyK,gBAAgBW,MAEtBpL,EAAKyK,gBAAgB3C,MAItB,IAAIwD,EAAiB,SAASC,GAC7B,QAAiBtV,IAAbL,EAAwB,CAC3B,IAAI4V,EACJ,IAAoB,IAAhB5D,EACH4D,EAAW,GACXxL,EAAK+K,UAAUnT,KAAK,kCAAkC1B,MAAK,SAASuV,EAAOC,GAC1EF,EAAShL,KAAKR,EAAKwI,YAAYzP,KAAK,QAAU,IAAM5C,GAAAA,CAAEuV,GAAS3S,KAAK,qBAE/D,CACNyS,EAAWxL,EAAKwI,YAAYzP,KAAK,QACjC,IAAI4S,EAAe3L,EAAK+K,UAAUnT,KAAK,kCAAkCmB,KAAK,aAC1E4S,IACHH,GAAY,IAAMG,GAGpB/V,EAAS4V,EAAUD,GACnBvL,EAAKwI,YAAYjB,SAAS,WAgBxBF,EAAa,GACb1O,IAAS0M,EAAQG,uBACpB6B,EAAW7G,KAAK,CACfrJ,KAAMa,EAAE,OAAQ,UAChBsP,MAhBmB,WACpBgE,EAAejG,EAAQG,yBAgBtBgC,eAAe,IAEN7O,IAAS0M,EAAQO,uBAC3BjP,EAAQ2P,QAAQrG,SAAQ,SAAS2L,GAChCvE,EAAW7G,KAAK,CACfrJ,KAAMyU,EAAOzU,KACbmQ,MAAO,WACNgE,EAAeM,EAAOjT,OAEvB6O,cAAeoE,EAAOpE,oBAIpB7O,IAAS0M,EAAQK,sBAAwB/M,IAAS0M,EAAQM,2BAC7D0B,EAAW7G,KAAK,CACfrJ,KAAMa,EAAE,OAAQ,QAChBsP,MA7BgB,WAClBgE,EAAejG,EAAQK,uBA6BrB8B,eAAe,IAGb7O,IAAS0M,EAAQI,sBAAwB9M,IAAS0M,EAAQM,2BAC7D0B,EAAW7G,KAAK,CACfrJ,KAAMa,EAAE,OAAQ,QAChBsP,MAhCgB,WAClBgE,EAAejG,EAAQI,uBAgCrB+B,eAAe,KAKlBxH,EAAKwI,YAAYjB,SAAS,CACzBE,eAAe,EAEfoE,MAAO,IACPC,OAAQ,IACR9F,MAAOA,EACPM,QAASe,EACT0E,MAAO,CACNzF,QAAS,SAEVoB,MAAO,WACN,IACCvR,GAAAA,CAAEN,MAAM0R,SAAS,WAAWuB,SAC3B,MAAOxG,IAETtC,EAAKwI,YAAc,QAMrB,IACIwD,EADchM,EAAKwI,YAAYyD,QAAQ,cACLrU,KAAK,aACgC,IAAvEoI,EAAKwI,YAAYzP,KAAK,YAAYoC,QAAQ,yBAAkC6E,EAAKwI,YAAYzP,KAAK,yBACrGiT,EAAoBE,KAAK,YAAY,GAErCF,EAAoBE,KAAK,YAAY,MAGrCC,MAAK,SAAStR,EAAQtE,GAGtByJ,EAAK2H,WAAWzF,SAAU,EACX,IAAXrH,GACHiL,MAAM9N,EAAE,OAAQ,8CAA+C,CAAEzB,MAAOA,UAQ5E0P,QAAS,SAASmG,EAASrG,EAAOsG,EAAY/F,EAAS1Q,EAAUoQ,EAAOsG,GACvE,OAAOnW,IAAAA,KAAON,KAAK8Q,uBAAuBzK,MAAK,SAAS0K,GACvD,IAAIC,EAAa,aAAexB,EAAQQ,eAAiB,WACrDiB,EAAW,IAAMD,EACjBE,EAAOH,EAAMI,WAAW,CAC3BC,YAAaJ,EACbd,MAAOA,EACPE,QAASmG,EACTzT,KAAM0T,GACJC,EAAY,CAAEC,eAAgB,IAAO,SAC1BtW,IAAV+P,IACHA,GAAQ,GAET7P,GAAAA,CAAE,QAAQkK,OAAO0G,GACjB,IAAIM,EAAa,GACjB,OAAQf,GACR,KAAKjB,EAAQC,eACZ+B,EAAa,CAAC,CACblQ,KAAMa,EAAE,OAAQ,MAChBsP,MAAO,gBACWrR,IAAbL,GACHA,GAAS,GAEVO,GAAAA,CAAE2Q,GAAUS,SAAS,WAGvB,CACCpQ,KAAMa,EAAE,OAAQ,OAChBsP,MAAO,gBACWrR,IAAbL,GACHA,GAAS,GAEVO,GAAAA,CAAE2Q,GAAUS,SAAS,UAEtBC,eAAe,IAEhB,MACD,KAAKnC,EAAQa,UAOZmB,EAAW,GAAK,CACflQ,KAAMa,EAAE,OAAQ,MAChBsP,MARoB,WACpBnR,GAAAA,CAAE2Q,GAAUS,SAAS,cACJtR,IAAbL,GACHA,KAMD4R,eAAe,GAEhB,MACD,QACyB,WAApB,EAAOlB,IACFA,EAAQ3N,OACV0M,EAAQC,iBACZ+B,EAAa,CAAC,CACblQ,KAAMmP,EAAQkG,QAAUxU,EAAE,OAAQ,MAClCsP,MAAO,gBACWrR,IAAbL,GACHA,GAAS,GAEVO,GAAAA,CAAE2Q,GAAUS,SAAS,WAGtB,CACCpQ,KAAMmP,EAAQF,SAAWpO,EAAE,OAAQ,OACnCsP,MAAO,gBACWrR,IAAbL,GACHA,GAAS,GAEVO,GAAAA,CAAE2Q,GAAUS,SAAS,UAEtBC,eAAe,EACfiF,QAASnG,EAAQoG,kBAQvBvW,GAAAA,CAAE2Q,GAAUS,SAAS,CACpBE,eAAe,EACfkF,cAAe,WAAQ/W,GAAYA,GAAS,IAC5CoQ,MAAOA,EACPM,QAASe,IAEVhC,EAAQQ,oBAEPsG,MAAK,SAAStR,EAAQtE,GAGP,IAAXsE,EACHiL,MAAMC,EAAQ,KAAOqG,GAErBtG,MAAM9N,EAAE,OAAQ,0CAA2C,CAAEzB,MAAOA,SAIxEqW,kBAAkB,EASlBC,WAAY,SAAS9T,EAAM+T,EAAUC,EAAaC,GACjD,IAAIhN,EAAOnK,KACPoX,EAAiB,IAAI9W,IAAAA,UAkErB+W,EAAkB,SAASC,EAAQC,EAAGC,EAAGC,EAAIC,GAChDD,EAAKE,KAAKC,MAAMH,GAChBC,EAAKC,KAAKC,MAAMF,GAUhB,IATA,IAAIG,EAAMP,EAAOQ,WAAW,MAAMC,aAAa,EAAG,EAAGR,EAAGC,GACpDQ,EAAOV,EAAOQ,WAAW,MAAMC,aAAa,EAAG,EAAGN,EAAIC,GACtDxU,EAAO2U,EAAI3U,KACX+U,EAAQD,EAAK9U,KACbgV,EAAUX,EAAIE,EACdU,EAAUX,EAAIE,EACdU,EAAeT,KAAKU,KAAKH,EAAU,GACnCI,EAAeX,KAAKU,KAAKF,EAAU,GAE9BI,EAAI,EAAGA,EAAIb,EAAIa,IACvB,IAAK,IAAIC,EAAI,EAAGA,EAAIf,EAAIe,IAAK,CAU5B,IATA,IAAIC,EAAoB,GAAdD,EAAID,EAAId,GACdiB,EAAS,EACTC,EAAU,EACVC,EAAgB,EAChBC,EAAO,EACPC,EAAO,EACPC,EAAO,EACPC,EAAO,EACPC,GAAYV,EAAI,IAAOJ,EAClBe,EAAKvB,KAAKwB,MAAMZ,EAAIJ,GAAUe,GAAMX,EAAI,GAAKJ,EAASe,IAI9D,IAHA,IAAIE,EAAKzB,KAAK0B,IAAIJ,GAAYC,EAAK,KAAQZ,EACvCgB,GAAYd,EAAI,IAAON,EACvBqB,EAAKH,EAAKA,EACLI,EAAK7B,KAAKwB,MAAMX,EAAIN,GAAUsB,GAAMhB,EAAI,GAAKN,EAASsB,IAAM,CACpE,IAAIC,EAAK9B,KAAK0B,IAAIC,GAAYE,EAAK,KAAQpB,EACvCsB,EAAI/B,KAAKgC,KAAKJ,EAAKE,EAAKA,GACxBC,IAAM,GAAKA,GAAK,IAEnBhB,EAAS,EAAIgB,EAAIA,EAAIA,EAAI,EAAIA,EAAIA,EAAI,GACxB,IAGZV,GAAQN,EAASxV,EAAU,GAF3BuW,EAAK,GAAKD,EAAKN,EAAK3B,KAGpBqB,GAAiBF,EAEbxV,EAAKuW,EAAK,GAAK,MAAOf,EAASA,EAASxV,EAAKuW,EAAK,GAAK,KAC3DZ,GAAQH,EAASxV,EAAKuW,GACtBX,GAAQJ,EAASxV,EAAKuW,EAAK,GAC3BV,GAAQL,EAASxV,EAAKuW,EAAK,GAC3Bd,GAAWD,GAKfT,EAAMQ,GAAMI,EAAOF,EACnBV,EAAMQ,EAAK,GAAKK,EAAOH,EACvBV,EAAMQ,EAAK,GAAKM,EAAOJ,EACvBV,EAAMQ,EAAK,GAAKO,EAAOJ,EAGzBtB,EAAOQ,WAAW,MAAM8B,UAAU,EAAG,EAAGjC,KAAKkC,IAAItC,EAAGE,GAAKE,KAAKkC,IAAIrC,EAAGE,IACrEJ,EAAOtB,MAAQyB,EACfH,EAAOrB,OAASyB,EAChBJ,EAAOQ,WAAW,MAAMgC,aAAa9B,EAAM,EAAG,IAG3C+B,EAAc,SAASC,EAAY/C,EAAUC,GAEhD,IAAI+C,EAAYD,EAAWjY,KAAK,aAAamY,QAAQ1X,YAAY,YAAYE,SAAS,YAClFyX,EAAeF,EAAUlY,KAAK,aAC9BqY,EAAkBH,EAAUlY,KAAK,gBAErCkY,EAAU/W,KAAK,OAAQA,GAEvB+W,EAAUlY,KAAK,aAAaT,KAAK2V,EAASrG,MAC1CuJ,EAAapY,KAAK,SAAST,KAAKuB,GAAAA,KAAAA,cAAsBoU,EAASoD,OAC/DF,EAAapY,KAAK,UAAUT,KAAKuB,GAAAA,KAAAA,WAAmBoU,EAASqD,QAEzDpD,EAAYmD,MAAQnD,EAAYqD,eACnCH,EAAgBrY,KAAK,SAAST,KAAKuB,GAAAA,KAAAA,cAAsBqU,EAAYmD,OACrED,EAAgBrY,KAAK,UAAUT,KAAKuB,GAAAA,KAAAA,WAAmBqU,EAAYqD,gBAEpE,IAAItI,EAAOgF,EAASuD,UAAY,IAAMvD,EAASrG,KAC3C6J,EAAU,CACbnG,KAAMrC,EACNyI,EAAG,GACHC,EAAG,GACHC,EAAG3D,EAAS4D,KACZC,UAAW,GAERC,EAAcC,MAAMC,mBAAmBR,GAE3CM,EAAcA,EAAYG,QAAQ,KAAM,OACxCf,EAAapY,KAAK,SAASoZ,IAAI,CAAE,mBAAoB,QAAUJ,EAAc,OAvJtD,SAASzG,GAChC,IAAI7U,EAAW,IAAIa,IAAAA,UAEfwC,EAAOwR,EAAKxR,MAAQwR,EAAKxR,KAAKtB,MAAM,KAAK+F,QAC7C,GAAIjE,OAAO8X,YAAuB,UAATtY,EAAkB,CAC1C,IAAIuY,EAAS,IAAID,WACjBC,EAAOC,OAAS,SAAS7O,GACxB,IAAI8O,EAAO,IAAIC,KAAK,CAAC/O,EAAEgP,OAAO/W,SAC9BpB,OAAOoY,IAAMpY,OAAOoY,KAAOpY,OAAOqY,UAClC,IAAIC,EAActY,OAAOoY,IAAIG,gBAAgBN,GACzCO,EAAQ,IAAIC,MAChBD,EAAME,IAAMJ,EACZE,EAAMR,OAAS,WACd,IAWgBzD,EAKf6C,EAAOC,EAAON,EAJd/C,EAEAtB,EACAC,EAfGjT,GAWY6U,EAXDiE,EAYdxE,EAASvI,SAASkN,cAAc,UAEhCjG,EAAQ6B,EAAI7B,MACZC,EAAS4B,EAAI5B,OAIbD,EAAQC,GACX0E,EAAI,EACJD,GAAK1E,EAAQC,GAAU,IAEvB0E,GAAK1E,EAASD,GAAS,EACvB0E,EAAI,GAELL,EAAO1C,KAAKuE,IAAIlG,EAAOC,GAGvBqB,EAAOtB,MAAQqE,EACf/C,EAAOrB,OAASoE,EACN/C,EAAOQ,WAAW,MACxBqE,UAAUtE,EAAK6C,EAAGC,EAAGN,EAAMA,EAAM,EAAG,EAAGA,EAAMA,GAGjDhD,EAAgBC,EAAQ+C,EAAMA,EAtBb,OAwBV/C,EAAO8E,UAAU,YAAa,KApClC3c,EAASgP,QAAQzL,KAGnBqY,EAAOgB,kBAAkB/H,QAEzB7U,EAAS6c,SAEV,OAAO7c,EAmIP8c,CAAkBrF,GAAa7Q,MAC9B,SAAS4L,GACRmI,EAAgBrY,KAAK,SAASoZ,IAAI,mBAAoB,OAASlJ,EAAO,QACpE,WACFA,EAAOpP,GAAAA,SAAAA,WAAuBqU,EAAYpU,MAC1CsX,EAAgBrY,KAAK,SAASoZ,IAAI,mBAAoB,OAASlJ,EAAO,QAIxE,IAAIuK,EAAaxC,EAAWjY,KAAK,aAAaC,OAC9CmY,EAAapY,KAAK,kBAAkBuP,KAAK,KAAM,qBAAuBkL,GACtEpC,EAAgBrY,KAAK,kBAAkBuP,KAAK,KAAM,wBAA0BkL,GAE5ExC,EAAWxP,OAAOyP,GAId/C,EAAYqD,aAAetD,EAASqD,MACvCF,EAAgBrY,KAAK,UAAUoZ,IAAI,cAAe,QACxCjE,EAAYqD,aAAetD,EAASqD,OAC9CH,EAAapY,KAAK,UAAUoZ,IAAI,cAAe,QAM5CjE,EAAYmD,MAAQnD,EAAYmD,KAAOpD,EAASoD,KACnDD,EAAgBrY,KAAK,SAASoZ,IAAI,cAAe,QACvCjE,EAAYmD,MAAQnD,EAAYmD,KAAOpD,EAASoD,MAC1DF,EAAapY,KAAK,SAASoZ,IAAI,cAAe,QASvB,aAApBlE,EAASjS,SACZmV,EACEzX,SAAS,YACTX,KAAK,0BACLsU,KAAK,WAAW,GAChBA,KAAK,YAAY,GACnB8D,EAAapY,KAAK,YAChBT,KAAKa,EAAE,OAAQ,gBAOf6O,EAAa,+BACbC,EAAW,IAAMD,EACrB,GAAIhR,KAAK+W,iBAAkB,CAG1B,IAAIiD,EAAa1Z,GAAAA,CAAE2Q,EAAW,eAC9B8I,EAAYC,EAAY/C,EAAUC,GAElC,IAAIuF,EAAQnc,GAAAA,CAAE2Q,EAAW,cAAcjP,OACnCkO,EAAQwM,EAAE,OACb,wBACA,yBACAD,EACA,CAAEA,MAAOA,IAEVnc,GAAAA,CAAE2Q,GAAU0L,SAASC,SAAS,oBAAoBtb,KAAK4O,GAGvD5P,GAAAA,CAAEgD,QAAQb,QAAQ,UAClB2U,EAAe3I,eAGfzO,KAAK+W,kBAAmB,EACxBzW,IAAAA,KAAON,KAAK6c,0BAA0BxW,MAAK,SAAS0K,GACnD,IAAIb,EAAQ/N,EAAE,OAAQ,qBAClB+O,EAAOH,EAAMI,WAAW,CAC3BC,YAAaJ,EACbd,MAAOA,EACPpN,KAAM,aAENga,YAAa3a,EAAE,OAAQ,aACvB4a,iBAAkB5a,EAAE,OAAQ,0BAE5B6a,IAAK7a,EAAE,OAAQ,oCACf8a,KAAM9a,EAAE,OAAQ,wFAIjB,GAFA7B,GAAAA,CAAE,QAAQkK,OAAO0G,GAEb+F,GAAYC,EAAa,CAC5B,IAAI8C,EAAa9I,EAAKnP,KAAK,cAC3BgY,EAAYC,EAAY/C,EAAUC,GAGnC,IAAI1F,EAAa,CAAC,CACjBlQ,KAAMa,EAAE,OAAQ,UAChByU,QAAS,SACTnF,MAAO,gBAC6B,IAAxB0F,EAAW+F,UACrB/F,EAAW+F,SAASha,GAErB5C,GAAAA,CAAE2Q,GAAUS,SAAS,WAGvB,CACCpQ,KAAMa,EAAE,OAAQ,YAChByU,QAAS,WACTnF,MAAO,gBAC+B,IAA1B0F,EAAWgG,YACrBhG,EAAWgG,WAAW7c,GAAAA,CAAE2Q,EAAW,eAEpC3Q,GAAAA,CAAE2Q,GAAUS,SAAS,YAIvBpR,GAAAA,CAAE2Q,GAAUS,SAAS,CACpBsE,MAAO,IACPpE,eAAe,EACfzB,OAAO,EACPM,QAASe,EACT4L,YAAa,KACbvL,MAAO,WACN1H,EAAK4M,kBAAmB,EACxB,IACCzW,GAAAA,CAAEN,MAAM0R,SAAS,WAAWuB,SAC3B,MAAOxG,QAMXnM,GAAAA,CAAE2Q,GAAUkK,IAAI,SAAU,QAE1B,IAAIkC,EAAiBnM,EAAKkF,QAAQ,cAAcrU,KAAK,mBAGrD,SAASub,IACR,IAAIC,EAAerM,EAAKnP,KAAK,gCAAgCC,OAC7Dqb,EAAehH,KAAK,WAA6B,IAAjBkH,GAJjCF,EAAehH,KAAK,YAAY,GAQhC/V,GAAAA,CAAE2Q,GAAUlP,KAAK,gBAAgB0I,GAAG,SAAS,WAC1BnK,GAAAA,CAAE2Q,GAAUlP,KAAK,iDACvBsU,KAAK,UAAW/V,GAAAA,CAAEN,MAAMqW,KAAK,eAE1C/V,GAAAA,CAAE2Q,GAAUlP,KAAK,qBAAqB0I,GAAG,SAAS,WAC/BnK,GAAAA,CAAE2Q,GAAUlP,KAAK,6DACvBsU,KAAK,UAAW/V,GAAAA,CAAEN,MAAMqW,KAAK,eAE1C/V,GAAAA,CAAE2Q,GAAUlP,KAAK,cAAc0I,GAAG,QAAS,yCAAyC,WACnF,IAAI+S,EAAYld,GAAAA,CAAEN,MAAM+B,KAAK,0BAC7Byb,EAAUnH,KAAK,WAAYmH,EAAUnH,KAAK,eAE3C/V,GAAAA,CAAE2Q,GAAUlP,KAAK,cAAc0I,GAAG,QAAS,uFAAuF,WACjI,IAAI+S,EAAYld,GAAAA,CAAEN,MAClBwd,EAAUnH,KAAK,WAAYmH,EAAUnH,KAAK,eAI3C/V,GAAAA,CAAE2Q,GAAUxG,GAAG,QAAS,6BAA6B,WACpD,IAAIgS,EAAQnc,GAAAA,CAAE2Q,GAAUlP,KAAK,yDAAyDC,OAClFya,IAAUnc,GAAAA,CAAE2Q,EAAW,cAAcjP,QACxC1B,GAAAA,CAAE2Q,GAAUlP,KAAK,gBAAgBsU,KAAK,WAAW,GACjD/V,GAAAA,CAAE2Q,GAAUlP,KAAK,yBAAyBT,KAAKa,EAAE,OAAQ,oBAC/Csa,EAAQ,GAClBnc,GAAAA,CAAE2Q,GAAUlP,KAAK,gBAAgBsU,KAAK,WAAW,GACjD/V,GAAAA,CAAE2Q,GAAUlP,KAAK,yBAAyBT,KAAKa,EAAE,OAAQ,qBAAsB,CAAEsa,MAAOA,OAExFnc,GAAAA,CAAE2Q,GAAUlP,KAAK,gBAAgBsU,KAAK,WAAW,GACjD/V,GAAAA,CAAE2Q,GAAUlP,KAAK,yBAAyBT,KAAK,KAEhDgc,OAEDhd,GAAAA,CAAE2Q,GAAUxG,GAAG,QAAS,+BAA+B,WACtD,IAAIgS,EAAQnc,GAAAA,CAAE2Q,GAAUlP,KAAK,sDAAsDC,OAC/Eya,IAAUnc,GAAAA,CAAE2Q,EAAW,cAAcjP,QACxC1B,GAAAA,CAAE2Q,GAAUlP,KAAK,qBAAqBsU,KAAK,WAAW,GACtD/V,GAAAA,CAAE2Q,GAAUlP,KAAK,8BAA8BT,KAAKa,EAAE,OAAQ,oBACpDsa,EAAQ,GAClBnc,GAAAA,CAAE2Q,GAAUlP,KAAK,qBAAqBsU,KAAK,WAAW,GACtD/V,GAAAA,CAAE2Q,GAAUlP,KAAK,8BACfT,KAAKa,EAAE,OAAQ,qBAAsB,CAAEsa,MAAOA,OAEhDnc,GAAAA,CAAE2Q,GAAUlP,KAAK,qBAAqBsU,KAAK,WAAW,GACtD/V,GAAAA,CAAE2Q,GAAUlP,KAAK,8BAA8BT,KAAK,KAErDgc,OAGDlG,EAAe3I,aAEd6H,MAAK,WACLc,EAAekF,SACfrM,MAAM9N,EAAE,OAAQ,0CAInB,OAAOiV,EAAeqG,WAGvBrK,iBAAkB,WACjB,IAAIjJ,EAAOnK,KACXM,IAAAA,IAAMuC,GAAAA,YAAe,oCAAoC,SAASsE,GACjEgD,EAAK+I,cAAcvJ,IAAI,GAAG+T,QAAUvW,EAASwW,SAC7CxT,EAAK+I,cAAc0K,KAAK,uBACtBpb,YAAY,6CACZE,SAASyE,EAASwW,SAAW,uBAAyB,wBACxDrd,GAAAA,CAAE,mBAAmBud,YAAY,YAAa1W,EAASwW,cAGzDxK,kBAAmB,WAClB,IAAI9R,EAAOrB,KAAKkT,cAActH,GAAG,YAE7B/I,GAAAA,aACHvC,IAAAA,KAAOuC,GAAAA,YAAe,mCAAoC,CACzDxB,KAAMA,IAGRrB,KAAKkT,cAAc0K,KAAK,uBACtBpb,YAAY,6CACZE,SAASrB,EAAO,uBAAyB,wBAC3Cf,GAAAA,CAAE,mBAAmBud,YAAY,YAAaxc,IAE/CqR,uBAAwB,WACvB,IAAIoL,EAAQxd,IAAAA,WACZ,GAAKN,KAAK+d,oBAWTD,EAAMrP,QAAQzO,KAAK+d,yBAXW,CAC9B,IAAI5T,EAAOnK,KACXM,IAAAA,IAAMuC,GAAAA,SAAY,OAAQ,YAAa,oBAAoB,SAASmb,GACnE7T,EAAK4T,oBAAsBzd,GAAAA,CAAE0d,GAC7B7T,EAAK8T,UAAY9T,EAAK4T,oBAAoBhc,KAAK,kCAAkCmc,SACjFJ,EAAMrP,QAAQtE,EAAK4T,wBAElBzH,MAAK,SAAS6H,EAAOtV,EAAYC,GACjCgV,EAAMxB,OAAO6B,EAAMnZ,OAAQ8D,MAK9B,OAAOgV,EAAML,WAEd3M,oBAAqB,WACpB,IAAIgN,EAAQxd,IAAAA,WACZ,GAAKN,KAAKoe,iBAUTN,EAAMrP,QAAQzO,KAAKoe,sBAVQ,CAC3B,IAAIjU,EAAOnK,KACXM,IAAAA,IAAMuC,GAAAA,SAAY,OAAQ,YAAa,iBAAiB,SAASmb,GAChE7T,EAAKiU,iBAAmB9d,GAAAA,CAAE0d,GAC1BF,EAAMrP,QAAQtE,EAAKiU,qBAElB9H,MAAK,SAAS6H,EAAOtV,EAAYC,GACjCgV,EAAMxB,OAAO6B,EAAMnZ,OAAQ8D,MAK9B,OAAOgV,EAAML,WAEdZ,uBAAwB,WACvB,IAAIiB,EAAQxd,IAAAA,WACZ,GAAKN,KAAKqe,oBAUTP,EAAMrP,QAAQzO,KAAKqe,yBAVW,CAC9B,IAAIlU,EAAOnK,KACXM,IAAAA,IAAMuC,GAAAA,SAAY,QAAS,YAAa,oBAAoB,SAASmb,GACpE7T,EAAKkU,oBAAsB/d,GAAAA,CAAE0d,GAC7BF,EAAMrP,QAAQtE,EAAKkU,wBAElB/H,MAAK,WACLwH,EAAMxB,YAKT,OAAOwB,EAAML,WAEda,aAAc,SAAS/I,EAAKgJ,GAK3B,MAJ0B,iBAAdA,IACXA,EAAW,CAACA,IAGNje,IAAAA,QACNuC,GAAAA,SAAY,QAAS,OAAQ,YAC7B,CACC0S,IAAKA,EACLiJ,UAAW/V,KAAKC,UAAU6V,MAQ7B3J,gBAAiB,SAASW,GACzB,IAAIpL,EAAOnK,KACXA,KAAKkV,UAAUuJ,QACfze,KAAK2S,YAAY5Q,KAAK,iBAAiB9B,OACvCD,KAAKmV,mBAAmBzS,SAAS,gBACjC1C,KAAK2S,YAAYzP,KAAK,OAAQqS,GAC9B,IAAI5G,EAAS3O,KAAK2S,YAAYzP,KAAK,YACX,iBAAZyL,IACXA,EAAS,CAACA,IAEXxE,EAAK8K,gBAAgBlT,KAAK,mBAAmBW,SAAS,UAAUF,YAAY,mBAAmBA,YAAY,mBAC3G2H,EAAK8K,gBAAgBlT,KAAK,cAAgBoI,EAAK2H,WAAWI,UAAY,qBAAqB1P,YAAY,UACrE,QAA9B2H,EAAK2H,WAAWK,UACnBhI,EAAK8K,gBAAgBlT,KAAK,cAAgBoI,EAAK2H,WAAWI,UAAY,qBAAqBxP,SAAS,mBAEpGyH,EAAK8K,gBAAgBlT,KAAK,cAAgBoI,EAAK2H,WAAWI,UAAY,qBAAqBxP,SAAS,mBAErGyH,EAAK2H,WAAWQ,YAAYoM,kBAAkBnJ,GAAKlP,MAAK,SAASrB,EAAQ2Z,GACxExU,EAAKqI,SAAWmM,EACZhQ,GAAUA,EAAO3M,OAAS,IAA8B,IAAzB2M,EAAOrJ,QAAQ,OACjDqZ,EAAQA,EAAMhQ,QAAO,SAAS2F,GAC7B,MAAqB,QAAdA,EAAKxR,OAAqD,IAAnC6L,EAAOrJ,QAAQgP,EAAKsK,cAMpD,IAAMC,EAAkB9P,SAAS+P,eAAe,mBACT,OAApBD,GAAsD,MAA1BA,EAAgB/a,QAE9D6a,EAAQA,EAAMhQ,QAAO,SAAS2F,GAC7B,OAAQA,EAAK1D,KAAKmO,WAAW,SAI/B,IAAIC,EAAc,CACjBpO,KAAM,SAASqO,EAAWC,GACzB,MAAuB,QAAnBD,EAAUnc,MAAqC,QAAnBoc,EAAUpc,MACjC,EAEc,QAAnBmc,EAAUnc,MAAqC,QAAnBoc,EAAUpc,KAClC,EAEDD,GAAAA,KAAAA,mBAA2Boc,EAAUrO,KAAMsO,EAAUtO,OAE7DyJ,KAAM,SAAS4E,EAAWC,GACzB,OAAOD,EAAU5E,KAAO6E,EAAU7E,MAEnCC,MAAO,SAAS2E,EAAWC,GAC1B,OAAOD,EAAU3E,MAAQ4E,EAAU5E,QAGjC6E,EAAaH,EAAY7U,EAAK2H,WAAWI,YAAc8M,EAAYpO,KACvE+N,EAAQA,EAAMS,MAAK,SAASC,EAAOC,GAClC,IAAIC,EAAa,SAASC,GACzB,OAAOA,EAASC,MAAQD,EAASC,KAAKna,QAAQzC,GAAAA,eAAoB,GAGnE,OAAI0c,EAAWF,KAAWE,EAAWD,IAC5B,GACGC,EAAWF,IAAUE,EAAWD,GACpC,EAG6B,QAA9BnV,EAAK2H,WAAWK,UAAsBgN,EAAWE,EAAOC,IAAUH,EAAWE,EAAOC,MAG5FnV,EAAKuV,YAEgB,IAAjBf,EAAM3c,QACTmI,EAAKwI,YAAY5Q,KAAK,iBAAiBV,OACvC8I,EAAK8K,gBAAgBhV,SAErBkK,EAAKwI,YAAY5Q,KAAK,iBAAiB9B,OACvCkK,EAAK8K,gBAAgB5T,QAGtB8I,EAAK+K,UAAUuJ,QAEfne,IAAAA,KAAOqe,GAAO,SAASgB,EAAKC,GAE3B,IAAIC,EAAYC,EAWhB,GAZAF,EAAMG,KAAOld,GAAAA,SAAAA,WAAuB+c,EAAMhB,eAEd,IAAhBgB,EAAMvF,MAAyBuF,EAAMvF,MAAQ,GACxDwF,EAAahd,GAAAA,KAAAA,cAAsBmd,SAASJ,EAAMvF,KAAM,KAAK,GAC7DyF,EAAYnI,KAAKC,MAAM,IAAMD,KAAKsI,IAAKL,EAAMvF,KAAN,QAA6B,MAEpEwF,EAAa1d,EAAE,QAAS,WACxB2d,EAAY,IAKTF,EAAMhP,KAAK5O,QAAU,GAExB,IAAIR,EAAQmW,KAAKuE,IAAIvE,KAAKwB,MAAMyG,EAAMhP,KAAK5O,OAAS,GAAI,IACpDke,EAAYN,EAAMhP,KAAKrL,OAAO,EAAGqa,EAAMhP,KAAK5O,OAASR,GACrD2e,EAAYP,EAAMhP,KAAKrL,OAAOqa,EAAMhP,KAAK5O,OAASR,QAElD0e,EAAYN,EAAMhP,KAClBuP,EAAY,GAGjB,IAAIjgB,EAAOiK,EAAK8T,UAAU9M,WAAW,CACpCrO,KAAM8c,EAAM9c,KACZyS,IAAKA,EACLtB,SAAU2L,EAAMhP,KAChBsP,UAAWA,EACXC,UAAWA,EACXC,KAAMvd,GAAAA,KAAAA,qBAA6B+c,EAAMtF,OACzCD,KAAMwF,EACNC,UAAWA,EACXC,KAAMH,EAAMG,OAEb,GAAmB,SAAfH,EAAM9c,KAAiB,CAC1B,IAAI2X,EAAU,CACbnG,KAAMiB,EAAM,IAAMqK,EAAMhP,KACxB8J,EAAG,IACHC,EAAG,KAEA9C,EAAM,IAAIkE,MACVsE,EAAaxd,GAAAA,YAAe,sBAAwBvC,IAAAA,MAAQma,GAChE5C,EAAIyD,OAAS,WACRzD,EAAI7B,MAAQ,GACf9V,EAAK6B,KAAK,eAAeuP,KAAK,QAAS,wBAA0B+O,EAAa,MAGhFxI,EAAImE,IAAMqE,EAEXlW,EAAK+K,UAAU1K,OAAOtK,MAGvBiK,EAAKgL,mBAAmB3S,YAAY,oBAMtCkd,UAAW,WACV,IAAIY,EAAYtgB,KAAKoV,SAASrT,KAAK,sBAAsBmc,SACzDle,KAAKoV,SAASqJ,QACd,IAAItU,EAAOnK,KAEXmK,EAAKiL,SAAS5K,OAAO8V,GAGrB,IAAIrO,EAAOjS,KAAK2S,YAAYzP,KAAK,QAC7Bqd,EAAYjgB,GAAAA,CAAE,6CAA6CoC,SAAS,SACxE,GAAIuP,EAAM,CACT,IAAIuO,EAAQvO,EAAKzQ,MAAM,KACvBlB,IAAAA,KAAOkgB,GAAO,SAAS5K,EAAOL,GAE7B,GAAY,MADZA,EAAMiL,EAAM/a,OAEX,OAAO,EAER0E,EAAKiL,SAASqL,QAAQF,EAAUpP,WAAW,CAC1CoE,IAAKiL,EAAM/e,KAAK,KAAO,IAAM8T,EAC7B3E,KAAM2E,QAKTgL,EAAUpP,WAAW,CACpBoE,IAAK,GACL3E,KAAM,IACJ,CAAE8F,eAAgB,OAAQgK,UAAU1gB,KAAKoV,WAM7CC,sBAAuB,SAAS/B,EAAOxQ,GACtC,IAAIqH,EAAOmJ,EAAMpQ,KACbqS,EAAMjV,GAAAA,CAAEgT,EAAMmI,QAAQrF,QAAQ,UAAUlT,KAAK,OACjDiH,EAAKyK,gBAAgBW,GACrB,IAAIoL,EAAerN,EAAMmI,OAAQrF,QAAQ,cACrCD,EAAsB7V,GAAAA,CAAE,WAAYqgB,GACxC3gB,KAAK4gB,mBAAmB9d,EAAMyS,EAAI/T,MAAM,QAAQiE,QAC2B,IAAvEzF,KAAK2S,YAAYzP,KAAK,YAAYoC,QAAQ,yBAAkCtF,KAAK2S,YAAYzP,KAAK,yBACrGiT,EAAoBE,KAAK,YAAY,GAErCF,EAAoBE,KAAK,YAAY,IAMvCf,mBAAoB,SAAShC,EAAOuN,EAAU/d,GAC7C,IACIqT,EADcnW,KAAK2S,YAAYyD,QAAQ,cACLrU,KAAK,YACb,SAA1B8e,EAAS3d,KAAK,UAC4B,IAAzClD,KAAK2S,YAAYzP,KAAK,gBAA4BoQ,EAAMwN,SAC3D9gB,KAAKkV,UAAUnT,KAAK,gCAAgCS,YAAY,+BAEjEqe,EAAShD,YAAY,+BACrB1H,EAAoBE,KAAK,YAAY,IACD,QAA1BwK,EAAS3d,KAAK,UACxBlD,KAAK4U,gBAAgB5U,KAAK2S,YAAYzP,KAAK,QAAU,IAAM2d,EAAS3d,KAAK,cACzElD,KAAK4gB,mBAAmB9d,EAAM+d,EAAS3d,KAAK,eAC+B,IAAvElD,KAAK2S,YAAYzP,KAAK,YAAYoC,QAAQ,yBAAkCtF,KAAK2S,YAAYzP,KAAK,yBACrGiT,EAAoBE,KAAK,YAAY,GAErCF,EAAoBE,KAAK,YAAY,KAWxCuK,mBAAoB,SAAS9d,EAAMyS,GAClC,IAAIwL,EAAmB,KAARxL,EAAapT,EAAE,OAAQ,QAAUA,EAAE,OAAQ,mBAAoB,CAAE6e,OAAQzL,IACpF0L,EAAmB,KAAR1L,EAAapT,EAAE,OAAQ,QAAUA,EAAE,OAAQ,mBAAoB,CAAE6e,OAAQzL,IACpF9E,EAAUnQ,GAAAA,CAAE,+BAChB,OAAQwC,GACP,KAAK9C,KAAK2P,uBAEV,KAAK3P,KAAK+P,uBACT,MACD,KAAK/P,KAAK6P,qBACTY,EAAQnP,KAAKyf,GACb,MACD,KAAK/gB,KAAK4P,qBACTa,EAAQnP,KAAK2f,GACb,MACD,KAAKjhB,KAAK8P,0BACTW,EAAQyQ,GAAG,GAAG5f,KAAKyf,GACnBtQ,EAAQyQ,GAAG,GAAG5f,KAAK2f,MAMvB,ICvxCaE,GApBe9R,EAeWN,SAfHO,EAeaA,EAAAA,KAd5CC,EAAQF,EAAOL,qBAAqB,QAAQ,GAAGC,aAAa,qBAEzD,CACNkS,SAAU,kBAAM5R,GAChB6R,SAAU,SAAAC,GAGT/R,EAAK,oBAAqB,CACzBC,MAHDA,EAAQ8R,OAcgCF,SCXrCG,GAAgB,SAAhBA,EAAyBtF,EAAK9Y,GACnC,IACI0N,EACA2Q,EAFAC,EAAU,GAMd,GAHAxhB,KAAKyhB,kBAAoB,GACzBzhB,KAAK0hB,QAAS,EACd1hB,KAAK2hB,UAAY,GACbze,EACH,IAAK0N,KAAQ1N,EACZse,GAAW5Q,EAAO,IAAMgR,mBAAmB1e,EAAK0N,IAAS,IAI3D,GADA4Q,GAAW,gBAAkBI,mBAAmBT,KAC3CnhB,KAAK6hB,aAAsC,oBAAhBC,YAWzB,CACN,IAAIC,EAAW,yBAA2BT,EAAcU,YACxDV,EAAcW,gBAAgBX,EAAcU,aAAehiB,KAC3DA,KAAKkiB,OAAS5hB,GAAAA,CAAE,qBAChBN,KAAKkiB,OAAO5Q,KAAK,KAAMyQ,GACvB/hB,KAAKkiB,OAAOjiB,OAEZshB,EAAW,KACe,IAAtBvF,EAAI1W,QAAQ,OACfic,EAAW,KAEZvhB,KAAKkiB,OAAO5Q,KAAK,MAAO0K,EAAMuF,EAAW,6BAA+BD,EAAcU,YAAc,IAAMR,GAC1GlhB,GAAAA,CAAE,QAAQkK,OAAOxK,KAAKkiB,QACtBliB,KAAK6hB,aAAc,EACnBP,EAAcU,mBAxBdT,EAAW,KACe,IAAtBvF,EAAI1W,QAAQ,OACfic,EAAW,KAEZvhB,KAAKmiB,OAAS,IAAIL,YAAY9F,EAAMuF,EAAWC,GAC/CxhB,KAAKmiB,OAAOC,UAAY,SAAS3V,GAChC,IAAK,IAAI+L,EAAI,EAAGA,EAAIxY,KAAKyhB,kBAAkBzf,OAAQwW,IAClDxY,KAAKyhB,kBAAkBjJ,GAAG/P,KAAK4Z,MAAM5V,EAAEvJ,QAEvCE,KAAKpD,MAkBRA,KAAKsiB,OAAO,eAAgB,SAASpf,GACvB,UAATA,GACHlD,KAAK6R,SAELzO,KAAKpD,QAERshB,GAAcW,gBAAkB,GAChCX,GAAcU,YAAc,EAC5BV,GAAciB,iBAAmB,SAASpd,EAAIrC,EAAMI,GACnDoe,GAAcW,gBAAgB9c,GAAIod,iBAAiBzf,EAAMI,IAE1Doe,GAAc1Y,UAAY,CACzB6Y,kBAAmB,GACnBS,OAAQ,KACRP,UAAW,GACXE,aAAa,EAWbU,iBAAkB,SAASzf,EAAMI,GAChC,IAAIsV,EAEJ,IAAIxY,KAAK0hB,OAGT,GAAI5e,GACH,QAAmC,IAAxB9C,KAAK2hB,UAAUa,KACzB,IAAKhK,EAAI,EAAGA,EAAIxY,KAAK2hB,UAAU7e,GAAMd,OAAQwW,IAC5CxY,KAAK2hB,UAAU7e,GAAM0V,GAAGtV,QAI1B,IAAKsV,EAAI,EAAGA,EAAIxY,KAAKyhB,kBAAkBzf,OAAQwW,IAC9CxY,KAAKyhB,kBAAkBjJ,GAAGtV,IAI7Buf,WAAY,EAOZH,OAAQ,SAASxf,EAAM/C,GAClBA,GAAYA,EAASY,OAEpBmC,EACC9C,KAAK6hB,aACH7hB,KAAK2hB,UAAU7e,KACnB9C,KAAK2hB,UAAU7e,GAAQ,IAExB9C,KAAK2hB,UAAU7e,GAAM6H,KAAK5K,IAE1BC,KAAKmiB,OAAOO,iBAAiB5f,GAAM,SAAS2J,QACrB,IAAXA,EAAEvJ,KACZnD,EAAS0I,KAAK4Z,MAAM5V,EAAEvJ,OAEtBnD,EAAS,OAER,GAGJC,KAAKyhB,kBAAkB9W,KAAK5K,KAO/B8R,MAAO,WACN7R,KAAK0hB,QAAS,OACa,IAAhB1hB,KAAKmiB,QACfniB,KAAKmiB,OAAOtQ,UAKf,sBCxIW8Q,GAAc,KAqEZC,GAAY,SAASC,GACjC,GAAIF,GAAa,CAChB,IAAMG,EAAWH,GACjBA,GAAYlgB,QAAQ,IAAInC,IAAAA,OAAQ,eAChCqiB,GAAYI,QC/EW,ID+EQ,WAC9BD,EAASrgB,QAAQ,IAAInC,IAAAA,OAAQ,cACzBuiB,GACHA,EAASG,MAAMhjB,KAAMijB,cAMxB3iB,GAAAA,CAAE,eAAegR,KAAK,iBAAiB,GAEvChR,GAAAA,CAAE,eAAekC,YAAY,cAC7BmgB,GAAc,ME5FTO,KAAY5f,OAAO6f,wGCCzB7f,OAAO8f,+BAAiC9f,OAAO8f,gCAAkC,GACjF9f,OAAO+f,mCAAqC/f,OAAO+f,oCAAsC,GAOzF,IA2CaC,GAAqB,SAAAC,GACjC,YAAwDnjB,IAAjDkD,OAAO8f,+BAA+BG,SACYnjB,IAArDkD,OAAO+f,mCAAmCE,IAOlCC,GAAqB,SAAAD,GACjC,MAAO,CACNE,aAAcngB,OAAO8f,+BAA+BG,IAAU,GAC9DG,eAAgBpgB,OAAO+f,mCAAmCE,8OCpC5D,IAAMI,GAAO,CAUZC,KAVY,SAUPC,EAAS9jB,GAEb,GAAIujB,GAAmBO,IAA+B,OAAnBhhB,GAAAA,YAAyB,CAC3D,IAAMpD,EAAWa,IAAAA,WACXmd,EAAUhe,EAASge,UAGzB,OAFAA,EAAQpX,KAAKtG,GACbN,EAASgP,UACFgP,EAGR,IAAMtT,EAAOnK,KACPgD,GAAM8gB,EAAAA,EAAAA,kBAAiBD,EAAS,OAAQhhB,GAAAA,YAAiB,SAG/D,OAAOvC,IAAAA,IAAM0C,GACXqD,MACA,SAAS3B,GACJA,EAAO+e,cACVtZ,EAAK4Z,SAASF,EAASnf,EAAO+e,aAAc/e,EAAOsf,eAGrD3d,KAAKtG,IASRgkB,SAxCY,SAwCHF,EAASI,GDpCoB,IAACV,EAAOE,EAAcC,EAArBH,ECqCdM,EDrCqBJ,ECqCZQ,EDrC0BP,ECqClB1jB,KAAKkkB,WDpC1CZ,GAAmBC,GAdV,SAACA,EAAOE,EAAcC,GACpCpgB,OAAO8f,+BAA+BG,GAAS9c,OAAOC,OACrDpD,OAAO8f,+BAA+BG,GACtCE,GAEDngB,OAAO+f,mCAAmCE,GAASG,EAYlDS,CAAOZ,EAAOE,EAAcC,GA3Bb,SAACH,EAAOE,EAAcC,GACtCpgB,OAAO8f,+BAA+BG,GAASE,EAC/CngB,OAAO+f,mCAAmCE,GAASG,EAuBlDK,CAASR,EAAOE,EAAcC,ICyC/BU,YDhCwC,SAAAb,UACjCjgB,OAAO8f,+BAA+BG,UACtCjgB,OAAO+f,mCAAmCE,IC4CjDc,UA7DY,SA6DF3gB,EAAKpC,EAAMgjB,EAAM7H,EAAO3b,GACjC,IAIMyjB,EAAazjB,GAAW,GAC9BX,EAAAA,QAAAA,SAAWokB,EALY,CACtBhQ,QAAQ,EACRiQ,UAAU,IAKX,IAAMC,EAAcF,EAAWC,SAAWE,KAAAA,SAAqBC,KACzDC,EAAYL,EAAWhQ,OAAS7S,KAAaijB,KAiB/CE,EAAcvjB,EAEZwC,EADS0f,GAAmB9f,GACb+f,aAAaniB,GAKlC,YAJuB,IAAXwC,IACX+gB,EAAc/gB,GAGK,WAAhB,GAAOwgB,SAA+BlkB,IAAVqc,EACxBgI,EApBO,SAASnjB,EAAMgjB,EAAM7H,GACnC,OAAOnb,EAAK4Z,QAAQ,MAAOuB,GAAOvB,QAAQ,eACzC,SAAS4J,EAAGC,GACX,IAAMC,EAAIV,EAAKS,GACf,OACQN,EADS,iBAANO,GAA+B,iBAANA,EAChBJ,EAAUI,GAEVF,MAaHG,CAAOJ,EAAaP,EAAM7H,IAEtCgI,EAAYI,IAgBrBK,gBAjHY,SAiHIxhB,EAAKyhB,EAAcC,EAAY3I,EAAO6H,EAAMxjB,GAC3D,IAAMukB,EAAa,IAAMF,EAAe,OAASC,EAAa,IACxDnB,EAAST,GAAmB9f,GAC5BI,EAAQmgB,EAAOR,aAAa4B,GAClC,QAAuB,IAAXvhB,EAAwB,CACnC,IAAM+gB,EAAc/gB,EACpB,GAAIxD,IAAAA,QAAUukB,GAAc,CAC3B,IAAMS,EAASrB,EAAOP,eAAejH,GACrC,OAAOzc,KAAKqkB,UAAU3gB,EAAKmhB,EAAYS,GAAShB,EAAM7H,EAAO3b,IAI/D,OAAc,IAAV2b,EACIzc,KAAKqkB,UAAU3gB,EAAKyhB,EAAcb,EAAM7H,EAAO3b,GAE/Cd,KAAKqkB,UAAU3gB,EAAK0hB,EAAYd,EAAM7H,EAAO3b,IAWtDojB,WA3IY,SA2IDqB,GACV,IAAIC,EAAW3iB,GAAAA,cAMf,GALiB,UAAb2iB,IAEHA,EAAW,YAGY,IAAbA,GAAyC,KAAbA,EACtC,OAAmB,IAAXD,EAAgB,EAAI,EAY7B,OATIC,EAASxjB,OAAS,IACrBwjB,EAAWA,EAASC,UAAU,EAAGD,EAAS3R,YAAY,OAQ/C2R,GACR,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KAkHL,QACC,OAAO,EAhHR,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACJ,OAAmB,IAAXD,EAAgB,EAAI,EAE7B,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,KACL,IAAK,MACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,MACL,IAAK,KACL,IAAK,KACJ,OAAoB,IAAXA,GAA6B,IAAXA,EAAiB,EAAI,EAEjD,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACJ,OAASA,EAAS,IAAO,GAAOA,EAAS,KAAQ,GAAO,EAAOA,EAAS,IAAM,GAAOA,EAAS,IAAM,IAAQA,EAAS,IAAM,IAAQA,EAAS,KAAO,IAAQ,EAAI,EAEhK,IAAK,KACL,IAAK,KACJ,OAAmB,IAAXA,EAAgB,EAAOA,GAAU,GAAOA,GAAU,EAAM,EAAI,EAErE,IAAK,KACJ,OAAmB,IAAXA,EAAgB,EAAiB,IAAXA,EAAgB,EAAI,EAEnD,IAAK,KACJ,OAASA,EAAS,IAAO,GAAOA,EAAS,KAAQ,GAAO,EAAOA,EAAS,IAAM,IAAQA,EAAS,IAAM,IAAQA,EAAS,KAAO,IAAQ,EAAI,EAE1I,IAAK,KACJ,OAAQA,EAAS,KAAQ,EAAK,EAAMA,EAAS,KAAQ,EAAK,EAAOA,EAAS,KAAQ,GAAOA,EAAS,KAAQ,EAAM,EAAI,EAErH,IAAK,KACJ,OAAQA,EAAS,IAAO,EAAK,EAAI,EAElC,IAAK,KACJ,OAAmB,IAAXA,EAAgB,EAAkB,IAAXA,GAAmBA,EAAS,IAAM,GAAOA,EAAS,IAAM,GAAQ,EAAOA,EAAS,IAAM,IAAQA,EAAS,IAAM,GAAO,EAAI,EAExJ,IAAK,KACJ,OAAmB,IAAXA,EAAgB,EAAOA,EAAS,IAAO,GAAOA,EAAS,KAAQ,GAAO,EAAI,EAEnF,IAAK,KACJ,OAAmB,IAAXA,EAAgB,EAAOA,EAAS,IAAM,GAAOA,EAAS,IAAM,IAAQA,EAAS,IAAM,IAAQA,EAAS,IAAM,IAAQ,EAAI,EAE/H,IAAK,KACJ,OAAmB,IAAXA,EAAgB,EAAiB,IAAXA,EAAgB,EAAkB,IAAXA,GAA6B,KAAXA,EAAkB,EAAI,EAE9F,IAAK,KACJ,OAAmB,IAAXA,EAAgB,EAAkB,IAAXA,GAAmBA,EAAS,IAAM,GAAOA,EAAS,IAAM,GAAQ,EAAI,EAEpG,IAAK,KACJ,OAAmB,IAAXA,EAAgB,EAAiB,IAAXA,EAAgB,EAAiB,IAAXA,EAAgB,EAAOA,EAAS,KAAO,GAAOA,EAAS,KAAO,GAAO,EAAOA,EAAS,KAAO,IAAQA,EAAS,KAAO,GAAO,EAAI,KAQtL,MAgBAG,KAAAA,eAA0B,KAAK,SAAShiB,EAAKpC,GAC5C,OAAOqiB,GAAKU,UAAU3gB,EAAKpC,qBCzU5B,IAMCqkB,YANc,SAMFC,GACX5lB,KAAK6lB,YAAYD,EAAUzjB,EAAE,OAAQ,cAStC0jB,YAhBc,SAgBFD,EAAUxV,GACrB9P,GAAAA,CAAEslB,GAAUtkB,KAAK8O,GACf5N,YAAY,WACZA,YAAY,SACZsjB,MAAK,GAAM,GACXzkB,QAaH0kB,eAlCc,SAkCCH,EAAUze,GACxBnH,KAAKgmB,eAAeJ,EAAUze,IAa/B6e,eAhDc,SAgDCJ,EAAUze,GACA,YAApBA,EAASnC,OACZhF,KAAKimB,gBAAgBL,EAAUze,EAASjE,KAAKkN,SAE7CpQ,KAAKkmB,cAAcN,EAAUze,EAASjE,KAAKkN,UAU7C6V,gBA9Dc,SA8DEL,EAAUxV,GACzB9P,GAAAA,CAAEslB,GAAUtkB,KAAK8O,GACf1N,SAAS,WACTF,YAAY,SACZsjB,MAAK,GAAM,GACXK,MAAM,KACNC,QAAQ,KACR/kB,QASH6kB,cA9Ec,SA8EAN,EAAUxV,GACvB9P,GAAAA,CAAEslB,GAAUtkB,KAAK8O,GACf1N,SAAS,SACTF,YAAY,WACZnB,gCCjFJ,IACCtB,SAAU,KAEVsmB,aAAc,KAEdC,KALc,WAMbhmB,GAAAA,CAAE,8BAA8BmK,GAAG,QAAStK,EAAAA,QAAAA,KAAOH,KAAKumB,4BAA6BvmB,OACrFA,KAAKqmB,aAAeG,KAAAA,OAGrBC,6BAVc,WAWb,IAAMC,EAAiB1mB,KAAKqmB,aAAqC,IAArB/iB,OAAOqjB,YAC7CC,EAAiBJ,KAAAA,OAAgBE,EAAwC,IAAtBpjB,OAAOujB,cAGhE,OAAQvjB,OAAOwjB,mCAAqCF,EAAiB,MAQtEL,4BAvBc,SAuBcxmB,EAAUe,EAASimB,GAC9CjmB,OAA6B,IAAZA,EAA0BA,EAAU,GACrD,IAAMqI,EAAW,CAChB+G,MAAO/N,EAAE,OAAQ,2BACjBb,KAAMa,EACL,OACA,qDAEDoO,QAASpO,EAAE,OAAQ,WACnBoP,MAAOpP,EAAE,OAAQ,YACjBzB,MAAO,IAGFsmB,EAAS7mB,EAAAA,QAAAA,OAASgJ,EAAUrI,GAE5BqJ,EAAOnK,KAETA,KAAKymB,gCACR5jB,GAAAA,QAAAA,OACCmkB,EAAO1lB,KACP0lB,EAAO9W,OACP,SAASxL,EAAQmM,GACZnM,GAAuB,KAAbmM,EACb1G,EAAK8c,iBAAiBpW,EAAUmW,GACtB7mB,EAAAA,QAAAA,WAAa4mB,IACvBA,OAGF,EACAC,EAAOzV,OACP,GACClL,MAAK,WACN,IAAM6gB,EAAU5mB,GAAAA,CAAE,sBAGlB,GAFA4mB,EAAQnlB,KAAK,YAAYkR,SACzBiU,EAAQxkB,SAAS,yBACI,KAAjBskB,EAAOtmB,MAAc,CACxB,IAAMymB,EAAS7mB,GAAAA,CAAE,WAAWoC,SAAS,eAAepB,KAAK0lB,EAAOtmB,OAChEwmB,EAAQnlB,KAAK,sBAAsByI,OAAO2c,GAE3CD,EAAQnlB,KAAK,wBAAwBW,SAAS,SAE9C,IAAM0kB,EAAWF,EAAQnlB,KAAK,UAC9BqlB,EAASlG,GAAG,GAAGjhB,OACfmnB,EAASlG,GAAG,GAAG5f,KAAK0lB,EAAOzW,YAI7BvQ,KAAKD,SAAWA,GAGjBknB,iBAzEc,SAyEGpW,EAAUmW,GAC1B,IAAM7c,EAAOnK,KAEbM,IAAAA,KAAO,CACN0C,KAAKqkB,EAAAA,EAAAA,aAAY,kBACjBnkB,KAAM,CACL2N,SAAAA,GAED/N,KAAM,OACNK,QANM,SAMEgE,GACP7D,OAAOujB,aAAe1f,EAASmgB,UAE3BnnB,EAAAA,QAAAA,WAAagK,EAAKpK,WACrBoK,EAAKpK,YAGPW,MAbM,WAcLsmB,EAAOtmB,MAAQyB,EAAE,OAAQ,qCACzBU,GAAAA,qBAAAA,4BAAoDsH,EAAKpK,SAAUinB,QCvG1DO,GAAQjkB,OAAOkkB,QAAU,GCWtC,IAECC,UAAW,GAcXC,WAhBc,SAgBHzf,EAAQjF,EAAKkY,GACvB,IAAIyM,EAOJ,GALCA,EADuB,iBAAZ1f,EACCA,EAEApF,GAAAA,iBAAoBoF,GAG7B3E,OAAOskB,QAAQC,UAAW,CAK7B,GAJA7kB,EAAMA,GAAO8kB,SAASC,SAAW,IAAMJ,EAGrBK,UAAUC,UAAUC,cAAc5iB,QAAQ,YAAc,GACzD0a,SAASgI,UAAUC,UAAUzmB,MAAM,KAAKiE,OAAS,GAEjE,IADA,IACsC0iB,EADhCC,EAAWrZ,SAASsZ,iBAAiB,+DAClC7P,EAAI,EAAG8P,EAAKF,EAASpmB,OAAiBwW,EAAI8P,EAAI9P,KACtD2P,EAAUC,EAAS5P,IAEXtC,MAAMqS,KAAOJ,EAAQjS,MAAMqS,KAEnCJ,EAAQjS,MAAMsS,OAASL,EAAQjS,MAAMsS,OACrCL,EAAQM,gBAAgB,UACxBN,EAAQO,aAAa,SAAU,gBAG7BxN,EACH5X,OAAOskB,QAAQe,aAAa1gB,EAAQ,GAAIjF,GAExCM,OAAOskB,QAAQC,UAAU5f,EAAQ,GAAIjF,QAItCM,OAAOwkB,SAASc,KAAO,IAAMjB,EAG7B3nB,KAAK6oB,YAAa,GAapBhB,UAhEc,SAgEJ5f,EAAQjF,GACjBhD,KAAK0nB,WAAWzf,EAAQjF,GAAK,IAc9B2lB,aA/Ec,SA+ED1gB,EAAQjF,GACpBhD,KAAK0nB,WAAWzf,EAAQjF,GAAK,IAQ9B8lB,qBAxFc,SAwFOC,GACpB/oB,KAAKynB,UAAU9c,KAAKoe,IASrBC,gBAlGc,WAmGb,IAAMJ,EAAOtlB,OAAOwkB,SAASc,KACvBK,EAAML,EAAKtjB,QAAQ,KACzB,OAAI2jB,GAAO,EACHL,EAAKrjB,OAAO0jB,EAAM,GAEtBL,EAAK5mB,OAED4mB,EAAKrjB,OAAO,GAEb,IAGR2jB,aA/Gc,SA+GDC,GACZ,OAAOA,EAAMjO,QAAQ,MAAO,MAS7BkO,cAzHc,WA0Hb,IACInhB,EADEkhB,EAAQnpB,KAAKgpB,kBAQnB,OALIG,IACHlhB,EAASpF,GAAAA,iBAAoB7C,KAAKkpB,aAAaC,MAGhDlhB,EAAS9H,EAAAA,QAAAA,OAAS8H,GAAU,GAAIpF,GAAAA,iBAAoB7C,KAAKkpB,aAAapB,SAASuB,YAC9D,IAGlBC,YArIc,SAqIF7c,GAKX,IAAIxE,EAJJ,GAAIjI,KAAK6oB,WACR7oB,KAAK6oB,YAAa,OAInB,GAAK7oB,KAAKynB,UAAUzlB,OAApB,CAGAiG,EAAUwE,GAAKA,EAAE8c,MACbppB,EAAAA,QAAAA,SAAW8H,GACdA,EAASpF,GAAAA,iBAAoBoF,GAClBA,IACXA,EAASjI,KAAKopB,iBAAmB,IAElC,IAAK,IAAI5Q,EAAI,EAAGA,EAAIxY,KAAKynB,UAAUzlB,OAAQwW,IAC1CxY,KAAKynB,UAAUjP,GAAGvQ,MCtJrB,SAASuhB,GAASrnB,GAQjB,IANA,IAIIyY,EAJE6O,EAAK,GACP/O,EAAI,EACJC,GAAK,EACL+B,EAAI,EAGDhC,EAAIvY,EAAEH,QAAQ,CACpB4Y,EAAIzY,EAAEunB,OAAOhP,GAEb,IAAMiP,GAAOjN,GAAW,MAAN9B,GAAeA,GAAK,KAAOA,GAAK,IAC9C+O,IAAMjN,IAGT+M,IADA9O,GACQ,GACR+B,EAAIiN,GAELF,EAAG9O,IAAMC,EACTF,IAED,OAAO+O,EAQR,QAECG,QAAAA,GAKAC,sBAAAA,EAYAC,iBAnBc,SAmBGC,GAChB,GAAsB,iBAAXA,EACV,OAAO,KAGR,IAAMC,EAAID,EAAO7B,cAAc/T,OAC3B8V,EAAQ,KAgBNC,EAAUF,EAAE5V,MAAM,mDACxB,OAAgB,OAAZ8V,EAMI,MALPD,EAAQE,WAAWH,GACdI,SAASH,IAMXC,EAAQ,KACXD,GAxBkB,CAClBlF,EAAG,EACHsF,EAAG,KACHC,GAAI,KACJC,GAAI,QACJZ,EAAG,QACHa,GAAI,WACJC,EAAG,WACHC,GAAI,cACJvoB,EAAG,cACHwoB,GAAI,gBACJC,EAAG,iBAawBV,EAAQ,KAGpCD,EAAQtS,KAAKC,MAAMqS,IATV,OAkBVY,WA/Dc,SA+DHC,EAAWC,GAKrB,YAJuB3qB,IAAnBkD,OAAO0nB,SACVvqB,QAAQyF,KAAK,+FAEd6kB,EAASA,GAAU,MACZvE,IAAAA,CAAOsE,GAAWC,OAAOA,IAOjCE,qBA3Ec,SA2EOH,QACG1qB,IAAnBkD,OAAO0nB,SACVvqB,QAAQyF,KAAK,yGAEd,IAAMglB,EAAO1E,IAAAA,GAAS0E,KAAK1E,IAAAA,CAAOsE,IAClC,OAAII,GAAQ,GAAKA,EAAO,KAChB/oB,EAAE,OAAQ,eAEXqkB,IAAAA,CAAOsE,GAAWK,WAQ1BC,kBA3Fc,WA4Fb,GAAIprB,KAAKqrB,gBACR,OAAOrrB,KAAKqrB,gBAGb,IAAMC,EAAQvc,SAASkN,cAAc,KACrCqP,EAAMpV,MAAMF,MAAQ,OACpBsV,EAAMpV,MAAMD,OAAS,QAErB,IAAMsV,EAAQxc,SAASkN,cAAc,OACrCsP,EAAMrV,MAAMsV,SAAW,WACvBD,EAAMrV,MAAMuV,IAAM,MAClBF,EAAMrV,MAAMwV,KAAO,MACnBH,EAAMrV,MAAMyV,WAAa,SACzBJ,EAAMrV,MAAMF,MAAQ,QACpBuV,EAAMrV,MAAMD,OAAS,QACrBsV,EAAMrV,MAAM0V,SAAW,SACvBL,EAAMM,YAAYP,GAElBvc,SAASzH,KAAKukB,YAAYN,GAC1B,IAAMO,EAAKR,EAAMS,YACjBR,EAAMrV,MAAM0V,SAAW,SACvB,IAAII,EAAKV,EAAMS,YASf,OARID,IAAOE,IACVA,EAAKT,EAAMU,aAGZld,SAASzH,KAAK4kB,YAAYX,GAE1BvrB,KAAKqrB,gBAAmBS,EAAKE,EAEtBhsB,KAAKqrB,iBASbc,UAnIc,SAmIJ/L,GAGT,OAAO,IAAIgM,KAAKhM,EAAKiM,cAAejM,EAAKkM,WAAYlM,EAAKmM,YAW3DC,mBAjJc,SAiJK1H,EAAGC,GACrB,IAAIrK,EACE+R,EAAKjD,GAAS1E,GACd4H,EAAKlD,GAASzE,GAEpB,IAAKrK,EAAI,EAAG+R,EAAG/R,IAAMgS,EAAGhS,GAAIA,IAC3B,GAAI+R,EAAG/R,KAAOgS,EAAGhS,GAAI,CACpB,IAAMiS,EAAOC,OAAOH,EAAG/R,IAAWmS,EAAOD,OAAOF,EAAGhS,IAGnD,OAAIiS,GAAQF,EAAG/R,IAAMmS,GAAQH,EAAGhS,GACxBiS,EAAOE,EAIPJ,EAAG/R,GAAGoS,cAAcJ,EAAGhS,GAAI7X,GAAAA,eAIrC,OAAO4pB,EAAGzqB,OAAS0qB,EAAG1qB,QASvB+qB,QA7Kc,SA6KNhtB,EAAUitB,IACQ,SAAnBC,KACc,IAAfltB,KACHmtB,WAAWD,EAAkBD,GAI/BC,IAUDE,mBA9Lc,SA8LKvc,EAAM9M,GAExB,IADA,IAAMspB,EAAUre,SAASse,OAAO7rB,MAAM,KAC7BgX,EAAI,EAAGA,EAAI4U,EAAQprB,OAAQwW,IAAK,CACxC,IAAM6U,EAASD,EAAQ5U,GAAGhX,MAAM,KAChC,GAAI6rB,EAAO,GAAGlZ,SAAWvD,GAAQyc,EAAO,GAAGlZ,SAAWrQ,EACrD,OAAO,EAGT,OAAO,IC3OIwpB,GAFAhqB,OAAOiqB,UCAhBC,GAAUlqB,OAAOmqB,YAErB,QAAuB,IAAZD,GAAyB,CAEnC,IAAMvE,IADNuE,GAAU1F,SAASC,UACCziB,QAAQ,eAE3BkoB,IADY,IAATvE,GACOuE,GAAQjoB,OAAO,EAAG0jB,IAElBuE,GAAQjoB,OAAO,EAAGioB,GAAQ3Z,YAAY,MAIlD,ICXmB9K,GDWnB,MEiFA,IAIC2kB,SZhGuB,CAAC,GAAI,QAAS,MAAO,cAAe,OAAQ,YYiGnEC,UZhGwB,GYiGxBC,eZ1F6B,GY2F7BC,kBZhGgC,EYiGhCC,kBZ9FgC,EY+FhCC,gBZnG8B,EYoG9BC,gBZlG8B,EYmG9BC,iBZhG+B,GYiG/BC,kBZnGgC,EYoGhCC,aZhG2B,mBY4G3BC,kBAAmB,SAAA9Z,GAAI,QAAOA,EAAKF,MAAMia,EAAAA,wBAEzCC,U9BrGwB,SAAC5qB,EAAK6qB,EAAQvZ,GAGtC,IAAIvV,EAFJgB,QAAQyF,KAAK,iEAGb,IAAM+L,GAAO6R,EAAAA,EAAAA,kBAAiBpgB,EAAK,KAAM6qB,EAAS,OAUlD,OATK7uB,EAAcuS,GAKd+C,GACHA,KALDvV,EAAWa,IAAAA,WACXA,IAAAA,UAAY2R,GAAM,kBAAMxS,EAASgP,aACjC/O,EAAcuS,GAAQxS,GAMhBC,EAAcuS,I8BwFrBuc,S9B9EuB,SAAC9qB,EAAKwS,GAC7BzV,QAAQyF,KAAK,oEAEb,IAAM+L,GAAO6R,EAAAA,EAAAA,kBAAiBpgB,EAAK,MAAOwS,EAAQ,SACd,IAAhCvW,EAAa2F,QAAQ2M,KACxBtS,EAAagL,KAAKsH,GACdlD,SAAS0f,iBACZ1f,SAAS0f,iBAAiBxc,IAE1BiE,EAAQ5V,GAAAA,CAAE,gDAAkD2R,EAAO,OACnE3R,GAAAA,CAAE,QAAQkK,OAAO0L,M8BqEnB5T,KAAAA,EACAkB,UAAAA,EACAH,UAAAA,EACAqrB,YC5G0B,SAAAC,GAG1B,GAFAluB,QAAQyF,KAAK,2EAEO,IAATyoB,QAA8C,IAAfA,EAAKC,MAC9C,KAAM,CACLhe,KAAM,mBACNR,QAAS,kCAGX,IAAIvL,EAAQ,CAAEgqB,WAAY,eAAgBC,OAAO,GACjDxuB,IAAAA,OAASuE,EAAO8pB,GAChB,IAAII,EAAWzuB,GAAAA,CAAE,gBACjB,GAAwB,IAApByuB,EAAS/sB,OACZ,KAAM,CACL4O,KAAM,oBACNR,QAAS,2EAGX,IAAI4e,EAAQ1uB,GAAAA,CAAE,sBAMd,GALqB,IAAjB0uB,EAAMhtB,SACT1B,GAAAA,CAAE,QAAQmgB,QAAQ,4DAClBuO,EAAQ1uB,GAAAA,CAAE,uBACJoC,SAASqsB,EAASE,SAAS,YAAc,WAAa,eAEzDD,EAAMpjB,GAAG,YACZojB,EAAM/uB,OAAOgT,aACP,CACN,IAAMic,EAAaH,EAASE,SAAS,YAAc,KAAO,OAC1D3uB,IAAAA,KAAMwjB,EAAAA,EAAAA,kBAAiBjf,EAAM+pB,MAAO,GAAI/pB,EAAMgqB,aAAa,SAAS3rB,GACnE8rB,EAAMnuB,KAAKqC,GAAM8R,OAAM,WAKtB,GAJAga,EAAMvO,QAAQ,sBAAwByO,EAAa,gBAAkB/sB,EAAE,OAAQ,YAAc,8BAA8Bd,OAC3H2tB,EAAMjtB,KAAK,UAAUqB,KAAK,SAAS,WAClC4rB,EAAM/b,iBAEqB,IAAjBpO,EAAMsqB,OAAwB,CACxC,IAAIC,EACJ,IAAqB,IAAjBvqB,EAAMsqB,OACTC,EAAa,kBACP,IAA4B,iBAAjBvqB,EAAMsqB,OAGvB,KAAM,CACLve,KAAM,mBACNR,QAAS,8DAJVgf,EAAavqB,EAAMsqB,OAOhBtqB,EAAMiqB,OACTxuB,IAAAA,UAAY,CAAEwuB,OAAO,IAEtBxuB,IAAAA,WAAYwjB,EAAAA,EAAAA,kBAAiBjf,EAAM+pB,MAAO,KAAMQ,IAC9C9Y,MAAK,SAAS+Y,EAAON,EAAUtiB,GAC/B,MAAMA,SAGPpL,SACD,UDsDJiuB,aAAAA,EACA/oB,SAAAA,EACA0H,aAAAA,EACA+Y,OAAQqH,EAORlf,YAAAA,EACAogB,QAAS/f,EACTsS,YAAAA,GAQA0N,enBxI6B,WAC7B,MAAO,CACNC,IAAKtgB,EACLD,YAAAA,ImBsIDwgB,YX1I0B,kBAAMxM,IW2IhCyM,KAAAA,GAOAC,2BAA4B3tB,EAC5B4tB,kB5BpI+B,SAAAhoB,IAIZ,IAAfA,EAAI7C,QAAoC,UAAnB6C,EAAIioB,YAA6C,YAAnBjoB,EAAIioB,aAA4BjtB,GAAAA,iBAInF1C,EAAAA,QAAAA,SAAW,CAAC,IAAK,IAAK,IAAK,KAAM0H,EAAI7C,SAAWnC,GAAAA,YAEnDqqB,YAAW,WACV,IAAKrqB,GAAAA,wBAA6BA,GAAAA,cAAkB,CACnD,IAAIktB,EAAQ,EAEN/C,EAAWgD,aAAY,WAC5B9tB,EAAAA,WAAwBwa,EAAE,OAAQ,+CAAgD,gDAFnE,EAE8HqT,IACzIA,GAHW,IAIdE,cAAcjD,GACdnqB,GAAAA,UAEDktB,MACE,KAIHltB,GAAAA,eAAmB,KAElB,KACsB,IAAfgF,EAAI7C,QAEdkoB,YAAW,WACLrqB,GAAAA,uBAA6BA,GAAAA,eAEjCA,GAAAA,+BAEC,O4BkGJqtB,8B5BtF4C,SAAAroB,GAmBxCA,EAAI6a,mBACP7a,EAAI6a,iBAAiB,QAnBD,WACG,IAAnB7a,EAAIsoB,aAIHtoB,EAAI7C,QAAU,KAAO6C,EAAI7C,OAAS,KAAuB,MAAf6C,EAAI7C,QAKnD1E,GAAAA,CAAEyO,UAAUtM,QAAQ,IAAInC,IAAAA,OAAQ,aAAcuH,OAU9CA,EAAI6a,iBAAiB,SAPA,WAErBpiB,GAAAA,CAAEyO,UAAUtM,QAAQ,IAAInC,IAAAA,OAAQ,aAAcuH,Q4B8E/CuoB,gBE1J8B,WAE9B,OADA3vB,QAAQyF,KAAK,sGACNmqB,EAAAA,GAAAA,oBF6JPzN,UAAAA,GACA0N,abvJ2B,SAASC,EAASC,EAASC,EAAQC,GAC9DF,EAAQ9tB,SAAS,QACjB,IAAMiuB,EAAiD,MAA5BJ,EAAQla,KAAK,YAAkD,WAA5Bka,EAAQla,KAAK,WAI3Eka,EAAQ9lB,GAAGkmB,EAAqB,aAAe,yBAAyB,SAASrd,GAEhFA,EAAME,iBAGFF,EAAM3P,KAAqB,UAAd2P,EAAM3P,MAInB6sB,EAAQ5kB,GAAG+W,IACdC,MAEUD,IAGVC,MAGkB,IAAf8N,GACHF,EAAQ7T,SAASja,SAAS,cAI3B6tB,EAAQjf,KAAK,iBAAiB,GAE9Bkf,EAAQI,YCjDe,GDiDQH,GAC/B9N,GAAc6N,QawHfK,SbpEuB,SAACN,EAASC,EAAS3N,GACtC2N,EAAQ5kB,GAAG+W,MAGfC,KACAD,GAAc6N,EAEdA,EAAQ/tB,QAAQ,IAAInC,IAAAA,OAAQ,eAC5BkwB,EAAQnvB,OACRmvB,EAAQ/tB,QAAQ,IAAInC,IAAAA,OAAQ,cAExBH,EAAAA,QAAAA,WAAa0iB,IAChBA,MayDDiO,eb9G6B,SAACP,EAASC,GAEnCA,EAAQ5kB,GAAG+W,KACdC,KAED2N,EAAQQ,IAAI,cAAcvuB,YAAY,cACtCguB,EAAQhuB,YAAY,SagHpBwuB,SAAAA,EAAAA,GAIAC,WAAAA,EAAAA,GAIAC,QAAAA,EAAAA,GAIAC,WAAAA,EAAAA,GAIAC,UAAAA,EAAAA,GAKAC,QGzLsB,kBAAM/tB,OAAOwkB,SAASwJ,MH0L5CC,YGhL0B,kBAAMjuB,OAAOwkB,SAAS0J,UHiLhDC,QGvKsB,kBAAMnuB,OAAOwkB,SAAS4J,MHwK5CC,YG5M0B,kBAAMruB,OAAOwkB,SAAS8J,SAASpwB,MAAM,KAAK,IHiNpEqwB,mBAAAA,GAAAA,mBACAC,UTuHwB,kCAAMxxB,GAAAA,CAAE,QAAQ4C,KAAK,iBAArB,QAAkC,MStH1D6uB,YT6H0B,kBAAMzxB,GAAAA,CAAE,QAAQ+V,KAAK,SSpH/C2b,gBAAiBrC,GAAAA,KAKjBsC,iBItKoB,SAAAhqB,GACpB,OAAKA,EAGE3H,IAAAA,IAAM2H,GAAQ,SAASnE,EAAOH,GACpC,IAAIqmB,EAAIpI,mBAAmBje,GAI3B,OAHIG,MAAAA,IACHkmB,GAAK,IAAMpI,mBAAmB9d,IAExBkmB,KACLvoB,KAAK,KARA,IJqKRywB,iBIzNoB,SAAAC,GACpB,IAAIlJ,EACAmJ,EAEAzuB,EADEe,EAAS,GAEf,IAAKytB,EACJ,OAAO,MAERlJ,EAAMkJ,EAAY7sB,QAAQ,OACf,IACV6sB,EAAcA,EAAY5sB,OAAO0jB,EAAM,IAGxC,IADA,IAAMzjB,EAAQ2sB,EAAYjX,QAAQ,MAAO,OAAO1Z,MAAM,KAC7CgX,EAAI,EAAGA,EAAIhT,EAAMxD,OAAQwW,IAAK,CAEtC,IAAM6Z,EAAO7sB,EAAMgT,IAGlB4Z,GAFDnJ,EAAMoJ,EAAK/sB,QAAQ,OACR,EACG,CACZ+sB,EAAK9sB,OAAO,EAAG0jB,GACfoJ,EAAK9sB,OAAO0jB,EAAM,IAIN,CAACoJ,IAECrwB,SAGhB2B,EAAM2uB,mBAAmBF,EAAW,OAMnC1tB,EAAOf,GADJyuB,EAAWpwB,OAAS,EACTswB,mBAAmBF,EAAW,IAG9B,MAGhB,OAAO1tB,GJkLP6tB,IAAAA,GACArwB,aAAAA,EACAswB,qBAAAA,GACAC,QKvOD,CAKCC,SAAU,GAQV3O,SAbc,SAaL4O,EAAYC,GACpB,IAAIC,EAAU7yB,KAAK0yB,SAASC,GACvBE,IACJA,EAAU7yB,KAAK0yB,SAASC,GAAc,IAEvCE,EAAQloB,KAAKioB,IAUdE,WA5Bc,SA4BHH,GACV,OAAO3yB,KAAK0yB,SAASC,IAAe,IAUrCI,OAvCc,SAuCPJ,EAAYK,EAAclyB,GAEhC,IADA,IAAM+xB,EAAU7yB,KAAK8yB,WAAWH,GACvBna,EAAI,EAAGA,EAAIqa,EAAQ7wB,OAAQwW,IAC/Bqa,EAAQra,GAAGua,QACdF,EAAQra,GAAGua,OAAOC,EAAclyB,IAYnCod,OAvDc,SAuDPyU,EAAYK,EAAclyB,GAEhC,IADA,IAAM+xB,EAAU7yB,KAAK8yB,WAAWH,GACvBna,EAAI,EAAGA,EAAIqa,EAAQ7wB,OAAQwW,IAC/Bqa,EAAQra,GAAG0F,QACd2U,EAAQra,GAAG0F,OAAO8U,EAAclyB,KL6KnCymB,MAAAA,GACA0L,KAAAA,GACA3F,MAAAA,GAIA4F,SAAUpP,EAAAA,iBAIVuD,YAAAA,EAAAA,YAIA1d,KDtPkBZ,GCsPTzF,ODtPoB,SAAAsN,GAI7B,IAHA,IAAMuiB,EAAaviB,EAAKpP,MAAM,KACxB4xB,EAAOD,EAAW1tB,MAEf+S,EAAI,EAAGA,EAAI2a,EAAWnxB,OAAQwW,IAEtC,KADAzP,GAAUA,GAAQoqB,EAAW3a,KAE5B,OAAO,EAGT,OAAOzP,GAAQqqB,KCgPfxpB,IDtOkB,SAAAb,GAAO,OAAI,SAAC6H,EAAM9M,GAIpC,IAHA,IAAMqvB,EAAaviB,EAAKpP,MAAM,KACxB4xB,EAAOD,EAAW1tB,MAEf+S,EAAI,EAAGA,EAAI2a,EAAWnxB,OAAQwW,IACjCzP,EAAQoqB,EAAW3a,MACvBzP,EAAQoqB,EAAW3a,IAAM,IAE1BzP,EAAUA,EAAQoqB,EAAW3a,IAG9B,OADAzP,EAAQqqB,GAAQtvB,EACTA,GC2NF8F,CAAItG,QAIT+vB,YAAaC,EAAAA,WAIbC,UAAAA,EAAAA,UACAC,SMnQuB,SAAAC,GAAenwB,OAAOwkB,SAAW2L,GNoQxDC,OM7PqB,WAAQpwB,OAAOwkB,SAAS4L,UN8P7C1sB,aAAc2sB,IAIdC,OAAAA,EAAAA,OAOAC,UAAW,SAACC,EAASC,GACpB,OAAO9wB,EAAAA,EAAAA,gBAAe6wB,EAAS,GAAI,CAClCE,WAAYD,GAAW,IACnB,KAKNE,aAAcC,EAAAA,kBACdC,iBO9Q+B,SAAAL,GAC/B,OAAOM,EAAAA,EAAAA,cAAmB,eAAiBN,GPuR3CtG,QAAAA,KAID6G,EAAAA,EAAAA,WAAU,qBAAqB,SAAA5nB,GAC9B5J,GAAGmE,aAAeyF,EAAE8C,MAGpB9O,QAAQ6P,KAAK,0BAA2B7D,EAAE8C,UQlU3C,mDCAwL,GCsCxL,CACA,mBACA,OACA,SACA,aACA,aAEA,gBACA,aACA,0BC7BA,IAXgB,QACd,ICRW,WAAa,IAAI+kB,EAAIt0B,KAASu0B,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACzuB,MAAM,CAAC,GAAK,kBAAkByE,GAAG,CAAC,MAAQ,SAASkqB,GAAQ,OAAOL,EAAIM,MAAM,YAAY,CAACH,EAAG,QAAQ,CAACI,YAAY,gBAAgB7uB,MAAM,CAAC,GAAK,cAAc,KAAO,SAAS,MAAQ,IAAI8uB,SAAS,CAAC,MAASR,EAAIjoB,QAAoCioB,EAAInyB,EAAE,OAAQ,gBAAxCmyB,EAAInyB,EAAE,OAAQ,aAA6CmyB,EAAIS,GAAG,KAAKN,EAAG,MAAM,CAACI,YAAY,cAAcG,MAAM,CAChb,sBAAuBV,EAAIjoB,QAC3B,qBAAsBioB,EAAIjoB,SAAWioB,EAAIW,eACzC,0BAA2BX,EAAIjoB,UAAYioB,EAAIW,sBAE5B,IDMpB,EACA,KACA,WACA,MAI8B,QElBsJ,GCwItL,CACA,iBACA,4BACA,OACA,UACA,YACA,YAEA,aACA,sBACA,YAEA,QACA,WACA,8BAEA,UACA,WACA,8BAEA,eACA,YACA,WAEA,gBACA,aACA,YAEA,qBACA,aACA,YAEA,aACA,aACA,aAGA,KArCA,WAsCA,OACA,WACA,iCACA,kDACA,mBACA,YACA,+BAGA,UACA,iBADA,WAEA,oDAEA,kBAJA,WAKA,qDAEA,gBAPA,WAQA,mDAEA,aAVA,WAWA,gDAEA,WAbA,WAcA,oDAEA,YAhBA,WAiBA,kDAEA,eAnBA,WAoBA,mCAGA,QAtEA,WAuEA,mBACA,wBAEA,6BAGA,SACA,eADA,WAEA,oCACA,8BAEA,mCAGA,eARA,WASA,yCAEA,OAXA,WAYA,gBACA,wBC3NI,IAAY,QACd,ICRW,WAAa,IAAIX,EAAIt0B,KAASu0B,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,OAAO,CAACS,IAAI,YAAYlvB,MAAM,CAAC,OAAS,OAAO,KAAO,QAAQ,OAASsuB,EAAIa,gBAAgB1qB,GAAG,CAAC,OAAS6pB,EAAI5gB,SAAS,CAAC+gB,EAAG,WAAW,CAAEH,EAAoB,iBAAEG,EAAG,MAAM,CAACI,YAAY,WAAW,CAACP,EAAIS,GAAG,WAAWT,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,wCAAwCsyB,EAAG,MAAMH,EAAIS,GAAG,KAAKN,EAAG,QAAQ,CAACH,EAAIS,GAAGT,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,uCAAuC,gBAAgBmyB,EAAIe,KAAKf,EAAIS,GAAG,KAAKT,EAAIgB,GAAIhB,EAAY,UAAE,SAASlkB,EAAQwF,GAAO,OAAO6e,EAAG,MAAM,CAAC9wB,IAAIiS,EAAMif,YAAY,WAAW,CAACP,EAAIS,GAAG,WAAWT,EAAIc,GAAGhlB,IAAUqkB,EAAG,WAAUH,EAAIS,GAAG,KAAMT,EAAqB,kBAAEG,EAAG,MAAM,CAACI,YAAY,WAAW,CAACP,EAAIS,GAAG,WAAWT,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,iCAAiCsyB,EAAG,MAAMH,EAAIS,GAAG,KAAKN,EAAG,QAAQ,CAACH,EAAIS,GAAGT,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,oDAAoD,gBAAgBmyB,EAAIe,KAAKf,EAAIS,GAAG,KAAKN,EAAG,MAAM,CAACI,YAAY,SAAS7uB,MAAM,CAAC,GAAK,YAAY,CAACyuB,EAAG,MAAM,CAACI,YAAY,gBAAgB7uB,MAAM,CAAC,IAAM,GAAG,IAAMsuB,EAAIiB,eAAejB,EAAIS,GAAG,KAAKN,EAAG,OAAO,CAACzuB,MAAM,CAAC,GAAK,iBAAiBsuB,EAAIS,GAAG,KAAKN,EAAG,MAAM,CAACe,YAAY,CAAC,MAAQ,YAAYlB,EAAIS,GAAG,KAAKN,EAAG,IAAI,CAACI,YAAY,WAAWG,MAAM,CAACS,MAAOnB,EAAIoB,kBAAkB,CAACjB,EAAG,QAAQ,CAACkB,WAAW,CAAC,CAAC/kB,KAAK,QAAQglB,QAAQ,UAAU9xB,MAAOwwB,EAAQ,KAAEuB,WAAW,SAASX,IAAI,OAAOlvB,MAAM,CAAC,GAAK,OAAO,KAAO,OAAO,KAAO,OAAO,eAAiB,OAAO,YAAc,MAAM,aAAesuB,EAAIwB,oBAAsB,KAAO,MAAM,YAAcxB,EAAInyB,EAAE,OAAQ,qBAAqB,aAAamyB,EAAInyB,EAAE,OAAQ,qBAAqB,SAAW,IAAI2yB,SAAS,CAAC,MAASR,EAAQ,MAAG7pB,GAAG,CAAC,OAAS6pB,EAAIyB,eAAe,MAAQ,SAASpB,GAAWA,EAAOlZ,OAAOua,YAAqB1B,EAAI2B,KAAKtB,EAAOlZ,OAAO3X,WAAUwwB,EAAIS,GAAG,KAAKN,EAAG,QAAQ,CAACI,YAAY,UAAU7uB,MAAM,CAAC,IAAM,SAAS,CAACsuB,EAAIS,GAAGT,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,2BAA2BmyB,EAAIS,GAAG,KAAKN,EAAG,IAAI,CAACI,YAAY,cAAcG,MAAM,CAACS,MAAOnB,EAAIoB,kBAAkB,CAACjB,EAAG,QAAQ,CAACS,IAAI,WAAWL,YAAY,uBAAuB7uB,MAAM,CAAC,GAAK,WAAW,KAAOsuB,EAAI4B,kBAAkB,KAAO,WAAW,YAAc,MAAM,eAAiB,OAAO,aAAe5B,EAAIwB,oBAAsB,mBAAqB,MAAM,YAAcxB,EAAInyB,EAAE,OAAQ,YAAY,aAAamyB,EAAInyB,EAAE,OAAQ,YAAY,SAAW,MAAMmyB,EAAIS,GAAG,KAAKN,EAAG,QAAQ,CAACI,YAAY,UAAU7uB,MAAM,CAAC,IAAM,aAAa,CAACsuB,EAAIS,GAAGT,EAAIc,GAAGd,EAAInyB,EAAE,gBAAgBmyB,EAAIS,GAAG,KAAKN,EAAG,IAAI,CAACI,YAAY,kBAAkB7uB,MAAM,CAAC,KAAO,KAAKyE,GAAG,CAAC,MAAQ,SAASkqB,GAAyD,OAAjDA,EAAO3gB,kBAAkB2gB,EAAOnhB,iBAAwB8gB,EAAI6B,eAAenT,MAAM,KAAMC,cAAc,CAACwR,EAAG,MAAM,CAACzuB,MAAM,CAAC,IAAMsuB,EAAI8B,WAAW,IAAM9B,EAAInyB,EAAE,OAAQ,qCAAqCmyB,EAAIS,GAAG,KAAKN,EAAG,cAAc,CAACzuB,MAAM,CAAC,QAAUsuB,EAAIjoB,QAAQ,kBAAkBioB,EAAIW,kBAAkBX,EAAIS,GAAG,KAAMT,EAAmB,gBAAEG,EAAG,IAAI,CAACI,YAAY,4BAA4B,CAACP,EAAIS,GAAG,WAAWT,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,gCAAgC,YAAamyB,EAAgB,aAAEG,EAAG,IAAI,CAACI,YAAY,2BAA2B,CAACP,EAAIS,GAAG,WAAWT,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,kBAAkB,YAAYmyB,EAAIe,KAAKf,EAAIS,GAAG,KAAMT,EAAI+B,eAAiB/B,EAAI+B,cAAgB,IAAM5B,EAAG,IAAI,CAACI,YAAY,wBAAwB,CAACP,EAAIS,GAAG,WAAWT,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,4HAA4H,YAAYmyB,EAAIe,KAAKf,EAAIS,GAAG,KAAMT,EAAe,YAAEG,EAAG,QAAQ,CAACzuB,MAAM,CAAC,KAAO,SAAS,KAAO,gBAAgB8uB,SAAS,CAAC,MAAQR,EAAIgC,eAAehC,EAAIe,KAAKf,EAAIS,GAAG,KAAKN,EAAG,QAAQ,CAACzuB,MAAM,CAAC,KAAO,SAAS,KAAO,YAAY8uB,SAAS,CAAC,MAAQR,EAAIiC,YAAYjC,EAAIS,GAAG,KAAKN,EAAG,QAAQ,CAACzuB,MAAM,CAAC,KAAO,SAAS,KAAO,mBAAmB8uB,SAAS,CAAC,MAAQR,EAAIkC,kBAAkBlC,EAAIS,GAAG,KAAKN,EAAG,QAAQ,CAACzuB,MAAM,CAAC,KAAO,SAAS,KAAO,gBAAgB8uB,SAAS,CAAC,MAAQR,EAAIzxB,GAAGmE,gBAAgBstB,EAAIS,GAAG,KAAMT,EAAe,YAAEG,EAAG,QAAQ,CAACzuB,MAAM,CAAC,KAAO,SAAS,KAAO,SAAS,MAAQ,OAAOsuB,EAAIe,MAAM,OACv4H,IDUpB,EACA,KACA,WACA,MAIF,GAAe,GAAiB,mvGEsChC,ulBCxDkM,GD4DlM,CACA,6BACA,YACA,eACA,qBACA,mBAEA,OACA,UACA,YACA,YAEA,aACA,sBACA,YAEA,gBACA,aACA,YAEA,qBACA,aACA,YAEA,SACA,aACA,YAEA,aACA,aACA,YAEA,wBACA,aACA,aAGA,KArCA,WAsCA,OACA,mBACA,WACA,sBAGA,SACA,aADA,WACA,WACA,8CAEA,sCACA,kBAEA,OADA,iBACA,KAEA,gBACA,kCACA,mBACA,gBACA,sBAGA,qBAGA,sBAnBA,SAmBA,GACA,IEhGoCoB,EAC7BzzB,EF+FP,cAOA,OALA,IACA,kBACA,mBAGA,SACA,MACA,SACA,uGAEA,4BAGA,uBAGA,OElHoCyzB,EFkHpC,EEjHOzzB,GAAMqkB,EAAAA,EAAAA,aAAY,yBAEjBqP,GAAAA,QAAAA,KAAW1zB,EAAK,CAAEyzB,UAAAA,IACvBpwB,MAAK,SAAAswB,GAAI,OAAIA,EAAKzzB,SF+GrB,kBAIA,GAHA,4DACA,kBAEA,2DAEA,MADA,uCACA,OAaA,OAVA,kFACA,uDACA,gBACA,GADA,IAEA,uEAIA,6DACA,iBACA,KAEA,mBAEA,MADA,4CACA,MAGA,KAjEA,SAiEA,GACA,kBACA,6DAOA,gDACA,kBAIA,OAHA,iBACA,uCACA,0CACA,CACA,QACA,YACA,iCACA,UACA,kEACA,4DACA,kDACA,kCAjBA,EAiBA,sCAhBA,yCAgBA,OAjBA,SAqBA,kBAEA,OADA,iBACA,KAEA,mBACA,+BACA,qBAGA,uBApGA,SAoGA,GACA,kCAEA,IEzKqCA,EAC9BF,EFwKP,mBAEA,OE3KqCE,EF2KrC,kBE1KOF,GAAMqkB,EAAAA,EAAAA,aAAY,0BAEjBqP,GAAAA,QAAAA,KAAW1zB,EAAK,CAAEE,KAAAA,IACvBmD,MAAK,SAAAswB,GAAI,OAAIA,EAAKzzB,SFwKrB,kBACA,uCACA,0BAEA,mBACA,0DACA,qBAGA,OAnHA,mKG7FIpC,GAAU,GAEdA,GAAQ81B,kBAAoB,KAC5B91B,GAAQ+1B,cAAgB,KAElB/1B,GAAQg2B,OAAS,UAAc,KAAM,QAE3Ch2B,GAAQi2B,OAAS,KACjBj2B,GAAQk2B,mBAAqB,KAEhB,KAAI,KAASl2B,IAKJ,MAAW,aAAiB,YALlD,ICbI,IAAY,QACd,ICTW,WAAa,IAAIwzB,EAAIt0B,KAASu0B,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAASD,EAAI2C,SAAW3C,EAAI4C,cAAgB5C,EAAI6C,uBAAwB1C,EAAG,OAAO,CAACS,IAAI,YAAYlvB,MAAM,CAAC,OAAS,OAAO,KAAO,SAASyE,GAAG,CAAC,OAAS,SAASkqB,GAAgC,OAAxBA,EAAOnhB,iBAAwB8gB,EAAI5gB,OAAOsP,MAAM,KAAMC,cAAc,CAACwR,EAAG,WAAW,CAACA,EAAG,IAAI,CAACI,YAAY,wBAAwB,CAACJ,EAAG,QAAQ,CAACI,YAAY,UAAU7uB,MAAM,CAAC,IAAM,SAAS,CAACsuB,EAAIS,GAAGT,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,0BAAyBmyB,EAAIS,GAAG,KAAKN,EAAG,QAAQ,CAACkB,WAAW,CAAC,CAAC/kB,KAAK,QAAQglB,QAAQ,UAAU9xB,MAAOwwB,EAAQ,KAAEuB,WAAW,SAASX,IAAI,OAAOlvB,MAAM,CAAC,GAAK,OAAO,KAAO,OAAO,KAAO,OAAO,aAAesuB,EAAIwB,oBAAsB,KAAO,MAAM,YAAcxB,EAAInyB,EAAE,OAAQ,qBAAqB,aAAamyB,EAAInyB,EAAE,OAAQ,qBAAqB,SAAW,IAAI2yB,SAAS,CAAC,MAASR,EAAQ,MAAG7pB,GAAG,CAAC,OAAS,SAASkqB,GAAQ,OAAOL,EAAIM,MAAM,kBAAmBN,EAAI2B,OAAO,MAAQ,SAAStB,GAAWA,EAAOlZ,OAAOua,YAAqB1B,EAAI2B,KAAKtB,EAAOlZ,OAAO3X,aAAYwwB,EAAIS,GAAG,KAAOT,EAAI8C,iBAAmM9C,EAAIe,KAArLZ,EAAG,MAAM,CAACI,YAAY,iDAAiD,CAACP,EAAIS,GAAG,WAAWT,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,sDAAsD,YAAqBmyB,EAAIS,GAAG,KAAMT,EAAoB,iBAAEG,EAAG,cAAc,CAACzuB,MAAM,CAAC,QAAUsuB,EAAIjoB,QAAQ,kBAAkBioB,EAAIW,gBAAgBxqB,GAAG,CAAC,MAAQ6pB,EAAI+C,gBAAgB/C,EAAIe,MAAM,KAAOf,EAAI6C,uBAA6W7C,EAAI2C,SAAY3C,EAAI4C,YAA+W5C,EAAIe,KAAtWZ,EAAG,MAAM,CAACI,YAAY,+BAA+B,CAACJ,EAAG,eAAe,CAACzuB,MAAM,CAAC,KAAO,QAAQsuB,EAAIS,GAAG,KAAKN,EAAG,KAAK,CAACH,EAAIS,GAAGT,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,qCAAqCmyB,EAAIS,GAAG,KAAKN,EAAG,IAAI,CAACI,YAAY,aAAa,CAACP,EAAIS,GAAG,SAAST,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,4EAA4E,WAAW,GAArtBsyB,EAAG,MAAM,CAACI,YAAY,+BAA+B,CAACJ,EAAG,kBAAkB,CAACzuB,MAAM,CAAC,KAAO,QAAQsuB,EAAIS,GAAG,KAAKN,EAAG,KAAK,CAACH,EAAIS,GAAGT,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,6BAA6BmyB,EAAIS,GAAG,KAAKN,EAAG,IAAI,CAACI,YAAY,aAAa,CAACP,EAAIS,GAAG,SAAST,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,kEAAkE,WAAW,KACnuD,IDWpB,EACA,KACA,WACA,MAIF,GAAe,GAAiB,QEnB0J,GCkF1L,CACA,qBACA,OACA,UACA,YACA,aAEA,mBACA,YACA,aAEA,gBACA,aACA,aAGA,KAhBA,WAiBA,OACA,SACA,WACA,eACA,qBAGA,OACA,SADA,SACA,GACA,cAGA,SACA,eADA,WAEA,yCAEA,OAJA,WAIA,WACA,gBACA,cACA,gBACA,+CAEA,GACA,gBAGA,4BACA,mCACA,kBACA,wBACA,gDAGA,4BAEA,mBACA,sDAEA,WACA,0BAEA,gDCjII,GAAU,GAEd,GAAQy0B,kBAAoB,KAC5B,GAAQC,cAAgB,KAElB,GAAQC,OAAS,UAAc,KAAM,QAE3C,GAAQC,OAAS,KACjB,GAAQC,mBAAqB,KAEhB,KAAI,KAAS,IAKJ,MAAW,aAAiB,YALlD,ICbI,IAAY,QACd,ICTW,WAAa,IAAI1C,EAAIt0B,KAASu0B,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,OAAO,CAAChqB,GAAG,CAAC,OAAS,SAASkqB,GAAgC,OAAxBA,EAAOnhB,iBAAwB8gB,EAAI5gB,OAAOsP,MAAM,KAAMC,cAAc,CAACwR,EAAG,WAAW,CAACA,EAAG,IAAI,CAACA,EAAG,QAAQ,CAACkB,WAAW,CAAC,CAAC/kB,KAAK,QAAQglB,QAAQ,UAAU9xB,MAAOwwB,EAAQ,KAAEuB,WAAW,SAAS7vB,MAAM,CAAC,GAAK,OAAO,KAAO,OAAO,KAAO,OAAO,eAAiB,MAAM,YAAcsuB,EAAInyB,EAAE,OAAQ,qBAAqB,aAAamyB,EAAInyB,EAAE,OAAQ,qBAAqB,SAAW,IAAI2yB,SAAS,CAAC,MAASR,EAAQ,MAAG7pB,GAAG,CAAC,OAAS6pB,EAAIyB,eAAe,MAAQ,SAASpB,GAAWA,EAAOlZ,OAAOua,YAAqB1B,EAAI2B,KAAKtB,EAAOlZ,OAAO3X,WAAUwwB,EAAIS,GAAG,KAAKN,EAAG,QAAQ,CAACI,YAAY,UAAU7uB,MAAM,CAAC,IAAM,SAAS,CAACsuB,EAAIS,GAAGT,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,2BAA2BmyB,EAAIS,GAAG,KAAKN,EAAG,MAAM,CAACzuB,MAAM,CAAC,GAAK,2BAA2B,CAACyuB,EAAG,QAAQ,CAACI,YAAY,gBAAgB7uB,MAAM,CAAC,GAAK,wBAAwB,KAAO,SAAS,MAAQ,IAAI8uB,SAAS,CAAC,MAAQR,EAAInyB,EAAE,OAAQ,qBAAqBmyB,EAAIS,GAAG,KAAKN,EAAG,MAAM,CAACI,YAAY,cAAcG,MAAM,CAC9hC,sBAAuBV,EAAIjoB,QAC3B,qBAAsBioB,EAAIjoB,SAAWioB,EAAIW,eACzC,0BAA2BX,EAAIjoB,UAAYioB,EAAIW,oBAC1CX,EAAIS,GAAG,KAAsB,iBAAhBT,EAAIlkB,QAA4BqkB,EAAG,IAAI,CAACI,YAAY,UAAU,CAACP,EAAIS,GAAG,WAAWT,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,kLAAkL,YAAYsyB,EAAG,MAAMH,EAAIS,GAAG,WAAWT,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,qDAAqD,YAA6B,eAAhBmyB,EAAIlkB,QAA0BqkB,EAAG,IAAI,CAACI,YAAY,kBAAkB,CAACP,EAAIS,GAAG,WAAWT,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,kEAAmE,YAA6B,gBAAhBmyB,EAAIlkB,QAA2BqkB,EAAG,IAAI,CAACI,YAAY,kBAAkB,CAACP,EAAIS,GAAG,WAAWT,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,mEAAmE,YAAamyB,EAAW,QAAEG,EAAG,IAAI,CAACI,YAAY,SAASG,MAAM,CAACsC,QAAShD,EAAI5zB,SAAS4zB,EAAIe,KAAKf,EAAIS,GAAG,KAAKN,EAAG,IAAI,CAACzuB,MAAM,CAAC,KAAO,KAAKyE,GAAG,CAAC,MAAQ,SAASkqB,GAAgC,OAAxBA,EAAOnhB,iBAAwB8gB,EAAIM,MAAM,YAAY,CAACN,EAAIS,GAAG,WAAWT,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,kBAAkB,kBACnhC,IDOpB,EACA,KACA,WACA,MAIF,GAAe,GAAiB,kIEuDhC,QACA,sBACA,OACA,UACA,YACA,aAEA,qBACA,YACA,aAEA,gBACA,aACA,aAGA,KAhBA,WAiBA,OACA,SACA,WACA,eACA,mBACA,YACA,aACA,aAGA,OACA,SADA,SACA,GACA,cAGA,SACA,OADA,WACA,2JACA,aACA,WACA,aAHA,kBAMA,uCACA,oBACA,oBARA,qBAMA,EANA,EAMA,OAIA,qBAVA,iBAWA,yBACA,kCACA,gBAbA,4BAcA,iBAdA,iBAeA,eAfA,4BAgBA,UAhBA,uBAiBA,iBAjBA,cAmBA,UAnBA,0DAsBA,WACA,+GAvBA,yBAyBA,aAzBA,kQC3G2L,kBCWvL,GAAU,GAEd,GAAQy0B,kBAAoB,KAC5B,GAAQC,cAAgB,KAElB,GAAQC,OAAS,UAAc,KAAM,QAE3C,GAAQC,OAAS,KACjB,GAAQC,mBAAqB,KAEhB,KAAI,KAAS,IAKJ,MAAW,aAAiB,YALlD,ICbI,IAAY,QACd,ICTW,WAAa,IAAI1C,EAAIt0B,KAASu0B,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,OAAO,CAAChqB,GAAG,CAAC,OAAS,SAASkqB,GAAgC,OAAxBA,EAAOnhB,iBAAwB8gB,EAAI5gB,OAAOsP,MAAM,KAAMC,cAAc,CAACwR,EAAG,WAAW,CAACA,EAAG,IAAI,CAACA,EAAG,QAAQ,CAACI,YAAY,UAAU7uB,MAAM,CAAC,IAAM,aAAa,CAACsuB,EAAIS,GAAGT,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,oBAAoBmyB,EAAIS,GAAG,KAAKN,EAAG,QAAQ,CAACkB,WAAW,CAAC,CAAC/kB,KAAK,QAAQglB,QAAQ,UAAU9xB,MAAOwwB,EAAY,SAAEuB,WAAW,aAAa7vB,MAAM,CAAC,GAAK,WAAW,KAAO,WAAW,KAAO,WAAW,aAAe,eAAe,eAAiB,OAAO,YAAc,MAAM,SAAW,GAAG,YAAcsuB,EAAInyB,EAAE,OAAQ,iBAAiB2yB,SAAS,CAAC,MAASR,EAAY,UAAG7pB,GAAG,CAAC,MAAQ,SAASkqB,GAAWA,EAAOlZ,OAAOua,YAAqB1B,EAAIzjB,SAAS8jB,EAAOlZ,OAAO3X,aAAYwwB,EAAIS,GAAG,KAAMT,EAAa,UAAEG,EAAG,MAAM,CAACI,YAAY,UAAU,CAACJ,EAAG,IAAI,CAACH,EAAIS,GAAG,aAAaT,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,8NAA8N,cAAcmyB,EAAIS,GAAG,KAAKN,EAAG,QAAQ,CAACkB,WAAW,CAAC,CAAC/kB,KAAK,QAAQglB,QAAQ,UAAU9xB,MAAOwwB,EAAW,QAAEuB,WAAW,YAAYhB,YAAY,WAAW7uB,MAAM,CAAC,GAAK,qBAAqB,KAAO,YAAY8uB,SAAS,CAAC,QAAUyC,MAAMC,QAAQlD,EAAImD,SAASnD,EAAIoD,GAAGpD,EAAImD,QAAQ,OAAO,EAAGnD,EAAW,SAAG7pB,GAAG,CAAC,OAAS,SAASkqB,GAAQ,IAAIgD,EAAIrD,EAAImD,QAAQG,EAAKjD,EAAOlZ,OAAOoc,IAAID,EAAKla,QAAuB,GAAG6Z,MAAMC,QAAQG,GAAK,CAAC,IAAaG,EAAIxD,EAAIoD,GAAGC,EAAhB,MAA4BC,EAAKla,QAASoa,EAAI,IAAIxD,EAAImD,QAAQE,EAAII,OAAO,CAAzE,QAAsFD,GAAK,IAAIxD,EAAImD,QAAQE,EAAIK,MAAM,EAAEF,GAAKC,OAAOJ,EAAIK,MAAMF,EAAI,UAAWxD,EAAImD,QAAQI,MAASvD,EAAIS,GAAG,KAAKN,EAAG,QAAQ,CAACzuB,MAAM,CAAC,IAAM,uBAAuB,CAACsuB,EAAIS,GAAG,aAAaT,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,0BAA2B,gBAAgBmyB,EAAIe,KAAKf,EAAIS,GAAG,KAAKN,EAAG,MAAM,CAACzuB,MAAM,CAAC,GAAK,mBAAmB,CAACyuB,EAAG,QAAQ,CAACI,YAAY,gBAAgB7uB,MAAM,CAAC,GAAK,SAAS,KAAO,SAAS,MAAQ,IAAI8uB,SAAS,CAAC,MAASR,EAAIjoB,QAA4CioB,EAAInyB,EAAE,OAAQ,sBAAhDmyB,EAAInyB,EAAE,OAAQ,qBAA2DmyB,EAAIS,GAAG,KAAKN,EAAG,MAAM,CAACI,YAAY,cAAcG,MAAM,CACtnE,qBAAsBV,EAAIjoB,SAAWioB,EAAIW,eACzC,0BAA2BX,EAAIjoB,UAAYioB,EAAIW,oBAC1CX,EAAIS,GAAG,KAAMT,EAAI5zB,OAAS4zB,EAAIlkB,QAASqkB,EAAG,IAAI,CAACO,MAAM,CAACsC,QAAShD,EAAI5zB,QAAQ,CAAC4zB,EAAIS,GAAG,WAAWT,EAAIc,GAAGd,EAAIlkB,SAAS,YAAYkkB,EAAIe,WACtH,IDQpB,EACA,KACA,WACA,MAIF,GAAe,GAAiB,QEoGhC,6BACA,GAAoB,MAAhBlM,GAAM8O,MACV,IACA,4BACA,8BACA,yCACA,SACA,mDAIA,IClI4K,GDkI5K,CACA,aAEA,YACA,aACA,yBACA,iBACA,mBAGA,KAVA,WAWA,OACA,WACA,iDACA,qBACA,iBAGA,iDACA,qDACA,2DACA,8DACA,iDACA,qEACA,uEACA,oEACA,sEACA,kEACA,4BACA,iEACA,4EACA,4CACA,mDACA,2DACA,4DAGA,SACA,sBADA,WAEA,4BACA,mCE/JI,GAAU,GAEd,GAAQrB,kBAAoB,KAC5B,GAAQC,cAAgB,KAElB,GAAQC,OAAS,UAAc,KAAM,QAE3C,GAAQC,OAAS,KACjB,GAAQC,mBAAqB,KAEhB,KAAI,KAAS,IAKJ,MAAW,aAAiB,YALlD,ICFA,IAXgB,QACd,I5BTW,WAAa,IAAI1C,EAAIt0B,KAASu0B,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAASD,EAAI4D,eAAiB5D,EAAI6D,YAAa1D,EAAG,MAAM,CAACA,EAAG,aAAa,CAACzuB,MAAM,CAAC,KAAO,OAAO,KAAO,WAAW,CAAGsuB,EAAI8D,mBAAsB9D,EAAI+D,eAA6C,KAA5B/D,EAAIgE,qBAA0iDhE,EAAIjoB,SAAWioB,EAAI8D,kBAAmB3D,EAAG,MAAM,CAAC9wB,IAAI,QAAQkxB,YAAY,oBAAoB,CAACJ,EAAG,wBAAwB,CAACzuB,MAAM,CAAC,SAAWsuB,EAAI2B,KAAK,eAAe3B,EAAIgC,YAAY,kBAAkBhC,EAAIW,eAAe,wBAAwBX,EAAIwB,oBAAoB,WAAWxB,EAAI2C,QAAQ,eAAe3C,EAAI4C,YAAY,4BAA4B5C,EAAI6C,wBAAwB1sB,GAAG,CAAC,kBAAkB,SAASkqB,GAAQL,EAAI2B,KAAKtB,GAAQ,OAAS,SAASA,GAAQL,EAAIjoB,SAAU,MAASioB,EAAIS,GAAG,KAAKN,EAAG,IAAI,CAACzuB,MAAM,CAAC,KAAO,KAAKyE,GAAG,CAAC,MAAQ,SAASkqB,GAAQA,EAAOnhB,iBAAiB8gB,EAAI8D,mBAAoB,KAAS,CAAC9D,EAAIS,GAAG,aAAaT,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,SAAS,eAAe,IAAKmyB,EAAIjoB,SAAWioB,EAAIiE,iBAAkB9D,EAAG,MAAM,CAAC9wB,IAAI,QAAQkxB,YAAY,oBAAoB,CAACJ,EAAG,MAAM,CAACI,YAAY,2BAA2B,CAAEP,EAAiB,cAAEG,EAAG,gBAAgB,CAACzuB,MAAM,CAAC,SAAWsuB,EAAI2B,KAAK,sBAAsB3B,EAAIkE,kBAAkB,kBAAkBlE,EAAIW,gBAAgBxqB,GAAG,CAAC,kBAAkB,SAASkqB,GAAQL,EAAI2B,KAAKtB,GAAQ,MAAQ,SAASA,GAAQL,EAAI+D,eAAgB,MAAU/D,EAAIe,MAAM,KAAkC,KAA5Bf,EAAIgE,oBAA4B7D,EAAG,MAAM,CAACA,EAAG,iBAAiB,CAACzuB,MAAM,CAAC,SAAWsuB,EAAI2B,KAAK,wBAAwB3B,EAAIgE,oBAAoB,kBAAkBhE,EAAIW,gBAAgBxqB,GAAG,CAAC,kBAAkB,SAASkqB,GAAQL,EAAI2B,KAAKtB,GAAQ,KAAOL,EAAImE,0BAA0B,GAAGnE,EAAIe,KAAv2FZ,EAAG,MAAM,CAAC9wB,IAAI,SAAS,CAAC8wB,EAAG,YAAY,CAACzuB,MAAM,CAAC,SAAWsuB,EAAI2B,KAAK,eAAe3B,EAAIgC,YAAY,eAAehC,EAAI6D,YAAY,SAAW7D,EAAIoE,SAAS,OAASpE,EAAIqE,OAAO,iBAAiBrE,EAAI+B,cAAc,kBAAkB/B,EAAIW,eAAe,wBAAwBX,EAAIwB,qBAAqBrrB,GAAG,CAAC,kBAAkB,SAASkqB,GAAQL,EAAI2B,KAAKtB,GAAQ,OAAS,SAASA,GAAQL,EAAIjoB,SAAU,MAASioB,EAAIS,GAAG,KAAMT,EAAIiE,kBAA8C,KAA1BjE,EAAIkE,kBAA0B/D,EAAG,IAAI,CAACzuB,MAAM,CAAC,GAAK,gBAAgB,KAAOsuB,EAAIkE,oBAAoB,CAAClE,EAAIS,GAAG,aAAaT,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,qBAAqB,cAAemyB,EAAIiE,mBAAqBjE,EAAI+D,cAAe5D,EAAG,IAAI,CAACzuB,MAAM,CAAC,GAAK,gBAAgB,KAAOsuB,EAAIkE,mBAAmB/tB,GAAG,CAAC,MAAQ,SAASkqB,GAAQA,EAAOnhB,iBAAiB8gB,EAAI+D,eAAgB,KAAQ,CAAC/D,EAAIS,GAAG,aAAaT,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,qBAAqB,cAAcmyB,EAAIe,KAAKf,EAAIS,GAAG,KAAKN,EAAG,MAAMH,EAAIS,GAAG,KAAMT,EAAmB,gBAAE,CAAEA,EAA0B,uBAAEG,EAAG,MAAM,CAACI,YAAY,sBAAsB,CAAEP,EAAmB,gBAAEG,EAAG,IAAI,CAACI,YAAY,SAASG,MAAM,CAAE,0BAA2BV,EAAIsE,wBAAyB5yB,MAAM,CAAC,KAAO,KAAKyE,GAAG,CAAC,MAAQ,SAASkqB,GAAQA,EAAOnhB,iBAAiB8gB,EAAI8D,mBAAoB,KAAQ,CAAC9D,EAAIS,GAAG,iBAAiBT,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,yBAAyB,kBAAkBmyB,EAAIe,OAAOZ,EAAG,IAAI,CAACzuB,MAAM,CAAC,KAAO,KAAKyE,GAAG,CAAC,MAAQ,SAASkqB,GAAQA,EAAOnhB,iBAAiB8gB,EAAI8D,mBAAoB,KAAQ,CAAC9D,EAAIS,GAAG,eAAeT,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,yBAAyB,iBAAiBmyB,EAAIe,MAAM,MAAs2C,GAAGZ,EAAG,MAAM,CAACA,EAAG,aAAa,CAACzuB,MAAM,CAAC,KAAO,OAAO,KAAO,WAAW,CAACyuB,EAAG,MAAM,CAACI,YAAY,WAAW,CAACP,EAAIS,GAAG,WAAWT,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,6BAA6BsyB,EAAG,MAAMH,EAAIS,GAAG,KAAKN,EAAG,QAAQ,CAACH,EAAIS,GAAGT,EAAIc,GAAGd,EAAInyB,EAAE,OAAQ,uCAAuC,mBAAmB,KACx5G,I4BWpB,EACA,KACA,KACA,MAI8B,QCMhC,IACCe,KADc,WAEb,MAAO,CACNL,GAAAA,KAGFg2B,QAAS,CACR12B,EAAGwhB,GAAAA,UAAAA,KAAoBA,IACvBjH,EAAGiH,GAAAA,gBAAAA,KAA0BA,MCD/BmV,EAAAA,QAAAA,MAAUC,KAGV,IADaD,EAAAA,QAAAA,OAAWE,MACbC,OAAO,iFChCdC,QAA0B,GAA4B,KAE1DA,EAAwBvuB,KAAK,CAACwuB,EAAOh0B,GAAI,sJAAuJ,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,mEAAmE,MAAQ,GAAG,SAAW,6CAA6C,eAAiB,CAAC,qkBAAqkB,WAAa,MAEr8B,6ECJI+zB,QAA0B,GAA4B,KAE1DA,EAAwBvuB,KAAK,CAACwuB,EAAOh0B,GAAI,oDAAqD,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,2DAA2D,MAAQ,GAAG,SAAW,wBAAwB,eAAiB,CAAC,u+IAA09I,WAAa,MAE3tJ,6ECJI+zB,QAA0B,GAA4B,KAE1DA,EAAwBvuB,KAAK,CAACwuB,EAAOh0B,GAAI,2HAA4H,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,4DAA4D,MAAQ,GAAG,SAAW,8CAA8C,eAAiB,CAAC,wpIAAwpI,WAAa,MAEv/I,6ECJI+zB,QAA0B,GAA4B,KAE1DA,EAAwBvuB,KAAK,CAACwuB,EAAOh0B,GAAI,4KAA6K,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,wCAAwC,MAAQ,GAAG,SAAW,6CAA6C,eAAiB,CAAC,qpNAA8oN,WAAa,MAEzgO,6BCPA,IAAIugB,EAAa,EAAQ,OAEzByT,EAAOC,SAAW1T,EAAoB,SAAKA,GAAYra,SAAS,CAAC,EAAI,SAASguB,EAAUC,EAAOC,EAAQC,EAASt2B,GAC5G,IAAIu2B,EAAQC,EAAiBL,EAAUK,gBAAkB,SAAS/c,EAAQgd,GACtE,GAAIlzB,OAAOmC,UAAUgxB,eAAej5B,KAAKgc,EAAQgd,GAC/C,OAAOhd,EAAOgd,IAKtB,OAAoa,OAA3ZF,EAASC,EAAeH,EAAQ,MAAM54B,KAAe,MAAV24B,EAAiBA,EAAUD,EAAUQ,aAAe,GAAgF,OAA1EJ,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,cAAgBA,EAAQ,CAAC,KAAO,KAAK,KAAO,GAAG,GAAKJ,EAAUS,QAAQ,EAAG52B,EAAM,GAAG,QAAUm2B,EAAUS,QAAQ,EAAG52B,EAAM,GAAG,KAAOA,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,EAAE,OAAS,GAAG,IAAM,CAAC,KAAO,GAAG,OAAS,OAAiBu2B,EAAS,IACpb,EAAI,SAASJ,EAAUC,EAAOC,EAAQC,EAASt2B,GAC7C,IAAIu2B,EAAQC,EAAiBL,EAAUK,gBAAkB,SAAS/c,EAAQgd,GACtE,GAAIlzB,OAAOmC,UAAUgxB,eAAej5B,KAAKgc,EAAQgd,GAC/C,OAAOhd,EAAOgd,IAKtB,OAAsZ,OAA7YF,EAASC,EAAeH,EAAQ,MAAM54B,KAAe,MAAV24B,EAAiBA,EAAUD,EAAUQ,aAAe,GAAgF,OAA1EJ,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,gBAAkBA,EAAQ,CAAC,KAAO,KAAK,KAAO,GAAG,GAAKJ,EAAUS,QAAQ,EAAG52B,EAAM,GAAG,QAAUm2B,EAAUU,KAAK,KAAO72B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,EAAE,OAAS,GAAG,IAAM,CAAC,KAAO,EAAE,OAAS,OAAiBu2B,EAAS,IACta,EAAI,SAASJ,EAAUC,EAAOC,EAAQC,EAASt2B,GAC7C,IAAIu2B,EAAQO,EAAOX,EAAUY,OAAQC,EAAOb,EAAUc,iBAAkBT,EAAiBL,EAAUK,gBAAkB,SAAS/c,EAAQgd,GAClI,GAAIlzB,OAAOmC,UAAUgxB,eAAej5B,KAAKgc,EAAQgd,GAC/C,OAAOhd,EAAOgd,IAKtB,MAAO,+CACHO,EAAOF,EAAmF,OAA1EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,cAAgBA,EAASH,IAChJ,yBACAY,EAAOF,EAAmF,OAA1EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,UAAYA,EAASH,IAC5I,oCACAY,EAAOF,EAAmF,OAA1EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,UAAYA,EAASH,IAC5I,gBACAY,EAAOF,EAAmF,OAA1EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,UAAYA,EAASH,IAC5I,gBACAY,EAAOF,EAAmF,OAA1EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,UAAYA,EAASH,IAC5I,uCACJ,EAAI,SAASD,EAAUC,EAAOC,EAAQC,EAASt2B,GAC7C,IAAIu2B,EAAQO,EAAOX,EAAUY,OAAQC,EAAOb,EAAUc,iBAAkBT,EAAiBL,EAAUK,gBAAkB,SAAS/c,EAAQgd,GAClI,GAAIlzB,OAAOmC,UAAUgxB,eAAej5B,KAAKgc,EAAQgd,GAC/C,OAAOhd,EAAOgd,IAKtB,MAAO,iBACHO,EAAOF,EAAmF,OAA1EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,UAAYA,EAASH,IAC5I,oCACAY,EAAOF,EAAmF,OAA1EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,UAAYA,EAASH,IAC5I,gBACAY,EAAOF,EAAmF,OAA1EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,UAAYA,EAASH,IAC5I,gBACAY,EAAOF,EAAmF,OAA1EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,UAAYA,EAASH,IAC5I,2BACJ,EAAI,SAASD,EAAUC,EAAOC,EAAQC,EAASt2B,GAC7C,IAAIu2B,EAAQC,EAAiBL,EAAUK,gBAAkB,SAAS/c,EAAQgd,GACtE,GAAIlzB,OAAOmC,UAAUgxB,eAAej5B,KAAKgc,EAAQgd,GAC/C,OAAOhd,EAAOgd,IAKtB,OAAsa,OAA7ZF,EAASC,EAAeH,EAAQ,MAAM54B,KAAe,MAAV24B,EAAiBA,EAAUD,EAAUQ,aAAe,GAAgF,OAA1EJ,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,cAAgBA,EAAQ,CAAC,KAAO,KAAK,KAAO,GAAG,GAAKJ,EAAUS,QAAQ,EAAG52B,EAAM,GAAG,QAAUm2B,EAAUS,QAAQ,GAAI52B,EAAM,GAAG,KAAOA,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,GAAG,IAAM,CAAC,KAAO,GAAG,OAAS,OAAiBu2B,EAAS,IACtb,EAAI,SAASJ,EAAUC,EAAOC,EAAQC,EAASt2B,GAC7C,IAAIu2B,EAAQC,EAAiBL,EAAUK,gBAAkB,SAAS/c,EAAQgd,GACtE,GAAIlzB,OAAOmC,UAAUgxB,eAAej5B,KAAKgc,EAAQgd,GAC/C,OAAOhd,EAAOgd,IAKtB,OAAwZ,OAA/YF,EAASC,EAAeH,EAAQ,MAAM54B,KAAe,MAAV24B,EAAiBA,EAAUD,EAAUQ,aAAe,GAAgF,OAA1EJ,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,gBAAkBA,EAAQ,CAAC,KAAO,KAAK,KAAO,GAAG,GAAKJ,EAAUS,QAAQ,EAAG52B,EAAM,GAAG,QAAUm2B,EAAUU,KAAK,KAAO72B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,GAAG,IAAM,CAAC,KAAO,GAAG,OAAS,OAAiBu2B,EAAS,IACxa,EAAI,SAASJ,EAAUC,EAAOC,EAAQC,EAASt2B,GAC7C,IAAIu2B,EAAQC,EAAiBL,EAAUK,gBAAkB,SAAS/c,EAAQgd,GACtE,GAAIlzB,OAAOmC,UAAUgxB,eAAej5B,KAAKgc,EAAQgd,GAC/C,OAAOhd,EAAOgd,IAKtB,MAAO,+CACHN,EAAUc,iBAAiBd,EAAUY,OAAmF,OAA1ER,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,cAAgBA,EAASH,IAC9K,wDACJ,GAAK,SAASD,EAAUC,EAAOC,EAAQC,EAASt2B,GAC9C,MAAO,oCACT,GAAK,SAASm2B,EAAUC,EAAOC,EAAQC,EAASt2B,GAC9C,IAAIu2B,EAAQC,EAAiBL,EAAUK,gBAAkB,SAAS/c,EAAQgd,GACtE,GAAIlzB,OAAOmC,UAAUgxB,eAAej5B,KAAKgc,EAAQgd,GAC/C,OAAOhd,EAAOgd,IAKtB,OAAyZ,OAAhZF,EAASC,EAAeH,EAAQ,MAAM54B,KAAe,MAAV24B,EAAiBA,EAAUD,EAAUQ,aAAe,GAAgF,OAA1EJ,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,gBAAkBA,EAAQ,CAAC,KAAO,KAAK,KAAO,GAAG,GAAKJ,EAAUS,QAAQ,GAAI52B,EAAM,GAAG,QAAUm2B,EAAUU,KAAK,KAAO72B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,GAAG,IAAM,CAAC,KAAO,GAAG,OAAS,OAAiBu2B,EAAS,IACza,GAAK,SAASJ,EAAUC,EAAOC,EAAQC,EAASt2B,GAC9C,IAAIu2B,EAAQO,EAAOX,EAAUY,OAAQC,EAAOb,EAAUc,iBAAkBT,EAAiBL,EAAUK,gBAAkB,SAAS/c,EAAQgd,GAClI,GAAIlzB,OAAOmC,UAAUgxB,eAAej5B,KAAKgc,EAAQgd,GAC/C,OAAOhd,EAAOgd,IAKtB,MAAO,qDACHO,EAAOF,EAAmF,OAA1EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,cAAgBA,EAASH,IAChJ,oCACAY,EAAOF,EAAmF,OAA1EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,YAAcA,EAASH,IAC9I,2CACAY,EAAOF,EAAmF,OAA1EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,eAAiBA,EAASH,IACjJ,4CACAY,EAAOF,EAAmF,OAA1EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,kBAAoBA,EAASH,IACpJ,sBACJ,GAAK,SAASD,EAAUC,EAAOC,EAAQC,EAASt2B,GAC9C,IAAIu2B,EAAQO,EAAOX,EAAUY,OAAQC,EAAOb,EAAUc,iBAAkBT,EAAiBL,EAAUK,gBAAkB,SAAS/c,EAAQgd,GAClI,GAAIlzB,OAAOmC,UAAUgxB,eAAej5B,KAAKgc,EAAQgd,GAC/C,OAAOhd,EAAOgd,IAKtB,MAAO,oDACHO,EAAOF,EAAmF,OAA1EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,YAAcA,EAASH,IAC9I,yCACAY,EAAOF,EAAmF,OAA1EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,eAAiBA,EAASH,IACjJ,0CACAY,EAAOF,EAAmF,OAA1EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,kBAAoBA,EAASH,IACpJ,sBACJ,GAAK,SAASD,EAAUC,EAAOC,EAAQC,EAASt2B,GAC9C,IAAIu2B,EAAQO,EAAOX,EAAUY,OAAQC,EAAOb,EAAUc,iBAAkBT,EAAiBL,EAAUK,gBAAkB,SAAS/c,EAAQgd,GAClI,GAAIlzB,OAAOmC,UAAUgxB,eAAej5B,KAAKgc,EAAQgd,GAC/C,OAAOhd,EAAOgd,IAKtB,MAAO,+BACHO,EAAOF,EAAsJ,OAA7IP,EAAqF,OAA1EA,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,aAAeA,GAAmBC,EAAeD,EAAO,aAAeA,EAASH,IAClN,YACAY,EAAOF,EAAsJ,OAA7IP,EAAqF,OAA1EA,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,aAAeA,GAAmBC,EAAeD,EAAO,SAAWA,EAASH,IAC9M,mBACAY,EAAOF,EAAsJ,OAA7IP,EAAqF,OAA1EA,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,aAAeA,GAAmBC,EAAeD,EAAO,QAAUA,EAASH,IAC7M,UACAY,EAAOF,EAAsJ,OAA7IP,EAAqF,OAA1EA,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,aAAeA,GAAmBC,EAAeD,EAAO,SAAWA,EAASH,IAC9M,cACJ,GAAK,SAASD,EAAUC,EAAOC,EAAQC,EAASt2B,GAC9C,IAAIu2B,EAAQO,EAAOX,EAAUY,OAAQC,EAAOb,EAAUc,iBAAkBT,EAAiBL,EAAUK,gBAAkB,SAAS/c,EAAQgd,GAClI,GAAIlzB,OAAOmC,UAAUgxB,eAAej5B,KAAKgc,EAAQgd,GAC/C,OAAOhd,EAAOgd,IAKtB,MAAO,kCACHO,EAAOF,EAAyJ,OAAhJP,EAAqF,OAA1EA,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,gBAAkBA,GAAmBC,EAAeD,EAAO,aAAeA,EAASH,IACrN,YACAY,EAAOF,EAAyJ,OAAhJP,EAAqF,OAA1EA,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,gBAAkBA,GAAmBC,EAAeD,EAAO,SAAWA,EAASH,IACjN,mBACAY,EAAOF,EAAyJ,OAAhJP,EAAqF,OAA1EA,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,gBAAkBA,GAAmBC,EAAeD,EAAO,QAAUA,EAASH,IAChN,UACAY,EAAOF,EAAyJ,OAAhJP,EAAqF,OAA1EA,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,gBAAkBA,GAAmBC,EAAeD,EAAO,SAAWA,EAASH,IACjN,cACJ,GAAK,SAASD,EAAUC,EAAOC,EAAQC,EAASt2B,GAC9C,IAAIu2B,EAAQC,EAAiBL,EAAUK,gBAAkB,SAAS/c,EAAQgd,GACtE,GAAIlzB,OAAOmC,UAAUgxB,eAAej5B,KAAKgc,EAAQgd,GAC/C,OAAOhd,EAAOgd,IAKtB,MAAO,iGAC+Y,OAAhZF,EAASC,EAAeH,EAAQ,QAAQ54B,KAAe,MAAV24B,EAAiBA,EAAUD,EAAUQ,aAAe,GAAgF,OAA1EJ,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,WAAaA,EAAQ,CAAC,KAAO,OAAO,KAAO,GAAG,GAAKJ,EAAUS,QAAQ,GAAI52B,EAAM,GAAG,QAAUm2B,EAAUU,KAAK,KAAO72B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,GAAG,IAAM,CAAC,KAAO,GAAG,OAAS,QAAkBu2B,EAAS,IACla,yBACJ,GAAK,SAASJ,EAAUC,EAAOC,EAAQC,EAASt2B,GAC9C,IAAIk3B,EAAQJ,EAAiB,MAAVV,EAAiBA,EAAUD,EAAUQ,aAAe,GAAKK,EAAOb,EAAUgB,MAAMC,cAAeC,EAAO,WAAYC,EAAOnB,EAAUc,iBAAkBT,EAAiBL,EAAUK,gBAAkB,SAAS/c,EAAQgd,GAClO,GAAIlzB,OAAOmC,UAAUgxB,eAAej5B,KAAKgc,EAAQgd,GAC/C,OAAOhd,EAAOgd,IAKtB,MAAO,gCACHa,SAASJ,EAA6H,OAAnHA,EAASV,EAAeH,EAAQ,eAA2B,MAAVD,EAAiBI,EAAeJ,EAAO,aAAeA,IAAmBc,EAASF,KAA2BK,EAASH,EAAOz5B,KAAKq5B,EAAO,CAAC,KAAO,YAAY,KAAO,GAAG,KAAO92B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,IAAI,IAAM,CAAC,KAAO,GAAG,OAAS,OAASk3B,GACjU,2BACAI,SAASJ,EAAmH,OAAzGA,EAASV,EAAeH,EAAQ,UAAsB,MAAVD,EAAiBI,EAAeJ,EAAO,QAAUA,IAAmBc,EAASF,KAA2BK,EAASH,EAAOz5B,KAAKq5B,EAAO,CAAC,KAAO,OAAO,KAAO,GAAG,KAAO92B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,IAAI,IAAM,CAAC,KAAO,GAAG,OAAS,OAASk3B,GAClT,8BACAI,SAASJ,EAAqH,OAA3GA,EAASV,EAAeH,EAAQ,WAAuB,MAAVD,EAAiBI,EAAeJ,EAAO,SAAWA,IAAmBc,EAASF,KAA2BK,EAASH,EAAOz5B,KAAKq5B,EAAO,CAAC,KAAO,QAAQ,KAAO,GAAG,KAAO92B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,IAAI,IAAM,CAAC,KAAO,GAAG,OAAS,OAASk3B,GACrT,wCACJ,SAAW,CAAC,EAAE,YAAY,KAAO,SAASf,EAAUC,EAAOC,EAAQC,EAASt2B,GAC1E,IAAIu2B,EAAQO,EAAiB,MAAVV,EAAiBA,EAAUD,EAAUQ,aAAe,GAAKH,EAAiBL,EAAUK,gBAAkB,SAAS/c,EAAQgd,GACtI,GAAIlzB,OAAOmC,UAAUgxB,eAAej5B,KAAKgc,EAAQgd,GAC/C,OAAOhd,EAAOgd,IAKtB,OAA+W,OAAtWF,EAASC,EAAeH,EAAQ,MAAM54B,KAAKq5B,EAAmF,OAA1EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,UAAYA,EAAQ,CAAC,KAAO,KAAK,KAAO,GAAG,GAAKJ,EAAUS,QAAQ,EAAG52B,EAAM,GAAG,QAAUm2B,EAAUS,QAAQ,EAAG52B,EAAM,GAAG,KAAOA,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,EAAE,OAAS,GAAG,IAAM,CAAC,KAAO,GAAG,OAAS,OAAiBu2B,EAAS,KACZ,OAA7WA,EAASC,EAAeH,EAAQ,MAAM54B,KAAKq5B,EAAmF,OAA1EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,cAAgBA,EAAQ,CAAC,KAAO,KAAK,KAAO,GAAG,GAAKJ,EAAUS,QAAQ,GAAI52B,EAAM,GAAG,QAAUm2B,EAAUS,QAAQ,GAAI52B,EAAM,GAAG,KAAOA,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,GAAG,IAAM,CAAC,KAAO,GAAG,OAAS,OAAiBu2B,EAAS,KACjC,OAA5VA,EAASC,EAAeH,EAAQ,MAAM54B,KAAKq5B,EAAmF,OAA1EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,aAAeA,EAAQ,CAAC,KAAO,KAAK,KAAO,GAAG,GAAKJ,EAAUS,QAAQ,GAAI52B,EAAM,GAAG,QAAUm2B,EAAUU,KAAK,KAAO72B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,GAAG,IAAM,CAAC,KAAO,GAAG,OAAS,OAAiBu2B,EAAS,KACZ,OAAhWA,EAASC,EAAeH,EAAQ,MAAM54B,KAAKq5B,EAAmF,OAA1EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,iBAAmBA,EAAQ,CAAC,KAAO,KAAK,KAAO,GAAG,GAAKJ,EAAUS,QAAQ,GAAI52B,EAAM,GAAG,QAAUm2B,EAAUU,KAAK,KAAO72B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,GAAG,IAAM,CAAC,KAAO,GAAG,OAAS,OAAiBu2B,EAAS,KACf,OAAjWA,EAASC,EAAeH,EAAQ,MAAM54B,KAAKq5B,EAAmF,OAA1EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,kBAAoBA,EAAQ,CAAC,KAAO,KAAK,KAAO,GAAG,GAAKJ,EAAUS,QAAQ,GAAI52B,EAAM,GAAG,QAAUm2B,EAAUU,KAAK,KAAO72B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,GAAG,IAAM,CAAC,KAAO,GAAG,OAAS,OAAiBu2B,EAAS,KACvX,SAAU,2BCzMZ,IAAI/T,EAAa,EAAQ,OAEzByT,EAAOC,SAAW1T,EAAoB,SAAKA,GAAYra,SAAS,CAAC,SAAW,CAAC,EAAE,YAAY,KAAO,SAASguB,EAAUC,EAAOC,EAAQC,EAASt2B,GACzI,IAAIk3B,EAAQV,EAAiBL,EAAUK,gBAAkB,SAAS/c,EAAQgd,GACtE,GAAIlzB,OAAOmC,UAAUgxB,eAAej5B,KAAKgc,EAAQgd,GAC/C,OAAOhd,EAAOgd,IAKtB,MAAO,wEACHN,EAAUc,iBAAgO,mBAA7MC,EAA2I,OAAjIA,EAASV,EAAeH,EAAQ,sBAAkC,MAAVD,EAAiBI,EAAeJ,EAAO,oBAAsBA,IAAmBc,EAASf,EAAUgB,MAAMC,eAA+CF,EAAOz5B,KAAe,MAAV24B,EAAiBA,EAAUD,EAAUQ,aAAe,GAAI,CAAC,KAAO,mBAAmB,KAAO,GAAG,KAAO32B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,EAAE,OAAS,GAAG,IAAM,CAAC,KAAO,EAAE,OAAS,OAASk3B,GACnb,mBACJ,SAAU,2BCbZ,IAAI1U,EAAa,EAAQ,OAEzByT,EAAOC,SAAW1T,EAAoB,SAAKA,GAAYra,SAAS,CAAC,EAAI,SAASguB,EAAUC,EAAOC,EAAQC,EAASt2B,GAC5G,IAAIk3B,EAAQV,EAAiBL,EAAUK,gBAAkB,SAAS/c,EAAQgd,GACtE,GAAIlzB,OAAOmC,UAAUgxB,eAAej5B,KAAKgc,EAAQgd,GAC/C,OAAOhd,EAAOgd,IAKtB,MAAO,wEACHN,EAAUc,iBAAsO,mBAAnNC,EAAiJ,OAAvIA,EAASV,EAAeH,EAAQ,yBAAqC,MAAVD,EAAiBI,EAAeJ,EAAO,uBAAyBA,IAAmBc,EAASf,EAAUgB,MAAMC,eAA+CF,EAAOz5B,KAAe,MAAV24B,EAAiBA,EAAUD,EAAUQ,aAAe,GAAI,CAAC,KAAO,sBAAsB,KAAO,GAAG,KAAO32B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,EAAE,OAAS,GAAG,IAAM,CAAC,KAAO,EAAE,OAAS,OAASk3B,GAC5b,mBACJ,EAAI,SAASf,EAAUC,EAAOC,EAAQC,EAASt2B,GAC7C,IAAIk3B,EAAQJ,EAAiB,MAAVV,EAAiBA,EAAUD,EAAUQ,aAAe,GAAKK,EAAOb,EAAUgB,MAAMC,cAAeC,EAAO,WAAYC,EAAOnB,EAAUc,iBAAkBT,EAAiBL,EAAUK,gBAAkB,SAAS/c,EAAQgd,GAClO,GAAIlzB,OAAOmC,UAAUgxB,eAAej5B,KAAKgc,EAAQgd,GAC/C,OAAOhd,EAAOgd,IAKtB,MAAO,gCACHa,SAASJ,EAAuI,OAA7HA,EAASV,EAAeH,EAAQ,oBAAgC,MAAVD,EAAiBI,EAAeJ,EAAO,kBAAoBA,IAAmBc,EAASF,KAA2BK,EAASH,EAAOz5B,KAAKq5B,EAAO,CAAC,KAAO,iBAAiB,KAAO,GAAG,KAAO92B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,EAAE,OAAS,IAAI,IAAM,CAAC,KAAO,EAAE,OAAS,OAASk3B,GAC9U,KACAI,SAASJ,EAAiJ,OAAvIA,EAASV,EAAeH,EAAQ,yBAAqC,MAAVD,EAAiBI,EAAeJ,EAAO,uBAAyBA,IAAmBc,EAASF,KAA2BK,EAASH,EAAOz5B,KAAKq5B,EAAO,CAAC,KAAO,sBAAsB,KAAO,GAAG,KAAO92B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,EAAE,OAAS,IAAI,IAAM,CAAC,KAAO,EAAE,OAAS,OAASk3B,GAC7V,gBACJ,EAAI,SAASf,EAAUC,EAAOC,EAAQC,EAASt2B,GAC7C,IAAIu2B,EAAQC,EAAiBL,EAAUK,gBAAkB,SAAS/c,EAAQgd,GACtE,GAAIlzB,OAAOmC,UAAUgxB,eAAej5B,KAAKgc,EAAQgd,GAC/C,OAAOhd,EAAOgd,IAKtB,OAAwV,OAA/UF,EAASC,EAAeH,EAAQ,MAAM54B,KAAe,MAAV24B,EAAiBA,EAAUD,EAAUQ,aAAe,GAAe,MAAVP,EAAiBI,EAAeJ,EAAO,iBAAmBA,EAAQ,CAAC,KAAO,KAAK,KAAO,GAAG,GAAKD,EAAUS,QAAQ,EAAG52B,EAAM,GAAG,QAAUm2B,EAAUU,KAAK,KAAO72B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,GAAG,IAAM,CAAC,KAAO,GAAG,OAAS,OAAiBu2B,EAAS,IACxW,EAAI,SAASJ,EAAUC,EAAOC,EAAQC,EAASt2B,GAC7C,IAAIk3B,EAAQJ,EAAiB,MAAVV,EAAiBA,EAAUD,EAAUQ,aAAe,GAAKK,EAAOb,EAAUgB,MAAMC,cAAeC,EAAO,WAAYC,EAAOnB,EAAUc,iBAAkBT,EAAiBL,EAAUK,gBAAkB,SAAS/c,EAAQgd,GAClO,GAAIlzB,OAAOmC,UAAUgxB,eAAej5B,KAAKgc,EAAQgd,GAC/C,OAAOhd,EAAOgd,IAKtB,MAAO,gCACHa,SAASJ,EAA+I,OAArIA,EAASV,EAAeH,EAAQ,wBAAoC,MAAVD,EAAiBI,EAAeJ,EAAO,sBAAwBA,IAAmBc,EAASF,KAA2BK,EAASH,EAAOz5B,KAAKq5B,EAAO,CAAC,KAAO,qBAAqB,KAAO,GAAG,KAAO92B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,IAAI,IAAM,CAAC,KAAO,GAAG,OAAS,OAASk3B,GAC5V,KACAI,SAASJ,EAAiJ,OAAvIA,EAASV,EAAeH,EAAQ,yBAAqC,MAAVD,EAAiBI,EAAeJ,EAAO,uBAAyBA,IAAmBc,EAASF,KAA2BK,EAASH,EAAOz5B,KAAKq5B,EAAO,CAAC,KAAO,sBAAsB,KAAO,GAAG,KAAO92B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,IAAI,IAAM,CAAC,KAAO,GAAG,OAAS,OAASk3B,GAC/V,gBACJ,SAAW,CAAC,EAAE,YAAY,KAAO,SAASf,EAAUC,EAAOC,EAAQC,EAASt2B,GAC1E,IAAIu2B,EAAQO,EAAiB,MAAVV,EAAiBA,EAAUD,EAAUQ,aAAe,GAAKH,EAAiBL,EAAUK,gBAAkB,SAAS/c,EAAQgd,GACtI,GAAIlzB,OAAOmC,UAAUgxB,eAAej5B,KAAKgc,EAAQgd,GAC/C,OAAOhd,EAAOgd,IAKtB,OAAyW,OAAhWF,EAASC,EAAeH,EAAQ,UAAU54B,KAAKq5B,EAAoF,OAA3EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,YAAcA,GAAmBI,EAAeD,EAAO,UAAYA,EAAQ,CAAC,KAAO,SAAS,KAAO,GAAG,GAAKJ,EAAUS,QAAQ,EAAG52B,EAAM,GAAG,QAAUm2B,EAAUU,KAAK,KAAO72B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,EAAE,OAAS,GAAG,IAAM,CAAC,KAAO,EAAE,OAAS,QAAkBu2B,EAAS,IACrX,4CACmT,OAAjTA,EAASC,EAAeH,EAAQ,MAAM54B,KAAKq5B,EAAkB,MAAVV,EAAiBI,EAAeJ,EAAO,sBAAwBA,EAAQ,CAAC,KAAO,KAAK,KAAO,GAAG,GAAKD,EAAUS,QAAQ,EAAG52B,EAAM,GAAG,QAAUm2B,EAAUS,QAAQ,EAAG52B,EAAM,GAAG,KAAOA,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,EAAE,OAAS,GAAG,IAAM,CAAC,KAAO,GAAG,OAAS,OAAiBu2B,EAAS,KACvU,SAAU,2BC3DZ,IAAI/T,EAAa,EAAQ,OAEzByT,EAAOC,SAAW1T,EAAoB,SAAKA,GAAYra,SAAS,CAAC,SAAW,CAAC,EAAE,YAAY,KAAO,SAASguB,EAAUC,EAAOC,EAAQC,EAASt2B,GACzI,IAAIk3B,EAAQV,EAAiBL,EAAUK,gBAAkB,SAAS/c,EAAQgd,GACtE,GAAIlzB,OAAOmC,UAAUgxB,eAAej5B,KAAKgc,EAAQgd,GAC/C,OAAOhd,EAAOgd,IAKtB,MAAO,yEACHN,EAAUc,iBAAsN,mBAAnMC,EAAiI,OAAvHA,EAASV,EAAeH,EAAQ,iBAA6B,MAAVD,EAAiBI,EAAeJ,EAAO,eAAiBA,IAAmBc,EAASf,EAAUgB,MAAMC,eAA+CF,EAAOz5B,KAAe,MAAV24B,EAAiBA,EAAUD,EAAUQ,aAAe,GAAI,CAAC,KAAO,cAAc,KAAO,GAAG,KAAO32B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,EAAE,OAAS,GAAG,IAAM,CAAC,KAAO,EAAE,OAAS,OAASk3B,GACpa,mBACJ,SAAU,2BCbZ,IAAI1U,EAAa,EAAQ,OAEzByT,EAAOC,SAAW1T,EAAoB,SAAKA,GAAYra,SAAS,CAAC,SAAW,CAAC,EAAE,YAAY,KAAO,SAASguB,EAAUC,EAAOC,EAAQC,EAASt2B,GACzI,IAAIk3B,EAAQJ,EAAiB,MAAVV,EAAiBA,EAAUD,EAAUQ,aAAe,GAAKK,EAAOb,EAAUgB,MAAMC,cAAeC,EAAO,WAAYC,EAAOnB,EAAUc,iBAAkBT,EAAiBL,EAAUK,gBAAkB,SAAS/c,EAAQgd,GAClO,GAAIlzB,OAAOmC,UAAUgxB,eAAej5B,KAAKgc,EAAQgd,GAC/C,OAAOhd,EAAOgd,IAKtB,MAAO,4DACHa,SAASJ,EAA+I,OAArIA,EAASV,EAAeH,EAAQ,wBAAoC,MAAVD,EAAiBI,EAAeJ,EAAO,sBAAwBA,IAAmBc,EAASF,KAA2BK,EAASH,EAAOz5B,KAAKq5B,EAAO,CAAC,KAAO,qBAAqB,KAAO,GAAG,KAAO92B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,EAAE,OAAS,IAAI,IAAM,CAAC,KAAO,EAAE,OAAS,OAASk3B,GAC1V,wEACAI,SAASJ,EAA+I,OAArIA,EAASV,EAAeH,EAAQ,wBAAoC,MAAVD,EAAiBI,EAAeJ,EAAO,sBAAwBA,IAAmBc,EAASF,KAA2BK,EAASH,EAAOz5B,KAAKq5B,EAAO,CAAC,KAAO,qBAAqB,KAAO,GAAG,KAAO92B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,EAAE,OAAS,IAAI,IAAM,CAAC,KAAO,EAAE,OAAS,OAASk3B,GAC1V,YACAI,SAASJ,EAA+H,OAArHA,EAASV,EAAeH,EAAQ,gBAA4B,MAAVD,EAAiBI,EAAeJ,EAAO,cAAgBA,IAAmBc,EAASF,KAA2BK,EAASH,EAAOz5B,KAAKq5B,EAAO,CAAC,KAAO,aAAa,KAAO,GAAG,KAAO92B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,EAAE,OAAS,IAAI,IAAM,CAAC,KAAO,EAAE,OAAS,QAAUk3B,GACnU,uCACJ,SAAU,2BCjBZ,IAAIK,EAAM,CACT,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,KACR,UAAW,KACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,KACR,UAAW,MACX,aAAc,MACd,UAAW,KACX,OAAQ,MACR,UAAW,MACX,OAAQ,KACR,UAAW,KACX,OAAQ,MACR,UAAW,MACX,OAAQ,KACR,UAAW,KACX,OAAQ,KACR,UAAW,KACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,OAAQ,KACR,UAAW,KACX,OAAQ,MACR,UAAW,MACX,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,OAAQ,KACR,UAAW,KACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,QAAS,MACT,WAAY,MACZ,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,OAAQ,KACR,UAAW,KACX,OAAQ,MACR,UAAW,MACX,OAAQ,KACR,UAAW,KACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,gBAAiB,MACjB,aAAc,MACd,gBAAiB,MACjB,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,UAAW,MACX,aAAc,MACd,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,KACR,UAAW,KACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,KACR,UAAW,KACX,OAAQ,MACR,UAAW,MACX,OAAQ,KACR,UAAW,MACX,aAAc,MACd,UAAW,KACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,UAAW,MACX,OAAQ,MACR,UAAW,MACX,WAAY,MACZ,cAAe,MACf,UAAW,MACX,aAAc,MACd,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,YAAa,MACb,eAAgB,MAChB,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,QAAS,MACT,WAAY,MACZ,OAAQ,MACR,UAAW,MACX,OAAQ,KACR,UAAW,KACX,OAAQ,MACR,UAAW,MACX,UAAW,MACX,aAAc,MACd,QAAS,MACT,WAAY,MACZ,OAAQ,MACR,UAAW,MACX,QAAS,MACT,WAAY,MACZ,QAAS,MACT,aAAc,MACd,gBAAiB,MACjB,WAAY,MACZ,UAAW,KACX,aAAc,KACd,OAAQ,MACR,UAAW,MACX,OAAQ,MACR,UAAW,MACX,OAAQ,KACR,YAAa,MACb,eAAgB,MAChB,UAAW,KACX,OAAQ,MACR,UAAW,MACX,aAAc,MACd,gBAAiB,MACjB,OAAQ,MACR,UAAW,MACX,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,MACd,UAAW,MACX,aAAc,OAIf,SAASC,EAAeC,GACvB,IAAIx1B,EAAKy1B,EAAsBD,GAC/B,OAAOE,EAAoB11B,GAE5B,SAASy1B,EAAsBD,GAC9B,IAAIE,EAAoBC,EAAEL,EAAKE,GAAM,CACpC,IAAIluB,EAAI,IAAIlE,MAAM,uBAAyBoyB,EAAM,KAEjD,MADAluB,EAAEsuB,KAAO,mBACHtuB,EAEP,OAAOguB,EAAIE,GAEZD,EAAeM,KAAO,WACrB,OAAOv0B,OAAOu0B,KAAKP,IAEpBC,EAAejsB,QAAUmsB,EACzBzB,EAAOC,QAAUsB,EACjBA,EAAev1B,GAAK,QClShB81B,EAA2B,GAG/B,SAASJ,EAAoBK,GAE5B,IAAIC,EAAeF,EAAyBC,GAC5C,QAAqB96B,IAAjB+6B,EACH,OAAOA,EAAa/B,QAGrB,IAAID,EAAS8B,EAAyBC,GAAY,CACjD/1B,GAAI+1B,EACJE,QAAQ,EACRhC,QAAS,IAUV,OANAiC,EAAoBH,GAAUv6B,KAAKw4B,EAAOC,QAASD,EAAQA,EAAOC,QAASyB,GAG3E1B,EAAOiC,QAAS,EAGTjC,EAAOC,QAIfyB,EAAoBlR,EAAI0R,EC5BxBR,EAAoBS,KAAO,WAC1B,MAAM,IAAI/yB,MAAM,mCCDjBsyB,EAAoBU,KAAO,GlFAvB97B,EAAW,GACfo7B,EAAoBW,EAAI,SAAS92B,EAAQ+2B,EAAUC,EAAIC,GACtD,IAAGF,EAAH,CAMA,IAAIG,EAAeC,EAAAA,EACnB,IAASrjB,EAAI,EAAGA,EAAI/Y,EAASuC,OAAQwW,IAAK,CACrCijB,EAAWh8B,EAAS+Y,GAAG,GACvBkjB,EAAKj8B,EAAS+Y,GAAG,GACjBmjB,EAAWl8B,EAAS+Y,GAAG,GAE3B,IAJA,IAGIsjB,GAAY,EACPvjB,EAAI,EAAGA,EAAIkjB,EAASz5B,OAAQuW,MACpB,EAAXojB,GAAsBC,GAAgBD,IAAal1B,OAAOu0B,KAAKH,EAAoBW,GAAGO,OAAM,SAASp4B,GAAO,OAAOk3B,EAAoBW,EAAE73B,GAAK83B,EAASljB,OAC3JkjB,EAASO,OAAOzjB,IAAK,IAErBujB,GAAY,EACTH,EAAWC,IAAcA,EAAeD,IAG7C,GAAGG,EAAW,CACbr8B,EAASu8B,OAAOxjB,IAAK,GACrB,IAAIwM,EAAI0W,SACEt7B,IAAN4kB,IAAiBtgB,EAASsgB,IAGhC,OAAOtgB,EAzBNi3B,EAAWA,GAAY,EACvB,IAAI,IAAInjB,EAAI/Y,EAASuC,OAAQwW,EAAI,GAAK/Y,EAAS+Y,EAAI,GAAG,GAAKmjB,EAAUnjB,IAAK/Y,EAAS+Y,GAAK/Y,EAAS+Y,EAAI,GACrG/Y,EAAS+Y,GAAK,CAACijB,EAAUC,EAAIC,ImFJ/Bd,EAAoBne,EAAI,SAASyc,GAChC,IAAI8C,EAAS9C,GAAUA,EAAO+C,WAC7B,WAAa,OAAO/C,EAAgB,SACpC,WAAa,OAAOA,GAErB,OADA0B,EAAoBsB,EAAEF,EAAQ,CAAEnX,EAAGmX,IAC5BA,GCLRpB,EAAoBsB,EAAI,SAAS/C,EAASgD,GACzC,IAAI,IAAIz4B,KAAOy4B,EACXvB,EAAoBC,EAAEsB,EAAYz4B,KAASk3B,EAAoBC,EAAE1B,EAASz1B,IAC5E8C,OAAO41B,eAAejD,EAASz1B,EAAK,CAAE24B,YAAY,EAAM3yB,IAAKyyB,EAAWz4B,MCJ3Ek3B,EAAoBpQ,EAAI,WACvB,GAA0B,iBAAf8R,WAAyB,OAAOA,WAC3C,IACC,OAAOv8B,MAAQ,IAAIw8B,SAAS,cAAb,GACd,MAAO/vB,GACR,GAAsB,iBAAXnJ,OAAqB,OAAOA,QALjB,GCAxBu3B,EAAoBC,EAAI,SAAS2B,EAAKpmB,GAAQ,OAAO5P,OAAOmC,UAAUgxB,eAAej5B,KAAK87B,EAAKpmB,ICC/FwkB,EAAoB7V,EAAI,SAASoU,GACX,oBAAXsD,QAA0BA,OAAOC,aAC1Cl2B,OAAO41B,eAAejD,EAASsD,OAAOC,YAAa,CAAE74B,MAAO,WAE7D2C,OAAO41B,eAAejD,EAAS,aAAc,CAAEt1B,OAAO,KCLvD+2B,EAAoB+B,IAAM,SAASzD,GAGlC,OAFAA,EAAO3Y,MAAQ,GACV2Y,EAAOvc,WAAUuc,EAAOvc,SAAW,IACjCuc,GCHR0B,EAAoBtiB,EAAI,gBCAxBsiB,EAAoB9V,EAAIhW,SAAS8tB,SAAW1yB,KAAK2d,SAAShjB,KAK1D,IAAIg4B,EAAkB,CACrB,KAAM,GAaPjC,EAAoBW,EAAEjjB,EAAI,SAASwkB,GAAW,OAAoC,IAA7BD,EAAgBC,IAGrE,IAAIC,EAAuB,SAASC,EAA4B/5B,GAC/D,IAKIg4B,EAAU6B,EALVtB,EAAWv4B,EAAK,GAChBg6B,EAAch6B,EAAK,GACnBi6B,EAAUj6B,EAAK,GAGIsV,EAAI,EAC3B,GAAGijB,EAAS2B,MAAK,SAASj4B,GAAM,OAA+B,IAAxB23B,EAAgB33B,MAAe,CACrE,IAAI+1B,KAAYgC,EACZrC,EAAoBC,EAAEoC,EAAahC,KACrCL,EAAoBlR,EAAEuR,GAAYgC,EAAYhC,IAGhD,GAAGiC,EAAS,IAAIz4B,EAASy4B,EAAQtC,GAGlC,IADGoC,GAA4BA,EAA2B/5B,GACrDsV,EAAIijB,EAASz5B,OAAQwW,IACzBukB,EAAUtB,EAASjjB,GAChBqiB,EAAoBC,EAAEgC,EAAiBC,IAAYD,EAAgBC,IACrED,EAAgBC,GAAS,KAE1BD,EAAgBC,GAAW,EAE5B,OAAOlC,EAAoBW,EAAE92B,IAG1B24B,EAAqBlzB,KAA4B,sBAAIA,KAA4B,uBAAK,GAC1FkzB,EAAmBjzB,QAAQ4yB,EAAqB55B,KAAK,KAAM,IAC3Di6B,EAAmB1yB,KAAOqyB,EAAqB55B,KAAK,KAAMi6B,EAAmB1yB,KAAKvH,KAAKi6B,OC/CvF,IAAIC,EAAsBzC,EAAoBW,OAAEp7B,EAAW,CAAC,OAAO,WAAa,OAAOy6B,EAAoB,UAC3GyC,EAAsBzC,EAAoBW,EAAE8B","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/index.js","webpack:///nextcloud/core/src/OCA/search.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/views/Login.vue?vue&type=template&id=cdd35698&","webpack:///nextcloud/core/src/components/login/LoginButton.vue?vue&type=script&lang=js&","webpack:///nextcloud/core/src/components/login/LoginButton.vue","webpack://nextcloud/./core/src/components/login/LoginButton.vue?14f0","webpack:///nextcloud/core/src/components/login/LoginButton.vue?vue&type=template&id=125b100b&scoped=true&","webpack:///nextcloud/core/src/components/login/LoginForm.vue?vue&type=script&lang=js&","webpack:///nextcloud/core/src/components/login/LoginForm.vue","webpack://nextcloud/./core/src/components/login/LoginForm.vue?a678","webpack:///nextcloud/core/src/components/login/LoginForm.vue?vue&type=template&id=0b3a0522&scoped=true&","webpack:///nextcloud/core/src/components/login/PasswordLessLoginForm.vue","webpack:///nextcloud/core/src/components/login/PasswordLessLoginForm.vue?vue&type=script&lang=js&","webpack:///nextcloud/core/src/services/WebAuthnAuthenticationService.js","webpack://nextcloud/./core/src/components/login/PasswordLessLoginForm.vue?d427","webpack://nextcloud/./core/src/components/login/PasswordLessLoginForm.vue?09eb","webpack:///nextcloud/core/src/components/login/PasswordLessLoginForm.vue?vue&type=template&id=4f29a6e2&scoped=true&","webpack:///nextcloud/core/src/components/login/ResetPassword.vue?vue&type=script&lang=js&","webpack:///nextcloud/core/src/components/login/ResetPassword.vue","webpack://nextcloud/./core/src/components/login/ResetPassword.vue?0bfe","webpack://nextcloud/./core/src/components/login/ResetPassword.vue?9d75","webpack:///nextcloud/core/src/components/login/ResetPassword.vue?vue&type=template&id=d9d670b8&scoped=true&","webpack:///nextcloud/core/src/components/login/UpdatePassword.vue","webpack:///nextcloud/core/src/components/login/UpdatePassword.vue?vue&type=script&lang=js&","webpack://nextcloud/./core/src/components/login/UpdatePassword.vue?9464","webpack://nextcloud/./core/src/components/login/UpdatePassword.vue?30ca","webpack:///nextcloud/core/src/components/login/UpdatePassword.vue?vue&type=template&id=9ae5fdb4&scoped=true&","webpack:///nextcloud/core/src/views/Login.vue","webpack:///nextcloud/core/src/views/Login.vue?vue&type=script&lang=js&","webpack://nextcloud/./core/src/views/Login.vue?8b77","webpack://nextcloud/./core/src/views/Login.vue?3468","webpack:///nextcloud/core/src/mixins/Nextcloud.js","webpack:///nextcloud/core/src/login.js","webpack:///nextcloud/core/src/components/login/PasswordLessLoginForm.vue?vue&type=style&index=0&id=4f29a6e2&lang=scss&scoped=true&","webpack:///nextcloud/core/src/components/login/ResetPassword.vue?vue&type=style&index=0&id=d9d670b8&scoped=true&lang=css&","webpack:///nextcloud/core/src/components/login/UpdatePassword.vue?vue&type=style&index=0&id=9ae5fdb4&scoped=true&lang=css&","webpack:///nextcloud/core/src/views/Login.vue?vue&type=style&index=0&lang=css&","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/node_modules/moment/locale|sync|/^\\.\\/.*$","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/amd define","webpack:///nextcloud/webpack/runtime/amd options","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/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 {jQuery} options.el\n * @param {jQuery} options.trigger\n * @class ContactsMenu\n * @memberOf OC\n */\nconst ContactsMenu = function(options) {\n\tthis.initialize(options)\n}\n\nContactsMenu.prototype = {\n\t/** @type {jQuery} */\n\t$el: undefined,\n\n\t/** @type {jQuery} */\n\t_$trigger: 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 {jQuery} options.el - the element to render the menu in\n\t * @param {jQuery} options.trigger - the element to click on to open the menu\n\t * @returns {undefined}\n\t */\n\tinitialize: function(options) {\n\t\tthis.$el = options.el\n\t\tthis._$trigger = options.trigger\n\n\t\tthis._view = new ContactsMenuView({\n\t\t\tel: this.$el\n\t\t})\n\t\tthis._view.on('search', function(searchTerm) {\n\t\t\tthis._loadContacts(searchTerm)\n\t\t}, this)\n\n\t\tOC.registerMenu(this._$trigger, this.$el, function() {\n\t\t\tthis._toggleVisibility(true)\n\t\t}.bind(this), true)\n\t\tthis.$el.on('beforeHide', function() {\n\t\t\tthis._toggleVisibility(false)\n\t\t}.bind(this))\n\t},\n\n\t/**\n\t * @private\n\t * @param {boolean} show\n\t * @returns {Promise}\n\t */\n\t_toggleVisibility: function(show) {\n\t\tif (show) {\n\t\t\treturn this._loadContacts()\n\t\t} else {\n\t\t\tthis.$el.html('')\n\t\t\treturn Promise.resolve()\n\t\t}\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\t_loadContacts: 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 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 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 * @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'\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 {{type: Int, 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 */\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\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\tself.$filePicker.find('#picker-view-toggle').remove()\n\t\t\tself.$filePicker.find('#picker-filestable').removeClass('view-grid')\n\n\t\t\t$('body').append(self.$filePicker)\n\n\t\t\tself.$showGridView = $('input#picker-showgridview')\n\t\t\tself.$showGridView.on('change', _.bind(self._onGridviewChange, self))\n\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\tnewButton.hide()\n\t\t\t}\n\t\t\tnewButton.on('focus', function() {\n\t\t\t\tself.$filePicker.ocdialog('setEnterCallback', function() {\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() {\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$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)\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.keypress(function(event) {\n\t\t\t\tif (event.keyCode === 13 || event.which === 13) {\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$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', 'div:not(:last-child)', self, function(event) {\n\t\t\t\t\tself._handleTreeListSelect(event, type)\n\t\t\t\t})\n\t\t\t\tself.$filelist.on('click', 'tr', function(event) {\n\t\t\t\t\tself._handlePickerClick(event, $(this), type)\n\t\t\t\t})\n\t\t\t\tself.$fileListHeader.on('click', 'a', function(event) {\n\t\t\t\t\tvar dir = self.$filePicker.data('path')\n\t\t\t\t\tself.filepicker.sortField = $(event.currentTarget).data('sort')\n\t\t\t\t\tself.filepicker.sortOrder = self.filepicker.sortOrder === 'asc' ? 'desc' : 'asc'\n\t\t\t\t\tself._fillFilePicker(dir)\n\t\t\t\t})\n\t\t\t\tself._fillFilePicker(path)\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\tvar self = this\n\t\t$.get(OC.generateUrl('/apps/files/api/v1/showgridview'), function(response) {\n\t\t\tself.$showGridView.get(0).checked = response.gridview\n\t\t\tself.$showGridView.next('#picker-view-toggle')\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\t$('.list-container').toggleClass('view-grid', response.gridview)\n\t\t})\n\t},\n\t_onGridviewChange: function() {\n\t\tvar show = this.$showGridView.is(':checked')\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'), {\n\t\t\t\tshow: show\n\t\t\t})\n\t\t}\n\t\tthis.$showGridView.next('#picker-view-toggle')\n\t\t\t.removeClass('icon-toggle-filelist icon-toggle-pictures')\n\t\t\t.addClass(show ? 'icon-toggle-filelist' : 'icon-toggle-pictures')\n\t\t$('.list-container').toggleClass('view-grid', show)\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\t_getFileList: function(dir, mimeType) { // this is only used by the spreedme app atm\n\t\tif (typeof (mimeType) === 'string') {\n\t\t\tmimeType = [mimeType]\n\t\t}\n\n\t\treturn $.getJSON(\n\t\t\tOC.filePath('files', 'ajax', 'list.php'),\n\t\t\t{\n\t\t\t\tdir: dir,\n\t\t\t\tmimetypes: JSON.stringify(mimeType)\n\t\t\t}\n\t\t)\n\t},\n\n\t/**\n\t * fills the filepicker with files\n\t */\n\t_fillFilePicker: function(dir) {\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\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\t\tself.filepicker.filesClient.getFolderContents(dir).then(function(status, files) {\n\t\t\tself.filelist = files\n\t\t\tif (filter && filter.length > 0 && filter.indexOf('*') === -1) {\n\t\t\t\tfiles = files.filter(function(file) {\n\t\t\t\t\treturn file.type === 'dir' || filter.indexOf(file.mimetype) !== -1\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// Check if the showHidden input field exist and if it exist follow it\n\t\t\t// Otherwise just show the hidden files\n\t\t\tconst showHiddenInput = document.getElementById('showHiddenFiles')\n\t\t\tconst showHidden = showHiddenInput === null || showHiddenInput.value === \"1\"\n\t\t\tif (!showHidden) {\n\t\t\t\tfiles = files.filter(function(file) {\n\t\t\t\t\treturn !file.name.startsWith('.')\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tvar Comparators = {\n\t\t\t\tname: function(fileInfo1, fileInfo2) {\n\t\t\t\t\tif (fileInfo1.type === 'dir' && fileInfo2.type !== 'dir') {\n\t\t\t\t\t\treturn -1\n\t\t\t\t\t}\n\t\t\t\t\tif (fileInfo1.type !== 'dir' && fileInfo2.type === 'dir') {\n\t\t\t\t\t\treturn 1\n\t\t\t\t\t}\n\t\t\t\t\treturn OC.Util.naturalSortCompare(fileInfo1.name, fileInfo2.name)\n\t\t\t\t},\n\t\t\t\tsize: function(fileInfo1, fileInfo2) {\n\t\t\t\t\treturn fileInfo1.size - fileInfo2.size\n\t\t\t\t},\n\t\t\t\tmtime: function(fileInfo1, fileInfo2) {\n\t\t\t\t\treturn fileInfo1.mtime - fileInfo2.mtime\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar comparator = Comparators[self.filepicker.sortField] || Comparators.name\n\t\t\tfiles = files.sort(function(file1, file2) {\n\t\t\t\tvar isFavorite = function(fileInfo) {\n\t\t\t\t\treturn fileInfo.tags && fileInfo.tags.indexOf(OC.TAG_FAVORITE) >= 0\n\t\t\t\t}\n\n\t\t\t\tif (isFavorite(file1) && !isFavorite(file2)) {\n\t\t\t\t\treturn -1\n\t\t\t\t} else if (!isFavorite(file1) && isFavorite(file2)) {\n\t\t\t\t\treturn 1\n\t\t\t\t}\n\n\t\t\t\treturn self.filepicker.sortOrder === 'asc' ? comparator(file1, file2) : -comparator(file1, file2)\n\t\t\t})\n\n\t\t\tself._fillSlug()\n\n\t\t\tif (files.length === 0) {\n\t\t\t\tself.$filePicker.find('.emptycontent').show()\n\t\t\t\tself.$fileListHeader.hide()\n\t\t\t} else {\n\t\t\t\tself.$filePicker.find('.emptycontent').hide()\n\t\t\t\tself.$fileListHeader.show()\n\t\t\t}\n\n\t\t\tself.$filelist.empty();\n\n\t\t\t$.each(files, function(idx, entry) {\n\t\t\t\tentry.icon = OC.MimeType.getIconUrl(entry.mimetype)\n\t\t\t\tvar simpleSize, sizeColor\n\t\t\t\tif (typeof (entry.size) !== 'undefined' && entry.size >= 0) {\n\t\t\t\t\tsimpleSize = OC.Util.humanFileSize(parseInt(entry.size, 10), true)\n\t\t\t\t\tsizeColor = Math.round(160 - Math.pow((entry.size / (1024 * 1024)), 2))\n\t\t\t\t} else {\n\t\t\t\t\tsimpleSize = t('files', 'Pending')\n\t\t\t\t\tsizeColor = 80\n\t\t\t\t}\n\n\t\t\t\t// split the filename in half if the size is bigger than 20 char\n\t\t\t\t// for ellipsis\n\t\t\t\tif (entry.name.length >= 10) {\n\t\t\t\t\t// leave maximum 10 letters\n\t\t\t\t\tvar split = Math.min(Math.floor(entry.name.length / 2), 10)\n\t\t\t\t\tvar filename1 = entry.name.substr(0, entry.name.length - split)\n\t\t\t\t\tvar filename2 = entry.name.substr(entry.name.length - split)\n\t\t\t\t} else {\n\t\t\t\t\tvar filename1 = entry.name\n\t\t\t\t\tvar filename2 = ''\n\t\t\t\t}\n\n\t\t\t\tvar $row = self.$listTmpl.octemplate({\n\t\t\t\t\ttype: entry.type,\n\t\t\t\t\tdir: dir,\n\t\t\t\t\tfilename: entry.name,\n\t\t\t\t\tfilename1: filename1,\n\t\t\t\t\tfilename2: filename2,\n\t\t\t\t\tdate: OC.Util.relativeModifiedDate(entry.mtime),\n\t\t\t\t\tsize: simpleSize,\n\t\t\t\t\tsizeColor: sizeColor,\n\t\t\t\t\ticon: entry.icon\n\t\t\t\t})\n\t\t\t\tif (entry.type === 'file') {\n\t\t\t\t\tvar urlSpec = {\n\t\t\t\t\t\tfile: dir + '/' + entry.name,\n\t\t\t\t\t\tx: 100,\n\t\t\t\t\t\ty: 100\n\t\t\t\t\t}\n\t\t\t\t\tvar img = new Image()\n\t\t\t\t\tvar previewUrl = OC.generateUrl('/core/preview.png?') + $.param(urlSpec)\n\t\t\t\t\timg.onload = function() {\n\t\t\t\t\t\tif (img.width > 5) {\n\t\t\t\t\t\t\t$row.find('td.filename').attr('style', 'background-image:url(' + previewUrl + ')')\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\timg.src = previewUrl\n\t\t\t\t}\n\t\t\t\tself.$filelist.append($row)\n\t\t\t})\n\n\t\t\tself.$filelistContainer.removeClass('icon-loading')\n\t\t})\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}\"><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)\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'))\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\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","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.hideLoginForm || _vm.directLogin)?_c('div',[_c('transition',{attrs:{\"name\":\"fade\",\"mode\":\"out-in\"}},[(!_vm.passwordlessLogin && !_vm.resetPassword && _vm.resetPasswordTarget === '')?_c('div',{key:\"login\"},[_c('LoginForm',{attrs:{\"username\":_vm.user,\"redirect-url\":_vm.redirectUrl,\"direct-login\":_vm.directLogin,\"messages\":_vm.messages,\"errors\":_vm.errors,\"throttle-delay\":_vm.throttleDelay,\"inverted-colors\":_vm.invertedColors,\"auto-complete-allowed\":_vm.autoCompleteAllowed},on:{\"update:username\":function($event){_vm.user=$event},\"submit\":function($event){_vm.loading = true}}}),_vm._v(\" \"),(_vm.canResetPassword && _vm.resetPasswordLink !== '')?_c('a',{attrs:{\"id\":\"lost-password\",\"href\":_vm.resetPasswordLink}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Forgot password?'))+\"\\n\\t\\t\\t\")]):(_vm.canResetPassword && !_vm.resetPassword)?_c('a',{attrs:{\"id\":\"lost-password\",\"href\":_vm.resetPasswordLink},on:{\"click\":function($event){$event.preventDefault();_vm.resetPassword = true}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Forgot password?'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('br'),_vm._v(\" \"),(_vm.hasPasswordless)?[(_vm.countAlternativeLogins)?_c('div',{staticClass:\"alternative-logins\"},[(_vm.hasPasswordless)?_c('a',{staticClass:\"button\",class:{ 'single-alt-login-option': _vm.countAlternativeLogins },attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.passwordlessLogin = true}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Log in with a device'))+\"\\n\\t\\t\\t\\t\\t\")]):_vm._e()]):_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.passwordlessLogin = true}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Log in with a device'))+\"\\n\\t\\t\\t\\t\")])]:_vm._e()],2):(!_vm.loading && _vm.passwordlessLogin)?_c('div',{key:\"reset\",staticClass:\"login-additional\"},[_c('PasswordLessLoginForm',{attrs:{\"username\":_vm.user,\"redirect-url\":_vm.redirectUrl,\"inverted-colors\":_vm.invertedColors,\"auto-complete-allowed\":_vm.autoCompleteAllowed,\"is-https\":_vm.isHttps,\"is-localhost\":_vm.isLocalhost,\"has-public-key-credential\":_vm.hasPublicKeyCredential},on:{\"update:username\":function($event){_vm.user=$event},\"submit\":function($event){_vm.loading = true}}}),_vm._v(\" \"),_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.passwordlessLogin = false}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Back'))+\"\\n\\t\\t\\t\")])],1):(!_vm.loading && _vm.canResetPassword)?_c('div',{key:\"reset\",staticClass:\"login-additional\"},[_c('div',{staticClass:\"lost-password-container\"},[(_vm.resetPassword)?_c('ResetPassword',{attrs:{\"username\":_vm.user,\"reset-password-link\":_vm.resetPasswordLink,\"inverted-colors\":_vm.invertedColors},on:{\"update:username\":function($event){_vm.user=$event},\"abort\":function($event){_vm.resetPassword = false}}}):_vm._e()],1)]):(_vm.resetPasswordTarget !== '')?_c('div',[_c('UpdatePassword',{attrs:{\"username\":_vm.user,\"reset-password-target\":_vm.resetPasswordTarget,\"inverted-colors\":_vm.invertedColors},on:{\"update:username\":function($event){_vm.user=$event},\"done\":_vm.passwordResetFinished}})],1):_vm._e()])],1):_c('div',[_c('transition',{attrs:{\"name\":\"fade\",\"mode\":\"out-in\"}},[_c('div',{staticClass:\"warning\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Login form is disabled.'))),_c('br'),_vm._v(\" \"),_c('small',[_vm._v(_vm._s(_vm.t('core', 'Please contact your administrator.'))+\"\\n\\t\\t\\t\")])])])],1)}\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!./LoginButton.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!./LoginButton.vue?vue&type=script&lang=js&\"","<!--\n - @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2020 Christoph Wurst <christoph@winzerhof-wurst.at>\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<div id=\"submit-wrapper\" @click=\"$emit('click')\">\n\t\t<input id=\"submit-form\"\n\t\t\ttype=\"submit\"\n\t\t\tclass=\"login primary\"\n\t\t\ttitle=\"\"\n\t\t\t:value=\"!loading ? t('core', 'Log in') : t('core', 'Logging in …')\">\n\t\t<div class=\"submit-icon\"\n\t\t\t:class=\"{\n\t\t\t\t'icon-confirm-white': !loading,\n\t\t\t\t'icon-loading-small': loading && invertedColors,\n\t\t\t\t'icon-loading-small-dark': loading && !invertedColors,\n\t\t\t}\" />\n\t</div>\n</template>\n\n<script>\nexport default {\n\tname: 'LoginButton',\n\tprops: {\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tinvertedColors: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n\n</style>\n","import { render, staticRenderFns } from \"./LoginButton.vue?vue&type=template&id=125b100b&scoped=true&\"\nimport script from \"./LoginButton.vue?vue&type=script&lang=js&\"\nexport * from \"./LoginButton.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 \"125b100b\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"submit-wrapper\"},on:{\"click\":function($event){return _vm.$emit('click')}}},[_c('input',{staticClass:\"login primary\",attrs:{\"id\":\"submit-form\",\"type\":\"submit\",\"title\":\"\"},domProps:{\"value\":!_vm.loading ? _vm.t('core', 'Log in') : _vm.t('core', 'Logging in …')}}),_vm._v(\" \"),_c('div',{staticClass:\"submit-icon\",class:{\n\t\t\t'icon-confirm-white': !_vm.loading,\n\t\t\t'icon-loading-small': _vm.loading && _vm.invertedColors,\n\t\t\t'icon-loading-small-dark': _vm.loading && !_vm.invertedColors,\n\t\t}})])}\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!./LoginForm.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!./LoginForm.vue?vue&type=script&lang=js&\"","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\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<form ref=\"loginForm\"\n\t\tmethod=\"post\"\n\t\tname=\"login\"\n\t\t:action=\"loginActionUrl\"\n\t\t@submit=\"submit\">\n\t\t<fieldset>\n\t\t\t<div v-if=\"apacheAuthFailed\"\n\t\t\t\tclass=\"warning\">\n\t\t\t\t{{ t('core', 'Server side authentication failed!') }}<br>\n\t\t\t\t<small>{{ t('core', 'Please contact your administrator.') }}\n\t\t\t\t</small>\n\t\t\t</div>\n\t\t\t<div v-for=\"(message, index) in messages\"\n\t\t\t\t:key=\"index\"\n\t\t\t\tclass=\"warning\">\n\t\t\t\t{{ message }}<br>\n\t\t\t</div>\n\t\t\t<div v-if=\"internalException\"\n\t\t\t\tclass=\"warning\">\n\t\t\t\t{{ t('core', 'An internal error occurred.') }}<br>\n\t\t\t\t<small>{{ t('core', 'Please try again or contact your administrator.') }}\n\t\t\t\t</small>\n\t\t\t</div>\n\t\t\t<div id=\"message\"\n\t\t\t\tclass=\"hidden\">\n\t\t\t\t<img class=\"float-spinner\"\n\t\t\t\t\talt=\"\"\n\t\t\t\t\t:src=\"loadingIcon\">\n\t\t\t\t<span id=\"messageText\" />\n\t\t\t\t<!-- the following div ensures that the spinner is always inside the #message div -->\n\t\t\t\t<div style=\"clear: both;\" />\n\t\t\t</div>\n\t\t\t<p class=\"grouptop\"\n\t\t\t\t:class=\"{shake: invalidPassword}\">\n\t\t\t\t<input id=\"user\"\n\t\t\t\t\tref=\"user\"\n\t\t\t\t\tv-model=\"user\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tname=\"user\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\t:autocomplete=\"autoCompleteAllowed ? 'on' : 'off'\"\n\t\t\t\t\t:placeholder=\"t('core', 'Username or email')\"\n\t\t\t\t\t:aria-label=\"t('core', 'Username or email')\"\n\t\t\t\t\trequired\n\t\t\t\t\t@change=\"updateUsername\">\n\t\t\t\t<label for=\"user\" class=\"infield\">{{ t('core', 'Username or email') }}</label>\n\t\t\t</p>\n\n\t\t\t<p class=\"groupbottom\"\n\t\t\t\t:class=\"{shake: invalidPassword}\">\n\t\t\t\t<input id=\"password\"\n\t\t\t\t\tref=\"password\"\n\t\t\t\t\t:type=\"passwordInputType\"\n\t\t\t\t\tclass=\"password-with-toggle\"\n\t\t\t\t\tname=\"password\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\t:autocomplete=\"autoCompleteAllowed ? 'current-password' : 'off'\"\n\t\t\t\t\t:placeholder=\"t('core', 'Password')\"\n\t\t\t\t\t:aria-label=\"t('core', 'Password')\"\n\t\t\t\t\trequired>\n\t\t\t\t<label for=\"password\"\n\t\t\t\t\tclass=\"infield\">{{ t('Password') }}</label>\n\t\t\t\t<a href=\"#\" class=\"toggle-password\" @click.stop.prevent=\"togglePassword\">\n\t\t\t\t\t<img :src=\"toggleIcon\" :alt=\"t('core', 'Toggle password visibility')\">\n\t\t\t\t</a>\n\t\t\t</p>\n\n\t\t\t<LoginButton :loading=\"loading\" :inverted-colors=\"invertedColors\" />\n\n\t\t\t<p v-if=\"invalidPassword\"\n\t\t\t\tclass=\"warning wrongPasswordMsg\">\n\t\t\t\t{{ t('core', 'Wrong username or password.') }}\n\t\t\t</p>\n\t\t\t<p v-else-if=\"userDisabled\"\n\t\t\t\tclass=\"warning userDisabledMsg\">\n\t\t\t\t{{ t('core', 'User disabled') }}\n\t\t\t</p>\n\n\t\t\t<p v-if=\"throttleDelay && throttleDelay > 5000\"\n\t\t\t\tclass=\"warning throttledMsg\">\n\t\t\t\t{{ t('core', 'We have detected multiple invalid login attempts from your IP. Therefore your next login is throttled up to 30 seconds.') }}\n\t\t\t</p>\n\n\t\t\t<input v-if=\"redirectUrl\"\n\t\t\t\ttype=\"hidden\"\n\t\t\t\tname=\"redirect_url\"\n\t\t\t\t:value=\"redirectUrl\">\n\t\t\t<input type=\"hidden\"\n\t\t\t\tname=\"timezone\"\n\t\t\t\t:value=\"timezone\">\n\t\t\t<input type=\"hidden\"\n\t\t\t\tname=\"timezone_offset\"\n\t\t\t\t:value=\"timezoneOffset\">\n\t\t\t<input type=\"hidden\"\n\t\t\t\tname=\"requesttoken\"\n\t\t\t\t:value=\"OC.requestToken\">\n\t\t\t<input v-if=\"directLogin\"\n\t\t\t\ttype=\"hidden\"\n\t\t\t\tname=\"direct\"\n\t\t\t\tvalue=\"1\">\n\t\t</fieldset>\n\t</form>\n</template>\n\n<script>\nimport jstz from 'jstimezonedetect'\nimport LoginButton from './LoginButton'\nimport {\n\tgenerateUrl,\n\timagePath,\n} from '@nextcloud/router'\n\nexport default {\n\tname: 'LoginForm',\n\tcomponents: { LoginButton },\n\tprops: {\n\t\tusername: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tredirectUrl: {\n\t\t\ttype: [String, Boolean],\n\t\t\tdefault: false,\n\t\t},\n\t\terrors: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tmessages: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tthrottleDelay: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\t\tinvertedColors: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tautoCompleteAllowed: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tdirectLogin: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t\ttimezone: jstz.determine().name(),\n\t\t\ttimezoneOffset: (-new Date().getTimezoneOffset() / 60),\n\t\t\tuser: this.username,\n\t\t\tpassword: '',\n\t\t\tpasswordInputType: 'password',\n\t\t}\n\t},\n\tcomputed: {\n\t\tapacheAuthFailed() {\n\t\t\treturn this.errors.indexOf('apacheAuthFailed') !== -1\n\t\t},\n\t\tinternalException() {\n\t\t\treturn this.errors.indexOf('internalexception') !== -1\n\t\t},\n\t\tinvalidPassword() {\n\t\t\treturn this.errors.indexOf('invalidpassword') !== -1\n\t\t},\n\t\tuserDisabled() {\n\t\t\treturn this.errors.indexOf('userdisabled') !== -1\n\t\t},\n\t\ttoggleIcon() {\n\t\t\treturn imagePath('core', 'actions/toggle.svg')\n\t\t},\n\t\tloadingIcon() {\n\t\t\treturn imagePath('core', 'loading-dark.gif')\n\t\t},\n\t\tloginActionUrl() {\n\t\t\treturn generateUrl('login')\n\t\t},\n\t},\n\tmounted() {\n\t\tif (this.username === '') {\n\t\t\tthis.$refs.user.focus()\n\t\t} else {\n\t\t\tthis.$refs.password.focus()\n\t\t}\n\t},\n\tmethods: {\n\t\ttogglePassword() {\n\t\t\tif (this.passwordInputType === 'password') {\n\t\t\t\tthis.passwordInputType = 'text'\n\t\t\t} else {\n\t\t\t\tthis.passwordInputType = 'password'\n\t\t\t}\n\t\t},\n\t\tupdateUsername() {\n\t\t\tthis.$emit('update:username', this.user)\n\t\t},\n\t\tsubmit() {\n\t\t\tthis.loading = true\n\t\t\tthis.$emit('submit')\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n\n</style>\n","import { render, staticRenderFns } from \"./LoginForm.vue?vue&type=template&id=0b3a0522&scoped=true&\"\nimport script from \"./LoginForm.vue?vue&type=script&lang=js&\"\nexport * from \"./LoginForm.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 \"0b3a0522\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('form',{ref:\"loginForm\",attrs:{\"method\":\"post\",\"name\":\"login\",\"action\":_vm.loginActionUrl},on:{\"submit\":_vm.submit}},[_c('fieldset',[(_vm.apacheAuthFailed)?_c('div',{staticClass:\"warning\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Server side authentication failed!'))),_c('br'),_vm._v(\" \"),_c('small',[_vm._v(_vm._s(_vm.t('core', 'Please contact your administrator.'))+\"\\n\\t\\t\\t\")])]):_vm._e(),_vm._v(\" \"),_vm._l((_vm.messages),function(message,index){return _c('div',{key:index,staticClass:\"warning\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(message)),_c('br')])}),_vm._v(\" \"),(_vm.internalException)?_c('div',{staticClass:\"warning\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'An internal error occurred.'))),_c('br'),_vm._v(\" \"),_c('small',[_vm._v(_vm._s(_vm.t('core', 'Please try again or contact your administrator.'))+\"\\n\\t\\t\\t\")])]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"hidden\",attrs:{\"id\":\"message\"}},[_c('img',{staticClass:\"float-spinner\",attrs:{\"alt\":\"\",\"src\":_vm.loadingIcon}}),_vm._v(\" \"),_c('span',{attrs:{\"id\":\"messageText\"}}),_vm._v(\" \"),_c('div',{staticStyle:{\"clear\":\"both\"}})]),_vm._v(\" \"),_c('p',{staticClass:\"grouptop\",class:{shake: _vm.invalidPassword}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.user),expression:\"user\"}],ref:\"user\",attrs:{\"id\":\"user\",\"type\":\"text\",\"name\":\"user\",\"autocapitalize\":\"none\",\"autocorrect\":\"off\",\"autocomplete\":_vm.autoCompleteAllowed ? 'on' : 'off',\"placeholder\":_vm.t('core', 'Username or email'),\"aria-label\":_vm.t('core', 'Username or email'),\"required\":\"\"},domProps:{\"value\":(_vm.user)},on:{\"change\":_vm.updateUsername,\"input\":function($event){if($event.target.composing){ return; }_vm.user=$event.target.value}}}),_vm._v(\" \"),_c('label',{staticClass:\"infield\",attrs:{\"for\":\"user\"}},[_vm._v(_vm._s(_vm.t('core', 'Username or email')))])]),_vm._v(\" \"),_c('p',{staticClass:\"groupbottom\",class:{shake: _vm.invalidPassword}},[_c('input',{ref:\"password\",staticClass:\"password-with-toggle\",attrs:{\"id\":\"password\",\"type\":_vm.passwordInputType,\"name\":\"password\",\"autocorrect\":\"off\",\"autocapitalize\":\"none\",\"autocomplete\":_vm.autoCompleteAllowed ? 'current-password' : 'off',\"placeholder\":_vm.t('core', 'Password'),\"aria-label\":_vm.t('core', 'Password'),\"required\":\"\"}}),_vm._v(\" \"),_c('label',{staticClass:\"infield\",attrs:{\"for\":\"password\"}},[_vm._v(_vm._s(_vm.t('Password')))]),_vm._v(\" \"),_c('a',{staticClass:\"toggle-password\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.togglePassword.apply(null, arguments)}}},[_c('img',{attrs:{\"src\":_vm.toggleIcon,\"alt\":_vm.t('core', 'Toggle password visibility')}})])]),_vm._v(\" \"),_c('LoginButton',{attrs:{\"loading\":_vm.loading,\"inverted-colors\":_vm.invertedColors}}),_vm._v(\" \"),(_vm.invalidPassword)?_c('p',{staticClass:\"warning wrongPasswordMsg\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Wrong username or password.'))+\"\\n\\t\\t\")]):(_vm.userDisabled)?_c('p',{staticClass:\"warning userDisabledMsg\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'User disabled'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.throttleDelay && _vm.throttleDelay > 5000)?_c('p',{staticClass:\"warning throttledMsg\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'We have detected multiple invalid login attempts from your IP. Therefore your next login is throttled up to 30 seconds.'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.redirectUrl)?_c('input',{attrs:{\"type\":\"hidden\",\"name\":\"redirect_url\"},domProps:{\"value\":_vm.redirectUrl}}):_vm._e(),_vm._v(\" \"),_c('input',{attrs:{\"type\":\"hidden\",\"name\":\"timezone\"},domProps:{\"value\":_vm.timezone}}),_vm._v(\" \"),_c('input',{attrs:{\"type\":\"hidden\",\"name\":\"timezone_offset\"},domProps:{\"value\":_vm.timezoneOffset}}),_vm._v(\" \"),_c('input',{attrs:{\"type\":\"hidden\",\"name\":\"requesttoken\"},domProps:{\"value\":_vm.OC.requestToken}}),_vm._v(\" \"),(_vm.directLogin)?_c('input',{attrs:{\"type\":\"hidden\",\"name\":\"direct\",\"value\":\"1\"}}):_vm._e()],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n\t<form v-if=\"(isHttps || isLocalhost) && hasPublicKeyCredential\"\n\t\tref=\"loginForm\"\n\t\tmethod=\"post\"\n\t\tname=\"login\"\n\t\t@submit.prevent=\"submit\">\n\t\t<fieldset>\n\t\t\t<p class=\"grouptop groupbottom\">\n\t\t\t\t<label for=\"user\" class=\"infield\">{{ t('core', 'Username or\temail') }}</label>\n\t\t\t\t<input id=\"user\"\n\t\t\t\t\tref=\"user\"\n\t\t\t\t\tv-model=\"user\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tname=\"user\"\n\t\t\t\t\t:autocomplete=\"autoCompleteAllowed ? 'on' : 'off'\"\n\t\t\t\t\t:placeholder=\"t('core', 'Username or email')\"\n\t\t\t\t\t:aria-label=\"t('core', 'Username or email')\"\n\t\t\t\t\trequired\n\t\t\t\t\t@change=\"$emit('update:username', user)\">\n\t\t\t</p>\n\n\t\t\t<div v-if=\"!validCredentials\" class=\"body-login-container update form__message-box\">\n\t\t\t\t{{ t('core', 'Your account is not setup for passwordless login.') }}\n\t\t\t</div>\n\n\t\t\t<LoginButton v-if=\"validCredentials\"\n\t\t\t\t:loading=\"loading\"\n\t\t\t\t:inverted-colors=\"invertedColors\"\n\t\t\t\t@click=\"authenticate\" />\n\t\t</fieldset>\n\t</form>\n\t<div v-else-if=\"!hasPublicKeyCredential\" class=\"body-login-container update\">\n\t\t<InformationIcon size=\"70\" />\n\t\t<h2>{{ t('core', 'Browser not supported') }}</h2>\n\t\t<p class=\"infogroup\">\n\t\t\t{{ t('core', 'Passwordless authentication is not supported in your browser.') }}\n\t\t</p>\n\t</div>\n\t<div v-else-if=\"!isHttps && !isLocalhost\" class=\"body-login-container update\">\n\t\t<LockOpenIcon size=\"70\" />\n\t\t<h2>{{ t('core', 'Your connection is not secure') }}</h2>\n\t\t<p class=\"infogroup\">\n\t\t\t{{ t('core', 'Passwordless authentication is only available over a secure connection.') }}\n\t\t</p>\n\t</div>\n</template>\n\n<script>\nimport {\n\tstartAuthentication,\n\tfinishAuthentication,\n} from '../../services/WebAuthnAuthenticationService'\nimport LoginButton from './LoginButton'\nimport InformationIcon from 'vue-material-design-icons/Information'\nimport LockOpenIcon from 'vue-material-design-icons/LockOpen'\n\nclass NoValidCredentials extends Error {\n\n}\n\nexport default {\n\tname: 'PasswordLessLoginForm',\n\tcomponents: {\n\t\tLoginButton,\n\t\tInformationIcon,\n\t\tLockOpenIcon,\n\t},\n\tprops: {\n\t\tusername: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tredirectUrl: {\n\t\t\ttype: [String, Boolean],\n\t\t\tdefault: false,\n\t\t},\n\t\tinvertedColors: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tautoCompleteAllowed: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tisHttps: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tisLocalhost: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\thasPublicKeyCredential: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tuser: this.username,\n\t\t\tloading: false,\n\t\t\tvalidCredentials: true,\n\t\t}\n\t},\n\tmethods: {\n\t\tauthenticate() {\n\t\t\tconsole.debug('passwordless login initiated')\n\n\t\t\tthis.getAuthenticationData(this.user)\n\t\t\t\t.then(publicKey => {\n\t\t\t\t\tconsole.debug(publicKey)\n\t\t\t\t\treturn publicKey\n\t\t\t\t})\n\t\t\t\t.then(this.sign)\n\t\t\t\t.then(this.completeAuthentication)\n\t\t\t\t.catch(error => {\n\t\t\t\t\tif (error instanceof NoValidCredentials) {\n\t\t\t\t\t\tthis.validCredentials = false\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tconsole.debug(error)\n\t\t\t\t})\n\t\t},\n\t\tgetAuthenticationData(uid) {\n\t\t\tconst base64urlDecode = function(input) {\n\t\t\t\t// Replace non-url compatible chars with base64 standard chars\n\t\t\t\tinput = input\n\t\t\t\t\t.replace(/-/g, '+')\n\t\t\t\t\t.replace(/_/g, '/')\n\n\t\t\t\t// Pad out with standard base64 required padding characters\n\t\t\t\tconst pad = input.length % 4\n\t\t\t\tif (pad) {\n\t\t\t\t\tif (pad === 1) {\n\t\t\t\t\t\tthrow new Error('InvalidLengthError: Input base64url string is the wrong length to determine padding')\n\t\t\t\t\t}\n\t\t\t\t\tinput += new Array(5 - pad).join('=')\n\t\t\t\t}\n\n\t\t\t\treturn window.atob(input)\n\t\t\t}\n\n\t\t\treturn startAuthentication(uid)\n\t\t\t\t.then(publicKey => {\n\t\t\t\t\tconsole.debug('Obtained PublicKeyCredentialRequestOptions')\n\t\t\t\t\tconsole.debug(publicKey)\n\n\t\t\t\t\tif (!Object.prototype.hasOwnProperty.call(publicKey, 'allowCredentials')) {\n\t\t\t\t\t\tconsole.debug('No credentials found.')\n\t\t\t\t\t\tthrow new NoValidCredentials()\n\t\t\t\t\t}\n\n\t\t\t\t\tpublicKey.challenge = Uint8Array.from(base64urlDecode(publicKey.challenge), c => c.charCodeAt(0))\n\t\t\t\t\tpublicKey.allowCredentials = publicKey.allowCredentials.map(function(data) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...data,\n\t\t\t\t\t\t\tid: Uint8Array.from(base64urlDecode(data.id), c => c.charCodeAt(0)),\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\n\t\t\t\t\tconsole.debug('Converted PublicKeyCredentialRequestOptions')\n\t\t\t\t\tconsole.debug(publicKey)\n\t\t\t\t\treturn publicKey\n\t\t\t\t})\n\t\t\t\t.catch(error => {\n\t\t\t\t\tconsole.debug('Error while obtaining data')\n\t\t\t\t\tthrow error\n\t\t\t\t})\n\t\t},\n\t\tsign(publicKey) {\n\t\t\tconst arrayToBase64String = function(a) {\n\t\t\t\treturn window.btoa(String.fromCharCode(...a))\n\t\t\t}\n\n\t\t\tconst arrayToString = function(a) {\n\t\t\t\treturn String.fromCharCode(...a)\n\t\t\t}\n\n\t\t\treturn navigator.credentials.get({ publicKey })\n\t\t\t\t.then(data => {\n\t\t\t\t\tconsole.debug(data)\n\t\t\t\t\tconsole.debug(new Uint8Array(data.rawId))\n\t\t\t\t\tconsole.debug(arrayToBase64String(new Uint8Array(data.rawId)))\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: data.id,\n\t\t\t\t\t\ttype: data.type,\n\t\t\t\t\t\trawId: arrayToBase64String(new Uint8Array(data.rawId)),\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tauthenticatorData: arrayToBase64String(new Uint8Array(data.response.authenticatorData)),\n\t\t\t\t\t\t\tclientDataJSON: arrayToBase64String(new Uint8Array(data.response.clientDataJSON)),\n\t\t\t\t\t\t\tsignature: arrayToBase64String(new Uint8Array(data.response.signature)),\n\t\t\t\t\t\t\tuserHandle: data.response.userHandle ? arrayToString(new Uint8Array(data.response.userHandle)) : null,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.then(challenge => {\n\t\t\t\t\tconsole.debug(challenge)\n\t\t\t\t\treturn challenge\n\t\t\t\t})\n\t\t\t\t.catch(error => {\n\t\t\t\t\tconsole.debug('GOT AN ERROR!')\n\t\t\t\t\tconsole.debug(error) // Example: timeout, interaction refused...\n\t\t\t\t})\n\t\t},\n\t\tcompleteAuthentication(challenge) {\n\t\t\tconsole.debug('TIME TO COMPLETE')\n\n\t\t\tconst location = this.redirectUrl\n\n\t\t\treturn finishAuthentication(JSON.stringify(challenge))\n\t\t\t\t.then(data => {\n\t\t\t\t\tconsole.debug('Logged in redirecting')\n\t\t\t\t\twindow.location.href = location\n\t\t\t\t})\n\t\t\t\t.catch(error => {\n\t\t\t\t\tconsole.debug('GOT AN ERROR WHILE SUBMITTING CHALLENGE!')\n\t\t\t\t\tconsole.debug(error) // Example: timeout, interaction refused...\n\t\t\t\t})\n\t\t},\n\t\tsubmit() {\n\t\t\t// noop\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.body-login-container.update {\n\t\tmargin: 15px 0;\n\n\t\t&.form__message-box {\n\t\t\twidth: 240px;\n\t\t\tmargin: 5px;\n\t\t}\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PasswordLessLoginForm.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!./PasswordLessLoginForm.vue?vue&type=script&lang=js&\"","/**\n * @copyright 2020, 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 Axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\n\n/**\n * @param {any} loginName -\n */\nexport function startAuthentication(loginName) {\n\tconst url = generateUrl('/login/webauthn/start')\n\n\treturn Axios.post(url, { loginName })\n\t\t.then(resp => resp.data)\n}\n\n/**\n * @param {any} data -\n */\nexport function finishAuthentication(data) {\n\tconst url = generateUrl('/login/webauthn/finish')\n\n\treturn Axios.post(url, { data })\n\t\t.then(resp => resp.data)\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/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PasswordLessLoginForm.vue?vue&type=style&index=0&id=4f29a6e2&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!./PasswordLessLoginForm.vue?vue&type=style&index=0&id=4f29a6e2&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./PasswordLessLoginForm.vue?vue&type=template&id=4f29a6e2&scoped=true&\"\nimport script from \"./PasswordLessLoginForm.vue?vue&type=script&lang=js&\"\nexport * from \"./PasswordLessLoginForm.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PasswordLessLoginForm.vue?vue&type=style&index=0&id=4f29a6e2&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 \"4f29a6e2\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return ((_vm.isHttps || _vm.isLocalhost) && _vm.hasPublicKeyCredential)?_c('form',{ref:\"loginForm\",attrs:{\"method\":\"post\",\"name\":\"login\"},on:{\"submit\":function($event){$event.preventDefault();return _vm.submit.apply(null, arguments)}}},[_c('fieldset',[_c('p',{staticClass:\"grouptop groupbottom\"},[_c('label',{staticClass:\"infield\",attrs:{\"for\":\"user\"}},[_vm._v(_vm._s(_vm.t('core', 'Username or\temail')))]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.user),expression:\"user\"}],ref:\"user\",attrs:{\"id\":\"user\",\"type\":\"text\",\"name\":\"user\",\"autocomplete\":_vm.autoCompleteAllowed ? 'on' : 'off',\"placeholder\":_vm.t('core', 'Username or email'),\"aria-label\":_vm.t('core', 'Username or email'),\"required\":\"\"},domProps:{\"value\":(_vm.user)},on:{\"change\":function($event){return _vm.$emit('update:username', _vm.user)},\"input\":function($event){if($event.target.composing){ return; }_vm.user=$event.target.value}}})]),_vm._v(\" \"),(!_vm.validCredentials)?_c('div',{staticClass:\"body-login-container update form__message-box\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Your account is not setup for passwordless login.'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.validCredentials)?_c('LoginButton',{attrs:{\"loading\":_vm.loading,\"inverted-colors\":_vm.invertedColors},on:{\"click\":_vm.authenticate}}):_vm._e()],1)]):(!_vm.hasPublicKeyCredential)?_c('div',{staticClass:\"body-login-container update\"},[_c('InformationIcon',{attrs:{\"size\":\"70\"}}),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.t('core', 'Browser not supported')))]),_vm._v(\" \"),_c('p',{staticClass:\"infogroup\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('core', 'Passwordless authentication is not supported in your browser.'))+\"\\n\\t\")])],1):(!_vm.isHttps && !_vm.isLocalhost)?_c('div',{staticClass:\"body-login-container update\"},[_c('LockOpenIcon',{attrs:{\"size\":\"70\"}}),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.t('core', 'Your connection is not secure')))]),_vm._v(\" \"),_c('p',{staticClass:\"infogroup\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('core', 'Passwordless authentication is only available over a secure connection.'))+\"\\n\\t\")])],1):_vm._e()}\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!./ResetPassword.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!./ResetPassword.vue?vue&type=script&lang=js&\"","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\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<form @submit.prevent=\"submit\">\n\t\t<fieldset>\n\t\t\t<p>\n\t\t\t\t<input id=\"user\"\n\t\t\t\t\tv-model=\"user\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tname=\"user\"\n\t\t\t\t\tautocapitalize=\"off\"\n\t\t\t\t\t:placeholder=\"t('core', 'Username or email')\"\n\t\t\t\t\t:aria-label=\"t('core', 'Username or email')\"\n\t\t\t\t\trequired\n\t\t\t\t\t@change=\"updateUsername\">\n\t\t\t\t<!--<?php p($_['user_autofocus'] ? 'autofocus' : ''); ?>\n\t\t\t\tautocomplete=\"<?php p($_['login_form_autocomplete']); ?>\" autocapitalize=\"none\" autocorrect=\"off\"-->\n\t\t\t\t<label for=\"user\" class=\"infield\">{{ t('core', 'Username or email') }}</label>\n\t\t\t</p>\n\t\t\t<div id=\"reset-password-wrapper\">\n\t\t\t\t<input id=\"reset-password-submit\"\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\tclass=\"login primary\"\n\t\t\t\t\ttitle=\"\"\n\t\t\t\t\t:value=\"t('core', 'Reset password')\">\n\t\t\t\t<div class=\"submit-icon\"\n\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t'icon-confirm-white': !loading,\n\t\t\t\t\t\t'icon-loading-small': loading && invertedColors,\n\t\t\t\t\t\t'icon-loading-small-dark': loading && !invertedColors,\n\t\t\t\t\t}\" />\n\t\t\t</div>\n\t\t\t<p v-if=\"message === 'send-success'\"\n\t\t\t\tclass=\"update\">\n\t\t\t\t{{ t('core', 'A password reset message has been sent to the email address of this account. If you do not receive it, check your spam/junk folders or ask your local administrator for help.') }}\n\t\t\t\t<br>\n\t\t\t\t{{ t('core', 'If it is not there ask your local administrator.') }}\n\t\t\t</p>\n\t\t\t<p v-else-if=\"message === 'send-error'\"\n\t\t\t\tclass=\"update warning\">\n\t\t\t\t{{ t('core', 'Couldn\\'t send reset email. Please contact your administrator.') }}\n\t\t\t</p>\n\t\t\t<p v-else-if=\"message === 'reset-error'\"\n\t\t\t\tclass=\"update warning\">\n\t\t\t\t{{ t('core', 'Password cannot be changed. Please contact your administrator.') }}\n\t\t\t</p>\n\t\t\t<p v-else-if=\"message\"\n\t\t\t\tclass=\"update\"\n\t\t\t\t:class=\"{warning: error}\" />\n\n\t\t\t<a href=\"#\"\n\t\t\t\t@click.prevent=\"$emit('abort')\">\n\t\t\t\t{{ t('core', 'Back to login') }}\n\t\t\t</a>\n\t\t</fieldset>\n\t</form>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\n\nimport { generateUrl } from '@nextcloud/router'\n\nexport default {\n\tname: 'ResetPassword',\n\tprops: {\n\t\tusername: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tresetPasswordLink: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tinvertedColors: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\terror: false,\n\t\t\tloading: false,\n\t\t\tmessage: undefined,\n\t\t\tuser: this.username,\n\t\t}\n\t},\n\twatch: {\n\t\tusername(value) {\n\t\t\tthis.user = value\n\t\t},\n\t},\n\tmethods: {\n\t\tupdateUsername() {\n\t\t\tthis.$emit('update:username', this.user)\n\t\t},\n\t\tsubmit() {\n\t\t\tthis.loading = true\n\t\t\tthis.error = false\n\t\t\tthis.message = ''\n\t\t\tconst url = generateUrl('/lostpassword/email')\n\n\t\t\tconst data = {\n\t\t\t\tuser: this.user,\n\t\t\t}\n\n\t\t\treturn axios.post(url, data)\n\t\t\t\t.then(resp => resp.data)\n\t\t\t\t.then(data => {\n\t\t\t\t\tif (data.status !== 'success') {\n\t\t\t\t\t\tthrow new Error(`got status ${data.status}`)\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.message = 'send-success'\n\t\t\t\t})\n\t\t\t\t.catch(e => {\n\t\t\t\t\tconsole.error('could not send reset email request', e)\n\n\t\t\t\t\tthis.error = true\n\t\t\t\t\tthis.message = 'send-error'\n\t\t\t\t})\n\t\t\t\t.then(() => { this.loading = false })\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n\t.update {\n\t\twidth: auto;\n\t}\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/vue-loader/lib/index.js??vue-loader-options!./ResetPassword.vue?vue&type=style&index=0&id=d9d670b8&scoped=true&lang=css&\";\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/vue-loader/lib/index.js??vue-loader-options!./ResetPassword.vue?vue&type=style&index=0&id=d9d670b8&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ResetPassword.vue?vue&type=template&id=d9d670b8&scoped=true&\"\nimport script from \"./ResetPassword.vue?vue&type=script&lang=js&\"\nexport * from \"./ResetPassword.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ResetPassword.vue?vue&type=style&index=0&id=d9d670b8&scoped=true&lang=css&\"\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 \"d9d670b8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.submit.apply(null, arguments)}}},[_c('fieldset',[_c('p',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.user),expression:\"user\"}],attrs:{\"id\":\"user\",\"type\":\"text\",\"name\":\"user\",\"autocapitalize\":\"off\",\"placeholder\":_vm.t('core', 'Username or email'),\"aria-label\":_vm.t('core', 'Username or email'),\"required\":\"\"},domProps:{\"value\":(_vm.user)},on:{\"change\":_vm.updateUsername,\"input\":function($event){if($event.target.composing){ return; }_vm.user=$event.target.value}}}),_vm._v(\" \"),_c('label',{staticClass:\"infield\",attrs:{\"for\":\"user\"}},[_vm._v(_vm._s(_vm.t('core', 'Username or email')))])]),_vm._v(\" \"),_c('div',{attrs:{\"id\":\"reset-password-wrapper\"}},[_c('input',{staticClass:\"login primary\",attrs:{\"id\":\"reset-password-submit\",\"type\":\"submit\",\"title\":\"\"},domProps:{\"value\":_vm.t('core', 'Reset password')}}),_vm._v(\" \"),_c('div',{staticClass:\"submit-icon\",class:{\n\t\t\t\t\t'icon-confirm-white': !_vm.loading,\n\t\t\t\t\t'icon-loading-small': _vm.loading && _vm.invertedColors,\n\t\t\t\t\t'icon-loading-small-dark': _vm.loading && !_vm.invertedColors,\n\t\t\t\t}})]),_vm._v(\" \"),(_vm.message === 'send-success')?_c('p',{staticClass:\"update\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'A password reset message has been sent to the email address of this account. If you do not receive it, check your spam/junk folders or ask your local administrator for help.'))+\"\\n\\t\\t\\t\"),_c('br'),_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'If it is not there ask your local administrator.'))+\"\\n\\t\\t\")]):(_vm.message === 'send-error')?_c('p',{staticClass:\"update warning\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Couldn\\'t send reset email. Please contact your administrator.'))+\"\\n\\t\\t\")]):(_vm.message === 'reset-error')?_c('p',{staticClass:\"update warning\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Password cannot be changed. Please contact your administrator.'))+\"\\n\\t\\t\")]):(_vm.message)?_c('p',{staticClass:\"update\",class:{warning: _vm.error}}):_vm._e(),_vm._v(\" \"),_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.$emit('abort')}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Back to login'))+\"\\n\\t\\t\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 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\n<template>\n\t<form @submit.prevent=\"submit\">\n\t\t<fieldset>\n\t\t\t<p>\n\t\t\t\t<label for=\"password\" class=\"infield\">{{ t('core', 'New password') }}</label>\n\t\t\t\t<input id=\"password\"\n\t\t\t\t\tv-model=\"password\"\n\t\t\t\t\ttype=\"password\"\n\t\t\t\t\tname=\"password\"\n\t\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\trequired\n\t\t\t\t\t:placeholder=\"t('core', 'New password')\">\n\t\t\t</p>\n\n\t\t\t<div v-if=\"encrypted\" class=\"update\">\n\t\t\t\t<p>\n\t\t\t\t\t{{ t('core', 'Your files are encrypted. There will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?') }}\n\t\t\t\t</p>\n\t\t\t\t<input id=\"encrypted-continue\"\n\t\t\t\t\tv-model=\"proceed\"\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t<label for=\"encrypted-continue\">\n\t\t\t\t\t{{ t('core', 'I know what I\\'m doing') }}\n\t\t\t\t</label>\n\t\t\t</div>\n\n\t\t\t<div id=\"submit-wrapper\">\n\t\t\t\t<input id=\"submit\"\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\tclass=\"login primary\"\n\t\t\t\t\ttitle=\"\"\n\t\t\t\t\t:value=\"!loading ? t('core', 'Reset password') : t('core', 'Resetting password')\">\n\t\t\t\t<div class=\"submit-icon\"\n\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t'icon-loading-small': loading && invertedColors,\n\t\t\t\t\t\t'icon-loading-small-dark': loading && !invertedColors\n\t\t\t\t\t}\" />\n\t\t\t</div>\n\n\t\t\t<p v-if=\"error && message\" :class=\"{warning: error}\">\n\t\t\t\t{{ message }}\n\t\t\t</p>\n\t\t</fieldset>\n\t</form>\n</template>\n\n<script>\nimport Axios from '@nextcloud/axios'\n\nexport default {\n\tname: 'UpdatePassword',\n\tprops: {\n\t\tusername: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tresetPasswordTarget: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tinvertedColors: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\terror: false,\n\t\t\tloading: false,\n\t\t\tmessage: undefined,\n\t\t\tuser: this.username,\n\t\t\tpassword: '',\n\t\t\tencrypted: false,\n\t\t\tproceed: false,\n\t\t}\n\t},\n\twatch: {\n\t\tusername(value) {\n\t\t\tthis.user = value\n\t\t},\n\t},\n\tmethods: {\n\t\tasync submit() {\n\t\t\tthis.loading = true\n\t\t\tthis.error = false\n\t\t\tthis.message = ''\n\n\t\t\ttry {\n\t\t\t\tconst { data } = await Axios.post(this.resetPasswordTarget, {\n\t\t\t\t\tpassword: this.password,\n\t\t\t\t\tproceed: this.proceed,\n\t\t\t\t})\n\t\t\t\tif (data && data.status === 'success') {\n\t\t\t\t\tthis.message = 'send-success'\n\t\t\t\t\tthis.$emit('update:username', this.user)\n\t\t\t\t\tthis.$emit('done')\n\t\t\t\t} else if (data && data.encryption) {\n\t\t\t\t\tthis.encrypted = true\n\t\t\t\t} else if (data && data.msg) {\n\t\t\t\t\tthrow new Error(data.msg)\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tthis.error = true\n\t\t\t\tthis.message = e.message ? e.message : t('core', 'Password cannot be changed. Please contact your administrator.')\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 scoped>\n\tfieldset {\n\t\ttext-align: center;\n\t}\n\n\tinput[type=submit] {\n\t\tmargin-top: 20px;\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdatePassword.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!./UpdatePassword.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/vue-loader/lib/index.js??vue-loader-options!./UpdatePassword.vue?vue&type=style&index=0&id=9ae5fdb4&scoped=true&lang=css&\";\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/vue-loader/lib/index.js??vue-loader-options!./UpdatePassword.vue?vue&type=style&index=0&id=9ae5fdb4&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UpdatePassword.vue?vue&type=template&id=9ae5fdb4&scoped=true&\"\nimport script from \"./UpdatePassword.vue?vue&type=script&lang=js&\"\nexport * from \"./UpdatePassword.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UpdatePassword.vue?vue&type=style&index=0&id=9ae5fdb4&scoped=true&lang=css&\"\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 \"9ae5fdb4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.submit.apply(null, arguments)}}},[_c('fieldset',[_c('p',[_c('label',{staticClass:\"infield\",attrs:{\"for\":\"password\"}},[_vm._v(_vm._s(_vm.t('core', 'New password')))]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.password),expression:\"password\"}],attrs:{\"id\":\"password\",\"type\":\"password\",\"name\":\"password\",\"autocomplete\":\"new-password\",\"autocapitalize\":\"none\",\"autocorrect\":\"off\",\"required\":\"\",\"placeholder\":_vm.t('core', 'New password')},domProps:{\"value\":(_vm.password)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.password=$event.target.value}}})]),_vm._v(\" \"),(_vm.encrypted)?_c('div',{staticClass:\"update\"},[_c('p',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Your files are encrypted. There will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.proceed),expression:\"proceed\"}],staticClass:\"checkbox\",attrs:{\"id\":\"encrypted-continue\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.proceed)?_vm._i(_vm.proceed,null)>-1:(_vm.proceed)},on:{\"change\":function($event){var $$a=_vm.proceed,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.proceed=$$a.concat([$$v]))}else{$$i>-1&&(_vm.proceed=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.proceed=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"encrypted-continue\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'I know what I\\'m doing'))+\"\\n\\t\\t\\t\")])]):_vm._e(),_vm._v(\" \"),_c('div',{attrs:{\"id\":\"submit-wrapper\"}},[_c('input',{staticClass:\"login primary\",attrs:{\"id\":\"submit\",\"type\":\"submit\",\"title\":\"\"},domProps:{\"value\":!_vm.loading ? _vm.t('core', 'Reset password') : _vm.t('core', 'Resetting password')}}),_vm._v(\" \"),_c('div',{staticClass:\"submit-icon\",class:{\n\t\t\t\t\t'icon-loading-small': _vm.loading && _vm.invertedColors,\n\t\t\t\t\t'icon-loading-small-dark': _vm.loading && !_vm.invertedColors\n\t\t\t\t}})]),_vm._v(\" \"),(_vm.error && _vm.message)?_c('p',{class:{warning: _vm.error}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.message)+\"\\n\\t\\t\")]):_vm._e()])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\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<div v-if=\"!hideLoginForm || directLogin\">\n\t\t<transition name=\"fade\" mode=\"out-in\">\n\t\t\t<div v-if=\"!passwordlessLogin && !resetPassword && resetPasswordTarget === ''\"\n\t\t\t\tkey=\"login\">\n\t\t\t\t<LoginForm :username.sync=\"user\"\n\t\t\t\t\t:redirect-url=\"redirectUrl\"\n\t\t\t\t\t:direct-login=\"directLogin\"\n\t\t\t\t\t:messages=\"messages\"\n\t\t\t\t\t:errors=\"errors\"\n\t\t\t\t\t:throttle-delay=\"throttleDelay\"\n\t\t\t\t\t:inverted-colors=\"invertedColors\"\n\t\t\t\t\t:auto-complete-allowed=\"autoCompleteAllowed\"\n\t\t\t\t\t@submit=\"loading = true\" />\n\t\t\t\t<a v-if=\"canResetPassword && resetPasswordLink !== ''\"\n\t\t\t\t\tid=\"lost-password\"\n\t\t\t\t\t:href=\"resetPasswordLink\">\n\t\t\t\t\t{{ t('core', 'Forgot password?') }}\n\t\t\t\t</a>\n\t\t\t\t<a v-else-if=\"canResetPassword && !resetPassword\"\n\t\t\t\t\tid=\"lost-password\"\n\t\t\t\t\t:href=\"resetPasswordLink\"\n\t\t\t\t\t@click.prevent=\"resetPassword = true\">\n\t\t\t\t\t{{ t('core', 'Forgot password?') }}\n\t\t\t\t</a>\n\t\t\t\t<br>\n\t\t\t\t<template v-if=\"hasPasswordless\">\n\t\t\t\t\t<div v-if=\"countAlternativeLogins\"\n\t\t\t\t\t\tclass=\"alternative-logins\">\n\t\t\t\t\t\t<a v-if=\"hasPasswordless\"\n\t\t\t\t\t\t\tclass=\"button\"\n\t\t\t\t\t\t\t:class=\"{ 'single-alt-login-option': countAlternativeLogins }\"\n\t\t\t\t\t\t\thref=\"#\"\n\t\t\t\t\t\t\t@click.prevent=\"passwordlessLogin = true\">\n\t\t\t\t\t\t\t{{ t('core', 'Log in with a device') }}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<a v-else\n\t\t\t\t\t\thref=\"#\"\n\t\t\t\t\t\t@click.prevent=\"passwordlessLogin = true\">\n\t\t\t\t\t\t{{ t('core', 'Log in with a device') }}\n\t\t\t\t\t</a>\n\t\t\t\t</template>\n\t\t\t</div>\n\t\t\t<div v-else-if=\"!loading && passwordlessLogin\"\n\t\t\t\tkey=\"reset\"\n\t\t\t\tclass=\"login-additional\">\n\t\t\t\t<PasswordLessLoginForm :username.sync=\"user\"\n\t\t\t\t\t:redirect-url=\"redirectUrl\"\n\t\t\t\t\t:inverted-colors=\"invertedColors\"\n\t\t\t\t\t:auto-complete-allowed=\"autoCompleteAllowed\"\n\t\t\t\t\t:is-https=\"isHttps\"\n\t\t\t\t\t:is-localhost=\"isLocalhost\"\n\t\t\t\t\t:has-public-key-credential=\"hasPublicKeyCredential\"\n\t\t\t\t\t@submit=\"loading = true\" />\n\t\t\t\t<a href=\"#\" @click.prevent=\"passwordlessLogin = false\">\n\t\t\t\t\t{{ t('core', 'Back') }}\n\t\t\t\t</a>\n\t\t\t</div>\n\t\t\t<div v-else-if=\"!loading && canResetPassword\"\n\t\t\t\tkey=\"reset\"\n\t\t\t\tclass=\"login-additional\">\n\t\t\t\t<div class=\"lost-password-container\">\n\t\t\t\t\t<ResetPassword v-if=\"resetPassword\"\n\t\t\t\t\t\t:username.sync=\"user\"\n\t\t\t\t\t\t:reset-password-link=\"resetPasswordLink\"\n\t\t\t\t\t\t:inverted-colors=\"invertedColors\"\n\t\t\t\t\t\t@abort=\"resetPassword = false\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div v-else-if=\"resetPasswordTarget !== ''\">\n\t\t\t\t<UpdatePassword :username.sync=\"user\"\n\t\t\t\t\t:reset-password-target=\"resetPasswordTarget\"\n\t\t\t\t\t:inverted-colors=\"invertedColors\"\n\t\t\t\t\t@done=\"passwordResetFinished\" />\n\t\t\t</div>\n\t\t</transition>\n\t</div>\n\t<div v-else>\n\t\t<transition name=\"fade\" mode=\"out-in\">\n\t\t\t<div class=\"warning\">\n\t\t\t\t{{ t('core', 'Login form is disabled.') }}<br>\n\t\t\t\t<small>{{ t('core', 'Please contact your administrator.') }}\n\t\t\t\t</small>\n\t\t\t</div>\n\t\t</transition>\n\t</div>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\nimport queryString from 'query-string'\n\nimport LoginForm from '../components/login/LoginForm.vue'\nimport PasswordLessLoginForm from '../components/login/PasswordLessLoginForm.vue'\nimport ResetPassword from '../components/login/ResetPassword.vue'\nimport UpdatePassword from '../components/login/UpdatePassword.vue'\n\nconst query = queryString.parse(location.search)\nif (query.clear === '1') {\n\ttry {\n\t\twindow.localStorage.clear()\n\t\twindow.sessionStorage.clear()\n\t\tconsole.debug('Browser storage cleared')\n\t} catch (e) {\n\t\tconsole.error('Could not clear browser storage', e)\n\t}\n}\n\nexport default {\n\tname: 'Login',\n\n\tcomponents: {\n\t\tLoginForm,\n\t\tPasswordLessLoginForm,\n\t\tResetPassword,\n\t\tUpdatePassword,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t\tuser: loadState('core', 'loginUsername', ''),\n\t\t\tpasswordlessLogin: false,\n\t\t\tresetPassword: false,\n\n\t\t\t// Initial data\n\t\t\terrors: loadState('core', 'loginErrors', []),\n\t\t\tmessages: loadState('core', 'loginMessages', []),\n\t\t\tredirectUrl: loadState('core', 'loginRedirectUrl', false),\n\t\t\tthrottleDelay: loadState('core', 'loginThrottleDelay', 0),\n\t\t\tinvertedColors: OCA.Theming && OCA.Theming.inverted,\n\t\t\tcanResetPassword: loadState('core', 'loginCanResetPassword', false),\n\t\t\tresetPasswordLink: loadState('core', 'loginResetPasswordLink', ''),\n\t\t\tautoCompleteAllowed: loadState('core', 'loginAutocomplete', true),\n\t\t\tresetPasswordTarget: loadState('core', 'resetPasswordTarget', ''),\n\t\t\tresetPasswordUser: loadState('core', 'resetPasswordUser', ''),\n\t\t\tdirectLogin: query.direct === '1',\n\t\t\thasPasswordless: loadState('core', 'webauthn-available', false),\n\t\t\tcountAlternativeLogins: loadState('core', 'countAlternativeLogins', false),\n\t\t\tisHttps: window.location.protocol === 'https:',\n\t\t\tisLocalhost: window.location.hostname === 'localhost',\n\t\t\thasPublicKeyCredential: typeof (window.PublicKeyCredential) !== 'undefined',\n\t\t\thideLoginForm: loadState('core', 'hideLoginForm', false),\n\t\t}\n\t},\n\tmethods: {\n\t\tpasswordResetFinished() {\n\t\t\tthis.resetPasswordTarget = ''\n\t\t\tthis.directLogin = true\n\t\t},\n\t},\n}\n</script>\n\n<style>\n\t.fade-enter-active, .fade-leave-active {\n\t\ttransition: opacity .3s;\n\t}\n\t.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {\n\t\topacity: 0;\n\t}\n</style>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.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!./Login.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/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=style&index=0&lang=css&\";\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/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=style&index=0&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Login.vue?vue&type=template&id=cdd35698&\"\nimport script from \"./Login.vue?vue&type=script&lang=js&\"\nexport * from \"./Login.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Login.vue?vue&type=style&index=0&lang=css&\"\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","/**\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 L10n from '../OC/l10n'\nimport OC from '../OC/index'\n\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tOC,\n\t\t}\n\t},\n\tmethods: {\n\t\tt: L10n.translate.bind(L10n),\n\t\tn: L10n.translatePlural.bind(L10n),\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\nimport Vue from 'vue'\n\n// eslint-disable-next-line no-unused-vars\nimport OC from './OC/index' // TODO: Not needed but L10n breaks if removed\nimport LoginView from './views/Login.vue'\nimport Nextcloud from './mixins/Nextcloud'\n\nVue.mixin(Nextcloud)\n\nconst View = Vue.extend(LoginView)\nnew View().$mount('#login')\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, \".body-login-container.update[data-v-4f29a6e2]{margin:15px 0}.body-login-container.update.form__message-box[data-v-4f29a6e2]{width:240px;margin:5px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/login/PasswordLessLoginForm.vue\"],\"names\":[],\"mappings\":\"AAmOA,8CACC,aAAA,CAEA,gEACC,WAAA,CACA,UAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.body-login-container.update {\\n\\tmargin: 15px 0;\\n\\n\\t&.form__message-box {\\n\\t\\twidth: 240px;\\n\\t\\tmargin: 5px;\\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, \"\\n.update[data-v-d9d670b8] {\\n\\twidth: auto;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/login/ResetPassword.vue\"],\"names\":[],\"mappings\":\";AAmJA;CACA,WAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\\n -\\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\\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<form @submit.prevent=\\\"submit\\\">\\n\\t\\t<fieldset>\\n\\t\\t\\t<p>\\n\\t\\t\\t\\t<input id=\\\"user\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"user\\\"\\n\\t\\t\\t\\t\\ttype=\\\"text\\\"\\n\\t\\t\\t\\t\\tname=\\\"user\\\"\\n\\t\\t\\t\\t\\tautocapitalize=\\\"off\\\"\\n\\t\\t\\t\\t\\t:placeholder=\\\"t('core', 'Username or email')\\\"\\n\\t\\t\\t\\t\\t:aria-label=\\\"t('core', 'Username or email')\\\"\\n\\t\\t\\t\\t\\trequired\\n\\t\\t\\t\\t\\t@change=\\\"updateUsername\\\">\\n\\t\\t\\t\\t<!--<?php p($_['user_autofocus'] ? 'autofocus' : ''); ?>\\n\\t\\t\\t\\tautocomplete=\\\"<?php p($_['login_form_autocomplete']); ?>\\\" autocapitalize=\\\"none\\\" autocorrect=\\\"off\\\"-->\\n\\t\\t\\t\\t<label for=\\\"user\\\" class=\\\"infield\\\">{{ t('core', 'Username or email') }}</label>\\n\\t\\t\\t</p>\\n\\t\\t\\t<div id=\\\"reset-password-wrapper\\\">\\n\\t\\t\\t\\t<input id=\\\"reset-password-submit\\\"\\n\\t\\t\\t\\t\\ttype=\\\"submit\\\"\\n\\t\\t\\t\\t\\tclass=\\\"login primary\\\"\\n\\t\\t\\t\\t\\ttitle=\\\"\\\"\\n\\t\\t\\t\\t\\t:value=\\\"t('core', 'Reset password')\\\">\\n\\t\\t\\t\\t<div class=\\\"submit-icon\\\"\\n\\t\\t\\t\\t\\t:class=\\\"{\\n\\t\\t\\t\\t\\t\\t'icon-confirm-white': !loading,\\n\\t\\t\\t\\t\\t\\t'icon-loading-small': loading && invertedColors,\\n\\t\\t\\t\\t\\t\\t'icon-loading-small-dark': loading && !invertedColors,\\n\\t\\t\\t\\t\\t}\\\" />\\n\\t\\t\\t</div>\\n\\t\\t\\t<p v-if=\\\"message === 'send-success'\\\"\\n\\t\\t\\t\\tclass=\\\"update\\\">\\n\\t\\t\\t\\t{{ t('core', 'A password reset message has been sent to the email address of this account. If you do not receive it, check your spam/junk folders or ask your local administrator for help.') }}\\n\\t\\t\\t\\t<br>\\n\\t\\t\\t\\t{{ t('core', 'If it is not there ask your local administrator.') }}\\n\\t\\t\\t</p>\\n\\t\\t\\t<p v-else-if=\\\"message === 'send-error'\\\"\\n\\t\\t\\t\\tclass=\\\"update warning\\\">\\n\\t\\t\\t\\t{{ t('core', 'Couldn\\\\'t send reset email. Please contact your administrator.') }}\\n\\t\\t\\t</p>\\n\\t\\t\\t<p v-else-if=\\\"message === 'reset-error'\\\"\\n\\t\\t\\t\\tclass=\\\"update warning\\\">\\n\\t\\t\\t\\t{{ t('core', 'Password cannot be changed. Please contact your administrator.') }}\\n\\t\\t\\t</p>\\n\\t\\t\\t<p v-else-if=\\\"message\\\"\\n\\t\\t\\t\\tclass=\\\"update\\\"\\n\\t\\t\\t\\t:class=\\\"{warning: error}\\\" />\\n\\n\\t\\t\\t<a href=\\\"#\\\"\\n\\t\\t\\t\\t@click.prevent=\\\"$emit('abort')\\\">\\n\\t\\t\\t\\t{{ t('core', 'Back to login') }}\\n\\t\\t\\t</a>\\n\\t\\t</fieldset>\\n\\t</form>\\n</template>\\n\\n<script>\\nimport axios from '@nextcloud/axios'\\n\\nimport { generateUrl } from '@nextcloud/router'\\n\\nexport default {\\n\\tname: 'ResetPassword',\\n\\tprops: {\\n\\t\\tusername: {\\n\\t\\t\\ttype: String,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t\\tresetPasswordLink: {\\n\\t\\t\\ttype: String,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t\\tinvertedColors: {\\n\\t\\t\\ttype: Boolean,\\n\\t\\t\\tdefault: false,\\n\\t\\t},\\n\\t},\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\terror: false,\\n\\t\\t\\tloading: false,\\n\\t\\t\\tmessage: undefined,\\n\\t\\t\\tuser: this.username,\\n\\t\\t}\\n\\t},\\n\\twatch: {\\n\\t\\tusername(value) {\\n\\t\\t\\tthis.user = value\\n\\t\\t},\\n\\t},\\n\\tmethods: {\\n\\t\\tupdateUsername() {\\n\\t\\t\\tthis.$emit('update:username', this.user)\\n\\t\\t},\\n\\t\\tsubmit() {\\n\\t\\t\\tthis.loading = true\\n\\t\\t\\tthis.error = false\\n\\t\\t\\tthis.message = ''\\n\\t\\t\\tconst url = generateUrl('/lostpassword/email')\\n\\n\\t\\t\\tconst data = {\\n\\t\\t\\t\\tuser: this.user,\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn axios.post(url, data)\\n\\t\\t\\t\\t.then(resp => resp.data)\\n\\t\\t\\t\\t.then(data => {\\n\\t\\t\\t\\t\\tif (data.status !== 'success') {\\n\\t\\t\\t\\t\\t\\tthrow new Error(`got status ${data.status}`)\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\tthis.message = 'send-success'\\n\\t\\t\\t\\t})\\n\\t\\t\\t\\t.catch(e => {\\n\\t\\t\\t\\t\\tconsole.error('could not send reset email request', e)\\n\\n\\t\\t\\t\\t\\tthis.error = true\\n\\t\\t\\t\\t\\tthis.message = 'send-error'\\n\\t\\t\\t\\t})\\n\\t\\t\\t\\t.then(() => { this.loading = false })\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n\\n<style scoped>\\n\\t.update {\\n\\t\\twidth: auto;\\n\\t}\\n</style>\\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, \"\\nfieldset[data-v-9ae5fdb4] {\\n\\ttext-align: center;\\n}\\ninput[type=submit][data-v-9ae5fdb4] {\\n\\tmargin-top: 20px;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/login/UpdatePassword.vue\"],\"names\":[],\"mappings\":\";AA4IA;CACA,kBAAA;AACA;AAEA;CACA,gBAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2019 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\\n<template>\\n\\t<form @submit.prevent=\\\"submit\\\">\\n\\t\\t<fieldset>\\n\\t\\t\\t<p>\\n\\t\\t\\t\\t<label for=\\\"password\\\" class=\\\"infield\\\">{{ t('core', 'New password') }}</label>\\n\\t\\t\\t\\t<input id=\\\"password\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"password\\\"\\n\\t\\t\\t\\t\\ttype=\\\"password\\\"\\n\\t\\t\\t\\t\\tname=\\\"password\\\"\\n\\t\\t\\t\\t\\tautocomplete=\\\"new-password\\\"\\n\\t\\t\\t\\t\\tautocapitalize=\\\"none\\\"\\n\\t\\t\\t\\t\\tautocorrect=\\\"off\\\"\\n\\t\\t\\t\\t\\trequired\\n\\t\\t\\t\\t\\t:placeholder=\\\"t('core', 'New password')\\\">\\n\\t\\t\\t</p>\\n\\n\\t\\t\\t<div v-if=\\\"encrypted\\\" class=\\\"update\\\">\\n\\t\\t\\t\\t<p>\\n\\t\\t\\t\\t\\t{{ t('core', 'Your files are encrypted. There will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?') }}\\n\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t<input id=\\\"encrypted-continue\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"proceed\\\"\\n\\t\\t\\t\\t\\ttype=\\\"checkbox\\\"\\n\\t\\t\\t\\t\\tclass=\\\"checkbox\\\">\\n\\t\\t\\t\\t<label for=\\\"encrypted-continue\\\">\\n\\t\\t\\t\\t\\t{{ t('core', 'I know what I\\\\'m doing') }}\\n\\t\\t\\t\\t</label>\\n\\t\\t\\t</div>\\n\\n\\t\\t\\t<div id=\\\"submit-wrapper\\\">\\n\\t\\t\\t\\t<input id=\\\"submit\\\"\\n\\t\\t\\t\\t\\ttype=\\\"submit\\\"\\n\\t\\t\\t\\t\\tclass=\\\"login primary\\\"\\n\\t\\t\\t\\t\\ttitle=\\\"\\\"\\n\\t\\t\\t\\t\\t:value=\\\"!loading ? t('core', 'Reset password') : t('core', 'Resetting password')\\\">\\n\\t\\t\\t\\t<div class=\\\"submit-icon\\\"\\n\\t\\t\\t\\t\\t:class=\\\"{\\n\\t\\t\\t\\t\\t\\t'icon-loading-small': loading && invertedColors,\\n\\t\\t\\t\\t\\t\\t'icon-loading-small-dark': loading && !invertedColors\\n\\t\\t\\t\\t\\t}\\\" />\\n\\t\\t\\t</div>\\n\\n\\t\\t\\t<p v-if=\\\"error && message\\\" :class=\\\"{warning: error}\\\">\\n\\t\\t\\t\\t{{ message }}\\n\\t\\t\\t</p>\\n\\t\\t</fieldset>\\n\\t</form>\\n</template>\\n\\n<script>\\nimport Axios from '@nextcloud/axios'\\n\\nexport default {\\n\\tname: 'UpdatePassword',\\n\\tprops: {\\n\\t\\tusername: {\\n\\t\\t\\ttype: String,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t\\tresetPasswordTarget: {\\n\\t\\t\\ttype: String,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t\\tinvertedColors: {\\n\\t\\t\\ttype: Boolean,\\n\\t\\t\\tdefault: false,\\n\\t\\t},\\n\\t},\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\terror: false,\\n\\t\\t\\tloading: false,\\n\\t\\t\\tmessage: undefined,\\n\\t\\t\\tuser: this.username,\\n\\t\\t\\tpassword: '',\\n\\t\\t\\tencrypted: false,\\n\\t\\t\\tproceed: false,\\n\\t\\t}\\n\\t},\\n\\twatch: {\\n\\t\\tusername(value) {\\n\\t\\t\\tthis.user = value\\n\\t\\t},\\n\\t},\\n\\tmethods: {\\n\\t\\tasync submit() {\\n\\t\\t\\tthis.loading = true\\n\\t\\t\\tthis.error = false\\n\\t\\t\\tthis.message = ''\\n\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tconst { data } = await Axios.post(this.resetPasswordTarget, {\\n\\t\\t\\t\\t\\tpassword: this.password,\\n\\t\\t\\t\\t\\tproceed: this.proceed,\\n\\t\\t\\t\\t})\\n\\t\\t\\t\\tif (data && data.status === 'success') {\\n\\t\\t\\t\\t\\tthis.message = 'send-success'\\n\\t\\t\\t\\t\\tthis.$emit('update:username', this.user)\\n\\t\\t\\t\\t\\tthis.$emit('done')\\n\\t\\t\\t\\t} else if (data && data.encryption) {\\n\\t\\t\\t\\t\\tthis.encrypted = true\\n\\t\\t\\t\\t} else if (data && data.msg) {\\n\\t\\t\\t\\t\\tthrow new Error(data.msg)\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tthrow new Error()\\n\\t\\t\\t\\t}\\n\\t\\t\\t} catch (e) {\\n\\t\\t\\t\\tthis.error = true\\n\\t\\t\\t\\tthis.message = e.message ? e.message : t('core', 'Password cannot be changed. Please contact your administrator.')\\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 scoped>\\n\\tfieldset {\\n\\t\\ttext-align: center;\\n\\t}\\n\\n\\tinput[type=submit] {\\n\\t\\tmargin-top: 20px;\\n\\t}\\n</style>\\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, \"\\n.fade-enter-active, .fade-leave-active {\\n\\ttransition: opacity .3s;\\n}\\n.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {\\n\\topacity: 0;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/views/Login.vue\"],\"names\":[],\"mappings\":\";AAiLA;CACA,uBAAA;AACA;AACA;CACA,UAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\\n -\\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\\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<div v-if=\\\"!hideLoginForm || directLogin\\\">\\n\\t\\t<transition name=\\\"fade\\\" mode=\\\"out-in\\\">\\n\\t\\t\\t<div v-if=\\\"!passwordlessLogin && !resetPassword && resetPasswordTarget === ''\\\"\\n\\t\\t\\t\\tkey=\\\"login\\\">\\n\\t\\t\\t\\t<LoginForm :username.sync=\\\"user\\\"\\n\\t\\t\\t\\t\\t:redirect-url=\\\"redirectUrl\\\"\\n\\t\\t\\t\\t\\t:direct-login=\\\"directLogin\\\"\\n\\t\\t\\t\\t\\t:messages=\\\"messages\\\"\\n\\t\\t\\t\\t\\t:errors=\\\"errors\\\"\\n\\t\\t\\t\\t\\t:throttle-delay=\\\"throttleDelay\\\"\\n\\t\\t\\t\\t\\t:inverted-colors=\\\"invertedColors\\\"\\n\\t\\t\\t\\t\\t:auto-complete-allowed=\\\"autoCompleteAllowed\\\"\\n\\t\\t\\t\\t\\t@submit=\\\"loading = true\\\" />\\n\\t\\t\\t\\t<a v-if=\\\"canResetPassword && resetPasswordLink !== ''\\\"\\n\\t\\t\\t\\t\\tid=\\\"lost-password\\\"\\n\\t\\t\\t\\t\\t:href=\\\"resetPasswordLink\\\">\\n\\t\\t\\t\\t\\t{{ t('core', 'Forgot password?') }}\\n\\t\\t\\t\\t</a>\\n\\t\\t\\t\\t<a v-else-if=\\\"canResetPassword && !resetPassword\\\"\\n\\t\\t\\t\\t\\tid=\\\"lost-password\\\"\\n\\t\\t\\t\\t\\t:href=\\\"resetPasswordLink\\\"\\n\\t\\t\\t\\t\\t@click.prevent=\\\"resetPassword = true\\\">\\n\\t\\t\\t\\t\\t{{ t('core', 'Forgot password?') }}\\n\\t\\t\\t\\t</a>\\n\\t\\t\\t\\t<br>\\n\\t\\t\\t\\t<template v-if=\\\"hasPasswordless\\\">\\n\\t\\t\\t\\t\\t<div v-if=\\\"countAlternativeLogins\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"alternative-logins\\\">\\n\\t\\t\\t\\t\\t\\t<a v-if=\\\"hasPasswordless\\\"\\n\\t\\t\\t\\t\\t\\t\\tclass=\\\"button\\\"\\n\\t\\t\\t\\t\\t\\t\\t:class=\\\"{ 'single-alt-login-option': countAlternativeLogins }\\\"\\n\\t\\t\\t\\t\\t\\t\\thref=\\\"#\\\"\\n\\t\\t\\t\\t\\t\\t\\t@click.prevent=\\\"passwordlessLogin = true\\\">\\n\\t\\t\\t\\t\\t\\t\\t{{ t('core', 'Log in with a device') }}\\n\\t\\t\\t\\t\\t\\t</a>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<a v-else\\n\\t\\t\\t\\t\\t\\thref=\\\"#\\\"\\n\\t\\t\\t\\t\\t\\t@click.prevent=\\\"passwordlessLogin = true\\\">\\n\\t\\t\\t\\t\\t\\t{{ t('core', 'Log in with a device') }}\\n\\t\\t\\t\\t\\t</a>\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div v-else-if=\\\"!loading && passwordlessLogin\\\"\\n\\t\\t\\t\\tkey=\\\"reset\\\"\\n\\t\\t\\t\\tclass=\\\"login-additional\\\">\\n\\t\\t\\t\\t<PasswordLessLoginForm :username.sync=\\\"user\\\"\\n\\t\\t\\t\\t\\t:redirect-url=\\\"redirectUrl\\\"\\n\\t\\t\\t\\t\\t:inverted-colors=\\\"invertedColors\\\"\\n\\t\\t\\t\\t\\t:auto-complete-allowed=\\\"autoCompleteAllowed\\\"\\n\\t\\t\\t\\t\\t:is-https=\\\"isHttps\\\"\\n\\t\\t\\t\\t\\t:is-localhost=\\\"isLocalhost\\\"\\n\\t\\t\\t\\t\\t:has-public-key-credential=\\\"hasPublicKeyCredential\\\"\\n\\t\\t\\t\\t\\t@submit=\\\"loading = true\\\" />\\n\\t\\t\\t\\t<a href=\\\"#\\\" @click.prevent=\\\"passwordlessLogin = false\\\">\\n\\t\\t\\t\\t\\t{{ t('core', 'Back') }}\\n\\t\\t\\t\\t</a>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div v-else-if=\\\"!loading && canResetPassword\\\"\\n\\t\\t\\t\\tkey=\\\"reset\\\"\\n\\t\\t\\t\\tclass=\\\"login-additional\\\">\\n\\t\\t\\t\\t<div class=\\\"lost-password-container\\\">\\n\\t\\t\\t\\t\\t<ResetPassword v-if=\\\"resetPassword\\\"\\n\\t\\t\\t\\t\\t\\t:username.sync=\\\"user\\\"\\n\\t\\t\\t\\t\\t\\t:reset-password-link=\\\"resetPasswordLink\\\"\\n\\t\\t\\t\\t\\t\\t:inverted-colors=\\\"invertedColors\\\"\\n\\t\\t\\t\\t\\t\\t@abort=\\\"resetPassword = false\\\" />\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div v-else-if=\\\"resetPasswordTarget !== ''\\\">\\n\\t\\t\\t\\t<UpdatePassword :username.sync=\\\"user\\\"\\n\\t\\t\\t\\t\\t:reset-password-target=\\\"resetPasswordTarget\\\"\\n\\t\\t\\t\\t\\t:inverted-colors=\\\"invertedColors\\\"\\n\\t\\t\\t\\t\\t@done=\\\"passwordResetFinished\\\" />\\n\\t\\t\\t</div>\\n\\t\\t</transition>\\n\\t</div>\\n\\t<div v-else>\\n\\t\\t<transition name=\\\"fade\\\" mode=\\\"out-in\\\">\\n\\t\\t\\t<div class=\\\"warning\\\">\\n\\t\\t\\t\\t{{ t('core', 'Login form is disabled.') }}<br>\\n\\t\\t\\t\\t<small>{{ t('core', 'Please contact your administrator.') }}\\n\\t\\t\\t\\t</small>\\n\\t\\t\\t</div>\\n\\t\\t</transition>\\n\\t</div>\\n</template>\\n\\n<script>\\nimport { loadState } from '@nextcloud/initial-state'\\nimport queryString from 'query-string'\\n\\nimport LoginForm from '../components/login/LoginForm.vue'\\nimport PasswordLessLoginForm from '../components/login/PasswordLessLoginForm.vue'\\nimport ResetPassword from '../components/login/ResetPassword.vue'\\nimport UpdatePassword from '../components/login/UpdatePassword.vue'\\n\\nconst query = queryString.parse(location.search)\\nif (query.clear === '1') {\\n\\ttry {\\n\\t\\twindow.localStorage.clear()\\n\\t\\twindow.sessionStorage.clear()\\n\\t\\tconsole.debug('Browser storage cleared')\\n\\t} catch (e) {\\n\\t\\tconsole.error('Could not clear browser storage', e)\\n\\t}\\n}\\n\\nexport default {\\n\\tname: 'Login',\\n\\n\\tcomponents: {\\n\\t\\tLoginForm,\\n\\t\\tPasswordLessLoginForm,\\n\\t\\tResetPassword,\\n\\t\\tUpdatePassword,\\n\\t},\\n\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tloading: false,\\n\\t\\t\\tuser: loadState('core', 'loginUsername', ''),\\n\\t\\t\\tpasswordlessLogin: false,\\n\\t\\t\\tresetPassword: false,\\n\\n\\t\\t\\t// Initial data\\n\\t\\t\\terrors: loadState('core', 'loginErrors', []),\\n\\t\\t\\tmessages: loadState('core', 'loginMessages', []),\\n\\t\\t\\tredirectUrl: loadState('core', 'loginRedirectUrl', false),\\n\\t\\t\\tthrottleDelay: loadState('core', 'loginThrottleDelay', 0),\\n\\t\\t\\tinvertedColors: OCA.Theming && OCA.Theming.inverted,\\n\\t\\t\\tcanResetPassword: loadState('core', 'loginCanResetPassword', false),\\n\\t\\t\\tresetPasswordLink: loadState('core', 'loginResetPasswordLink', ''),\\n\\t\\t\\tautoCompleteAllowed: loadState('core', 'loginAutocomplete', true),\\n\\t\\t\\tresetPasswordTarget: loadState('core', 'resetPasswordTarget', ''),\\n\\t\\t\\tresetPasswordUser: loadState('core', 'resetPasswordUser', ''),\\n\\t\\t\\tdirectLogin: query.direct === '1',\\n\\t\\t\\thasPasswordless: loadState('core', 'webauthn-available', false),\\n\\t\\t\\tcountAlternativeLogins: loadState('core', 'countAlternativeLogins', false),\\n\\t\\t\\tisHttps: window.location.protocol === 'https:',\\n\\t\\t\\tisLocalhost: window.location.hostname === 'localhost',\\n\\t\\t\\thasPublicKeyCredential: typeof (window.PublicKeyCredential) !== 'undefined',\\n\\t\\t\\thideLoginForm: loadState('core', 'hideLoginForm', false),\\n\\t\\t}\\n\\t},\\n\\tmethods: {\\n\\t\\tpasswordResetFinished() {\\n\\t\\t\\tthis.resetPasswordTarget = ''\\n\\t\\t\\tthis.directLogin = true\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n\\n<style>\\n\\t.fade-enter-active, .fade-leave-active {\\n\\t\\ttransition: opacity .3s;\\n\\t}\\n\\t.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {\\n\\t\\topacity: 0;\\n\\t}\\n</style>\\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, 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(14, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":23,\"column\":1},\"end\":{\"line\":29,\"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<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},\"18\":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=\\\"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<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</a>\\n\";\n},\"20\":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},\"22\":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<span class=\\\"other-actions icon-more\\\"></span>\\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(23, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":51,\"column\":3},\"end\":{\"line\":58,\"column\":12}}})) != null ? stack1 : \"\")\n + \"\t\t</ul>\\n\t</div>\\n\";\n},\"23\":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\":53,\"column\":13},\"end\":{\"line\":53,\"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\":54,\"column\":15},\"end\":{\"line\":54,\"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\":55,\"column\":11},\"end\":{\"line\":55,\"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(16, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":22,\"column\":0},\"end\":{\"line\":36,\"column\":7}}})) != 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(18, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":37,\"column\":0},\"end\":{\"line\":41,\"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(20, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":42,\"column\":0},\"end\":{\"line\":46,\"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(22, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":47,\"column\":0},\"end\":{\"line\":61,\"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 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","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// 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 = 4577;","__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\t4577: 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));","// 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__(10473); })\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","enableDynamicSlideToggle","Apps","$el","removeClass","trigger","addClass","method","endpoint","OC","type","toUpperCase","url","generateOcsUrl","data","success","bind","appConfig","window","oc_appconfig","AppConfig","getValue","app","key","defaultValue","setValue","value","getApps","getKeys","deleteKey","_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","_$trigger","_view","_contactsPromise","el","_loadContacts","_toggleVisibility","Promise","resolve","_getContacts","filter","term","catch","rawUid","document","getElementsByTagName","getAttribute","displayName","currentUser","Search","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","filelist","allowDirectoryChooser","_getFilePickerTemplate","$filePicker","emptytext","newtext","nameCol","sizeCol","modifiedCol","remove","$showGridView","_onGridviewChange","_getGridSettings","newButton","event","stopImmediatePropagation","preventDefault","$input","submit","newName","lastPos","lastIndexOf","selectRange","$form","stopPropagation","filename","trimmedName","trim","match","isFileNameValid","file","escape","checkInput","newname","createDirectory","always","_fillFilePicker","keypress","keyCode","which","ready","$fileListHeader","$filelist","$filelistContainer","$dirTree","_handleTreeListSelect","_handlePickerClick","dir","currentTarget","functionToCall","returnType","datapath","index","element","selectedName","button","width","height","style","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","checked","gridview","next","toggleClass","defer","$filePickerTemplate","tmpl","$listTmpl","detach","jqXHR","$messageTemplate","$fileexistsTemplate","_getFileList","mimeType","mimetypes","empty","getFolderContents","files","mimetype","showHiddenInput","getElementById","startsWith","Comparators","fileInfo1","fileInfo2","comparator","sort","file1","file2","isFavorite","fileInfo","tags","_fillSlug","idx","entry","simpleSize","sizeColor","icon","parseInt","pow","filename1","filename2","date","previewUrl","addButton","$template","paths","prepend","prependTo","getOcDialog","_changeButtonsText","$element","ctrlKey","copyText","folder","moveText","eq","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","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","hasClass","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","_vm","_h","$createElement","_c","_self","$event","$emit","staticClass","domProps","_v","class","invertedColors","ref","loginActionUrl","_s","_e","_l","loadingIcon","staticStyle","shake","invalidPassword","directives","rawName","expression","autoCompleteAllowed","updateUsername","composing","user","passwordInputType","togglePassword","toggleIcon","throttleDelay","redirectUrl","timezone","timezoneOffset","loginName","Axios","resp","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","isHttps","isLocalhost","hasPublicKeyCredential","validCredentials","authenticate","warning","Array","isArray","proceed","_i","$$a","$$el","$$c","$$i","concat","slice","clear","hideLoginForm","directLogin","passwordlessLogin","resetPassword","resetPasswordTarget","canResetPassword","resetPasswordLink","passwordResetFinished","messages","errors","countAlternativeLogins","methods","Vue","Nextcloud","LoginView","$mount","___CSS_LOADER_EXPORT___","module","exports","container","depth0","helpers","partials","stack1","lookupProperty","propertyName","hasOwnProperty","nullContext","program","noop","alias1","lambda","alias2","escapeExpression","helper","hooks","helperMissing","alias3","alias4","map","webpackContext","req","webpackContextResolve","__webpack_require__","o","code","keys","__webpack_module_cache__","moduleId","cachedModule","loaded","__webpack_modules__","amdD","amdO","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","every","splice","getter","__esModule","d","definition","defineProperty","enumerable","globalThis","Function","obj","Symbol","toStringTag","nmd","baseURI","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
diff --git a/dist/core-main.js b/dist/core-main.js
index 02b05daa9a1..bdc086e970d 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,i={6772:function(){Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector),Element.prototype.closest||(Element.prototype.closest=function(e){var t=this;do{if(t.matches(e))return t;t=t.parentElement||t.parentNode}while(null!==t&&1===t.nodeType);return null})},97782:function(){if("undefined"==typeof console||void 0===console.log){window.console||(window.console={});for(var e=function(){},t=["log","debug","warn","info","error","assert","time","timeEnd"],n=0;n<t.length;n++)console[t[n]]=e}},76389:function(){if("-ms-user-select"in document.documentElement.style&&navigator.userAgent.match(/IEMobile\/10\.0/)){var e=document.createElement("style");e.appendChild(document.createTextNode("@-ms-viewport{width:auto!important}")),document.getElementsByTagName("head")[0].appendChild(e)}},13084:function(e,i,o){"use strict";var a={};o.r(a),o.d(a,{deleteKey:function(){return E},getApps:function(){return b},getKeys:function(){return y},getValue:function(){return k},setValue:function(){return x}});var r={};o.r(r),o.d(r,{formatLinksPlain:function(){return pt},formatLinksRich:function(){return ft},plainToRich:function(){return ut},richToPlain:function(){return dt}});var s={};o.r(s),o.d(s,{dismiss:function(){return gt},query:function(){return ht}});var l=o(19755),c=o.n(l),u=(o(28594),o(35666),o(97782),o(6772),o(76389),o(74854)),d=o(79753),f={},p=[],h=o(64492),g=o(26932),A={updatableNotification:null,getDefaultNotificationFunction:null,setDefault:function(e){this.getDefaultNotificationFunction=e},hide:function(e,t){h.default.isFunction(e)&&(t=e,e=void 0),e?(e.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)})),t&&t.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(e,t){(t=t||{}).isHTML=!0,t.timeout=t.timeout?t.timeout:g.Rl;var n=(0,g.PV)(e,t);return n.toastElement.toastify=n,c()(n.toastElement)},show:function(e,t){(t=t||{}).timeout=t.timeout?t.timeout:g.Rl;var n=(0,g.PV)(function(e){return e.toString().split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;").split('"').join("&quot;").split("'").join("&#039;")}(e),t);return n.toastElement.toastify=n,c()(n.toastElement)},showUpdate:function(e){return this.updatableNotification&&this.updatableNotification.hideToast(),this.updatableNotification=(0,g.PV)(e,{timeout:g.Rl}),this.updatableNotification.toastElement.toastify=this.updatableNotification,c()(this.updatableNotification.toastElement)},showTemporary:function(e,t){(t=t||{}).timeout=t.timeout||g.TN;var n=(0,g.PV)(e,t);return n.toastElement.toastify=n,c()(n.toastElement)},isHidden:function(){return!c()("#content").find(".toastify").length}},m=h.default.throttle((function(){A.showTemporary(t("core","Connection to server lost"))}),7e3,{trailing:!1}),v=!1,w={enableDynamicSlideToggle:function(){v=!0},showAppSidebar:function(e){(e||c()("#app-sidebar")).removeClass("disappear").show(),c()("#app-content").trigger(new(c().Event)("appresized"))},hideAppSidebar:function(e){(e||c()("#app-sidebar")).hide().addClass("disappear"),c()("#app-content").trigger(new(c().Event)("appresized"))}};function C(e,t,n){"post"!==e&&"delete"!==e||!Ge.PasswordConfirmation.requiresPasswordConfirmation()?(n=n||{},c().ajax({type:e.toUpperCase(),url:(0,d.generateOcsUrl)("apps/provisioning_api/api/v1/config/apps")+t,data:n.data||{},success:n.success,error:n.error})):Ge.PasswordConfirmation.requirePasswordConfirmation(_.bind(C,this,e,t,n))}function b(e){C("get","",e)}function y(e,t){C("get","/"+e,t)}function k(e,t,n,i){(i=i||{}).data={defaultValue:n},C("get","/"+e+"/"+t,i)}function x(e,t,n,i){(i=i||{}).data={value:n},C("post","/"+e+"/"+t,i)}function E(e,t,n){C("delete","/"+e+"/"+t,n)}var P=window.oc_appconfig||{},B={getValue:function(e,t,n,i){k(e,t,n,{success:i})},setValue:function(e,t,n){x(e,t,n)},getApps:function(e){b({success:e})},getKeys:function(e,t){y(e,{success:t})},deleteKey:function(e,t){E(e,t)}},O=void 0!==window._oc_appswebroots&&window._oc_appswebroots,T=o(72316),j=o.n(T),I=o(87240),D={create:"POST",update:"PROPPATCH",patch:"PROPPATCH",delete:"DELETE",read:"PROPFIND"};function z(e,t){if(h.default.isArray(e))return h.default.map(e,(function(e){return z(e,t)}));var n={href:e.href};return h.default.each(e.propStat,(function(e){if("HTTP/1.1 200 OK"===e.status)for(var i in e.properties){var o=i;i in t&&(o=t[i]),n[o]=e.properties[i]}})),n.id||(n.id=N(n.href)),n}function N(e){var t=e.indexOf("?");t>0&&(e=e.substr(0,t));var n,i=e.split("/");do{n=i[i.length-1],i.pop()}while(!n&&i.length>0);return n}function S(e){return e>=200&&e<=299}function M(e,t,n,i){return e.propPatch(t.url,function(e,t){var n,i={};for(n in e){var o=t[n],a=e[n];o||(console.warn('No matching DAV property for property "'+n),o=n),(h.default.isBoolean(a)||h.default.isNumber(a))&&(a=""+a),i[o]=a}return i}(n.changed,t.davProperties),i).then((function(e){S(e.status)?h.default.isFunction(t.success)&&t.success(n.toJSON()):h.default.isFunction(t.error)&&t.error(e)}))}var U=j().noConflict();Object.assign(U,{davCall:function(e,t){var n=new I.dav.Client({baseUrl:e.url,xmlNamespaces:h.default.extend({"DAV:":"d","http://owncloud.org/ns":"oc"},e.xmlNamespaces||{})});n.resolveUrl=function(){return e.url};var i=h.default.extend({"X-Requested-With":"XMLHttpRequest",requesttoken:OC.requestToken},e.headers);return"PROPFIND"===e.type?function(e,t,n,i){return e.propFind(t.url,h.default.values(t.davProperties)||[],t.depth,i).then((function(e){if(S(e.status)){if(h.default.isFunction(t.success)){var n=h.default.invert(t.davProperties),i=z(e.body,n);t.depth>0&&i.shift(),t.success(i)}}else h.default.isFunction(t.error)&&t.error(e)}))}(n,e,0,i):"PROPPATCH"===e.type?M(n,e,t,i):"MKCOL"===e.type?function(e,t,n,i){return e.request(t.type,t.url,i,null).then((function(o){S(o.status)?M(e,t,n,i):h.default.isFunction(t.error)&&t.error(o)}))}(n,e,t,i):function(e,t,n,i){return i["Content-Type"]="application/json",e.request(t.type,t.url,i,t.data).then((function(e){if(S(e.status)){if(h.default.isFunction(t.success)){if("PUT"===t.type||"POST"===t.type||"MKCOL"===t.type){var i=e.body||n.toJSON(),o=e.xhr.getResponseHeader("Content-Location");return"POST"===t.type&&o&&(i.id=N(o)),void t.success(i)}if(207===e.status){var a=h.default.invert(t.davProperties);t.success(z(e.body,a))}else t.success(e.body)}}else h.default.isFunction(t.error)&&t.error(e)}))}(n,e,t,i)},davSync:function(e){return function(t,n,i){var o={type:D[t]||t},a=n instanceof e.Collection;if("update"===t&&(n.hasInnerCollection?o.type="MKCOL":(n.usePUT||n.collection&&n.collection.usePUT)&&(o.type="PUT")),i.url||(o.url=h.default.result(n,"url")||function(){throw new Error('A "url" property or function must be specified')}()),null!=i.data||!n||"create"!==t&&"update"!==t&&"patch"!==t||(o.data=JSON.stringify(i.attrs||n.toJSON(i))),"PROPFIND"!==o.type&&(o.processData=!1),"PROPFIND"===o.type||"PROPPATCH"===o.type){var r=n.davProperties;!r&&n.model&&(r=n.model.prototype.davProperties),r&&(h.default.isFunction(r)?o.davProperties=r.call(n):o.davProperties=r),o.davProperties=h.default.extend(o.davProperties||{},i.davProperties),h.default.isUndefined(i.depth)&&(i.depth=a?1:0)}var s=i.error;i.error=function(e,t,n){i.textStatus=t,i.errorThrown=n,s&&s.call(i.context,e,t,n)};var l=i.xhr=e.davCall(h.default.extend(o,i),n);return n.trigger("request",n,l,i),l}}(U)});var L=U,F=o(76632),R=window._oc_config||{},Q=T.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=T.Collection.extend({model:Q}),H=T.View.extend({_collection:void 0,_subViews:[],initialize:function(e){this._collection=e.collection},render:function(){var e=this;return e.$el.html(""),e._subViews=[],e._collection.forEach((function(t){var n=new K({model:t});n.render(),e.$el.append(n.$el),n.on("toggle:actionmenu",e._onChildActionMenuToggle,e),e._subViews.push(n)})),e},_onChildActionMenuToggle:function(e){this._subViews.forEach((function(t){t.trigger("parent:toggle:actionmenu",e)}))}}),K=T.View.extend({className:"contact",_template:void 0,_model:void 0,_actionMenuShown:!1,events:{"click .icon-more":"_onToggleActionsMenu"},contactTemplate:o(10944),template:function(e){return this.contactTemplate(e)},initialize:function(e){this._model=e.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(e){this.$el.is(e)||(this._actionMenuShown=!1,this.$(".menu").hide())}}),Y=T.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:o(95386),error:o(20421),menu:o(66115),list:o(34083)},_onSearch:h.default.debounce((function(e){var t=this.$("#contactsmenu-search").val();t!==this._searchTerm&&(this.trigger("search",this.$("#contactsmenu-search").val()),this._searchTerm=t)}),700),loadingTemplate:function(e){return this.templates.loading(e)},errorTemplate:function(e){return this.templates.error(h.default.extend({couldNotLoadText:t("core","Could not load your contacts")},e))},contentTemplate:function(e){return this.templates.menu(h.default.extend({searchContactsText:t("core","Search contacts …")},e))},contactsTemplate:function(e){return this.templates.list(h.default.extend({noContactsFoundText:t("core","No contacts found"),showAllContactsText:t("core","Show all contacts …"),contactsAppMgmtText:t("core","Install the Contacts app")},e))},initialize:function(e){this.options=e},showLoading:function(e){this.render(),this._contacts=void 0,this.$(".content").html(this.loadingTemplate({loadingText:e}))},showError:function(){this.render(),this._contacts=void 0,this.$(".content").html(this.errorTemplate())},showContacts:function(e,t){this._contacts=e.contacts,this.render({contacts:e.contacts});var n=new H({collection:e.contacts});n.render(),this.$(".content").html(this.contactsTemplate({contacts:e.contacts,searchTerm:t,contactsAppEnabled:e.contactsAppEnabled,contactsAppURL:Ge.generateUrl("/apps/contacts"),canInstallApp:Ge.isUserAdmin(),contactsAppMgmtURL:Ge.generateUrl("/settings/apps/social/contacts")})),this.$("#contactsmenu-contacts").html(n.$el)},render:function(e){var t=this.$("#contactsmenu-search").val();return this.$el.html(this.contentTemplate(e)),this.$("#contactsmenu-search").val(t),this.$("#contactsmenu-search").focus(),this}}),q=function(e){this.initialize(e)};q.prototype={$el:void 0,_$trigger:void 0,_view:void 0,_contactsPromise:void 0,initialize:function(e){this.$el=e.el,this._$trigger=e.trigger,this._view=new Y({el:this.$el}),this._view.on("search",(function(e){this._loadContacts(e)}),this),Ge.registerMenu(this._$trigger,this.$el,function(){this._toggleVisibility(!0)}.bind(this),!0),this.$el.on("beforeHide",function(){this._toggleVisibility(!1)}.bind(this))},_toggleVisibility:function(e){return e?this._loadContacts():(this.$el.html(""),Promise.resolve())},_getContacts:function(e){var t=Ge.generateUrl("/contactsmenu/contacts");return Promise.resolve(c().ajax(t,{method:"POST",data:{filter:e}}))},_loadContacts:function(e){var n=this;return n._contactsPromise||(n._contactsPromise=n._getContacts(e)),h.default.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(e){n._view.showError(),console.error("There was an error loading your contacts",e)})).then((function(){delete n._contactsPromise})).catch(console.error.bind(this))}};var W=q,J=document.getElementsByTagName("head")[0].getAttribute("data-user"),V=document.getElementsByTagName("head")[0].getAttribute("data-user-displayname"),Z=void 0!==J&&J;function X(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function $(e,t,n){return t&&X(e.prototype,t),n&&X(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}var ee={Search:$((function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),console.warn("OCA.Search is deprecated. Please use the unified search API instead")}))};function te(e){return te="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},te(e)}var ne,ie,oe,ae={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(e,t,n,i){this.message(e,t,"alert",ae.OK_BUTTON,n,i)},info:function(e,t,n,i){this.message(e,t,"info",ae.OK_BUTTON,n,i)},confirm:function(e,t,n,i){return this.message(e,t,"notice",ae.YES_NO_BUTTONS,n,i)},confirmDestructive:function(e,t,n,i,o){return this.message(e,t,"none",n,i,void 0===o||o)},confirmHtml:function(e,t,n,i){return this.message(e,t,"notice",ae.YES_NO_BUTTONS,n,i,!0)},prompt:function(e,n,i,o,a,r){return c().when(this._getMessageTemplate()).then((function(s){var l="oc-dialog-"+ae.dialogsCounter+"-content",u="#"+l,d=s.octemplate({dialog_name:l,title:n,message:e,type:"notice"}),f=c()("<input/>");f.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(f),void 0===o&&(o=!1),c()("body").append(d),void 0!==i&&(i=h.default.once(i));var g=[{text:t("core","No"),click:function(){void 0!==i&&i(!1,f.val()),c()(u).ocdialog("close")}},{text:t("core","Yes"),click:function(){void 0!==i&&i(!0,f.val()),c()(u).ocdialog("close")},defaultButton:!0}];c()(u).ocdialog({closeOnEscape:!0,modal:o,buttons:g,close:function(){void 0!==i&&i(!1,f.val())}}),f.focus(),ae.dialogsCounter++}))},filepicker:function(e,n,i,o,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"),f=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=ee.Sharing&&ee.Sharing.PublicApp&&ee.Sharing.PublicApp.fileList?ee.Sharing.PublicApp.fileList.filesClient:Ge.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==o&&(o=[]),"string"==typeof o&&(o=[o]),u.$filePicker=p.octemplate({dialog_name:"oc-dialog-filepicker-content",title:e,emptytext:d,newtext:f,nameCol:t("core","Name"),sizeCol:t("core","Size"),modifiedCol:t("core","Modified")}).data("path",s).data("multiselect",i).data("mimetype",o).data("allowDirectoryChooser",l.allowDirectoryChooser),void 0===a&&(a=!1),void 0===i&&(i=!1),u.$filePicker.find("#picker-view-toggle").remove(),u.$filePicker.find("#picker-filestable").removeClass("view-grid"),c()("body").append(u.$filePicker),u.$showGridView=c()("input#picker-showgridview"),u.$showGridView.on("change",h.default.bind(u._onGridviewChange,u)),u._getGridSettings();var g=u.$filePicker.find(".actions.creatable .button-add");r!==u.FILEPICKER_TYPE_CHOOSE||l.allowDirectoryChooser||g.hide(),g.on("focus",(function(){u.$filePicker.ocdialog("setEnterCallback",(function(){event.stopImmediatePropagation(),event.preventDefault(),g.click()}))})),g.on("blur",(function(){u.$filePicker.ocdialog("unsetEnterCallback")})),Ge.registerMenu(g,u.$filePicker.find(".menu"),(function(){m.tooltip("hide"),m.focus(),u.$filePicker.ocdialog("setEnterCallback",(function(){event.stopImmediatePropagation(),event.preventDefault(),u.$filePicker.submit()}));var e=m.val(),t=e.lastIndexOf(".");-1===t&&(t=e.length),m.selectRange(0,t)}));var A=u.$filePicker.find(".filenameform"),m=A.find("input[type='text']");A.find("input[type='submit']").on("click",(function(e){e.stopImmediatePropagation(),e.preventDefault(),A.submit()}));A.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(Ge.config.blacklist_files_regex))throw t("files",'"{name}" is not an allowed filetype',{name:e});return!0}(e)){if(u.filelist.find((function(e){return e.name===this}),e))throw t("files","{newName} already exists",{newName:e},void 0,{escape:!1});return!0}}catch(e){m.attr("title",e),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(e){u._fillFilePicker(u.$filePicker.data("path")+"/"+n)})),Ge.hideMenus(),u.$filePicker.ocdialog("unsetEnterCallback"),u.$filePicker.click(),m.val(f)}})),m.keypress((function(e){13!==e.keyCode&&13!==e.which||(e.stopImmediatePropagation(),e.preventDefault(),A.submit())})),m.on("input",(function(e){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","div:not(:last-child)",u,(function(e){u._handleTreeListSelect(e,r)})),u.$filelist.on("click","tr",(function(e){u._handlePickerClick(e,c()(this),r)})),u.$fileListHeader.on("click","a",(function(e){var t=u.$filePicker.data("path");u.filepicker.sortField=c()(e.currentTarget).data("sort"),u.filepicker.sortOrder="asc"===u.filepicker.sortOrder?"desc":"asc",u._fillFilePicker(t)})),u._fillFilePicker(s)}));var v=function(e){if(void 0!==n){var t;if(!0===i)t=[],u.$filelist.find("tr.filepicker_element_selected").each((function(e,n){t.push(u.$filePicker.data("path")+"/"+c()(n).data("entryname"))}));else{t=u.$filePicker.data("path");var o=u.$filelist.find("tr.filepicker_element_selected").data("entryname");o&&(t+="/"+o)}n(t,e),u.$filePicker.ocdialog("close")}},w=[];r===ae.FILEPICKER_TYPE_CHOOSE?w.push({text:t("core","Choose"),click:function(){v(ae.FILEPICKER_TYPE_CHOOSE)},defaultButton:!0}):r===ae.FILEPICKER_TYPE_CUSTOM?l.buttons.forEach((function(e){w.push({text:e.text,click:function(){v(e.type)},defaultButton:e.defaultButton})})):(r!==ae.FILEPICKER_TYPE_COPY&&r!==ae.FILEPICKER_TYPE_COPY_MOVE||w.push({text:t("core","Copy"),click:function(){v(ae.FILEPICKER_TYPE_COPY)},defaultButton:!1}),r!==ae.FILEPICKER_TYPE_MOVE&&r!==ae.FILEPICKER_TYPE_COPY_MOVE||w.push({text:t("core","Move"),click:function(){v(ae.FILEPICKER_TYPE_MOVE)},defaultButton:!0})),u.$filePicker.ocdialog({closeOnEscape:!0,width:600,height:500,modal:a,buttons:w,style:{buttons:"aside"},close:function(){try{c()(this).ocdialog("destroy").remove()}catch(e){}u.$filePicker=null}});var C=u.$filePicker.closest(".oc-dialog").find(".primary");-1!==u.$filePicker.data("mimetype").indexOf("httpd/unix-directory")||u.$filePicker.data("allowDirectoryChooser")?C.prop("disabled",!1):C.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,i,o,a,r,s){return c().when(this._getMessageTemplate()).then((function(l){var u="oc-dialog-"+ae.dialogsCounter+"-content",d="#"+u,f=l.octemplate({dialog_name:u,title:n,message:e,type:i},s?{escapeFunction:""}:{});void 0===r&&(r=!1),c()("body").append(f);var p=[];switch(o){case ae.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 ae.OK_BUTTON:p[0]={text:t("core","OK"),click:function(){c()(d).ocdialog("close"),void 0!==a&&a()},defaultButton:!0};break;default:"object"===te(o)&&o.type===ae.YES_NO_BUTTONS&&(p=[{text:o.cancel||t("core","No"),click:function(){void 0!==a&&a(!1),c()(d).ocdialog("close")}},{text:o.confirm||t("core","Yes"),click:function(){void 0!==a&&a(!0),c()(d).ocdialog("close")},defaultButton:!0,classes:o.confirmClasses}])}c()(d).ocdialog({closeOnEscape:!0,closeCallback:function(){a&&a(!1)},modal:r,buttons:p}),ae.dialogsCounter++})).fail((function(i,o){0===i?alert(n+": "+e):alert(t("core","Error loading message template: {error}",{error:o}))}))},_fileexistsshown:!1,fileexists:function(e,i,o,a){var r=this,s=new(c().Deferred),l=function(e,t,n,i,o){i=Math.round(i),o=Math.round(o);for(var a=e.getContext("2d").getImageData(0,0,t,n),r=e.getContext("2d").getImageData(0,0,i,o),s=a.data,l=r.data,c=t/i,u=n/o,d=Math.ceil(c/2),f=Math.ceil(u/2),p=0;p<o;p++)for(var h=0;h<i;h++){for(var g=4*(h+p*i),A=0,m=0,v=0,w=0,C=0,b=0,y=0,k=(p+.5)*u,x=Math.floor(p*u);x<(p+1)*u;x++)for(var E=Math.abs(k-(x+.5))/f,P=(h+.5)*c,B=E*E,O=Math.floor(h*c);O<(h+1)*c;O++){var T=Math.abs(P-(O+.5))/d,j=Math.sqrt(B+T*T);j>=-1&&j<=1&&(A=2*j*j*j-3*j*j+1)>0&&(y+=A*s[3+(T=4*(O+x*t))],v+=A,s[T+3]<255&&(A=A*s[T+3]/250),w+=A*s[T],C+=A*s[T+1],b+=A*s[T+2],m+=A)}l[g]=w/m,l[g+1]=C/m,l[g+2]=b/m,l[g+3]=y/v}e.getContext("2d").clearRect(0,0,Math.max(t,i),Math.max(n,o)),e.width=i,e.height=o,e.getContext("2d").putImageData(r,0,0)},u=function(n,i,o){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(i.name),r.find(".size").text(Ge.Util.humanFileSize(i.size)),r.find(".mtime").text(Ge.Util.formatDate(i.mtime)),o.size&&o.lastModified&&(s.find(".size").text(Ge.Util.humanFileSize(o.size)),s.find(".mtime").text(Ge.Util.formatDate(o.lastModified)));var u=i.directory+"/"+i.name,d={file:u,x:96,y:96,c:i.etag,forceIcon:0},f=Files.generatePreviewUrl(d);f=f.replace(/'/g,"%27"),r.find(".icon").css({"background-image":"url('"+f+"')"}),function(e){var t=new(c().Deferred),n=e.type&&e.type.split("/").shift();if(window.FileReader&&"image"===n){var i=new FileReader;i.onload=function(e){var n=new Blob([e.target.result]);window.URL=window.URL||window.webkitURL;var i=window.URL.createObjectURL(n),o=new Image;o.src=i,o.onload=function(){var e,n,i,a,r,s,c,u=(e=o,r=document.createElement("canvas"),s=e.width,c=e.height,s>c?(i=0,n=(s-c)/2):(i=(c-s)/2,n=0),a=Math.min(s,c),r.width=a,r.height=a,r.getContext("2d").drawImage(e,n,i,a,a,0,0,a,a),l(r,a,a,96,96),r.toDataURL("image/png",.7));t.resolve(u)}},i.readAsArrayBuffer(e)}else t.reject();return t}(o).then((function(e){s.find(".icon").css("background-image","url("+e+")")}),(function(){u=Ge.MimeType.getIconUrl(o.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),o.lastModified>i.mtime?s.find(".mtime").css("font-weight","bold"):o.lastModified<i.mtime&&r.find(".mtime").css("font-weight","bold"),o.size&&o.size>i.size?s.find(".size").css("font-weight","bold"):o.size&&o.size<i.size&&r.find(".size").css("font-weight","bold"),"readonly"===i.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",f="#"+d;if(this._fileexistsshown){var p=c()(f+" .conflicts");u(p,i,o);var h=c()(f+" .conflict").length,g=n("core","{count} file conflict","{count} file conflicts",h,{count:h});c()(f).parent().children(".oc-dialog-title").text(g),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),i&&o){var h=p.find(".conflicts");u(h,i,o)}var g=[{text:t("core","Cancel"),classes:"cancel",click:function(){void 0!==a.onCancel&&a.onCancel(e),c()(f).ocdialog("close")}},{text:t("core","Continue"),classes:"continue",click:function(){void 0!==a.onContinue&&a.onContinue(c()(f+" .conflict")),c()(f).ocdialog("close")}}];c()(f).ocdialog({width:500,closeOnEscape:!0,modal:!0,buttons:g,closeButton:null,close:function(){r._fileexistsshown=!1;try{c()(this).ocdialog("destroy").remove()}catch(e){}}}),c()(f).css("height","auto");var A=p.closest(".oc-dialog").find("button.continue");function m(){var e=p.find(".conflicts .checkbox:checked").length;A.prop("disabled",0===e)}A.prop("disabled",!0),c()(f).find(".allnewfiles").on("click",(function(){c()(f).find('.conflict .replacement input[type="checkbox"]').prop("checked",c()(this).prop("checked"))})),c()(f).find(".allexistingfiles").on("click",(function(){c()(f).find('.conflict .original:not(.readonly) input[type="checkbox"]').prop("checked",c()(this).prop("checked"))})),c()(f).find(".conflicts").on("click",".replacement,.original:not(.readonly)",(function(){var e=c()(this).find('input[type="checkbox"]');e.prop("checked",!e.prop("checked"))})),c()(f).find(".conflicts").on("click",'.replacement input[type="checkbox"],.original:not(.readonly) input[type="checkbox"]',(function(){var e=c()(this);e.prop("checked",!e.prop("checked"))})),c()(f).on("click",".replacement,.allnewfiles",(function(){var e=c()(f).find('.conflict .replacement input[type="checkbox"]:checked').length;e===c()(f+" .conflict").length?(c()(f).find(".allnewfiles").prop("checked",!0),c()(f).find(".allnewfiles + .count").text(t("core","(all selected)"))):e>0?(c()(f).find(".allnewfiles").prop("checked",!1),c()(f).find(".allnewfiles + .count").text(t("core","({count} selected)",{count:e}))):(c()(f).find(".allnewfiles").prop("checked",!1),c()(f).find(".allnewfiles + .count").text("")),m()})),c()(f).on("click",".original,.allexistingfiles",(function(){var e=c()(f).find('.conflict .original input[type="checkbox"]:checked').length;e===c()(f+" .conflict").length?(c()(f).find(".allexistingfiles").prop("checked",!0),c()(f).find(".allexistingfiles + .count").text(t("core","(all selected)"))):e>0?(c()(f).find(".allexistingfiles").prop("checked",!1),c()(f).find(".allexistingfiles + .count").text(t("core","({count} selected)",{count:e}))):(c()(f).find(".allexistingfiles").prop("checked",!1),c()(f).find(".allexistingfiles + .count").text("")),m()})),s.resolve()})).fail((function(){s.reject(),alert(t("core","Error loading file exists template"))}));return s.promise()},_getGridSettings:function(){var e=this;c().get(Ge.generateUrl("/apps/files/api/v1/showgridview"),(function(t){e.$showGridView.get(0).checked=t.gridview,e.$showGridView.next("#picker-view-toggle").removeClass("icon-toggle-filelist icon-toggle-pictures").addClass(t.gridview?"icon-toggle-filelist":"icon-toggle-pictures"),c()(".list-container").toggleClass("view-grid",t.gridview)}))},_onGridviewChange:function(){var e=this.$showGridView.is(":checked");Ge.currentUser&&c().post(Ge.generateUrl("/apps/files/api/v1/showgridview"),{show:e}),this.$showGridView.next("#picker-view-toggle").removeClass("icon-toggle-filelist icon-toggle-pictures").addClass(e?"icon-toggle-filelist":"icon-toggle-pictures"),c()(".list-container").toggleClass("view-grid",e)},_getFilePickerTemplate:function(){var e=c().Deferred();if(this.$filePickerTemplate)e.resolve(this.$filePickerTemplate);else{var t=this;c().get(Ge.filePath("core","templates","filepicker.html"),(function(n){t.$filePickerTemplate=c()(n),t.$listTmpl=t.$filePickerTemplate.find(".filelist tbody tr:first-child").detach(),e.resolve(t.$filePickerTemplate)})).fail((function(t,n,i){e.reject(t.status,i)}))}return e.promise()},_getMessageTemplate:function(){var e=c().Deferred();if(this.$messageTemplate)e.resolve(this.$messageTemplate);else{var t=this;c().get(Ge.filePath("core","templates","message.html"),(function(n){t.$messageTemplate=c()(n),e.resolve(t.$messageTemplate)})).fail((function(t,n,i){e.reject(t.status,i)}))}return e.promise()},_getFileExistsTemplate:function(){var e=c().Deferred();if(this.$fileexistsTemplate)e.resolve(this.$fileexistsTemplate);else{var t=this;c().get(Ge.filePath("files","templates","fileexists.html"),(function(n){t.$fileexistsTemplate=c()(n),e.resolve(t.$fileexistsTemplate)})).fail((function(){e.reject()}))}return e.promise()},_getFileList:function(e,t){return"string"==typeof t&&(t=[t]),c().getJSON(Ge.filePath("files","ajax","list.php"),{dir:e,mimetypes:JSON.stringify(t)})},_fillFilePicker:function(e){var n=this;this.$filelist.empty(),this.$filePicker.find(".emptycontent").hide(),this.$filelistContainer.addClass("icon-loading"),this.$filePicker.data("path",e);var i=this.$filePicker.data("mimetype");"string"==typeof i&&(i=[i]),n.$fileListHeader.find(".sort-indicator").addClass("hidden").removeClass("icon-triangle-n").removeClass("icon-triangle-s"),n.$fileListHeader.find("[data-sort="+n.filepicker.sortField+"] .sort-indicator").removeClass("hidden"),"asc"===n.filepicker.sortOrder?n.$fileListHeader.find("[data-sort="+n.filepicker.sortField+"] .sort-indicator").addClass("icon-triangle-n"):n.$fileListHeader.find("[data-sort="+n.filepicker.sortField+"] .sort-indicator").addClass("icon-triangle-s"),n.filepicker.filesClient.getFolderContents(e).then((function(o,a){n.filelist=a,i&&i.length>0&&-1===i.indexOf("*")&&(a=a.filter((function(e){return"dir"===e.type||-1!==i.indexOf(e.mimetype)})));var r=document.getElementById("showHiddenFiles");null===r||"1"===r.value||(a=a.filter((function(e){return!e.name.startsWith(".")})));var s={name:function(e,t){return"dir"===e.type&&"dir"!==t.type?-1:"dir"!==e.type&&"dir"===t.type?1:Ge.Util.naturalSortCompare(e.name,t.name)},size:function(e,t){return e.size-t.size},mtime:function(e,t){return e.mtime-t.mtime}},l=s[n.filepicker.sortField]||s.name;a=a.sort((function(e,t){var i=function(e){return e.tags&&e.tags.indexOf(Ge.TAG_FAVORITE)>=0};return i(e)&&!i(t)?-1:!i(e)&&i(t)?1:"asc"===n.filepicker.sortOrder?l(e,t):-l(e,t)})),n._fillSlug(),0===a.length?(n.$filePicker.find(".emptycontent").show(),n.$fileListHeader.hide()):(n.$filePicker.find(".emptycontent").hide(),n.$fileListHeader.show()),n.$filelist.empty(),c().each(a,(function(i,o){var a,r;if(o.icon=Ge.MimeType.getIconUrl(o.mimetype),void 0!==o.size&&o.size>=0?(a=Ge.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=n.$listTmpl.octemplate({type:o.type,dir:e,filename:o.name,filename1:l,filename2:u,date:Ge.Util.relativeModifiedDate(o.mtime),size:a,sizeColor:r,icon:o.icon});if("file"===o.type){var f={file:e+"/"+o.name,x:100,y:100},p=new Image,h=Ge.generateUrl("/core/preview.png?")+c().param(f);p.onload=function(){p.width>5&&d.find("td.filename").attr("style","background-image:url("+h+")")},p.src=h}n.$filelist.append(d)})),n.$filelistContainer.removeClass("icon-loading")}))},_fillSlug:function(){var e=this.$dirTree.find(".actions.creatable").detach();this.$dirTree.empty();var t=this;t.$dirTree.append(e);var n=this.$filePicker.data("path"),i=c()('<div data-dir="{dir}"><a>{name}</a></div>').addClass("crumb");if(n){var o=n.split("/");c().each(o,(function(e,n){if(""===(n=o.pop()))return!1;t.$dirTree.prepend(i.octemplate({dir:o.join("/")+"/"+n,name:n}))}))}i.octemplate({dir:"",name:""},{escapeFunction:null}).prependTo(this.$dirTree)},_handleTreeListSelect:function(e,t){var n=e.data,i=c()(e.target).closest(".crumb").data("dir");n._fillFilePicker(i);var o=e.target.closest(".oc-dialog"),a=c()(".primary",o);this._changeButtonsText(t,i.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(e,t,n){var i=this.$filePicker.closest(".oc-dialog").find(".primary");"file"===t.data("type")?(!0===this.$filePicker.data("multiselect")&&e.ctrlKey||this.$filelist.find(".filepicker_element_selected").removeClass("filepicker_element_selected"),t.toggleClass("filepicker_element_selected"),i.prop("disabled",!1)):"dir"===t.data("type")&&(this._fillFilePicker(this.$filePicker.data("path")+"/"+t.data("entryname")),this._changeButtonsText(n,t.data("entryname")),-1!==this.$filePicker.data("mimetype").indexOf("httpd/unix-directory")||this.$filePicker.data("allowDirectoryChooser")?i.prop("disabled",!1):i.prop("disabled",!0))},_changeButtonsText:function(e,n){var i=""===n?t("core","Copy"):t("core","Copy to {folder}",{folder:n}),o=""===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(i);break;case this.FILEPICKER_TYPE_MOVE:a.text(o);break;case this.FILEPICKER_TYPE_COPY_MOVE:a.eq(0).text(i),a.eq(1).text(o)}}},re=ae,se=(ne=document,ie=u.emit,oe=ne.getElementsByTagName("head")[0].getAttribute("data-requesttoken"),{getToken:function(){return oe},setToken:function(e){ie("csrf-token-update",{token:oe=e})}}),le=se.getToken,ce=se.setToken,ue=function e(t,n){var i,o,a="";if(this.typelessListeners=[],this.closed=!1,this.listeners={},n)for(i in n)a+=i+"="+encodeURIComponent(n[i])+"&";if(a+="requesttoken="+encodeURIComponent(le()),this.useFallBack||"undefined"==typeof EventSource){var r="oc_eventsource_iframe_"+e.iframeCount;e.fallBackSources[e.iframeCount]=this,this.iframe=c()("<iframe/>"),this.iframe.attr("id",r),this.iframe.hide(),o="&",-1===t.indexOf("?")&&(o="?"),this.iframe.attr("src",t+o+"fallback=true&fallback_id="+e.iframeCount+"&"+a),c()("body").append(this.iframe),this.useFallBack=!0,e.iframeCount++}else o="&",-1===t.indexOf("?")&&(o="?"),this.source=new EventSource(t+o+a),this.source.onmessage=function(e){for(var t=0;t<this.typelessListeners.length;t++)this.typelessListeners[t](JSON.parse(e.data))}.bind(this);this.listen("__internal__",function(e){"close"===e&&this.close()}.bind(this))};ue.fallBackSources=[],ue.iframeCount=0,ue.fallBackCallBack=function(e,t,n){ue.fallBackSources[e].fallBackCallBack(t,n)},ue.prototype={typelessListeners:[],iframe:null,listeners:{},useFallBack:!1,fallBackCallBack:function(e,t){var n;if(!this.closed)if(e){if(void 0!==this.listeners.done)for(n=0;n<this.listeners[e].length;n++)this.listeners[e][n](t)}else for(n=0;n<this.typelessListeners.length;n++)this.typelessListeners[n](t)},lastLength:0,listen:function(e,t){t&&t.call&&(e?this.useFallBack?(this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t)):this.source.addEventListener(e,(function(e){void 0!==e.data?t(JSON.parse(e.data)):t("")}),!1):this.typelessListeners.push(t))},close:function(){this.closed=!0,void 0!==this.source&&this.source.close()}};var de=ue,fe=o(42515),pe=null,he=function(e){if(pe){var t=pe;pe.trigger(new(c().Event)("beforeHide")),pe.slideUp(50,(function(){t.trigger(new(c().Event)("afterHide")),e&&e.apply(this,arguments)}))}c()(".menutoggle").attr("aria-expanded",!1),c()(".openedMenu").removeClass("openedMenu"),pe=null},ge=!!window._oc_isadmin,Ae=o(27856),me=o.n(Ae),ve=o(86834),we=o.n(ve),Ce=o(46488),be=o.n(Ce),ye=o(95573),ke=o.n(ye);window._oc_l10n_registry_translations=window._oc_l10n_registry_translations||{},window._oc_l10n_registry_plural_functions=window._oc_l10n_registry_plural_functions||{};var xe=function(e){return void 0!==window._oc_l10n_registry_translations[e]&&void 0!==window._oc_l10n_registry_plural_functions[e]},Ee=function(e){return{translations:window._oc_l10n_registry_translations[e]||{},pluralFunction:window._oc_l10n_registry_plural_functions[e]}};function Pe(e){return Pe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Pe(e)}var Be={load:function(e,t){if(xe(e)||"en"===Ge.getLocale()){var n=c().Deferred(),i=n.promise();return i.then(t),n.resolve(),i}var o=this,a=(0,d.generateFilePath)(e,"l10n",Ge.getLocale()+".json");return c().get(a).then((function(t){t.translations&&o.register(e,t.translations,t.pluralForm)})).then(t)},register:function(e,t){var n,i,o;n=e,i=t,o=this._getPlural,xe(n)?function(e,t,n){window._oc_l10n_registry_translations[e]=Object.assign(window._oc_l10n_registry_translations[e],t),window._oc_l10n_registry_plural_functions[e]=n}(n,i,o):function(e,t,n){window._oc_l10n_registry_translations[e]=t,window._oc_l10n_registry_plural_functions[e]=n}(n,i,o)},_unregister:function(e){delete window._oc_l10n_registry_translations[e],delete window._oc_l10n_registry_plural_functions[e]},translate:function(e,t,n,i,o){var a=o||{};h.default.defaults(a,{escape:!0,sanitize:!0});var r=a.sanitize?me().sanitize:be(),s=a.escape?ke():be(),l=t,c=Ee(e).translations[t];return void 0!==c&&(l=c),"object"===Pe(n)||void 0!==i?r(function(e,t,n){return e.replace(/%n/g,n).replace(/{([^{}]*)}/g,(function(e,n){var i=t[n];return r("string"==typeof i||"number"==typeof i?s(i):e)}))}(l,n,i)):r(l)},translatePlural:function(e,t,n,i,o,a){var r="_"+t+"_::_"+n+"_",s=Ee(e),l=s.translations[r];if(void 0!==l){var u=l;if(c().isArray(u)){var d=s.pluralFunction(i);return this.translate(e,u[d],o,i,a)}}return 1===i?this.translate(e,t,o,i,a):this.translate(e,n,o,i,a)},_getPlural:function(e){var t=Ge.getLanguage();if("pt-BR"===t&&(t="xbr"),void 0===t||""===t)return 1===e?0:1;switch(t.length>3&&(t=t.substring(0,t.lastIndexOf("-"))),t){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===e?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===e||1===e?0:1;case"be":case"bs":case"hr":case"ru":case"sh":case"sr":case"uk":return e%10==1&&e%100!=11?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2;case"cs":case"sk":return 1===e?0:e>=2&&e<=4?1:2;case"ga":return 1===e?0:2===e?1:2;case"lt":return e%10==1&&e%100!=11?0:e%10>=2&&(e%100<10||e%100>=20)?1:2;case"sl":return e%100==1?0:e%100==2?1:e%100==3||e%100==4?2:3;case"mk":return e%10==1?0:1;case"mt":return 1===e?0:0===e||e%100>1&&e%100<11?1:e%100>10&&e%100<20?2:3;case"lv":return 0===e?0:e%10==1&&e%100!=11?1:2;case"pl":return 1===e?0:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?1:2;case"cy":return 1===e?0:2===e?1:8===e||11===e?2:3;case"ro":return 1===e?0:0===e||e%100>0&&e%100<20?1:2;case"ar":return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11&&e%100<=99?4:5}}},Oe=Be;we().registerHelper("t",(function(e,t){return Be.translate(e,t)}));var Te=o(9944),je={startSaving:function(e){this.startAction(e,t("core","Saving …"))},startAction:function(e,t){c()(e).text(t).removeClass("success").removeClass("error").stop(!0,!0).show()},finishedSaving:function(e,t){this.finishedAction(e,t)},finishedAction:function(e,t){"success"===t.status?this.finishedSuccess(e,t.data.message):this.finishedError(e,t.data.message)},finishedSuccess:function(e,t){c()(e).text(t).addClass("success").removeClass("error").stop(!0,!0).delay(3e3).fadeOut(900).show()},finishedError:function(e,t){c()(e).text(t).addClass("error").removeClass("success").show()}},Ie=o(30381),De=o.n(Ie),ze={callback:null,pageLoadTime:null,init:function(){c()(".password-confirm-required").on("click",h.default.bind(this.requirePasswordConfirmation,this)),this.pageLoadTime=De().now()},requiresPasswordConfirmation:function(){var e=this.pageLoadTime-1e3*window.nc_pageLoad,t=De().now()-(e+1e3*window.nc_lastLogin);return window.backendAllowsPasswordConfirmation&&t>18e5},requirePasswordConfirmation:function(e,n,i){n=void 0!==n?n:{};var o={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=h.default.extend(o,n),r=this;this.requiresPasswordConfirmation()&&Ge.dialogs.prompt(a.text,a.title,(function(e,t){e&&""!==t?r._confirmPassword(t,a):h.default.isFunction(i)&&i()}),!0,a.label,!0).then((function(){var e=c()(".oc-dialog:visible");if(e.find(".ui-icon").remove(),e.addClass("password-confirmation"),""!==a.error){var t=c()("<p></p>").addClass("msg warning").text(a.error);e.find(".oc-dialog-content").append(t)}e.find(".oc-dialog-buttonrow").addClass("aside");var n=e.find("button");n.eq(0).hide(),n.eq(1).text(a.confirm)})),this.callback=e},_confirmPassword:function(e,n){var i=this;c().ajax({url:(0,d.generateUrl)("/login/confirm"),data:{password:e},type:"POST",success:function(e){window.nc_lastLogin=e.lastLogin,h.default.isFunction(i.callback)&&i.callback()},error:function(){n.error=t("core","Failed to authenticate, try again"),Ge.PasswordConfirmation.requirePasswordConfirmation(i.callback,n)}})}},_e=window._theme||{},Ne={_handlers:[],_pushState:function(e,t,n){var i;if(i="string"==typeof e?e:Ge.buildQueryString(e),window.history.pushState){if(t=t||location.pathname+"?"+i,navigator.userAgent.toLowerCase().indexOf("firefox")>-1&&parseInt(navigator.userAgent.split("/").pop())<51)for(var o,a=document.querySelectorAll('[fill^="url(#"], [stroke^="url(#"], [filter^="url(#invert"]'),r=0,s=a.length;r<s;r++)(o=a[r]).style.fill=o.style.fill,o.style.stroke=o.style.stroke,o.removeAttribute("filter"),o.setAttribute("filter","url(#invert)");n?window.history.replaceState(e,"",t):window.history.pushState(e,"",t)}else window.location.hash="?"+i,this._cancelPop=!0},pushState:function(e,t){this._pushState(e,t,!1)},replaceState:function(e,t){this._pushState(e,t,!0)},addOnPopStateHandler:function(e){this._handlers.push(e)},_parseHashQuery:function(){var e=window.location.hash,t=e.indexOf("?");return t>=0?e.substr(t+1):e.length?e.substr(1):""},_decodeQuery:function(e){return e.replace(/\+/g," ")},parseUrlQuery:function(){var e,t=this._parseHashQuery();return t&&(e=Ge.parseQueryString(this._decodeQuery(t))),(e=h.default.extend(e||{},Ge.parseQueryString(this._decodeQuery(location.search))))||{}},_onPopState:function(e){var t;if(this._cancelPop)this._cancelPop=!1;else if(this._handlers.length){t=e&&e.state,h.default.isString(t)?t=Ge.parseQueryString(t):t||(t=this.parseUrlQuery()||{});for(var n=0;n<this._handlers.length;n++)this._handlers[n](t)}}};function Se(e){for(var t,n=[],i=0,o=-1,a=0;i<e.length;){t=e.charAt(i);var r=!a&&"."===t||t>="0"&&t<="9";r!==a&&(n[++o]="",a=r),n[o]+=t,i++}return n}var Me={History:Ne,humanFileSize:o(3378).s,computerFileSize:function(e){if("string"!=typeof e)return null;var t=e.toLowerCase().trim(),n=null,i=t.match(/^[\s+]?([0-9]*)(\.([0-9]+))?( +)?([kmgtp]?b?)$/i);return null===i?null:(n=parseFloat(t),isFinite(n)?(i[5]&&(n*={b:1,k:1024,kb:1024,mb:1048576,m:1048576,gb:1073741824,g:1073741824,tb:1099511627776,t:1099511627776,pb:0x4000000000000,p:0x4000000000000}[i[5]]),n=Math.round(n)):null)},formatDate:function(e,t){return void 0===window.TESTING&&console.warn("OC.Util.formatDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment"),t=t||"LLL",De()(e).format(t)},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=De()().diff(De()(e));return n>=0&&n<45e3?t("core","seconds ago"):De()(e).fromNow()},getScrollBarWidth:function(){if(this._scrollBarWidth)return this._scrollBarWidth;var e=document.createElement("p");e.style.width="100%",e.style.height="200px";var t=document.createElement("div");t.style.position="absolute",t.style.top="0px",t.style.left="0px",t.style.visibility="hidden",t.style.width="200px",t.style.height="150px",t.style.overflow="hidden",t.appendChild(e),document.body.appendChild(t);var n=e.offsetWidth;t.style.overflow="scroll";var i=e.offsetWidth;return n===i&&(i=t.clientWidth),document.body.removeChild(t),this._scrollBarWidth=n-i,this._scrollBarWidth},stripTime:function(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate())},naturalSortCompare:function(e,t){var n,i=Se(e),o=Se(t);for(n=0;i[n]&&o[n];n++)if(i[n]!==o[n]){var a=Number(i[n]),r=Number(o[n]);return a==i[n]&&r==o[n]?a-r:i[n].localeCompare(o[n],Ge.getLanguage())}return i.length-o.length},waitFor:function(e,t){!function n(){!0!==e()&&setTimeout(n,t)}()},isCookieSetToValue:function(e,t){for(var n=document.cookie.split(";"),i=0;i<n.length;i++){var o=n[i].split("=");if(o[0].trim()===e&&o[1].trim()===t)return!0}return!1}},Ue=window._oc_debug,Le=window._oc_webroot;if(void 0===Le){var Fe=(Le=location.pathname).indexOf("/index.php/");Le=-1!==Fe?Le.substr(0,Fe):Le.substr(0,Le.lastIndexOf("/"))}var Re,Qe=Le,Ge={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(e){return!!e.match(R.blacklist_files_regex)},addScript:function(e,t,n){var i;console.warn("OC.addScript is deprecated, use OCP.Loader.loadScript instead");var o=(0,d.generateFilePath)(e,"js",t+".js");return f[o]?n&&n():(i=c().Deferred(),c().getScript(o,(function(){return i.resolve()})),f[o]=i),f[o]},addStyle:function(e,t){console.warn("OC.addStyle is deprecated, use OCP.Loader.loadStylesheet instead");var n=(0,d.generateFilePath)(e,"css",t+".css");-1===p.indexOf(n)&&(p.push(n),document.createStyleSheet?document.createStyleSheet(n):(t=c()('<link rel="stylesheet" type="text/css" href="'+n+'"/>'),c()("head").append(t)))},Apps:w,AppConfig:B,appConfig:P,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 i=c()("#appsettings");if(0===i.length)throw{name:"MissingDOMElement",message:'There has be be an element with id "appsettings" for the popup to show.'};var o=c()("#appsettings_popup");if(0===o.length&&(c()("body").prepend('<div class="popup hidden" id="appsettings_popup"></div>'),(o=c()("#appsettings_popup")).addClass(i.hasClass("topright")?"topright":"bottomleft")),o.is(":visible"))o.hide().remove();else{var a=i.hasClass("topright")?"up":"left";c().get((0,d.generateFilePath)(n.appid,"",n.scriptName),(function(e){o.html(e).ready((function(){if(o.prepend('<span class="arrow '+a+'"></span><h2>'+t("core","Settings")+'</h2><a class="close"></a>').show(),o.find(".close").bind("click",(function(){o.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(e,t,n){throw n}))}})).show()}),"html")}},appswebroots:O,Backbone:L,ContactsMenu:W,config:R,currentUser:Z,dialogs:re,EventSource:de,getCurrentUser:function(){return{uid:Z,displayName:V}},isUserAdmin:function(){return ge},L10N:Oe,_ajaxConnectionLostHandler:m,_processAjaxError:function(e){(0!==e.status||"abort"!==e.statusText&&"timeout"!==e.statusText&&!Ge._reloadCalled)&&(h.default.contains([302,303,307,401],e.status)&&Ge.currentUser?setTimeout((function(){if(!Ge._userIsNavigatingAway&&!Ge._reloadCalled){var e=0,t=setInterval((function(){A.showUpdate(n("core","Problem loading page, reloading in %n second","Problem loading page, reloading in %n seconds",5-e)),e>=5&&(clearInterval(t),Ge.reload()),e++}),1e3);Ge._reloadCalled=!0}}),100):0===e.status&&setTimeout((function(){Ge._userIsNavigatingAway||Ge._reloadCalled||Ge._ajaxConnectionLostHandler()}),100))},registerXHRForErrorProcessing:function(e){e.addEventListener&&(e.addEventListener("load",(function(){4===e.readyState&&(e.status>=200&&e.status<300||304===e.status||c()(document).trigger(new(c().Event)("ajaxError"),e))})),e.addEventListener("error",(function(){c()(document).trigger(new(c().Event)("ajaxError"),e)})))},getCapabilities:function(){return console.warn("OC.getCapabilities is deprecated and will be removed in Nextcloud 21. See @nextcloud/capabilities"),(0,fe.getCapabilities)()},hideMenus:he,registerMenu:function(e,t,n,i){t.addClass("menu");var o="A"===e.prop("tagName")||"BUTTON"===e.prop("tagName");e.on(o?"click.menu":"click.menu keyup.menu",(function(o){o.preventDefault(),o.key&&"Enter"!==o.key||(t.is(pe)?he():(pe&&he(),!0===i&&t.parent().addClass("openedMenu"),e.attr("aria-expanded",!0),t.slideToggle(50,n),pe=t))}))},showMenu:function(e,t,n){t.is(pe)||(he(),pe=t,t.trigger(new(c().Event)("beforeShow")),t.show(),t.trigger(new(c().Event)("afterShow")),h.default.isFunction(n)&&n())},unregisterMenu:function(e,t){t.is(pe)&&he(),e.off("click.menu").removeClass("menutoggle"),t.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:Te.getCanonicalLocale,getLocale:function(){var e;return null!==(e=c()("html").data("locale"))&&void 0!==e?e:"en"},getLanguage:function(){return c()("html").prop("lang")},addTranslations:Oe.load,buildQueryString:function(e){return e?c().map(e,(function(e,t){var n=encodeURIComponent(t);return null!=e&&(n+="="+encodeURIComponent(e)),n})).join("&"):""},parseQueryString:function(e){var t,n,i,o={};if(!e)return null;(t=e.indexOf("?"))>=0&&(e=e.substr(t+1));for(var a=e.replace(/\+/g,"%20").split("&"),r=0;r<a.length;r++){var s=a[r];(n=(t=s.indexOf("="))>=0?[s.substr(0,t),s.substr(t+1)]:[s]).length&&(i=decodeURIComponent(n[0]))&&(o[i]=n.length>1?decodeURIComponent(n[1]):null)}return o},msg:je,Notification:A,PasswordConfirmation:ze,Plugins:{_plugins:{},register:function(e,t){var n=this._plugins[e];n||(n=this._plugins[e]=[]),n.push(t)},getPlugins:function(e){return this._plugins[e]||[]},attach:function(e,t,n){for(var i=this.getPlugins(e),o=0;o<i.length;o++)i[o].attach&&i[o].attach(t,n)},detach:function(e,t,n){for(var i=this.getPlugins(e),o=0;o<i.length;o++)i[o].detach&&i[o].detach(t,n)}},theme:_e,Util:Me,debug:Ue,filePath:d.generateFilePath,generateUrl:d.generateUrl,get:(Re=window,function(e){for(var t=e.split("."),n=t.pop(),i=0;i<t.length;i++)if(!(Re=Re[t[i]]))return!1;return Re[n]}),set:function(e){return function(t,n){for(var i=t.split("."),o=i.pop(),a=0;a<i.length;a++)e[i[a]]||(e[i[a]]={}),e=e[i[a]];return e[o]=n,n}}(window),getRootPath:d.getRootUrl,imagePath:d.imagePath,redirect:function(e){window.location=e},reload:function(){window.location.reload()},requestToken:le(),linkTo:d.linkTo,linkToOCS:function(e,t){return(0,d.generateOcsUrl)(e,{},{ocsVersion:t||1})+"/"},linkToRemote:d.generateRemoteUrl,linkToRemoteBase:function(e){return(0,d.getRootUrl)()+"/remote.php/"+e},webroot:Qe};(0,u.subscribe)("csrf-token-update",(function(e){OC.requestToken=e.token,console.info("OC.requestToken changed",e.token)}));var He=o(18037),Ke=o(16453),Ye=o(22200);function qe(e,t,n,i,o,a,r){try{var s=e[a](r),l=s.value}catch(e){return void n(e)}s.done?t(l):Promise.resolve(l).then(i,o)}function We(e){return function(){var t=this,n=arguments;return new Promise((function(i,o){var a=e.apply(t,n);function r(e){qe(a,i,o,r,s,"next",e)}function s(e){qe(a,i,o,r,s,"throw",e)}r(void 0)}))}}var Je=null,Ve=function(){var e=We(regeneratorRuntime.mark((function e(){var t,n;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=(0,d.generateUrl)("/csrftoken"),e.next=3,c().get(t);case 3:return n=e.sent,e.abrupt("return",n.token);case 5:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),Ze=function(){var e=We(regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Ve();case 3:t=e.sent,ce(t),e.next=10;break;case 7:e.prev=7,e.t0=e.catch(0),console.error("session heartbeat failed",e.t0);case 10:case"end":return e.stop()}}),e,null,[[0,7]])})));return function(){return e.apply(this,arguments)}}(),Xe=function(){var e=setInterval(Ze,1e3*function(){var e=NaN;return Je.session_lifetime&&(e=Math.floor(Je.session_lifetime/2)),Math.min(86400,Math.max(60,isNaN(e)?900:e))}());return console.info("session heartbeat polling started"),e},$e=function(){var e=c()("#appmenu li"),t=c()(".header-right").outerWidth(),n=c()("header").outerWidth()-c()("#nextcloud").outerWidth()-(t>210?t:210),i=c()(window).width()<1024;i||(n*=.67);var o,a=Math.floor(n/c()(e).width());i&&a>12&&(a=12),!i&&a<12&&(a=12),e.length-1-a>=1&&a--,c()("#more-apps a").removeClass("active");for(var r=0;r<e.length-1;r++){var s=c()(e[r]).data("id");r<a?(c()(e[r]).removeClass("hidden"),c()("#apps li[data-id="+s+"]").addClass("in-header"),o=e[r]):(c()(e[r]).addClass("hidden"),c()("#apps li[data-id="+s+"]").removeClass("in-header"),a>0&&c()(e[r]).children("a").hasClass("active")&&(c()(o).addClass("hidden"),c()("#apps li[data-id="+c()(o).data("id")+"]").removeClass("in-header"),c()(e[r]).removeClass("hidden"),c()("#apps li[data-id="+s+"]").addClass("in-header")))}0===c()("#apps li:not(.in-header)").length?(c()("#more-apps").hide(),c()("#navigation").hide()):c()("#more-apps").show()},et={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"},tt=Ge.getLocale();Object.prototype.hasOwnProperty.call(et,tt)&&(tt=et[tt]),De().locale(tt);var nt,it=function(){var e,t;if(window.navigator.userAgent.indexOf("Edge/")>0&&(c()("html").addClass("edge"),console.info("Legacy browser detected, applying css vars polyfill"),(0,He.Z)({watch:!0,onlyLegacy:!(/Edge\/([0-9]{2})\./i.test(navigator.userAgent)&&parseInt(/Edge\/([0-9]{2})\./i.exec(navigator.userAgent)[1])<16)})),c()(window).on("unload.main",(function(){Ge._unloadCalled=!0})),c()(window).on("beforeunload.main",(function(){setTimeout((function(){Ge._userIsNavigatingAway=!0,setTimeout((function(){Ge._unloadCalled||(Ge._userIsNavigatingAway=!1)}),1e4)}),1)})),c()(document).on("ajaxError.main",(function(e,t,n){n&&n.allowAuthErrors||Ge._processAjaxError(t)})),function(){if(function(){try{Je=(0,Ke.loadState)("core","config")}catch(e){Je=Ge.config}}(),function(){if(Je.auto_logout&&(0,Ye.getCurrentUser)()){var e=Date.now();window.addEventListener("mousemove",(function(t){e=Date.now(),localStorage.setItem("lastActive",e)})),window.addEventListener("touchstart",(function(t){e=Date.now(),localStorage.setItem("lastActive",e)})),window.addEventListener("storage",(function(t){"lastActive"===t.key&&(e=t.newValue)})),setInterval((function(){var t=Date.now()-1e3*Je.session_lifetime;if(e<t){console.info("Inactivity timout reached, logging out");var n=(0,d.generateUrl)("/logout")+"?requesttoken="+encodeURIComponent(le());window.location=n}}),1e3)}}(),void 0===Je.session_keepalive||Je.session_keepalive){var e=Xe();window.addEventListener("online",We(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return console.info("browser is online again, resuming heartbeat"),e=Xe(),t.prev=2,t.next=5,Ze();case 5:console.info("session token successfully updated after resuming network"),(0,u.emit)("networkOnline",{success:!0}),t.next=13;break;case 9:t.prev=9,t.t0=t.catch(2),console.error("could not update session token after resuming network",t.t0),(0,u.emit)("networkOnline",{success:!1});case 13:case"end":return t.stop()}}),t,null,[[2,9]])})))),window.addEventListener("offline",(function(){console.info("browser is offline, stopping heartbeat"),(0,u.emit)("networkOffline",{}),clearInterval(e),console.info("session heartbeat polling stopped")}))}else console.info("session heartbeat disabled")}(),Ge.registerMenu(c()("#expand"),c()("#expanddiv"),!1,!0),c()(document).on("mouseup.closemenus",(function(e){var t=c()(e.target);if(t.closest(".menu").length||t.closest(".menutoggle").length)return!1;Ge.hideMenus()})),function(){Object.assign(Ge,{setNavigationCounter:function(e,t){var n=document.getElementById("appmenu").querySelector('[data-id="'+e+'"] svg'),i=document.getElementById("apps").querySelector('[data-id="'+e+'"] svg');0===t?(n.classList.remove("has-unread"),i.classList.remove("has-unread"),n.getElementsByTagName("image")[0].style.mask="",i.getElementsByTagName("image")[0].style.mask=""):(n.classList.add("has-unread"),i.classList.add("has-unread"),n.getElementsByTagName("image")[0].style.mask="url(#hole)",i.getElementsByTagName("image")[0].style.mask="url(#hole)"),document.getElementById("appmenu").querySelector('[data-id="'+e+'"] .unread-counter').textContent=t,document.getElementById("apps").querySelector('[data-id="'+e+'"] .unread-counter').textContent=t}}),Ge.registerMenu(c()("#more-apps > a"),c()("#navigation"));var e=c()("#header .header-appname-container"),t=c()("#navigation"),n=c()("#appmenu");Ge.registerMenu(e,t),e.data("oldhref",e.attr("href")),e.attr("href","#"),t.hide(),t.delegate("a","click",(function(e){var t=c()(e.target);t.is("a")||(t=t.closest("a")),1!==e.which||e.ctrlKey||e.metaKey||"_blank"===t.attr("target")?Ge.hideMenus((function(){return!1})):(t.find("svg").remove(),t.find("div").remove(),t.prepend(c()("<div/>").addClass("icon-loading-small")))})),t.delegate("a","mouseup",(function(e){2===e.which&&Ge.hideMenus((function(){return!1}))})),n.delegate("li:not(#more-apps) > a","click",(function(e){var t=c()(e.target);t.is("a")||(t=t.closest("a")),1!==e.which||e.ctrlKey||e.metaKey||0!==t.parent("#more-apps").length||"_blank"===t.attr("target")?Ge.hideMenus((function(){return!1})):(t.find("svg").remove(),t.find("div").remove(),t.prepend(c()("<div/>").addClass(OCA.Theming&&OCA.Theming.inverted?"icon-loading-small":"icon-loading-small-dark")),window.location=t.attr("href"))}))}(),e=c()("#header #settings"),t=["user-status-menu-item__header"],e.delegate("a","click",(function(e){var n=c()(e.target);n.is("a")||(n=n.closest("a")),1!==e.which||e.ctrlKey||e.metaKey?Ge.hideMenus((function(){return!1})):t.includes(n.attr("class"))||(n.find("img").remove(),n.find("div").remove(),n.prepend(c()("<div/>").addClass("icon-loading-small")))})),e.delegate("a","mouseup",(function(e){2===e.which&&Ge.hideMenus((function(){return!1}))})),new Ge.ContactsMenu({el:c()("#contactsmenu .menu"),trigger:c()("#contactsmenu .menutoggle")}),c()("#navigation").length&&(c()("#header #nextcloud + .menutoggle").on("click",(function(){c()("#menu-css-helper").remove();var e=c()(".header-appname + .icon-caret").offset().left-2;e>255||c()("head").append('<style id="menu-css-helper">#navigation:after { left: '+e+"px }</style>")})),c()("#header #appmenu .menutoggle").on("click",(function(){c()("#appmenu").toggleClass("menu-open"),c()("#appmenu").is(":visible")&&c()("#menu-css-helper").remove()}))),c()(window).resize($e),setTimeout($e,0),c()("#app-navigation").length&&!c()("html").hasClass("lte9")&&!c()("#app-content").hasClass("no-snapper")){var n=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 i=!1;n.on("animating",(function(){i=!0})),n.on("animated",(function(){i=!1})),n.on("start",(function(){i=!0})),n.on("end",(function(){i=!1}));var o=n.open,a=n.close,r=function(){i||"closed"!==n.state().state||o("left")},s=function(){i||"closed"===n.state().state||a()};window.TESTING||(n.open=function(){h.default.defer(r)},n.close=function(){h.default.defer(s)}),c()("#app-navigation-toggle").click((function(e){"left"!==n.state().state&&n.open()})),c()("#app-navigation-toggle").keypress((function(e){"left"===n.state().state?n.close():n.open()})),c()("#app-navigation").delegate("a, :button","click",(function(e){var t=c()(e.target);t.is(".app-navigation-noclose")||t.closest(".app-navigation-noclose").length||t.is(".app-navigation-entry-utils-menu-button")||t.closest(".app-navigation-entry-utils-menu-button").length||t.is(".add-new")||t.closest(".add-new").length||t.is("#app-settings")||t.closest("#app-settings").length||n.close()}));var l=!1,f=!0,p=!1;Ge.allowNavigationBarSlideGesture=function(){f=!0,p&&(n.enable(),l=!0,p=!1)},Ge.disallowNavigationBarSlideGesture=function(){f=!1,l&&(n.disable(!0),l=!1,p=!0)};var g=function(){c()(window).width()>1024?(n.close(),n.disable(),l=!1,p=!1):f?(n.enable(),l=!0,p=!1):p=!0};c()(window).resize(h.default.debounce(g,250)),g()}setInterval((function(){c()(".live-relative-timestamp").each((function(){var e=parseInt(c()(this).attr("data-timestamp"),10);c()(this).text(De()(e).fromNow())}))}),3e4),ze.init()},ot=(o(49226),o(41704),o(78312),o(22634),o(3682));o(33824),c().prototype.tooltip=(nt=c().prototype.tooltip,function(e){try{return nt.call(this,e)}catch(t){if(t instanceof TypeError&&"destroy"===e)return void 0===window.TESTING&&console.error("Deprecated call $.tooltip('destroy') has been deprecated and should be removed"),nt.call(this,"dispose");if(t instanceof TypeError&&"fixTitle"===e)return void 0===window.TESTING&&console.error("Deprecated call $.tooltip('fixTitle') has been deprecated and should be removed"),nt.call(this,"_fixTitle")}});var at=o(42152),rt=o.n(at),st=(o(317),o(77980),o(99560)),lt=o.n(st),ct=(o(18553),o(34140),o(75693),o(99205),o(38554),/(\s|^)(https?:\/\/)?((?:[-A-Z0-9+_]+\.)+[-A-Z]+(?:\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*)(\s|$)/gi);function ut(e){return this.formatLinksRich(e)}function dt(e){return this.formatLinksPlain(e)}function ft(e){return e.replace(ct,(function(e,t,n,i,o){var a=i;return n?"http://"===n&&(a=n+i):n="https://",t+'<a class="external" target="_blank" rel="noopener noreferrer" href="'+n+i+'">'+a+"</a>"+o}))}function pt(e){var t=c()("<div></div>").html(e);return t.find("a").each((function(){var e=c()(this);e.html(e.attr("href"))})),t.html()}function ht(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,i,o){!function(e,n,i,o){if(console.debug("querying Whats New data was successful: "+n),console.debug(e),200===i.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(){gt(e.ocs.data.version,o)},r.appendChild(l),a.appendChild(r),u.appendChild(a),e.ocs.data.whatsNew.regular){var f=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=h.default.escape(f),r.appendChild(s),a.appendChild(r),u.appendChild(a)}h.default.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,i,o,n)},error:e.error||At})}function gt(e,t){t=t||{},c().ajax({type:"POST",url:t.url||(0,d.generateOcsUrl)("core/whatsnew"),data:{version:encodeURIComponent(e)},success:t.success||mt,error:t.error||vt}),c()(".whatsNewPopover").remove()}function At(e,t,n){console.debug("querying Whats New Data resulted in an error: "+t+n),console.debug(e)}function mt(e){}function vt(e){console.debug("dismissing Whats New data resulted in an error: "+e)}var wt,Ct,bt,yt,kt={},xt={},Et={},Pt={loadScript:function(e,t){var n=e+t;return Object.prototype.hasOwnProperty.call(xt,n)?Promise.resolve():(xt[n]=!0,new Promise((function(n,i){var o=OC.filePath(e,"js",t),a=document.createElement("script");a.src=o,a.setAttribute("nonce",btoa(OC.requestToken)),a.onload=function(){return n()},a.onerror=function(){return i(new Error("Failed to load script from ".concat(o)))},document.head.appendChild(a)})))},loadStylesheet:function(e,t){var n=e+t;return Object.prototype.hasOwnProperty.call(Et,n)?Promise.resolve():(Et[n]=!0,new Promise((function(n,i){var o=OC.filePath(e,"css",t),a=document.createElement("link");a.href=o,a.type="text/css",a.rel="stylesheet",a.onload=function(){return n()},a.onerror=function(){return i(new Error("Failed to load stylesheet from ".concat(o)))},document.head.appendChild(a)})))}},Bt={success:function(e,t){return(0,g.s$)(e,t)},warning:function(e,t){return(0,g.K2)(e,t)},error:function(e,t){return(0,g.x2)(e,t)},info:function(e,t){return(0,g.JQ)(e,t)},message:function(e,t){return(0,g.PV)(e,t)}},Ot={AppConfig:a,Collaboration:{registerType:function(e,t){kt[e]=t},trigger:function(e){return kt[e].action()},getTypes:function(){return Object.keys(kt)},getIcon:function(e){return kt[e].typeIconClass||""},getLabel:function(e){return ke()(kt[e].typeString||e)},getLink:function(e,t){return void 0!==kt[e]?kt[e].link(t):""}},Comments:r,InitialState:{loadState:Ke.loadState},Loader:Pt,Toast:Bt,WhatsNew:s},Tt=function(){void 0===window.TESTING&&console.warn.apply(console,arguments)},jt=function(e,t,n){(Array.isArray(e)?e:[e]).forEach((function(e){void 0!==window[e]&&delete window[e],Object.defineProperty(window,e,{get:function(){return Tt(n?"".concat(e," is deprecated: ").concat(n):"".concat(e," is deprecated")),t()}})}))};window._=h.default,jt(["$","jQuery"],(function(){return c()}),"The global jQuery is deprecated. It will be removed in a later versions without another warning. Please ship your own."),jt("autosize",(function(){return ot.Z}),"please ship your own, this will be removed in Nextcloud 20"),jt("Backbone",(function(){return j()}),"please ship your own, this will be removed in Nextcloud 20"),jt(["Clipboard","ClipboardJS"],(function(){return rt()}),"please ship your own, this will be removed in Nextcloud 20"),window.dav=I.dav,jt("Handlebars",(function(){return we()}),"please ship your own, this will be removed in Nextcloud 20"),jt("md5",(function(){return lt()}),"please ship your own, this will be removed in Nextcloud 20"),jt("moment",(function(){return De()}),"please ship your own, this will be removed in Nextcloud 20"),window.OC=Ge,jt("initCore",(function(){return it}),"this is an internal function"),jt("oc_appswebroots",(function(){return Ge.appswebroots}),"use OC.appswebroots instead, this will be removed in Nextcloud 20"),jt("oc_config",(function(){return Ge.config}),"use OC.config instead, this will be removed in Nextcloud 20"),jt("oc_current_user",(function(){return Ge.getCurrentUser().uid}),"use OC.getCurrentUser().uid instead, this will be removed in Nextcloud 20"),jt("oc_debug",(function(){return Ge.debug}),"use OC.debug instead, this will be removed in Nextcloud 20"),jt("oc_defaults",(function(){return Ge.theme}),"use OC.theme instead, this will be removed in Nextcloud 20"),jt("oc_isadmin",Ge.isUserAdmin,"use OC.isUserAdmin() instead, this will be removed in Nextcloud 20"),jt("oc_requesttoken",(function(){return le()}),"use OC.requestToken instead, this will be removed in Nextcloud 20"),jt("oc_webroot",(function(){return Ge.webroot}),"use OC.getRootPath() instead, this will be removed in Nextcloud 20"),jt("OCDialogs",(function(){return Ge.dialogs}),"use OC.dialogs instead, this will be removed in Nextcloud 20"),window.OCP=Ot,window.OCA=ee,c().fn.select2=(wt=c().fn.select2,Ct="select2",19,bt=wt,yt=function(){return Tt("The ".concat(Ct," library is deprecated! It will be removed in nextcloud ").concat(19,".")),bt.apply(this,arguments)},Object.assign(yt,bt),yt),window.t=h.default.bind(Ge.L10N.translate,Ge.L10N),window.n=h.default.bind(Ge.L10N.translatePlural,Ge.L10N),c().fn.avatar=function(e,t,n,i,o,a){var r=function(e){e.imageplaceholder("?"),e.css("background-color","#b9b9b9")};if(void 0!==e&&(e=String(e)),void 0!==a&&(a=String(a)),void 0===t&&(t=this.height()>0?this.height():this.data("size")>0?this.data("size"):64),this.height(t),this.width(t),void 0===e){if(void 0===this.data("user"))return void r(this);e=this.data("user")}e=String(e).replace(/\//g,"");var s,l=this;s=e===Ge.getCurrentUser().uid?Ge.generateUrl("/avatar/{user}/{size}?v={version}",{user:e,size:Math.ceil(t*window.devicePixelRatio),version:oc_userconfig.avatar.version}):Ge.generateUrl("/avatar/{user}/{size}",{user:e,size:Math.ceil(t*window.devicePixelRatio)});var c=new Image;c.onload=function(){l.clearimageplaceholder(),l.append(c),"function"==typeof o&&o()},c.onerror=function(){l.clearimageplaceholder(),void 0!==a?l.imageplaceholder(e,a):r(l),"function"==typeof o&&o()},t<32?l.addClass("icon-loading-small"):l.addClass("icon-loading"),c.width=t,c.height=t,c.src=s,c.alt=""};var It=o(47078);c().fn.contactsMenu=function(e,n,i){if(-1!==[0,4,6].indexOf(n)){var o=this;i.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=i.find("div.contactsmenu-popover");o.click((function(){if(!a.hasClass("hidden"))return a.addClass("hidden"),void a.hide();a.removeClass("hidden"),a.show(),a.hasClass("loaded")||(a.addClass("loaded"),c().ajax(Ge.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(e){a.find("ul").append(It(e))})),o.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(It({hyperlink:"#",title:n})),o.trigger("loaderror",e)})))})),c()(document).click((function(e){var t=a.has(e.target).length>0,n=o.has(e.target).length>0;o.each((function(){c()(this).is(e.target)&&(n=!0)})),t||n||(a.addClass("hidden"),a.hide())}))}},c().fn.exists=function(){return this.length>0},c().fn.filterAttr=function(e,t){return this.filter((function(){return c()(this).attr(e)===t}))},c().widget("oc.ocdialog",{options:{width:"auto",height:"auto",closeButton:!0,closeOnEscape:!0,closeCallback:null,modal:!1},_create:function(){var e=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" />').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),this.$dialog.css({display:"inline-block",position:"fixed"}),this.enterCallback=null,c()(document).on("keydown keyup",(function(t){if(t.target===e.$dialog.get(0)||0!==e.$dialog.find(c()(t.target)).length){if(27===t.keyCode&&"keydown"===t.type&&e.options.closeOnEscape)return t.stopImmediatePropagation(),e.close(),!1;if(13===t.keyCode){if(t.stopImmediatePropagation(),null!==e.enterCallback)return e.enterCallback(),t.preventDefault(),!1;if("keyup"===t.type)return t.preventDefault(),!1;if(e.$buttonrow&&0===e.$buttonrow.find(c()(t.target)).length){var n=e.$buttonrow.find("button.primary");n&&!n.prop("disabled")&&n.trigger("click")}else e.$buttonrow&&c()(t.target).trigger("click");return!1}}})),this._setOptions(this.options),this._createOverlay()},_init:function(){this.$dialog.focus(),this._trigger("open")},_setOption:function(e,t){var n=this;switch(e){case"title":if(this.$title)this.$title.text(t);else{var i=c()('<h2 class="oc-dialog-title">'+t+"</h2>");this.$title=i.prependTo(this.$dialog)}this._setSizes();break;case"buttons":if(this.$buttonrow)this.$buttonrow.empty();else{var o=c()('<div class="oc-dialog-buttonrow" />');this.$buttonrow=o.appendTo(this.$dialog)}1===t.length?this.$buttonrow.addClass("onebutton"):2===t.length?this.$buttonrow.addClass("twobuttons"):3===t.length&&this.$buttonrow.addClass("threebuttons"),c().each(t,(function(e,t){var i=c()("<button>").text(t.text);t.classes&&i.addClass(t.classes),t.defaultButton&&(i.addClass("primary"),n.$defaultButton=i),n.$buttonrow.append(i),i.click((function(){t.click.apply(n.element[0],arguments)}))})),this.$buttonrow.find("button").on("focus",(function(e){n.$buttonrow.find("button").removeClass("primary"),c()(this).addClass("primary")})),this._setSizes();break;case"style":void 0!==t.buttons&&this.$buttonrow.addClass(t.buttons);break;case"closeButton":if(t){var a=c()('<a class="oc-dialog-close"></a>');this.$dialog.prepend(a),a.on("click",(function(){n.options.closeCallback&&n.options.closeCallback(),n.close()}))}else this.$dialog.find(".oc-dialog-close").remove();break;case"width":this.$dialog.css("width",t);break;case"height":this.$dialog.css("height",t);break;case"close":this.closeCB=t}c().Widget.prototype._setOption.apply(this,arguments)},_setOptions:function(e){c().Widget.prototype._setOptions.apply(this,arguments)},_setSizes:function(){var e=0;this.$title&&(e+=this.$title.outerHeight(!0)),this.$buttonrow&&(e+=this.$buttonrow.outerHeight(!0)),this.element.css({height:"calc(100% - "+e+"px)"})},_createOverlay:function(){if(this.options.modal){var e=this,t=c()("#content");0===t.length&&(t=c()(".content")),this.overlay=c()("<div>").addClass("oc-dialog-dim").appendTo(t),this.overlay.on("click keydown keyup",(function(t){t.target!==e.$dialog.get(0)&&0===e.$dialog.find(c()(t.target)).length&&(t.preventDefault(),t.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(e){this.enterCallback=e},unsetEnterCallback:function(){this.enterCallback=null},close:function(){this._destroyOverlay();var e=this;setTimeout((function(){e._trigger("close",e)}),200),e.$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 Dt={init:function(e,t,n){if(this.vars=e,this.options=c().extend({},this.options,t),this.elem=n,"function"==typeof this.options.escapeFunction)for(var i=Object.keys(this.vars),o=0;o<i.length;o++)"string"==typeof this.vars[i[o]]&&(this.vars[i[o]]=this.options.escapeFunction(this.vars[i[o]]));var a=this._build(this.vars);return c()(a)},_build:function(e){var t="text/template"===this.elem.attr("type")?this.elem.html():this.elem.get(0).outerHTML;try{return t.replace(/{([^{}]*)}/g,(function(t,n){var i=e[n];return"string"==typeof i||"number"==typeof i?i:t}))}catch(e){console.error(e,"data:",t)}},options:{escapeFunction:ke()}};c().fn.octemplate=function(e,t){if(e=e||{},this.length)return Object.create(Dt).init(e,t,this)};var zt=function(e){var t=e.toLowerCase();function n(e,t,n){this.r=e,this.g=t,this.b=n}function i(e,t,i){var o=[];o.push(t);for(var a=function(e,t){var n=new Array(3);return n[0]=(t[1].r-t[0].r)/e,n[1]=(t[1].g-t[0].g)/e,n[2]=(t[1].b-t[0].b)/e,n}(e,[t,i]),r=1;r<e;r++){var s=parseInt(t.r+a[0]*r),l=parseInt(t.g+a[1]*r),c=parseInt(t.b+a[2]*r);o.push(new n(s,l,c))}return o}null===t.match(/^([0-9a-f]{4}-?){8}$/)&&(t=lt()(t)),t=t.replace(/[^0-9a-f]/g,"");var o=new n(182,70,157),a=new n(221,203,85),r=new n(0,130,201),s=i(6,o,a),l=i(6,a,r),c=i(6,r,o);return s.concat(l).concat(c)[function(e,t){for(var n=0,i=[],o=0;o<e.length;o++)i.push(parseInt(e.charAt(o),16)%16);for(var a in i)n+=i[a];return parseInt(parseInt(n)%18)}(t)]};String.prototype.toRgb=function(){return console.warn("String.prototype.toRgb is deprecated! It will be removed in Nextcloud 22."),zt(this)},c().fn.imageplaceholder=function(e,t,n){t=t||e;var i=zt(e);this.css("background-color","rgb("+i.r+", "+i.g+", "+i.b+")");var o=this.height()||n||32;if(this.height(o),this.width(o),this.css("color","#fff"),this.css("font-weight","normal"),this.css("text-align","center"),this.css("line-height",o+"px"),this.css("font-size",.55*o+"px"),null!==e&&e.length){var a=t.replace(/\s+/g," ").trim().split(" ",2).map((function(e){return e[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(e,t,n){!1===n.crossDomain&&(t.setRequestHeader("requesttoken",le()),t.setRequestHeader("OCS-APIREQUEST","true"))})),c().fn.selectRange=function(e,t){return this.each((function(){if(this.setSelectionRange)this.focus(),this.setSelectionRange(e,t);else if(this.createTextRange){var n=this.createTextRange();n.collapse(!0),n.moveEnd("character",t),n.moveStart("character",e),n.select()}}))},c().fn.extend({showPassword:function(e){var t={fn:null,args:{}};t.fn=e;var n=function(e,t){t.val(e.val())},i=function(e,t,i){e.is(":checked")?(n(t,i),i.show(),t.hide()):(n(i,t),i.hide(),t.show())};return this.each((function(){var e=c()(this),o=c()(e.data("typetoggle")),a=function(e){var t=c()(e),n=c()("<input />");return n.attr({type:"text",class:t.attr("class"),style:t.attr("style"),size:t.attr("size"),name:t.attr("name")+"-clone",tabindex:t.attr("tabindex"),autocomplete:"off"}),void 0!==t.attr("placeholder")&&n.attr("placeholder",t.attr("placeholder")),n}(e);a.insertAfter(e),t.fn&&(t.args.input=e,t.args.checkbox=o,t.args.clone=a),o.bind("click",(function(){i(o,e,a)})),e.bind("keyup",(function(){n(e,a)})),a.bind("keyup",(function(){n(a,e),e.trigger("keyup")})),a.bind("blur",(function(){e.trigger("focusout")})),i(o,e,a),a.closest("form").submit((function(e){a.prop("type","password")})),t.fn&&t.fn(t.args)}))}}),c().ui.autocomplete.prototype._resizeMenu=function(){this.menu.element.outerWidth(this.element.outerWidth())};var _t=o(93379),Nt=o.n(_t),St=o(7795),Mt=o.n(St),Ut=o(90569),Lt=o.n(Ut),Ft=o(3565),Rt=o.n(Ft),Qt=o(19216),Gt=o.n(Qt),Ht=o(44589),Kt=o.n(Ht),Yt=o(12448),qt={};qt.styleTagTransform=Kt(),qt.setAttributes=Rt(),qt.insert=Lt().bind(null,"head"),qt.domAPI=Mt(),qt.insertStyleElement=Gt(),Nt()(Yt.Z,qt),Yt.Z&&Yt.Z.locals&&Yt.Z.locals;var Wt=o(72417),Jt={};Jt.styleTagTransform=Kt(),Jt.setAttributes=Rt(),Jt.insert=Lt().bind(null,"head"),Jt.domAPI=Mt(),Jt.insertStyleElement=Gt(),Nt()(Wt.Z,Jt),Wt.Z&&Wt.Z.locals&&Wt.Z.locals,c().ajaxSetup({contents:{script:!1}}),c().globalEval=function(){},window.addEventListener("DOMContentLoaded",(function(){var e;it(),0===(e=c()("[data-apps-slide-toggle]")).length&&c()("#app-navigation").addClass("without-app-settings"),c()(document).click((function(t){v&&(e=c()("[data-apps-slide-toggle]")),e.each((function(e,n){var i=c()(n).data("apps-slide-toggle"),o=c()(i);function a(){o.slideUp(4*OC.menuSpeed,(function(){o.trigger(new(c().Event)("hide"))})),o.removeClass("opened"),c()(n).removeClass("opened")}if(!o.is(":animated"))if(c()(n).is(c()(t.target).closest("[data-apps-slide-toggle]")))o.is(":visible")?a():function(){o.slideDown(4*OC.menuSpeed,(function(){o.trigger(new(c().Event)("show"))})),o.addClass("opened"),c()(n).addClass("opened");var e=c()(i+" [autofocus]");1===e.length&&e.focus()}();else{var r=c()(t.target).closest(i);o.is(":visible")&&r[0]!==o[0]&&a()}}))})),window.history.pushState?window.onpopstate=_.bind(Ge.Util.History._onPopState,Ge.Util.History):c()(window).on("hashchange",_.bind(Ge.Util.History._onPopState,Ge.Util.History))}))},12448:function(e,t,n){"use strict";var i=n(87537),o=n.n(i),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),f=new URL(n(12081),n.b),p=new URL(n(47868),n.b),h=r()(o()),g=l()(c),A=l()(u),m=l()(d),v=l()(f),w=l()(p);h.push([e.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("+g+")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("+g+")}.ui-state-active .ui-icon{background-image:url("+g+")}.ui-state-highlight .ui-icon{background-image:url("+A+")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("+m+")}.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("+w+") 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-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,CAKD,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\n/* DRAGGABLE */\n.ui-draggable-handle,\n.ui-selectable {\n\ttouch-action: pan-y;\n}\n"],sourceRoot:""}]),t.Z=h},72417:function(e,t,n){"use strict";var i=n(87537),o=n.n(i),a=n(23645),r=n.n(a)()(o());r.push([e.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-000) no-repeat center;opacity:.5}.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,iDAAA,CACA,UAAA,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-000) no-repeat center;\n\topacity: .5;\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:""}]),t.Z=r},10944:function(e,t,n){var i=n(40202);e.exports=(i.default||i).template({1:function(e,t,n,i,o){var a,r=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return null!=(a=r(n,"if").call(null!=t?t:e.nullContext||{},null!=(a=null!=t?r(t,"contact"):t)?r(a,"profileUrl"):a,{name:"if",hash:{},fn:e.program(2,o,0),inverse:e.program(5,o,0),data:o,loc:{start:{line:2,column:1},end:{line:10,column:8}}}))?a:""},2:function(e,t,n,i,o){var a,r=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return null!=(a=r(n,"if").call(null!=t?t:e.nullContext||{},null!=(a=null!=t?r(t,"contact"):t)?r(a,"profileTitle"):a,{name:"if",hash:{},fn:e.program(3,o,0),inverse:e.noop,data:o,loc:{start:{line:3,column:2},end:{line:7,column:9}}}))?a:""},3:function(e,t,n,i,o){var a,r=e.lambda,s=e.escapeExpression,l=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'\t\t\t<a class="profile-link--avatar" href="'+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"profileUrl"):a,t))+'">\n\t\t\t\t<img src="'+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"avatar"):a,t))+'&size=32" class="avatar" srcset="'+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"avatar"):a,t))+"&size=32 1x, "+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"avatar"):a,t))+"&size=64 2x, "+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"avatar"):a,t))+'&size=128 4x" alt="">\n\t\t\t</a>\n'},5:function(e,t,n,i,o){var a,r=e.lambda,s=e.escapeExpression,l=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'\t\t<img src="'+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"avatar"):a,t))+'&size=32" class="avatar" srcset="'+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"avatar"):a,t))+"&size=32 1x, "+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"avatar"):a,t))+"&size=64 2x, "+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"avatar"):a,t))+'&size=128 4x" alt="">\n'},7:function(e,t,n,i,o){var a,r=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return null!=(a=r(n,"if").call(null!=t?t:e.nullContext||{},null!=(a=null!=t?r(t,"contact"):t)?r(a,"profileUrl"):a,{name:"if",hash:{},fn:e.program(8,o,0),inverse:e.program(11,o,0),data:o,loc:{start:{line:12,column:1},end:{line:20,column:8}}}))?a:""},8:function(e,t,n,i,o){var a,r=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return null!=(a=r(n,"if").call(null!=t?t:e.nullContext||{},null!=(a=null!=t?r(t,"contact"):t)?r(a,"profileTitle"):a,{name:"if",hash:{},fn:e.program(9,o,0),inverse:e.noop,data:o,loc:{start:{line:13,column:2},end:{line:17,column:9}}}))?a:""},9:function(e,t,n,i,o){var a,r=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'\t\t\t<a class="profile-link--avatar" href="'+e.escapeExpression(e.lambda(null!=(a=null!=t?r(t,"contact"):t)?r(a,"profileUrl"):a,t))+'">\n\t\t\t\t<div class="avatar"></div>\n\t\t\t</a>\n'},11:function(e,t,n,i,o){return'\t\t<div class="avatar"></div>\n'},13:function(e,t,n,i,o){var a,r=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return null!=(a=r(n,"if").call(null!=t?t:e.nullContext||{},null!=(a=null!=t?r(t,"contact"):t)?r(a,"profileTitle"):a,{name:"if",hash:{},fn:e.program(14,o,0),inverse:e.noop,data:o,loc:{start:{line:23,column:1},end:{line:29,column:8}}}))?a:""},14:function(e,t,n,i,o){var a,r=e.lambda,s=e.escapeExpression,l=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'\t\t<a class="body profile-link--full-name" href="'+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"profileUrl"):a,t))+'">\n\t\t\t<div class="full-name">'+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"fullName"):a,t))+'</div>\n\t\t\t<div class="last-message">'+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"lastMessage"):a,t))+'</div>\n\t\t\t<div class="email-address">'+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"emailAddresses"):a,t))+"</div>\n\t\t</a>\n"},16:function(e,t,n,i,o){var a,r=e.lambda,s=e.escapeExpression,l=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'\t<div class="body">\n\t\t<div class="full-name">'+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"fullName"):a,t))+'</div>\n\t\t<div class="last-message">'+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"lastMessage"):a,t))+'</div>\n\t\t<div class="email-address">'+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"emailAddresses"):a,t))+"</div>\n\t</div>\n"},18:function(e,t,n,i,o){var a,r=e.lambda,s=e.escapeExpression,l=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<a class="top-action" href="'+s(r(null!=(a=null!=(a=null!=t?l(t,"contact"):t)?l(a,"topAction"):a)?l(a,"hyperlink"):a,t))+'" title="'+s(r(null!=(a=null!=(a=null!=t?l(t,"contact"):t)?l(a,"topAction"):a)?l(a,"title"):a,t))+'">\n\t<img src="'+s(r(null!=(a=null!=(a=null!=t?l(t,"contact"):t)?l(a,"topAction"):a)?l(a,"icon"):a,t))+'" alt="'+s(r(null!=(a=null!=(a=null!=t?l(t,"contact"):t)?l(a,"topAction"):a)?l(a,"title"):a,t))+'">\n</a>\n'},20:function(e,t,n,i,o){var a,r=e.lambda,s=e.escapeExpression,l=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<a class="second-action" href="'+s(r(null!=(a=null!=(a=null!=t?l(t,"contact"):t)?l(a,"secondAction"):a)?l(a,"hyperlink"):a,t))+'" title="'+s(r(null!=(a=null!=(a=null!=t?l(t,"contact"):t)?l(a,"secondAction"):a)?l(a,"title"):a,t))+'">\n\t<img src="'+s(r(null!=(a=null!=(a=null!=t?l(t,"contact"):t)?l(a,"secondAction"):a)?l(a,"icon"):a,t))+'" alt="'+s(r(null!=(a=null!=(a=null!=t?l(t,"contact"):t)?l(a,"secondAction"):a)?l(a,"title"):a,t))+'">\n</a>\n'},22:function(e,t,n,i,o){var a,r=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'\t<span class="other-actions icon-more"></span>\n\t<div class="menu popovermenu">\n\t\t<ul>\n'+(null!=(a=r(n,"each").call(null!=t?t:e.nullContext||{},null!=(a=null!=t?r(t,"contact"):t)?r(a,"actions"):a,{name:"each",hash:{},fn:e.program(23,o,0),inverse:e.noop,data:o,loc:{start:{line:51,column:3},end:{line:58,column:12}}}))?a:"")+"\t\t</ul>\n\t</div>\n"},23:function(e,t,n,i,o){var a,r=null!=t?t:e.nullContext||{},s=e.hooks.helperMissing,l="function",c=e.escapeExpression,u=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'\t\t\t<li>\n\t\t\t\t<a href="'+c(typeof(a=null!=(a=u(n,"hyperlink")||(null!=t?u(t,"hyperlink"):t))?a:s)===l?a.call(r,{name:"hyperlink",hash:{},data:o,loc:{start:{line:53,column:13},end:{line:53,column:26}}}):a)+'">\n\t\t\t\t\t<img src="'+c(typeof(a=null!=(a=u(n,"icon")||(null!=t?u(t,"icon"):t))?a:s)===l?a.call(r,{name:"icon",hash:{},data:o,loc:{start:{line:54,column:15},end:{line:54,column:23}}}):a)+'" alt="">\n\t\t\t\t\t<span>'+c(typeof(a=null!=(a=u(n,"title")||(null!=t?u(t,"title"):t))?a:s)===l?a.call(r,{name:"title",hash:{},data:o,loc:{start:{line:55,column:11},end:{line:55,column:20}}}):a)+"</span>\n\t\t\t\t</a>\n\t\t\t</li>\n"},compiler:[8,">= 4.3.0"],main:function(e,t,n,i,o){var a,r=null!=t?t:e.nullContext||{},s=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return(null!=(a=s(n,"if").call(r,null!=(a=null!=t?s(t,"contact"):t)?s(a,"avatar"):a,{name:"if",hash:{},fn:e.program(1,o,0),inverse:e.program(7,o,0),data:o,loc:{start:{line:1,column:0},end:{line:21,column:7}}}))?a:"")+(null!=(a=s(n,"if").call(r,null!=(a=null!=t?s(t,"contact"):t)?s(a,"profileUrl"):a,{name:"if",hash:{},fn:e.program(13,o,0),inverse:e.program(16,o,0),data:o,loc:{start:{line:22,column:0},end:{line:36,column:7}}}))?a:"")+(null!=(a=s(n,"if").call(r,null!=(a=null!=t?s(t,"contact"):t)?s(a,"topAction"):a,{name:"if",hash:{},fn:e.program(18,o,0),inverse:e.noop,data:o,loc:{start:{line:37,column:0},end:{line:41,column:7}}}))?a:"")+(null!=(a=s(n,"if").call(r,null!=(a=null!=t?s(t,"contact"):t)?s(a,"hasTwoActions"):a,{name:"if",hash:{},fn:e.program(20,o,0),inverse:e.noop,data:o,loc:{start:{line:42,column:0},end:{line:46,column:7}}}))?a:"")+(null!=(a=s(n,"if").call(r,null!=(a=null!=t?s(t,"contact"):t)?s(a,"hasManyActions"):a,{name:"if",hash:{},fn:e.program(22,o,0),inverse:e.noop,data:o,loc:{start:{line:47,column:0},end:{line:61,column:7}}}))?a:"")},useData:!0})},20421:function(e,t,n){var i=n(40202);e.exports=(i.default||i).template({compiler:[8,">= 4.3.0"],main:function(e,t,n,i,o){var a,r=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<div class="emptycontent">\n\t<div class="icon-search"></div>\n\t<h2>'+e.escapeExpression("function"==typeof(a=null!=(a=r(n,"couldNotLoadText")||(null!=t?r(t,"couldNotLoadText"):t))?a:e.hooks.helperMissing)?a.call(null!=t?t:e.nullContext||{},{name:"couldNotLoadText",hash:{},data:o,loc:{start:{line:3,column:5},end:{line:3,column:25}}}):a)+"</h2>\n</div>\n"},useData:!0})},34083:function(e,t,n){var i=n(40202);e.exports=(i.default||i).template({1:function(e,t,n,i,o){var a,r=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<div class="emptycontent">\n\t<div class="icon-search"></div>\n\t<h2>'+e.escapeExpression("function"==typeof(a=null!=(a=r(n,"noContactsFoundText")||(null!=t?r(t,"noContactsFoundText"):t))?a:e.hooks.helperMissing)?a.call(null!=t?t:e.nullContext||{},{name:"noContactsFoundText",hash:{},data:o,loc:{start:{line:4,column:5},end:{line:4,column:28}}}):a)+"</h2>\n</div>\n"},3:function(e,t,n,i,o){var a,r=null!=t?t:e.nullContext||{},s=e.hooks.helperMissing,l="function",c=e.escapeExpression,u=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<div class="footer"><a href="'+c(typeof(a=null!=(a=u(n,"contactsAppURL")||(null!=t?u(t,"contactsAppURL"):t))?a:s)===l?a.call(r,{name:"contactsAppURL",hash:{},data:o,loc:{start:{line:9,column:29},end:{line:9,column:47}}}):a)+'">'+c(typeof(a=null!=(a=u(n,"showAllContactsText")||(null!=t?u(t,"showAllContactsText"):t))?a:s)===l?a.call(r,{name:"showAllContactsText",hash:{},data:o,loc:{start:{line:9,column:49},end:{line:9,column:72}}}):a)+"</a></div>\n"},5:function(e,t,n,i,o){var a,r=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return null!=(a=r(n,"if").call(null!=t?t:e.nullContext||{},null!=t?r(t,"canInstallApp"):t,{name:"if",hash:{},fn:e.program(6,o,0),inverse:e.noop,data:o,loc:{start:{line:10,column:0},end:{line:12,column:0}}}))?a:""},6:function(e,t,n,i,o){var a,r=null!=t?t:e.nullContext||{},s=e.hooks.helperMissing,l="function",c=e.escapeExpression,u=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<div class="footer"><a href="'+c(typeof(a=null!=(a=u(n,"contactsAppMgmtURL")||(null!=t?u(t,"contactsAppMgmtURL"):t))?a:s)===l?a.call(r,{name:"contactsAppMgmtURL",hash:{},data:o,loc:{start:{line:11,column:29},end:{line:11,column:51}}}):a)+'">'+c(typeof(a=null!=(a=u(n,"contactsAppMgmtText")||(null!=t?u(t,"contactsAppMgmtText"):t))?a:s)===l?a.call(r,{name:"contactsAppMgmtText",hash:{},data:o,loc:{start:{line:11,column:53},end:{line:11,column:76}}}):a)+"</a></div>\n"},compiler:[8,">= 4.3.0"],main:function(e,t,n,i,o){var a,r=null!=t?t:e.nullContext||{},s=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return(null!=(a=s(n,"unless").call(r,null!=(a=null!=t?s(t,"contacts"):t)?s(a,"length"):a,{name:"unless",hash:{},fn:e.program(1,o,0),inverse:e.noop,data:o,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!=t?s(t,"contactsAppEnabled"):t,{name:"if",hash:{},fn:e.program(3,o,0),inverse:e.program(5,o,0),data:o,loc:{start:{line:8,column:0},end:{line:12,column:7}}}))?a:"")},useData:!0})},95386:function(e,t,n){var i=n(40202);e.exports=(i.default||i).template({compiler:[8,">= 4.3.0"],main:function(e,t,n,i,o){var a,r=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<div class="emptycontent">\n\t<div class="icon-loading"></div>\n\t<h2>'+e.escapeExpression("function"==typeof(a=null!=(a=r(n,"loadingText")||(null!=t?r(t,"loadingText"):t))?a:e.hooks.helperMissing)?a.call(null!=t?t:e.nullContext||{},{name:"loadingText",hash:{},data:o,loc:{start:{line:3,column:5},end:{line:3,column:20}}}):a)+"</h2>\n</div>\n"},useData:!0})},66115:function(e,t,n){var i=n(40202);e.exports=(i.default||i).template({compiler:[8,">= 4.3.0"],main:function(e,t,n,i,o){var a,r=null!=t?t:e.nullContext||{},s=e.hooks.helperMissing,l="function",c=e.escapeExpression,u=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<label class="hidden-visually" for="contactsmenu-search">'+c(typeof(a=null!=(a=u(n,"searchContactsText")||(null!=t?u(t,"searchContactsText"):t))?a:s)===l?a.call(r,{name:"searchContactsText",hash:{},data:o,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!=t?u(t,"searchContactsText"):t))?a:s)===l?a.call(r,{name:"searchContactsText",hash:{},data:o,loc:{start:{line:2,column:59},end:{line:2,column:81}}}):a)+'" value="'+c(typeof(a=null!=(a=u(n,"searchTerm")||(null!=t?u(t,"searchTerm"):t))?a:s)===l?a.call(r,{name:"searchTerm",hash:{},data:o,loc:{start:{line:2,column:90},end:{line:2,column:104}}}):a)+'">\n<div class="content">\n</div>\n'},useData:!0})},47078:function(e,t,n){var i=n(40202);e.exports=(i.default||i).template({1:function(e,t,n,i,o){var a,r=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<img src="'+e.escapeExpression("function"==typeof(a=null!=(a=r(n,"icon")||(null!=t?r(t,"icon"):t))?a:e.hooks.helperMissing)?a.call(null!=t?t:e.nullContext||{},{name:"icon",hash:{},data:o,loc:{start:{line:3,column:24},end:{line:3,column:32}}}):a)+'">'},compiler:[8,">= 4.3.0"],main:function(e,t,n,i,o){var a,r,s=null!=t?t:e.nullContext||{},l=e.hooks.helperMissing,c="function",u=e.escapeExpression,d=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<li>\n\t<a href="'+u(typeof(r=null!=(r=d(n,"hyperlink")||(null!=t?d(t,"hyperlink"):t))?r:l)===c?r.call(s,{name:"hyperlink",hash:{},data:o,loc:{start:{line:2,column:10},end:{line:2,column:23}}}):r)+'">\n\t\t'+(null!=(a=d(n,"if").call(s,null!=t?d(t,"icon"):t,{name:"if",hash:{},fn:e.program(1,o,0),inverse:e.noop,data:o,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!=t?d(t,"title"):t))?r:l)===c?r.call(s,{name:"title",hash:{},data:o,loc:{start:{line:4,column:8},end:{line:4,column:17}}}):r)+"</span>\n\t</a>\n</li>\n"},useData:!0})},46700:function(e,t,n){var i={"./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 o(e){var t=a(e);return n(t)}function a(e){if(!n.o(i,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return i[e]}o.keys=function(){return Object.keys(i)},o.resolve=a,e.exports=o,o.id=46700},12081:function(e){"use strict";e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoAQMAAAC2MCouAAAABlBMVEVmZmZ1dXVT6N0BAAAAUklEQVQIW8XNsQ3AIAwF0bMoKBmBURgNj8YojEBJEcXwu2yQ+p507BTeWDnozPISjPpY4O0W6CqEisUtiG/EF+IT8YG4fznihnhCPCNeEK/89D1Gd22TNOyXVAAAAABJRU5ErkJggg=="},47868:function(e){"use strict";e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAABkAQMAAADOquA5AAAAA1BMVEUAAACnej3aAAAADklEQVQYGWMYBaOABgAAAlgAARbiVEcAAAAASUVORK5CYII="},58188:function(e){"use strict";e.exports="data:image/png;base64,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"},33178:function(e){"use strict";e.exports="data:image/png;base64,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"},40337:function(e){"use strict";e.exports="data:image/png;base64,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"},98811:function(e){"use strict";e.exports="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"},27373:function(e){"use strict";e.exports="data:image/gif;base64,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"}},o={};function a(e){var t=o[e];if(void 0!==t)return t.exports;var n=o[e]={id:e,loaded:!1,exports:{}};return i[e].call(n.exports,n,n.exports,a),n.loaded=!0,n.exports}a.m=i,a.amdD=function(){throw new Error("define cannot be used indirect")},a.amdO={},e=[],a.O=function(t,n,i,o){if(!n){var r=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||r>=o)&&Object.keys(a.O).every((function(e){return a.O[e](n[l])}))?n.splice(l--,1):(s=!1,o<r&&(r=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]},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,{a:t}),t},a.d=function(e,t){for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e},a.j=2943,function(){a.b=document.baseURI||self.location.href;var e={2943:0};a.O.j=function(t){return 0===e[t]};var t=function(t,n){var i,o,r=n[0],s=n[1],l=n[2],c=0;if(r.some((function(t){return 0!==e[t]}))){for(i in s)a.o(s,i)&&(a.m[i]=s[i]);if(l)var u=l(a)}for(t&&t(n);c<r.length;c++)o=r[c],a.o(e,o)&&e[o]&&e[o][0](),e[o]=0;return a.O(u)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))}();var r=a.O(void 0,[7874],(function(){return a(13084)}));r=a.O(r)}();
-//# sourceMappingURL=core-main.js.map?v=42615d5531f9a235dff3 \ No newline at end of file
+!function(){var e,i={6772:function(){Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector),Element.prototype.closest||(Element.prototype.closest=function(e){var t=this;do{if(t.matches(e))return t;t=t.parentElement||t.parentNode}while(null!==t&&1===t.nodeType);return null})},97782:function(){if("undefined"==typeof console||void 0===console.log){window.console||(window.console={});for(var e=function(){},t=["log","debug","warn","info","error","assert","time","timeEnd"],n=0;n<t.length;n++)console[t[n]]=e}},76389:function(){if("-ms-user-select"in document.documentElement.style&&navigator.userAgent.match(/IEMobile\/10\.0/)){var e=document.createElement("style");e.appendChild(document.createTextNode("@-ms-viewport{width:auto!important}")),document.getElementsByTagName("head")[0].appendChild(e)}},13084:function(e,i,o){"use strict";var a={};o.r(a),o.d(a,{deleteKey:function(){return E},getApps:function(){return b},getKeys:function(){return y},getValue:function(){return k},setValue:function(){return x}});var r={};o.r(r),o.d(r,{formatLinksPlain:function(){return pt},formatLinksRich:function(){return ft},plainToRich:function(){return ut},richToPlain:function(){return dt}});var s={};o.r(s),o.d(s,{dismiss:function(){return gt},query:function(){return ht}});var l=o(19755),c=o.n(l),u=(o(28594),o(35666),o(97782),o(6772),o(76389),o(74854)),d=o(79753),f={},p=[],h=o(64492),g=o(26932),A={updatableNotification:null,getDefaultNotificationFunction:null,setDefault:function(e){this.getDefaultNotificationFunction=e},hide:function(e,t){h.default.isFunction(e)&&(t=e,e=void 0),e?(e.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)})),t&&t.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(e,t){(t=t||{}).isHTML=!0,t.timeout=t.timeout?t.timeout:g.Rl;var n=(0,g.PV)(e,t);return n.toastElement.toastify=n,c()(n.toastElement)},show:function(e,t){(t=t||{}).timeout=t.timeout?t.timeout:g.Rl;var n=(0,g.PV)(function(e){return e.toString().split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;").split('"').join("&quot;").split("'").join("&#039;")}(e),t);return n.toastElement.toastify=n,c()(n.toastElement)},showUpdate:function(e){return this.updatableNotification&&this.updatableNotification.hideToast(),this.updatableNotification=(0,g.PV)(e,{timeout:g.Rl}),this.updatableNotification.toastElement.toastify=this.updatableNotification,c()(this.updatableNotification.toastElement)},showTemporary:function(e,t){(t=t||{}).timeout=t.timeout||g.TN;var n=(0,g.PV)(e,t);return n.toastElement.toastify=n,c()(n.toastElement)},isHidden:function(){return!c()("#content").find(".toastify").length}},m=h.default.throttle((function(){A.showTemporary(t("core","Connection to server lost"))}),7e3,{trailing:!1}),v=!1,w={enableDynamicSlideToggle:function(){v=!0},showAppSidebar:function(e){(e||c()("#app-sidebar")).removeClass("disappear").show(),c()("#app-content").trigger(new(c().Event)("appresized"))},hideAppSidebar:function(e){(e||c()("#app-sidebar")).hide().addClass("disappear"),c()("#app-content").trigger(new(c().Event)("appresized"))}};function C(e,t,n){"post"!==e&&"delete"!==e||!Ge.PasswordConfirmation.requiresPasswordConfirmation()?(n=n||{},c().ajax({type:e.toUpperCase(),url:(0,d.generateOcsUrl)("apps/provisioning_api/api/v1/config/apps")+t,data:n.data||{},success:n.success,error:n.error})):Ge.PasswordConfirmation.requirePasswordConfirmation(_.bind(C,this,e,t,n))}function b(e){C("get","",e)}function y(e,t){C("get","/"+e,t)}function k(e,t,n,i){(i=i||{}).data={defaultValue:n},C("get","/"+e+"/"+t,i)}function x(e,t,n,i){(i=i||{}).data={value:n},C("post","/"+e+"/"+t,i)}function E(e,t,n){C("delete","/"+e+"/"+t,n)}var P=window.oc_appconfig||{},B={getValue:function(e,t,n,i){k(e,t,n,{success:i})},setValue:function(e,t,n){x(e,t,n)},getApps:function(e){b({success:e})},getKeys:function(e,t){y(e,{success:t})},deleteKey:function(e,t){E(e,t)}},O=void 0!==window._oc_appswebroots&&window._oc_appswebroots,T=o(72316),j=o.n(T),I=o(87240),D={create:"POST",update:"PROPPATCH",patch:"PROPPATCH",delete:"DELETE",read:"PROPFIND"};function z(e,t){if(h.default.isArray(e))return h.default.map(e,(function(e){return z(e,t)}));var n={href:e.href};return h.default.each(e.propStat,(function(e){if("HTTP/1.1 200 OK"===e.status)for(var i in e.properties){var o=i;i in t&&(o=t[i]),n[o]=e.properties[i]}})),n.id||(n.id=N(n.href)),n}function N(e){var t=e.indexOf("?");t>0&&(e=e.substr(0,t));var n,i=e.split("/");do{n=i[i.length-1],i.pop()}while(!n&&i.length>0);return n}function S(e){return e>=200&&e<=299}function M(e,t,n,i){return e.propPatch(t.url,function(e,t){var n,i={};for(n in e){var o=t[n],a=e[n];o||(console.warn('No matching DAV property for property "'+n),o=n),(h.default.isBoolean(a)||h.default.isNumber(a))&&(a=""+a),i[o]=a}return i}(n.changed,t.davProperties),i).then((function(e){S(e.status)?h.default.isFunction(t.success)&&t.success(n.toJSON()):h.default.isFunction(t.error)&&t.error(e)}))}var U=j().noConflict();Object.assign(U,{davCall:function(e,t){var n=new I.dav.Client({baseUrl:e.url,xmlNamespaces:h.default.extend({"DAV:":"d","http://owncloud.org/ns":"oc"},e.xmlNamespaces||{})});n.resolveUrl=function(){return e.url};var i=h.default.extend({"X-Requested-With":"XMLHttpRequest",requesttoken:OC.requestToken},e.headers);return"PROPFIND"===e.type?function(e,t,n,i){return e.propFind(t.url,h.default.values(t.davProperties)||[],t.depth,i).then((function(e){if(S(e.status)){if(h.default.isFunction(t.success)){var n=h.default.invert(t.davProperties),i=z(e.body,n);t.depth>0&&i.shift(),t.success(i)}}else h.default.isFunction(t.error)&&t.error(e)}))}(n,e,0,i):"PROPPATCH"===e.type?M(n,e,t,i):"MKCOL"===e.type?function(e,t,n,i){return e.request(t.type,t.url,i,null).then((function(o){S(o.status)?M(e,t,n,i):h.default.isFunction(t.error)&&t.error(o)}))}(n,e,t,i):function(e,t,n,i){return i["Content-Type"]="application/json",e.request(t.type,t.url,i,t.data).then((function(e){if(S(e.status)){if(h.default.isFunction(t.success)){if("PUT"===t.type||"POST"===t.type||"MKCOL"===t.type){var i=e.body||n.toJSON(),o=e.xhr.getResponseHeader("Content-Location");return"POST"===t.type&&o&&(i.id=N(o)),void t.success(i)}if(207===e.status){var a=h.default.invert(t.davProperties);t.success(z(e.body,a))}else t.success(e.body)}}else h.default.isFunction(t.error)&&t.error(e)}))}(n,e,t,i)},davSync:function(e){return function(t,n,i){var o={type:D[t]||t},a=n instanceof e.Collection;if("update"===t&&(n.hasInnerCollection?o.type="MKCOL":(n.usePUT||n.collection&&n.collection.usePUT)&&(o.type="PUT")),i.url||(o.url=h.default.result(n,"url")||function(){throw new Error('A "url" property or function must be specified')}()),null!=i.data||!n||"create"!==t&&"update"!==t&&"patch"!==t||(o.data=JSON.stringify(i.attrs||n.toJSON(i))),"PROPFIND"!==o.type&&(o.processData=!1),"PROPFIND"===o.type||"PROPPATCH"===o.type){var r=n.davProperties;!r&&n.model&&(r=n.model.prototype.davProperties),r&&(h.default.isFunction(r)?o.davProperties=r.call(n):o.davProperties=r),o.davProperties=h.default.extend(o.davProperties||{},i.davProperties),h.default.isUndefined(i.depth)&&(i.depth=a?1:0)}var s=i.error;i.error=function(e,t,n){i.textStatus=t,i.errorThrown=n,s&&s.call(i.context,e,t,n)};var l=i.xhr=e.davCall(h.default.extend(o,i),n);return n.trigger("request",n,l,i),l}}(U)});var L=U,F=o(76632),R=window._oc_config||{},Q=T.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=T.Collection.extend({model:Q}),H=T.View.extend({_collection:void 0,_subViews:[],initialize:function(e){this._collection=e.collection},render:function(){var e=this;return e.$el.html(""),e._subViews=[],e._collection.forEach((function(t){var n=new K({model:t});n.render(),e.$el.append(n.$el),n.on("toggle:actionmenu",e._onChildActionMenuToggle,e),e._subViews.push(n)})),e},_onChildActionMenuToggle:function(e){this._subViews.forEach((function(t){t.trigger("parent:toggle:actionmenu",e)}))}}),K=T.View.extend({className:"contact",_template:void 0,_model:void 0,_actionMenuShown:!1,events:{"click .icon-more":"_onToggleActionsMenu"},contactTemplate:o(10944),template:function(e){return this.contactTemplate(e)},initialize:function(e){this._model=e.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(e){this.$el.is(e)||(this._actionMenuShown=!1,this.$(".menu").hide())}}),Y=T.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:o(95386),error:o(20421),menu:o(66115),list:o(34083)},_onSearch:h.default.debounce((function(e){var t=this.$("#contactsmenu-search").val();t!==this._searchTerm&&(this.trigger("search",this.$("#contactsmenu-search").val()),this._searchTerm=t)}),700),loadingTemplate:function(e){return this.templates.loading(e)},errorTemplate:function(e){return this.templates.error(h.default.extend({couldNotLoadText:t("core","Could not load your contacts")},e))},contentTemplate:function(e){return this.templates.menu(h.default.extend({searchContactsText:t("core","Search contacts …")},e))},contactsTemplate:function(e){return this.templates.list(h.default.extend({noContactsFoundText:t("core","No contacts found"),showAllContactsText:t("core","Show all contacts …"),contactsAppMgmtText:t("core","Install the Contacts app")},e))},initialize:function(e){this.options=e},showLoading:function(e){this.render(),this._contacts=void 0,this.$(".content").html(this.loadingTemplate({loadingText:e}))},showError:function(){this.render(),this._contacts=void 0,this.$(".content").html(this.errorTemplate())},showContacts:function(e,t){this._contacts=e.contacts,this.render({contacts:e.contacts});var n=new H({collection:e.contacts});n.render(),this.$(".content").html(this.contactsTemplate({contacts:e.contacts,searchTerm:t,contactsAppEnabled:e.contactsAppEnabled,contactsAppURL:Ge.generateUrl("/apps/contacts"),canInstallApp:Ge.isUserAdmin(),contactsAppMgmtURL:Ge.generateUrl("/settings/apps/social/contacts")})),this.$("#contactsmenu-contacts").html(n.$el)},render:function(e){var t=this.$("#contactsmenu-search").val();return this.$el.html(this.contentTemplate(e)),this.$("#contactsmenu-search").val(t),this.$("#contactsmenu-search").focus(),this}}),q=function(e){this.initialize(e)};q.prototype={$el:void 0,_$trigger:void 0,_view:void 0,_contactsPromise:void 0,initialize:function(e){this.$el=e.el,this._$trigger=e.trigger,this._view=new Y({el:this.$el}),this._view.on("search",(function(e){this._loadContacts(e)}),this),Ge.registerMenu(this._$trigger,this.$el,function(){this._toggleVisibility(!0)}.bind(this),!0),this.$el.on("beforeHide",function(){this._toggleVisibility(!1)}.bind(this))},_toggleVisibility:function(e){return e?this._loadContacts():(this.$el.html(""),Promise.resolve())},_getContacts:function(e){var t=Ge.generateUrl("/contactsmenu/contacts");return Promise.resolve(c().ajax(t,{method:"POST",data:{filter:e}}))},_loadContacts:function(e){var n=this;return n._contactsPromise||(n._contactsPromise=n._getContacts(e)),h.default.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(e){n._view.showError(),console.error("There was an error loading your contacts",e)})).then((function(){delete n._contactsPromise})).catch(console.error.bind(this))}};var W=q,J=document.getElementsByTagName("head")[0].getAttribute("data-user"),V=document.getElementsByTagName("head")[0].getAttribute("data-user-displayname"),Z=void 0!==J&&J;function X(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function $(e,t,n){return t&&X(e.prototype,t),n&&X(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}var ee={Search:$((function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),console.warn("OCA.Search is deprecated. Please use the unified search API instead")}))};function te(e){return te="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},te(e)}var ne,ie,oe,ae={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(e,t,n,i){this.message(e,t,"alert",ae.OK_BUTTON,n,i)},info:function(e,t,n,i){this.message(e,t,"info",ae.OK_BUTTON,n,i)},confirm:function(e,t,n,i){return this.message(e,t,"notice",ae.YES_NO_BUTTONS,n,i)},confirmDestructive:function(e,t,n,i,o){return this.message(e,t,"none",n,i,void 0===o||o)},confirmHtml:function(e,t,n,i){return this.message(e,t,"notice",ae.YES_NO_BUTTONS,n,i,!0)},prompt:function(e,n,i,o,a,r){return c().when(this._getMessageTemplate()).then((function(s){var l="oc-dialog-"+ae.dialogsCounter+"-content",u="#"+l,d=s.octemplate({dialog_name:l,title:n,message:e,type:"notice"}),f=c()("<input/>");f.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(f),void 0===o&&(o=!1),c()("body").append(d),void 0!==i&&(i=h.default.once(i));var g=[{text:t("core","No"),click:function(){void 0!==i&&i(!1,f.val()),c()(u).ocdialog("close")}},{text:t("core","Yes"),click:function(){void 0!==i&&i(!0,f.val()),c()(u).ocdialog("close")},defaultButton:!0}];c()(u).ocdialog({closeOnEscape:!0,modal:o,buttons:g,close:function(){void 0!==i&&i(!1,f.val())}}),f.focus(),ae.dialogsCounter++}))},filepicker:function(e,n,i,o,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"),f=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=ee.Sharing&&ee.Sharing.PublicApp&&ee.Sharing.PublicApp.fileList?ee.Sharing.PublicApp.fileList.filesClient:Ge.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==o&&(o=[]),"string"==typeof o&&(o=[o]),u.$filePicker=p.octemplate({dialog_name:"oc-dialog-filepicker-content",title:e,emptytext:d,newtext:f,nameCol:t("core","Name"),sizeCol:t("core","Size"),modifiedCol:t("core","Modified")}).data("path",s).data("multiselect",i).data("mimetype",o).data("allowDirectoryChooser",l.allowDirectoryChooser),void 0===a&&(a=!1),void 0===i&&(i=!1),u.$filePicker.find("#picker-view-toggle").remove(),u.$filePicker.find("#picker-filestable").removeClass("view-grid"),c()("body").append(u.$filePicker),u.$showGridView=c()("input#picker-showgridview"),u.$showGridView.on("change",h.default.bind(u._onGridviewChange,u)),u._getGridSettings();var g=u.$filePicker.find(".actions.creatable .button-add");r!==u.FILEPICKER_TYPE_CHOOSE||l.allowDirectoryChooser||g.hide(),g.on("focus",(function(){u.$filePicker.ocdialog("setEnterCallback",(function(){event.stopImmediatePropagation(),event.preventDefault(),g.click()}))})),g.on("blur",(function(){u.$filePicker.ocdialog("unsetEnterCallback")})),Ge.registerMenu(g,u.$filePicker.find(".menu"),(function(){m.tooltip("hide"),m.focus(),u.$filePicker.ocdialog("setEnterCallback",(function(){event.stopImmediatePropagation(),event.preventDefault(),u.$filePicker.submit()}));var e=m.val(),t=e.lastIndexOf(".");-1===t&&(t=e.length),m.selectRange(0,t)}));var A=u.$filePicker.find(".filenameform"),m=A.find("input[type='text']");A.find("input[type='submit']").on("click",(function(e){e.stopImmediatePropagation(),e.preventDefault(),A.submit()}));A.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(Ge.config.blacklist_files_regex))throw t("files",'"{name}" is not an allowed filetype',{name:e});return!0}(e)){if(u.filelist.find((function(e){return e.name===this}),e))throw t("files","{newName} already exists",{newName:e},void 0,{escape:!1});return!0}}catch(e){m.attr("title",e),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(e){u._fillFilePicker(u.$filePicker.data("path")+"/"+n)})),Ge.hideMenus(),u.$filePicker.ocdialog("unsetEnterCallback"),u.$filePicker.click(),m.val(f)}})),m.keypress((function(e){13!==e.keyCode&&13!==e.which||(e.stopImmediatePropagation(),e.preventDefault(),A.submit())})),m.on("input",(function(e){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","div:not(:last-child)",u,(function(e){u._handleTreeListSelect(e,r)})),u.$filelist.on("click","tr",(function(e){u._handlePickerClick(e,c()(this),r)})),u.$fileListHeader.on("click","a",(function(e){var t=u.$filePicker.data("path");u.filepicker.sortField=c()(e.currentTarget).data("sort"),u.filepicker.sortOrder="asc"===u.filepicker.sortOrder?"desc":"asc",u._fillFilePicker(t)})),u._fillFilePicker(s)}));var v=function(e){if(void 0!==n){var t;if(!0===i)t=[],u.$filelist.find("tr.filepicker_element_selected").each((function(e,n){t.push(u.$filePicker.data("path")+"/"+c()(n).data("entryname"))}));else{t=u.$filePicker.data("path");var o=u.$filelist.find("tr.filepicker_element_selected").data("entryname");o&&(t+="/"+o)}n(t,e),u.$filePicker.ocdialog("close")}},w=[];r===ae.FILEPICKER_TYPE_CHOOSE?w.push({text:t("core","Choose"),click:function(){v(ae.FILEPICKER_TYPE_CHOOSE)},defaultButton:!0}):r===ae.FILEPICKER_TYPE_CUSTOM?l.buttons.forEach((function(e){w.push({text:e.text,click:function(){v(e.type)},defaultButton:e.defaultButton})})):(r!==ae.FILEPICKER_TYPE_COPY&&r!==ae.FILEPICKER_TYPE_COPY_MOVE||w.push({text:t("core","Copy"),click:function(){v(ae.FILEPICKER_TYPE_COPY)},defaultButton:!1}),r!==ae.FILEPICKER_TYPE_MOVE&&r!==ae.FILEPICKER_TYPE_COPY_MOVE||w.push({text:t("core","Move"),click:function(){v(ae.FILEPICKER_TYPE_MOVE)},defaultButton:!0})),u.$filePicker.ocdialog({closeOnEscape:!0,width:600,height:500,modal:a,buttons:w,style:{buttons:"aside"},close:function(){try{c()(this).ocdialog("destroy").remove()}catch(e){}u.$filePicker=null}});var C=u.$filePicker.closest(".oc-dialog").find(".primary");-1!==u.$filePicker.data("mimetype").indexOf("httpd/unix-directory")||u.$filePicker.data("allowDirectoryChooser")?C.prop("disabled",!1):C.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,i,o,a,r,s){return c().when(this._getMessageTemplate()).then((function(l){var u="oc-dialog-"+ae.dialogsCounter+"-content",d="#"+u,f=l.octemplate({dialog_name:u,title:n,message:e,type:i},s?{escapeFunction:""}:{});void 0===r&&(r=!1),c()("body").append(f);var p=[];switch(o){case ae.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 ae.OK_BUTTON:p[0]={text:t("core","OK"),click:function(){c()(d).ocdialog("close"),void 0!==a&&a()},defaultButton:!0};break;default:"object"===te(o)&&o.type===ae.YES_NO_BUTTONS&&(p=[{text:o.cancel||t("core","No"),click:function(){void 0!==a&&a(!1),c()(d).ocdialog("close")}},{text:o.confirm||t("core","Yes"),click:function(){void 0!==a&&a(!0),c()(d).ocdialog("close")},defaultButton:!0,classes:o.confirmClasses}])}c()(d).ocdialog({closeOnEscape:!0,closeCallback:function(){a&&a(!1)},modal:r,buttons:p}),ae.dialogsCounter++})).fail((function(i,o){0===i?alert(n+": "+e):alert(t("core","Error loading message template: {error}",{error:o}))}))},_fileexistsshown:!1,fileexists:function(e,i,o,a){var r=this,s=new(c().Deferred),l=function(e,t,n,i,o){i=Math.round(i),o=Math.round(o);for(var a=e.getContext("2d").getImageData(0,0,t,n),r=e.getContext("2d").getImageData(0,0,i,o),s=a.data,l=r.data,c=t/i,u=n/o,d=Math.ceil(c/2),f=Math.ceil(u/2),p=0;p<o;p++)for(var h=0;h<i;h++){for(var g=4*(h+p*i),A=0,m=0,v=0,w=0,C=0,b=0,y=0,k=(p+.5)*u,x=Math.floor(p*u);x<(p+1)*u;x++)for(var E=Math.abs(k-(x+.5))/f,P=(h+.5)*c,B=E*E,O=Math.floor(h*c);O<(h+1)*c;O++){var T=Math.abs(P-(O+.5))/d,j=Math.sqrt(B+T*T);j>=-1&&j<=1&&(A=2*j*j*j-3*j*j+1)>0&&(y+=A*s[3+(T=4*(O+x*t))],v+=A,s[T+3]<255&&(A=A*s[T+3]/250),w+=A*s[T],C+=A*s[T+1],b+=A*s[T+2],m+=A)}l[g]=w/m,l[g+1]=C/m,l[g+2]=b/m,l[g+3]=y/v}e.getContext("2d").clearRect(0,0,Math.max(t,i),Math.max(n,o)),e.width=i,e.height=o,e.getContext("2d").putImageData(r,0,0)},u=function(n,i,o){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(i.name),r.find(".size").text(Ge.Util.humanFileSize(i.size)),r.find(".mtime").text(Ge.Util.formatDate(i.mtime)),o.size&&o.lastModified&&(s.find(".size").text(Ge.Util.humanFileSize(o.size)),s.find(".mtime").text(Ge.Util.formatDate(o.lastModified)));var u=i.directory+"/"+i.name,d={file:u,x:96,y:96,c:i.etag,forceIcon:0},f=Files.generatePreviewUrl(d);f=f.replace(/'/g,"%27"),r.find(".icon").css({"background-image":"url('"+f+"')"}),function(e){var t=new(c().Deferred),n=e.type&&e.type.split("/").shift();if(window.FileReader&&"image"===n){var i=new FileReader;i.onload=function(e){var n=new Blob([e.target.result]);window.URL=window.URL||window.webkitURL;var i=window.URL.createObjectURL(n),o=new Image;o.src=i,o.onload=function(){var e,n,i,a,r,s,c,u=(e=o,r=document.createElement("canvas"),s=e.width,c=e.height,s>c?(i=0,n=(s-c)/2):(i=(c-s)/2,n=0),a=Math.min(s,c),r.width=a,r.height=a,r.getContext("2d").drawImage(e,n,i,a,a,0,0,a,a),l(r,a,a,96,96),r.toDataURL("image/png",.7));t.resolve(u)}},i.readAsArrayBuffer(e)}else t.reject();return t}(o).then((function(e){s.find(".icon").css("background-image","url("+e+")")}),(function(){u=Ge.MimeType.getIconUrl(o.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),o.lastModified>i.mtime?s.find(".mtime").css("font-weight","bold"):o.lastModified<i.mtime&&r.find(".mtime").css("font-weight","bold"),o.size&&o.size>i.size?s.find(".size").css("font-weight","bold"):o.size&&o.size<i.size&&r.find(".size").css("font-weight","bold"),"readonly"===i.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",f="#"+d;if(this._fileexistsshown){var p=c()(f+" .conflicts");u(p,i,o);var h=c()(f+" .conflict").length,g=n("core","{count} file conflict","{count} file conflicts",h,{count:h});c()(f).parent().children(".oc-dialog-title").text(g),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),i&&o){var h=p.find(".conflicts");u(h,i,o)}var g=[{text:t("core","Cancel"),classes:"cancel",click:function(){void 0!==a.onCancel&&a.onCancel(e),c()(f).ocdialog("close")}},{text:t("core","Continue"),classes:"continue",click:function(){void 0!==a.onContinue&&a.onContinue(c()(f+" .conflict")),c()(f).ocdialog("close")}}];c()(f).ocdialog({width:500,closeOnEscape:!0,modal:!0,buttons:g,closeButton:null,close:function(){r._fileexistsshown=!1;try{c()(this).ocdialog("destroy").remove()}catch(e){}}}),c()(f).css("height","auto");var A=p.closest(".oc-dialog").find("button.continue");function m(){var e=p.find(".conflicts .checkbox:checked").length;A.prop("disabled",0===e)}A.prop("disabled",!0),c()(f).find(".allnewfiles").on("click",(function(){c()(f).find('.conflict .replacement input[type="checkbox"]').prop("checked",c()(this).prop("checked"))})),c()(f).find(".allexistingfiles").on("click",(function(){c()(f).find('.conflict .original:not(.readonly) input[type="checkbox"]').prop("checked",c()(this).prop("checked"))})),c()(f).find(".conflicts").on("click",".replacement,.original:not(.readonly)",(function(){var e=c()(this).find('input[type="checkbox"]');e.prop("checked",!e.prop("checked"))})),c()(f).find(".conflicts").on("click",'.replacement input[type="checkbox"],.original:not(.readonly) input[type="checkbox"]',(function(){var e=c()(this);e.prop("checked",!e.prop("checked"))})),c()(f).on("click",".replacement,.allnewfiles",(function(){var e=c()(f).find('.conflict .replacement input[type="checkbox"]:checked').length;e===c()(f+" .conflict").length?(c()(f).find(".allnewfiles").prop("checked",!0),c()(f).find(".allnewfiles + .count").text(t("core","(all selected)"))):e>0?(c()(f).find(".allnewfiles").prop("checked",!1),c()(f).find(".allnewfiles + .count").text(t("core","({count} selected)",{count:e}))):(c()(f).find(".allnewfiles").prop("checked",!1),c()(f).find(".allnewfiles + .count").text("")),m()})),c()(f).on("click",".original,.allexistingfiles",(function(){var e=c()(f).find('.conflict .original input[type="checkbox"]:checked').length;e===c()(f+" .conflict").length?(c()(f).find(".allexistingfiles").prop("checked",!0),c()(f).find(".allexistingfiles + .count").text(t("core","(all selected)"))):e>0?(c()(f).find(".allexistingfiles").prop("checked",!1),c()(f).find(".allexistingfiles + .count").text(t("core","({count} selected)",{count:e}))):(c()(f).find(".allexistingfiles").prop("checked",!1),c()(f).find(".allexistingfiles + .count").text("")),m()})),s.resolve()})).fail((function(){s.reject(),alert(t("core","Error loading file exists template"))}));return s.promise()},_getGridSettings:function(){var e=this;c().get(Ge.generateUrl("/apps/files/api/v1/showgridview"),(function(t){e.$showGridView.get(0).checked=t.gridview,e.$showGridView.next("#picker-view-toggle").removeClass("icon-toggle-filelist icon-toggle-pictures").addClass(t.gridview?"icon-toggle-filelist":"icon-toggle-pictures"),c()(".list-container").toggleClass("view-grid",t.gridview)}))},_onGridviewChange:function(){var e=this.$showGridView.is(":checked");Ge.currentUser&&c().post(Ge.generateUrl("/apps/files/api/v1/showgridview"),{show:e}),this.$showGridView.next("#picker-view-toggle").removeClass("icon-toggle-filelist icon-toggle-pictures").addClass(e?"icon-toggle-filelist":"icon-toggle-pictures"),c()(".list-container").toggleClass("view-grid",e)},_getFilePickerTemplate:function(){var e=c().Deferred();if(this.$filePickerTemplate)e.resolve(this.$filePickerTemplate);else{var t=this;c().get(Ge.filePath("core","templates","filepicker.html"),(function(n){t.$filePickerTemplate=c()(n),t.$listTmpl=t.$filePickerTemplate.find(".filelist tbody tr:first-child").detach(),e.resolve(t.$filePickerTemplate)})).fail((function(t,n,i){e.reject(t.status,i)}))}return e.promise()},_getMessageTemplate:function(){var e=c().Deferred();if(this.$messageTemplate)e.resolve(this.$messageTemplate);else{var t=this;c().get(Ge.filePath("core","templates","message.html"),(function(n){t.$messageTemplate=c()(n),e.resolve(t.$messageTemplate)})).fail((function(t,n,i){e.reject(t.status,i)}))}return e.promise()},_getFileExistsTemplate:function(){var e=c().Deferred();if(this.$fileexistsTemplate)e.resolve(this.$fileexistsTemplate);else{var t=this;c().get(Ge.filePath("files","templates","fileexists.html"),(function(n){t.$fileexistsTemplate=c()(n),e.resolve(t.$fileexistsTemplate)})).fail((function(){e.reject()}))}return e.promise()},_getFileList:function(e,t){return"string"==typeof t&&(t=[t]),c().getJSON(Ge.filePath("files","ajax","list.php"),{dir:e,mimetypes:JSON.stringify(t)})},_fillFilePicker:function(e){var n=this;this.$filelist.empty(),this.$filePicker.find(".emptycontent").hide(),this.$filelistContainer.addClass("icon-loading"),this.$filePicker.data("path",e);var i=this.$filePicker.data("mimetype");"string"==typeof i&&(i=[i]),n.$fileListHeader.find(".sort-indicator").addClass("hidden").removeClass("icon-triangle-n").removeClass("icon-triangle-s"),n.$fileListHeader.find("[data-sort="+n.filepicker.sortField+"] .sort-indicator").removeClass("hidden"),"asc"===n.filepicker.sortOrder?n.$fileListHeader.find("[data-sort="+n.filepicker.sortField+"] .sort-indicator").addClass("icon-triangle-n"):n.$fileListHeader.find("[data-sort="+n.filepicker.sortField+"] .sort-indicator").addClass("icon-triangle-s"),n.filepicker.filesClient.getFolderContents(e).then((function(o,a){n.filelist=a,i&&i.length>0&&-1===i.indexOf("*")&&(a=a.filter((function(e){return"dir"===e.type||-1!==i.indexOf(e.mimetype)})));var r=document.getElementById("showHiddenFiles");null===r||"1"===r.value||(a=a.filter((function(e){return!e.name.startsWith(".")})));var s={name:function(e,t){return"dir"===e.type&&"dir"!==t.type?-1:"dir"!==e.type&&"dir"===t.type?1:Ge.Util.naturalSortCompare(e.name,t.name)},size:function(e,t){return e.size-t.size},mtime:function(e,t){return e.mtime-t.mtime}},l=s[n.filepicker.sortField]||s.name;a=a.sort((function(e,t){var i=function(e){return e.tags&&e.tags.indexOf(Ge.TAG_FAVORITE)>=0};return i(e)&&!i(t)?-1:!i(e)&&i(t)?1:"asc"===n.filepicker.sortOrder?l(e,t):-l(e,t)})),n._fillSlug(),0===a.length?(n.$filePicker.find(".emptycontent").show(),n.$fileListHeader.hide()):(n.$filePicker.find(".emptycontent").hide(),n.$fileListHeader.show()),n.$filelist.empty(),c().each(a,(function(i,o){var a,r;if(o.icon=Ge.MimeType.getIconUrl(o.mimetype),void 0!==o.size&&o.size>=0?(a=Ge.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=n.$listTmpl.octemplate({type:o.type,dir:e,filename:o.name,filename1:l,filename2:u,date:Ge.Util.relativeModifiedDate(o.mtime),size:a,sizeColor:r,icon:o.icon});if("file"===o.type){var f={file:e+"/"+o.name,x:100,y:100},p=new Image,h=Ge.generateUrl("/core/preview.png?")+c().param(f);p.onload=function(){p.width>5&&d.find("td.filename").attr("style","background-image:url("+h+")")},p.src=h}n.$filelist.append(d)})),n.$filelistContainer.removeClass("icon-loading")}))},_fillSlug:function(){var e=this.$dirTree.find(".actions.creatable").detach();this.$dirTree.empty();var t=this;t.$dirTree.append(e);var n=this.$filePicker.data("path"),i=c()('<div data-dir="{dir}"><a>{name}</a></div>').addClass("crumb");if(n){var o=n.split("/");c().each(o,(function(e,n){if(""===(n=o.pop()))return!1;t.$dirTree.prepend(i.octemplate({dir:o.join("/")+"/"+n,name:n}))}))}i.octemplate({dir:"",name:""},{escapeFunction:null}).prependTo(this.$dirTree)},_handleTreeListSelect:function(e,t){var n=e.data,i=c()(e.target).closest(".crumb").data("dir");n._fillFilePicker(i);var o=e.target.closest(".oc-dialog"),a=c()(".primary",o);this._changeButtonsText(t,i.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(e,t,n){var i=this.$filePicker.closest(".oc-dialog").find(".primary");"file"===t.data("type")?(!0===this.$filePicker.data("multiselect")&&e.ctrlKey||this.$filelist.find(".filepicker_element_selected").removeClass("filepicker_element_selected"),t.toggleClass("filepicker_element_selected"),i.prop("disabled",!1)):"dir"===t.data("type")&&(this._fillFilePicker(this.$filePicker.data("path")+"/"+t.data("entryname")),this._changeButtonsText(n,t.data("entryname")),-1!==this.$filePicker.data("mimetype").indexOf("httpd/unix-directory")||this.$filePicker.data("allowDirectoryChooser")?i.prop("disabled",!1):i.prop("disabled",!0))},_changeButtonsText:function(e,n){var i=""===n?t("core","Copy"):t("core","Copy to {folder}",{folder:n}),o=""===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(i);break;case this.FILEPICKER_TYPE_MOVE:a.text(o);break;case this.FILEPICKER_TYPE_COPY_MOVE:a.eq(0).text(i),a.eq(1).text(o)}}},re=ae,se=(ne=document,ie=u.emit,oe=ne.getElementsByTagName("head")[0].getAttribute("data-requesttoken"),{getToken:function(){return oe},setToken:function(e){ie("csrf-token-update",{token:oe=e})}}),le=se.getToken,ce=se.setToken,ue=function e(t,n){var i,o,a="";if(this.typelessListeners=[],this.closed=!1,this.listeners={},n)for(i in n)a+=i+"="+encodeURIComponent(n[i])+"&";if(a+="requesttoken="+encodeURIComponent(le()),this.useFallBack||"undefined"==typeof EventSource){var r="oc_eventsource_iframe_"+e.iframeCount;e.fallBackSources[e.iframeCount]=this,this.iframe=c()("<iframe></iframe>"),this.iframe.attr("id",r),this.iframe.hide(),o="&",-1===t.indexOf("?")&&(o="?"),this.iframe.attr("src",t+o+"fallback=true&fallback_id="+e.iframeCount+"&"+a),c()("body").append(this.iframe),this.useFallBack=!0,e.iframeCount++}else o="&",-1===t.indexOf("?")&&(o="?"),this.source=new EventSource(t+o+a),this.source.onmessage=function(e){for(var t=0;t<this.typelessListeners.length;t++)this.typelessListeners[t](JSON.parse(e.data))}.bind(this);this.listen("__internal__",function(e){"close"===e&&this.close()}.bind(this))};ue.fallBackSources=[],ue.iframeCount=0,ue.fallBackCallBack=function(e,t,n){ue.fallBackSources[e].fallBackCallBack(t,n)},ue.prototype={typelessListeners:[],iframe:null,listeners:{},useFallBack:!1,fallBackCallBack:function(e,t){var n;if(!this.closed)if(e){if(void 0!==this.listeners.done)for(n=0;n<this.listeners[e].length;n++)this.listeners[e][n](t)}else for(n=0;n<this.typelessListeners.length;n++)this.typelessListeners[n](t)},lastLength:0,listen:function(e,t){t&&t.call&&(e?this.useFallBack?(this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t)):this.source.addEventListener(e,(function(e){void 0!==e.data?t(JSON.parse(e.data)):t("")}),!1):this.typelessListeners.push(t))},close:function(){this.closed=!0,void 0!==this.source&&this.source.close()}};var de=ue,fe=o(42515),pe=null,he=function(e){if(pe){var t=pe;pe.trigger(new(c().Event)("beforeHide")),pe.slideUp(50,(function(){t.trigger(new(c().Event)("afterHide")),e&&e.apply(this,arguments)}))}c()(".menutoggle").attr("aria-expanded",!1),c()(".openedMenu").removeClass("openedMenu"),pe=null},ge=!!window._oc_isadmin,Ae=o(27856),me=o.n(Ae),ve=o(86834),we=o.n(ve),Ce=o(46488),be=o.n(Ce),ye=o(95573),ke=o.n(ye);window._oc_l10n_registry_translations=window._oc_l10n_registry_translations||{},window._oc_l10n_registry_plural_functions=window._oc_l10n_registry_plural_functions||{};var xe=function(e){return void 0!==window._oc_l10n_registry_translations[e]&&void 0!==window._oc_l10n_registry_plural_functions[e]},Ee=function(e){return{translations:window._oc_l10n_registry_translations[e]||{},pluralFunction:window._oc_l10n_registry_plural_functions[e]}};function Pe(e){return Pe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Pe(e)}var Be={load:function(e,t){if(xe(e)||"en"===Ge.getLocale()){var n=c().Deferred(),i=n.promise();return i.then(t),n.resolve(),i}var o=this,a=(0,d.generateFilePath)(e,"l10n",Ge.getLocale()+".json");return c().get(a).then((function(t){t.translations&&o.register(e,t.translations,t.pluralForm)})).then(t)},register:function(e,t){var n,i,o;n=e,i=t,o=this._getPlural,xe(n)?function(e,t,n){window._oc_l10n_registry_translations[e]=Object.assign(window._oc_l10n_registry_translations[e],t),window._oc_l10n_registry_plural_functions[e]=n}(n,i,o):function(e,t,n){window._oc_l10n_registry_translations[e]=t,window._oc_l10n_registry_plural_functions[e]=n}(n,i,o)},_unregister:function(e){delete window._oc_l10n_registry_translations[e],delete window._oc_l10n_registry_plural_functions[e]},translate:function(e,t,n,i,o){var a=o||{};h.default.defaults(a,{escape:!0,sanitize:!0});var r=a.sanitize?me().sanitize:be(),s=a.escape?ke():be(),l=t,c=Ee(e).translations[t];return void 0!==c&&(l=c),"object"===Pe(n)||void 0!==i?r(function(e,t,n){return e.replace(/%n/g,n).replace(/{([^{}]*)}/g,(function(e,n){var i=t[n];return r("string"==typeof i||"number"==typeof i?s(i):e)}))}(l,n,i)):r(l)},translatePlural:function(e,t,n,i,o,a){var r="_"+t+"_::_"+n+"_",s=Ee(e),l=s.translations[r];if(void 0!==l){var u=l;if(c().isArray(u)){var d=s.pluralFunction(i);return this.translate(e,u[d],o,i,a)}}return 1===i?this.translate(e,t,o,i,a):this.translate(e,n,o,i,a)},_getPlural:function(e){var t=Ge.getLanguage();if("pt-BR"===t&&(t="xbr"),void 0===t||""===t)return 1===e?0:1;switch(t.length>3&&(t=t.substring(0,t.lastIndexOf("-"))),t){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===e?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===e||1===e?0:1;case"be":case"bs":case"hr":case"ru":case"sh":case"sr":case"uk":return e%10==1&&e%100!=11?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2;case"cs":case"sk":return 1===e?0:e>=2&&e<=4?1:2;case"ga":return 1===e?0:2===e?1:2;case"lt":return e%10==1&&e%100!=11?0:e%10>=2&&(e%100<10||e%100>=20)?1:2;case"sl":return e%100==1?0:e%100==2?1:e%100==3||e%100==4?2:3;case"mk":return e%10==1?0:1;case"mt":return 1===e?0:0===e||e%100>1&&e%100<11?1:e%100>10&&e%100<20?2:3;case"lv":return 0===e?0:e%10==1&&e%100!=11?1:2;case"pl":return 1===e?0:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?1:2;case"cy":return 1===e?0:2===e?1:8===e||11===e?2:3;case"ro":return 1===e?0:0===e||e%100>0&&e%100<20?1:2;case"ar":return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11&&e%100<=99?4:5}}},Oe=Be;we().registerHelper("t",(function(e,t){return Be.translate(e,t)}));var Te=o(9944),je={startSaving:function(e){this.startAction(e,t("core","Saving …"))},startAction:function(e,t){c()(e).text(t).removeClass("success").removeClass("error").stop(!0,!0).show()},finishedSaving:function(e,t){this.finishedAction(e,t)},finishedAction:function(e,t){"success"===t.status?this.finishedSuccess(e,t.data.message):this.finishedError(e,t.data.message)},finishedSuccess:function(e,t){c()(e).text(t).addClass("success").removeClass("error").stop(!0,!0).delay(3e3).fadeOut(900).show()},finishedError:function(e,t){c()(e).text(t).addClass("error").removeClass("success").show()}},Ie=o(30381),De=o.n(Ie),ze={callback:null,pageLoadTime:null,init:function(){c()(".password-confirm-required").on("click",h.default.bind(this.requirePasswordConfirmation,this)),this.pageLoadTime=De().now()},requiresPasswordConfirmation:function(){var e=this.pageLoadTime-1e3*window.nc_pageLoad,t=De().now()-(e+1e3*window.nc_lastLogin);return window.backendAllowsPasswordConfirmation&&t>18e5},requirePasswordConfirmation:function(e,n,i){n=void 0!==n?n:{};var o={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=h.default.extend(o,n),r=this;this.requiresPasswordConfirmation()&&Ge.dialogs.prompt(a.text,a.title,(function(e,t){e&&""!==t?r._confirmPassword(t,a):h.default.isFunction(i)&&i()}),!0,a.label,!0).then((function(){var e=c()(".oc-dialog:visible");if(e.find(".ui-icon").remove(),e.addClass("password-confirmation"),""!==a.error){var t=c()("<p></p>").addClass("msg warning").text(a.error);e.find(".oc-dialog-content").append(t)}e.find(".oc-dialog-buttonrow").addClass("aside");var n=e.find("button");n.eq(0).hide(),n.eq(1).text(a.confirm)})),this.callback=e},_confirmPassword:function(e,n){var i=this;c().ajax({url:(0,d.generateUrl)("/login/confirm"),data:{password:e},type:"POST",success:function(e){window.nc_lastLogin=e.lastLogin,h.default.isFunction(i.callback)&&i.callback()},error:function(){n.error=t("core","Failed to authenticate, try again"),Ge.PasswordConfirmation.requirePasswordConfirmation(i.callback,n)}})}},_e=window._theme||{},Ne={_handlers:[],_pushState:function(e,t,n){var i;if(i="string"==typeof e?e:Ge.buildQueryString(e),window.history.pushState){if(t=t||location.pathname+"?"+i,navigator.userAgent.toLowerCase().indexOf("firefox")>-1&&parseInt(navigator.userAgent.split("/").pop())<51)for(var o,a=document.querySelectorAll('[fill^="url(#"], [stroke^="url(#"], [filter^="url(#invert"]'),r=0,s=a.length;r<s;r++)(o=a[r]).style.fill=o.style.fill,o.style.stroke=o.style.stroke,o.removeAttribute("filter"),o.setAttribute("filter","url(#invert)");n?window.history.replaceState(e,"",t):window.history.pushState(e,"",t)}else window.location.hash="?"+i,this._cancelPop=!0},pushState:function(e,t){this._pushState(e,t,!1)},replaceState:function(e,t){this._pushState(e,t,!0)},addOnPopStateHandler:function(e){this._handlers.push(e)},_parseHashQuery:function(){var e=window.location.hash,t=e.indexOf("?");return t>=0?e.substr(t+1):e.length?e.substr(1):""},_decodeQuery:function(e){return e.replace(/\+/g," ")},parseUrlQuery:function(){var e,t=this._parseHashQuery();return t&&(e=Ge.parseQueryString(this._decodeQuery(t))),(e=h.default.extend(e||{},Ge.parseQueryString(this._decodeQuery(location.search))))||{}},_onPopState:function(e){var t;if(this._cancelPop)this._cancelPop=!1;else if(this._handlers.length){t=e&&e.state,h.default.isString(t)?t=Ge.parseQueryString(t):t||(t=this.parseUrlQuery()||{});for(var n=0;n<this._handlers.length;n++)this._handlers[n](t)}}};function Se(e){for(var t,n=[],i=0,o=-1,a=0;i<e.length;){t=e.charAt(i);var r=!a&&"."===t||t>="0"&&t<="9";r!==a&&(n[++o]="",a=r),n[o]+=t,i++}return n}var Me={History:Ne,humanFileSize:o(3378).s,computerFileSize:function(e){if("string"!=typeof e)return null;var t=e.toLowerCase().trim(),n=null,i=t.match(/^[\s+]?([0-9]*)(\.([0-9]+))?( +)?([kmgtp]?b?)$/i);return null===i?null:(n=parseFloat(t),isFinite(n)?(i[5]&&(n*={b:1,k:1024,kb:1024,mb:1048576,m:1048576,gb:1073741824,g:1073741824,tb:1099511627776,t:1099511627776,pb:0x4000000000000,p:0x4000000000000}[i[5]]),n=Math.round(n)):null)},formatDate:function(e,t){return void 0===window.TESTING&&console.warn("OC.Util.formatDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment"),t=t||"LLL",De()(e).format(t)},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=De()().diff(De()(e));return n>=0&&n<45e3?t("core","seconds ago"):De()(e).fromNow()},getScrollBarWidth:function(){if(this._scrollBarWidth)return this._scrollBarWidth;var e=document.createElement("p");e.style.width="100%",e.style.height="200px";var t=document.createElement("div");t.style.position="absolute",t.style.top="0px",t.style.left="0px",t.style.visibility="hidden",t.style.width="200px",t.style.height="150px",t.style.overflow="hidden",t.appendChild(e),document.body.appendChild(t);var n=e.offsetWidth;t.style.overflow="scroll";var i=e.offsetWidth;return n===i&&(i=t.clientWidth),document.body.removeChild(t),this._scrollBarWidth=n-i,this._scrollBarWidth},stripTime:function(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate())},naturalSortCompare:function(e,t){var n,i=Se(e),o=Se(t);for(n=0;i[n]&&o[n];n++)if(i[n]!==o[n]){var a=Number(i[n]),r=Number(o[n]);return a==i[n]&&r==o[n]?a-r:i[n].localeCompare(o[n],Ge.getLanguage())}return i.length-o.length},waitFor:function(e,t){!function n(){!0!==e()&&setTimeout(n,t)}()},isCookieSetToValue:function(e,t){for(var n=document.cookie.split(";"),i=0;i<n.length;i++){var o=n[i].split("=");if(o[0].trim()===e&&o[1].trim()===t)return!0}return!1}},Ue=window._oc_debug,Le=window._oc_webroot;if(void 0===Le){var Fe=(Le=location.pathname).indexOf("/index.php/");Le=-1!==Fe?Le.substr(0,Fe):Le.substr(0,Le.lastIndexOf("/"))}var Re,Qe=Le,Ge={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(e){return!!e.match(R.blacklist_files_regex)},addScript:function(e,t,n){var i;console.warn("OC.addScript is deprecated, use OCP.Loader.loadScript instead");var o=(0,d.generateFilePath)(e,"js",t+".js");return f[o]?n&&n():(i=c().Deferred(),c().getScript(o,(function(){return i.resolve()})),f[o]=i),f[o]},addStyle:function(e,t){console.warn("OC.addStyle is deprecated, use OCP.Loader.loadStylesheet instead");var n=(0,d.generateFilePath)(e,"css",t+".css");-1===p.indexOf(n)&&(p.push(n),document.createStyleSheet?document.createStyleSheet(n):(t=c()('<link rel="stylesheet" type="text/css" href="'+n+'"/>'),c()("head").append(t)))},Apps:w,AppConfig:B,appConfig:P,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 i=c()("#appsettings");if(0===i.length)throw{name:"MissingDOMElement",message:'There has be be an element with id "appsettings" for the popup to show.'};var o=c()("#appsettings_popup");if(0===o.length&&(c()("body").prepend('<div class="popup hidden" id="appsettings_popup"></div>'),(o=c()("#appsettings_popup")).addClass(i.hasClass("topright")?"topright":"bottomleft")),o.is(":visible"))o.hide().remove();else{var a=i.hasClass("topright")?"up":"left";c().get((0,d.generateFilePath)(n.appid,"",n.scriptName),(function(e){o.html(e).ready((function(){if(o.prepend('<span class="arrow '+a+'"></span><h2>'+t("core","Settings")+'</h2><a class="close"></a>').show(),o.find(".close").bind("click",(function(){o.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(e,t,n){throw n}))}})).show()}),"html")}},appswebroots:O,Backbone:L,ContactsMenu:W,config:R,currentUser:Z,dialogs:re,EventSource:de,getCurrentUser:function(){return{uid:Z,displayName:V}},isUserAdmin:function(){return ge},L10N:Oe,_ajaxConnectionLostHandler:m,_processAjaxError:function(e){(0!==e.status||"abort"!==e.statusText&&"timeout"!==e.statusText&&!Ge._reloadCalled)&&(h.default.contains([302,303,307,401],e.status)&&Ge.currentUser?setTimeout((function(){if(!Ge._userIsNavigatingAway&&!Ge._reloadCalled){var e=0,t=setInterval((function(){A.showUpdate(n("core","Problem loading page, reloading in %n second","Problem loading page, reloading in %n seconds",5-e)),e>=5&&(clearInterval(t),Ge.reload()),e++}),1e3);Ge._reloadCalled=!0}}),100):0===e.status&&setTimeout((function(){Ge._userIsNavigatingAway||Ge._reloadCalled||Ge._ajaxConnectionLostHandler()}),100))},registerXHRForErrorProcessing:function(e){e.addEventListener&&(e.addEventListener("load",(function(){4===e.readyState&&(e.status>=200&&e.status<300||304===e.status||c()(document).trigger(new(c().Event)("ajaxError"),e))})),e.addEventListener("error",(function(){c()(document).trigger(new(c().Event)("ajaxError"),e)})))},getCapabilities:function(){return console.warn("OC.getCapabilities is deprecated and will be removed in Nextcloud 21. See @nextcloud/capabilities"),(0,fe.getCapabilities)()},hideMenus:he,registerMenu:function(e,t,n,i){t.addClass("menu");var o="A"===e.prop("tagName")||"BUTTON"===e.prop("tagName");e.on(o?"click.menu":"click.menu keyup.menu",(function(o){o.preventDefault(),o.key&&"Enter"!==o.key||(t.is(pe)?he():(pe&&he(),!0===i&&t.parent().addClass("openedMenu"),e.attr("aria-expanded",!0),t.slideToggle(50,n),pe=t))}))},showMenu:function(e,t,n){t.is(pe)||(he(),pe=t,t.trigger(new(c().Event)("beforeShow")),t.show(),t.trigger(new(c().Event)("afterShow")),h.default.isFunction(n)&&n())},unregisterMenu:function(e,t){t.is(pe)&&he(),e.off("click.menu").removeClass("menutoggle"),t.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:Te.getCanonicalLocale,getLocale:function(){var e;return null!==(e=c()("html").data("locale"))&&void 0!==e?e:"en"},getLanguage:function(){return c()("html").prop("lang")},addTranslations:Oe.load,buildQueryString:function(e){return e?c().map(e,(function(e,t){var n=encodeURIComponent(t);return null!=e&&(n+="="+encodeURIComponent(e)),n})).join("&"):""},parseQueryString:function(e){var t,n,i,o={};if(!e)return null;(t=e.indexOf("?"))>=0&&(e=e.substr(t+1));for(var a=e.replace(/\+/g,"%20").split("&"),r=0;r<a.length;r++){var s=a[r];(n=(t=s.indexOf("="))>=0?[s.substr(0,t),s.substr(t+1)]:[s]).length&&(i=decodeURIComponent(n[0]))&&(o[i]=n.length>1?decodeURIComponent(n[1]):null)}return o},msg:je,Notification:A,PasswordConfirmation:ze,Plugins:{_plugins:{},register:function(e,t){var n=this._plugins[e];n||(n=this._plugins[e]=[]),n.push(t)},getPlugins:function(e){return this._plugins[e]||[]},attach:function(e,t,n){for(var i=this.getPlugins(e),o=0;o<i.length;o++)i[o].attach&&i[o].attach(t,n)},detach:function(e,t,n){for(var i=this.getPlugins(e),o=0;o<i.length;o++)i[o].detach&&i[o].detach(t,n)}},theme:_e,Util:Me,debug:Ue,filePath:d.generateFilePath,generateUrl:d.generateUrl,get:(Re=window,function(e){for(var t=e.split("."),n=t.pop(),i=0;i<t.length;i++)if(!(Re=Re[t[i]]))return!1;return Re[n]}),set:function(e){return function(t,n){for(var i=t.split("."),o=i.pop(),a=0;a<i.length;a++)e[i[a]]||(e[i[a]]={}),e=e[i[a]];return e[o]=n,n}}(window),getRootPath:d.getRootUrl,imagePath:d.imagePath,redirect:function(e){window.location=e},reload:function(){window.location.reload()},requestToken:le(),linkTo:d.linkTo,linkToOCS:function(e,t){return(0,d.generateOcsUrl)(e,{},{ocsVersion:t||1})+"/"},linkToRemote:d.generateRemoteUrl,linkToRemoteBase:function(e){return(0,d.getRootUrl)()+"/remote.php/"+e},webroot:Qe};(0,u.subscribe)("csrf-token-update",(function(e){OC.requestToken=e.token,console.info("OC.requestToken changed",e.token)}));var He=o(18037),Ke=o(16453),Ye=o(22200);function qe(e,t,n,i,o,a,r){try{var s=e[a](r),l=s.value}catch(e){return void n(e)}s.done?t(l):Promise.resolve(l).then(i,o)}function We(e){return function(){var t=this,n=arguments;return new Promise((function(i,o){var a=e.apply(t,n);function r(e){qe(a,i,o,r,s,"next",e)}function s(e){qe(a,i,o,r,s,"throw",e)}r(void 0)}))}}var Je=null,Ve=function(){var e=We(regeneratorRuntime.mark((function e(){var t,n;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=(0,d.generateUrl)("/csrftoken"),e.next=3,c().get(t);case 3:return n=e.sent,e.abrupt("return",n.token);case 5:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),Ze=function(){var e=We(regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Ve();case 3:t=e.sent,ce(t),e.next=10;break;case 7:e.prev=7,e.t0=e.catch(0),console.error("session heartbeat failed",e.t0);case 10:case"end":return e.stop()}}),e,null,[[0,7]])})));return function(){return e.apply(this,arguments)}}(),Xe=function(){var e=setInterval(Ze,1e3*function(){var e=NaN;return Je.session_lifetime&&(e=Math.floor(Je.session_lifetime/2)),Math.min(86400,Math.max(60,isNaN(e)?900:e))}());return console.info("session heartbeat polling started"),e},$e=function(){var e=c()("#appmenu li"),t=c()(".header-right").outerWidth(),n=c()("header").outerWidth()-c()("#nextcloud").outerWidth()-(t>210?t:210),i=c()(window).width()<1024;i||(n*=.67);var o,a=Math.floor(n/c()(e).width());i&&a>12&&(a=12),!i&&a<12&&(a=12),e.length-1-a>=1&&a--,c()("#more-apps a").removeClass("active");for(var r=0;r<e.length-1;r++){var s=c()(e[r]).data("id");r<a?(c()(e[r]).removeClass("hidden"),c()("#apps li[data-id="+s+"]").addClass("in-header"),o=e[r]):(c()(e[r]).addClass("hidden"),c()("#apps li[data-id="+s+"]").removeClass("in-header"),a>0&&c()(e[r]).children("a").hasClass("active")&&(c()(o).addClass("hidden"),c()("#apps li[data-id="+c()(o).data("id")+"]").removeClass("in-header"),c()(e[r]).removeClass("hidden"),c()("#apps li[data-id="+s+"]").addClass("in-header")))}0===c()("#apps li:not(.in-header)").length?(c()("#more-apps").hide(),c()("#navigation").hide()):c()("#more-apps").show()},et={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"},tt=Ge.getLocale();Object.prototype.hasOwnProperty.call(et,tt)&&(tt=et[tt]),De().locale(tt);var nt,it=function(){var e,t;if(window.navigator.userAgent.indexOf("Edge/")>0&&(c()("html").addClass("edge"),console.info("Legacy browser detected, applying css vars polyfill"),(0,He.Z)({watch:!0,onlyLegacy:!(/Edge\/([0-9]{2})\./i.test(navigator.userAgent)&&parseInt(/Edge\/([0-9]{2})\./i.exec(navigator.userAgent)[1])<16)})),c()(window).on("unload.main",(function(){Ge._unloadCalled=!0})),c()(window).on("beforeunload.main",(function(){setTimeout((function(){Ge._userIsNavigatingAway=!0,setTimeout((function(){Ge._unloadCalled||(Ge._userIsNavigatingAway=!1)}),1e4)}),1)})),c()(document).on("ajaxError.main",(function(e,t,n){n&&n.allowAuthErrors||Ge._processAjaxError(t)})),function(){if(function(){try{Je=(0,Ke.loadState)("core","config")}catch(e){Je=Ge.config}}(),function(){if(Je.auto_logout&&(0,Ye.getCurrentUser)()){var e=Date.now();window.addEventListener("mousemove",(function(t){e=Date.now(),localStorage.setItem("lastActive",e)})),window.addEventListener("touchstart",(function(t){e=Date.now(),localStorage.setItem("lastActive",e)})),window.addEventListener("storage",(function(t){"lastActive"===t.key&&(e=t.newValue)})),setInterval((function(){var t=Date.now()-1e3*Je.session_lifetime;if(e<t){console.info("Inactivity timout reached, logging out");var n=(0,d.generateUrl)("/logout")+"?requesttoken="+encodeURIComponent(le());window.location=n}}),1e3)}}(),void 0===Je.session_keepalive||Je.session_keepalive){var e=Xe();window.addEventListener("online",We(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return console.info("browser is online again, resuming heartbeat"),e=Xe(),t.prev=2,t.next=5,Ze();case 5:console.info("session token successfully updated after resuming network"),(0,u.emit)("networkOnline",{success:!0}),t.next=13;break;case 9:t.prev=9,t.t0=t.catch(2),console.error("could not update session token after resuming network",t.t0),(0,u.emit)("networkOnline",{success:!1});case 13:case"end":return t.stop()}}),t,null,[[2,9]])})))),window.addEventListener("offline",(function(){console.info("browser is offline, stopping heartbeat"),(0,u.emit)("networkOffline",{}),clearInterval(e),console.info("session heartbeat polling stopped")}))}else console.info("session heartbeat disabled")}(),Ge.registerMenu(c()("#expand"),c()("#expanddiv"),!1,!0),c()(document).on("mouseup.closemenus",(function(e){var t=c()(e.target);if(t.closest(".menu").length||t.closest(".menutoggle").length)return!1;Ge.hideMenus()})),function(){Object.assign(Ge,{setNavigationCounter:function(e,t){var n=document.getElementById("appmenu").querySelector('[data-id="'+e+'"] svg'),i=document.getElementById("apps").querySelector('[data-id="'+e+'"] svg');0===t?(n.classList.remove("has-unread"),i.classList.remove("has-unread"),n.getElementsByTagName("image")[0].style.mask="",i.getElementsByTagName("image")[0].style.mask=""):(n.classList.add("has-unread"),i.classList.add("has-unread"),n.getElementsByTagName("image")[0].style.mask="url(#hole)",i.getElementsByTagName("image")[0].style.mask="url(#hole)"),document.getElementById("appmenu").querySelector('[data-id="'+e+'"] .unread-counter').textContent=t,document.getElementById("apps").querySelector('[data-id="'+e+'"] .unread-counter').textContent=t}}),Ge.registerMenu(c()("#more-apps > a"),c()("#navigation"));var e=c()("#header .header-appname-container"),t=c()("#navigation"),n=c()("#appmenu");Ge.registerMenu(e,t),e.data("oldhref",e.attr("href")),e.attr("href","#"),t.hide(),t.delegate("a","click",(function(e){var t=c()(e.target);t.is("a")||(t=t.closest("a")),1!==e.which||e.ctrlKey||e.metaKey||"_blank"===t.attr("target")?Ge.hideMenus((function(){return!1})):(t.find("svg").remove(),t.find("div").remove(),t.prepend(c()("<div></div>").addClass("icon-loading-small")))})),t.delegate("a","mouseup",(function(e){2===e.which&&Ge.hideMenus((function(){return!1}))})),n.delegate("li:not(#more-apps) > a","click",(function(e){var t=c()(e.target);t.is("a")||(t=t.closest("a")),1!==e.which||e.ctrlKey||e.metaKey||0!==t.parent("#more-apps").length||"_blank"===t.attr("target")?Ge.hideMenus((function(){return!1})):(t.find("svg").remove(),t.find("div").remove(),t.prepend(c()("<div></div>").addClass(OCA.Theming&&OCA.Theming.inverted?"icon-loading-small":"icon-loading-small-dark")),window.location=t.attr("href"))}))}(),e=c()("#header #settings"),t=["user-status-menu-item__header"],e.delegate("a","click",(function(e){var n=c()(e.target);n.is("a")||(n=n.closest("a")),1!==e.which||e.ctrlKey||e.metaKey?Ge.hideMenus((function(){return!1})):t.includes(n.attr("class"))||(n.find("img").remove(),n.find("div").remove(),n.prepend(c()("<div></div>").addClass("icon-loading-small")))})),e.delegate("a","mouseup",(function(e){2===e.which&&Ge.hideMenus((function(){return!1}))})),new Ge.ContactsMenu({el:c()("#contactsmenu .menu"),trigger:c()("#contactsmenu .menutoggle")}),c()("#navigation").length&&(c()("#header #nextcloud + .menutoggle").on("click",(function(){c()("#menu-css-helper").remove();var e=c()(".header-appname + .icon-caret").offset().left-2;e>255||c()("head").append('<style id="menu-css-helper">#navigation:after { left: '+e+"px }</style>")})),c()("#header #appmenu .menutoggle").on("click",(function(){c()("#appmenu").toggleClass("menu-open"),c()("#appmenu").is(":visible")&&c()("#menu-css-helper").remove()}))),c()(window).resize($e),setTimeout($e,0),c()("#app-navigation").length&&!c()("html").hasClass("lte9")&&!c()("#app-content").hasClass("no-snapper")){var n=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 i=!1;n.on("animating",(function(){i=!0})),n.on("animated",(function(){i=!1})),n.on("start",(function(){i=!0})),n.on("end",(function(){i=!1}));var o=n.open,a=n.close,r=function(){i||"closed"!==n.state().state||o("left")},s=function(){i||"closed"===n.state().state||a()};window.TESTING||(n.open=function(){h.default.defer(r)},n.close=function(){h.default.defer(s)}),c()("#app-navigation-toggle").click((function(e){"left"!==n.state().state&&n.open()})),c()("#app-navigation-toggle").keypress((function(e){"left"===n.state().state?n.close():n.open()})),c()("#app-navigation").delegate("a, :button","click",(function(e){var t=c()(e.target);t.is(".app-navigation-noclose")||t.closest(".app-navigation-noclose").length||t.is(".app-navigation-entry-utils-menu-button")||t.closest(".app-navigation-entry-utils-menu-button").length||t.is(".add-new")||t.closest(".add-new").length||t.is("#app-settings")||t.closest("#app-settings").length||n.close()}));var l=!1,f=!0,p=!1;Ge.allowNavigationBarSlideGesture=function(){f=!0,p&&(n.enable(),l=!0,p=!1)},Ge.disallowNavigationBarSlideGesture=function(){f=!1,l&&(n.disable(!0),l=!1,p=!0)};var g=function(){c()(window).width()>1024?(n.close(),n.disable(),l=!1,p=!1):f?(n.enable(),l=!0,p=!1):p=!0};c()(window).resize(h.default.debounce(g,250)),g()}setInterval((function(){c()(".live-relative-timestamp").each((function(){var e=parseInt(c()(this).attr("data-timestamp"),10);c()(this).text(De()(e).fromNow())}))}),3e4),ze.init()},ot=(o(49226),o(41704),o(78312),o(22634),o(3682));o(33824),c().prototype.tooltip=(nt=c().prototype.tooltip,function(e){try{return nt.call(this,e)}catch(t){if(t instanceof TypeError&&"destroy"===e)return void 0===window.TESTING&&console.error("Deprecated call $.tooltip('destroy') has been deprecated and should be removed"),nt.call(this,"dispose");if(t instanceof TypeError&&"fixTitle"===e)return void 0===window.TESTING&&console.error("Deprecated call $.tooltip('fixTitle') has been deprecated and should be removed"),nt.call(this,"_fixTitle")}});var at=o(42152),rt=o.n(at),st=(o(317),o(77980),o(99560)),lt=o.n(st),ct=(o(18553),o(34140),o(75693),o(99205),o(38554),/(\s|^)(https?:\/\/)?((?:[-A-Z0-9+_]+\.)+[-A-Z]+(?:\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*)(\s|$)/gi);function ut(e){return this.formatLinksRich(e)}function dt(e){return this.formatLinksPlain(e)}function ft(e){return e.replace(ct,(function(e,t,n,i,o){var a=i;return n?"http://"===n&&(a=n+i):n="https://",t+'<a class="external" target="_blank" rel="noopener noreferrer" href="'+n+i+'">'+a+"</a>"+o}))}function pt(e){var t=c()("<div></div>").html(e);return t.find("a").each((function(){var e=c()(this);e.html(e.attr("href"))})),t.html()}function ht(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,i,o){!function(e,n,i,o){if(console.debug("querying Whats New data was successful: "+n),console.debug(e),200===i.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(){gt(e.ocs.data.version,o)},r.appendChild(l),a.appendChild(r),u.appendChild(a),e.ocs.data.whatsNew.regular){var f=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=h.default.escape(f),r.appendChild(s),a.appendChild(r),u.appendChild(a)}h.default.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,i,o,n)},error:e.error||At})}function gt(e,t){t=t||{},c().ajax({type:"POST",url:t.url||(0,d.generateOcsUrl)("core/whatsnew"),data:{version:encodeURIComponent(e)},success:t.success||mt,error:t.error||vt}),c()(".whatsNewPopover").remove()}function At(e,t,n){console.debug("querying Whats New Data resulted in an error: "+t+n),console.debug(e)}function mt(e){}function vt(e){console.debug("dismissing Whats New data resulted in an error: "+e)}var wt,Ct,bt,yt,kt={},xt={},Et={},Pt={loadScript:function(e,t){var n=e+t;return Object.prototype.hasOwnProperty.call(xt,n)?Promise.resolve():(xt[n]=!0,new Promise((function(n,i){var o=OC.filePath(e,"js",t),a=document.createElement("script");a.src=o,a.setAttribute("nonce",btoa(OC.requestToken)),a.onload=function(){return n()},a.onerror=function(){return i(new Error("Failed to load script from ".concat(o)))},document.head.appendChild(a)})))},loadStylesheet:function(e,t){var n=e+t;return Object.prototype.hasOwnProperty.call(Et,n)?Promise.resolve():(Et[n]=!0,new Promise((function(n,i){var o=OC.filePath(e,"css",t),a=document.createElement("link");a.href=o,a.type="text/css",a.rel="stylesheet",a.onload=function(){return n()},a.onerror=function(){return i(new Error("Failed to load stylesheet from ".concat(o)))},document.head.appendChild(a)})))}},Bt={success:function(e,t){return(0,g.s$)(e,t)},warning:function(e,t){return(0,g.K2)(e,t)},error:function(e,t){return(0,g.x2)(e,t)},info:function(e,t){return(0,g.JQ)(e,t)},message:function(e,t){return(0,g.PV)(e,t)}},Ot={AppConfig:a,Collaboration:{registerType:function(e,t){kt[e]=t},trigger:function(e){return kt[e].action()},getTypes:function(){return Object.keys(kt)},getIcon:function(e){return kt[e].typeIconClass||""},getLabel:function(e){return ke()(kt[e].typeString||e)},getLink:function(e,t){return void 0!==kt[e]?kt[e].link(t):""}},Comments:r,InitialState:{loadState:Ke.loadState},Loader:Pt,Toast:Bt,WhatsNew:s},Tt=function(){void 0===window.TESTING&&console.warn.apply(console,arguments)},jt=function(e,t,n){(Array.isArray(e)?e:[e]).forEach((function(e){void 0!==window[e]&&delete window[e],Object.defineProperty(window,e,{get:function(){return Tt(n?"".concat(e," is deprecated: ").concat(n):"".concat(e," is deprecated")),t()}})}))};window._=h.default,jt(["$","jQuery"],(function(){return c()}),"The global jQuery is deprecated. It will be removed in a later versions without another warning. Please ship your own."),jt("autosize",(function(){return ot.Z}),"please ship your own, this will be removed in Nextcloud 20"),jt("Backbone",(function(){return j()}),"please ship your own, this will be removed in Nextcloud 20"),jt(["Clipboard","ClipboardJS"],(function(){return rt()}),"please ship your own, this will be removed in Nextcloud 20"),window.dav=I.dav,jt("Handlebars",(function(){return we()}),"please ship your own, this will be removed in Nextcloud 20"),jt("md5",(function(){return lt()}),"please ship your own, this will be removed in Nextcloud 20"),jt("moment",(function(){return De()}),"please ship your own, this will be removed in Nextcloud 20"),window.OC=Ge,jt("initCore",(function(){return it}),"this is an internal function"),jt("oc_appswebroots",(function(){return Ge.appswebroots}),"use OC.appswebroots instead, this will be removed in Nextcloud 20"),jt("oc_config",(function(){return Ge.config}),"use OC.config instead, this will be removed in Nextcloud 20"),jt("oc_current_user",(function(){return Ge.getCurrentUser().uid}),"use OC.getCurrentUser().uid instead, this will be removed in Nextcloud 20"),jt("oc_debug",(function(){return Ge.debug}),"use OC.debug instead, this will be removed in Nextcloud 20"),jt("oc_defaults",(function(){return Ge.theme}),"use OC.theme instead, this will be removed in Nextcloud 20"),jt("oc_isadmin",Ge.isUserAdmin,"use OC.isUserAdmin() instead, this will be removed in Nextcloud 20"),jt("oc_requesttoken",(function(){return le()}),"use OC.requestToken instead, this will be removed in Nextcloud 20"),jt("oc_webroot",(function(){return Ge.webroot}),"use OC.getRootPath() instead, this will be removed in Nextcloud 20"),jt("OCDialogs",(function(){return Ge.dialogs}),"use OC.dialogs instead, this will be removed in Nextcloud 20"),window.OCP=Ot,window.OCA=ee,c().fn.select2=(wt=c().fn.select2,Ct="select2",19,bt=wt,yt=function(){return Tt("The ".concat(Ct," library is deprecated! It will be removed in nextcloud ").concat(19,".")),bt.apply(this,arguments)},Object.assign(yt,bt),yt),window.t=h.default.bind(Ge.L10N.translate,Ge.L10N),window.n=h.default.bind(Ge.L10N.translatePlural,Ge.L10N),c().fn.avatar=function(e,t,n,i,o,a){var r=function(e){e.imageplaceholder("?"),e.css("background-color","#b9b9b9")};if(void 0!==e&&(e=String(e)),void 0!==a&&(a=String(a)),void 0===t&&(t=this.height()>0?this.height():this.data("size")>0?this.data("size"):64),this.height(t),this.width(t),void 0===e){if(void 0===this.data("user"))return void r(this);e=this.data("user")}e=String(e).replace(/\//g,"");var s,l=this;s=e===Ge.getCurrentUser().uid?Ge.generateUrl("/avatar/{user}/{size}?v={version}",{user:e,size:Math.ceil(t*window.devicePixelRatio),version:oc_userconfig.avatar.version}):Ge.generateUrl("/avatar/{user}/{size}",{user:e,size:Math.ceil(t*window.devicePixelRatio)});var c=new Image;c.onload=function(){l.clearimageplaceholder(),l.append(c),"function"==typeof o&&o()},c.onerror=function(){l.clearimageplaceholder(),void 0!==a?l.imageplaceholder(e,a):r(l),"function"==typeof o&&o()},t<32?l.addClass("icon-loading-small"):l.addClass("icon-loading"),c.width=t,c.height=t,c.src=s,c.alt=""};var It=o(47078);c().fn.contactsMenu=function(e,n,i){if(-1!==[0,4,6].indexOf(n)){var o=this;i.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=i.find("div.contactsmenu-popover");o.click((function(){if(!a.hasClass("hidden"))return a.addClass("hidden"),void a.hide();a.removeClass("hidden"),a.show(),a.hasClass("loaded")||(a.addClass("loaded"),c().ajax(Ge.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(e){a.find("ul").append(It(e))})),o.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(It({hyperlink:"#",title:n})),o.trigger("loaderror",e)})))})),c()(document).click((function(e){var t=a.has(e.target).length>0,n=o.has(e.target).length>0;o.each((function(){c()(this).is(e.target)&&(n=!0)})),t||n||(a.addClass("hidden"),a.hide())}))}},c().fn.exists=function(){return this.length>0},c().fn.filterAttr=function(e,t){return this.filter((function(){return c()(this).attr(e)===t}))},c().widget("oc.ocdialog",{options:{width:"auto",height:"auto",closeButton:!0,closeOnEscape:!0,closeCallback:null,modal:!1},_create:function(){var e=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),this.$dialog.css({display:"inline-block",position:"fixed"}),this.enterCallback=null,c()(document).on("keydown keyup",(function(t){if(t.target===e.$dialog.get(0)||0!==e.$dialog.find(c()(t.target)).length){if(27===t.keyCode&&"keydown"===t.type&&e.options.closeOnEscape)return t.stopImmediatePropagation(),e.close(),!1;if(13===t.keyCode){if(t.stopImmediatePropagation(),null!==e.enterCallback)return e.enterCallback(),t.preventDefault(),!1;if("keyup"===t.type)return t.preventDefault(),!1;if(e.$buttonrow&&0===e.$buttonrow.find(c()(t.target)).length){var n=e.$buttonrow.find("button.primary");n&&!n.prop("disabled")&&n.trigger("click")}else e.$buttonrow&&c()(t.target).trigger("click");return!1}}})),this._setOptions(this.options),this._createOverlay()},_init:function(){this.$dialog.focus(),this._trigger("open")},_setOption:function(e,t){var n=this;switch(e){case"title":if(this.$title)this.$title.text(t);else{var i=c()('<h2 class="oc-dialog-title">'+t+"</h2>");this.$title=i.prependTo(this.$dialog)}this._setSizes();break;case"buttons":if(this.$buttonrow)this.$buttonrow.empty();else{var o=c()('<div class="oc-dialog-buttonrow"></div>');this.$buttonrow=o.appendTo(this.$dialog)}1===t.length?this.$buttonrow.addClass("onebutton"):2===t.length?this.$buttonrow.addClass("twobuttons"):3===t.length&&this.$buttonrow.addClass("threebuttons"),c().each(t,(function(e,t){var i=c()("<button>").text(t.text);t.classes&&i.addClass(t.classes),t.defaultButton&&(i.addClass("primary"),n.$defaultButton=i),n.$buttonrow.append(i),i.click((function(){t.click.apply(n.element[0],arguments)}))})),this.$buttonrow.find("button").on("focus",(function(e){n.$buttonrow.find("button").removeClass("primary"),c()(this).addClass("primary")})),this._setSizes();break;case"style":void 0!==t.buttons&&this.$buttonrow.addClass(t.buttons);break;case"closeButton":if(t){var a=c()('<a class="oc-dialog-close"></a>');this.$dialog.prepend(a),a.on("click",(function(){n.options.closeCallback&&n.options.closeCallback(),n.close()}))}else this.$dialog.find(".oc-dialog-close").remove();break;case"width":this.$dialog.css("width",t);break;case"height":this.$dialog.css("height",t);break;case"close":this.closeCB=t}c().Widget.prototype._setOption.apply(this,arguments)},_setOptions:function(e){c().Widget.prototype._setOptions.apply(this,arguments)},_setSizes:function(){var e=0;this.$title&&(e+=this.$title.outerHeight(!0)),this.$buttonrow&&(e+=this.$buttonrow.outerHeight(!0)),this.element.css({height:"calc(100% - "+e+"px)"})},_createOverlay:function(){if(this.options.modal){var e=this,t=c()("#content");0===t.length&&(t=c()(".content")),this.overlay=c()("<div>").addClass("oc-dialog-dim").appendTo(t),this.overlay.on("click keydown keyup",(function(t){t.target!==e.$dialog.get(0)&&0===e.$dialog.find(c()(t.target)).length&&(t.preventDefault(),t.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(e){this.enterCallback=e},unsetEnterCallback:function(){this.enterCallback=null},close:function(){this._destroyOverlay();var e=this;setTimeout((function(){e._trigger("close",e)}),200),e.$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 Dt={init:function(e,t,n){if(this.vars=e,this.options=c().extend({},this.options,t),this.elem=n,"function"==typeof this.options.escapeFunction)for(var i=Object.keys(this.vars),o=0;o<i.length;o++)"string"==typeof this.vars[i[o]]&&(this.vars[i[o]]=this.options.escapeFunction(this.vars[i[o]]));var a=this._build(this.vars);return c()(a)},_build:function(e){var t="text/template"===this.elem.attr("type")?this.elem.html():this.elem.get(0).outerHTML;try{return t.replace(/{([^{}]*)}/g,(function(t,n){var i=e[n];return"string"==typeof i||"number"==typeof i?i:t}))}catch(e){console.error(e,"data:",t)}},options:{escapeFunction:ke()}};c().fn.octemplate=function(e,t){if(e=e||{},this.length)return Object.create(Dt).init(e,t,this)};var zt=function(e){var t=e.toLowerCase();function n(e,t,n){this.r=e,this.g=t,this.b=n}function i(e,t,i){var o=[];o.push(t);for(var a=function(e,t){var n=new Array(3);return n[0]=(t[1].r-t[0].r)/e,n[1]=(t[1].g-t[0].g)/e,n[2]=(t[1].b-t[0].b)/e,n}(e,[t,i]),r=1;r<e;r++){var s=parseInt(t.r+a[0]*r),l=parseInt(t.g+a[1]*r),c=parseInt(t.b+a[2]*r);o.push(new n(s,l,c))}return o}null===t.match(/^([0-9a-f]{4}-?){8}$/)&&(t=lt()(t)),t=t.replace(/[^0-9a-f]/g,"");var o=new n(182,70,157),a=new n(221,203,85),r=new n(0,130,201),s=i(6,o,a),l=i(6,a,r),c=i(6,r,o);return s.concat(l).concat(c)[function(e,t){for(var n=0,i=[],o=0;o<e.length;o++)i.push(parseInt(e.charAt(o),16)%16);for(var a in i)n+=i[a];return parseInt(parseInt(n)%18)}(t)]};String.prototype.toRgb=function(){return console.warn("String.prototype.toRgb is deprecated! It will be removed in Nextcloud 22."),zt(this)},c().fn.imageplaceholder=function(e,t,n){t=t||e;var i=zt(e);this.css("background-color","rgb("+i.r+", "+i.g+", "+i.b+")");var o=this.height()||n||32;if(this.height(o),this.width(o),this.css("color","#fff"),this.css("font-weight","normal"),this.css("text-align","center"),this.css("line-height",o+"px"),this.css("font-size",.55*o+"px"),null!==e&&e.length){var a=t.replace(/\s+/g," ").trim().split(" ",2).map((function(e){return e[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(e,t,n){!1===n.crossDomain&&(t.setRequestHeader("requesttoken",le()),t.setRequestHeader("OCS-APIREQUEST","true"))})),c().fn.selectRange=function(e,t){return this.each((function(){if(this.setSelectionRange)this.focus(),this.setSelectionRange(e,t);else if(this.createTextRange){var n=this.createTextRange();n.collapse(!0),n.moveEnd("character",t),n.moveStart("character",e),n.select()}}))},c().fn.extend({showPassword:function(e){var t={fn:null,args:{}};t.fn=e;var n=function(e,t){t.val(e.val())},i=function(e,t,i){e.is(":checked")?(n(t,i),i.show(),t.hide()):(n(i,t),i.hide(),t.show())};return this.each((function(){var e=c()(this),o=c()(e.data("typetoggle")),a=function(e){var t=c()(e),n=c()("<input />");return n.attr({type:"text",class:t.attr("class"),style:t.attr("style"),size:t.attr("size"),name:t.attr("name")+"-clone",tabindex:t.attr("tabindex"),autocomplete:"off"}),void 0!==t.attr("placeholder")&&n.attr("placeholder",t.attr("placeholder")),n}(e);a.insertAfter(e),t.fn&&(t.args.input=e,t.args.checkbox=o,t.args.clone=a),o.bind("click",(function(){i(o,e,a)})),e.bind("keyup",(function(){n(e,a)})),a.bind("keyup",(function(){n(a,e),e.trigger("keyup")})),a.bind("blur",(function(){e.trigger("focusout")})),i(o,e,a),a.closest("form").submit((function(e){a.prop("type","password")})),t.fn&&t.fn(t.args)}))}}),c().ui.autocomplete.prototype._resizeMenu=function(){this.menu.element.outerWidth(this.element.outerWidth())};var _t=o(93379),Nt=o.n(_t),St=o(7795),Mt=o.n(St),Ut=o(90569),Lt=o.n(Ut),Ft=o(3565),Rt=o.n(Ft),Qt=o(19216),Gt=o.n(Qt),Ht=o(44589),Kt=o.n(Ht),Yt=o(12448),qt={};qt.styleTagTransform=Kt(),qt.setAttributes=Rt(),qt.insert=Lt().bind(null,"head"),qt.domAPI=Mt(),qt.insertStyleElement=Gt(),Nt()(Yt.Z,qt),Yt.Z&&Yt.Z.locals&&Yt.Z.locals;var Wt=o(72417),Jt={};Jt.styleTagTransform=Kt(),Jt.setAttributes=Rt(),Jt.insert=Lt().bind(null,"head"),Jt.domAPI=Mt(),Jt.insertStyleElement=Gt(),Nt()(Wt.Z,Jt),Wt.Z&&Wt.Z.locals&&Wt.Z.locals,c().ajaxSetup({contents:{script:!1}}),c().globalEval=function(){},window.addEventListener("DOMContentLoaded",(function(){var e;it(),0===(e=c()("[data-apps-slide-toggle]")).length&&c()("#app-navigation").addClass("without-app-settings"),c()(document).click((function(t){v&&(e=c()("[data-apps-slide-toggle]")),e.each((function(e,n){var i=c()(n).data("apps-slide-toggle"),o=c()(i);function a(){o.slideUp(4*OC.menuSpeed,(function(){o.trigger(new(c().Event)("hide"))})),o.removeClass("opened"),c()(n).removeClass("opened")}if(!o.is(":animated"))if(c()(n).is(c()(t.target).closest("[data-apps-slide-toggle]")))o.is(":visible")?a():function(){o.slideDown(4*OC.menuSpeed,(function(){o.trigger(new(c().Event)("show"))})),o.addClass("opened"),c()(n).addClass("opened");var e=c()(i+" [autofocus]");1===e.length&&e.focus()}();else{var r=c()(t.target).closest(i);o.is(":visible")&&r[0]!==o[0]&&a()}}))})),window.history.pushState?window.onpopstate=_.bind(Ge.Util.History._onPopState,Ge.Util.History):c()(window).on("hashchange",_.bind(Ge.Util.History._onPopState,Ge.Util.History))}))},12448:function(e,t,n){"use strict";var i=n(87537),o=n.n(i),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),f=new URL(n(12081),n.b),p=new URL(n(47868),n.b),h=r()(o()),g=l()(c),A=l()(u),m=l()(d),v=l()(f),w=l()(p);h.push([e.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("+g+")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("+g+")}.ui-state-active .ui-icon{background-image:url("+g+")}.ui-state-highlight .ui-icon{background-image:url("+A+")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("+m+")}.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("+w+") 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-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,CAKD,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\n/* DRAGGABLE */\n.ui-draggable-handle,\n.ui-selectable {\n\ttouch-action: pan-y;\n}\n"],sourceRoot:""}]),t.Z=h},72417:function(e,t,n){"use strict";var i=n(87537),o=n.n(i),a=n(23645),r=n.n(a)()(o());r.push([e.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-000) no-repeat center;opacity:.5}.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,iDAAA,CACA,UAAA,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-000) no-repeat center;\n\topacity: .5;\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:""}]),t.Z=r},10944:function(e,t,n){var i=n(40202);e.exports=(i.default||i).template({1:function(e,t,n,i,o){var a,r=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return null!=(a=r(n,"if").call(null!=t?t:e.nullContext||{},null!=(a=null!=t?r(t,"contact"):t)?r(a,"profileUrl"):a,{name:"if",hash:{},fn:e.program(2,o,0),inverse:e.program(5,o,0),data:o,loc:{start:{line:2,column:1},end:{line:10,column:8}}}))?a:""},2:function(e,t,n,i,o){var a,r=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return null!=(a=r(n,"if").call(null!=t?t:e.nullContext||{},null!=(a=null!=t?r(t,"contact"):t)?r(a,"profileTitle"):a,{name:"if",hash:{},fn:e.program(3,o,0),inverse:e.noop,data:o,loc:{start:{line:3,column:2},end:{line:7,column:9}}}))?a:""},3:function(e,t,n,i,o){var a,r=e.lambda,s=e.escapeExpression,l=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'\t\t\t<a class="profile-link--avatar" href="'+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"profileUrl"):a,t))+'">\n\t\t\t\t<img src="'+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"avatar"):a,t))+'&size=32" class="avatar" srcset="'+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"avatar"):a,t))+"&size=32 1x, "+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"avatar"):a,t))+"&size=64 2x, "+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"avatar"):a,t))+'&size=128 4x" alt="">\n\t\t\t</a>\n'},5:function(e,t,n,i,o){var a,r=e.lambda,s=e.escapeExpression,l=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'\t\t<img src="'+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"avatar"):a,t))+'&size=32" class="avatar" srcset="'+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"avatar"):a,t))+"&size=32 1x, "+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"avatar"):a,t))+"&size=64 2x, "+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"avatar"):a,t))+'&size=128 4x" alt="">\n'},7:function(e,t,n,i,o){var a,r=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return null!=(a=r(n,"if").call(null!=t?t:e.nullContext||{},null!=(a=null!=t?r(t,"contact"):t)?r(a,"profileUrl"):a,{name:"if",hash:{},fn:e.program(8,o,0),inverse:e.program(11,o,0),data:o,loc:{start:{line:12,column:1},end:{line:20,column:8}}}))?a:""},8:function(e,t,n,i,o){var a,r=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return null!=(a=r(n,"if").call(null!=t?t:e.nullContext||{},null!=(a=null!=t?r(t,"contact"):t)?r(a,"profileTitle"):a,{name:"if",hash:{},fn:e.program(9,o,0),inverse:e.noop,data:o,loc:{start:{line:13,column:2},end:{line:17,column:9}}}))?a:""},9:function(e,t,n,i,o){var a,r=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'\t\t\t<a class="profile-link--avatar" href="'+e.escapeExpression(e.lambda(null!=(a=null!=t?r(t,"contact"):t)?r(a,"profileUrl"):a,t))+'">\n\t\t\t\t<div class="avatar"></div>\n\t\t\t</a>\n'},11:function(e,t,n,i,o){return'\t\t<div class="avatar"></div>\n'},13:function(e,t,n,i,o){var a,r=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return null!=(a=r(n,"if").call(null!=t?t:e.nullContext||{},null!=(a=null!=t?r(t,"contact"):t)?r(a,"profileTitle"):a,{name:"if",hash:{},fn:e.program(14,o,0),inverse:e.noop,data:o,loc:{start:{line:23,column:1},end:{line:29,column:8}}}))?a:""},14:function(e,t,n,i,o){var a,r=e.lambda,s=e.escapeExpression,l=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'\t\t<a class="body profile-link--full-name" href="'+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"profileUrl"):a,t))+'">\n\t\t\t<div class="full-name">'+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"fullName"):a,t))+'</div>\n\t\t\t<div class="last-message">'+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"lastMessage"):a,t))+'</div>\n\t\t\t<div class="email-address">'+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"emailAddresses"):a,t))+"</div>\n\t\t</a>\n"},16:function(e,t,n,i,o){var a,r=e.lambda,s=e.escapeExpression,l=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'\t<div class="body">\n\t\t<div class="full-name">'+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"fullName"):a,t))+'</div>\n\t\t<div class="last-message">'+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"lastMessage"):a,t))+'</div>\n\t\t<div class="email-address">'+s(r(null!=(a=null!=t?l(t,"contact"):t)?l(a,"emailAddresses"):a,t))+"</div>\n\t</div>\n"},18:function(e,t,n,i,o){var a,r=e.lambda,s=e.escapeExpression,l=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<a class="top-action" href="'+s(r(null!=(a=null!=(a=null!=t?l(t,"contact"):t)?l(a,"topAction"):a)?l(a,"hyperlink"):a,t))+'" title="'+s(r(null!=(a=null!=(a=null!=t?l(t,"contact"):t)?l(a,"topAction"):a)?l(a,"title"):a,t))+'">\n\t<img src="'+s(r(null!=(a=null!=(a=null!=t?l(t,"contact"):t)?l(a,"topAction"):a)?l(a,"icon"):a,t))+'" alt="'+s(r(null!=(a=null!=(a=null!=t?l(t,"contact"):t)?l(a,"topAction"):a)?l(a,"title"):a,t))+'">\n</a>\n'},20:function(e,t,n,i,o){var a,r=e.lambda,s=e.escapeExpression,l=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<a class="second-action" href="'+s(r(null!=(a=null!=(a=null!=t?l(t,"contact"):t)?l(a,"secondAction"):a)?l(a,"hyperlink"):a,t))+'" title="'+s(r(null!=(a=null!=(a=null!=t?l(t,"contact"):t)?l(a,"secondAction"):a)?l(a,"title"):a,t))+'">\n\t<img src="'+s(r(null!=(a=null!=(a=null!=t?l(t,"contact"):t)?l(a,"secondAction"):a)?l(a,"icon"):a,t))+'" alt="'+s(r(null!=(a=null!=(a=null!=t?l(t,"contact"):t)?l(a,"secondAction"):a)?l(a,"title"):a,t))+'">\n</a>\n'},22:function(e,t,n,i,o){var a,r=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'\t<span class="other-actions icon-more"></span>\n\t<div class="menu popovermenu">\n\t\t<ul>\n'+(null!=(a=r(n,"each").call(null!=t?t:e.nullContext||{},null!=(a=null!=t?r(t,"contact"):t)?r(a,"actions"):a,{name:"each",hash:{},fn:e.program(23,o,0),inverse:e.noop,data:o,loc:{start:{line:51,column:3},end:{line:58,column:12}}}))?a:"")+"\t\t</ul>\n\t</div>\n"},23:function(e,t,n,i,o){var a,r=null!=t?t:e.nullContext||{},s=e.hooks.helperMissing,l="function",c=e.escapeExpression,u=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'\t\t\t<li>\n\t\t\t\t<a href="'+c(typeof(a=null!=(a=u(n,"hyperlink")||(null!=t?u(t,"hyperlink"):t))?a:s)===l?a.call(r,{name:"hyperlink",hash:{},data:o,loc:{start:{line:53,column:13},end:{line:53,column:26}}}):a)+'">\n\t\t\t\t\t<img src="'+c(typeof(a=null!=(a=u(n,"icon")||(null!=t?u(t,"icon"):t))?a:s)===l?a.call(r,{name:"icon",hash:{},data:o,loc:{start:{line:54,column:15},end:{line:54,column:23}}}):a)+'" alt="">\n\t\t\t\t\t<span>'+c(typeof(a=null!=(a=u(n,"title")||(null!=t?u(t,"title"):t))?a:s)===l?a.call(r,{name:"title",hash:{},data:o,loc:{start:{line:55,column:11},end:{line:55,column:20}}}):a)+"</span>\n\t\t\t\t</a>\n\t\t\t</li>\n"},compiler:[8,">= 4.3.0"],main:function(e,t,n,i,o){var a,r=null!=t?t:e.nullContext||{},s=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return(null!=(a=s(n,"if").call(r,null!=(a=null!=t?s(t,"contact"):t)?s(a,"avatar"):a,{name:"if",hash:{},fn:e.program(1,o,0),inverse:e.program(7,o,0),data:o,loc:{start:{line:1,column:0},end:{line:21,column:7}}}))?a:"")+(null!=(a=s(n,"if").call(r,null!=(a=null!=t?s(t,"contact"):t)?s(a,"profileUrl"):a,{name:"if",hash:{},fn:e.program(13,o,0),inverse:e.program(16,o,0),data:o,loc:{start:{line:22,column:0},end:{line:36,column:7}}}))?a:"")+(null!=(a=s(n,"if").call(r,null!=(a=null!=t?s(t,"contact"):t)?s(a,"topAction"):a,{name:"if",hash:{},fn:e.program(18,o,0),inverse:e.noop,data:o,loc:{start:{line:37,column:0},end:{line:41,column:7}}}))?a:"")+(null!=(a=s(n,"if").call(r,null!=(a=null!=t?s(t,"contact"):t)?s(a,"hasTwoActions"):a,{name:"if",hash:{},fn:e.program(20,o,0),inverse:e.noop,data:o,loc:{start:{line:42,column:0},end:{line:46,column:7}}}))?a:"")+(null!=(a=s(n,"if").call(r,null!=(a=null!=t?s(t,"contact"):t)?s(a,"hasManyActions"):a,{name:"if",hash:{},fn:e.program(22,o,0),inverse:e.noop,data:o,loc:{start:{line:47,column:0},end:{line:61,column:7}}}))?a:"")},useData:!0})},20421:function(e,t,n){var i=n(40202);e.exports=(i.default||i).template({compiler:[8,">= 4.3.0"],main:function(e,t,n,i,o){var a,r=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<div class="emptycontent">\n\t<div class="icon-search"></div>\n\t<h2>'+e.escapeExpression("function"==typeof(a=null!=(a=r(n,"couldNotLoadText")||(null!=t?r(t,"couldNotLoadText"):t))?a:e.hooks.helperMissing)?a.call(null!=t?t:e.nullContext||{},{name:"couldNotLoadText",hash:{},data:o,loc:{start:{line:3,column:5},end:{line:3,column:25}}}):a)+"</h2>\n</div>\n"},useData:!0})},34083:function(e,t,n){var i=n(40202);e.exports=(i.default||i).template({1:function(e,t,n,i,o){var a,r=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<div class="emptycontent">\n\t<div class="icon-search"></div>\n\t<h2>'+e.escapeExpression("function"==typeof(a=null!=(a=r(n,"noContactsFoundText")||(null!=t?r(t,"noContactsFoundText"):t))?a:e.hooks.helperMissing)?a.call(null!=t?t:e.nullContext||{},{name:"noContactsFoundText",hash:{},data:o,loc:{start:{line:4,column:5},end:{line:4,column:28}}}):a)+"</h2>\n</div>\n"},3:function(e,t,n,i,o){var a,r=null!=t?t:e.nullContext||{},s=e.hooks.helperMissing,l="function",c=e.escapeExpression,u=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<div class="footer"><a href="'+c(typeof(a=null!=(a=u(n,"contactsAppURL")||(null!=t?u(t,"contactsAppURL"):t))?a:s)===l?a.call(r,{name:"contactsAppURL",hash:{},data:o,loc:{start:{line:9,column:29},end:{line:9,column:47}}}):a)+'">'+c(typeof(a=null!=(a=u(n,"showAllContactsText")||(null!=t?u(t,"showAllContactsText"):t))?a:s)===l?a.call(r,{name:"showAllContactsText",hash:{},data:o,loc:{start:{line:9,column:49},end:{line:9,column:72}}}):a)+"</a></div>\n"},5:function(e,t,n,i,o){var a,r=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return null!=(a=r(n,"if").call(null!=t?t:e.nullContext||{},null!=t?r(t,"canInstallApp"):t,{name:"if",hash:{},fn:e.program(6,o,0),inverse:e.noop,data:o,loc:{start:{line:10,column:0},end:{line:12,column:0}}}))?a:""},6:function(e,t,n,i,o){var a,r=null!=t?t:e.nullContext||{},s=e.hooks.helperMissing,l="function",c=e.escapeExpression,u=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<div class="footer"><a href="'+c(typeof(a=null!=(a=u(n,"contactsAppMgmtURL")||(null!=t?u(t,"contactsAppMgmtURL"):t))?a:s)===l?a.call(r,{name:"contactsAppMgmtURL",hash:{},data:o,loc:{start:{line:11,column:29},end:{line:11,column:51}}}):a)+'">'+c(typeof(a=null!=(a=u(n,"contactsAppMgmtText")||(null!=t?u(t,"contactsAppMgmtText"):t))?a:s)===l?a.call(r,{name:"contactsAppMgmtText",hash:{},data:o,loc:{start:{line:11,column:53},end:{line:11,column:76}}}):a)+"</a></div>\n"},compiler:[8,">= 4.3.0"],main:function(e,t,n,i,o){var a,r=null!=t?t:e.nullContext||{},s=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return(null!=(a=s(n,"unless").call(r,null!=(a=null!=t?s(t,"contacts"):t)?s(a,"length"):a,{name:"unless",hash:{},fn:e.program(1,o,0),inverse:e.noop,data:o,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!=t?s(t,"contactsAppEnabled"):t,{name:"if",hash:{},fn:e.program(3,o,0),inverse:e.program(5,o,0),data:o,loc:{start:{line:8,column:0},end:{line:12,column:7}}}))?a:"")},useData:!0})},95386:function(e,t,n){var i=n(40202);e.exports=(i.default||i).template({compiler:[8,">= 4.3.0"],main:function(e,t,n,i,o){var a,r=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<div class="emptycontent">\n\t<div class="icon-loading"></div>\n\t<h2>'+e.escapeExpression("function"==typeof(a=null!=(a=r(n,"loadingText")||(null!=t?r(t,"loadingText"):t))?a:e.hooks.helperMissing)?a.call(null!=t?t:e.nullContext||{},{name:"loadingText",hash:{},data:o,loc:{start:{line:3,column:5},end:{line:3,column:20}}}):a)+"</h2>\n</div>\n"},useData:!0})},66115:function(e,t,n){var i=n(40202);e.exports=(i.default||i).template({compiler:[8,">= 4.3.0"],main:function(e,t,n,i,o){var a,r=null!=t?t:e.nullContext||{},s=e.hooks.helperMissing,l="function",c=e.escapeExpression,u=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<label class="hidden-visually" for="contactsmenu-search">'+c(typeof(a=null!=(a=u(n,"searchContactsText")||(null!=t?u(t,"searchContactsText"):t))?a:s)===l?a.call(r,{name:"searchContactsText",hash:{},data:o,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!=t?u(t,"searchContactsText"):t))?a:s)===l?a.call(r,{name:"searchContactsText",hash:{},data:o,loc:{start:{line:2,column:59},end:{line:2,column:81}}}):a)+'" value="'+c(typeof(a=null!=(a=u(n,"searchTerm")||(null!=t?u(t,"searchTerm"):t))?a:s)===l?a.call(r,{name:"searchTerm",hash:{},data:o,loc:{start:{line:2,column:90},end:{line:2,column:104}}}):a)+'">\n<div class="content">\n</div>\n'},useData:!0})},47078:function(e,t,n){var i=n(40202);e.exports=(i.default||i).template({1:function(e,t,n,i,o){var a,r=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<img src="'+e.escapeExpression("function"==typeof(a=null!=(a=r(n,"icon")||(null!=t?r(t,"icon"):t))?a:e.hooks.helperMissing)?a.call(null!=t?t:e.nullContext||{},{name:"icon",hash:{},data:o,loc:{start:{line:3,column:24},end:{line:3,column:32}}}):a)+'">'},compiler:[8,">= 4.3.0"],main:function(e,t,n,i,o){var a,r,s=null!=t?t:e.nullContext||{},l=e.hooks.helperMissing,c="function",u=e.escapeExpression,d=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<li>\n\t<a href="'+u(typeof(r=null!=(r=d(n,"hyperlink")||(null!=t?d(t,"hyperlink"):t))?r:l)===c?r.call(s,{name:"hyperlink",hash:{},data:o,loc:{start:{line:2,column:10},end:{line:2,column:23}}}):r)+'">\n\t\t'+(null!=(a=d(n,"if").call(s,null!=t?d(t,"icon"):t,{name:"if",hash:{},fn:e.program(1,o,0),inverse:e.noop,data:o,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!=t?d(t,"title"):t))?r:l)===c?r.call(s,{name:"title",hash:{},data:o,loc:{start:{line:4,column:8},end:{line:4,column:17}}}):r)+"</span>\n\t</a>\n</li>\n"},useData:!0})},46700:function(e,t,n){var i={"./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 o(e){var t=a(e);return n(t)}function a(e){if(!n.o(i,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return i[e]}o.keys=function(){return Object.keys(i)},o.resolve=a,e.exports=o,o.id=46700},12081:function(e){"use strict";e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoAQMAAAC2MCouAAAABlBMVEVmZmZ1dXVT6N0BAAAAUklEQVQIW8XNsQ3AIAwF0bMoKBmBURgNj8YojEBJEcXwu2yQ+p507BTeWDnozPISjPpY4O0W6CqEisUtiG/EF+IT8YG4fznihnhCPCNeEK/89D1Gd22TNOyXVAAAAABJRU5ErkJggg=="},47868:function(e){"use strict";e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAABkAQMAAADOquA5AAAAA1BMVEUAAACnej3aAAAADklEQVQYGWMYBaOABgAAAlgAARbiVEcAAAAASUVORK5CYII="},58188:function(e){"use strict";e.exports="data:image/png;base64,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"},33178:function(e){"use strict";e.exports="data:image/png;base64,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"},40337:function(e){"use strict";e.exports="data:image/png;base64,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"},98811:function(e){"use strict";e.exports="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"},27373:function(e){"use strict";e.exports="data:image/gif;base64,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"}},o={};function a(e){var t=o[e];if(void 0!==t)return t.exports;var n=o[e]={id:e,loaded:!1,exports:{}};return i[e].call(n.exports,n,n.exports,a),n.loaded=!0,n.exports}a.m=i,a.amdD=function(){throw new Error("define cannot be used indirect")},a.amdO={},e=[],a.O=function(t,n,i,o){if(!n){var r=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||r>=o)&&Object.keys(a.O).every((function(e){return a.O[e](n[l])}))?n.splice(l--,1):(s=!1,o<r&&(r=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]},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,{a:t}),t},a.d=function(e,t){for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e},a.j=2943,function(){a.b=document.baseURI||self.location.href;var e={2943:0};a.O.j=function(t){return 0===e[t]};var t=function(t,n){var i,o,r=n[0],s=n[1],l=n[2],c=0;if(r.some((function(t){return 0!==e[t]}))){for(i in s)a.o(s,i)&&(a.m[i]=s[i]);if(l)var u=l(a)}for(t&&t(n);c<r.length;c++)o=r[c],a.o(e,o)&&e[o]&&e[o][0](),e[o]=0;return a.O(u)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))}();var r=a.O(void 0,[7874],(function(){return a(13084)}));r=a.O(r)}();
+//# sourceMappingURL=core-main.js.map?v=79e166e7d90098998856 \ No newline at end of file
diff --git a/dist/core-main.js.map b/dist/core-main.js.map
index 49762df17de..6d7ab41a9c5 100644
--- a/dist/core-main.js.map
+++ b/dist/core-main.js.map
@@ -1 +1 @@
-{"version":3,"file":"core-main.js?v=42615d5531f9a235dff3","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/core/src/Polyfill/closest.js","webpack:///nextcloud/core/src/Polyfill/console.js","webpack:///nextcloud/core/src/Polyfill/windows-phone.js","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/index.js","webpack:///nextcloud/core/src/OCA/search.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/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/collaboration.js","webpack:///nextcloud/core/src/globals.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/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/amd define","webpack:///nextcloud/webpack/runtime/amd options","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/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) 2016 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\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill\n\nif (!Element.prototype.matches) {\n\tElement.prototype.matches\n\t\t= Element.prototype.msMatchesSelector\n\t\t|| Element.prototype.webkitMatchesSelector\n}\n\nif (!Element.prototype.closest) {\n\tElement.prototype.closest = function(s) {\n\t\tlet el = this\n\n\t\tdo {\n\t\t\tif (el.matches(s)) return el\n\t\t\tel = el.parentElement || el.parentNode\n\t\t} while (el !== null && el.nodeType === 1)\n\t\treturn null\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\n/* eslint-disable no-console */\nif (typeof console === 'undefined' || typeof console.log === 'undefined') {\n\tif (!window.console) {\n\t\twindow.console = {}\n\t}\n\tconst noOp = () => {}\n\tconst methods = ['log', 'debug', 'warn', 'info', 'error', 'assert', 'time', 'timeEnd']\n\tfor (let i = 0; i < methods.length; i++) {\n\t\tconsole[methods[i]] = noOp\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\n// fix device width on windows phone\nif ('-ms-user-select' in document.documentElement.style && navigator.userAgent.match(/IEMobile\\/10\\.0/)) {\n\tconst msViewportStyle = document.createElement('style')\n\tmsViewportStyle.appendChild(\n\t\tdocument.createTextNode('@-ms-viewport{width:auto!important}')\n\t)\n\tdocument.getElementsByTagName('head')[0].appendChild(msViewportStyle)\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\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 {jQuery} options.el\n * @param {jQuery} options.trigger\n * @class ContactsMenu\n * @memberOf OC\n */\nconst ContactsMenu = function(options) {\n\tthis.initialize(options)\n}\n\nContactsMenu.prototype = {\n\t/** @type {jQuery} */\n\t$el: undefined,\n\n\t/** @type {jQuery} */\n\t_$trigger: 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 {jQuery} options.el - the element to render the menu in\n\t * @param {jQuery} options.trigger - the element to click on to open the menu\n\t * @returns {undefined}\n\t */\n\tinitialize: function(options) {\n\t\tthis.$el = options.el\n\t\tthis._$trigger = options.trigger\n\n\t\tthis._view = new ContactsMenuView({\n\t\t\tel: this.$el\n\t\t})\n\t\tthis._view.on('search', function(searchTerm) {\n\t\t\tthis._loadContacts(searchTerm)\n\t\t}, this)\n\n\t\tOC.registerMenu(this._$trigger, this.$el, function() {\n\t\t\tthis._toggleVisibility(true)\n\t\t}.bind(this), true)\n\t\tthis.$el.on('beforeHide', function() {\n\t\t\tthis._toggleVisibility(false)\n\t\t}.bind(this))\n\t},\n\n\t/**\n\t * @private\n\t * @param {boolean} show\n\t * @returns {Promise}\n\t */\n\t_toggleVisibility: function(show) {\n\t\tif (show) {\n\t\t\treturn this._loadContacts()\n\t\t} else {\n\t\t\tthis.$el.html('')\n\t\t\treturn Promise.resolve()\n\t\t}\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\t_loadContacts: 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 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 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 * @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'\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 {{type: Int, 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 */\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\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\tself.$filePicker.find('#picker-view-toggle').remove()\n\t\t\tself.$filePicker.find('#picker-filestable').removeClass('view-grid')\n\n\t\t\t$('body').append(self.$filePicker)\n\n\t\t\tself.$showGridView = $('input#picker-showgridview')\n\t\t\tself.$showGridView.on('change', _.bind(self._onGridviewChange, self))\n\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\tnewButton.hide()\n\t\t\t}\n\t\t\tnewButton.on('focus', function() {\n\t\t\t\tself.$filePicker.ocdialog('setEnterCallback', function() {\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() {\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$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)\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.keypress(function(event) {\n\t\t\t\tif (event.keyCode === 13 || event.which === 13) {\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$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', 'div:not(:last-child)', self, function(event) {\n\t\t\t\t\tself._handleTreeListSelect(event, type)\n\t\t\t\t})\n\t\t\t\tself.$filelist.on('click', 'tr', function(event) {\n\t\t\t\t\tself._handlePickerClick(event, $(this), type)\n\t\t\t\t})\n\t\t\t\tself.$fileListHeader.on('click', 'a', function(event) {\n\t\t\t\t\tvar dir = self.$filePicker.data('path')\n\t\t\t\t\tself.filepicker.sortField = $(event.currentTarget).data('sort')\n\t\t\t\t\tself.filepicker.sortOrder = self.filepicker.sortOrder === 'asc' ? 'desc' : 'asc'\n\t\t\t\t\tself._fillFilePicker(dir)\n\t\t\t\t})\n\t\t\t\tself._fillFilePicker(path)\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\tvar self = this\n\t\t$.get(OC.generateUrl('/apps/files/api/v1/showgridview'), function(response) {\n\t\t\tself.$showGridView.get(0).checked = response.gridview\n\t\t\tself.$showGridView.next('#picker-view-toggle')\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\t$('.list-container').toggleClass('view-grid', response.gridview)\n\t\t})\n\t},\n\t_onGridviewChange: function() {\n\t\tvar show = this.$showGridView.is(':checked')\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'), {\n\t\t\t\tshow: show\n\t\t\t})\n\t\t}\n\t\tthis.$showGridView.next('#picker-view-toggle')\n\t\t\t.removeClass('icon-toggle-filelist icon-toggle-pictures')\n\t\t\t.addClass(show ? 'icon-toggle-filelist' : 'icon-toggle-pictures')\n\t\t$('.list-container').toggleClass('view-grid', show)\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\t_getFileList: function(dir, mimeType) { // this is only used by the spreedme app atm\n\t\tif (typeof (mimeType) === 'string') {\n\t\t\tmimeType = [mimeType]\n\t\t}\n\n\t\treturn $.getJSON(\n\t\t\tOC.filePath('files', 'ajax', 'list.php'),\n\t\t\t{\n\t\t\t\tdir: dir,\n\t\t\t\tmimetypes: JSON.stringify(mimeType)\n\t\t\t}\n\t\t)\n\t},\n\n\t/**\n\t * fills the filepicker with files\n\t */\n\t_fillFilePicker: function(dir) {\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\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\t\tself.filepicker.filesClient.getFolderContents(dir).then(function(status, files) {\n\t\t\tself.filelist = files\n\t\t\tif (filter && filter.length > 0 && filter.indexOf('*') === -1) {\n\t\t\t\tfiles = files.filter(function(file) {\n\t\t\t\t\treturn file.type === 'dir' || filter.indexOf(file.mimetype) !== -1\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// Check if the showHidden input field exist and if it exist follow it\n\t\t\t// Otherwise just show the hidden files\n\t\t\tconst showHiddenInput = document.getElementById('showHiddenFiles')\n\t\t\tconst showHidden = showHiddenInput === null || showHiddenInput.value === \"1\"\n\t\t\tif (!showHidden) {\n\t\t\t\tfiles = files.filter(function(file) {\n\t\t\t\t\treturn !file.name.startsWith('.')\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tvar Comparators = {\n\t\t\t\tname: function(fileInfo1, fileInfo2) {\n\t\t\t\t\tif (fileInfo1.type === 'dir' && fileInfo2.type !== 'dir') {\n\t\t\t\t\t\treturn -1\n\t\t\t\t\t}\n\t\t\t\t\tif (fileInfo1.type !== 'dir' && fileInfo2.type === 'dir') {\n\t\t\t\t\t\treturn 1\n\t\t\t\t\t}\n\t\t\t\t\treturn OC.Util.naturalSortCompare(fileInfo1.name, fileInfo2.name)\n\t\t\t\t},\n\t\t\t\tsize: function(fileInfo1, fileInfo2) {\n\t\t\t\t\treturn fileInfo1.size - fileInfo2.size\n\t\t\t\t},\n\t\t\t\tmtime: function(fileInfo1, fileInfo2) {\n\t\t\t\t\treturn fileInfo1.mtime - fileInfo2.mtime\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar comparator = Comparators[self.filepicker.sortField] || Comparators.name\n\t\t\tfiles = files.sort(function(file1, file2) {\n\t\t\t\tvar isFavorite = function(fileInfo) {\n\t\t\t\t\treturn fileInfo.tags && fileInfo.tags.indexOf(OC.TAG_FAVORITE) >= 0\n\t\t\t\t}\n\n\t\t\t\tif (isFavorite(file1) && !isFavorite(file2)) {\n\t\t\t\t\treturn -1\n\t\t\t\t} else if (!isFavorite(file1) && isFavorite(file2)) {\n\t\t\t\t\treturn 1\n\t\t\t\t}\n\n\t\t\t\treturn self.filepicker.sortOrder === 'asc' ? comparator(file1, file2) : -comparator(file1, file2)\n\t\t\t})\n\n\t\t\tself._fillSlug()\n\n\t\t\tif (files.length === 0) {\n\t\t\t\tself.$filePicker.find('.emptycontent').show()\n\t\t\t\tself.$fileListHeader.hide()\n\t\t\t} else {\n\t\t\t\tself.$filePicker.find('.emptycontent').hide()\n\t\t\t\tself.$fileListHeader.show()\n\t\t\t}\n\n\t\t\tself.$filelist.empty();\n\n\t\t\t$.each(files, function(idx, entry) {\n\t\t\t\tentry.icon = OC.MimeType.getIconUrl(entry.mimetype)\n\t\t\t\tvar simpleSize, sizeColor\n\t\t\t\tif (typeof (entry.size) !== 'undefined' && entry.size >= 0) {\n\t\t\t\t\tsimpleSize = OC.Util.humanFileSize(parseInt(entry.size, 10), true)\n\t\t\t\t\tsizeColor = Math.round(160 - Math.pow((entry.size / (1024 * 1024)), 2))\n\t\t\t\t} else {\n\t\t\t\t\tsimpleSize = t('files', 'Pending')\n\t\t\t\t\tsizeColor = 80\n\t\t\t\t}\n\n\t\t\t\t// split the filename in half if the size is bigger than 20 char\n\t\t\t\t// for ellipsis\n\t\t\t\tif (entry.name.length >= 10) {\n\t\t\t\t\t// leave maximum 10 letters\n\t\t\t\t\tvar split = Math.min(Math.floor(entry.name.length / 2), 10)\n\t\t\t\t\tvar filename1 = entry.name.substr(0, entry.name.length - split)\n\t\t\t\t\tvar filename2 = entry.name.substr(entry.name.length - split)\n\t\t\t\t} else {\n\t\t\t\t\tvar filename1 = entry.name\n\t\t\t\t\tvar filename2 = ''\n\t\t\t\t}\n\n\t\t\t\tvar $row = self.$listTmpl.octemplate({\n\t\t\t\t\ttype: entry.type,\n\t\t\t\t\tdir: dir,\n\t\t\t\t\tfilename: entry.name,\n\t\t\t\t\tfilename1: filename1,\n\t\t\t\t\tfilename2: filename2,\n\t\t\t\t\tdate: OC.Util.relativeModifiedDate(entry.mtime),\n\t\t\t\t\tsize: simpleSize,\n\t\t\t\t\tsizeColor: sizeColor,\n\t\t\t\t\ticon: entry.icon\n\t\t\t\t})\n\t\t\t\tif (entry.type === 'file') {\n\t\t\t\t\tvar urlSpec = {\n\t\t\t\t\t\tfile: dir + '/' + entry.name,\n\t\t\t\t\t\tx: 100,\n\t\t\t\t\t\ty: 100\n\t\t\t\t\t}\n\t\t\t\t\tvar img = new Image()\n\t\t\t\t\tvar previewUrl = OC.generateUrl('/core/preview.png?') + $.param(urlSpec)\n\t\t\t\t\timg.onload = function() {\n\t\t\t\t\t\tif (img.width > 5) {\n\t\t\t\t\t\t\t$row.find('td.filename').attr('style', 'background-image:url(' + previewUrl + ')')\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\timg.src = previewUrl\n\t\t\t\t}\n\t\t\t\tself.$filelist.append($row)\n\t\t\t})\n\n\t\t\tself.$filelistContainer.removeClass('icon-loading')\n\t\t})\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}\"><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)\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'))\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/>')\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\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","/**\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'\nimport cssVars from 'css-vars-ponyfill'\n\nimport { initSessionHeartBeat } from './session-heartbeat'\nimport OC from './OC/index'\nimport { setUp as setUpContactsMenu } from './components/ContactsMenu'\nimport { setUp as setUpMainMenu } from './components/MainMenu'\nimport { setUp as setUpUserMenu } from './components/UserMenu'\nimport PasswordConfirmation from './OC/password-confirmation'\n\n// keep in sync with core/css/variables.scss\nconst breakpointMobileWidth = 1024\n\nconst resizeMenu = () => {\n\tconst appList = $('#appmenu li')\n\tconst rightHeaderWidth = $('.header-right').outerWidth()\n\tconst headerWidth = $('header').outerWidth()\n\tconst usePercentualAppMenuLimit = 0.67\n\tconst minAppsDesktop = 12\n\tlet availableWidth = headerWidth - $('#nextcloud').outerWidth() - (rightHeaderWidth > 210 ? rightHeaderWidth : 210)\n\tconst isMobile = $(window).width() < breakpointMobileWidth\n\tif (!isMobile) {\n\t\tavailableWidth = availableWidth * usePercentualAppMenuLimit\n\t}\n\tlet appCount = Math.floor((availableWidth / $(appList).width()))\n\tif (isMobile && appCount > minAppsDesktop) {\n\t\tappCount = minAppsDesktop\n\t}\n\tif (!isMobile && appCount < minAppsDesktop) {\n\t\tappCount = minAppsDesktop\n\t}\n\n\t// show at least 2 apps in the popover\n\tif (appList.length - 1 - appCount >= 1) {\n\t\tappCount--\n\t}\n\n\t$('#more-apps a').removeClass('active')\n\tlet lastShownApp\n\tfor (let k = 0; k < appList.length - 1; k++) {\n\t\tconst name = $(appList[k]).data('id')\n\t\tif (k < appCount) {\n\t\t\t$(appList[k]).removeClass('hidden')\n\t\t\t$('#apps li[data-id=' + name + ']').addClass('in-header')\n\t\t\tlastShownApp = appList[k]\n\t\t} else {\n\t\t\t$(appList[k]).addClass('hidden')\n\t\t\t$('#apps li[data-id=' + name + ']').removeClass('in-header')\n\t\t\t// move active app to last position if it is active\n\t\t\tif (appCount > 0 && $(appList[k]).children('a').hasClass('active')) {\n\t\t\t\t$(lastShownApp).addClass('hidden')\n\t\t\t\t$('#apps li[data-id=' + $(lastShownApp).data('id') + ']').removeClass('in-header')\n\t\t\t\t$(appList[k]).removeClass('hidden')\n\t\t\t\t$('#apps li[data-id=' + name + ']').addClass('in-header')\n\t\t\t}\n\t\t}\n\t}\n\n\t// show/hide more apps icon\n\tif ($('#apps li:not(.in-header)').length === 0) {\n\t\t$('#more-apps').hide()\n\t\t$('#navigation').hide()\n\t} else {\n\t\t$('#more-apps').show()\n\t}\n}\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\tconst userAgent = window.navigator.userAgent\n\tconst edge = userAgent.indexOf('Edge/')\n\n\tif (edge > 0) {\n\t\t$('html').addClass('edge')\n\t\tconsole.info('Legacy browser detected, applying css vars polyfill')\n\t\tcssVars({\n\t\t\twatch: true,\n\t\t\t// set edge < 16 as incompatible\n\t\t\tonlyLegacy: !(/Edge\\/([0-9]{2})\\./i.test(navigator.userAgent)\n\t\t\t\t&& parseInt(/Edge\\/([0-9]{2})\\./i.exec(navigator.userAgent)[1]) < 16),\n\t\t})\n\t}\n\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// move triangle of apps dropdown to align with app name triangle\n\t// 2 is the additional offset between the triangles\n\tif ($('#navigation').length) {\n\t\t$('#header #nextcloud + .menutoggle').on('click', () => {\n\t\t\t$('#menu-css-helper').remove()\n\t\t\tconst caretPosition = $('.header-appname + .icon-caret').offset().left - 2\n\t\t\tif (caretPosition > 255) {\n\t\t\t\t// if the app name is longer than the menu, just put the triangle in the middle\n\n\t\t\t} else {\n\t\t\t\t$('head').append('<style id=\"menu-css-helper\">#navigation:after { left: ' + caretPosition + 'px }</style>')\n\t\t\t}\n\t\t})\n\t\t$('#header #appmenu .menutoggle').on('click', () => {\n\t\t\t$('#appmenu').toggleClass('menu-open')\n\t\t\tif ($('#appmenu').is(':visible')) {\n\t\t\t\t$('#menu-css-helper').remove()\n\t\t\t}\n\t\t})\n\t}\n\n\t$(window).resize(resizeMenu)\n\tsetTimeout(resizeMenu, 0)\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 *\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 OC from '../OC'\n\nimport $ from 'jquery'\n\nexport const setUp = () => {\n\tconst $menu = $('#header #settings')\n\t// Using page terminoogy as below\n\tconst $excludedPageClasses = [\n\t\t'user-status-menu-item__header',\n\t]\n\n\t// show loading feedback\n\t$menu.delegate('a', 'click', event => {\n\t\tlet $page = $(event.target)\n\t\tif (!$page.is('a')) {\n\t\t\t$page = $page.closest('a')\n\t\t}\n\t\tif (event.which === 1 && !event.ctrlKey && !event.metaKey) {\n\t\t\tif (!$excludedPageClasses.includes($page.attr('class'))) {\n\t\t\t\t$page.find('img').remove()\n\t\t\t\t$page.find('div').remove() // prevent odd double-clicks\n\t\t\t\t$page.prepend($('<div/>').addClass('icon-loading-small'))\n\t\t\t}\n\t\t} else {\n\t\t\t// Close navigation when opening menu entry in\n\t\t\t// a new tab\n\t\t\tOC.hideMenus(() => false)\n\t\t}\n\t})\n\n\t$menu.delegate('a', 'mouseup', event => {\n\t\tif (event.which === 2) {\n\t\t\t// Close navigation when opening app in\n\t\t\t// a new tab via middle click\n\t\t\tOC.hideMenus(() => false)\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 $ from 'jquery'\n\nimport OC from '../OC'\n\n/**\n * Set up the main menu toggle to react to media query changes.\n * If the screen is small enough, the main menu becomes a toggle.\n * If the screen is bigger, the main menu is not a toggle any more.\n */\nexport const setUp = () => {\n\n\tObject.assign(OC, {\n\t\tsetNavigationCounter(id, counter) {\n\t\t\tconst appmenuElement = document.getElementById('appmenu').querySelector('[data-id=\"' + id + '\"] svg')\n\t\t\tconst appsElement = document.getElementById('apps').querySelector('[data-id=\"' + id + '\"] svg')\n\t\t\tif (counter === 0) {\n\t\t\t\tappmenuElement.classList.remove('has-unread')\n\t\t\t\tappsElement.classList.remove('has-unread')\n\t\t\t\tappmenuElement.getElementsByTagName('image')[0].style.mask = ''\n\t\t\t\tappsElement.getElementsByTagName('image')[0].style.mask = ''\n\t\t\t} else {\n\t\t\t\tappmenuElement.classList.add('has-unread')\n\t\t\t\tappsElement.classList.add('has-unread')\n\t\t\t\tappmenuElement.getElementsByTagName('image')[0].style.mask = 'url(#hole)'\n\t\t\t\tappsElement.getElementsByTagName('image')[0].style.mask = 'url(#hole)'\n\t\t\t}\n\t\t\tdocument.getElementById('appmenu').querySelector('[data-id=\"' + id + '\"] .unread-counter').textContent = counter\n\t\t\tdocument.getElementById('apps').querySelector('[data-id=\"' + id + '\"] .unread-counter').textContent = counter\n\t\t},\n\t})\n\t// init the more-apps menu\n\tOC.registerMenu($('#more-apps > a'), $('#navigation'))\n\n\t// toggle the navigation\n\tconst $toggle = $('#header .header-appname-container')\n\tconst $navigation = $('#navigation')\n\tconst $appmenu = $('#appmenu')\n\n\t// init the menu\n\tOC.registerMenu($toggle, $navigation)\n\t$toggle.data('oldhref', $toggle.attr('href'))\n\t$toggle.attr('href', '#')\n\t$navigation.hide()\n\n\t// show loading feedback on more apps list\n\t$navigation.delegate('a', 'click', event => {\n\t\tlet $app = $(event.target)\n\t\tif (!$app.is('a')) {\n\t\t\t$app = $app.closest('a')\n\t\t}\n\t\tif (event.which === 1 && !event.ctrlKey && !event.metaKey && $app.attr('target') !== '_blank') {\n\t\t\t$app.find('svg').remove()\n\t\t\t$app.find('div').remove() // prevent odd double-clicks\n\t\t\t// no need for theming, loader is already inverted on dark mode\n\t\t\t// but we need it over the primary colour\n\t\t\t$app.prepend($('<div/>').addClass('icon-loading-small'))\n\t\t} else {\n\t\t\t// Close navigation when opening app in\n\t\t\t// a new tab\n\t\t\tOC.hideMenus(() => false)\n\t\t}\n\t})\n\n\t$navigation.delegate('a', 'mouseup', event => {\n\t\tif (event.which === 2) {\n\t\t\t// Close navigation when opening app in\n\t\t\t// a new tab via middle click\n\t\t\tOC.hideMenus(() => false)\n\t\t}\n\t})\n\n\t// show loading feedback on visible apps list\n\t$appmenu.delegate('li:not(#more-apps) > a', 'click', event => {\n\t\tlet $app = $(event.target)\n\t\tif (!$app.is('a')) {\n\t\t\t$app = $app.closest('a')\n\t\t}\n\n\t\tif (event.which === 1 && !event.ctrlKey && !event.metaKey && $app.parent('#more-apps').length === 0 && $app.attr('target') !== '_blank') {\n\t\t\t$app.find('svg').remove()\n\t\t\t$app.find('div').remove() // prevent odd double-clicks\n\t\t\t$app.prepend($('<div/>').addClass(\n\t\t\t\tOCA.Theming && OCA.Theming.inverted\n\t\t\t\t\t? 'icon-loading-small'\n\t\t\t\t\t: 'icon-loading-small-dark'\n\t\t\t))\n\t\t\t// trigger redirect\n\t\t\t// needed for ie, but also works for every browser\n\t\t\twindow.location = $app.attr('href')\n\t\t} else {\n\t\t\t// Close navigation when opening app in\n\t\t\t// a new tab\n\t\t\tOC.hideMenus(() => false)\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 $ from 'jquery'\nimport OC from '../OC'\n\n/**\n * @todo move to contacts menu code https://github.com/orgs/nextcloud/projects/31#card-21213129\n */\nexport const setUp = () => {\n\t// eslint-disable-next-line no-new\n\tnew OC.ContactsMenu({\n\t\tel: $('#contactsmenu .menu'),\n\t\ttrigger: $('#contactsmenu .menutoggle'),\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 */\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) 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 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 'bootstrap/js/dist/tooltip'\nimport './Polyfill/tooltip'\nimport ClipboardJS from 'clipboard'\nimport { dav } from 'davclient.js'\nimport Handlebars from 'handlebars'\nimport '@nextcloud/jcrop/js/jquery.Jcrop'\nimport '@nextcloud/jcrop/css/jquery.Jcrop.css'\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 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 Collaboration from './collaboration'\nimport Loader from './loader'\nimport Toast from './toast'\n\n/** @namespace OCP */\nexport default {\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'\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.click(function() {\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'\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\" />')\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\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\t// If no button is selected we trigger the primary\n\t\t\t\tif (\n\t\t\t\t\tself.$buttonrow\n\t\t\t\t\t&& self.$buttonrow.find($(event.target)).length === 0\n\t\t\t\t) {\n\t\t\t\t\tconst $button = self.$buttonrow.find('button.primary')\n\t\t\t\t\tif ($button && !$button.prop('disabled')) {\n\t\t\t\t\t\t$button.trigger('click')\n\t\t\t\t\t}\n\t\t\t\t} else if (self.$buttonrow) {\n\t\t\t\t\t$(event.target).trigger('click')\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\" />')\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.click(function() {\n\t\t\t\t\tval.click.apply(self.element[0], arguments)\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\"></a>')\n\t\t\t\tthis.$dialog.prepend($closeButton)\n\t\t\t\t$closeButton.on('click', function() {\n\t\t\t\t\tself.options.closeCallback && self.options.closeCallback()\n\t\t\t\t\tself.close()\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'\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'\n\nimport './globals'\nimport './jquery/index'\nimport { initCore } from './init'\nimport { registerAppsSlideToggle } from './OC/apps'\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-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,CAKD,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\\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-000) no-repeat center;opacity:.5}.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,iDAAA,CACA,UAAA,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-000) no-repeat center;\\n\\topacity: .5;\\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","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, 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(14, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":23,\"column\":1},\"end\":{\"line\":29,\"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<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},\"18\":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=\\\"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<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</a>\\n\";\n},\"20\":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},\"22\":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<span class=\\\"other-actions icon-more\\\"></span>\\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(23, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":51,\"column\":3},\"end\":{\"line\":58,\"column\":12}}})) != null ? stack1 : \"\")\n + \"\t\t</ul>\\n\t</div>\\n\";\n},\"23\":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\":53,\"column\":13},\"end\":{\"line\":53,\"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\":54,\"column\":15},\"end\":{\"line\":54,\"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\":55,\"column\":11},\"end\":{\"line\":55,\"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(16, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":22,\"column\":0},\"end\":{\"line\":36,\"column\":7}}})) != 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(18, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":37,\"column\":0},\"end\":{\"line\":41,\"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(20, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":42,\"column\":0},\"end\":{\"line\":46,\"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(22, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":47,\"column\":0},\"end\":{\"line\":61,\"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","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// 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));","// 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__(13084); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","Element","prototype","matches","msMatchesSelector","webkitMatchesSelector","closest","s","el","this","parentElement","parentNode","nodeType","console","log","window","noOp","methods","i","length","document","documentElement","style","navigator","userAgent","match","msViewportStyle","createElement","appendChild","createTextNode","getElementsByTagName","loadedScripts","loadedStyles","updatableNotification","getDefaultNotificationFunction","setDefault","callback","hide","$row","_","undefined","each","$","toastify","hideToast","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","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","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","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","_$trigger","_view","_contactsPromise","_loadContacts","_toggleVisibility","Promise","resolve","_getContacts","filter","term","catch","rawUid","getAttribute","displayName","currentUser","Search","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","filelist","allowDirectoryChooser","_getFilePickerTemplate","$filePicker","emptytext","newtext","nameCol","sizeCol","modifiedCol","remove","$showGridView","_onGridviewChange","_getGridSettings","newButton","event","stopImmediatePropagation","preventDefault","$input","submit","newName","lastPos","lastIndexOf","selectRange","$form","stopPropagation","filename","trimmedName","trim","isFileNameValid","file","escape","checkInput","newname","createDirectory","always","_fillFilePicker","keypress","keyCode","which","ready","$fileListHeader","$filelist","$filelistContainer","$dirTree","_handleTreeListSelect","_handlePickerClick","dir","currentTarget","functionToCall","returnType","datapath","index","element","selectedName","button","width","height","buttonEnableDisable","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","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","min","drawImage","toDataURL","readAsArrayBuffer","reject","getCroppedPreview","checkboxId","count","n","parent","children","_getFileExistsTemplate","allnewfiles","allexistingfiles","why","what","onCancel","onContinue","closeButton","$primaryButton","updatePrimaryButton","checkedCount","$checkbox","promise","checked","gridview","next","toggleClass","defer","$filePickerTemplate","tmpl","$listTmpl","detach","jqXHR","$messageTemplate","$fileexistsTemplate","_getFileList","mimeType","mimetypes","empty","getFolderContents","files","mimetype","showHiddenInput","getElementById","startsWith","Comparators","fileInfo1","fileInfo2","comparator","sort","file1","file2","isFavorite","fileInfo","tags","_fillSlug","idx","entry","simpleSize","sizeColor","icon","parseInt","pow","filename1","filename2","date","previewUrl","addButton","$template","paths","prepend","prependTo","getOcDialog","_changeButtonsText","$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","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","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","bytes","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","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","hasClass","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","resizeMenu","appList","rightHeaderWidth","outerWidth","availableWidth","isMobile","lastShownApp","appCount","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","$menu","$excludedPageClasses","cssVars","watch","onlyLegacy","test","exec","allowAuthErrors","loadState","loadConfig","auto_logout","lastActive","now","localStorage","setItem","newValue","logoutUrl","registerAutoLogout","session_keepalive","initSessionHeartBeat","setNavigationCounter","counter","appmenuElement","querySelector","appsElement","classList","mask","add","textContent","$navigation","$appmenu","delegate","$app","metaKey","Theming","inverted","setUpMainMenu","$page","includes","caretPosition","offset","resize","snapper","Snap","disable","maxPosition","minDragDistance","animating","oldSnapperOpen","open","oldSnapperClose","_snapperOpen","_snapperClose","$target","navigationBarSlideGestureEnabled","navigationBarSlideGestureAllowed","navigationBarSlideGestureEnablePending","enable","toggleSnapperOnSize","ex","TypeError","urlRegex","plainToRich","formatLinksRich","richToPlain","formatLinksPlain","leadingSpace","trailingSpace","linkText","$content","$this","dismissOptions","dismiss","menuItem","div","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","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","enterCallback","$buttonrow","$button","_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","fn","setState","checkbox","$clone","class","tabindex","autocomplete","cloneElement","insertAfter","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","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","container","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__","amdD","amdO","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","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"core-main.js?v=79e166e7d90098998856","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/core/src/Polyfill/closest.js","webpack:///nextcloud/core/src/Polyfill/console.js","webpack:///nextcloud/core/src/Polyfill/windows-phone.js","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/index.js","webpack:///nextcloud/core/src/OCA/search.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/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/collaboration.js","webpack:///nextcloud/core/src/globals.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/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/amd define","webpack:///nextcloud/webpack/runtime/amd options","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/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) 2016 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\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill\n\nif (!Element.prototype.matches) {\n\tElement.prototype.matches\n\t\t= Element.prototype.msMatchesSelector\n\t\t|| Element.prototype.webkitMatchesSelector\n}\n\nif (!Element.prototype.closest) {\n\tElement.prototype.closest = function(s) {\n\t\tlet el = this\n\n\t\tdo {\n\t\t\tif (el.matches(s)) return el\n\t\t\tel = el.parentElement || el.parentNode\n\t\t} while (el !== null && el.nodeType === 1)\n\t\treturn null\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\n/* eslint-disable no-console */\nif (typeof console === 'undefined' || typeof console.log === 'undefined') {\n\tif (!window.console) {\n\t\twindow.console = {}\n\t}\n\tconst noOp = () => {}\n\tconst methods = ['log', 'debug', 'warn', 'info', 'error', 'assert', 'time', 'timeEnd']\n\tfor (let i = 0; i < methods.length; i++) {\n\t\tconsole[methods[i]] = noOp\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\n// fix device width on windows phone\nif ('-ms-user-select' in document.documentElement.style && navigator.userAgent.match(/IEMobile\\/10\\.0/)) {\n\tconst msViewportStyle = document.createElement('style')\n\tmsViewportStyle.appendChild(\n\t\tdocument.createTextNode('@-ms-viewport{width:auto!important}')\n\t)\n\tdocument.getElementsByTagName('head')[0].appendChild(msViewportStyle)\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\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 {jQuery} options.el\n * @param {jQuery} options.trigger\n * @class ContactsMenu\n * @memberOf OC\n */\nconst ContactsMenu = function(options) {\n\tthis.initialize(options)\n}\n\nContactsMenu.prototype = {\n\t/** @type {jQuery} */\n\t$el: undefined,\n\n\t/** @type {jQuery} */\n\t_$trigger: 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 {jQuery} options.el - the element to render the menu in\n\t * @param {jQuery} options.trigger - the element to click on to open the menu\n\t * @returns {undefined}\n\t */\n\tinitialize: function(options) {\n\t\tthis.$el = options.el\n\t\tthis._$trigger = options.trigger\n\n\t\tthis._view = new ContactsMenuView({\n\t\t\tel: this.$el\n\t\t})\n\t\tthis._view.on('search', function(searchTerm) {\n\t\t\tthis._loadContacts(searchTerm)\n\t\t}, this)\n\n\t\tOC.registerMenu(this._$trigger, this.$el, function() {\n\t\t\tthis._toggleVisibility(true)\n\t\t}.bind(this), true)\n\t\tthis.$el.on('beforeHide', function() {\n\t\t\tthis._toggleVisibility(false)\n\t\t}.bind(this))\n\t},\n\n\t/**\n\t * @private\n\t * @param {boolean} show\n\t * @returns {Promise}\n\t */\n\t_toggleVisibility: function(show) {\n\t\tif (show) {\n\t\t\treturn this._loadContacts()\n\t\t} else {\n\t\t\tthis.$el.html('')\n\t\t\treturn Promise.resolve()\n\t\t}\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\t_loadContacts: 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 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 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 * @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'\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 {{type: Int, 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 */\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\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\tself.$filePicker.find('#picker-view-toggle').remove()\n\t\t\tself.$filePicker.find('#picker-filestable').removeClass('view-grid')\n\n\t\t\t$('body').append(self.$filePicker)\n\n\t\t\tself.$showGridView = $('input#picker-showgridview')\n\t\t\tself.$showGridView.on('change', _.bind(self._onGridviewChange, self))\n\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\tnewButton.hide()\n\t\t\t}\n\t\t\tnewButton.on('focus', function() {\n\t\t\t\tself.$filePicker.ocdialog('setEnterCallback', function() {\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() {\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$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)\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.keypress(function(event) {\n\t\t\t\tif (event.keyCode === 13 || event.which === 13) {\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$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', 'div:not(:last-child)', self, function(event) {\n\t\t\t\t\tself._handleTreeListSelect(event, type)\n\t\t\t\t})\n\t\t\t\tself.$filelist.on('click', 'tr', function(event) {\n\t\t\t\t\tself._handlePickerClick(event, $(this), type)\n\t\t\t\t})\n\t\t\t\tself.$fileListHeader.on('click', 'a', function(event) {\n\t\t\t\t\tvar dir = self.$filePicker.data('path')\n\t\t\t\t\tself.filepicker.sortField = $(event.currentTarget).data('sort')\n\t\t\t\t\tself.filepicker.sortOrder = self.filepicker.sortOrder === 'asc' ? 'desc' : 'asc'\n\t\t\t\t\tself._fillFilePicker(dir)\n\t\t\t\t})\n\t\t\t\tself._fillFilePicker(path)\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\tvar self = this\n\t\t$.get(OC.generateUrl('/apps/files/api/v1/showgridview'), function(response) {\n\t\t\tself.$showGridView.get(0).checked = response.gridview\n\t\t\tself.$showGridView.next('#picker-view-toggle')\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\t$('.list-container').toggleClass('view-grid', response.gridview)\n\t\t})\n\t},\n\t_onGridviewChange: function() {\n\t\tvar show = this.$showGridView.is(':checked')\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'), {\n\t\t\t\tshow: show\n\t\t\t})\n\t\t}\n\t\tthis.$showGridView.next('#picker-view-toggle')\n\t\t\t.removeClass('icon-toggle-filelist icon-toggle-pictures')\n\t\t\t.addClass(show ? 'icon-toggle-filelist' : 'icon-toggle-pictures')\n\t\t$('.list-container').toggleClass('view-grid', show)\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\t_getFileList: function(dir, mimeType) { // this is only used by the spreedme app atm\n\t\tif (typeof (mimeType) === 'string') {\n\t\t\tmimeType = [mimeType]\n\t\t}\n\n\t\treturn $.getJSON(\n\t\t\tOC.filePath('files', 'ajax', 'list.php'),\n\t\t\t{\n\t\t\t\tdir: dir,\n\t\t\t\tmimetypes: JSON.stringify(mimeType)\n\t\t\t}\n\t\t)\n\t},\n\n\t/**\n\t * fills the filepicker with files\n\t */\n\t_fillFilePicker: function(dir) {\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\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\t\tself.filepicker.filesClient.getFolderContents(dir).then(function(status, files) {\n\t\t\tself.filelist = files\n\t\t\tif (filter && filter.length > 0 && filter.indexOf('*') === -1) {\n\t\t\t\tfiles = files.filter(function(file) {\n\t\t\t\t\treturn file.type === 'dir' || filter.indexOf(file.mimetype) !== -1\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// Check if the showHidden input field exist and if it exist follow it\n\t\t\t// Otherwise just show the hidden files\n\t\t\tconst showHiddenInput = document.getElementById('showHiddenFiles')\n\t\t\tconst showHidden = showHiddenInput === null || showHiddenInput.value === \"1\"\n\t\t\tif (!showHidden) {\n\t\t\t\tfiles = files.filter(function(file) {\n\t\t\t\t\treturn !file.name.startsWith('.')\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tvar Comparators = {\n\t\t\t\tname: function(fileInfo1, fileInfo2) {\n\t\t\t\t\tif (fileInfo1.type === 'dir' && fileInfo2.type !== 'dir') {\n\t\t\t\t\t\treturn -1\n\t\t\t\t\t}\n\t\t\t\t\tif (fileInfo1.type !== 'dir' && fileInfo2.type === 'dir') {\n\t\t\t\t\t\treturn 1\n\t\t\t\t\t}\n\t\t\t\t\treturn OC.Util.naturalSortCompare(fileInfo1.name, fileInfo2.name)\n\t\t\t\t},\n\t\t\t\tsize: function(fileInfo1, fileInfo2) {\n\t\t\t\t\treturn fileInfo1.size - fileInfo2.size\n\t\t\t\t},\n\t\t\t\tmtime: function(fileInfo1, fileInfo2) {\n\t\t\t\t\treturn fileInfo1.mtime - fileInfo2.mtime\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar comparator = Comparators[self.filepicker.sortField] || Comparators.name\n\t\t\tfiles = files.sort(function(file1, file2) {\n\t\t\t\tvar isFavorite = function(fileInfo) {\n\t\t\t\t\treturn fileInfo.tags && fileInfo.tags.indexOf(OC.TAG_FAVORITE) >= 0\n\t\t\t\t}\n\n\t\t\t\tif (isFavorite(file1) && !isFavorite(file2)) {\n\t\t\t\t\treturn -1\n\t\t\t\t} else if (!isFavorite(file1) && isFavorite(file2)) {\n\t\t\t\t\treturn 1\n\t\t\t\t}\n\n\t\t\t\treturn self.filepicker.sortOrder === 'asc' ? comparator(file1, file2) : -comparator(file1, file2)\n\t\t\t})\n\n\t\t\tself._fillSlug()\n\n\t\t\tif (files.length === 0) {\n\t\t\t\tself.$filePicker.find('.emptycontent').show()\n\t\t\t\tself.$fileListHeader.hide()\n\t\t\t} else {\n\t\t\t\tself.$filePicker.find('.emptycontent').hide()\n\t\t\t\tself.$fileListHeader.show()\n\t\t\t}\n\n\t\t\tself.$filelist.empty();\n\n\t\t\t$.each(files, function(idx, entry) {\n\t\t\t\tentry.icon = OC.MimeType.getIconUrl(entry.mimetype)\n\t\t\t\tvar simpleSize, sizeColor\n\t\t\t\tif (typeof (entry.size) !== 'undefined' && entry.size >= 0) {\n\t\t\t\t\tsimpleSize = OC.Util.humanFileSize(parseInt(entry.size, 10), true)\n\t\t\t\t\tsizeColor = Math.round(160 - Math.pow((entry.size / (1024 * 1024)), 2))\n\t\t\t\t} else {\n\t\t\t\t\tsimpleSize = t('files', 'Pending')\n\t\t\t\t\tsizeColor = 80\n\t\t\t\t}\n\n\t\t\t\t// split the filename in half if the size is bigger than 20 char\n\t\t\t\t// for ellipsis\n\t\t\t\tif (entry.name.length >= 10) {\n\t\t\t\t\t// leave maximum 10 letters\n\t\t\t\t\tvar split = Math.min(Math.floor(entry.name.length / 2), 10)\n\t\t\t\t\tvar filename1 = entry.name.substr(0, entry.name.length - split)\n\t\t\t\t\tvar filename2 = entry.name.substr(entry.name.length - split)\n\t\t\t\t} else {\n\t\t\t\t\tvar filename1 = entry.name\n\t\t\t\t\tvar filename2 = ''\n\t\t\t\t}\n\n\t\t\t\tvar $row = self.$listTmpl.octemplate({\n\t\t\t\t\ttype: entry.type,\n\t\t\t\t\tdir: dir,\n\t\t\t\t\tfilename: entry.name,\n\t\t\t\t\tfilename1: filename1,\n\t\t\t\t\tfilename2: filename2,\n\t\t\t\t\tdate: OC.Util.relativeModifiedDate(entry.mtime),\n\t\t\t\t\tsize: simpleSize,\n\t\t\t\t\tsizeColor: sizeColor,\n\t\t\t\t\ticon: entry.icon\n\t\t\t\t})\n\t\t\t\tif (entry.type === 'file') {\n\t\t\t\t\tvar urlSpec = {\n\t\t\t\t\t\tfile: dir + '/' + entry.name,\n\t\t\t\t\t\tx: 100,\n\t\t\t\t\t\ty: 100\n\t\t\t\t\t}\n\t\t\t\t\tvar img = new Image()\n\t\t\t\t\tvar previewUrl = OC.generateUrl('/core/preview.png?') + $.param(urlSpec)\n\t\t\t\t\timg.onload = function() {\n\t\t\t\t\t\tif (img.width > 5) {\n\t\t\t\t\t\t\t$row.find('td.filename').attr('style', 'background-image:url(' + previewUrl + ')')\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\timg.src = previewUrl\n\t\t\t\t}\n\t\t\t\tself.$filelist.append($row)\n\t\t\t})\n\n\t\t\tself.$filelistContainer.removeClass('icon-loading')\n\t\t})\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}\"><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)\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'))\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\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","/**\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'\nimport cssVars from 'css-vars-ponyfill'\n\nimport { initSessionHeartBeat } from './session-heartbeat'\nimport OC from './OC/index'\nimport { setUp as setUpContactsMenu } from './components/ContactsMenu'\nimport { setUp as setUpMainMenu } from './components/MainMenu'\nimport { setUp as setUpUserMenu } from './components/UserMenu'\nimport PasswordConfirmation from './OC/password-confirmation'\n\n// keep in sync with core/css/variables.scss\nconst breakpointMobileWidth = 1024\n\nconst resizeMenu = () => {\n\tconst appList = $('#appmenu li')\n\tconst rightHeaderWidth = $('.header-right').outerWidth()\n\tconst headerWidth = $('header').outerWidth()\n\tconst usePercentualAppMenuLimit = 0.67\n\tconst minAppsDesktop = 12\n\tlet availableWidth = headerWidth - $('#nextcloud').outerWidth() - (rightHeaderWidth > 210 ? rightHeaderWidth : 210)\n\tconst isMobile = $(window).width() < breakpointMobileWidth\n\tif (!isMobile) {\n\t\tavailableWidth = availableWidth * usePercentualAppMenuLimit\n\t}\n\tlet appCount = Math.floor((availableWidth / $(appList).width()))\n\tif (isMobile && appCount > minAppsDesktop) {\n\t\tappCount = minAppsDesktop\n\t}\n\tif (!isMobile && appCount < minAppsDesktop) {\n\t\tappCount = minAppsDesktop\n\t}\n\n\t// show at least 2 apps in the popover\n\tif (appList.length - 1 - appCount >= 1) {\n\t\tappCount--\n\t}\n\n\t$('#more-apps a').removeClass('active')\n\tlet lastShownApp\n\tfor (let k = 0; k < appList.length - 1; k++) {\n\t\tconst name = $(appList[k]).data('id')\n\t\tif (k < appCount) {\n\t\t\t$(appList[k]).removeClass('hidden')\n\t\t\t$('#apps li[data-id=' + name + ']').addClass('in-header')\n\t\t\tlastShownApp = appList[k]\n\t\t} else {\n\t\t\t$(appList[k]).addClass('hidden')\n\t\t\t$('#apps li[data-id=' + name + ']').removeClass('in-header')\n\t\t\t// move active app to last position if it is active\n\t\t\tif (appCount > 0 && $(appList[k]).children('a').hasClass('active')) {\n\t\t\t\t$(lastShownApp).addClass('hidden')\n\t\t\t\t$('#apps li[data-id=' + $(lastShownApp).data('id') + ']').removeClass('in-header')\n\t\t\t\t$(appList[k]).removeClass('hidden')\n\t\t\t\t$('#apps li[data-id=' + name + ']').addClass('in-header')\n\t\t\t}\n\t\t}\n\t}\n\n\t// show/hide more apps icon\n\tif ($('#apps li:not(.in-header)').length === 0) {\n\t\t$('#more-apps').hide()\n\t\t$('#navigation').hide()\n\t} else {\n\t\t$('#more-apps').show()\n\t}\n}\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\tconst userAgent = window.navigator.userAgent\n\tconst edge = userAgent.indexOf('Edge/')\n\n\tif (edge > 0) {\n\t\t$('html').addClass('edge')\n\t\tconsole.info('Legacy browser detected, applying css vars polyfill')\n\t\tcssVars({\n\t\t\twatch: true,\n\t\t\t// set edge < 16 as incompatible\n\t\t\tonlyLegacy: !(/Edge\\/([0-9]{2})\\./i.test(navigator.userAgent)\n\t\t\t\t&& parseInt(/Edge\\/([0-9]{2})\\./i.exec(navigator.userAgent)[1]) < 16),\n\t\t})\n\t}\n\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// move triangle of apps dropdown to align with app name triangle\n\t// 2 is the additional offset between the triangles\n\tif ($('#navigation').length) {\n\t\t$('#header #nextcloud + .menutoggle').on('click', () => {\n\t\t\t$('#menu-css-helper').remove()\n\t\t\tconst caretPosition = $('.header-appname + .icon-caret').offset().left - 2\n\t\t\tif (caretPosition > 255) {\n\t\t\t\t// if the app name is longer than the menu, just put the triangle in the middle\n\n\t\t\t} else {\n\t\t\t\t$('head').append('<style id=\"menu-css-helper\">#navigation:after { left: ' + caretPosition + 'px }</style>')\n\t\t\t}\n\t\t})\n\t\t$('#header #appmenu .menutoggle').on('click', () => {\n\t\t\t$('#appmenu').toggleClass('menu-open')\n\t\t\tif ($('#appmenu').is(':visible')) {\n\t\t\t\t$('#menu-css-helper').remove()\n\t\t\t}\n\t\t})\n\t}\n\n\t$(window).resize(resizeMenu)\n\tsetTimeout(resizeMenu, 0)\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 *\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 OC from '../OC'\n\nimport $ from 'jquery'\n\nexport const setUp = () => {\n\tconst $menu = $('#header #settings')\n\t// Using page terminoogy as below\n\tconst $excludedPageClasses = [\n\t\t'user-status-menu-item__header',\n\t]\n\n\t// show loading feedback\n\t$menu.delegate('a', 'click', event => {\n\t\tlet $page = $(event.target)\n\t\tif (!$page.is('a')) {\n\t\t\t$page = $page.closest('a')\n\t\t}\n\t\tif (event.which === 1 && !event.ctrlKey && !event.metaKey) {\n\t\t\tif (!$excludedPageClasses.includes($page.attr('class'))) {\n\t\t\t\t$page.find('img').remove()\n\t\t\t\t$page.find('div').remove() // prevent odd double-clicks\n\t\t\t\t$page.prepend($('<div></div>').addClass('icon-loading-small'))\n\t\t\t}\n\t\t} else {\n\t\t\t// Close navigation when opening menu entry in\n\t\t\t// a new tab\n\t\t\tOC.hideMenus(() => false)\n\t\t}\n\t})\n\n\t$menu.delegate('a', 'mouseup', event => {\n\t\tif (event.which === 2) {\n\t\t\t// Close navigation when opening app in\n\t\t\t// a new tab via middle click\n\t\t\tOC.hideMenus(() => false)\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 $ from 'jquery'\n\nimport OC from '../OC'\n\n/**\n * Set up the main menu toggle to react to media query changes.\n * If the screen is small enough, the main menu becomes a toggle.\n * If the screen is bigger, the main menu is not a toggle any more.\n */\nexport const setUp = () => {\n\n\tObject.assign(OC, {\n\t\tsetNavigationCounter(id, counter) {\n\t\t\tconst appmenuElement = document.getElementById('appmenu').querySelector('[data-id=\"' + id + '\"] svg')\n\t\t\tconst appsElement = document.getElementById('apps').querySelector('[data-id=\"' + id + '\"] svg')\n\t\t\tif (counter === 0) {\n\t\t\t\tappmenuElement.classList.remove('has-unread')\n\t\t\t\tappsElement.classList.remove('has-unread')\n\t\t\t\tappmenuElement.getElementsByTagName('image')[0].style.mask = ''\n\t\t\t\tappsElement.getElementsByTagName('image')[0].style.mask = ''\n\t\t\t} else {\n\t\t\t\tappmenuElement.classList.add('has-unread')\n\t\t\t\tappsElement.classList.add('has-unread')\n\t\t\t\tappmenuElement.getElementsByTagName('image')[0].style.mask = 'url(#hole)'\n\t\t\t\tappsElement.getElementsByTagName('image')[0].style.mask = 'url(#hole)'\n\t\t\t}\n\t\t\tdocument.getElementById('appmenu').querySelector('[data-id=\"' + id + '\"] .unread-counter').textContent = counter\n\t\t\tdocument.getElementById('apps').querySelector('[data-id=\"' + id + '\"] .unread-counter').textContent = counter\n\t\t},\n\t})\n\t// init the more-apps menu\n\tOC.registerMenu($('#more-apps > a'), $('#navigation'))\n\n\t// toggle the navigation\n\tconst $toggle = $('#header .header-appname-container')\n\tconst $navigation = $('#navigation')\n\tconst $appmenu = $('#appmenu')\n\n\t// init the menu\n\tOC.registerMenu($toggle, $navigation)\n\t$toggle.data('oldhref', $toggle.attr('href'))\n\t$toggle.attr('href', '#')\n\t$navigation.hide()\n\n\t// show loading feedback on more apps list\n\t$navigation.delegate('a', 'click', event => {\n\t\tlet $app = $(event.target)\n\t\tif (!$app.is('a')) {\n\t\t\t$app = $app.closest('a')\n\t\t}\n\t\tif (event.which === 1 && !event.ctrlKey && !event.metaKey && $app.attr('target') !== '_blank') {\n\t\t\t$app.find('svg').remove()\n\t\t\t$app.find('div').remove() // prevent odd double-clicks\n\t\t\t// no need for theming, loader is already inverted on dark mode\n\t\t\t// but we need it over the primary colour\n\t\t\t$app.prepend($('<div></div>').addClass('icon-loading-small'))\n\t\t} else {\n\t\t\t// Close navigation when opening app in\n\t\t\t// a new tab\n\t\t\tOC.hideMenus(() => false)\n\t\t}\n\t})\n\n\t$navigation.delegate('a', 'mouseup', event => {\n\t\tif (event.which === 2) {\n\t\t\t// Close navigation when opening app in\n\t\t\t// a new tab via middle click\n\t\t\tOC.hideMenus(() => false)\n\t\t}\n\t})\n\n\t// show loading feedback on visible apps list\n\t$appmenu.delegate('li:not(#more-apps) > a', 'click', event => {\n\t\tlet $app = $(event.target)\n\t\tif (!$app.is('a')) {\n\t\t\t$app = $app.closest('a')\n\t\t}\n\n\t\tif (event.which === 1 && !event.ctrlKey && !event.metaKey && $app.parent('#more-apps').length === 0 && $app.attr('target') !== '_blank') {\n\t\t\t$app.find('svg').remove()\n\t\t\t$app.find('div').remove() // prevent odd double-clicks\n\t\t\t$app.prepend($('<div></div>').addClass(\n\t\t\t\tOCA.Theming && OCA.Theming.inverted\n\t\t\t\t\t? 'icon-loading-small'\n\t\t\t\t\t: 'icon-loading-small-dark'\n\t\t\t))\n\t\t\t// trigger redirect\n\t\t\t// needed for ie, but also works for every browser\n\t\t\twindow.location = $app.attr('href')\n\t\t} else {\n\t\t\t// Close navigation when opening app in\n\t\t\t// a new tab\n\t\t\tOC.hideMenus(() => false)\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 $ from 'jquery'\nimport OC from '../OC'\n\n/**\n * @todo move to contacts menu code https://github.com/orgs/nextcloud/projects/31#card-21213129\n */\nexport const setUp = () => {\n\t// eslint-disable-next-line no-new\n\tnew OC.ContactsMenu({\n\t\tel: $('#contactsmenu .menu'),\n\t\ttrigger: $('#contactsmenu .menutoggle'),\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 */\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) 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 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 'bootstrap/js/dist/tooltip'\nimport './Polyfill/tooltip'\nimport ClipboardJS from 'clipboard'\nimport { dav } from 'davclient.js'\nimport Handlebars from 'handlebars'\nimport '@nextcloud/jcrop/js/jquery.Jcrop'\nimport '@nextcloud/jcrop/css/jquery.Jcrop.css'\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 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 Collaboration from './collaboration'\nimport Loader from './loader'\nimport Toast from './toast'\n\n/** @namespace OCP */\nexport default {\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'\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.click(function() {\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'\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\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\t// If no button is selected we trigger the primary\n\t\t\t\tif (\n\t\t\t\t\tself.$buttonrow\n\t\t\t\t\t&& self.$buttonrow.find($(event.target)).length === 0\n\t\t\t\t) {\n\t\t\t\t\tconst $button = self.$buttonrow.find('button.primary')\n\t\t\t\t\tif ($button && !$button.prop('disabled')) {\n\t\t\t\t\t\t$button.trigger('click')\n\t\t\t\t\t}\n\t\t\t\t} else if (self.$buttonrow) {\n\t\t\t\t\t$(event.target).trigger('click')\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.click(function() {\n\t\t\t\t\tval.click.apply(self.element[0], arguments)\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\"></a>')\n\t\t\t\tthis.$dialog.prepend($closeButton)\n\t\t\t\t$closeButton.on('click', function() {\n\t\t\t\t\tself.options.closeCallback && self.options.closeCallback()\n\t\t\t\t\tself.close()\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'\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'\n\nimport './globals'\nimport './jquery/index'\nimport { initCore } from './init'\nimport { registerAppsSlideToggle } from './OC/apps'\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-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,CAKD,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\\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-000) no-repeat center;opacity:.5}.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,iDAAA,CACA,UAAA,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-000) no-repeat center;\\n\\topacity: .5;\\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","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, 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(14, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":23,\"column\":1},\"end\":{\"line\":29,\"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<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},\"18\":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=\\\"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<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</a>\\n\";\n},\"20\":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},\"22\":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<span class=\\\"other-actions icon-more\\\"></span>\\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(23, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":51,\"column\":3},\"end\":{\"line\":58,\"column\":12}}})) != null ? stack1 : \"\")\n + \"\t\t</ul>\\n\t</div>\\n\";\n},\"23\":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\":53,\"column\":13},\"end\":{\"line\":53,\"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\":54,\"column\":15},\"end\":{\"line\":54,\"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\":55,\"column\":11},\"end\":{\"line\":55,\"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(16, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":22,\"column\":0},\"end\":{\"line\":36,\"column\":7}}})) != 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(18, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":37,\"column\":0},\"end\":{\"line\":41,\"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(20, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":42,\"column\":0},\"end\":{\"line\":46,\"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(22, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":47,\"column\":0},\"end\":{\"line\":61,\"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","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// 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));","// 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__(13084); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","Element","prototype","matches","msMatchesSelector","webkitMatchesSelector","closest","s","el","this","parentElement","parentNode","nodeType","console","log","window","noOp","methods","i","length","document","documentElement","style","navigator","userAgent","match","msViewportStyle","createElement","appendChild","createTextNode","getElementsByTagName","loadedScripts","loadedStyles","updatableNotification","getDefaultNotificationFunction","setDefault","callback","hide","$row","_","undefined","each","$","toastify","hideToast","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","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","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","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","_$trigger","_view","_contactsPromise","_loadContacts","_toggleVisibility","Promise","resolve","_getContacts","filter","term","catch","rawUid","getAttribute","displayName","currentUser","Search","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","filelist","allowDirectoryChooser","_getFilePickerTemplate","$filePicker","emptytext","newtext","nameCol","sizeCol","modifiedCol","remove","$showGridView","_onGridviewChange","_getGridSettings","newButton","event","stopImmediatePropagation","preventDefault","$input","submit","newName","lastPos","lastIndexOf","selectRange","$form","stopPropagation","filename","trimmedName","trim","isFileNameValid","file","escape","checkInput","newname","createDirectory","always","_fillFilePicker","keypress","keyCode","which","ready","$fileListHeader","$filelist","$filelistContainer","$dirTree","_handleTreeListSelect","_handlePickerClick","dir","currentTarget","functionToCall","returnType","datapath","index","element","selectedName","button","width","height","buttonEnableDisable","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","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","min","drawImage","toDataURL","readAsArrayBuffer","reject","getCroppedPreview","checkboxId","count","n","parent","children","_getFileExistsTemplate","allnewfiles","allexistingfiles","why","what","onCancel","onContinue","closeButton","$primaryButton","updatePrimaryButton","checkedCount","$checkbox","promise","checked","gridview","next","toggleClass","defer","$filePickerTemplate","tmpl","$listTmpl","detach","jqXHR","$messageTemplate","$fileexistsTemplate","_getFileList","mimeType","mimetypes","empty","getFolderContents","files","mimetype","showHiddenInput","getElementById","startsWith","Comparators","fileInfo1","fileInfo2","comparator","sort","file1","file2","isFavorite","fileInfo","tags","_fillSlug","idx","entry","simpleSize","sizeColor","icon","parseInt","pow","filename1","filename2","date","previewUrl","addButton","$template","paths","prepend","prependTo","getOcDialog","_changeButtonsText","$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","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","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","bytes","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","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","hasClass","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","resizeMenu","appList","rightHeaderWidth","outerWidth","availableWidth","isMobile","lastShownApp","appCount","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","$menu","$excludedPageClasses","cssVars","watch","onlyLegacy","test","exec","allowAuthErrors","loadState","loadConfig","auto_logout","lastActive","now","localStorage","setItem","newValue","logoutUrl","registerAutoLogout","session_keepalive","initSessionHeartBeat","setNavigationCounter","counter","appmenuElement","querySelector","appsElement","classList","mask","add","textContent","$navigation","$appmenu","delegate","$app","metaKey","Theming","inverted","setUpMainMenu","$page","includes","caretPosition","offset","resize","snapper","Snap","disable","maxPosition","minDragDistance","animating","oldSnapperOpen","open","oldSnapperClose","_snapperOpen","_snapperClose","$target","navigationBarSlideGestureEnabled","navigationBarSlideGestureAllowed","navigationBarSlideGestureEnablePending","enable","toggleSnapperOnSize","ex","TypeError","urlRegex","plainToRich","formatLinksRich","richToPlain","formatLinksPlain","leadingSpace","trailingSpace","linkText","$content","$this","dismissOptions","dismiss","menuItem","div","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","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","enterCallback","$buttonrow","$button","_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","fn","setState","checkbox","$clone","class","tabindex","autocomplete","cloneElement","insertAfter","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","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","container","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__","amdD","amdO","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","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
diff --git a/lib/l10n/fr.js b/lib/l10n/fr.js
index 43a9d004886..a373d54db51 100644
--- a/lib/l10n/fr.js
+++ b/lib/l10n/fr.js
@@ -274,4 +274,4 @@ OC.L10N.register(
"Your data directory is invalid" : "Votre répertoire n'est pas valide",
"This can usually be fixed by giving the webserver write access to the apps directory or disabling the App Store in the config file." : "Ce problème est généralement résolu en donnant au serveur web un accès en écriture au répertoire des applications ou en désactivant le magasin d'applications dans le fichier de configuration."
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n==0 || n==1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/lib/l10n/fr.json b/lib/l10n/fr.json
index 8b31eccae6f..0a8b3bbc264 100644
--- a/lib/l10n/fr.json
+++ b/lib/l10n/fr.json
@@ -271,5 +271,5 @@
"Check the value of \"datadirectory\" in your configuration" : "Verifiez la valeur de \"datadirectory\" dans votre configuration",
"Your data directory is invalid" : "Votre répertoire n'est pas valide",
"This can usually be fixed by giving the webserver write access to the apps directory or disabling the App Store in the config file." : "Ce problème est généralement résolu en donnant au serveur web un accès en écriture au répertoire des applications ou en désactivant le magasin d'applications dans le fichier de configuration."
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+},"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/lib/private/Files/Cache/Storage.php b/lib/private/Files/Cache/Storage.php
index 2de2c2f84d7..fb9e5500658 100644
--- a/lib/private/Files/Cache/Storage.php
+++ b/lib/private/Files/Cache/Storage.php
@@ -126,19 +126,9 @@ class Storage {
* @param int $numericId
* @return string|null either the storage id string or null if the numeric id is not known
*/
- public static function getStorageId($numericId) {
- $query = \OC::$server->getDatabaseConnection()->getQueryBuilder();
- $query->select('id')
- ->from('storages')
- ->where($query->expr()->eq('numeric_id', $query->createNamedParameter($numericId)));
- $result = $query->execute();
- $row = $result->fetch();
- $result->closeCursor();
- if ($row) {
- return $row['id'];
- } else {
- return null;
- }
+ public static function getStorageId(int $numericId): ?string {
+ $storage = self::getGlobalCache()->getStorageInfoByNumericId($numericId);
+ return $storage['id'] ?? null;
}
/**
@@ -240,6 +230,7 @@ class Storage {
->from('mounts')
->where($query->expr()->eq('mount_id', $query->createNamedParameter($mountId, IQueryBuilder::PARAM_INT)));
$storageIds = $query->executeQuery()->fetchAll(\PDO::FETCH_COLUMN);
+ $storageIds = array_unique($storageIds);
$query = $db->getQueryBuilder();
$query->delete('filecache')
diff --git a/lib/private/Files/Cache/StorageGlobal.php b/lib/private/Files/Cache/StorageGlobal.php
index 7162f8e4908..a898c435415 100644
--- a/lib/private/Files/Cache/StorageGlobal.php
+++ b/lib/private/Files/Cache/StorageGlobal.php
@@ -41,8 +41,10 @@ class StorageGlobal {
/** @var IDBConnection */
private $connection;
- /** @var array[] */
+ /** @var array<string, array> */
private $cache = [];
+ /** @var array<int, array> */
+ private $numericIdCache = [];
public function __construct(IDBConnection $connection) {
$this->connection = $connection;
@@ -68,7 +70,7 @@ class StorageGlobal {
* @param string $storageId
* @return array|null
*/
- public function getStorageInfo($storageId) {
+ public function getStorageInfo(string $storageId): ?array {
if (!isset($this->cache[$storageId])) {
$builder = $this->connection->getQueryBuilder();
$query = $builder->select(['id', 'numeric_id', 'available', 'last_checked'])
@@ -81,9 +83,33 @@ class StorageGlobal {
if ($row) {
$this->cache[$storageId] = $row;
+ $this->numericIdCache[(int)$row['numeric_id']] = $row;
}
}
- return isset($this->cache[$storageId]) ? $this->cache[$storageId] : null;
+ return $this->cache[$storageId] ?? null;
+ }
+
+ /**
+ * @param int $numericId
+ * @return array|null
+ */
+ public function getStorageInfoByNumericId(int $numericId): ?array {
+ if (!isset($this->numericIdCache[$numericId])) {
+ $builder = $this->connection->getQueryBuilder();
+ $query = $builder->select(['id', 'numeric_id', 'available', 'last_checked'])
+ ->from('storages')
+ ->where($builder->expr()->eq('numeric_id', $builder->createNamedParameter($numericId)));
+
+ $result = $query->execute();
+ $row = $result->fetch();
+ $result->closeCursor();
+
+ if ($row) {
+ $this->numericIdCache[$numericId] = $row;
+ $this->cache[$row['id']] = $row;
+ }
+ }
+ return $this->numericIdCache[$numericId] ?? null;
}
public function clearCache() {
diff --git a/lib/private/Files/View.php b/lib/private/Files/View.php
index 779e0611591..d80ae041d57 100644
--- a/lib/private/Files/View.php
+++ b/lib/private/Files/View.php
@@ -1099,6 +1099,7 @@ class View {
[Filesystem::signal_param_path => $this->getHookPath($path)]
);
}
+ /** @var Storage|null $storage */
[$storage, $internalPath] = Filesystem::resolvePath($absolutePath . $postFix);
if ($storage) {
return $storage->hash($type, $internalPath, $raw);
diff --git a/lib/private/Group/Group.php b/lib/private/Group/Group.php
index 9a9996f7f60..2ef4d2ee23f 100644
--- a/lib/private/Group/Group.php
+++ b/lib/private/Group/Group.php
@@ -354,8 +354,7 @@ class Group implements IGroup {
}
foreach ($this->backends as $backend) {
if ($backend->implementsActions(\OC\Group\Backend::DELETE_GROUP)) {
- $result = true;
- $backend->deleteGroup($this->gid);
+ $result = $result || $backend->deleteGroup($this->gid);
}
}
if ($result) {
diff --git a/lib/private/legacy/OC_Helper.php b/lib/private/legacy/OC_Helper.php
index efb9252e346..547ffef8607 100644
--- a/lib/private/legacy/OC_Helper.php
+++ b/lib/private/legacy/OC_Helper.php
@@ -485,7 +485,7 @@ class OC_Helper {
* @return array
* @throws \OCP\Files\NotFoundException
*/
- public static function getStorageInfo($path, $rootInfo = null) {
+ public static function getStorageInfo($path, $rootInfo = null, $includeMountPoints = true) {
// return storage info without adding mount points
$includeExtStorage = \OC::$server->getSystemConfig()->getValue('quota_include_external_storage', false);
@@ -495,7 +495,7 @@ class OC_Helper {
if (!$rootInfo instanceof \OCP\Files\FileInfo) {
throw new \OCP\Files\NotFoundException();
}
- $used = $rootInfo->getSize();
+ $used = $rootInfo->getSize($includeMountPoints);
if ($used < 0) {
$used = 0;
}