diff options
312 files changed, 4778 insertions, 3767 deletions
diff --git a/.drone.yml b/.drone.yml index 391c081457d..51bd457d63d 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,3 +1,4 @@ +--- kind: pipeline name: checkers @@ -1995,3 +1996,6 @@ trigger: event: - pull_request - push +--- +kind: signature +hmac: 6fe5dad5c0beaf5cd76b02bbe27cc4986864cbc94b36a9454c0d9e27cb2174d3 diff --git a/.github/workflows/phpunit-32bits.yml b/.github/workflows/phpunit-32bits.yml index 3b03c00184b..5458b8696db 100644 --- a/.github/workflows/phpunit-32bits.yml +++ b/.github/workflows/phpunit-32bits.yml @@ -36,7 +36,7 @@ jobs: sudo apt-get install -y ffmpeg imagemagick libmagickcore-6.q16-3-extra - name: Set up php ${{ matrix.php-versions }} - uses: shivammathur/setup-php@v2 + uses: shivammathur/setup-php@9c77701ae57b0c47f6732beebfbdec76e4e5c90a #debian bookworm fix with: php-version: ${{ matrix.php-versions }} extensions: ctype, curl, dom, fileinfo, gd, imagick, intl, json, mbstring, openssl, pdo_sqlite, posix, sqlite, xml, zip, apcu diff --git a/apps/comments/l10n/eu.js b/apps/comments/l10n/eu.js index bcfb99ad8d3..73d25e4ef93 100644 --- a/apps/comments/l10n/eu.js +++ b/apps/comments/l10n/eu.js @@ -19,6 +19,7 @@ OC.L10N.register( "No comments yet, start the conversation!" : "Oraindik ez dago iruzkinik, izan zaitez lehena zerbait esanez!", "No more messages" : "Ez da mezu gehiagorik", "Retry" : "Saiatu berriro", + "Failed to mark comments as read" : "Iruzkinak irakurritako gisa markatzeak huts egin du", "Unable to load the comments list" : "Ezin da iruzkinen zerrenda kargatu", "_%n unread comment_::_%n unread comments_" : ["iruzkin %n irakurri gabe","%n iruzkin irakurri gabe"], "_1 new comment_::_{unread} new comments_" : ["Iruzkin berri 1","{unread} iruzkin berri"], diff --git a/apps/comments/l10n/eu.json b/apps/comments/l10n/eu.json index f09da9e788c..352c15835d1 100644 --- a/apps/comments/l10n/eu.json +++ b/apps/comments/l10n/eu.json @@ -17,6 +17,7 @@ "No comments yet, start the conversation!" : "Oraindik ez dago iruzkinik, izan zaitez lehena zerbait esanez!", "No more messages" : "Ez da mezu gehiagorik", "Retry" : "Saiatu berriro", + "Failed to mark comments as read" : "Iruzkinak irakurritako gisa markatzeak huts egin du", "Unable to load the comments list" : "Ezin da iruzkinen zerrenda kargatu", "_%n unread comment_::_%n unread comments_" : ["iruzkin %n irakurri gabe","%n iruzkin irakurri gabe"], "_1 new comment_::_{unread} new comments_" : ["Iruzkin berri 1","{unread} iruzkin berri"], diff --git a/apps/comments/l10n/gl.js b/apps/comments/l10n/gl.js index a17aed3fb9f..5e17898ac0a 100644 --- a/apps/comments/l10n/gl.js +++ b/apps/comments/l10n/gl.js @@ -2,15 +2,15 @@ OC.L10N.register( "comments", { "Comments" : "Comentarios", - "You commented" : "Vostede comentou", + "You commented" : "Vde. comentou", "{author} commented" : "{author} comentou", - "You commented on %1$s" : "Vostede comentou en %1$s", - "You commented on {file}" : "Vostede comentou en {file}", + "You commented on %1$s" : "Vde. comentou en %1$s", + "You commented on {file}" : "Vde. comentou en {file}", "%1$s commented on %2$s" : "%1$s comentados en %2$s", "{author} commented on {file}" : "{author} comentou en {file}", "<strong>Comments</strong> for files" : "<strong>Comentarios</strong> para ficheiros", "You were mentioned on \"{file}\", in a comment by a user that has since been deleted" : "Mencionárono en «{file}», nun comentario dun usuario que xa foi eliminado", - "{user} mentioned you in a comment on \"{file}\"" : "{user} mencionouno a vostede nun comentario en «{file}»", + "{user} mentioned you in a comment on \"{file}\"" : "{user} mencionouno a Vde. nun comentario en «{file}»", "Files app plugin to add comments to files" : "Complemento da aplicación de ficheiros para engadir comentarios aos ficheiros", "Edit comment" : "Editar comentario", "Delete comment" : "Eliminar comentario", @@ -24,10 +24,10 @@ OC.L10N.register( "_%n unread comment_::_%n unread comments_" : ["%n comentario sen ler","%n comentarios sen ler"], "_1 new comment_::_{unread} new comments_" : ["1 comentario novo","{unread} comentarios novos"], "Comment" : "Comentario", - "An error occurred while trying to edit the comment" : "Produciuse un erro mentres tentaba editar o comentario", + "An error occurred while trying to edit the comment" : "Produciuse un erro cando tentaba editar o comentario", "Comment deleted" : "Comentario eliminado", - "An error occurred while trying to delete the comment" : "Produciuse un erro mentres tentaba eliminar o comentario", - "An error occurred while trying to create the comment" : "Produciuse un erro mentres tentaba crear o comentario", + "An error occurred while trying to delete the comment" : "Produciuse un erro cando tentaba eliminar o comentario", + "An error occurred while trying to create the comment" : "Produciuse un erro cando tentaba crear o comentario", "%1$s commented" : "%1$s comentados" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/comments/l10n/gl.json b/apps/comments/l10n/gl.json index ca1278dd2d0..cbbadea8659 100644 --- a/apps/comments/l10n/gl.json +++ b/apps/comments/l10n/gl.json @@ -1,14 +1,14 @@ { "translations": { "Comments" : "Comentarios", - "You commented" : "Vostede comentou", + "You commented" : "Vde. comentou", "{author} commented" : "{author} comentou", - "You commented on %1$s" : "Vostede comentou en %1$s", - "You commented on {file}" : "Vostede comentou en {file}", + "You commented on %1$s" : "Vde. comentou en %1$s", + "You commented on {file}" : "Vde. comentou en {file}", "%1$s commented on %2$s" : "%1$s comentados en %2$s", "{author} commented on {file}" : "{author} comentou en {file}", "<strong>Comments</strong> for files" : "<strong>Comentarios</strong> para ficheiros", "You were mentioned on \"{file}\", in a comment by a user that has since been deleted" : "Mencionárono en «{file}», nun comentario dun usuario que xa foi eliminado", - "{user} mentioned you in a comment on \"{file}\"" : "{user} mencionouno a vostede nun comentario en «{file}»", + "{user} mentioned you in a comment on \"{file}\"" : "{user} mencionouno a Vde. nun comentario en «{file}»", "Files app plugin to add comments to files" : "Complemento da aplicación de ficheiros para engadir comentarios aos ficheiros", "Edit comment" : "Editar comentario", "Delete comment" : "Eliminar comentario", @@ -22,10 +22,10 @@ "_%n unread comment_::_%n unread comments_" : ["%n comentario sen ler","%n comentarios sen ler"], "_1 new comment_::_{unread} new comments_" : ["1 comentario novo","{unread} comentarios novos"], "Comment" : "Comentario", - "An error occurred while trying to edit the comment" : "Produciuse un erro mentres tentaba editar o comentario", + "An error occurred while trying to edit the comment" : "Produciuse un erro cando tentaba editar o comentario", "Comment deleted" : "Comentario eliminado", - "An error occurred while trying to delete the comment" : "Produciuse un erro mentres tentaba eliminar o comentario", - "An error occurred while trying to create the comment" : "Produciuse un erro mentres tentaba crear o comentario", + "An error occurred while trying to delete the comment" : "Produciuse un erro cando tentaba eliminar o comentario", + "An error occurred while trying to create the comment" : "Produciuse un erro cando tentaba crear o comentario", "%1$s commented" : "%1$s comentados" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/dav/l10n/gl.js b/apps/dav/l10n/gl.js index 288ad39f189..31e33bcfc86 100644 --- a/apps/dav/l10n/gl.js +++ b/apps/dav/l10n/gl.js @@ -9,29 +9,29 @@ OC.L10N.register( "{actor} deleted calendar {calendar}" : "{actor} eliminou o calendario {calendar}", "You deleted calendar {calendar}" : "Eliminou o calendario {calendar}", "{actor} updated calendar {calendar}" : "{actor} actualizou o calendario {calendar}", - "You updated calendar {calendar}" : "Vostede actualizou o calendario {calendar}", + "You updated calendar {calendar}" : "Vde. actualizou o calendario {calendar}", "{actor} restored calendar {calendar}" : "{actor} restaurou o calendario {calendar}", - "You restored calendar {calendar}" : "Vostede restaurou o calendario {calendar}", - "You shared calendar {calendar} as public link" : "Vostede compartiu o calendario {calendar} como ligazón pública", - "You removed public link for calendar {calendar}" : "Vostede retirou a ligazón pública do calendario {calendar}", - "{actor} shared calendar {calendar} with you" : "{actor} compartiu o calendario {calendar} con vostede", - "You shared calendar {calendar} with {user}" : "Vostede compartiu o calendario {calendar} con {user}", + "You restored calendar {calendar}" : "Vde. restaurou o calendario {calendar}", + "You shared calendar {calendar} as public link" : "Vde. compartiu o calendario {calendar} como ligazón pública", + "You removed public link for calendar {calendar}" : "Vde. retirou a ligazón pública do calendario {calendar}", + "{actor} shared calendar {calendar} with you" : "{actor} compartiu o calendario {calendar} con Vde.", + "You shared calendar {calendar} with {user}" : "Vde. compartiu o calendario {calendar} con {user}", "{actor} shared calendar {calendar} with {user}" : "{actor} compartiu o calendario {calendar} con {user}", - "{actor} unshared calendar {calendar} from you" : "{actor} deixou de compartir o calendario {calendar} de vostede", - "You unshared calendar {calendar} from {user}" : "Vostede deixou de compartir o calendario {calendar} de {user}", + "{actor} unshared calendar {calendar} from you" : "{actor} deixou de compartir o calendario {calendar} de Vde.", + "You unshared calendar {calendar} from {user}" : "Vde. deixou de compartir o calendario {calendar} de {user}", "{actor} unshared calendar {calendar} from {user}" : "{actor} deixou de compartir o calendario {calendar} de {user}", "{actor} unshared calendar {calendar} from themselves" : "{actor} deixou de compartir o seu propio calendario {calendar}", - "You shared calendar {calendar} with group {group}" : "Vostede compartiu o calendario {calendar} co grupo {group}", + "You shared calendar {calendar} with group {group}" : "Vde. compartiu o calendario {calendar} co grupo {group}", "{actor} shared calendar {calendar} with group {group}" : "{actor} compartiu o calendario {calendar} co grupo {group}", - "You unshared calendar {calendar} from group {group}" : "Vostede deixou de compartir o calendario {calendar} do grupo {group}", + "You unshared calendar {calendar} from group {group}" : "Vde. deixou de compartir o calendario {calendar} do grupo {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} deixou de compartir o calendario {calendar} do grupo {group}", "Untitled event" : "Evento sen título", "{actor} created event {event} in calendar {calendar}" : "{actor} creou o evento {event} no calendario {calendar}", - "You created event {event} in calendar {calendar}" : "Vostede creou o evento {event} no calendario {calendar}", + "You created event {event} in calendar {calendar}" : "Vde. creou o evento {event} no calendario {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} eliminou o evento {event} do calendario {calendar}", - "You deleted event {event} from calendar {calendar}" : "Vostede eliminou o evento {event} do calendario {calendar}", + "You deleted event {event} from calendar {calendar}" : "Vde. eliminou o evento {event} do calendario {calendar}", "{actor} updated event {event} in calendar {calendar}" : "{actor} actualizou o evento {event} no calendario {calendar}", - "You updated event {event} in calendar {calendar}" : "Vostede actualizou o evento {event} no calendario {calendar}", + "You updated event {event} in calendar {calendar}" : "Vde. actualizou o evento {event} no calendario {calendar}", "{actor} moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "{actor} moveu o evento {event} do calendario {sourceCalendar} ao calendario {targetCalendar}", "You moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "Moveu o evento {evento} do calendario {sourceCalendar} ao calendario {targetCalendar}", "{actor} restored event {event} of calendar {calendar}" : "{actor} restaurou o evento {evento} do calendario {calendar}", @@ -95,28 +95,28 @@ OC.L10N.register( "More options at %s" : "Máis opcións en %s", "Contacts" : "Contactos", "{actor} created address book {addressbook}" : "{actor} creou o caderno de enderezos {addressbook}", - "You created address book {addressbook}" : "Vostede creou o caderno de enderezos {addressbook}", + "You created address book {addressbook}" : "Vde. creou o caderno de enderezos {addressbook}", "{actor} deleted address book {addressbook}" : "{actor} eliminou o caderno de enderezos {addressbook}", - "You deleted address book {addressbook}" : "Vostede eliminou o caderno de enderezos {addressbook}", + "You deleted address book {addressbook}" : "Vde. eliminou o caderno de enderezos {addressbook}", "{actor} updated address book {addressbook}" : "{actor} actualizou o caderno de enderezos {addressbook}", - "You updated address book {addressbook}" : "Vostede actualizou o caderno de enderezos {addressbook}", - "{actor} shared address book {addressbook} with you" : "{actor} compartiu o caderno de enderezos {addressbook} con vostede", - "You shared address book {addressbook} with {user}" : "Vostede compartiu o caderno de enderezos {addressbook} con {user}", + "You updated address book {addressbook}" : "Vde. actualizou o caderno de enderezos {addressbook}", + "{actor} shared address book {addressbook} with you" : "{actor} compartiu o caderno de enderezos {addressbook} con Vde.", + "You shared address book {addressbook} with {user}" : "Vde. compartiu o caderno de enderezos {addressbook} con {user}", "{actor} shared address book {addressbook} with {user}" : "{actor} compartiu o caderno de enderezos {addressbook} con {user}", "{actor} unshared address book {addressbook} from you" : "{actor} deixou de compartir o seu caderno de enderezos {addressbook}", - "You unshared address book {addressbook} from {user}" : "Vostede deixou de compartir o caderno de enderezos {addressbook} de {user}", + "You unshared address book {addressbook} from {user}" : "Vde. deixou de compartir o caderno de enderezos {addressbook} de {user}", "{actor} unshared address book {addressbook} from {user}" : "{actor} deixou de compartir o caderno de enderezos {addressbook} de {user}", "{actor} unshared address book {addressbook} from themselves" : "{actor} deixaron de compartir o seu caderno de enderezos {addressbook}", - "You shared address book {addressbook} with group {group}" : "Vostede compartiu o caderno de enderezos {addressbook} co grupo {group}", + "You shared address book {addressbook} with group {group}" : "Vde. compartiu o caderno de enderezos {addressbook} co grupo {group}", "{actor} shared address book {addressbook} with group {group}" : "{actor} compartiu o caderno de enderezos {addressbook} co grupo {group}", - "You unshared address book {addressbook} from group {group}" : "Vostede deixou de compartir o caderno de enderezos {addressbook} do grupo {group}", + "You unshared address book {addressbook} from group {group}" : "Vde. deixou de compartir o caderno de enderezos {addressbook} do grupo {group}", "{actor} unshared address book {addressbook} from group {group}" : "{actor} deixou de compartir o caderno de enderezos {addressbook} do grupo {group}", "{actor} created contact {card} in address book {addressbook}" : "{actor} creou o contacto {card} no caderno de enderezos {addressbook}", - "You created contact {card} in address book {addressbook}" : "Vostede creou o contacto {card} no caderno de enderezos {addressbook}", + "You created contact {card} in address book {addressbook}" : "Vde. creou o contacto {card} no caderno de enderezos {addressbook}", "{actor} deleted contact {card} from address book {addressbook}" : "{actor} eliminou o contacto {card} do caderno de enderezos {addressbook}", - "You deleted contact {card} from address book {addressbook}" : "Vostede eliminou o contacto {card} do caderno de enderezos {addressbook}", + "You deleted contact {card} from address book {addressbook}" : "Vde. eliminou o contacto {card} do caderno de enderezos {addressbook}", "{actor} updated contact {card} in address book {addressbook}" : "{actor} actualizou o contacto {card} no caderno de enderezos {addressbook}", - "You updated contact {card} in address book {addressbook}" : "Vostede actualizou o contacto {card} no caderno de enderezos {addressbook}", + "You updated contact {card} in address book {addressbook}" : "Vde. actualizou o contacto {card} no caderno de enderezos {addressbook}", "A <strong>contact</strong> or <strong>address book</strong> was modified" : "Foi modificado un <strong>contacto</strong> ou <strong>caderno de enderezos</strong>", "Accounts" : "Contas", "System address book which holds all accounts" : "Caderno de enderezos do sistema que contén todas as contas", @@ -186,7 +186,7 @@ OC.L10N.register( "Please make sure to properly set up {emailopen}the email server{linkclose}." : "Asegúrese de ter configurado correctamente {emailopen}o servidor de correo-e{linkclose}.", "There was an error updating your attendance status." : "Produciuse un erro ao actualizar o seu estado de asistencia.", "Please contact the organizer directly." : "Contacte directamente co organizador.", - "Are you accepting the invitation?" : "Acepta vostede o convite?", + "Are you accepting the invitation?" : "Acepta Vde. o convite?", "Tentative" : "Provisional", "Your attendance was updated successfully." : "A súa asistencia foi actualizada satisfactoriamente.", "Invitation canceled" : "Convite cancelado", diff --git a/apps/dav/l10n/gl.json b/apps/dav/l10n/gl.json index 17e88139f67..b39cbc9d598 100644 --- a/apps/dav/l10n/gl.json +++ b/apps/dav/l10n/gl.json @@ -7,29 +7,29 @@ "{actor} deleted calendar {calendar}" : "{actor} eliminou o calendario {calendar}", "You deleted calendar {calendar}" : "Eliminou o calendario {calendar}", "{actor} updated calendar {calendar}" : "{actor} actualizou o calendario {calendar}", - "You updated calendar {calendar}" : "Vostede actualizou o calendario {calendar}", + "You updated calendar {calendar}" : "Vde. actualizou o calendario {calendar}", "{actor} restored calendar {calendar}" : "{actor} restaurou o calendario {calendar}", - "You restored calendar {calendar}" : "Vostede restaurou o calendario {calendar}", - "You shared calendar {calendar} as public link" : "Vostede compartiu o calendario {calendar} como ligazón pública", - "You removed public link for calendar {calendar}" : "Vostede retirou a ligazón pública do calendario {calendar}", - "{actor} shared calendar {calendar} with you" : "{actor} compartiu o calendario {calendar} con vostede", - "You shared calendar {calendar} with {user}" : "Vostede compartiu o calendario {calendar} con {user}", + "You restored calendar {calendar}" : "Vde. restaurou o calendario {calendar}", + "You shared calendar {calendar} as public link" : "Vde. compartiu o calendario {calendar} como ligazón pública", + "You removed public link for calendar {calendar}" : "Vde. retirou a ligazón pública do calendario {calendar}", + "{actor} shared calendar {calendar} with you" : "{actor} compartiu o calendario {calendar} con Vde.", + "You shared calendar {calendar} with {user}" : "Vde. compartiu o calendario {calendar} con {user}", "{actor} shared calendar {calendar} with {user}" : "{actor} compartiu o calendario {calendar} con {user}", - "{actor} unshared calendar {calendar} from you" : "{actor} deixou de compartir o calendario {calendar} de vostede", - "You unshared calendar {calendar} from {user}" : "Vostede deixou de compartir o calendario {calendar} de {user}", + "{actor} unshared calendar {calendar} from you" : "{actor} deixou de compartir o calendario {calendar} de Vde.", + "You unshared calendar {calendar} from {user}" : "Vde. deixou de compartir o calendario {calendar} de {user}", "{actor} unshared calendar {calendar} from {user}" : "{actor} deixou de compartir o calendario {calendar} de {user}", "{actor} unshared calendar {calendar} from themselves" : "{actor} deixou de compartir o seu propio calendario {calendar}", - "You shared calendar {calendar} with group {group}" : "Vostede compartiu o calendario {calendar} co grupo {group}", + "You shared calendar {calendar} with group {group}" : "Vde. compartiu o calendario {calendar} co grupo {group}", "{actor} shared calendar {calendar} with group {group}" : "{actor} compartiu o calendario {calendar} co grupo {group}", - "You unshared calendar {calendar} from group {group}" : "Vostede deixou de compartir o calendario {calendar} do grupo {group}", + "You unshared calendar {calendar} from group {group}" : "Vde. deixou de compartir o calendario {calendar} do grupo {group}", "{actor} unshared calendar {calendar} from group {group}" : "{actor} deixou de compartir o calendario {calendar} do grupo {group}", "Untitled event" : "Evento sen título", "{actor} created event {event} in calendar {calendar}" : "{actor} creou o evento {event} no calendario {calendar}", - "You created event {event} in calendar {calendar}" : "Vostede creou o evento {event} no calendario {calendar}", + "You created event {event} in calendar {calendar}" : "Vde. creou o evento {event} no calendario {calendar}", "{actor} deleted event {event} from calendar {calendar}" : "{actor} eliminou o evento {event} do calendario {calendar}", - "You deleted event {event} from calendar {calendar}" : "Vostede eliminou o evento {event} do calendario {calendar}", + "You deleted event {event} from calendar {calendar}" : "Vde. eliminou o evento {event} do calendario {calendar}", "{actor} updated event {event} in calendar {calendar}" : "{actor} actualizou o evento {event} no calendario {calendar}", - "You updated event {event} in calendar {calendar}" : "Vostede actualizou o evento {event} no calendario {calendar}", + "You updated event {event} in calendar {calendar}" : "Vde. actualizou o evento {event} no calendario {calendar}", "{actor} moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "{actor} moveu o evento {event} do calendario {sourceCalendar} ao calendario {targetCalendar}", "You moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "Moveu o evento {evento} do calendario {sourceCalendar} ao calendario {targetCalendar}", "{actor} restored event {event} of calendar {calendar}" : "{actor} restaurou o evento {evento} do calendario {calendar}", @@ -93,28 +93,28 @@ "More options at %s" : "Máis opcións en %s", "Contacts" : "Contactos", "{actor} created address book {addressbook}" : "{actor} creou o caderno de enderezos {addressbook}", - "You created address book {addressbook}" : "Vostede creou o caderno de enderezos {addressbook}", + "You created address book {addressbook}" : "Vde. creou o caderno de enderezos {addressbook}", "{actor} deleted address book {addressbook}" : "{actor} eliminou o caderno de enderezos {addressbook}", - "You deleted address book {addressbook}" : "Vostede eliminou o caderno de enderezos {addressbook}", + "You deleted address book {addressbook}" : "Vde. eliminou o caderno de enderezos {addressbook}", "{actor} updated address book {addressbook}" : "{actor} actualizou o caderno de enderezos {addressbook}", - "You updated address book {addressbook}" : "Vostede actualizou o caderno de enderezos {addressbook}", - "{actor} shared address book {addressbook} with you" : "{actor} compartiu o caderno de enderezos {addressbook} con vostede", - "You shared address book {addressbook} with {user}" : "Vostede compartiu o caderno de enderezos {addressbook} con {user}", + "You updated address book {addressbook}" : "Vde. actualizou o caderno de enderezos {addressbook}", + "{actor} shared address book {addressbook} with you" : "{actor} compartiu o caderno de enderezos {addressbook} con Vde.", + "You shared address book {addressbook} with {user}" : "Vde. compartiu o caderno de enderezos {addressbook} con {user}", "{actor} shared address book {addressbook} with {user}" : "{actor} compartiu o caderno de enderezos {addressbook} con {user}", "{actor} unshared address book {addressbook} from you" : "{actor} deixou de compartir o seu caderno de enderezos {addressbook}", - "You unshared address book {addressbook} from {user}" : "Vostede deixou de compartir o caderno de enderezos {addressbook} de {user}", + "You unshared address book {addressbook} from {user}" : "Vde. deixou de compartir o caderno de enderezos {addressbook} de {user}", "{actor} unshared address book {addressbook} from {user}" : "{actor} deixou de compartir o caderno de enderezos {addressbook} de {user}", "{actor} unshared address book {addressbook} from themselves" : "{actor} deixaron de compartir o seu caderno de enderezos {addressbook}", - "You shared address book {addressbook} with group {group}" : "Vostede compartiu o caderno de enderezos {addressbook} co grupo {group}", + "You shared address book {addressbook} with group {group}" : "Vde. compartiu o caderno de enderezos {addressbook} co grupo {group}", "{actor} shared address book {addressbook} with group {group}" : "{actor} compartiu o caderno de enderezos {addressbook} co grupo {group}", - "You unshared address book {addressbook} from group {group}" : "Vostede deixou de compartir o caderno de enderezos {addressbook} do grupo {group}", + "You unshared address book {addressbook} from group {group}" : "Vde. deixou de compartir o caderno de enderezos {addressbook} do grupo {group}", "{actor} unshared address book {addressbook} from group {group}" : "{actor} deixou de compartir o caderno de enderezos {addressbook} do grupo {group}", "{actor} created contact {card} in address book {addressbook}" : "{actor} creou o contacto {card} no caderno de enderezos {addressbook}", - "You created contact {card} in address book {addressbook}" : "Vostede creou o contacto {card} no caderno de enderezos {addressbook}", + "You created contact {card} in address book {addressbook}" : "Vde. creou o contacto {card} no caderno de enderezos {addressbook}", "{actor} deleted contact {card} from address book {addressbook}" : "{actor} eliminou o contacto {card} do caderno de enderezos {addressbook}", - "You deleted contact {card} from address book {addressbook}" : "Vostede eliminou o contacto {card} do caderno de enderezos {addressbook}", + "You deleted contact {card} from address book {addressbook}" : "Vde. eliminou o contacto {card} do caderno de enderezos {addressbook}", "{actor} updated contact {card} in address book {addressbook}" : "{actor} actualizou o contacto {card} no caderno de enderezos {addressbook}", - "You updated contact {card} in address book {addressbook}" : "Vostede actualizou o contacto {card} no caderno de enderezos {addressbook}", + "You updated contact {card} in address book {addressbook}" : "Vde. actualizou o contacto {card} no caderno de enderezos {addressbook}", "A <strong>contact</strong> or <strong>address book</strong> was modified" : "Foi modificado un <strong>contacto</strong> ou <strong>caderno de enderezos</strong>", "Accounts" : "Contas", "System address book which holds all accounts" : "Caderno de enderezos do sistema que contén todas as contas", @@ -184,7 +184,7 @@ "Please make sure to properly set up {emailopen}the email server{linkclose}." : "Asegúrese de ter configurado correctamente {emailopen}o servidor de correo-e{linkclose}.", "There was an error updating your attendance status." : "Produciuse un erro ao actualizar o seu estado de asistencia.", "Please contact the organizer directly." : "Contacte directamente co organizador.", - "Are you accepting the invitation?" : "Acepta vostede o convite?", + "Are you accepting the invitation?" : "Acepta Vde. o convite?", "Tentative" : "Provisional", "Your attendance was updated successfully." : "A súa asistencia foi actualizada satisfactoriamente.", "Invitation canceled" : "Convite cancelado", diff --git a/apps/dav/lib/CalDAV/CalDavBackend.php b/apps/dav/lib/CalDAV/CalDavBackend.php index 00dd60ed17c..f0fd29852bb 100644 --- a/apps/dav/lib/CalDAV/CalDavBackend.php +++ b/apps/dav/lib/CalDAV/CalDavBackend.php @@ -2700,7 +2700,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription * @param string $calendarData * @return array */ - public function getDenormalizedData($calendarData) { + public function getDenormalizedData(string $calendarData): array { $vObject = Reader::read($calendarData); $vEvents = []; $componentType = null; @@ -2714,7 +2714,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription if ($component->name !== 'VTIMEZONE') { // Finding all VEVENTs, and track them if ($component->name === 'VEVENT') { - array_push($vEvents, $component); + $vEvents[] = $component; if ($component->DTSTART) { $hasDTSTART = true; } @@ -2782,7 +2782,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription 'size' => strlen($calendarData), 'componentType' => $componentType, 'firstOccurence' => is_null($firstOccurrence) ? null : max(0, $firstOccurrence), - 'lastOccurence' => $lastOccurrence, + 'lastOccurence' => is_null($lastOccurrence) ? null : max(0, $lastOccurrence), 'uid' => $uid, 'classification' => $classification ]; @@ -3092,10 +3092,21 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription if ($keep < 0) { throw new \InvalidArgumentException(); } + + $query = $this->db->getQueryBuilder(); + $query->select($query->func()->max('id')) + ->from('calendarchanges'); + + $result = $query->executeQuery(); + $maxId = (int) $result->fetchOne(); + $result->closeCursor(); + if (!$maxId || $maxId < $keep) { + return 0; + } + $query = $this->db->getQueryBuilder(); $query->delete('calendarchanges') - ->orderBy('id', 'DESC') - ->setFirstResult($keep); + ->where($query->expr()->lte('id', $query->createNamedParameter($maxId - $keep, IQueryBuilder::PARAM_INT), IQueryBuilder::PARAM_INT)); return $query->executeStatement(); } diff --git a/apps/dav/lib/CardDAV/CardDavBackend.php b/apps/dav/lib/CardDAV/CardDavBackend.php index ab21af1ce10..f4e8243cb2f 100644 --- a/apps/dav/lib/CardDAV/CardDavBackend.php +++ b/apps/dav/lib/CardDAV/CardDavBackend.php @@ -1323,10 +1323,21 @@ class CardDavBackend implements BackendInterface, SyncSupport { if ($keep < 0) { throw new \InvalidArgumentException(); } + + $query = $this->db->getQueryBuilder(); + $query->select($query->func()->max('id')) + ->from('addressbookchanges'); + + $result = $query->executeQuery(); + $maxId = (int) $result->fetchOne(); + $result->closeCursor(); + if (!$maxId || $maxId < $keep) { + return 0; + } + $query = $this->db->getQueryBuilder(); $query->delete('addressbookchanges') - ->orderBy('id', 'DESC') - ->setFirstResult($keep); + ->where($query->expr()->lte('id', $query->createNamedParameter($maxId - $keep, IQueryBuilder::PARAM_INT), IQueryBuilder::PARAM_INT)); return $query->executeStatement(); } diff --git a/apps/dav/lib/Connector/Sabre/DavAclPlugin.php b/apps/dav/lib/Connector/Sabre/DavAclPlugin.php index 6842975835d..7fa94d7b903 100644 --- a/apps/dav/lib/Connector/Sabre/DavAclPlugin.php +++ b/apps/dav/lib/Connector/Sabre/DavAclPlugin.php @@ -94,8 +94,19 @@ class DavAclPlugin extends \Sabre\DAVACL\Plugin { $path = $request->getPath(); // prevent the plugin from causing an unneeded overhead for file requests - if (strpos($path, 'files/') !== 0) { - parent::beforeMethod($request, $response); + if (str_starts_with($path, 'files/')) { + return; + } + + parent::beforeMethod($request, $response); + + $createAddressbookOrCalendarRequest = ($request->getMethod() === 'MKCALENDAR' || $request->getMethod() === 'MKCOL') + && (str_starts_with($path, 'addressbooks/') || str_starts_with($path, 'calendars/')); + + if ($createAddressbookOrCalendarRequest) { + [$parentName] = \Sabre\Uri\split($path); + // is calendars/users/bob or addressbooks/users/bob writeable? + $this->checkPrivileges($parentName, '{DAV:}write'); } } } diff --git a/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php b/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php index 4876e9ad8f3..1c6727e68ca 100644 --- a/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php +++ b/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php @@ -30,6 +30,7 @@ namespace OCA\DAV\Connector\Sabre; use OC\Files\View; use OCP\App\IAppManager; use OCP\Files\Folder; +use OCP\Files\Node as INode; use OCP\IGroupManager; use OCP\ITagManager; use OCP\IUserSession; @@ -45,9 +46,9 @@ use Sabre\DAV\Xml\Element\Response; use Sabre\DAV\Xml\Response\MultiStatus; class FilesReportPlugin extends ServerPlugin { - // namespace public const NS_OWNCLOUD = 'http://owncloud.org/ns'; + public const NS_NEXTCLOUD = 'http://nextcloud.org/ns'; public const REPORT_NAME = '{http://owncloud.org/ns}filter-files'; public const SYSTEMTAG_PROPERTYNAME = '{http://owncloud.org/ns}systemtag'; public const CIRCLE_PROPERTYNAME = '{http://owncloud.org/ns}circle'; @@ -186,6 +187,7 @@ class FilesReportPlugin extends ServerPlugin { } $ns = '{' . $this::NS_OWNCLOUD . '}'; + $ncns = '{' . $this::NS_NEXTCLOUD . '}'; $requestedProps = []; $filterRules = []; @@ -199,6 +201,14 @@ class FilesReportPlugin extends ServerPlugin { foreach ($reportProps['value'] as $propVal) { $requestedProps[] = $propVal['name']; } + } elseif ($name === '{DAV:}limit') { + foreach ($reportProps['value'] as $propVal) { + if ($propVal['name'] === '{DAV:}nresults') { + $limit = (int)$propVal['value']; + } elseif ($propVal['name'] === $ncns . 'firstresult') { + $offset = (int)$propVal['value']; + } + } } } @@ -209,13 +219,32 @@ class FilesReportPlugin extends ServerPlugin { // gather all file ids matching filter try { - $resultFileIds = $this->processFilterRules($filterRules); + $resultFileIds = $this->processFilterRulesForFileIDs($filterRules); + // no logic in circles and favorites for paging, we always have all results, and slice later on + $resultFileIds = array_slice($resultFileIds, $offset ?? 0, $limit ?? null); + // fetching nodes has paging on DB level – therefore we cannot mix and slice the results, similar + // to user backends. I.e. the final result may return more results than requested. + $resultNodes = $this->processFilterRulesForFileNodes($filterRules, $limit ?? null, $offset ?? null); } catch (TagNotFoundException $e) { throw new PreconditionFailed('Cannot filter by non-existing tag', 0, $e); } + $results = []; + foreach ($resultNodes as $entry) { + if ($entry) { + $results[] = $this->wrapNode($entry); + } + } + // find sabre nodes by file id, restricted to the root node path - $results = $this->findNodesByFileIds($reportTargetNode, $resultFileIds); + $additionalNodes = $this->findNodesByFileIds($reportTargetNode, $resultFileIds); + if ($additionalNodes && $results) { + $results = array_uintersect($results, $additionalNodes, function (Node $a, Node $b): int { + return $a->getId() - $b->getId(); + }); + } elseif (!$results && $additionalNodes) { + $results = $additionalNodes; + } $filesUri = $this->getFilesBaseUri($uri, $reportTargetNode->getPath()); $responses = $this->prepareResponses($filesUri, $requestedProps, $results); @@ -261,19 +290,13 @@ class FilesReportPlugin extends ServerPlugin { * * @param array $filterRules * @return array array of unique file id results - * - * @throws TagNotFoundException whenever a tag was not found */ - protected function processFilterRules($filterRules) { + protected function processFilterRulesForFileIDs(array $filterRules): array { $ns = '{' . $this::NS_OWNCLOUD . '}'; - $resultFileIds = null; - $systemTagIds = []; + $resultFileIds = []; $circlesIds = []; $favoriteFilter = null; foreach ($filterRules as $filterRule) { - if ($filterRule['name'] === $ns . 'systemtag') { - $systemTagIds[] = $filterRule['value']; - } if ($filterRule['name'] === self::CIRCLE_PROPERTYNAME) { $circlesIds[] = $filterRule['value']; } @@ -289,15 +312,6 @@ class FilesReportPlugin extends ServerPlugin { } } - if (!empty($systemTagIds)) { - $fileIds = $this->getSystemTagFileIds($systemTagIds); - if (empty($resultFileIds)) { - $resultFileIds = $fileIds; - } else { - $resultFileIds = array_intersect($fileIds, $resultFileIds); - } - } - if (!empty($circlesIds)) { $fileIds = $this->getCirclesFileIds($circlesIds); if (empty($resultFileIds)) { @@ -310,47 +324,48 @@ class FilesReportPlugin extends ServerPlugin { return $resultFileIds; } - private function getSystemTagFileIds($systemTagIds) { - $resultFileIds = null; - - // check user permissions, if applicable - if (!$this->isAdmin()) { - // check visibility/permission - $tags = $this->tagManager->getTagsByIds($systemTagIds); - $unknownTagIds = []; - foreach ($tags as $tag) { - if (!$tag->isUserVisible()) { - $unknownTagIds[] = $tag->getId(); - } - } - - if (!empty($unknownTagIds)) { - throw new TagNotFoundException('Tag with ids ' . implode(', ', $unknownTagIds) . ' not found'); + protected function processFilterRulesForFileNodes(array $filterRules, ?int $limit, ?int $offset): array { + $systemTagIds = []; + foreach ($filterRules as $filterRule) { + if ($filterRule['name'] === self::SYSTEMTAG_PROPERTYNAME) { + $systemTagIds[] = $filterRule['value']; } } - // fetch all file ids and intersect them - foreach ($systemTagIds as $systemTagId) { - $fileIds = $this->tagMapper->getObjectIdsForTags($systemTagId, 'files'); + $nodes = []; - if (empty($fileIds)) { - // This tag has no files, nothing can ever show up - return []; - } + // type check to ensure searchBySystemTag is available, it is not + // exposed in API yet + if (!empty($systemTagIds) && method_exists($this->userFolder, 'searchBySystemTag')) { + $tags = $this->tagManager->getTagsByIds($systemTagIds, $this->userSession->getUser()); - // first run ? - if ($resultFileIds === null) { - $resultFileIds = $fileIds; - } else { - $resultFileIds = array_intersect($resultFileIds, $fileIds); + // For we run DB queries per tag and require intersection, we cannot apply limit and offset for DB queries on multi tag search. + $oneTagSearch = count($tags) === 1; + $dbLimit = $oneTagSearch ? $limit ?? 0 : 0; + $dbOffset = $oneTagSearch ? $offset ?? 0 : 0; + + foreach ($tags as $tag) { + $tagName = $tag->getName(); + $tmpNodes = $this->userFolder->searchBySystemTag($tagName, $this->userSession->getUser()->getUID(), $dbLimit, $dbOffset); + if (count($nodes) === 0) { + $nodes = $tmpNodes; + } else { + $nodes = array_uintersect($nodes, $tmpNodes, function (INode $a, INode $b): int { + return $a->getId() - $b->getId(); + }); + } + if ($nodes === []) { + // there cannot be a common match when nodes are empty early. + return $nodes; + } } - if (empty($resultFileIds)) { - // Empty intersection, nothing can show up anymore - return []; + if (!$oneTagSearch && ($limit !== null || $offset !== null)) { + $nodes = array_slice($nodes, $offset, $limit); } } - return $resultFileIds; + + return $nodes; } /** @@ -406,7 +421,10 @@ class FilesReportPlugin extends ServerPlugin { * @param array $fileIds file ids * @return Node[] array of Sabre nodes */ - public function findNodesByFileIds($rootNode, $fileIds) { + public function findNodesByFileIds(Node $rootNode, array $fileIds): array { + if (empty($fileIds)) { + return []; + } $folder = $this->userFolder; if (trim($rootNode->getPath(), '/') !== '') { $folder = $folder->get($rootNode->getPath()); @@ -417,17 +435,21 @@ class FilesReportPlugin extends ServerPlugin { $entry = $folder->getById($fileId); if ($entry) { $entry = current($entry); - if ($entry instanceof \OCP\Files\File) { - $results[] = new File($this->fileView, $entry); - } elseif ($entry instanceof \OCP\Files\Folder) { - $results[] = new Directory($this->fileView, $entry); - } + $results[] = $this->wrapNode($entry); } } return $results; } + protected function wrapNode(\OCP\Files\File|\OCP\Files\Folder $node): File|Directory { + if ($node instanceof \OCP\Files\File) { + return new File($this->fileView, $node); + } else { + return new Directory($this->fileView, $node); + } + } + /** * Returns whether the currently logged in user is an administrator */ diff --git a/apps/dav/lib/DAV/CustomPropertiesBackend.php b/apps/dav/lib/DAV/CustomPropertiesBackend.php index 0110990a408..a1da75e9ec1 100644 --- a/apps/dav/lib/DAV/CustomPropertiesBackend.php +++ b/apps/dav/lib/DAV/CustomPropertiesBackend.php @@ -22,9 +22,11 @@ * along with this program. If not, see <http://www.gnu.org/licenses/> * */ + namespace OCA\DAV\DAV; use Exception; +use OCA\DAV\Connector\Sabre\Directory; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\IDBConnection; use OCP\IUser; @@ -134,7 +136,8 @@ class CustomPropertiesBackend implements BackendInterface { public function __construct( Tree $tree, IDBConnection $connection, - IUser $user) { + IUser $user + ) { $this->tree = $tree; $this->connection = $connection; $this->user = $user; @@ -180,6 +183,11 @@ class CustomPropertiesBackend implements BackendInterface { return; } + $node = $this->tree->getNodeForPath($path); + if ($node instanceof Directory && $propFind->getDepth() !== 0) { + $this->cacheDirectory($path, $node); + } + // First fetch the published properties (set by another user), then get the ones set by // the current user. If both are set then the latter as priority. foreach ($this->getPublishedProperties($path, $requestedProps) as $propName => $propValue) { @@ -263,6 +271,38 @@ class CustomPropertiesBackend implements BackendInterface { } /** + * prefetch all user properties in a directory + */ + private function cacheDirectory(string $path, Directory $node): void { + $prefix = ltrim($path . '/', '/'); + $query = $this->connection->getQueryBuilder(); + $query->select('name', 'propertypath', 'propertyname', 'propertyvalue', 'valuetype') + ->from('filecache', 'f') + ->leftJoin('f', 'properties', 'p', $query->expr()->andX( + $query->expr()->eq('propertypath', $query->func()->concat( + $query->createNamedParameter($prefix), + 'name' + )), + $query->expr()->eq('userid', $query->createNamedParameter($this->user->getUID())) + )) + ->where($query->expr()->eq('parent', $query->createNamedParameter($node->getInternalFileId(), IQueryBuilder::PARAM_INT))); + $result = $query->executeQuery(); + + $propsByPath = []; + + while ($row = $result->fetch()) { + $childPath = $prefix . $row['name']; + if (!isset($propsByPath[$childPath])) { + $propsByPath[$childPath] = []; + } + if (isset($row['propertyname'])) { + $propsByPath[$childPath][$row['propertyname']] = $this->decodeValueFromDatabase($row['propertyvalue'], $row['valuetype']); + } + } + $this->userCache = array_merge($this->userCache, $propsByPath); + } + + /** * Returns a list of properties for the given path and current user * * @param string $path @@ -321,7 +361,7 @@ class CustomPropertiesBackend implements BackendInterface { $dbParameters = [ 'userid' => $this->user->getUID(), 'propertyPath' => $this->formatPath($path), - 'propertyName' => $propertyName + 'propertyName' => $propertyName, ]; // If it was null, we need to delete the property diff --git a/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php b/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php index 69096d0cfbb..1be42c22ed7 100644 --- a/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php +++ b/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php @@ -29,6 +29,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/> * */ + namespace OCA\DAV\Tests\unit\CalDAV; use DateTime; @@ -663,16 +664,25 @@ EOS; } } - public function providesCalDataForGetDenormalizedData() { + public function providesCalDataForGetDenormalizedData(): array { return [ 'first occurrence before unix epoch starts' => [0, 'firstOccurence', "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:413F269B-B51B-46B1-AFB6-40055C53A4DC\r\nDTSTAMP:20160309T095056Z\r\nDTSTART;VALUE=DATE:16040222\r\nDTEND;VALUE=DATE:16040223\r\nRRULE:FREQ=YEARLY\r\nSUMMARY:SUMMARY\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"], 'no first occurrence because yearly' => [null, 'firstOccurence', "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nUID:413F269B-B51B-46B1-AFB6-40055C53A4DC\r\nDTSTAMP:20160309T095056Z\r\nRRULE:FREQ=YEARLY\r\nSUMMARY:SUMMARY\r\nTRANSP:TRANSPARENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"], + 'last occurrence is max when only last VEVENT in group is weekly' => [(new DateTime(CalDavBackend::MAX_DATE))->getTimestamp(), 'lastOccurence', "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//Sabre//Sabre VObject 4.3.0//EN\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTART;TZID=America/Los_Angeles:20200812T103000\r\nDTEND;TZID=America/Los_Angeles:20200812T110000\r\nDTSTAMP:20200927T180638Z\r\nUID:asdfasdfasdf@google.com\r\nRECURRENCE-ID;TZID=America/Los_Angeles:20200811T123000\r\nCREATED:20200626T181848Z\r\nLAST-MODIFIED:20200922T192707Z\r\nSUMMARY:Weekly 1:1\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;TZID=America/Los_Angeles:20200728T123000\r\nDTEND;TZID=America/Los_Angeles:20200728T130000\r\nEXDATE;TZID=America/Los_Angeles:20200818T123000\r\nRRULE:FREQ=WEEKLY;BYDAY=TU\r\nDTSTAMP:20200927T180638Z\r\nUID:asdfasdfasdf@google.com\r\nCREATED:20200626T181848Z\r\nDESCRIPTION:Setting up recurring time on our calendars\r\nLAST-MODIFIED:20200922T192707Z\r\nSUMMARY:Weekly 1:1\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"], + + 'last occurrence before unix epoch starts' => [0, 'lastOccurence', "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//Sabre//Sabre VObject 4.3.0//EN\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:19110324\r\nDTEND;VALUE=DATE:19110325\r\nDTSTAMP:20200927T180638Z\r\nUID:asdfasdfasdf@google.com\r\nCREATED:20200626T181848Z\r\nDESCRIPTION:Very old event\r\nLAST-MODIFIED:20200922T192707Z\r\nSUMMARY:Some old event\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"], + 'first occurrence is found when not first VEVENT in group' => [(new DateTime('2020-09-01T110000', new DateTimeZone("America/Los_Angeles")))->getTimestamp(), 'firstOccurence', "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//Sabre//Sabre VObject 4.3.0//EN\r\nCALSCALE:GREGORIAN\r\nBEGIN:VEVENT\r\nDTSTART;TZID=America/Los_Angeles:20201013T110000\r\nDTEND;TZID=America/Los_Angeles:20201013T120000\r\nDTSTAMP:20200927T180638Z\r\nUID:asdf0000@google.com\r\nRECURRENCE-ID;TZID=America/Los_Angeles:20201013T110000\r\nCREATED:20160330T034726Z\r\nLAST-MODIFIED:20200925T042014Z\r\nSTATUS:CONFIRMED\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nDTSTART;TZID=America/Los_Angeles:20200901T110000\r\nDTEND;TZID=America/Los_Angeles:20200901T120000\r\nRRULE:FREQ=WEEKLY;BYDAY=TU\r\nEXDATE;TZID=America/Los_Angeles:20200922T110000\r\nEXDATE;TZID=America/Los_Angeles:20200915T110000\r\nEXDATE;TZID=America/Los_Angeles:20200908T110000\r\nDTSTAMP:20200927T180638Z\r\nUID:asdf0000@google.com\r\nCREATED:20160330T034726Z\r\nLAST-MODIFIED:20200915T162810Z\r\nSTATUS:CONFIRMED\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"], + 'CLASS:PRIVATE' => [CalDavBackend::CLASSIFICATION_PRIVATE, 'classification', "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//dmfs.org//mimedir.icalendar//EN\r\nBEGIN:VTIMEZONE\r\nTZID:Europe/Berlin\r\nX-LIC-LOCATION:Europe/Berlin\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nBEGIN:VEVENT\r\nDTSTART;TZID=Europe/Berlin:20160419T130000\r\nSUMMARY:Test\r\nCLASS:PRIVATE\r\nTRANSP:OPAQUE\r\nSTATUS:CONFIRMED\r\nDTEND;TZID=Europe/Berlin:20160419T140000\r\nLAST-MODIFIED:20160419T074202Z\r\nDTSTAMP:20160419T074202Z\r\nCREATED:20160419T074202Z\r\nUID:2e468c48-7860-492e-bc52-92fa0daeeccf.1461051722310\r\nEND:VEVENT\r\nEND:VCALENDAR"], + 'CLASS:PUBLIC' => [CalDavBackend::CLASSIFICATION_PUBLIC, 'classification', "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//dmfs.org//mimedir.icalendar//EN\r\nBEGIN:VTIMEZONE\r\nTZID:Europe/Berlin\r\nX-LIC-LOCATION:Europe/Berlin\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nBEGIN:VEVENT\r\nDTSTART;TZID=Europe/Berlin:20160419T130000\r\nSUMMARY:Test\r\nCLASS:PUBLIC\r\nTRANSP:OPAQUE\r\nSTATUS:CONFIRMED\r\nDTEND;TZID=Europe/Berlin:20160419T140000\r\nLAST-MODIFIED:20160419T074202Z\r\nDTSTAMP:20160419T074202Z\r\nCREATED:20160419T074202Z\r\nUID:2e468c48-7860-492e-bc52-92fa0daeeccf.1461051722310\r\nEND:VEVENT\r\nEND:VCALENDAR"], + 'CLASS:CONFIDENTIAL' => [CalDavBackend::CLASSIFICATION_CONFIDENTIAL, 'classification', "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//dmfs.org//mimedir.icalendar//EN\r\nBEGIN:VTIMEZONE\r\nTZID:Europe/Berlin\r\nX-LIC-LOCATION:Europe/Berlin\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nBEGIN:VEVENT\r\nDTSTART;TZID=Europe/Berlin:20160419T130000\r\nSUMMARY:Test\r\nCLASS:CONFIDENTIAL\r\nTRANSP:OPAQUE\r\nSTATUS:CONFIRMED\r\nDTEND;TZID=Europe/Berlin:20160419T140000\r\nLAST-MODIFIED:20160419T074202Z\r\nDTSTAMP:20160419T074202Z\r\nCREATED:20160419T074202Z\r\nUID:2e468c48-7860-492e-bc52-92fa0daeeccf.1461051722310\r\nEND:VEVENT\r\nEND:VCALENDAR"], + 'no class set -> public' => [CalDavBackend::CLASSIFICATION_PUBLIC, 'classification', "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//dmfs.org//mimedir.icalendar//EN\r\nBEGIN:VTIMEZONE\r\nTZID:Europe/Berlin\r\nX-LIC-LOCATION:Europe/Berlin\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nBEGIN:VEVENT\r\nDTSTART;TZID=Europe/Berlin:20160419T130000\r\nSUMMARY:Test\r\nTRANSP:OPAQUE\r\nDTEND;TZID=Europe/Berlin:20160419T140000\r\nLAST-MODIFIED:20160419T074202Z\r\nDTSTAMP:20160419T074202Z\r\nCREATED:20160419T074202Z\r\nUID:2e468c48-7860-492e-bc52-92fa0daeeccf.1461051722310\r\nEND:VEVENT\r\nEND:VCALENDAR"], + 'unknown class -> private' => [CalDavBackend::CLASSIFICATION_PRIVATE, 'classification', "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//dmfs.org//mimedir.icalendar//EN\r\nBEGIN:VTIMEZONE\r\nTZID:Europe/Berlin\r\nX-LIC-LOCATION:Europe/Berlin\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nBEGIN:VEVENT\r\nDTSTART;TZID=Europe/Berlin:20160419T130000\r\nSUMMARY:Test\r\nCLASS:VERTRAULICH\r\nTRANSP:OPAQUE\r\nSTATUS:CONFIRMED\r\nDTEND;TZID=Europe/Berlin:20160419T140000\r\nLAST-MODIFIED:20160419T074202Z\r\nDTSTAMP:20160419T074202Z\r\nCREATED:20160419T074202Z\r\nUID:2e468c48-7860-492e-bc52-92fa0daeeccf.1461051722310\r\nEND:VEVENT\r\nEND:VCALENDAR"], ]; } @@ -1291,6 +1301,8 @@ EOD; */ public function testPruneOutdatedSyncTokens(): void { $calendarId = $this->createTestCalendar(); + $changes = $this->backend->getChangesForCalendar($calendarId, '', 1); + $syncToken = $changes['syncToken']; $uri = static::getUniqueID('calobj'); $calData = <<<EOD @@ -1333,9 +1345,79 @@ EOD; $deleted = $this->backend->pruneOutdatedSyncTokens(0); // At least one from the object creation and one from the object update $this->assertGreaterThanOrEqual(2, $deleted); - $changes = $this->backend->getChangesForCalendar($calendarId, '5', 1); + $changes = $this->backend->getChangesForCalendar($calendarId, $syncToken, 1); $this->assertEmpty($changes['added']); $this->assertEmpty($changes['modified']); $this->assertEmpty($changes['deleted']); + + // Test that objects remain + + // Currently changes are empty + $changes = $this->backend->getChangesForCalendar($calendarId, $syncToken, 100); + $this->assertEquals(0, count($changes['added'] + $changes['modified'] + $changes['deleted'])); + + // Create card + $uri = static::getUniqueID('calobj'); +$calData = <<<EOD +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:Nextcloud Calendar +BEGIN:VEVENT +CREATED;VALUE=DATE-TIME:20230910T125139Z +UID:47d15e3ec9 +LAST-MODIFIED;VALUE=DATE-TIME:20230910T125139Z +DTSTAMP;VALUE=DATE-TIME:20230910T125139Z +SUMMARY:Test Event +DTSTART;VALUE=DATE-TIME:20230912T130000Z +DTEND;VALUE=DATE-TIME:20230912T140000Z +CLASS:PUBLIC +END:VEVENT +END:VCALENDAR +EOD; + $this->backend->createCalendarObject($calendarId, $uri, $calData); + + // We now have one add + $changes = $this->backend->getChangesForCalendar($calendarId, $syncToken, 100); + $this->assertEquals(1, count($changes['added'])); + $this->assertEmpty($changes['modified']); + $this->assertEmpty($changes['deleted']); + + // update the card + $calData = <<<'EOD' +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:Nextcloud Calendar +BEGIN:VEVENT +CREATED;VALUE=DATE-TIME:20230910T125139Z +UID:47d15e3ec9 +LAST-MODIFIED;VALUE=DATE-TIME:20230910T125139Z +DTSTAMP;VALUE=DATE-TIME:20230910T125139Z +SUMMARY:123 Event 🙈 +DTSTART;VALUE=DATE-TIME:20230912T130000Z +DTEND;VALUE=DATE-TIME:20230912T140000Z +ATTENDEE;CN=test:mailto:foo@bar.com +END:VEVENT +END:VCALENDAR +EOD; + $this->backend->updateCalendarObject($calendarId, $uri, $calData); + + // One add, one modify, but shortened to modify + $changes = $this->backend->getChangesForCalendar($calendarId, $syncToken, 100); + $this->assertEmpty($changes['added']); + $this->assertEquals(1, count($changes['modified'])); + $this->assertEmpty($changes['deleted']); + + // Delete all but last change + $deleted = $this->backend->pruneOutdatedSyncTokens(1); + $this->assertEquals(1, $deleted); // We had two changes before, now one + + // Only update should remain + $changes = $this->backend->getChangesForCalendar($calendarId, $syncToken, 100); + $this->assertEmpty($changes['added']); + $this->assertEquals(1, count($changes['modified'])); + $this->assertEmpty($changes['deleted']); + + // Check that no crash occurs when prune is called without current changes + $deleted = $this->backend->pruneOutdatedSyncTokens(1); } } diff --git a/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php b/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php index adf64ef82b0..425e7c44ba7 100644 --- a/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php +++ b/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php @@ -853,15 +853,54 @@ class CardDavBackendTest extends TestCase { */ public function testPruneOutdatedSyncTokens(): void { $addressBookId = $this->backend->createAddressBook(self::UNIT_TEST_USER, 'Example', []); + $changes = $this->backend->getChangesForAddressBook($addressBookId, '', 1); + $syncToken = $changes['syncToken']; + $uri = $this->getUniqueID('card'); $this->backend->createCard($addressBookId, $uri, $this->vcardTest0); $this->backend->updateCard($addressBookId, $uri, $this->vcardTest1); $deleted = $this->backend->pruneOutdatedSyncTokens(0); // At least one from the object creation and one from the object update $this->assertGreaterThanOrEqual(2, $deleted); - $changes = $this->backend->getChangesForAddressBook($addressBookId, '5', 1); + $changes = $this->backend->getChangesForAddressBook($addressBookId, $syncToken, 1); $this->assertEmpty($changes['added']); $this->assertEmpty($changes['modified']); $this->assertEmpty($changes['deleted']); + + // Test that objects remain + + // Currently changes are empty + $changes = $this->backend->getChangesForAddressBook($addressBookId, $syncToken, 100); + $this->assertEquals(0, count($changes['added'] + $changes['modified'] + $changes['deleted'])); + + // Create card + $uri = $this->getUniqueID('card'); + $this->backend->createCard($addressBookId, $uri, $this->vcardTest0); + // We now have one add + $changes = $this->backend->getChangesForAddressBook($addressBookId, $syncToken, 100); + $this->assertEquals(1, count($changes['added'])); + $this->assertEmpty($changes['modified']); + $this->assertEmpty($changes['deleted']); + + // Update card + $this->backend->updateCard($addressBookId, $uri, $this->vcardTest1); + // One add, one modify, but shortened to modify + $changes = $this->backend->getChangesForAddressBook($addressBookId, $syncToken, 100); + $this->assertEmpty($changes['added']); + $this->assertEquals(1, count($changes['modified'])); + $this->assertEmpty($changes['deleted']); + + // Delete all but last change + $deleted = $this->backend->pruneOutdatedSyncTokens(1); + $this->assertEquals(1, $deleted); // We had two changes before, now one + + // Only update should remain + $changes = $this->backend->getChangesForAddressBook($addressBookId, $syncToken, 100); + $this->assertEmpty($changes['added']); + $this->assertEquals(1, count($changes['modified'])); + $this->assertEmpty($changes['deleted']); + + // Check that no crash occurs when prune is called without current changes + $deleted = $this->backend->pruneOutdatedSyncTokens(1); } } diff --git a/apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php index 3119d715bec..2bbe7bef6de 100644 --- a/apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php @@ -44,45 +44,49 @@ use OCP\IUserSession; use OCP\SystemTag\ISystemTag; use OCP\SystemTag\ISystemTagManager; use OCP\SystemTag\ISystemTagObjectMapper; +use OCP\SystemTag\TagNotFoundException; +use PHPUnit\Framework\MockObject\MockObject; use Sabre\DAV\INode; use Sabre\DAV\Tree; use Sabre\HTTP\ResponseInterface; class FilesReportPluginTest extends \Test\TestCase { - /** @var \Sabre\DAV\Server|\PHPUnit\Framework\MockObject\MockObject */ + /** @var \Sabre\DAV\Server|MockObject */ private $server; - /** @var \Sabre\DAV\Tree|\PHPUnit\Framework\MockObject\MockObject */ + /** @var \Sabre\DAV\Tree|MockObject */ private $tree; - /** @var ISystemTagObjectMapper|\PHPUnit\Framework\MockObject\MockObject */ + /** @var ISystemTagObjectMapper|MockObject */ private $tagMapper; - /** @var ISystemTagManager|\PHPUnit\Framework\MockObject\MockObject */ + /** @var ISystemTagManager|MockObject */ private $tagManager; - /** @var ITags|\PHPUnit\Framework\MockObject\MockObject */ + /** @var ITags|MockObject */ private $privateTags; + private ITagManager|MockObject $privateTagManager; + /** @var \OCP\IUserSession */ private $userSession; /** @var FilesReportPluginImplementation */ private $plugin; - /** @var View|\PHPUnit\Framework\MockObject\MockObject **/ + /** @var View|MockObject **/ private $view; - /** @var IGroupManager|\PHPUnit\Framework\MockObject\MockObject **/ + /** @var IGroupManager|MockObject **/ private $groupManager; - /** @var Folder|\PHPUnit\Framework\MockObject\MockObject **/ + /** @var Folder|MockObject **/ private $userFolder; - /** @var IPreview|\PHPUnit\Framework\MockObject\MockObject * */ + /** @var IPreview|MockObject * */ private $previewManager; - /** @var IAppManager|\PHPUnit\Framework\MockObject\MockObject * */ + /** @var IAppManager|MockObject * */ private $appManager; protected function setUp(): void { @@ -110,6 +114,8 @@ class FilesReportPluginTest extends \Test\TestCase { $this->userFolder = $this->getMockBuilder(Folder::class) ->disableOriginalConstructor() + ->addMethods(['searchBySystemTag']) + ->onlyMethods(get_class_methods(Folder::class)) ->getMock(); $this->previewManager = $this->getMockBuilder(IPreview::class) @@ -124,8 +130,8 @@ class FilesReportPluginTest extends \Test\TestCase { $this->tagMapper = $this->createMock(ISystemTagObjectMapper::class); $this->userSession = $this->createMock(IUserSession::class); $this->privateTags = $this->createMock(ITags::class); - $privateTagManager = $this->createMock(ITagManager::class); - $privateTagManager->expects($this->any()) + $this->privateTagManager = $this->createMock(ITagManager::class); + $this->privateTagManager->expects($this->any()) ->method('load') ->with('files') ->willReturn($this->privateTags); @@ -145,7 +151,7 @@ class FilesReportPluginTest extends \Test\TestCase { $this->view, $this->tagManager, $this->tagMapper, - $privateTagManager, + $this->privateTagManager, $this->userSession, $this->groupManager, $this->userFolder, @@ -217,17 +223,6 @@ class FilesReportPluginTest extends \Test\TestCase { ->method('isAdmin') ->willReturn(true); - $this->tagMapper->expects($this->exactly(2)) - ->method('getObjectIdsForTags') - ->withConsecutive( - ['123', 'files'], - ['456', 'files'], - ) - ->willReturnOnConsecutiveCalls( - ['111', '222'], - ['111', '222', '333'], - ); - $reportTargetNode = $this->getMockBuilder(Directory::class) ->disableOriginalConstructor() ->getMock(); @@ -255,20 +250,40 @@ class FilesReportPluginTest extends \Test\TestCase { ->with('/' . $path) ->willReturn($reportTargetNode); - $filesNode1 = $this->getMockBuilder(Folder::class) - ->disableOriginalConstructor() - ->getMock(); - $filesNode2 = $this->getMockBuilder(File::class) - ->disableOriginalConstructor() - ->getMock(); - $filesNode2->method('getSize') + $filesNode1 = $this->createMock(File::class); + $filesNode1->expects($this->any()) + ->method('getSize') + ->willReturn(12); + $filesNode2 = $this->createMock(Folder::class); + $filesNode2->expects($this->any()) + ->method('getSize') ->willReturn(10); + $tag123 = $this->createMock(ISystemTag::class); + $tag123->expects($this->any()) + ->method('getName') + ->willReturn('OneTwoThree'); + $tag123->expects($this->any()) + ->method('isUserVisible') + ->willReturn(true); + $tag456 = $this->createMock(ISystemTag::class); + $tag456->expects($this->any()) + ->method('getName') + ->willReturn('FourFiveSix'); + $tag456->expects($this->any()) + ->method('isUserVisible') + ->willReturn(true); + + $this->tagManager->expects($this->once()) + ->method('getTagsByIds') + ->with(['123', '456']) + ->willReturn([$tag123, $tag456]); + $this->userFolder->expects($this->exactly(2)) - ->method('getById') + ->method('searchBySystemTag') ->withConsecutive( - ['111'], - ['222'], + ['OneTwoThree'], + ['FourFiveSix'], ) ->willReturnOnConsecutiveCalls( [$filesNode1], @@ -317,7 +332,7 @@ class FilesReportPluginTest extends \Test\TestCase { [$filesNode2], ); - /** @var \OCA\DAV\Connector\Sabre\Directory|\PHPUnit\Framework\MockObject\MockObject $reportTargetNode */ + /** @var \OCA\DAV\Connector\Sabre\Directory|MockObject $reportTargetNode */ $result = $this->plugin->findNodesByFileIds($reportTargetNode, ['111', '222']); $this->assertCount(2, $result); @@ -370,7 +385,7 @@ class FilesReportPluginTest extends \Test\TestCase { [$filesNode2], ); - /** @var \OCA\DAV\Connector\Sabre\Directory|\PHPUnit\Framework\MockObject\MockObject $reportTargetNode */ + /** @var \OCA\DAV\Connector\Sabre\Directory|MockObject $reportTargetNode */ $result = $this->plugin->findNodesByFileIds($reportTargetNode, ['111', '222']); $this->assertCount(2, $result); @@ -454,20 +469,38 @@ class FilesReportPluginTest extends \Test\TestCase { ->method('isAdmin') ->willReturn(true); - $this->tagMapper->expects($this->exactly(1)) - ->method('getObjectIdsForTags') - ->withConsecutive( - ['123', 'files'] - ) - ->willReturnMap([ - ['123', 'files', 0, '', ['111', '222']], - ]); - $rules = [ ['name' => '{http://owncloud.org/ns}systemtag', 'value' => '123'], ]; - $this->assertEquals(['111', '222'], $this->invokePrivate($this->plugin, 'processFilterRules', [$rules])); + $filesNode1 = $this->createMock(File::class); + $filesNode1->expects($this->any()) + ->method('getSize') + ->willReturn(12); + $filesNode2 = $this->createMock(Folder::class); + $filesNode2->expects($this->any()) + ->method('getSize') + ->willReturn(10); + + $tag123 = $this->createMock(ISystemTag::class); + $tag123->expects($this->any()) + ->method('getName') + ->willReturn('OneTwoThree'); + $tag123->expects($this->any()) + ->method('isUserVisible') + ->willReturn(true); + + $this->tagManager->expects($this->once()) + ->method('getTagsByIds') + ->with(['123']) + ->willReturn([$tag123]); + + $this->userFolder->expects($this->once()) + ->method('searchBySystemTag') + ->with('OneTwoThree') + ->willReturn([$filesNode1, $filesNode2]); + + $this->assertEquals([$filesNode1, $filesNode2], $this->invokePrivate($this->plugin, 'processFilterRulesForFileNodes', [$rules, 0, 0])); } public function testProcessFilterRulesAndCondition(): void { @@ -475,23 +508,65 @@ class FilesReportPluginTest extends \Test\TestCase { ->method('isAdmin') ->willReturn(true); - $this->tagMapper->expects($this->exactly(2)) - ->method('getObjectIdsForTags') + $filesNode1 = $this->createMock(File::class); + $filesNode1->expects($this->any()) + ->method('getSize') + ->willReturn(12); + $filesNode1->expects($this->any()) + ->method('getId') + ->willReturn(111); + $filesNode2 = $this->createMock(Folder::class); + $filesNode2->expects($this->any()) + ->method('getSize') + ->willReturn(10); + $filesNode2->expects($this->any()) + ->method('getId') + ->willReturn(222); + $filesNode3 = $this->createMock(File::class); + $filesNode3->expects($this->any()) + ->method('getSize') + ->willReturn(14); + $filesNode3->expects($this->any()) + ->method('getId') + ->willReturn(333); + + $tag123 = $this->createMock(ISystemTag::class); + $tag123->expects($this->any()) + ->method('getName') + ->willReturn('OneTwoThree'); + $tag123->expects($this->any()) + ->method('isUserVisible') + ->willReturn(true); + $tag456 = $this->createMock(ISystemTag::class); + $tag456->expects($this->any()) + ->method('getName') + ->willReturn('FourFiveSix'); + $tag456->expects($this->any()) + ->method('isUserVisible') + ->willReturn(true); + + $this->tagManager->expects($this->once()) + ->method('getTagsByIds') + ->with(['123', '456']) + ->willReturn([$tag123, $tag456]); + + $this->userFolder->expects($this->exactly(2)) + ->method('searchBySystemTag') ->withConsecutive( - ['123', 'files'], - ['456', 'files'] + ['OneTwoThree'], + ['FourFiveSix'], ) - ->willReturnMap([ - ['123', 'files', 0, '', ['111', '222']], - ['456', 'files', 0, '', ['222', '333']], - ]); + ->willReturnOnConsecutiveCalls( + [$filesNode1, $filesNode2], + [$filesNode2, $filesNode3], + ); $rules = [ ['name' => '{http://owncloud.org/ns}systemtag', 'value' => '123'], ['name' => '{http://owncloud.org/ns}systemtag', 'value' => '456'], ]; - $this->assertEquals(['222'], array_values($this->invokePrivate($this->plugin, 'processFilterRules', [$rules]))); + $this->assertEquals([$filesNode2], array_values($this->invokePrivate($this->plugin, 'processFilterRulesForFileNodes', [$rules, null, null]))); } public function testProcessFilterRulesAndConditionWithOneEmptyResult(): void { @@ -499,23 +574,58 @@ class FilesReportPluginTest extends \Test\TestCase { ->method('isAdmin') ->willReturn(true); - $this->tagMapper->expects($this->exactly(2)) - ->method('getObjectIdsForTags') + $filesNode1 = $this->createMock(File::class); + $filesNode1->expects($this->any()) + ->method('getSize') + ->willReturn(12); + $filesNode1->expects($this->any()) + ->method('getId') + ->willReturn(111); + $filesNode2 = $this->createMock(Folder::class); + $filesNode2->expects($this->any()) + ->method('getSize') + ->willReturn(10); + $filesNode2->expects($this->any()) + ->method('getId') + ->willReturn(222); + + $tag123 = $this->createMock(ISystemTag::class); + $tag123->expects($this->any()) + ->method('getName') + ->willReturn('OneTwoThree'); + $tag123->expects($this->any()) + ->method('isUserVisible') + ->willReturn(true); + $tag456 = $this->createMock(ISystemTag::class); + $tag456->expects($this->any()) + ->method('getName') + ->willReturn('FourFiveSix'); + $tag456->expects($this->any()) + ->method('isUserVisible') + ->willReturn(true); + + $this->tagManager->expects($this->once()) + ->method('getTagsByIds') + ->with(['123', '456']) + ->willReturn([$tag123, $tag456]); + + $this->userFolder->expects($this->exactly(2)) + ->method('searchBySystemTag') ->withConsecutive( - ['123', 'files'], - ['456', 'files'] + ['OneTwoThree'], + ['FourFiveSix'], ) - ->willReturnMap([ - ['123', 'files', 0, '', ['111', '222']], - ['456', 'files', 0, '', []], - ]); + ->willReturnOnConsecutiveCalls( + [$filesNode1, $filesNode2], + [], + ); $rules = [ ['name' => '{http://owncloud.org/ns}systemtag', 'value' => '123'], ['name' => '{http://owncloud.org/ns}systemtag', 'value' => '456'], ]; - $this->assertEquals([], array_values($this->invokePrivate($this->plugin, 'processFilterRules', [$rules]))); + $this->assertEquals([], $this->invokePrivate($this->plugin, 'processFilterRulesForFileNodes', [$rules, null, null])); } public function testProcessFilterRulesAndConditionWithFirstEmptyResult(): void { @@ -523,23 +633,55 @@ class FilesReportPluginTest extends \Test\TestCase { ->method('isAdmin') ->willReturn(true); - $this->tagMapper->expects($this->exactly(1)) - ->method('getObjectIdsForTags') - ->withConsecutive( - ['123', 'files'], - ['456', 'files'] - ) - ->willReturnMap([ - ['123', 'files', 0, '', []], - ['456', 'files', 0, '', ['111', '222']], - ]); + $filesNode1 = $this->createMock(File::class); + $filesNode1->expects($this->any()) + ->method('getSize') + ->willReturn(12); + $filesNode1->expects($this->any()) + ->method('getId') + ->willReturn(111); + $filesNode2 = $this->createMock(Folder::class); + $filesNode2->expects($this->any()) + ->method('getSize') + ->willReturn(10); + $filesNode2->expects($this->any()) + ->method('getId') + ->willReturn(222); + + $tag123 = $this->createMock(ISystemTag::class); + $tag123->expects($this->any()) + ->method('getName') + ->willReturn('OneTwoThree'); + $tag123->expects($this->any()) + ->method('isUserVisible') + ->willReturn(true); + $tag456 = $this->createMock(ISystemTag::class); + $tag456->expects($this->any()) + ->method('getName') + ->willReturn('FourFiveSix'); + $tag456->expects($this->any()) + ->method('isUserVisible') + ->willReturn(true); + + $this->tagManager->expects($this->once()) + ->method('getTagsByIds') + ->with(['123', '456']) + ->willReturn([$tag123, $tag456]); + + $this->userFolder->expects($this->once()) + ->method('searchBySystemTag') + ->with('OneTwoThree') + ->willReturnOnConsecutiveCalls( + [], + [$filesNode1, $filesNode2], + ); $rules = [ ['name' => '{http://owncloud.org/ns}systemtag', 'value' => '123'], ['name' => '{http://owncloud.org/ns}systemtag', 'value' => '456'], ]; - $this->assertEquals([], array_values($this->invokePrivate($this->plugin, 'processFilterRules', [$rules]))); + $this->assertEquals([], $this->invokePrivate($this->plugin, 'processFilterRulesForFileNodes', [$rules, null, null])); } public function testProcessFilterRulesAndConditionWithEmptyMidResult(): void { @@ -547,18 +689,63 @@ class FilesReportPluginTest extends \Test\TestCase { ->method('isAdmin') ->willReturn(true); - $this->tagMapper->expects($this->exactly(2)) - ->method('getObjectIdsForTags') - ->withConsecutive( - ['123', 'files'], - ['456', 'files'], - ['789', 'files'] - ) - ->willReturnMap([ - ['123', 'files', 0, '', ['111', '222']], - ['456', 'files', 0, '', ['333']], - ['789', 'files', 0, '', ['111', '222']], - ]); + $filesNode1 = $this->createMock(File::class); + $filesNode1->expects($this->any()) + ->method('getSize') + ->willReturn(12); + $filesNode1->expects($this->any()) + ->method('getId') + ->willReturn(111); + $filesNode2 = $this->createMock(Folder::class); + $filesNode2->expects($this->any()) + ->method('getSize') + ->willReturn(10); + $filesNode2->expects($this->any()) + ->method('getId') + ->willReturn(222); + $filesNode3 = $this->createMock(Folder::class); + $filesNode3->expects($this->any()) + ->method('getSize') + ->willReturn(13); + $filesNode3->expects($this->any()) + ->method('getId') + ->willReturn(333); + + $tag123 = $this->createMock(ISystemTag::class); + $tag123->expects($this->any()) + ->method('getName') + ->willReturn('OneTwoThree'); + $tag123->expects($this->any()) + ->method('isUserVisible') + ->willReturn(true); + $tag456 = $this->createMock(ISystemTag::class); + $tag456->expects($this->any()) + ->method('getName') + ->willReturn('FourFiveSix'); + $tag456->expects($this->any()) + ->method('isUserVisible') + ->willReturn(true); + $tag789 = $this->createMock(ISystemTag::class); + $tag789->expects($this->any()) + ->method('getName') + ->willReturn('SevenEightNein'); + $tag789->expects($this->any()) + ->method('isUserVisible') + ->willReturn(true); + + $this->tagManager->expects($this->once()) + ->method('getTagsByIds') + ->with(['123', '456', '789']) + ->willReturn([$tag123, $tag456, $tag789]); + + $this->userFolder->expects($this->exactly(2)) + ->method('searchBySystemTag') + ->withConsecutive(['OneTwoThree'], ['FourFiveSix'], ['SevenEightNein']) + ->willReturnOnConsecutiveCalls( + [$filesNode1, $filesNode2], + [$filesNode3], + [$filesNode1, $filesNode2], + ); $rules = [ ['name' => '{http://owncloud.org/ns}systemtag', 'value' => '123'], @@ -566,7 +753,7 @@ class FilesReportPluginTest extends \Test\TestCase { ['name' => '{http://owncloud.org/ns}systemtag', 'value' => '789'], ]; - $this->assertEquals([], array_values($this->invokePrivate($this->plugin, 'processFilterRules', [$rules]))); + $this->assertEquals([], array_values($this->invokePrivate($this->plugin, 'processFilterRulesForFileNodes', [$rules, null, null]))); } public function testProcessFilterRulesInvisibleTagAsAdmin(): void { @@ -574,39 +761,54 @@ class FilesReportPluginTest extends \Test\TestCase { ->method('isAdmin') ->willReturn(true); - $tag1 = $this->getMockBuilder(ISystemTag::class) - ->disableOriginalConstructor() - ->getMock(); - $tag1->expects($this->any()) + $filesNode1 = $this->createMock(File::class); + $filesNode1->expects($this->any()) + ->method('getSize') + ->willReturn(12); + $filesNode1->expects($this->any()) ->method('getId') - ->willReturn('123'); - $tag1->expects($this->any()) + ->willReturn(111); + $filesNode2 = $this->createMock(Folder::class); + $filesNode2->expects($this->any()) + ->method('getSize') + ->willReturn(10); + $filesNode2->expects($this->any()) + ->method('getId') + ->willReturn(222); + $filesNode3 = $this->createMock(Folder::class); + $filesNode3->expects($this->any()) + ->method('getSize') + ->willReturn(13); + $filesNode3->expects($this->any()) + ->method('getId') + ->willReturn(333); + + $tag123 = $this->createMock(ISystemTag::class); + $tag123->expects($this->any()) + ->method('getName') + ->willReturn('OneTwoThree'); + $tag123->expects($this->any()) ->method('isUserVisible') ->willReturn(true); - - $tag2 = $this->getMockBuilder(ISystemTag::class) - ->disableOriginalConstructor() - ->getMock(); - $tag2->expects($this->any()) - ->method('getId') - ->willReturn('123'); - $tag2->expects($this->any()) + $tag456 = $this->createMock(ISystemTag::class); + $tag456->expects($this->any()) + ->method('getName') + ->willReturn('FourFiveSix'); + $tag456->expects($this->any()) ->method('isUserVisible') ->willReturn(false); - // no need to fetch tags to check permissions - $this->tagManager->expects($this->never()) - ->method('getTagsByIds'); + $this->tagManager->expects($this->once()) + ->method('getTagsByIds') + ->with(['123', '456']) + ->willReturn([$tag123, $tag456]); - $this->tagMapper->expects($this->exactly(2)) - ->method('getObjectIdsForTags') - ->withConsecutive( - ['123'], - ['456'], - ) + $this->userFolder->expects($this->exactly(2)) + ->method('searchBySystemTag') + ->withConsecutive(['OneTwoThree'], ['FourFiveSix']) ->willReturnOnConsecutiveCalls( - ['111', '222'], - ['222', '333'], + [$filesNode1, $filesNode2], + [$filesNode2, $filesNode3], ); $rules = [ @@ -614,48 +816,46 @@ class FilesReportPluginTest extends \Test\TestCase { ['name' => '{http://owncloud.org/ns}systemtag', 'value' => '456'], ]; - $this->assertEquals(['222'], array_values($this->invokePrivate($this->plugin, 'processFilterRules', [$rules]))); + $this->assertEquals([$filesNode2], array_values($this->invokePrivate($this->plugin, 'processFilterRulesForFileNodes', [$rules, null, null]))); } public function testProcessFilterRulesInvisibleTagAsUser(): void { - $this->expectException(\OCP\SystemTag\TagNotFoundException::class); + $this->expectException(TagNotFoundException::class); $this->groupManager->expects($this->any()) ->method('isAdmin') ->willReturn(false); - $tag1 = $this->getMockBuilder(ISystemTag::class) - ->disableOriginalConstructor() - ->getMock(); - $tag1->expects($this->any()) - ->method('getId') - ->willReturn('123'); - $tag1->expects($this->any()) + $tag123 = $this->createMock(ISystemTag::class); + $tag123->expects($this->any()) + ->method('getName') + ->willReturn('OneTwoThree'); + $tag123->expects($this->any()) ->method('isUserVisible') ->willReturn(true); - - $tag2 = $this->getMockBuilder(ISystemTag::class) - ->disableOriginalConstructor() - ->getMock(); - $tag2->expects($this->any()) - ->method('getId') - ->willReturn('123'); - $tag2->expects($this->any()) + $tag456 = $this->createMock(ISystemTag::class); + $tag456->expects($this->any()) + ->method('getName') + ->willReturn('FourFiveSix'); + $tag456->expects($this->any()) ->method('isUserVisible') - ->willReturn(false); // invisible + ->willReturn(false); $this->tagManager->expects($this->once()) ->method('getTagsByIds') ->with(['123', '456']) - ->willReturn([$tag1, $tag2]); + ->willThrowException(new TagNotFoundException()); + + $this->userFolder->expects($this->never()) + ->method('searchBySystemTag'); $rules = [ ['name' => '{http://owncloud.org/ns}systemtag', 'value' => '123'], ['name' => '{http://owncloud.org/ns}systemtag', 'value' => '456'], ]; - $this->invokePrivate($this->plugin, 'processFilterRules', [$rules]); + $this->invokePrivate($this->plugin, 'processFilterRulesForFileNodes', [$rules, null, null]); } public function testProcessFilterRulesVisibleTagAsUser(): void { @@ -663,40 +863,67 @@ class FilesReportPluginTest extends \Test\TestCase { ->method('isAdmin') ->willReturn(false); - $tag1 = $this->getMockBuilder(ISystemTag::class) - ->disableOriginalConstructor() - ->getMock(); + $tag1 = $this->createMock(ISystemTag::class); $tag1->expects($this->any()) ->method('getId') ->willReturn('123'); $tag1->expects($this->any()) ->method('isUserVisible') ->willReturn(true); + $tag1->expects($this->any()) + ->method('getName') + ->willReturn('OneTwoThree'); - $tag2 = $this->getMockBuilder(ISystemTag::class) - ->disableOriginalConstructor() - ->getMock(); + $tag2 = $this->createMock(ISystemTag::class); $tag2->expects($this->any()) ->method('getId') ->willReturn('123'); $tag2->expects($this->any()) ->method('isUserVisible') ->willReturn(true); + $tag2->expects($this->any()) + ->method('getName') + ->willReturn('FourFiveSix'); $this->tagManager->expects($this->once()) ->method('getTagsByIds') ->with(['123', '456']) ->willReturn([$tag1, $tag2]); - $this->tagMapper->expects($this->exactly(2)) - ->method('getObjectIdsForTags') - ->withConsecutive( - ['123'], - ['456'], - ) + $filesNode1 = $this->createMock(File::class); + $filesNode1->expects($this->any()) + ->method('getId') + ->willReturn(111); + $filesNode1->expects($this->any()) + ->method('getSize') + ->willReturn(12); + $filesNode2 = $this->createMock(Folder::class); + $filesNode2->expects($this->any()) + ->method('getId') + ->willReturn(222); + $filesNode2->expects($this->any()) + ->method('getSize') + ->willReturn(10); + $filesNode3 = $this->createMock(Folder::class); + $filesNode3->expects($this->any()) + ->method('getId') + ->willReturn(333); + $filesNode3->expects($this->any()) + ->method('getSize') + ->willReturn(33); + + $this->tagManager->expects($this->once()) + ->method('getTagsByIds') + ->with(['123', '456']) + ->willReturn([$tag1, $tag2]); + + // main assertion: only user visible tags are being passed through. + $this->userFolder->expects($this->exactly(2)) + ->method('searchBySystemTag') + ->withConsecutive(['OneTwoThree'], ['FourFiveSix']) ->willReturnOnConsecutiveCalls( - ['111', '222'], - ['222', '333'], + [$filesNode1, $filesNode2], + [$filesNode2, $filesNode3], ); $rules = [ @@ -704,7 +931,7 @@ class FilesReportPluginTest extends \Test\TestCase { ['name' => '{http://owncloud.org/ns}systemtag', 'value' => '456'], ]; - $this->assertEquals(['222'], array_values($this->invokePrivate($this->plugin, 'processFilterRules', [$rules]))); + $this->assertEquals([$filesNode2], array_values($this->invokePrivate($this->plugin, 'processFilterRulesForFileNodes', [$rules, null, null]))); } public function testProcessFavoriteFilter(): void { @@ -716,7 +943,7 @@ class FilesReportPluginTest extends \Test\TestCase { ->method('getFavorites') ->willReturn(['456', '789']); - $this->assertEquals(['456', '789'], array_values($this->invokePrivate($this->plugin, 'processFilterRules', [$rules]))); + $this->assertEquals(['456', '789'], array_values($this->invokePrivate($this->plugin, 'processFilterRulesForFileIDs', [$rules]))); } public function filesBaseUriProvider() { diff --git a/apps/encryption/l10n/gl.js b/apps/encryption/l10n/gl.js index c2a030b3a14..840f4d041f1 100644 --- a/apps/encryption/l10n/gl.js +++ b/apps/encryption/l10n/gl.js @@ -32,8 +32,8 @@ OC.L10N.register( "The administration enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>." : "A administración activou o cifrado no lado do servidor. Os seus ficheiros foron cifrados co contrasinal <strong>%s</strong>.", "The administration enabled server-side-encryption. Your files were encrypted using the password \"%s\"." : "A administración activou o cifrado no lado do servidor. Os seus ficheiros foron cifrados co contrasinal «%s».", "Please login to the web interface, go to the \"Security\" section 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." : "Acceda na interface web, vaia á sección «Seguranza» dos seus axustes persoais e actualice o seu contrasinal de cifrado introducindo este contrasinal no campo «Contrasinal antigo de acceso» e o seu contrasinal de acceso actual.", - "Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Non foi posíbel descifrar o ficheiro, probabelmente tratase dun ficheiro compartido. Pídalle ao propietario do ficheiro que volva compartir o ficheiro con vostede.", - "Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Non foi posíbel ler o ficheiro, probabelmente tratase dun ficheiro compartido. Pídalle ao propietario do ficheiro que volva compartir o ficheiro con vostede.", + "Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Non foi posíbel descifrar o ficheiro, probabelmente tratase dun ficheiro compartido. Pídalle ao propietario do ficheiro que volva compartir o ficheiro con Vde.", + "Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Non foi posíbel ler o ficheiro, probabelmente tratase dun ficheiro compartido. Pídalle ao propietario do ficheiro que volva compartir o ficheiro con Vde.", "Default encryption module" : "Módulo de cifrado predeterminado", "Default encryption module for server-side encryption" : "Módulo de cifrado predeterminado para o cifrado no lado do servidor", "In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Para usar este módulo de cifrado é preciso activar o cifrado no lado do servidor nos axustes de administración. Una vez activado este módulo cifrará todos os seus ficheiros de xeito transparente. O cifrado basease en chave AES 256.\nO módulo non tocará os ficheiros existentes, só se cifran os ficheiros novos após que se active o cifrado no lado do servidor. Tampouco é posíbel desactivar o cifrado e volver a un sistema sen cifrar.\nLea a documentación para coñecer todas as implicacións antes de decidir activar o cifrado no lado do servidor.", diff --git a/apps/encryption/l10n/gl.json b/apps/encryption/l10n/gl.json index 39a087dc81f..8fbaf0d1688 100644 --- a/apps/encryption/l10n/gl.json +++ b/apps/encryption/l10n/gl.json @@ -30,8 +30,8 @@ "The administration enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>." : "A administración activou o cifrado no lado do servidor. Os seus ficheiros foron cifrados co contrasinal <strong>%s</strong>.", "The administration enabled server-side-encryption. Your files were encrypted using the password \"%s\"." : "A administración activou o cifrado no lado do servidor. Os seus ficheiros foron cifrados co contrasinal «%s».", "Please login to the web interface, go to the \"Security\" section 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." : "Acceda na interface web, vaia á sección «Seguranza» dos seus axustes persoais e actualice o seu contrasinal de cifrado introducindo este contrasinal no campo «Contrasinal antigo de acceso» e o seu contrasinal de acceso actual.", - "Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Non foi posíbel descifrar o ficheiro, probabelmente tratase dun ficheiro compartido. Pídalle ao propietario do ficheiro que volva compartir o ficheiro con vostede.", - "Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Non foi posíbel ler o ficheiro, probabelmente tratase dun ficheiro compartido. Pídalle ao propietario do ficheiro que volva compartir o ficheiro con vostede.", + "Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Non foi posíbel descifrar o ficheiro, probabelmente tratase dun ficheiro compartido. Pídalle ao propietario do ficheiro que volva compartir o ficheiro con Vde.", + "Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Non foi posíbel ler o ficheiro, probabelmente tratase dun ficheiro compartido. Pídalle ao propietario do ficheiro que volva compartir o ficheiro con Vde.", "Default encryption module" : "Módulo de cifrado predeterminado", "Default encryption module for server-side encryption" : "Módulo de cifrado predeterminado para o cifrado no lado do servidor", "In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Para usar este módulo de cifrado é preciso activar o cifrado no lado do servidor nos axustes de administración. Una vez activado este módulo cifrará todos os seus ficheiros de xeito transparente. O cifrado basease en chave AES 256.\nO módulo non tocará os ficheiros existentes, só se cifran os ficheiros novos após que se active o cifrado no lado do servidor. Tampouco é posíbel desactivar o cifrado e volver a un sistema sen cifrar.\nLea a documentación para coñecer todas as implicacións antes de decidir activar o cifrado no lado do servidor.", diff --git a/apps/encryption/lib/Crypto/EncryptAll.php b/apps/encryption/lib/Crypto/EncryptAll.php index 1889c557cdc..72d9646f41a 100644 --- a/apps/encryption/lib/Crypto/EncryptAll.php +++ b/apps/encryption/lib/Crypto/EncryptAll.php @@ -34,7 +34,10 @@ use OCA\Encryption\Users\Setup; use OCA\Encryption\Util; use OCP\IConfig; use OCP\IL10N; +use OCP\IUser; use OCP\IUserManager; +use OCP\L10N\IFactory; +use OCP\Mail\Headers\AutoSubmitted; use OCP\Mail\IMailer; use OCP\Security\ISecureRandom; use Symfony\Component\Console\Helper\ProgressBar; @@ -73,6 +76,9 @@ class EncryptAll { /** @var IL10N */ protected $l; + /** @var IFactory */ + protected $l10nFactory; + /** @var QuestionHelper */ protected $questionHelper; @@ -85,18 +91,6 @@ class EncryptAll { /** @var ISecureRandom */ protected $secureRandom; - /** - * @param Setup $userSetup - * @param IUserManager $userManager - * @param View $rootView - * @param KeyManager $keyManager - * @param Util $util - * @param IConfig $config - * @param IMailer $mailer - * @param IL10N $l - * @param QuestionHelper $questionHelper - * @param ISecureRandom $secureRandom - */ public function __construct( Setup $userSetup, IUserManager $userManager, @@ -106,6 +100,7 @@ class EncryptAll { IConfig $config, IMailer $mailer, IL10N $l, + IFactory $l10nFactory, QuestionHelper $questionHelper, ISecureRandom $secureRandom ) { @@ -117,6 +112,7 @@ class EncryptAll { $this->config = $config; $this->mailer = $mailer; $this->l = $l; + $this->l10nFactory = $l10nFactory; $this->questionHelper = $questionHelper; $this->secureRandom = $secureRandom; // store one time passwords for the users @@ -413,6 +409,10 @@ class EncryptAll { $progress->advance(); if (!empty($password)) { $recipient = $this->userManager->get($uid); + if (!$recipient instanceof IUser) { + continue; + } + $recipientDisplayName = $recipient->getDisplayName(); $to = $recipient->getEMailAddress(); @@ -421,20 +421,33 @@ class EncryptAll { continue; } - $subject = $this->l->t('one-time password for server-side-encryption'); - [$htmlBody, $textBody] = $this->createMailBody($password); + $l = $this->l10nFactory->get('encryption', $this->l10nFactory->getUserLanguage($recipient)); + + $template = $this->mailer->createEMailTemplate('encryption.encryptAllPassword', [ + 'user' => $recipient->getUID(), + 'password' => $password, + ]); + + $template->setSubject($l->t('one-time password for server-side-encryption')); + // 'Hey there,<br><br>The administration 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>' + $template->addHeader(); + $template->addHeading($l->t('Encryption password')); + $template->addBodyText( + $l->t('The administration enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.', [htmlspecialchars($password)]), + $l->t('The administration enabled server-side-encryption. Your files were encrypted using the password "%s".', $password) + ); + $template->addBodyText( + $l->t('Please login to the web interface, go to the "Security" section 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.') + ); + $template->addFooter(); // send it out now try { $message = $this->mailer->createMessage(); - $message->setSubject($subject); $message->setTo([$to => $recipientDisplayName]); - $message->setHtmlBody($htmlBody); - $message->setPlainBody($textBody); - $message->setFrom([ - \OCP\Util::getDefaultEmailAddress('admin-noreply') - ]); - + $message->useTemplate($template); + $message->setAutoSubmitted(AutoSubmitted::VALUE_AUTO_GENERATED); $this->mailer->send($message); } catch (\Exception $e) { $noMail[] = $uid; @@ -458,22 +471,4 @@ class EncryptAll { $table->render(); } } - - /** - * create mail body for plain text and html mail - * - * @param string $password one-time encryption password - * @return array an array of the html mail body and the plain text mail body - */ - protected function createMailBody($password) { - $html = new \OC_Template("encryption", "mail", ""); - $html->assign('password', $password); - $htmlMail = $html->fetchPage(); - - $plainText = new \OC_Template("encryption", "altmail", ""); - $plainText->assign('password', $password); - $plainTextMail = $plainText->fetchPage(); - - return [$htmlMail, $plainTextMail]; - } } diff --git a/apps/encryption/templates/altmail.php b/apps/encryption/templates/altmail.php deleted file mode 100644 index 2044fd8e74c..00000000000 --- a/apps/encryption/templates/altmail.php +++ /dev/null @@ -1,16 +0,0 @@ -<?php -/** @var OC_Theme $theme */ -/** @var array $_ */ - -print_unescaped($l->t("Hey there,\n\nThe administration 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", [$_['password']])); -if (isset($_['expiration'])) { - print_unescaped($l->t("The share will expire on %s.", [$_['expiration']])); - print_unescaped("\n\n"); -} -// TRANSLATORS term at the end of a mail -p($l->t("Cheers!")); -?> - - -- -<?php p($theme->getName() . ' - ' . $theme->getSlogan()); ?> -<?php print_unescaped("\n".$theme->getBaseUrl()); diff --git a/apps/encryption/templates/mail.php b/apps/encryption/templates/mail.php deleted file mode 100644 index 0db4b67d08d..00000000000 --- a/apps/encryption/templates/mail.php +++ /dev/null @@ -1,38 +0,0 @@ -<?php -/** @var OC_Theme $theme */ -/** @var array $_ */ -?> -<table cellspacing="0" cellpadding="0" border="0" width="100%"> - <tr><td> - <table cellspacing="0" cellpadding="0" border="0" width="600px"> - <tr> - <td colspan="2" bgcolor="<?php p($theme->getColorPrimary());?>"> - <img src="<?php p(\OC::$server->getURLGenerator()->getAbsoluteURL(image_path('core', 'logo-mail.png'))); ?>" alt="<?php p($theme->getName()); ?>"/> - </td> - </tr> - <tr><td colspan="2"> </td></tr> - <tr> - <td width="20px"> </td> - <td style="font-weight:normal; font-size:0.8em; line-height:1.2em; font-family:verdana,'arial',sans;"> - <?php - print_unescaped($l->t('Hey there,<br><br>The administration 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>', [$_['password']])); - // TRANSLATORS term at the end of a mail - p($l->t('Cheers!')); - ?> - </td> - </tr> - <tr><td colspan="2"> </td></tr> - <tr> - <td width="20px"> </td> - <td style="font-weight:normal; font-size:0.8em; line-height:1.2em; font-family:verdana,'arial',sans;">--<br> - <?php p($theme->getName()); ?> - - <?php p($theme->getSlogan()); ?> - <br><a href="<?php p($theme->getBaseUrl()); ?>"><?php p($theme->getBaseUrl());?></a> - </td> - </tr> - <tr> - <td colspan="2"> </td> - </tr> - </table> - </td></tr> -</table> diff --git a/apps/encryption/tests/Crypto/EncryptAllTest.php b/apps/encryption/tests/Crypto/EncryptAllTest.php index 126dbec680e..b99e9144be8 100644 --- a/apps/encryption/tests/Crypto/EncryptAllTest.php +++ b/apps/encryption/tests/Crypto/EncryptAllTest.php @@ -36,6 +36,7 @@ use OCP\Files\FileInfo; use OCP\IConfig; use OCP\IL10N; use OCP\IUserManager; +use OCP\L10N\IFactory; use OCP\Mail\IMailer; use OCP\Security\ISecureRandom; use OCP\UserInterface; @@ -106,6 +107,7 @@ class EncryptAllTest extends TestCase { ->disableOriginalConstructor()->getMock(); $this->mailer = $this->getMockBuilder(IMailer::class) ->disableOriginalConstructor()->getMock(); + $this->l10nFactory = $this->createMock(IFactory::class); $this->l = $this->getMockBuilder(IL10N::class) ->disableOriginalConstructor()->getMock(); $this->questionHelper = $this->getMockBuilder(QuestionHelper::class) @@ -140,6 +142,7 @@ class EncryptAllTest extends TestCase { $this->config, $this->mailer, $this->l, + $this->l10nFactory, $this->questionHelper, $this->secureRandom ); @@ -158,6 +161,7 @@ class EncryptAllTest extends TestCase { $this->config, $this->mailer, $this->l, + $this->l10nFactory, $this->questionHelper, $this->secureRandom ] @@ -186,6 +190,7 @@ class EncryptAllTest extends TestCase { $this->config, $this->mailer, $this->l, + $this->l10nFactory, $this->questionHelper, $this->secureRandom ] @@ -215,6 +220,7 @@ class EncryptAllTest extends TestCase { $this->config, $this->mailer, $this->l, + $this->l10nFactory, $this->questionHelper, $this->secureRandom ] @@ -264,6 +270,7 @@ class EncryptAllTest extends TestCase { $this->config, $this->mailer, $this->l, + $this->l10nFactory, $this->questionHelper, $this->secureRandom ] @@ -299,6 +306,7 @@ class EncryptAllTest extends TestCase { $this->config, $this->mailer, $this->l, + $this->l10nFactory, $this->questionHelper, $this->secureRandom ] diff --git a/apps/federatedfilesharing/l10n/gl.js b/apps/federatedfilesharing/l10n/gl.js index 09c61a30321..f04c1a2d238 100644 --- a/apps/federatedfilesharing/l10n/gl.js +++ b/apps/federatedfilesharing/l10n/gl.js @@ -10,7 +10,7 @@ OC.L10N.register( "Server to server sharing is not enabled on this server" : "Neste servidor non está activada a compartición de servidor a servidor", "Couldn't establish a federated share." : "Non foi posíbel estabelecer unha compartición federada", "Couldn't establish a federated share, maybe the password was wrong." : "Non foi posíbel estabelecer unha compartición federada, é probábel que o contrasinal sexa erróneo.", - "Federated Share request sent, you will receive an invitation. Check your notifications." : "Enviouse a solicitude dunha compartición federada, vostede recibirá unha notificación. Comprobe as súas notificacións.", + "Federated Share request sent, you will receive an invitation. Check your notifications." : "Enviouse a solicitude dunha compartición federada, Vde. recibirá unha notificación. Comprobe as súas notificacións.", "Couldn't establish a federated share, it looks like the server to federate with is too old (Nextcloud <= 9)." : "Non foi posíbel estabelecer unha compartición federada, semella que o servidor federar é antigo de máis (Nextcloud <= 9).", "It is not allowed to send federated group shares from this server." : "Non está permitido enviar unha compartición de grupos federados dende este servidor.", "Sharing %1$s failed, because this item is already shared with user %2$s" : "Fallou a compartición de %1$s por mor de que este elemento xa foi compartido co usuario %2$s", @@ -20,8 +20,8 @@ OC.L10N.register( "Sharing %1$s failed, could not find %2$s, maybe the server is currently unreachable or uses a self-signed certificate." : "Produciuse un fallo ao compartir %1$s Non foi posíbel atopar %2$s, quizais haxa un problema de conexión co servidor ou emprega un certificado autoasinado.", "Could not find share" : "Non foi posíbel atopar o recurso compartido", "Federated sharing" : "Compartición federada", - "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Vostede recibiu {share} como un elemento compartido remoto de {user} (de parte de {behalf})", - "You received {share} as a remote share from {user}" : "Vostede recibiu {share} como un elemento compartido remoto de {user}", + "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Vde. recibiu {share} como un elemento compartido remoto de {user} (de parte de {behalf})", + "You received {share} as a remote share from {user}" : "Vde. recibiu {share} como un elemento compartido remoto de {user}", "Accept" : "Aceptar", "Decline" : "Declinar", "Federated Cloud Sharing" : "Nube federada compartida", @@ -39,7 +39,7 @@ OC.L10N.register( "Federated Cloud" : "Nube federada", "You can share with anyone who uses a Nextcloud server or other Open Cloud Mesh (OCM) compatible servers and services! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Pode compartir con calquera persoa que empregue servidores Nextcloud, ou outro servidor ou servizo compatíbel co Open Cloud Mesh (OCM)! Simplemente, introduza o seu ID de nube federada no diálogo de compartir. É algo como persona@cloud.exemplo.com", "Your Federated Cloud ID:" : "ID da súa nube federada:", - "Share it so your friends can share files with you:" : "Compártao para que as súas amizades poidan compartir ficheiros con vostede:", + "Share it so your friends can share files with you:" : "Compártao para que as súas amizades poidan compartir ficheiros con Vde.:", "Facebook" : "Facebook", "Twitter" : "Twitter", "Diaspora" : "Diaspora", @@ -52,8 +52,8 @@ OC.L10N.register( "Copy to clipboard" : "Copiar no portapapeis.", "Clipboard is not available" : "O portapapeis non está dispoñíbel", "Copied!" : "Copiado!", - "You received \"%3$s\" as a remote share from %4$s (%1$s) (on behalf of %5$s (%2$s))" : "Vostede recibiu «%3$s» como un elemento compartido remoto de %4$s (%1$s) (de parte de %5$s (%2$s))", - "You received \"%3$s\" as a remote share from %4$s (%1$s)" : "Vostede recibiu «%3$s» como un elemento compartido remoto de %4$s (%1$s)", + "You received \"%3$s\" as a remote share from %4$s (%1$s) (on behalf of %5$s (%2$s))" : "Vde. recibiu «%3$s» como un elemento compartido remoto de %4$s (%1$s) (de parte de %5$s (%2$s))", + "You received \"%3$s\" as a remote share from %4$s (%1$s)" : "Vde. recibiu «%3$s» como un elemento compartido remoto de %4$s (%1$s)", "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Comparte comigo a través do meu ID da nube federada do #Nextcloud , vexa %s" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federatedfilesharing/l10n/gl.json b/apps/federatedfilesharing/l10n/gl.json index 5c8bfe1985a..30ac824f803 100644 --- a/apps/federatedfilesharing/l10n/gl.json +++ b/apps/federatedfilesharing/l10n/gl.json @@ -8,7 +8,7 @@ "Server to server sharing is not enabled on this server" : "Neste servidor non está activada a compartición de servidor a servidor", "Couldn't establish a federated share." : "Non foi posíbel estabelecer unha compartición federada", "Couldn't establish a federated share, maybe the password was wrong." : "Non foi posíbel estabelecer unha compartición federada, é probábel que o contrasinal sexa erróneo.", - "Federated Share request sent, you will receive an invitation. Check your notifications." : "Enviouse a solicitude dunha compartición federada, vostede recibirá unha notificación. Comprobe as súas notificacións.", + "Federated Share request sent, you will receive an invitation. Check your notifications." : "Enviouse a solicitude dunha compartición federada, Vde. recibirá unha notificación. Comprobe as súas notificacións.", "Couldn't establish a federated share, it looks like the server to federate with is too old (Nextcloud <= 9)." : "Non foi posíbel estabelecer unha compartición federada, semella que o servidor federar é antigo de máis (Nextcloud <= 9).", "It is not allowed to send federated group shares from this server." : "Non está permitido enviar unha compartición de grupos federados dende este servidor.", "Sharing %1$s failed, because this item is already shared with user %2$s" : "Fallou a compartición de %1$s por mor de que este elemento xa foi compartido co usuario %2$s", @@ -18,8 +18,8 @@ "Sharing %1$s failed, could not find %2$s, maybe the server is currently unreachable or uses a self-signed certificate." : "Produciuse un fallo ao compartir %1$s Non foi posíbel atopar %2$s, quizais haxa un problema de conexión co servidor ou emprega un certificado autoasinado.", "Could not find share" : "Non foi posíbel atopar o recurso compartido", "Federated sharing" : "Compartición federada", - "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Vostede recibiu {share} como un elemento compartido remoto de {user} (de parte de {behalf})", - "You received {share} as a remote share from {user}" : "Vostede recibiu {share} como un elemento compartido remoto de {user}", + "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Vde. recibiu {share} como un elemento compartido remoto de {user} (de parte de {behalf})", + "You received {share} as a remote share from {user}" : "Vde. recibiu {share} como un elemento compartido remoto de {user}", "Accept" : "Aceptar", "Decline" : "Declinar", "Federated Cloud Sharing" : "Nube federada compartida", @@ -37,7 +37,7 @@ "Federated Cloud" : "Nube federada", "You can share with anyone who uses a Nextcloud server or other Open Cloud Mesh (OCM) compatible servers and services! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Pode compartir con calquera persoa que empregue servidores Nextcloud, ou outro servidor ou servizo compatíbel co Open Cloud Mesh (OCM)! Simplemente, introduza o seu ID de nube federada no diálogo de compartir. É algo como persona@cloud.exemplo.com", "Your Federated Cloud ID:" : "ID da súa nube federada:", - "Share it so your friends can share files with you:" : "Compártao para que as súas amizades poidan compartir ficheiros con vostede:", + "Share it so your friends can share files with you:" : "Compártao para que as súas amizades poidan compartir ficheiros con Vde.:", "Facebook" : "Facebook", "Twitter" : "Twitter", "Diaspora" : "Diaspora", @@ -50,8 +50,8 @@ "Copy to clipboard" : "Copiar no portapapeis.", "Clipboard is not available" : "O portapapeis non está dispoñíbel", "Copied!" : "Copiado!", - "You received \"%3$s\" as a remote share from %4$s (%1$s) (on behalf of %5$s (%2$s))" : "Vostede recibiu «%3$s» como un elemento compartido remoto de %4$s (%1$s) (de parte de %5$s (%2$s))", - "You received \"%3$s\" as a remote share from %4$s (%1$s)" : "Vostede recibiu «%3$s» como un elemento compartido remoto de %4$s (%1$s)", + "You received \"%3$s\" as a remote share from %4$s (%1$s) (on behalf of %5$s (%2$s))" : "Vde. recibiu «%3$s» como un elemento compartido remoto de %4$s (%1$s) (de parte de %5$s (%2$s))", + "You received \"%3$s\" as a remote share from %4$s (%1$s)" : "Vde. recibiu «%3$s» como un elemento compartido remoto de %4$s (%1$s)", "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Comparte comigo a través do meu ID da nube federada do #Nextcloud , vexa %s" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/lib/Notifier.php b/apps/federatedfilesharing/lib/Notifier.php index 87c05e19e4b..563b121ce5b 100644 --- a/apps/federatedfilesharing/lib/Notifier.php +++ b/apps/federatedfilesharing/lib/Notifier.php @@ -102,8 +102,9 @@ class Notifier implements INotifier { $notification->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); $params = $notification->getSubjectParameters(); + $displayName = (count($params) > 3) ? $params[3] : ''; if ($params[0] !== $params[1] && $params[1] !== null) { - $remoteInitiator = $this->createRemoteUser($params[0]); + $remoteInitiator = $this->createRemoteUser($params[0], $displayName); $remoteOwner = $this->createRemoteUser($params[1]); $params[3] = $remoteInitiator['name'] . '@' . $remoteInitiator['server']; $params[4] = $remoteOwner['name'] . '@' . $remoteOwner['server']; @@ -121,7 +122,7 @@ class Notifier implements INotifier { ] ); } else { - $remoteOwner = $this->createRemoteUser($params[0]); + $remoteOwner = $this->createRemoteUser($params[0], $displayName); $params[3] = $remoteOwner['name'] . '@' . $remoteOwner['server']; $notification->setRichSubject( @@ -166,19 +167,21 @@ class Notifier implements INotifier { /** * @param string $cloudId + * @param string $displayName - overwrite display name + * * @return array */ - protected function createRemoteUser($cloudId, $displayName = null) { + protected function createRemoteUser(string $cloudId, string $displayName = '') { try { $resolvedId = $this->cloudIdManager->resolveCloudId($cloudId); - if ($displayName === null) { + if ($displayName === '') { $displayName = $this->getDisplayName($resolvedId); } $user = $resolvedId->getUser(); $server = $resolvedId->getRemote(); } catch (HintException $e) { $user = $cloudId; - $displayName = $cloudId; + $displayName = ($displayName !== '') ? $displayName : $cloudId; $server = ''; } diff --git a/apps/federatedfilesharing/lib/OCM/CloudFederationProviderFiles.php b/apps/federatedfilesharing/lib/OCM/CloudFederationProviderFiles.php index 370ef8dc32a..5e2cafe0ce0 100644 --- a/apps/federatedfilesharing/lib/OCM/CloudFederationProviderFiles.php +++ b/apps/federatedfilesharing/lib/OCM/CloudFederationProviderFiles.php @@ -55,10 +55,13 @@ use OCP\ILogger; use OCP\IURLGenerator; use OCP\IUserManager; use OCP\Notification\IManager as INotificationManager; +use OCP\Server; use OCP\Share\Exceptions\ShareNotFound; use OCP\Share\IManager; use OCP\Share\IShare; use OCP\Util; +use Psr\Container\ContainerExceptionInterface; +use Psr\Log\LoggerInterface; class CloudFederationProviderFiles implements ICloudFederationProvider { @@ -250,26 +253,29 @@ class CloudFederationProviderFiles implements ICloudFederationProvider { $this->externalShareManager->addShare($remote, $token, '', $name, $owner, $shareType,false, $shareWith, $remoteId); $shareId = \OC::$server->getDatabaseConnection()->lastInsertId('*PREFIX*share_external'); + // get DisplayName about the owner of the share + $ownerDisplayName = $this->getUserDisplayName($ownerFederatedId); + if ($shareType === IShare::TYPE_USER) { $event = $this->activityManager->generateEvent(); $event->setApp('files_sharing') ->setType('remote_share') - ->setSubject(RemoteShares::SUBJECT_REMOTE_SHARE_RECEIVED, [$ownerFederatedId, trim($name, '/')]) + ->setSubject(RemoteShares::SUBJECT_REMOTE_SHARE_RECEIVED, [$ownerFederatedId, trim($name, '/'), $ownerDisplayName]) ->setAffectedUser($shareWith) ->setObject('remote_share', $shareId, $name); \OC::$server->getActivityManager()->publish($event); - $this->notifyAboutNewShare($shareWith, $shareId, $ownerFederatedId, $sharedByFederatedId, $name); + $this->notifyAboutNewShare($shareWith, $shareId, $ownerFederatedId, $sharedByFederatedId, $name, $ownerDisplayName); } else { $groupMembers = $this->groupManager->get($shareWith)->getUsers(); foreach ($groupMembers as $user) { $event = $this->activityManager->generateEvent(); $event->setApp('files_sharing') ->setType('remote_share') - ->setSubject(RemoteShares::SUBJECT_REMOTE_SHARE_RECEIVED, [$ownerFederatedId, trim($name, '/')]) + ->setSubject(RemoteShares::SUBJECT_REMOTE_SHARE_RECEIVED, [$ownerFederatedId, trim($name, '/'), $ownerDisplayName]) ->setAffectedUser($user->getUID()) ->setObject('remote_share', $shareId, $name); \OC::$server->getActivityManager()->publish($event); - $this->notifyAboutNewShare($user->getUID(), $shareId, $ownerFederatedId, $sharedByFederatedId, $name); + $this->notifyAboutNewShare($user->getUID(), $shareId, $ownerFederatedId, $sharedByFederatedId, $name, $ownerDisplayName); } } return $shareId; @@ -335,13 +341,13 @@ class CloudFederationProviderFiles implements ICloudFederationProvider { return $result; } - private function notifyAboutNewShare($shareWith, $shareId, $ownerFederatedId, $sharedByFederatedId, $name): void { + private function notifyAboutNewShare($shareWith, $shareId, $ownerFederatedId, $sharedByFederatedId, $name, $displayName): void { $notification = $this->notificationManager->createNotification(); $notification->setApp('files_sharing') ->setUser($shareWith) ->setDateTime(new \DateTime()) ->setObject('remote_share', $shareId) - ->setSubject('remote_share', [$ownerFederatedId, $sharedByFederatedId, trim($name, '/')]); + ->setSubject('remote_share', [$ownerFederatedId, $sharedByFederatedId, trim($name, '/'), $displayName]); $declineAction = $notification->createAction(); $declineAction->setLabel('decline') @@ -579,6 +585,8 @@ class CloudFederationProviderFiles implements ICloudFederationProvider { ->where($qb->expr()->eq('parent', $qb->createNamedParameter((int)$share['id']))); $qb->execute(); + $ownerDisplayName = $this->getUserDisplayName($owner->getId()); + if ((int)$share['share_type'] === IShare::TYPE_USER) { if ($share['accepted']) { $path = trim($mountpoint, '/'); @@ -594,7 +602,7 @@ class CloudFederationProviderFiles implements ICloudFederationProvider { $event = $this->activityManager->generateEvent(); $event->setApp('files_sharing') ->setType('remote_share') - ->setSubject(RemoteShares::SUBJECT_REMOTE_SHARE_UNSHARED, [$owner->getId(), $path]) + ->setSubject(RemoteShares::SUBJECT_REMOTE_SHARE_UNSHARED, [$owner->getId(), $path, $ownerDisplayName]) ->setAffectedUser($user) ->setObject('remote_share', (int)$share['id'], $path); \OC::$server->getActivityManager()->publish($event); @@ -824,4 +832,25 @@ class CloudFederationProviderFiles implements ICloudFederationProvider { public function getSupportedShareTypes() { return ['user', 'group']; } + + + public function getUserDisplayName(string $userId): string { + // check if gss is enabled and available + if (!$this->appManager->isInstalled('globalsiteselector') + || !class_exists('\OCA\GlobalSiteSelector\Service\SlaveService')) { + return ''; + } + + try { + $slaveService = Server::get(\OCA\GlobalSiteSelector\Service\SlaveService::class); + } catch (\Throwable $e) { + Server::get(LoggerInterface::class)->error( + $e->getMessage(), + ['exception' => $e] + ); + return ''; + } + + return $slaveService->getUserDisplayName($this->cloudIdManager->removeProtocolFromUrl($userId), false); + } } diff --git a/apps/files/l10n/ar.js b/apps/files/l10n/ar.js index b7961e9394f..89e3cc2dd83 100644 --- a/apps/files/l10n/ar.js +++ b/apps/files/l10n/ar.js @@ -253,12 +253,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "حجم الملفات التي تريد ترفيعها أعلى من المسموح على الخادم.", "No favorites yet" : "ليست عندك مفضلات بعد", "Files and folders you mark as favorite will show up here" : "الملفات والمجلدات التي حددتها كامفضلة سوف تظهر هنا ", - "Shares" : "التي قمتَ بمشاركتها", - "Shared with others" : "شاركته مع الاخرين", - "Shared with you" : "تمت مشاركته معك", - "Shared by link" : "شاركته باستخدام رابط مشاركة", - "Deleted shares" : "تم حذف المشاركات", - "Pending shares" : "انتظار المشاركات", "Text file" : "ملف نصي", "New text file.txt" : "ملف نصي جديد fille.txt", "Storage invalid" : "وحدة تخزين غير صالحة", @@ -270,6 +264,12 @@ OC.L10N.register( "%s%%" : "%s%%", "%1$s of %2$s used" : "تم استخدام %1$s من %2$s", "Deleted files" : "الملفات المحذوفة", + "Shares" : "التي قمتَ بمشاركتها", + "Shared with others" : "شاركته مع الاخرين", + "Shared with you" : "تمت مشاركته معك", + "Shared by link" : "شاركته باستخدام رابط مشاركة", + "Deleted shares" : "تم حذف المشاركات", + "Pending shares" : "انتظار المشاركات", "Open folder {name}" : "إفتح المجلد {name}", "Search for an account" : "البحث عن حساب" }, diff --git a/apps/files/l10n/ar.json b/apps/files/l10n/ar.json index 154278d6f8a..5d400f810bf 100644 --- a/apps/files/l10n/ar.json +++ b/apps/files/l10n/ar.json @@ -251,12 +251,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "حجم الملفات التي تريد ترفيعها أعلى من المسموح على الخادم.", "No favorites yet" : "ليست عندك مفضلات بعد", "Files and folders you mark as favorite will show up here" : "الملفات والمجلدات التي حددتها كامفضلة سوف تظهر هنا ", - "Shares" : "التي قمتَ بمشاركتها", - "Shared with others" : "شاركته مع الاخرين", - "Shared with you" : "تمت مشاركته معك", - "Shared by link" : "شاركته باستخدام رابط مشاركة", - "Deleted shares" : "تم حذف المشاركات", - "Pending shares" : "انتظار المشاركات", "Text file" : "ملف نصي", "New text file.txt" : "ملف نصي جديد fille.txt", "Storage invalid" : "وحدة تخزين غير صالحة", @@ -268,6 +262,12 @@ "%s%%" : "%s%%", "%1$s of %2$s used" : "تم استخدام %1$s من %2$s", "Deleted files" : "الملفات المحذوفة", + "Shares" : "التي قمتَ بمشاركتها", + "Shared with others" : "شاركته مع الاخرين", + "Shared with you" : "تمت مشاركته معك", + "Shared by link" : "شاركته باستخدام رابط مشاركة", + "Deleted shares" : "تم حذف المشاركات", + "Pending shares" : "انتظار المشاركات", "Open folder {name}" : "إفتح المجلد {name}", "Search for an account" : "البحث عن حساب" },"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;" diff --git a/apps/files/l10n/bg.js b/apps/files/l10n/bg.js index 7fdf24b031d..0439da2c3eb 100644 --- a/apps/files/l10n/bg.js +++ b/apps/files/l10n/bg.js @@ -239,12 +239,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Файловете, които се опитвате да качите са по-големи от позволеното на сървъра.", "No favorites yet" : "Няма любими", "Files and folders you mark as favorite will show up here" : "Файловете и папките които маркирате като любими ще се показват тук", - "Shares" : "Споделени", - "Shared with others" : "Споделени с други", - "Shared with you" : "Споделени с вас", - "Shared by link" : "Споделени с връзка", - "Deleted shares" : "Изтрити", - "Pending shares" : "Чакащи споделяния", "Text file" : "Текстов файл", "New text file.txt" : "Текстов файл.txt", "Storage invalid" : "Невалидно хранилище", @@ -256,6 +250,12 @@ OC.L10N.register( "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s от %2$s използвани", "Deleted files" : "Изтрити файлове", + "Shares" : "Споделени", + "Shared with others" : "Споделени с други", + "Shared with you" : "Споделени с вас", + "Shared by link" : "Споделени с връзка", + "Deleted shares" : "Изтрити", + "Pending shares" : "Чакащи споделяния", "Open folder {name}" : "Отваряне на папка {name}", "Search for an account" : "Търсене на профил" }, diff --git a/apps/files/l10n/bg.json b/apps/files/l10n/bg.json index 925203b820c..3354c415006 100644 --- a/apps/files/l10n/bg.json +++ b/apps/files/l10n/bg.json @@ -237,12 +237,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Файловете, които се опитвате да качите са по-големи от позволеното на сървъра.", "No favorites yet" : "Няма любими", "Files and folders you mark as favorite will show up here" : "Файловете и папките които маркирате като любими ще се показват тук", - "Shares" : "Споделени", - "Shared with others" : "Споделени с други", - "Shared with you" : "Споделени с вас", - "Shared by link" : "Споделени с връзка", - "Deleted shares" : "Изтрити", - "Pending shares" : "Чакащи споделяния", "Text file" : "Текстов файл", "New text file.txt" : "Текстов файл.txt", "Storage invalid" : "Невалидно хранилище", @@ -254,6 +248,12 @@ "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s от %2$s използвани", "Deleted files" : "Изтрити файлове", + "Shares" : "Споделени", + "Shared with others" : "Споделени с други", + "Shared with you" : "Споделени с вас", + "Shared by link" : "Споделени с връзка", + "Deleted shares" : "Изтрити", + "Pending shares" : "Чакащи споделяния", "Open folder {name}" : "Отваряне на папка {name}", "Search for an account" : "Търсене на профил" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files/l10n/br.js b/apps/files/l10n/br.js index aecea12caf1..cc39c5cd990 100644 --- a/apps/files/l10n/br.js +++ b/apps/files/l10n/br.js @@ -166,12 +166,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Ar restroù a glaskit pellgas a ya dreist d'ar vent vrasañ aotreet gant ar servijer mañ.", "No favorites yet" : "Pennroll ebet evit ar poent", "Files and folders you mark as favorite will show up here" : "Ar restroù ha teuliadoù ouzhpennet en ho pennrolloù a vo diskwelet amañ", - "Shares" : "Rannañ", - "Shared with others" : "Rannet gant tud all", - "Shared with you" : "Rannet ganeoc'h", - "Shared by link" : "Rannet dre liamm", - "Deleted shares" : "Rannañ dilemet", - "Pending shares" : "Rannañ o c'hortoz", "Text file" : "Restr testenn", "New text file.txt" : "Restr testenn nevez rest.txt", "Storage invalid" : "N'eo c'hall ket bezañ ar skor roadennoù-mañ", @@ -181,6 +175,12 @@ OC.L10N.register( "Cancel" : "Arrest", "%s used" : "%s implijet", "%1$s of %2$s used" : "%1$s diwar%2$s implijet", - "Deleted files" : "Restroù dilemet" + "Deleted files" : "Restroù dilemet", + "Shares" : "Rannañ", + "Shared with others" : "Rannet gant tud all", + "Shared with you" : "Rannet ganeoc'h", + "Shared by link" : "Rannet dre liamm", + "Deleted shares" : "Rannañ dilemet", + "Pending shares" : "Rannañ o c'hortoz" }, "nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);"); diff --git a/apps/files/l10n/br.json b/apps/files/l10n/br.json index 22c47986cd5..f400609a4f7 100644 --- a/apps/files/l10n/br.json +++ b/apps/files/l10n/br.json @@ -164,12 +164,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Ar restroù a glaskit pellgas a ya dreist d'ar vent vrasañ aotreet gant ar servijer mañ.", "No favorites yet" : "Pennroll ebet evit ar poent", "Files and folders you mark as favorite will show up here" : "Ar restroù ha teuliadoù ouzhpennet en ho pennrolloù a vo diskwelet amañ", - "Shares" : "Rannañ", - "Shared with others" : "Rannet gant tud all", - "Shared with you" : "Rannet ganeoc'h", - "Shared by link" : "Rannet dre liamm", - "Deleted shares" : "Rannañ dilemet", - "Pending shares" : "Rannañ o c'hortoz", "Text file" : "Restr testenn", "New text file.txt" : "Restr testenn nevez rest.txt", "Storage invalid" : "N'eo c'hall ket bezañ ar skor roadennoù-mañ", @@ -179,6 +173,12 @@ "Cancel" : "Arrest", "%s used" : "%s implijet", "%1$s of %2$s used" : "%1$s diwar%2$s implijet", - "Deleted files" : "Restroù dilemet" + "Deleted files" : "Restroù dilemet", + "Shares" : "Rannañ", + "Shared with others" : "Rannet gant tud all", + "Shared with you" : "Rannet ganeoc'h", + "Shared by link" : "Rannet dre liamm", + "Deleted shares" : "Rannañ dilemet", + "Pending shares" : "Rannañ o c'hortoz" },"pluralForm" :"nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);" }
\ No newline at end of file diff --git a/apps/files/l10n/ca.js b/apps/files/l10n/ca.js index d54a624b1af..bddb54c38b3 100644 --- a/apps/files/l10n/ca.js +++ b/apps/files/l10n/ca.js @@ -253,12 +253,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Els fitxers que intenteu pujar superen la mida màxima de pujada de fitxers del servidor.", "No favorites yet" : "Encara no teniu preferits", "Files and folders you mark as favorite will show up here" : "Aquí apareixeran els fitxers i carpetes que marqueu com a preferits", - "Shares" : "Elements compartits", - "Shared with others" : "Compartit amb altres usuaris", - "Shared with you" : "Compartit amb vós", - "Shared by link" : "Compartit amb un enllaç", - "Deleted shares" : "Suprimit", - "Pending shares" : "Pendent", "Text file" : "Fitxer de text", "New text file.txt" : "Fitxer de text nou.txt", "Storage invalid" : "L'emmagatzematge no és vàlid", @@ -270,6 +264,12 @@ OC.L10N.register( "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s de %2$s en ús", "Deleted files" : "Fitxers suprimits", + "Shares" : "Elements compartits", + "Shared with others" : "Compartit amb altres usuaris", + "Shared with you" : "Compartit amb vós", + "Shared by link" : "Compartit amb un enllaç", + "Deleted shares" : "Suprimit", + "Pending shares" : "Pendent", "Open folder {name}" : "Obre la carpeta {name}", "Search for an account" : "Cerqueu un compte" }, diff --git a/apps/files/l10n/ca.json b/apps/files/l10n/ca.json index 7daa6168582..77af90092a5 100644 --- a/apps/files/l10n/ca.json +++ b/apps/files/l10n/ca.json @@ -251,12 +251,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Els fitxers que intenteu pujar superen la mida màxima de pujada de fitxers del servidor.", "No favorites yet" : "Encara no teniu preferits", "Files and folders you mark as favorite will show up here" : "Aquí apareixeran els fitxers i carpetes que marqueu com a preferits", - "Shares" : "Elements compartits", - "Shared with others" : "Compartit amb altres usuaris", - "Shared with you" : "Compartit amb vós", - "Shared by link" : "Compartit amb un enllaç", - "Deleted shares" : "Suprimit", - "Pending shares" : "Pendent", "Text file" : "Fitxer de text", "New text file.txt" : "Fitxer de text nou.txt", "Storage invalid" : "L'emmagatzematge no és vàlid", @@ -268,6 +262,12 @@ "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s de %2$s en ús", "Deleted files" : "Fitxers suprimits", + "Shares" : "Elements compartits", + "Shared with others" : "Compartit amb altres usuaris", + "Shared with you" : "Compartit amb vós", + "Shared by link" : "Compartit amb un enllaç", + "Deleted shares" : "Suprimit", + "Pending shares" : "Pendent", "Open folder {name}" : "Obre la carpeta {name}", "Search for an account" : "Cerqueu un compte" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files/l10n/cs.js b/apps/files/l10n/cs.js index 42e855f1c14..3ee98a88f95 100644 --- a/apps/files/l10n/cs.js +++ b/apps/files/l10n/cs.js @@ -253,12 +253,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Soubory, které se snažíte nahrát, překračují limit velikosti nahrávání na tomto serveru.", "No favorites yet" : "Zatím nic oblíbeného", "Files and folders you mark as favorite will show up here" : "Zde budou zobrazeny soubory a složky, které označíte jako oblíbené", - "Shares" : "Sdílení", - "Shared with others" : "Sdíleno s ostatními", - "Shared with you" : "Sdíleno s vámi", - "Shared by link" : "Sdíleno pomocí odkazu", - "Deleted shares" : "Smazaná sdílení", - "Pending shares" : "Čekající sdílení", "Text file" : "Textový soubor", "New text file.txt" : "Nový textový soubor.txt", "Storage invalid" : "Neplatné úložiště", @@ -270,6 +264,12 @@ OC.L10N.register( "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s z %2$s použito", "Deleted files" : "Smazané soubory", + "Shares" : "Sdílení", + "Shared with others" : "Sdíleno s ostatními", + "Shared with you" : "Sdíleno s vámi", + "Shared by link" : "Sdíleno pomocí odkazu", + "Deleted shares" : "Smazaná sdílení", + "Pending shares" : "Čekající sdílení", "Open folder {name}" : "Otevřít složku {name}", "Search for an account" : "Hledat účet" }, diff --git a/apps/files/l10n/cs.json b/apps/files/l10n/cs.json index 8d1ee8db58f..2d3f429562d 100644 --- a/apps/files/l10n/cs.json +++ b/apps/files/l10n/cs.json @@ -251,12 +251,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Soubory, které se snažíte nahrát, překračují limit velikosti nahrávání na tomto serveru.", "No favorites yet" : "Zatím nic oblíbeného", "Files and folders you mark as favorite will show up here" : "Zde budou zobrazeny soubory a složky, které označíte jako oblíbené", - "Shares" : "Sdílení", - "Shared with others" : "Sdíleno s ostatními", - "Shared with you" : "Sdíleno s vámi", - "Shared by link" : "Sdíleno pomocí odkazu", - "Deleted shares" : "Smazaná sdílení", - "Pending shares" : "Čekající sdílení", "Text file" : "Textový soubor", "New text file.txt" : "Nový textový soubor.txt", "Storage invalid" : "Neplatné úložiště", @@ -268,6 +262,12 @@ "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s z %2$s použito", "Deleted files" : "Smazané soubory", + "Shares" : "Sdílení", + "Shared with others" : "Sdíleno s ostatními", + "Shared with you" : "Sdíleno s vámi", + "Shared by link" : "Sdíleno pomocí odkazu", + "Deleted shares" : "Smazaná sdílení", + "Pending shares" : "Čekající sdílení", "Open folder {name}" : "Otevřít složku {name}", "Search for an account" : "Hledat účet" },"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;" diff --git a/apps/files/l10n/da.js b/apps/files/l10n/da.js index d9425c911c1..d8929a856cc 100644 --- a/apps/files/l10n/da.js +++ b/apps/files/l10n/da.js @@ -219,12 +219,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Filerne, du prøver at uploade, er større end den maksimale størrelse for fil-upload på denne server.", "No favorites yet" : "Ingen foretrukne endnu", "Files and folders you mark as favorite will show up here" : "Filer og mapper som du har markeret som foretrukne, vil blive vist her", - "Shares" : "Delinger", - "Shared with others" : "Delt med andre", - "Shared with you" : "Delt med dig", - "Shared by link" : "Delt via link", - "Deleted shares" : "Slettede delinger", - "Pending shares" : "Afventende delinger", "Text file" : "Tekstfil", "New text file.txt" : "Ny tekst fil.txt", "Storage invalid" : "Lagerplads er ugyldig", @@ -235,6 +229,12 @@ OC.L10N.register( "%s used" : "%s brugt", "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s af %2$s brugt", - "Deleted files" : "Slettede filer" + "Deleted files" : "Slettede filer", + "Shares" : "Delinger", + "Shared with others" : "Delt med andre", + "Shared with you" : "Delt med dig", + "Shared by link" : "Delt via link", + "Deleted shares" : "Slettede delinger", + "Pending shares" : "Afventende delinger" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/da.json b/apps/files/l10n/da.json index 3e001d23f81..a1ddd8608a1 100644 --- a/apps/files/l10n/da.json +++ b/apps/files/l10n/da.json @@ -217,12 +217,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Filerne, du prøver at uploade, er større end den maksimale størrelse for fil-upload på denne server.", "No favorites yet" : "Ingen foretrukne endnu", "Files and folders you mark as favorite will show up here" : "Filer og mapper som du har markeret som foretrukne, vil blive vist her", - "Shares" : "Delinger", - "Shared with others" : "Delt med andre", - "Shared with you" : "Delt med dig", - "Shared by link" : "Delt via link", - "Deleted shares" : "Slettede delinger", - "Pending shares" : "Afventende delinger", "Text file" : "Tekstfil", "New text file.txt" : "Ny tekst fil.txt", "Storage invalid" : "Lagerplads er ugyldig", @@ -233,6 +227,12 @@ "%s used" : "%s brugt", "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s af %2$s brugt", - "Deleted files" : "Slettede filer" + "Deleted files" : "Slettede filer", + "Shares" : "Delinger", + "Shared with others" : "Delt med andre", + "Shared with you" : "Delt med dig", + "Shared by link" : "Delt via link", + "Deleted shares" : "Slettede delinger", + "Pending shares" : "Afventende delinger" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js index 64f1f44e8e5..2bb05866499 100644 --- a/apps/files/l10n/de.js +++ b/apps/files/l10n/de.js @@ -238,12 +238,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server.", "No favorites yet" : "Noch keine Favoriten vorhanden", "Files and folders you mark as favorite will show up here" : "Dateien und Ordner, die als Favoriten markiert werden, erscheinen hier", - "Shares" : "Freigaben", - "Shared with others" : "Mit anderen geteilt", - "Shared with you" : "Mit dir geteilt", - "Shared by link" : "Über einen Link geteilt", - "Deleted shares" : "Gelöschte Freigaben", - "Pending shares" : "Ausstehende Freigaben", "Text file" : "Textdatei", "New text file.txt" : "Neue Textdatei file.txt", "Storage invalid" : "Speicher ungültig", @@ -255,6 +249,12 @@ OC.L10N.register( "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s von %2$s verwendet", "Deleted files" : "Gelöschte Dateien", + "Shares" : "Freigaben", + "Shared with others" : "Mit anderen geteilt", + "Shared with you" : "Mit dir geteilt", + "Shared by link" : "Über einen Link geteilt", + "Deleted shares" : "Gelöschte Freigaben", + "Pending shares" : "Ausstehende Freigaben", "Open folder {name}" : "Ordner {name} öffnen", "Search for an account" : "Nach einem Konto suchen" }, diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json index a6031f65135..4fccc8d8697 100644 --- a/apps/files/l10n/de.json +++ b/apps/files/l10n/de.json @@ -236,12 +236,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server.", "No favorites yet" : "Noch keine Favoriten vorhanden", "Files and folders you mark as favorite will show up here" : "Dateien und Ordner, die als Favoriten markiert werden, erscheinen hier", - "Shares" : "Freigaben", - "Shared with others" : "Mit anderen geteilt", - "Shared with you" : "Mit dir geteilt", - "Shared by link" : "Über einen Link geteilt", - "Deleted shares" : "Gelöschte Freigaben", - "Pending shares" : "Ausstehende Freigaben", "Text file" : "Textdatei", "New text file.txt" : "Neue Textdatei file.txt", "Storage invalid" : "Speicher ungültig", @@ -253,6 +247,12 @@ "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s von %2$s verwendet", "Deleted files" : "Gelöschte Dateien", + "Shares" : "Freigaben", + "Shared with others" : "Mit anderen geteilt", + "Shared with you" : "Mit dir geteilt", + "Shared by link" : "Über einen Link geteilt", + "Deleted shares" : "Gelöschte Freigaben", + "Pending shares" : "Ausstehende Freigaben", "Open folder {name}" : "Ordner {name} öffnen", "Search for an account" : "Nach einem Konto suchen" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js index b3251d1b3f2..69d7cc4d77d 100644 --- a/apps/files/l10n/de_DE.js +++ b/apps/files/l10n/de_DE.js @@ -253,12 +253,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server.", "No favorites yet" : "Noch keine Favoriten vorhanden", "Files and folders you mark as favorite will show up here" : "Dateien und Ordner, die Sie als Favoriten kennzeichnen, werden hier erscheinen", - "Shares" : "Freigaben", - "Shared with others" : "Mit anderen geteilt", - "Shared with you" : "Mit Ihnen geteilt", - "Shared by link" : "Über einen Link geteilt", - "Deleted shares" : "Gelöschte Freigaben", - "Pending shares" : "Ausstehende Freigaben", "Text file" : "Textdatei", "New text file.txt" : "Neue Textdatei file.txt", "Storage invalid" : "Speicher ungültig", @@ -270,6 +264,12 @@ OC.L10N.register( "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s von %2$s verwendet", "Deleted files" : "Gelöschte Dateien", + "Shares" : "Freigaben", + "Shared with others" : "Mit anderen geteilt", + "Shared with you" : "Mit Ihnen geteilt", + "Shared by link" : "Über einen Link geteilt", + "Deleted shares" : "Gelöschte Freigaben", + "Pending shares" : "Ausstehende Freigaben", "Open folder {name}" : "Ordner {name} öffnen", "Search for an account" : "Nach einem Konto suchen" }, diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json index 061cf9e4fab..c48e9942ac5 100644 --- a/apps/files/l10n/de_DE.json +++ b/apps/files/l10n/de_DE.json @@ -251,12 +251,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server.", "No favorites yet" : "Noch keine Favoriten vorhanden", "Files and folders you mark as favorite will show up here" : "Dateien und Ordner, die Sie als Favoriten kennzeichnen, werden hier erscheinen", - "Shares" : "Freigaben", - "Shared with others" : "Mit anderen geteilt", - "Shared with you" : "Mit Ihnen geteilt", - "Shared by link" : "Über einen Link geteilt", - "Deleted shares" : "Gelöschte Freigaben", - "Pending shares" : "Ausstehende Freigaben", "Text file" : "Textdatei", "New text file.txt" : "Neue Textdatei file.txt", "Storage invalid" : "Speicher ungültig", @@ -268,6 +262,12 @@ "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s von %2$s verwendet", "Deleted files" : "Gelöschte Dateien", + "Shares" : "Freigaben", + "Shared with others" : "Mit anderen geteilt", + "Shared with you" : "Mit Ihnen geteilt", + "Shared by link" : "Über einen Link geteilt", + "Deleted shares" : "Gelöschte Freigaben", + "Pending shares" : "Ausstehende Freigaben", "Open folder {name}" : "Ordner {name} öffnen", "Search for an account" : "Nach einem Konto suchen" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files/l10n/el.js b/apps/files/l10n/el.js index aa88231b73d..7a26f54acbc 100644 --- a/apps/files/l10n/el.js +++ b/apps/files/l10n/el.js @@ -230,12 +230,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Τα αρχεία που προσπαθείτε να μεταφορτώσετε υπερβαίνουν το μέγιστο μέγεθος μεταφόρτωσης αρχείων σε αυτόν τον διακομιστή.", "No favorites yet" : "Κανένα αγαπημένο ακόμα", "Files and folders you mark as favorite will show up here" : "Τα αρχεία και οι φάκελοι που σημειώνονται ως αγαπημένα θα εμφανιστούν εδώ", - "Shares" : "Κοινόχρηστα", - "Shared with others" : "Διαμοιρασμένα με άλλους", - "Shared with you" : "Διαμοιρασμένα με εσάς", - "Shared by link" : "Διαμοιρασμένα μέσω συνδέσμου", - "Deleted shares" : "Διαγραμμένα κοινόχρηστα", - "Pending shares" : "Κοινή χρήση σε εκκρεμότητα", "Text file" : "Αρχείο κειμένου", "New text file.txt" : "Νέο αρχείο file.txt", "Storage invalid" : "Μη έγκυρος αποθηκευτικός χώρος", @@ -247,6 +241,12 @@ OC.L10N.register( "%s%%" : "%s%%", "%1$s of %2$s used" : "χρησιμοποιούνται %1$s από %2$s", "Deleted files" : "Διαγραμμένα αρχεία", + "Shares" : "Κοινόχρηστα", + "Shared with others" : "Διαμοιρασμένα με άλλους", + "Shared with you" : "Διαμοιρασμένα με εσάς", + "Shared by link" : "Διαμοιρασμένα μέσω συνδέσμου", + "Deleted shares" : "Διαγραμμένα κοινόχρηστα", + "Pending shares" : "Κοινή χρήση σε εκκρεμότητα", "Open folder {name}" : "Άνοιγμα φακέλου {name}", "Search for an account" : "Αναζήτηση για λογαριασμό" }, diff --git a/apps/files/l10n/el.json b/apps/files/l10n/el.json index ed66c2af737..c77d88afa36 100644 --- a/apps/files/l10n/el.json +++ b/apps/files/l10n/el.json @@ -228,12 +228,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Τα αρχεία που προσπαθείτε να μεταφορτώσετε υπερβαίνουν το μέγιστο μέγεθος μεταφόρτωσης αρχείων σε αυτόν τον διακομιστή.", "No favorites yet" : "Κανένα αγαπημένο ακόμα", "Files and folders you mark as favorite will show up here" : "Τα αρχεία και οι φάκελοι που σημειώνονται ως αγαπημένα θα εμφανιστούν εδώ", - "Shares" : "Κοινόχρηστα", - "Shared with others" : "Διαμοιρασμένα με άλλους", - "Shared with you" : "Διαμοιρασμένα με εσάς", - "Shared by link" : "Διαμοιρασμένα μέσω συνδέσμου", - "Deleted shares" : "Διαγραμμένα κοινόχρηστα", - "Pending shares" : "Κοινή χρήση σε εκκρεμότητα", "Text file" : "Αρχείο κειμένου", "New text file.txt" : "Νέο αρχείο file.txt", "Storage invalid" : "Μη έγκυρος αποθηκευτικός χώρος", @@ -245,6 +239,12 @@ "%s%%" : "%s%%", "%1$s of %2$s used" : "χρησιμοποιούνται %1$s από %2$s", "Deleted files" : "Διαγραμμένα αρχεία", + "Shares" : "Κοινόχρηστα", + "Shared with others" : "Διαμοιρασμένα με άλλους", + "Shared with you" : "Διαμοιρασμένα με εσάς", + "Shared by link" : "Διαμοιρασμένα μέσω συνδέσμου", + "Deleted shares" : "Διαγραμμένα κοινόχρηστα", + "Pending shares" : "Κοινή χρήση σε εκκρεμότητα", "Open folder {name}" : "Άνοιγμα φακέλου {name}", "Search for an account" : "Αναζήτηση για λογαριασμό" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files/l10n/en_GB.js b/apps/files/l10n/en_GB.js index 04d8d2f1203..c1bce1c524f 100644 --- a/apps/files/l10n/en_GB.js +++ b/apps/files/l10n/en_GB.js @@ -253,12 +253,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "The files you are trying to upload exceed the maximum size for file uploads on this server.", "No favorites yet" : "No favourites yet", "Files and folders you mark as favorite will show up here" : "Files and folders you mark as favourite will show up here", - "Shares" : "Shares", - "Shared with others" : "Shared with others", - "Shared with you" : "Shared with you", - "Shared by link" : "Shared by link", - "Deleted shares" : "Deleted shares", - "Pending shares" : "Pending shares", "Text file" : "Text file", "New text file.txt" : "New text file.txt", "Storage invalid" : "Storage invalid", @@ -270,6 +264,12 @@ OC.L10N.register( "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s of %2$s used", "Deleted files" : "Deleted files", + "Shares" : "Shares", + "Shared with others" : "Shared with others", + "Shared with you" : "Shared with you", + "Shared by link" : "Shared by link", + "Deleted shares" : "Deleted shares", + "Pending shares" : "Pending shares", "Open folder {name}" : "Open folder {name}", "Search for an account" : "Search for an account" }, diff --git a/apps/files/l10n/en_GB.json b/apps/files/l10n/en_GB.json index a657bf115d9..b33ed773984 100644 --- a/apps/files/l10n/en_GB.json +++ b/apps/files/l10n/en_GB.json @@ -251,12 +251,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "The files you are trying to upload exceed the maximum size for file uploads on this server.", "No favorites yet" : "No favourites yet", "Files and folders you mark as favorite will show up here" : "Files and folders you mark as favourite will show up here", - "Shares" : "Shares", - "Shared with others" : "Shared with others", - "Shared with you" : "Shared with you", - "Shared by link" : "Shared by link", - "Deleted shares" : "Deleted shares", - "Pending shares" : "Pending shares", "Text file" : "Text file", "New text file.txt" : "New text file.txt", "Storage invalid" : "Storage invalid", @@ -268,6 +262,12 @@ "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s of %2$s used", "Deleted files" : "Deleted files", + "Shares" : "Shares", + "Shared with others" : "Shared with others", + "Shared with you" : "Shared with you", + "Shared by link" : "Shared by link", + "Deleted shares" : "Deleted shares", + "Pending shares" : "Pending shares", "Open folder {name}" : "Open folder {name}", "Search for an account" : "Search for an account" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files/l10n/eo.js b/apps/files/l10n/eo.js index 2a651bda130..33a490d34b8 100644 --- a/apps/files/l10n/eo.js +++ b/apps/files/l10n/eo.js @@ -154,11 +154,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "La dosieroj, kiujn vi provas alŝuti, transpasas la maksimuman grandon por dosieralŝutoj en ĉi tiu servilo.", "No favorites yet" : "Ankoraŭ neniu pliŝataĵo", "Files and folders you mark as favorite will show up here" : "Dosieroj kaj dosierujoj, kiujn vi markas kiel pliŝataĵoj, aperos ĉi tie", - "Shares" : "Kunhavigoj", - "Shared with others" : "Kunhavata kun aliaj", - "Shared with you" : "Kunhavata kun vi", - "Shared by link" : "Kunhavata per ligilo", - "Deleted shares" : "Forigitaj kunhavigoj", "Text file" : "Tekstodosiero", "New text file.txt" : "Nova tekstodosiero.txt", "Storage invalid" : "Konservejo ne validas", @@ -168,6 +163,11 @@ OC.L10N.register( "Cancel" : "Nuligi", "%s used" : "%s uzataj", "%1$s of %2$s used" : "%1$s uzataj el %2$s", - "Deleted files" : "Forigitaj dosieroj" + "Deleted files" : "Forigitaj dosieroj", + "Shares" : "Kunhavigoj", + "Shared with others" : "Kunhavata kun aliaj", + "Shared with you" : "Kunhavata kun vi", + "Shared by link" : "Kunhavata per ligilo", + "Deleted shares" : "Forigitaj kunhavigoj" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/eo.json b/apps/files/l10n/eo.json index 3f06a1d4f17..ce167503f14 100644 --- a/apps/files/l10n/eo.json +++ b/apps/files/l10n/eo.json @@ -152,11 +152,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "La dosieroj, kiujn vi provas alŝuti, transpasas la maksimuman grandon por dosieralŝutoj en ĉi tiu servilo.", "No favorites yet" : "Ankoraŭ neniu pliŝataĵo", "Files and folders you mark as favorite will show up here" : "Dosieroj kaj dosierujoj, kiujn vi markas kiel pliŝataĵoj, aperos ĉi tie", - "Shares" : "Kunhavigoj", - "Shared with others" : "Kunhavata kun aliaj", - "Shared with you" : "Kunhavata kun vi", - "Shared by link" : "Kunhavata per ligilo", - "Deleted shares" : "Forigitaj kunhavigoj", "Text file" : "Tekstodosiero", "New text file.txt" : "Nova tekstodosiero.txt", "Storage invalid" : "Konservejo ne validas", @@ -166,6 +161,11 @@ "Cancel" : "Nuligi", "%s used" : "%s uzataj", "%1$s of %2$s used" : "%1$s uzataj el %2$s", - "Deleted files" : "Forigitaj dosieroj" + "Deleted files" : "Forigitaj dosieroj", + "Shares" : "Kunhavigoj", + "Shared with others" : "Kunhavata kun aliaj", + "Shared with you" : "Kunhavata kun vi", + "Shared by link" : "Kunhavata per ligilo", + "Deleted shares" : "Forigitaj kunhavigoj" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/es.js b/apps/files/l10n/es.js index 9a3dc3d4781..71d6a42df87 100644 --- a/apps/files/l10n/es.js +++ b/apps/files/l10n/es.js @@ -253,12 +253,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que está intentando subir sobrepasan el tamaño máximo permitido en este servidor.", "No favorites yet" : "Aún no hay favoritos", "Files and folders you mark as favorite will show up here" : "Aquí aparecerán los archivos y carpetas que has marcado como favoritos", - "Shares" : "Archivos compartidos", - "Shared with others" : "Compartido con otros", - "Shared with you" : "Compartido conmigo", - "Shared by link" : "Compartido por enlace", - "Deleted shares" : "Recursos compartidos eliminados", - "Pending shares" : "Recursos compartidos pendientes", "Text file" : "Archivo de texto", "New text file.txt" : "Nuevo archivo.txt", "Storage invalid" : "Almacenamiento no válido", @@ -270,6 +264,12 @@ OC.L10N.register( "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s de %2$s usados", "Deleted files" : "Archivos eliminados", + "Shares" : "Archivos compartidos", + "Shared with others" : "Compartido con otros", + "Shared with you" : "Compartido conmigo", + "Shared by link" : "Compartido por enlace", + "Deleted shares" : "Recursos compartidos eliminados", + "Pending shares" : "Recursos compartidos pendientes", "Open folder {name}" : "Abrir carpeta {name}", "Search for an account" : "Buscar una cuenta" }, diff --git a/apps/files/l10n/es.json b/apps/files/l10n/es.json index 7fe1d16431a..a84a7c93981 100644 --- a/apps/files/l10n/es.json +++ b/apps/files/l10n/es.json @@ -251,12 +251,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que está intentando subir sobrepasan el tamaño máximo permitido en este servidor.", "No favorites yet" : "Aún no hay favoritos", "Files and folders you mark as favorite will show up here" : "Aquí aparecerán los archivos y carpetas que has marcado como favoritos", - "Shares" : "Archivos compartidos", - "Shared with others" : "Compartido con otros", - "Shared with you" : "Compartido conmigo", - "Shared by link" : "Compartido por enlace", - "Deleted shares" : "Recursos compartidos eliminados", - "Pending shares" : "Recursos compartidos pendientes", "Text file" : "Archivo de texto", "New text file.txt" : "Nuevo archivo.txt", "Storage invalid" : "Almacenamiento no válido", @@ -268,6 +262,12 @@ "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s de %2$s usados", "Deleted files" : "Archivos eliminados", + "Shares" : "Archivos compartidos", + "Shared with others" : "Compartido con otros", + "Shared with you" : "Compartido conmigo", + "Shared by link" : "Compartido por enlace", + "Deleted shares" : "Recursos compartidos eliminados", + "Pending shares" : "Recursos compartidos pendientes", "Open folder {name}" : "Abrir carpeta {name}", "Search for an account" : "Buscar una cuenta" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" diff --git a/apps/files/l10n/es_AR.js b/apps/files/l10n/es_AR.js index c1b5760774d..178d2e3d7b6 100644 --- a/apps/files/l10n/es_AR.js +++ b/apps/files/l10n/es_AR.js @@ -128,10 +128,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que está intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.", "No favorites yet" : "Aún no hay favoritos", "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marque como favortios se mostrarán aquí. ", - "Shares" : "Shares", - "Shared with others" : "Compartido con otros", - "Shared with you" : "Compartido con usted", - "Shared by link" : "Compartido por link", "Text file" : "Archivo de texto", "New text file.txt" : "Nuevo ArchivoDeTexto.txt", "Storage invalid" : "El almacenamiento es inválido", @@ -139,6 +135,10 @@ OC.L10N.register( "Cancel" : "Cancelar", "%s used" : "%s usado", "%1$s of %2$s used" : "%1$s de %2$s usados", - "Deleted files" : "Archivos borrados" + "Deleted files" : "Archivos borrados", + "Shares" : "Shares", + "Shared with others" : "Compartido con otros", + "Shared with you" : "Compartido con usted", + "Shared by link" : "Compartido por link" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/files/l10n/es_AR.json b/apps/files/l10n/es_AR.json index 4add2a0b1bc..6ecc675cdd6 100644 --- a/apps/files/l10n/es_AR.json +++ b/apps/files/l10n/es_AR.json @@ -126,10 +126,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que está intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.", "No favorites yet" : "Aún no hay favoritos", "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marque como favortios se mostrarán aquí. ", - "Shares" : "Shares", - "Shared with others" : "Compartido con otros", - "Shared with you" : "Compartido con usted", - "Shared by link" : "Compartido por link", "Text file" : "Archivo de texto", "New text file.txt" : "Nuevo ArchivoDeTexto.txt", "Storage invalid" : "El almacenamiento es inválido", @@ -137,6 +133,10 @@ "Cancel" : "Cancelar", "%s used" : "%s usado", "%1$s of %2$s used" : "%1$s de %2$s usados", - "Deleted files" : "Archivos borrados" + "Deleted files" : "Archivos borrados", + "Shares" : "Shares", + "Shared with others" : "Compartido con otros", + "Shared with you" : "Compartido con usted", + "Shared by link" : "Compartido por link" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files/l10n/es_CL.js b/apps/files/l10n/es_CL.js index f7e1dc8f19e..a54e355a49f 100644 --- a/apps/files/l10n/es_CL.js +++ b/apps/files/l10n/es_CL.js @@ -133,10 +133,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.", "No favorites yet" : "Aún no hay favoritos", "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marques como favoritos se mostrarán aquí. ", - "Shares" : "Elementos compartidos", - "Shared with others" : "Compartido con otros", - "Shared with you" : "Compartido con usted", - "Shared by link" : "Compartido por liga", "Text file" : "Archivo de texto", "New text file.txt" : "Nuevo ArchivoDeTexto.txt", "Storage invalid" : "El almacenamiento es inválido", @@ -144,6 +140,10 @@ OC.L10N.register( "Cancel" : "Cancelar", "%s used" : "%s usado", "%1$s of %2$s used" : "%1$s de %2$s usados", - "Deleted files" : "Papelera" + "Deleted files" : "Papelera", + "Shares" : "Elementos compartidos", + "Shared with others" : "Compartido con otros", + "Shared with you" : "Compartido con usted", + "Shared by link" : "Compartido por liga" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/files/l10n/es_CL.json b/apps/files/l10n/es_CL.json index 798f22e2a0d..205c691248b 100644 --- a/apps/files/l10n/es_CL.json +++ b/apps/files/l10n/es_CL.json @@ -131,10 +131,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.", "No favorites yet" : "Aún no hay favoritos", "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marques como favoritos se mostrarán aquí. ", - "Shares" : "Elementos compartidos", - "Shared with others" : "Compartido con otros", - "Shared with you" : "Compartido con usted", - "Shared by link" : "Compartido por liga", "Text file" : "Archivo de texto", "New text file.txt" : "Nuevo ArchivoDeTexto.txt", "Storage invalid" : "El almacenamiento es inválido", @@ -142,6 +138,10 @@ "Cancel" : "Cancelar", "%s used" : "%s usado", "%1$s of %2$s used" : "%1$s de %2$s usados", - "Deleted files" : "Papelera" + "Deleted files" : "Papelera", + "Shares" : "Elementos compartidos", + "Shared with others" : "Compartido con otros", + "Shared with you" : "Compartido con usted", + "Shared by link" : "Compartido por liga" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files/l10n/es_CO.js b/apps/files/l10n/es_CO.js index 123f014efde..3fb147af506 100644 --- a/apps/files/l10n/es_CO.js +++ b/apps/files/l10n/es_CO.js @@ -133,10 +133,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.", "No favorites yet" : "Aún no hay favoritos", "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marques como favoritos se mostrarán aquí. ", - "Shares" : "Elementos compartidos", - "Shared with others" : "Compartido con otros", - "Shared with you" : "Compartido con usted", - "Shared by link" : "Compartido por liga", "Text file" : "Archivo de texto", "New text file.txt" : "Nuevo ArchivoDeTexto.txt", "Storage invalid" : "El almacenamiento es inválido", @@ -144,6 +140,10 @@ OC.L10N.register( "Cancel" : "Cancelar", "%s used" : "%s usado", "%1$s of %2$s used" : "%1$s de %2$s usados", - "Deleted files" : "Papelera" + "Deleted files" : "Papelera", + "Shares" : "Elementos compartidos", + "Shared with others" : "Compartido con otros", + "Shared with you" : "Compartido con usted", + "Shared by link" : "Compartido por liga" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/files/l10n/es_CO.json b/apps/files/l10n/es_CO.json index 5727d5ea55d..8012d390100 100644 --- a/apps/files/l10n/es_CO.json +++ b/apps/files/l10n/es_CO.json @@ -131,10 +131,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.", "No favorites yet" : "Aún no hay favoritos", "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marques como favoritos se mostrarán aquí. ", - "Shares" : "Elementos compartidos", - "Shared with others" : "Compartido con otros", - "Shared with you" : "Compartido con usted", - "Shared by link" : "Compartido por liga", "Text file" : "Archivo de texto", "New text file.txt" : "Nuevo ArchivoDeTexto.txt", "Storage invalid" : "El almacenamiento es inválido", @@ -142,6 +138,10 @@ "Cancel" : "Cancelar", "%s used" : "%s usado", "%1$s of %2$s used" : "%1$s de %2$s usados", - "Deleted files" : "Papelera" + "Deleted files" : "Papelera", + "Shares" : "Elementos compartidos", + "Shared with others" : "Compartido con otros", + "Shared with you" : "Compartido con usted", + "Shared by link" : "Compartido por liga" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files/l10n/es_CR.js b/apps/files/l10n/es_CR.js index 76916d1aff4..2778c799107 100644 --- a/apps/files/l10n/es_CR.js +++ b/apps/files/l10n/es_CR.js @@ -132,10 +132,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.", "No favorites yet" : "Aún no hay favoritos", "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marques como favoritos se mostrarán aquí. ", - "Shares" : "Elementos compartidos", - "Shared with others" : "Compartido con otros", - "Shared with you" : "Compartido con usted", - "Shared by link" : "Compartido por liga", "Text file" : "Archivo de texto", "New text file.txt" : "Nuevo ArchivoDeTexto.txt", "Storage invalid" : "El almacenamiento es inválido", @@ -143,6 +139,10 @@ OC.L10N.register( "Cancel" : "Cancelar", "%s used" : "%s usado", "%1$s of %2$s used" : "%1$s de %2$s usados", - "Deleted files" : "Papelera" + "Deleted files" : "Papelera", + "Shares" : "Elementos compartidos", + "Shared with others" : "Compartido con otros", + "Shared with you" : "Compartido con usted", + "Shared by link" : "Compartido por liga" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/files/l10n/es_CR.json b/apps/files/l10n/es_CR.json index 296c7dc4986..fd0085678c4 100644 --- a/apps/files/l10n/es_CR.json +++ b/apps/files/l10n/es_CR.json @@ -130,10 +130,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.", "No favorites yet" : "Aún no hay favoritos", "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marques como favoritos se mostrarán aquí. ", - "Shares" : "Elementos compartidos", - "Shared with others" : "Compartido con otros", - "Shared with you" : "Compartido con usted", - "Shared by link" : "Compartido por liga", "Text file" : "Archivo de texto", "New text file.txt" : "Nuevo ArchivoDeTexto.txt", "Storage invalid" : "El almacenamiento es inválido", @@ -141,6 +137,10 @@ "Cancel" : "Cancelar", "%s used" : "%s usado", "%1$s of %2$s used" : "%1$s de %2$s usados", - "Deleted files" : "Papelera" + "Deleted files" : "Papelera", + "Shares" : "Elementos compartidos", + "Shared with others" : "Compartido con otros", + "Shared with you" : "Compartido con usted", + "Shared by link" : "Compartido por liga" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files/l10n/es_DO.js b/apps/files/l10n/es_DO.js index 76916d1aff4..2778c799107 100644 --- a/apps/files/l10n/es_DO.js +++ b/apps/files/l10n/es_DO.js @@ -132,10 +132,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.", "No favorites yet" : "Aún no hay favoritos", "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marques como favoritos se mostrarán aquí. ", - "Shares" : "Elementos compartidos", - "Shared with others" : "Compartido con otros", - "Shared with you" : "Compartido con usted", - "Shared by link" : "Compartido por liga", "Text file" : "Archivo de texto", "New text file.txt" : "Nuevo ArchivoDeTexto.txt", "Storage invalid" : "El almacenamiento es inválido", @@ -143,6 +139,10 @@ OC.L10N.register( "Cancel" : "Cancelar", "%s used" : "%s usado", "%1$s of %2$s used" : "%1$s de %2$s usados", - "Deleted files" : "Papelera" + "Deleted files" : "Papelera", + "Shares" : "Elementos compartidos", + "Shared with others" : "Compartido con otros", + "Shared with you" : "Compartido con usted", + "Shared by link" : "Compartido por liga" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/files/l10n/es_DO.json b/apps/files/l10n/es_DO.json index 296c7dc4986..fd0085678c4 100644 --- a/apps/files/l10n/es_DO.json +++ b/apps/files/l10n/es_DO.json @@ -130,10 +130,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.", "No favorites yet" : "Aún no hay favoritos", "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marques como favoritos se mostrarán aquí. ", - "Shares" : "Elementos compartidos", - "Shared with others" : "Compartido con otros", - "Shared with you" : "Compartido con usted", - "Shared by link" : "Compartido por liga", "Text file" : "Archivo de texto", "New text file.txt" : "Nuevo ArchivoDeTexto.txt", "Storage invalid" : "El almacenamiento es inválido", @@ -141,6 +137,10 @@ "Cancel" : "Cancelar", "%s used" : "%s usado", "%1$s of %2$s used" : "%1$s de %2$s usados", - "Deleted files" : "Papelera" + "Deleted files" : "Papelera", + "Shares" : "Elementos compartidos", + "Shared with others" : "Compartido con otros", + "Shared with you" : "Compartido con usted", + "Shared by link" : "Compartido por liga" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files/l10n/es_EC.js b/apps/files/l10n/es_EC.js index 76916d1aff4..2778c799107 100644 --- a/apps/files/l10n/es_EC.js +++ b/apps/files/l10n/es_EC.js @@ -132,10 +132,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.", "No favorites yet" : "Aún no hay favoritos", "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marques como favoritos se mostrarán aquí. ", - "Shares" : "Elementos compartidos", - "Shared with others" : "Compartido con otros", - "Shared with you" : "Compartido con usted", - "Shared by link" : "Compartido por liga", "Text file" : "Archivo de texto", "New text file.txt" : "Nuevo ArchivoDeTexto.txt", "Storage invalid" : "El almacenamiento es inválido", @@ -143,6 +139,10 @@ OC.L10N.register( "Cancel" : "Cancelar", "%s used" : "%s usado", "%1$s of %2$s used" : "%1$s de %2$s usados", - "Deleted files" : "Papelera" + "Deleted files" : "Papelera", + "Shares" : "Elementos compartidos", + "Shared with others" : "Compartido con otros", + "Shared with you" : "Compartido con usted", + "Shared by link" : "Compartido por liga" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/files/l10n/es_EC.json b/apps/files/l10n/es_EC.json index 296c7dc4986..fd0085678c4 100644 --- a/apps/files/l10n/es_EC.json +++ b/apps/files/l10n/es_EC.json @@ -130,10 +130,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.", "No favorites yet" : "Aún no hay favoritos", "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marques como favoritos se mostrarán aquí. ", - "Shares" : "Elementos compartidos", - "Shared with others" : "Compartido con otros", - "Shared with you" : "Compartido con usted", - "Shared by link" : "Compartido por liga", "Text file" : "Archivo de texto", "New text file.txt" : "Nuevo ArchivoDeTexto.txt", "Storage invalid" : "El almacenamiento es inválido", @@ -141,6 +137,10 @@ "Cancel" : "Cancelar", "%s used" : "%s usado", "%1$s of %2$s used" : "%1$s de %2$s usados", - "Deleted files" : "Papelera" + "Deleted files" : "Papelera", + "Shares" : "Elementos compartidos", + "Shared with others" : "Compartido con otros", + "Shared with you" : "Compartido con usted", + "Shared by link" : "Compartido por liga" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files/l10n/es_GT.js b/apps/files/l10n/es_GT.js index 76916d1aff4..2778c799107 100644 --- a/apps/files/l10n/es_GT.js +++ b/apps/files/l10n/es_GT.js @@ -132,10 +132,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.", "No favorites yet" : "Aún no hay favoritos", "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marques como favoritos se mostrarán aquí. ", - "Shares" : "Elementos compartidos", - "Shared with others" : "Compartido con otros", - "Shared with you" : "Compartido con usted", - "Shared by link" : "Compartido por liga", "Text file" : "Archivo de texto", "New text file.txt" : "Nuevo ArchivoDeTexto.txt", "Storage invalid" : "El almacenamiento es inválido", @@ -143,6 +139,10 @@ OC.L10N.register( "Cancel" : "Cancelar", "%s used" : "%s usado", "%1$s of %2$s used" : "%1$s de %2$s usados", - "Deleted files" : "Papelera" + "Deleted files" : "Papelera", + "Shares" : "Elementos compartidos", + "Shared with others" : "Compartido con otros", + "Shared with you" : "Compartido con usted", + "Shared by link" : "Compartido por liga" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/files/l10n/es_GT.json b/apps/files/l10n/es_GT.json index 296c7dc4986..fd0085678c4 100644 --- a/apps/files/l10n/es_GT.json +++ b/apps/files/l10n/es_GT.json @@ -130,10 +130,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.", "No favorites yet" : "Aún no hay favoritos", "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marques como favoritos se mostrarán aquí. ", - "Shares" : "Elementos compartidos", - "Shared with others" : "Compartido con otros", - "Shared with you" : "Compartido con usted", - "Shared by link" : "Compartido por liga", "Text file" : "Archivo de texto", "New text file.txt" : "Nuevo ArchivoDeTexto.txt", "Storage invalid" : "El almacenamiento es inválido", @@ -141,6 +137,10 @@ "Cancel" : "Cancelar", "%s used" : "%s usado", "%1$s of %2$s used" : "%1$s de %2$s usados", - "Deleted files" : "Papelera" + "Deleted files" : "Papelera", + "Shares" : "Elementos compartidos", + "Shared with others" : "Compartido con otros", + "Shared with you" : "Compartido con usted", + "Shared by link" : "Compartido por liga" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files/l10n/es_MX.js b/apps/files/l10n/es_MX.js index e5195e9e03f..323a8e1f645 100644 --- a/apps/files/l10n/es_MX.js +++ b/apps/files/l10n/es_MX.js @@ -214,12 +214,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.", "No favorites yet" : "Aún no hay favoritos", "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marques como favoritos se mostrarán aquí. ", - "Shares" : "Elementos compartidos", - "Shared with others" : "Compartido con otros", - "Shared with you" : "Compartido con usted", - "Shared by link" : "Compartido por liga", - "Deleted shares" : "Recursos compartidos eliminados", - "Pending shares" : "Recursos compartidos pendientes", "Text file" : "Archivo de texto", "New text file.txt" : "Nuevo ArchivoDeTexto.txt", "Storage invalid" : "El almacenamiento es inválido", @@ -230,6 +224,12 @@ OC.L10N.register( "%s used" : "%s usado", "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s de %2$s usados", - "Deleted files" : "Papelera" + "Deleted files" : "Papelera", + "Shares" : "Elementos compartidos", + "Shared with others" : "Compartido con otros", + "Shared with you" : "Compartido con usted", + "Shared by link" : "Compartido por liga", + "Deleted shares" : "Recursos compartidos eliminados", + "Pending shares" : "Recursos compartidos pendientes" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/files/l10n/es_MX.json b/apps/files/l10n/es_MX.json index fc12ba07f00..c9f6cd64ce4 100644 --- a/apps/files/l10n/es_MX.json +++ b/apps/files/l10n/es_MX.json @@ -212,12 +212,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.", "No favorites yet" : "Aún no hay favoritos", "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marques como favoritos se mostrarán aquí. ", - "Shares" : "Elementos compartidos", - "Shared with others" : "Compartido con otros", - "Shared with you" : "Compartido con usted", - "Shared by link" : "Compartido por liga", - "Deleted shares" : "Recursos compartidos eliminados", - "Pending shares" : "Recursos compartidos pendientes", "Text file" : "Archivo de texto", "New text file.txt" : "Nuevo ArchivoDeTexto.txt", "Storage invalid" : "El almacenamiento es inválido", @@ -228,6 +222,12 @@ "%s used" : "%s usado", "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s de %2$s usados", - "Deleted files" : "Papelera" + "Deleted files" : "Papelera", + "Shares" : "Elementos compartidos", + "Shared with others" : "Compartido con otros", + "Shared with you" : "Compartido con usted", + "Shared by link" : "Compartido por liga", + "Deleted shares" : "Recursos compartidos eliminados", + "Pending shares" : "Recursos compartidos pendientes" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files/l10n/es_PE.js b/apps/files/l10n/es_PE.js index 520e534b021..5fa79d080df 100644 --- a/apps/files/l10n/es_PE.js +++ b/apps/files/l10n/es_PE.js @@ -145,10 +145,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.", "No favorites yet" : "Aún no hay favoritos", "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marques como favoritos se mostrarán aquí. ", - "Shares" : "Elementos compartidos", - "Shared with others" : "Compartido con otros", - "Shared with you" : "Compartido con usted", - "Shared by link" : "Compartido por liga", "Text file" : "Archivo de texto", "New text file.txt" : "Nuevo ArchivoDeTexto.txt", "Storage invalid" : "El almacenamiento es inválido", @@ -156,6 +152,10 @@ OC.L10N.register( "Cancel" : "Cancelar", "%s used" : "%s usado", "%1$s of %2$s used" : "%1$s de %2$s usados", - "Deleted files" : "Archivos borrados" + "Deleted files" : "Archivos borrados", + "Shares" : "Elementos compartidos", + "Shared with others" : "Compartido con otros", + "Shared with you" : "Compartido con usted", + "Shared by link" : "Compartido por liga" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/files/l10n/es_PE.json b/apps/files/l10n/es_PE.json index 34234fb3e1f..b86f27a19a1 100644 --- a/apps/files/l10n/es_PE.json +++ b/apps/files/l10n/es_PE.json @@ -143,10 +143,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.", "No favorites yet" : "Aún no hay favoritos", "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marques como favoritos se mostrarán aquí. ", - "Shares" : "Elementos compartidos", - "Shared with others" : "Compartido con otros", - "Shared with you" : "Compartido con usted", - "Shared by link" : "Compartido por liga", "Text file" : "Archivo de texto", "New text file.txt" : "Nuevo ArchivoDeTexto.txt", "Storage invalid" : "El almacenamiento es inválido", @@ -154,6 +150,10 @@ "Cancel" : "Cancelar", "%s used" : "%s usado", "%1$s of %2$s used" : "%1$s de %2$s usados", - "Deleted files" : "Archivos borrados" + "Deleted files" : "Archivos borrados", + "Shares" : "Elementos compartidos", + "Shared with others" : "Compartido con otros", + "Shared with you" : "Compartido con usted", + "Shared by link" : "Compartido por liga" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files/l10n/es_PY.js b/apps/files/l10n/es_PY.js index d822a5e8e4a..ef684fbfe2c 100644 --- a/apps/files/l10n/es_PY.js +++ b/apps/files/l10n/es_PY.js @@ -136,10 +136,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.", "No favorites yet" : "Aún no hay favoritos", "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marques como favoritos se mostrarán aquí. ", - "Shares" : "Elementos compartidos", - "Shared with others" : "Compartido con otros", - "Shared with you" : "Compartido con usted", - "Shared by link" : "Compartido por liga", "Text file" : "Archivo de texto", "New text file.txt" : "Nuevo ArchivoDeTexto.txt", "Storage invalid" : "El almacenamiento es inválido", @@ -147,6 +143,10 @@ OC.L10N.register( "Cancel" : "Cancelar", "%s used" : "%s usado", "%1$s of %2$s used" : "%1$s de %2$s usados", - "Deleted files" : "Archivos borrados" + "Deleted files" : "Archivos borrados", + "Shares" : "Elementos compartidos", + "Shared with others" : "Compartido con otros", + "Shared with you" : "Compartido con usted", + "Shared by link" : "Compartido por liga" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/files/l10n/es_PY.json b/apps/files/l10n/es_PY.json index 3a8807449c8..37b9635b56e 100644 --- a/apps/files/l10n/es_PY.json +++ b/apps/files/l10n/es_PY.json @@ -134,10 +134,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.", "No favorites yet" : "Aún no hay favoritos", "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marques como favoritos se mostrarán aquí. ", - "Shares" : "Elementos compartidos", - "Shared with others" : "Compartido con otros", - "Shared with you" : "Compartido con usted", - "Shared by link" : "Compartido por liga", "Text file" : "Archivo de texto", "New text file.txt" : "Nuevo ArchivoDeTexto.txt", "Storage invalid" : "El almacenamiento es inválido", @@ -145,6 +141,10 @@ "Cancel" : "Cancelar", "%s used" : "%s usado", "%1$s of %2$s used" : "%1$s de %2$s usados", - "Deleted files" : "Archivos borrados" + "Deleted files" : "Archivos borrados", + "Shares" : "Elementos compartidos", + "Shared with others" : "Compartido con otros", + "Shared with you" : "Compartido con usted", + "Shared by link" : "Compartido por liga" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files/l10n/es_SV.js b/apps/files/l10n/es_SV.js index 76916d1aff4..2778c799107 100644 --- a/apps/files/l10n/es_SV.js +++ b/apps/files/l10n/es_SV.js @@ -132,10 +132,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.", "No favorites yet" : "Aún no hay favoritos", "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marques como favoritos se mostrarán aquí. ", - "Shares" : "Elementos compartidos", - "Shared with others" : "Compartido con otros", - "Shared with you" : "Compartido con usted", - "Shared by link" : "Compartido por liga", "Text file" : "Archivo de texto", "New text file.txt" : "Nuevo ArchivoDeTexto.txt", "Storage invalid" : "El almacenamiento es inválido", @@ -143,6 +139,10 @@ OC.L10N.register( "Cancel" : "Cancelar", "%s used" : "%s usado", "%1$s of %2$s used" : "%1$s de %2$s usados", - "Deleted files" : "Papelera" + "Deleted files" : "Papelera", + "Shares" : "Elementos compartidos", + "Shared with others" : "Compartido con otros", + "Shared with you" : "Compartido con usted", + "Shared by link" : "Compartido por liga" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/files/l10n/es_SV.json b/apps/files/l10n/es_SV.json index 296c7dc4986..fd0085678c4 100644 --- a/apps/files/l10n/es_SV.json +++ b/apps/files/l10n/es_SV.json @@ -130,10 +130,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando cargar sobrepasan el tamaño máximo permitido para la carga de archivos en este servidor.", "No favorites yet" : "Aún no hay favoritos", "Files and folders you mark as favorite will show up here" : "Los archivos y carpetas que marques como favoritos se mostrarán aquí. ", - "Shares" : "Elementos compartidos", - "Shared with others" : "Compartido con otros", - "Shared with you" : "Compartido con usted", - "Shared by link" : "Compartido por liga", "Text file" : "Archivo de texto", "New text file.txt" : "Nuevo ArchivoDeTexto.txt", "Storage invalid" : "El almacenamiento es inválido", @@ -141,6 +137,10 @@ "Cancel" : "Cancelar", "%s used" : "%s usado", "%1$s of %2$s used" : "%1$s de %2$s usados", - "Deleted files" : "Papelera" + "Deleted files" : "Papelera", + "Shares" : "Elementos compartidos", + "Shared with others" : "Compartido con otros", + "Shared with you" : "Compartido con usted", + "Shared by link" : "Compartido por liga" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files/l10n/et_EE.js b/apps/files/l10n/et_EE.js index fc155acc139..b536b8c6042 100644 --- a/apps/files/l10n/et_EE.js +++ b/apps/files/l10n/et_EE.js @@ -185,12 +185,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Failid, mida sa proovid üles laadida, ületavad serveri poolt üleslaaditavatele failidele määratud maksimaalse suuruse.", "No favorites yet" : "Lemmikuid veel pole", "Files and folders you mark as favorite will show up here" : "Siin kuvatakse faile ja kaustasid, mille oled märkinud lemmikuteks", - "Shares" : "Jagamisi", - "Shared with others" : "Teistega jagatud", - "Shared with you" : "Sinuga jagatud", - "Shared by link" : "Jagatud lingiga", - "Deleted shares" : "Kustutatud jagamised", - "Pending shares" : "Ootel jagamised", "Text file" : "Tekstifail", "New text file.txt" : "Uus tekstifail.txt", "Storage invalid" : "Vigane andmehoidla", @@ -202,6 +196,12 @@ OC.L10N.register( "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s / %2$s kasutusel", "Deleted files" : "Kustutatud failid", + "Shares" : "Jagamisi", + "Shared with others" : "Teistega jagatud", + "Shared with you" : "Sinuga jagatud", + "Shared by link" : "Jagatud lingiga", + "Deleted shares" : "Kustutatud jagamised", + "Pending shares" : "Ootel jagamised", "Open folder {name}" : "Ava kaust {name}", "Search for an account" : "Otsi kontot" }, diff --git a/apps/files/l10n/et_EE.json b/apps/files/l10n/et_EE.json index 33e83cc5122..e43b995ddc8 100644 --- a/apps/files/l10n/et_EE.json +++ b/apps/files/l10n/et_EE.json @@ -183,12 +183,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Failid, mida sa proovid üles laadida, ületavad serveri poolt üleslaaditavatele failidele määratud maksimaalse suuruse.", "No favorites yet" : "Lemmikuid veel pole", "Files and folders you mark as favorite will show up here" : "Siin kuvatakse faile ja kaustasid, mille oled märkinud lemmikuteks", - "Shares" : "Jagamisi", - "Shared with others" : "Teistega jagatud", - "Shared with you" : "Sinuga jagatud", - "Shared by link" : "Jagatud lingiga", - "Deleted shares" : "Kustutatud jagamised", - "Pending shares" : "Ootel jagamised", "Text file" : "Tekstifail", "New text file.txt" : "Uus tekstifail.txt", "Storage invalid" : "Vigane andmehoidla", @@ -200,6 +194,12 @@ "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s / %2$s kasutusel", "Deleted files" : "Kustutatud failid", + "Shares" : "Jagamisi", + "Shared with others" : "Teistega jagatud", + "Shared with you" : "Sinuga jagatud", + "Shared by link" : "Jagatud lingiga", + "Deleted shares" : "Kustutatud jagamised", + "Pending shares" : "Ootel jagamised", "Open folder {name}" : "Ava kaust {name}", "Search for an account" : "Otsi kontot" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files/l10n/eu.js b/apps/files/l10n/eu.js index a53022240e4..6ba007bd567 100644 --- a/apps/files/l10n/eu.js +++ b/apps/files/l10n/eu.js @@ -107,6 +107,8 @@ OC.L10N.register( "Create new folder" : "Sortu karpeta berria", "Upload file" : "Kargatu fitxategia", "Recent" : "Azkenak", + "This file has the tag {tag}" : "Fitxategi honek {tag} etiketa dauka", + "This file has the tags {firstTags} and {lastTag}" : "Fitxategi honek {firstTags} eta {lastTag} etiketak ditu", "Not favorited" : "Ez da gogokoa", "Remove from favorites" : "Kendu gogokoetatik", "Add to favorites" : "Gehitu gogokoetara", @@ -171,10 +173,18 @@ OC.L10N.register( "Select the row for {displayName}" : "Hautatu {displayName} errenkada", "Rename file" : "Berrizendatu fitxategia", "File name" : "Fitxategi izena", + "A long time ago" : "Orain dela denbora asko", "Download file {name}" : "Deskargatu {name} fitxategia ", "\"{displayName}\" action executed successfully" : "\"{displayName}\" ekintza behar bezala exekutatu da", "\"{displayName}\" action failed" : "\"{displayName}\" ekintzak huts egin du", + "\"{name}\" is not an allowed filetype." : "\"{name}\" fitxategi-mota ez da onartzen.", + "{newName} already exists." : "{newName} badago aurretik.", "Name cannot be empty" : "Izena ezin da hutsik egon", + "Another entry with the same name already exists" : "Badago izen hori duen beste sarrera bat", + "Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" \"{newName}\"(e)ra berrizendatu da.", + "Could not rename \"{oldName}\", it does not exist any more" : "Ezin izan da \"{oldName}\" berrizendatu, ez da existitzen dagoeneko", + "The name \"{newName}\"\" is already used in the folder \"{dir}\". Please choose a different name." : "\"{newName}\" izena \"{dir}\" karpetan dagoeneko erabiltzen da. Mesedez aukeratu beste izen bat.", + "Could not rename \"{oldName}\"" : "Ezin izan da \"{oldName}\" berrizendatu ", "Total rows summary" : "Errenkaden guztirako laburpena", "Select all" : "Hautatu dena", "Unselect all" : "Desautatu dena", @@ -209,6 +219,7 @@ OC.L10N.register( "Files settings" : "FItxategien ezarpenak", "File cannot be accessed" : "Ezin da fitxategia atzitu", "You might not have have permissions to view it, ask the sender to share it" : "Baliteke hura ikusteko baimenik ez izatea; eskatu igorleari partekatzeko", + "Sort favorites first" : "Ordenatu gogokoak lehenengo", "Show hidden files" : "Erakutsi ezkutuko fitxategiak", "Crop image previews" : "Moztu irudien aurrebistak", "Additional settings" : "Ezarpen gehiago", @@ -227,10 +238,13 @@ OC.L10N.register( "Blank" : "Hutsik", "Unable to create new file from template" : "Ezin da fitxategi berria sortu txantiloitik", "Delete permanently" : "Ezabatu betirako", + "Open folder {displayName}" : "Ireki {displayName} karpeta", "Open details" : "Ireki xehetasunak", "Set up templates folder" : "Konfiguratu txantiloien karpeta", "Templates" : "Txantiloiak", + "Create new templates folder" : "Sortu txantiloi karpeta berria", "Unable to initialize the templates directory" : "Ezin da txantiloien direktorioa hasieratu", + "List of favorites files and folders." : "Fitxategi eta karpeta gogokoen zerrenda.", "Toggle %1$s sublist" : "Txandakatu %1$sazpizerrenda", "Toggle grid view" : "Txandakatu sareta ikuspegia", "Upload some content or sync with your devices!" : "Kargatu edukiren bat edo sinkronizatu zure gailuekin!", @@ -239,12 +253,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Kargatzen saiatzen ari zaren fitxategiek zerbitzari honek onartzen duen gehienezko tamaina gainditzen dute.", "No favorites yet" : "Gogokorik ez oraindik", "Files and folders you mark as favorite will show up here" : "Gogokotzat markatutako fitxategi eta karpetak hemen agertuko dira", - "Shares" : "Partekatzeak", - "Shared with others" : "Besteekin partekatuta", - "Shared with you" : "Zurekin partekatuta", - "Shared by link" : "Esteka bidez partekatuta", - "Deleted shares" : "Ezabatutako partekatzeak", - "Pending shares" : "Zain dauden partekatzeak", "Text file" : "Testu-fitxategia", "New text file.txt" : "Testu-fitxategi berria.txt", "Storage invalid" : "Biltegi baliogabea", @@ -256,6 +264,12 @@ OC.L10N.register( "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s / %2$s erabilita", "Deleted files" : "Ezabatutako fitxategiak", + "Shares" : "Partekatzeak", + "Shared with others" : "Besteekin partekatuta", + "Shared with you" : "Zurekin partekatuta", + "Shared by link" : "Esteka bidez partekatuta", + "Deleted shares" : "Ezabatutako partekatzeak", + "Pending shares" : "Zain dauden partekatzeak", "Open folder {name}" : "Ireki {name} karpeta", "Search for an account" : "Bilatu kontu bat" }, diff --git a/apps/files/l10n/eu.json b/apps/files/l10n/eu.json index b475341c1ac..440d2b71628 100644 --- a/apps/files/l10n/eu.json +++ b/apps/files/l10n/eu.json @@ -105,6 +105,8 @@ "Create new folder" : "Sortu karpeta berria", "Upload file" : "Kargatu fitxategia", "Recent" : "Azkenak", + "This file has the tag {tag}" : "Fitxategi honek {tag} etiketa dauka", + "This file has the tags {firstTags} and {lastTag}" : "Fitxategi honek {firstTags} eta {lastTag} etiketak ditu", "Not favorited" : "Ez da gogokoa", "Remove from favorites" : "Kendu gogokoetatik", "Add to favorites" : "Gehitu gogokoetara", @@ -169,10 +171,18 @@ "Select the row for {displayName}" : "Hautatu {displayName} errenkada", "Rename file" : "Berrizendatu fitxategia", "File name" : "Fitxategi izena", + "A long time ago" : "Orain dela denbora asko", "Download file {name}" : "Deskargatu {name} fitxategia ", "\"{displayName}\" action executed successfully" : "\"{displayName}\" ekintza behar bezala exekutatu da", "\"{displayName}\" action failed" : "\"{displayName}\" ekintzak huts egin du", + "\"{name}\" is not an allowed filetype." : "\"{name}\" fitxategi-mota ez da onartzen.", + "{newName} already exists." : "{newName} badago aurretik.", "Name cannot be empty" : "Izena ezin da hutsik egon", + "Another entry with the same name already exists" : "Badago izen hori duen beste sarrera bat", + "Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" \"{newName}\"(e)ra berrizendatu da.", + "Could not rename \"{oldName}\", it does not exist any more" : "Ezin izan da \"{oldName}\" berrizendatu, ez da existitzen dagoeneko", + "The name \"{newName}\"\" is already used in the folder \"{dir}\". Please choose a different name." : "\"{newName}\" izena \"{dir}\" karpetan dagoeneko erabiltzen da. Mesedez aukeratu beste izen bat.", + "Could not rename \"{oldName}\"" : "Ezin izan da \"{oldName}\" berrizendatu ", "Total rows summary" : "Errenkaden guztirako laburpena", "Select all" : "Hautatu dena", "Unselect all" : "Desautatu dena", @@ -207,6 +217,7 @@ "Files settings" : "FItxategien ezarpenak", "File cannot be accessed" : "Ezin da fitxategia atzitu", "You might not have have permissions to view it, ask the sender to share it" : "Baliteke hura ikusteko baimenik ez izatea; eskatu igorleari partekatzeko", + "Sort favorites first" : "Ordenatu gogokoak lehenengo", "Show hidden files" : "Erakutsi ezkutuko fitxategiak", "Crop image previews" : "Moztu irudien aurrebistak", "Additional settings" : "Ezarpen gehiago", @@ -225,10 +236,13 @@ "Blank" : "Hutsik", "Unable to create new file from template" : "Ezin da fitxategi berria sortu txantiloitik", "Delete permanently" : "Ezabatu betirako", + "Open folder {displayName}" : "Ireki {displayName} karpeta", "Open details" : "Ireki xehetasunak", "Set up templates folder" : "Konfiguratu txantiloien karpeta", "Templates" : "Txantiloiak", + "Create new templates folder" : "Sortu txantiloi karpeta berria", "Unable to initialize the templates directory" : "Ezin da txantiloien direktorioa hasieratu", + "List of favorites files and folders." : "Fitxategi eta karpeta gogokoen zerrenda.", "Toggle %1$s sublist" : "Txandakatu %1$sazpizerrenda", "Toggle grid view" : "Txandakatu sareta ikuspegia", "Upload some content or sync with your devices!" : "Kargatu edukiren bat edo sinkronizatu zure gailuekin!", @@ -237,12 +251,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Kargatzen saiatzen ari zaren fitxategiek zerbitzari honek onartzen duen gehienezko tamaina gainditzen dute.", "No favorites yet" : "Gogokorik ez oraindik", "Files and folders you mark as favorite will show up here" : "Gogokotzat markatutako fitxategi eta karpetak hemen agertuko dira", - "Shares" : "Partekatzeak", - "Shared with others" : "Besteekin partekatuta", - "Shared with you" : "Zurekin partekatuta", - "Shared by link" : "Esteka bidez partekatuta", - "Deleted shares" : "Ezabatutako partekatzeak", - "Pending shares" : "Zain dauden partekatzeak", "Text file" : "Testu-fitxategia", "New text file.txt" : "Testu-fitxategi berria.txt", "Storage invalid" : "Biltegi baliogabea", @@ -254,6 +262,12 @@ "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s / %2$s erabilita", "Deleted files" : "Ezabatutako fitxategiak", + "Shares" : "Partekatzeak", + "Shared with others" : "Besteekin partekatuta", + "Shared with you" : "Zurekin partekatuta", + "Shared by link" : "Esteka bidez partekatuta", + "Deleted shares" : "Ezabatutako partekatzeak", + "Pending shares" : "Zain dauden partekatzeak", "Open folder {name}" : "Ireki {name} karpeta", "Search for an account" : "Bilatu kontu bat" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files/l10n/fa.js b/apps/files/l10n/fa.js index bdadcea9dce..64977f3748b 100644 --- a/apps/files/l10n/fa.js +++ b/apps/files/l10n/fa.js @@ -125,18 +125,18 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "فایلها بیش از حد تعیین شده در این سرور هستند\nمترجم:با تغییر فایل php,ini میتوان این محدودیت را برطرف کرد", "No favorites yet" : "هنوز مورد دلخواه وجود ندارد", "Files and folders you mark as favorite will show up here" : "فایلها و پوشههای انتخاب شده به عنوان برگزیده توسط شما، در اینجا نمایش داده میشود", - "Shares" : "اشتراک گذاری ها", - "Shared with others" : "موارد به اشتراک گذاشته شده با دیگران", - "Shared with you" : "Shared with you", - "Shared by link" : "اشتراک گذاشته شده از طریق لینک", - "Deleted shares" : "اشتراک گذاری های حذف شده", - "Pending shares" : "اشتراک در حال انتظار ", "Text file" : "فایل متنی", "New text file.txt" : "پروندهٔ متنی جدید با پسوند txt", "Storage invalid" : "فضای ذخیرهسازی نامعتبر", "Unlimited" : "نامحدود", "Cancel" : "لغو", "%1$s of %2$s used" : "%1$s از %2$s استفاده شده ", - "Deleted files" : "پروندههای حذف شده" + "Deleted files" : "پروندههای حذف شده", + "Shares" : "اشتراک گذاری ها", + "Shared with others" : "موارد به اشتراک گذاشته شده با دیگران", + "Shared with you" : "Shared with you", + "Shared by link" : "اشتراک گذاشته شده از طریق لینک", + "Deleted shares" : "اشتراک گذاری های حذف شده", + "Pending shares" : "اشتراک در حال انتظار " }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/files/l10n/fa.json b/apps/files/l10n/fa.json index 17f450e7385..50568f30a3c 100644 --- a/apps/files/l10n/fa.json +++ b/apps/files/l10n/fa.json @@ -123,18 +123,18 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "فایلها بیش از حد تعیین شده در این سرور هستند\nمترجم:با تغییر فایل php,ini میتوان این محدودیت را برطرف کرد", "No favorites yet" : "هنوز مورد دلخواه وجود ندارد", "Files and folders you mark as favorite will show up here" : "فایلها و پوشههای انتخاب شده به عنوان برگزیده توسط شما، در اینجا نمایش داده میشود", - "Shares" : "اشتراک گذاری ها", - "Shared with others" : "موارد به اشتراک گذاشته شده با دیگران", - "Shared with you" : "Shared with you", - "Shared by link" : "اشتراک گذاشته شده از طریق لینک", - "Deleted shares" : "اشتراک گذاری های حذف شده", - "Pending shares" : "اشتراک در حال انتظار ", "Text file" : "فایل متنی", "New text file.txt" : "پروندهٔ متنی جدید با پسوند txt", "Storage invalid" : "فضای ذخیرهسازی نامعتبر", "Unlimited" : "نامحدود", "Cancel" : "لغو", "%1$s of %2$s used" : "%1$s از %2$s استفاده شده ", - "Deleted files" : "پروندههای حذف شده" + "Deleted files" : "پروندههای حذف شده", + "Shares" : "اشتراک گذاری ها", + "Shared with others" : "موارد به اشتراک گذاشته شده با دیگران", + "Shared with you" : "Shared with you", + "Shared by link" : "اشتراک گذاشته شده از طریق لینک", + "Deleted shares" : "اشتراک گذاری های حذف شده", + "Pending shares" : "اشتراک در حال انتظار " },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/fi.js b/apps/files/l10n/fi.js index eb9ac7e1b00..ef916cf8198 100644 --- a/apps/files/l10n/fi.js +++ b/apps/files/l10n/fi.js @@ -243,12 +243,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Lähetettäväksi valitsemasi tiedostot ylittävät palvelimen salliman tiedostokoon rajan.", "No favorites yet" : "Ei vielä suosikkeja", "Files and folders you mark as favorite will show up here" : "Suosikeiksi merkitsemäsi tiedostot ja kansiot näkyvät täällä", - "Shares" : "Jaot", - "Shared with others" : "Jaettu muille", - "Shared with you" : "Jaettu kanssasi", - "Shared by link" : "Jaettu linkillä", - "Deleted shares" : "Poistetut jaot", - "Pending shares" : "Odottavat jaot", "Text file" : "Tekstitiedosto", "New text file.txt" : "Uusi tekstitiedosto.txt", "Storage invalid" : "Virheellinen tallennustila", @@ -260,6 +254,12 @@ OC.L10N.register( "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s/%2$s käytetty", "Deleted files" : "Poistetut tiedostot", + "Shares" : "Jaot", + "Shared with others" : "Jaettu muille", + "Shared with you" : "Jaettu kanssasi", + "Shared by link" : "Jaettu linkillä", + "Deleted shares" : "Poistetut jaot", + "Pending shares" : "Odottavat jaot", "Open folder {name}" : "Avaa kansio {name}", "Search for an account" : "Etsi tiliä" }, diff --git a/apps/files/l10n/fi.json b/apps/files/l10n/fi.json index d3f4d87e8b3..13c8b509ad5 100644 --- a/apps/files/l10n/fi.json +++ b/apps/files/l10n/fi.json @@ -241,12 +241,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Lähetettäväksi valitsemasi tiedostot ylittävät palvelimen salliman tiedostokoon rajan.", "No favorites yet" : "Ei vielä suosikkeja", "Files and folders you mark as favorite will show up here" : "Suosikeiksi merkitsemäsi tiedostot ja kansiot näkyvät täällä", - "Shares" : "Jaot", - "Shared with others" : "Jaettu muille", - "Shared with you" : "Jaettu kanssasi", - "Shared by link" : "Jaettu linkillä", - "Deleted shares" : "Poistetut jaot", - "Pending shares" : "Odottavat jaot", "Text file" : "Tekstitiedosto", "New text file.txt" : "Uusi tekstitiedosto.txt", "Storage invalid" : "Virheellinen tallennustila", @@ -258,6 +252,12 @@ "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s/%2$s käytetty", "Deleted files" : "Poistetut tiedostot", + "Shares" : "Jaot", + "Shared with others" : "Jaettu muille", + "Shared with you" : "Jaettu kanssasi", + "Shared by link" : "Jaettu linkillä", + "Deleted shares" : "Poistetut jaot", + "Pending shares" : "Odottavat jaot", "Open folder {name}" : "Avaa kansio {name}", "Search for an account" : "Etsi tiliä" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js index 55cdf38b5c9..d5c0a41f3d1 100644 --- a/apps/files/l10n/fr.js +++ b/apps/files/l10n/fr.js @@ -242,12 +242,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Les fichiers que vous essayez d'envoyer dépassent la taille maximale d'envoi permise par ce serveur.", "No favorites yet" : "Aucun favori pour l'instant", "Files and folders you mark as favorite will show up here" : "Les fichiers et dossiers ajoutés à vos favoris apparaîtront ici", - "Shares" : "Partages", - "Shared with others" : "Partagés avec d'autres", - "Shared with you" : "Partagés avec vous", - "Shared by link" : "Partagés par lien", - "Deleted shares" : "Partages supprimés", - "Pending shares" : "Partages en attente", "Text file" : "Fichier texte", "New text file.txt" : "Nouveau fichier texte.txt", "Storage invalid" : "Support de stockage invalide", @@ -259,6 +253,12 @@ OC.L10N.register( "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s utilisés sur %2$s", "Deleted files" : "Fichiers supprimés", + "Shares" : "Partages", + "Shared with others" : "Partagés avec d'autres", + "Shared with you" : "Partagés avec vous", + "Shared by link" : "Partagés par lien", + "Deleted shares" : "Partages supprimés", + "Pending shares" : "Partages en attente", "Open folder {name}" : "Ouvrir le dossier {name}", "Search for an account" : "Chercher un compte" }, diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json index a690f538a8e..f9cd91adfc1 100644 --- a/apps/files/l10n/fr.json +++ b/apps/files/l10n/fr.json @@ -240,12 +240,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Les fichiers que vous essayez d'envoyer dépassent la taille maximale d'envoi permise par ce serveur.", "No favorites yet" : "Aucun favori pour l'instant", "Files and folders you mark as favorite will show up here" : "Les fichiers et dossiers ajoutés à vos favoris apparaîtront ici", - "Shares" : "Partages", - "Shared with others" : "Partagés avec d'autres", - "Shared with you" : "Partagés avec vous", - "Shared by link" : "Partagés par lien", - "Deleted shares" : "Partages supprimés", - "Pending shares" : "Partages en attente", "Text file" : "Fichier texte", "New text file.txt" : "Nouveau fichier texte.txt", "Storage invalid" : "Support de stockage invalide", @@ -257,6 +251,12 @@ "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s utilisés sur %2$s", "Deleted files" : "Fichiers supprimés", + "Shares" : "Partages", + "Shared with others" : "Partagés avec d'autres", + "Shared with you" : "Partagés avec vous", + "Shared by link" : "Partagés par lien", + "Deleted shares" : "Partages supprimés", + "Pending shares" : "Partages en attente", "Open folder {name}" : "Ouvrir le dossier {name}", "Search for an account" : "Chercher un compte" },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" diff --git a/apps/files/l10n/gl.js b/apps/files/l10n/gl.js index 978814efd49..6ca79a01997 100644 --- a/apps/files/l10n/gl.js +++ b/apps/files/l10n/gl.js @@ -65,7 +65,7 @@ OC.L10N.register( "Could not create file \"{file}\"" : "Non foi posíbel crear o ficheiro «{file}»", "Could not create file \"{file}\" because it already exists" : "Non foi posíbel crear o ficheiro «{file}» por mor de que xa existe", "Could not create folder \"{dir}\" because it already exists" : "Non foi posíbel crear o cartafol «{dir}» por mor de que xa existe", - "Could not fetch file details \"{file}\"" : "Non foi posíbel obter os detalles do ficheiro «{file}»", + "Could not fetch file details \"{file}\"" : "Non foi posíbel recuperar os detalles do ficheiro «{file}»", "Error deleting file \"{fileName}\"." : "Produciuse un erro ao eliminar o ficheiro «{fileName}».", "No search results in other folders for {tag}{filter}{endtag}" : "Non foi posíbel atopar resultados de busca noutros cartafoles para {tag}{filter}{endtag}", "Enter more than two characters to search in other folders" : "Introduza máis de dous caracteres para buscar noutros cartafoles", @@ -126,30 +126,30 @@ OC.L10N.register( "Renamed by {user}" : "Renomeado por {user}", "Moved by {user}" : "Movido por {user}", "\"remote user\"" : "«usuario remoto»", - "You created {file}" : "{file} foi creado por vostede", - "You created an encrypted file in {file}" : "Vostede creo un ficheiro cifrado en {file}", + "You created {file}" : "{file} foi creado por Vde.", + "You created an encrypted file in {file}" : "Vde. creo un ficheiro cifrado en {file}", "{user} created {file}" : "{user} creou {file}", "{user} created an encrypted file in {file}" : "{user} creou un ficheiro cifrado en {file}", "{file} was created in a public folder" : "{file} foi creado nun cartafol público", - "You changed {file}" : "{file} foi cambiado por vostede", - "You changed an encrypted file in {file}" : "Vostede cambiou un ficheiro cifrado en {file}", + "You changed {file}" : "{file} foi cambiado por Vde.", + "You changed an encrypted file in {file}" : "Vde. cambiou un ficheiro cifrado en {file}", "{user} changed {file}" : "{file} foi cambiado por {user}", "{user} changed an encrypted file in {file}" : "{user} cambiou un ficheiro cifrado en {file}", - "You deleted {file}" : "{file} foi eliminado por vostede", - "You deleted an encrypted file in {file}" : "Vostede eliminou un ficheiro cifrado en {file}", + "You deleted {file}" : "{file} foi eliminado por Vde.", + "You deleted an encrypted file in {file}" : "Vde. eliminou un ficheiro cifrado en {file}", "{user} deleted {file}" : "{file} foi eliminado por {user}", "{user} deleted an encrypted file in {file}" : "{user} eliminou un ficheiro cifrado en {file}", - "You restored {file}" : "{file} foi restaurado por vostede", + "You restored {file}" : "{file} foi restaurado por Vde.", "{user} restored {file}" : "{file} foi restaurado por {user}", - "You renamed {oldfile} (hidden) to {newfile} (hidden)" : "Vostede renomeou {oldfile} (agochado) como {newfile} (agochado)", - "You renamed {oldfile} (hidden) to {newfile}" : "Vostede renomeou {oldfile} (agochado) como {newfile}", - "You renamed {oldfile} to {newfile} (hidden)" : "Vostede renomeou {oldfile} como {newfile} (agochado)", - "You renamed {oldfile} to {newfile}" : "Vostede renomeou {oldfile} como {newfile}", + "You renamed {oldfile} (hidden) to {newfile} (hidden)" : "Vde. renomeou {oldfile} (agochado) como {newfile} (agochado)", + "You renamed {oldfile} (hidden) to {newfile}" : "Vde. renomeou {oldfile} (agochado) como {newfile}", + "You renamed {oldfile} to {newfile} (hidden)" : "Vde. renomeou {oldfile} como {newfile} (agochado)", + "You renamed {oldfile} to {newfile}" : "Vde. renomeou {oldfile} como {newfile}", "{user} renamed {oldfile} (hidden) to {newfile} (hidden)" : "{user} renomeou {oldfile} (agochado) como {newfile} (agochado)", "{user} renamed {oldfile} (hidden) to {newfile}" : "{user} renomeou {oldfile} (agochado) como {newfile}", "{user} renamed {oldfile} to {newfile} (hidden)" : "{user} renomeou {oldfile} como {newfile} (agochado)", "{user} renamed {oldfile} to {newfile}" : "{user} renomeou {oldfile} como {newfile}", - "You moved {oldfile} to {newfile}" : "Vostede moveu {oldfile} para {newfile}", + "You moved {oldfile} to {newfile}" : "Vde. moveu {oldfile} para {newfile}", "{user} moved {oldfile} to {newfile}" : "{user} moveu {oldfile} para {newfile}", "A file has been added to or removed from your <strong>favorites</strong>" : "Engadiuse ou retirouse un ficheiro dos seus <strong>favoritos</strong>", "A file or folder has been <strong>changed</strong>" : "<strong>Cambiouse</strong> un ficheiro ou cartafol", @@ -193,7 +193,7 @@ OC.L10N.register( "ascending" : "ascendente", "descending" : "descendente", "Sort list by {column} ({direction})" : "Ordenar a lista por {column} ({direction})", - "This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Esta lista non se presenta de xeito completo por mor do rendemento. Os ficheiros amósanse mentres navega pola lista.", + "This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Esta lista non se representa de xeito completo por mor do rendemento. Os ficheiros represéntanse mentres navega pola lista.", "Storage informations" : "Información de almacenamento", "{usedQuotaByte} used" : "{usedQuotaByte} usado", "{relative}% used" : "{relative}% usado", @@ -253,12 +253,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Os ficheiros que tenta enviar exceden do tamaño máximo permitido neste servidor", "No favorites yet" : "Aínda non hai favoritos", "Files and folders you mark as favorite will show up here" : "Os ficheiros e cartafoles que marque como favoritos amosaranse aquí", - "Shares" : "Comparticións", - "Shared with others" : "Compartido con outros", - "Shared with you" : "Compartido con vostede", - "Shared by link" : "Compartido por ligazón", - "Deleted shares" : "Recursos compartidos eliminados", - "Pending shares" : "Comparticións pendentes", "Text file" : "Ficheiro de texto", "New text file.txt" : "Novo ficheiro de texto.txt", "Storage invalid" : "Almacenamento incorrecto", @@ -270,6 +264,12 @@ OC.L10N.register( "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s de %2$s utilizado", "Deleted files" : "Ficheiros eliminados", + "Shares" : "Comparticións", + "Shared with others" : "Compartido con outros", + "Shared with you" : "Compartido con Vde.", + "Shared by link" : "Compartido por ligazón", + "Deleted shares" : "Recursos compartidos eliminados", + "Pending shares" : "Comparticións pendentes", "Open folder {name}" : "Abrir o cartafol {name}", "Search for an account" : "Buscar por unha conta" }, diff --git a/apps/files/l10n/gl.json b/apps/files/l10n/gl.json index ad7de0e9081..a2bc41020f7 100644 --- a/apps/files/l10n/gl.json +++ b/apps/files/l10n/gl.json @@ -63,7 +63,7 @@ "Could not create file \"{file}\"" : "Non foi posíbel crear o ficheiro «{file}»", "Could not create file \"{file}\" because it already exists" : "Non foi posíbel crear o ficheiro «{file}» por mor de que xa existe", "Could not create folder \"{dir}\" because it already exists" : "Non foi posíbel crear o cartafol «{dir}» por mor de que xa existe", - "Could not fetch file details \"{file}\"" : "Non foi posíbel obter os detalles do ficheiro «{file}»", + "Could not fetch file details \"{file}\"" : "Non foi posíbel recuperar os detalles do ficheiro «{file}»", "Error deleting file \"{fileName}\"." : "Produciuse un erro ao eliminar o ficheiro «{fileName}».", "No search results in other folders for {tag}{filter}{endtag}" : "Non foi posíbel atopar resultados de busca noutros cartafoles para {tag}{filter}{endtag}", "Enter more than two characters to search in other folders" : "Introduza máis de dous caracteres para buscar noutros cartafoles", @@ -124,30 +124,30 @@ "Renamed by {user}" : "Renomeado por {user}", "Moved by {user}" : "Movido por {user}", "\"remote user\"" : "«usuario remoto»", - "You created {file}" : "{file} foi creado por vostede", - "You created an encrypted file in {file}" : "Vostede creo un ficheiro cifrado en {file}", + "You created {file}" : "{file} foi creado por Vde.", + "You created an encrypted file in {file}" : "Vde. creo un ficheiro cifrado en {file}", "{user} created {file}" : "{user} creou {file}", "{user} created an encrypted file in {file}" : "{user} creou un ficheiro cifrado en {file}", "{file} was created in a public folder" : "{file} foi creado nun cartafol público", - "You changed {file}" : "{file} foi cambiado por vostede", - "You changed an encrypted file in {file}" : "Vostede cambiou un ficheiro cifrado en {file}", + "You changed {file}" : "{file} foi cambiado por Vde.", + "You changed an encrypted file in {file}" : "Vde. cambiou un ficheiro cifrado en {file}", "{user} changed {file}" : "{file} foi cambiado por {user}", "{user} changed an encrypted file in {file}" : "{user} cambiou un ficheiro cifrado en {file}", - "You deleted {file}" : "{file} foi eliminado por vostede", - "You deleted an encrypted file in {file}" : "Vostede eliminou un ficheiro cifrado en {file}", + "You deleted {file}" : "{file} foi eliminado por Vde.", + "You deleted an encrypted file in {file}" : "Vde. eliminou un ficheiro cifrado en {file}", "{user} deleted {file}" : "{file} foi eliminado por {user}", "{user} deleted an encrypted file in {file}" : "{user} eliminou un ficheiro cifrado en {file}", - "You restored {file}" : "{file} foi restaurado por vostede", + "You restored {file}" : "{file} foi restaurado por Vde.", "{user} restored {file}" : "{file} foi restaurado por {user}", - "You renamed {oldfile} (hidden) to {newfile} (hidden)" : "Vostede renomeou {oldfile} (agochado) como {newfile} (agochado)", - "You renamed {oldfile} (hidden) to {newfile}" : "Vostede renomeou {oldfile} (agochado) como {newfile}", - "You renamed {oldfile} to {newfile} (hidden)" : "Vostede renomeou {oldfile} como {newfile} (agochado)", - "You renamed {oldfile} to {newfile}" : "Vostede renomeou {oldfile} como {newfile}", + "You renamed {oldfile} (hidden) to {newfile} (hidden)" : "Vde. renomeou {oldfile} (agochado) como {newfile} (agochado)", + "You renamed {oldfile} (hidden) to {newfile}" : "Vde. renomeou {oldfile} (agochado) como {newfile}", + "You renamed {oldfile} to {newfile} (hidden)" : "Vde. renomeou {oldfile} como {newfile} (agochado)", + "You renamed {oldfile} to {newfile}" : "Vde. renomeou {oldfile} como {newfile}", "{user} renamed {oldfile} (hidden) to {newfile} (hidden)" : "{user} renomeou {oldfile} (agochado) como {newfile} (agochado)", "{user} renamed {oldfile} (hidden) to {newfile}" : "{user} renomeou {oldfile} (agochado) como {newfile}", "{user} renamed {oldfile} to {newfile} (hidden)" : "{user} renomeou {oldfile} como {newfile} (agochado)", "{user} renamed {oldfile} to {newfile}" : "{user} renomeou {oldfile} como {newfile}", - "You moved {oldfile} to {newfile}" : "Vostede moveu {oldfile} para {newfile}", + "You moved {oldfile} to {newfile}" : "Vde. moveu {oldfile} para {newfile}", "{user} moved {oldfile} to {newfile}" : "{user} moveu {oldfile} para {newfile}", "A file has been added to or removed from your <strong>favorites</strong>" : "Engadiuse ou retirouse un ficheiro dos seus <strong>favoritos</strong>", "A file or folder has been <strong>changed</strong>" : "<strong>Cambiouse</strong> un ficheiro ou cartafol", @@ -191,7 +191,7 @@ "ascending" : "ascendente", "descending" : "descendente", "Sort list by {column} ({direction})" : "Ordenar a lista por {column} ({direction})", - "This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Esta lista non se presenta de xeito completo por mor do rendemento. Os ficheiros amósanse mentres navega pola lista.", + "This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Esta lista non se representa de xeito completo por mor do rendemento. Os ficheiros represéntanse mentres navega pola lista.", "Storage informations" : "Información de almacenamento", "{usedQuotaByte} used" : "{usedQuotaByte} usado", "{relative}% used" : "{relative}% usado", @@ -251,12 +251,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Os ficheiros que tenta enviar exceden do tamaño máximo permitido neste servidor", "No favorites yet" : "Aínda non hai favoritos", "Files and folders you mark as favorite will show up here" : "Os ficheiros e cartafoles que marque como favoritos amosaranse aquí", - "Shares" : "Comparticións", - "Shared with others" : "Compartido con outros", - "Shared with you" : "Compartido con vostede", - "Shared by link" : "Compartido por ligazón", - "Deleted shares" : "Recursos compartidos eliminados", - "Pending shares" : "Comparticións pendentes", "Text file" : "Ficheiro de texto", "New text file.txt" : "Novo ficheiro de texto.txt", "Storage invalid" : "Almacenamento incorrecto", @@ -268,6 +262,12 @@ "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s de %2$s utilizado", "Deleted files" : "Ficheiros eliminados", + "Shares" : "Comparticións", + "Shared with others" : "Compartido con outros", + "Shared with you" : "Compartido con Vde.", + "Shared by link" : "Compartido por ligazón", + "Deleted shares" : "Recursos compartidos eliminados", + "Pending shares" : "Comparticións pendentes", "Open folder {name}" : "Abrir o cartafol {name}", "Search for an account" : "Buscar por unha conta" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files/l10n/he.js b/apps/files/l10n/he.js index 6f28f56e307..148ab11fd70 100644 --- a/apps/files/l10n/he.js +++ b/apps/files/l10n/he.js @@ -177,12 +177,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "הקבצים שניסית להעלות חרגו מהגודל המקסימלי להעלאת קבצים על שרת זה.", "No favorites yet" : "אין מועדפים עדיין", "Files and folders you mark as favorite will show up here" : "קבצים ותיקיות שסומנו על ידך כמועדפים יוצגו כאן", - "Shares" : "שיתופים", - "Shared with others" : "משותף עם אחרים", - "Shared with you" : "משותף אתך", - "Shared by link" : "משותף על ידי קישור", - "Deleted shares" : "שיתופים שנמחקו", - "Pending shares" : "שיתופים ממתינים", "Text file" : "קובץ טקסט", "New text file.txt" : "קובץ טקסט חדש.txt", "Storage invalid" : "אחסון לא חוקי", @@ -192,6 +186,12 @@ OC.L10N.register( "Cancel" : "ביטול", "%s used" : "%s בשימוש", "%1$s of %2$s used" : "%1$s מתוך %2$s בשימוש", - "Deleted files" : "קבצים שנמחקו" + "Deleted files" : "קבצים שנמחקו", + "Shares" : "שיתופים", + "Shared with others" : "משותף עם אחרים", + "Shared with you" : "משותף אתך", + "Shared by link" : "משותף על ידי קישור", + "Deleted shares" : "שיתופים שנמחקו", + "Pending shares" : "שיתופים ממתינים" }, "nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;"); diff --git a/apps/files/l10n/he.json b/apps/files/l10n/he.json index 07719b147e8..c29a3bfecb2 100644 --- a/apps/files/l10n/he.json +++ b/apps/files/l10n/he.json @@ -175,12 +175,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "הקבצים שניסית להעלות חרגו מהגודל המקסימלי להעלאת קבצים על שרת זה.", "No favorites yet" : "אין מועדפים עדיין", "Files and folders you mark as favorite will show up here" : "קבצים ותיקיות שסומנו על ידך כמועדפים יוצגו כאן", - "Shares" : "שיתופים", - "Shared with others" : "משותף עם אחרים", - "Shared with you" : "משותף אתך", - "Shared by link" : "משותף על ידי קישור", - "Deleted shares" : "שיתופים שנמחקו", - "Pending shares" : "שיתופים ממתינים", "Text file" : "קובץ טקסט", "New text file.txt" : "קובץ טקסט חדש.txt", "Storage invalid" : "אחסון לא חוקי", @@ -190,6 +184,12 @@ "Cancel" : "ביטול", "%s used" : "%s בשימוש", "%1$s of %2$s used" : "%1$s מתוך %2$s בשימוש", - "Deleted files" : "קבצים שנמחקו" + "Deleted files" : "קבצים שנמחקו", + "Shares" : "שיתופים", + "Shared with others" : "משותף עם אחרים", + "Shared with you" : "משותף אתך", + "Shared by link" : "משותף על ידי קישור", + "Deleted shares" : "שיתופים שנמחקו", + "Pending shares" : "שיתופים ממתינים" },"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;" }
\ No newline at end of file diff --git a/apps/files/l10n/hr.js b/apps/files/l10n/hr.js index 64c56321dd7..c05cadd6185 100644 --- a/apps/files/l10n/hr.js +++ b/apps/files/l10n/hr.js @@ -195,12 +195,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Datoteke koje pokušavate otpremiti premašuju maksimalnu veličinu za otpremu datoteka na ovom poslužitelju.", "No favorites yet" : "Još nema favorita", "Files and folders you mark as favorite will show up here" : "Ovdje će se prikazati datoteke i mape koje označite kao favorite", - "Shares" : "Dijeljenja", - "Shared with others" : "Podijeljeno s ostalima", - "Shared with you" : "Podijeljeno s vama", - "Shared by link" : "Podijeljeno putem poveznice", - "Deleted shares" : "Izbrisana dijeljenja", - "Pending shares" : "Dijeljenja na čekanju", "Text file" : "Tekstna datoteka", "New text file.txt" : "Nova tekstna datoteka.txt", "Storage invalid" : "Neispravna pohrana", @@ -210,6 +204,12 @@ OC.L10N.register( "Cancel" : "Odustani", "%s used" : "Iskorišteno %s", "%1$s of %2$s used" : "Iskorišteno %1$s od %2$s", - "Deleted files" : "Izbrisane datoteke" + "Deleted files" : "Izbrisane datoteke", + "Shares" : "Dijeljenja", + "Shared with others" : "Podijeljeno s ostalima", + "Shared with you" : "Podijeljeno s vama", + "Shared by link" : "Podijeljeno putem poveznice", + "Deleted shares" : "Izbrisana dijeljenja", + "Pending shares" : "Dijeljenja na čekanju" }, "nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"); diff --git a/apps/files/l10n/hr.json b/apps/files/l10n/hr.json index dd2f1651af1..3856e266a45 100644 --- a/apps/files/l10n/hr.json +++ b/apps/files/l10n/hr.json @@ -193,12 +193,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Datoteke koje pokušavate otpremiti premašuju maksimalnu veličinu za otpremu datoteka na ovom poslužitelju.", "No favorites yet" : "Još nema favorita", "Files and folders you mark as favorite will show up here" : "Ovdje će se prikazati datoteke i mape koje označite kao favorite", - "Shares" : "Dijeljenja", - "Shared with others" : "Podijeljeno s ostalima", - "Shared with you" : "Podijeljeno s vama", - "Shared by link" : "Podijeljeno putem poveznice", - "Deleted shares" : "Izbrisana dijeljenja", - "Pending shares" : "Dijeljenja na čekanju", "Text file" : "Tekstna datoteka", "New text file.txt" : "Nova tekstna datoteka.txt", "Storage invalid" : "Neispravna pohrana", @@ -208,6 +202,12 @@ "Cancel" : "Odustani", "%s used" : "Iskorišteno %s", "%1$s of %2$s used" : "Iskorišteno %1$s od %2$s", - "Deleted files" : "Izbrisane datoteke" + "Deleted files" : "Izbrisane datoteke", + "Shares" : "Dijeljenja", + "Shared with others" : "Podijeljeno s ostalima", + "Shared with you" : "Podijeljeno s vama", + "Shared by link" : "Podijeljeno putem poveznice", + "Deleted shares" : "Izbrisana dijeljenja", + "Pending shares" : "Dijeljenja na čekanju" },"pluralForm" :"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files/l10n/hu.js b/apps/files/l10n/hu.js index 42e2dc287ab..6b61a67ee80 100644 --- a/apps/files/l10n/hu.js +++ b/apps/files/l10n/hu.js @@ -242,12 +242,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "A feltölteni próbált fájlok mérete meghaladja a kiszolgálón megengedett legnagyobb méretet.", "No favorites yet" : "Még nincsenek kedvencek", "Files and folders you mark as favorite will show up here" : "A kedvencnek jelölt fájlokat és mappákat itt találja meg", - "Shares" : "Megosztások", - "Shared with others" : "Megosztva másokkal", - "Shared with you" : "Megosztva Önnel", - "Shared by link" : "Megosztva hivatkozással", - "Deleted shares" : "Törölt megosztások", - "Pending shares" : "Függőben lévő megosztások", "Text file" : "Szövegfájl", "New text file.txt" : "Új szövegfájl.txt", "Storage invalid" : "A tároló érvénytelen", @@ -259,6 +253,12 @@ OC.L10N.register( "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s / %2$s felhasználva", "Deleted files" : "Törölt fájlok", + "Shares" : "Megosztások", + "Shared with others" : "Megosztva másokkal", + "Shared with you" : "Megosztva Önnel", + "Shared by link" : "Megosztva hivatkozással", + "Deleted shares" : "Törölt megosztások", + "Pending shares" : "Függőben lévő megosztások", "Open folder {name}" : "A(z) {name} mappa megnyitása", "Search for an account" : "Fiók keresése" }, diff --git a/apps/files/l10n/hu.json b/apps/files/l10n/hu.json index e409a6f656e..f632bfe4af6 100644 --- a/apps/files/l10n/hu.json +++ b/apps/files/l10n/hu.json @@ -240,12 +240,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "A feltölteni próbált fájlok mérete meghaladja a kiszolgálón megengedett legnagyobb méretet.", "No favorites yet" : "Még nincsenek kedvencek", "Files and folders you mark as favorite will show up here" : "A kedvencnek jelölt fájlokat és mappákat itt találja meg", - "Shares" : "Megosztások", - "Shared with others" : "Megosztva másokkal", - "Shared with you" : "Megosztva Önnel", - "Shared by link" : "Megosztva hivatkozással", - "Deleted shares" : "Törölt megosztások", - "Pending shares" : "Függőben lévő megosztások", "Text file" : "Szövegfájl", "New text file.txt" : "Új szövegfájl.txt", "Storage invalid" : "A tároló érvénytelen", @@ -257,6 +251,12 @@ "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s / %2$s felhasználva", "Deleted files" : "Törölt fájlok", + "Shares" : "Megosztások", + "Shared with others" : "Megosztva másokkal", + "Shared with you" : "Megosztva Önnel", + "Shared by link" : "Megosztva hivatkozással", + "Deleted shares" : "Törölt megosztások", + "Pending shares" : "Függőben lévő megosztások", "Open folder {name}" : "A(z) {name} mappa megnyitása", "Search for an account" : "Fiók keresése" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files/l10n/id.js b/apps/files/l10n/id.js index a47a38ed864..3ec9d4d3224 100644 --- a/apps/files/l10n/id.js +++ b/apps/files/l10n/id.js @@ -218,12 +218,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Berkas yang dicoba untuk diunggah melebihi ukuran maksimum pengunggahan berkas di server ini.", "No favorites yet" : "Belum memiliki favorit", "Files and folders you mark as favorite will show up here" : "Berkas dan folder yang Anda tandai sebagai favorit akan ditampilkan di sini.", - "Shares" : "Dibagikan", - "Shared with others" : "Dibagikan dengan lainnya", - "Shared with you" : "Shared with you", - "Shared by link" : "Dibagikan dengan tautan", - "Deleted shares" : "Berbagi terhapus", - "Pending shares" : "Berbagi tertunda", "Text file" : "Berkas teks", "New text file.txt" : "Teks baru file.txt", "Storage invalid" : "Penyimpanan tidak sah", @@ -234,6 +228,12 @@ OC.L10N.register( "%s used" : "%s digunakan", "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s dari %2$s sudah digunakan", - "Deleted files" : "Berkas terhapus" + "Deleted files" : "Berkas terhapus", + "Shares" : "Dibagikan", + "Shared with others" : "Dibagikan dengan lainnya", + "Shared with you" : "Shared with you", + "Shared by link" : "Dibagikan dengan tautan", + "Deleted shares" : "Berbagi terhapus", + "Pending shares" : "Berbagi tertunda" }, "nplurals=1; plural=0;"); diff --git a/apps/files/l10n/id.json b/apps/files/l10n/id.json index bab800571e0..5e9d92cf6bf 100644 --- a/apps/files/l10n/id.json +++ b/apps/files/l10n/id.json @@ -216,12 +216,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Berkas yang dicoba untuk diunggah melebihi ukuran maksimum pengunggahan berkas di server ini.", "No favorites yet" : "Belum memiliki favorit", "Files and folders you mark as favorite will show up here" : "Berkas dan folder yang Anda tandai sebagai favorit akan ditampilkan di sini.", - "Shares" : "Dibagikan", - "Shared with others" : "Dibagikan dengan lainnya", - "Shared with you" : "Shared with you", - "Shared by link" : "Dibagikan dengan tautan", - "Deleted shares" : "Berbagi terhapus", - "Pending shares" : "Berbagi tertunda", "Text file" : "Berkas teks", "New text file.txt" : "Teks baru file.txt", "Storage invalid" : "Penyimpanan tidak sah", @@ -232,6 +226,12 @@ "%s used" : "%s digunakan", "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s dari %2$s sudah digunakan", - "Deleted files" : "Berkas terhapus" + "Deleted files" : "Berkas terhapus", + "Shares" : "Dibagikan", + "Shared with others" : "Dibagikan dengan lainnya", + "Shared with you" : "Shared with you", + "Shared by link" : "Dibagikan dengan tautan", + "Deleted shares" : "Berbagi terhapus", + "Pending shares" : "Berbagi tertunda" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files/l10n/is.js b/apps/files/l10n/is.js index aa3307973c3..2391725fa76 100644 --- a/apps/files/l10n/is.js +++ b/apps/files/l10n/is.js @@ -170,12 +170,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Skrárnar sem þú ert að senda inn eru stærri en hámarks innsendingarstærð á þessum netþjóni.", "No favorites yet" : "Engin eftirlæti ennþá", "Files and folders you mark as favorite will show up here" : "Skrár og möppur sem þú merkir sem eftirlæti birtast hér", - "Shares" : "Sameignir", - "Shared with others" : "Deilt með öðrum", - "Shared with you" : "Deilt með þér", - "Shared by link" : "Deilt með tengli", - "Deleted shares" : "Eyddar sameignir", - "Pending shares" : "Sameignir í bið", "Text file" : "Textaskrá", "New text file.txt" : "Ný textaskrá.txt", "Storage invalid" : "Ógild geymsla", @@ -185,6 +179,12 @@ OC.L10N.register( "Cancel" : "Hætta við", "%s used" : "%s notað", "%1$s of %2$s used" : "%1$s af %2$s notað", - "Deleted files" : "Eyddar skrár" + "Deleted files" : "Eyddar skrár", + "Shares" : "Sameignir", + "Shared with others" : "Deilt með öðrum", + "Shared with you" : "Deilt með þér", + "Shared by link" : "Deilt með tengli", + "Deleted shares" : "Eyddar sameignir", + "Pending shares" : "Sameignir í bið" }, "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/apps/files/l10n/is.json b/apps/files/l10n/is.json index 4de9ac02298..a54bf9a969b 100644 --- a/apps/files/l10n/is.json +++ b/apps/files/l10n/is.json @@ -168,12 +168,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Skrárnar sem þú ert að senda inn eru stærri en hámarks innsendingarstærð á þessum netþjóni.", "No favorites yet" : "Engin eftirlæti ennþá", "Files and folders you mark as favorite will show up here" : "Skrár og möppur sem þú merkir sem eftirlæti birtast hér", - "Shares" : "Sameignir", - "Shared with others" : "Deilt með öðrum", - "Shared with you" : "Deilt með þér", - "Shared by link" : "Deilt með tengli", - "Deleted shares" : "Eyddar sameignir", - "Pending shares" : "Sameignir í bið", "Text file" : "Textaskrá", "New text file.txt" : "Ný textaskrá.txt", "Storage invalid" : "Ógild geymsla", @@ -183,6 +177,12 @@ "Cancel" : "Hætta við", "%s used" : "%s notað", "%1$s of %2$s used" : "%1$s af %2$s notað", - "Deleted files" : "Eyddar skrár" + "Deleted files" : "Eyddar skrár", + "Shares" : "Sameignir", + "Shared with others" : "Deilt með öðrum", + "Shared with you" : "Deilt með þér", + "Shared by link" : "Deilt með tengli", + "Deleted shares" : "Eyddar sameignir", + "Pending shares" : "Sameignir í bið" },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" }
\ No newline at end of file diff --git a/apps/files/l10n/it.js b/apps/files/l10n/it.js index ac33e4149e8..7acefc1de53 100644 --- a/apps/files/l10n/it.js +++ b/apps/files/l10n/it.js @@ -242,12 +242,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "I file che stai provando a caricare superano la dimensione massima consentita su questo server.", "No favorites yet" : "Nessun preferito ancora", "Files and folders you mark as favorite will show up here" : "I file e le cartelle che marchi come preferiti saranno mostrati qui", - "Shares" : "Condivisioni", - "Shared with others" : "Condivisi con altri", - "Shared with you" : "Condivisi con te", - "Shared by link" : "Condivisi tramite collegamento", - "Deleted shares" : "Condivisioni eliminate", - "Pending shares" : "Condivisioni in corso", "Text file" : "File di testo", "New text file.txt" : "Nuovo file di testo.txt", "Storage invalid" : "Archiviazione non valida", @@ -259,6 +253,12 @@ OC.L10N.register( "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s di %2$s utilizzati", "Deleted files" : "File eliminati", + "Shares" : "Condivisioni", + "Shared with others" : "Condivisi con altri", + "Shared with you" : "Condivisi con te", + "Shared by link" : "Condivisi tramite collegamento", + "Deleted shares" : "Condivisioni eliminate", + "Pending shares" : "Condivisioni in corso", "Open folder {name}" : "Apri la cartella {name}", "Search for an account" : "Cerca un account" }, diff --git a/apps/files/l10n/it.json b/apps/files/l10n/it.json index 9784b4f4b81..384c98628c6 100644 --- a/apps/files/l10n/it.json +++ b/apps/files/l10n/it.json @@ -240,12 +240,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "I file che stai provando a caricare superano la dimensione massima consentita su questo server.", "No favorites yet" : "Nessun preferito ancora", "Files and folders you mark as favorite will show up here" : "I file e le cartelle che marchi come preferiti saranno mostrati qui", - "Shares" : "Condivisioni", - "Shared with others" : "Condivisi con altri", - "Shared with you" : "Condivisi con te", - "Shared by link" : "Condivisi tramite collegamento", - "Deleted shares" : "Condivisioni eliminate", - "Pending shares" : "Condivisioni in corso", "Text file" : "File di testo", "New text file.txt" : "Nuovo file di testo.txt", "Storage invalid" : "Archiviazione non valida", @@ -257,6 +251,12 @@ "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s di %2$s utilizzati", "Deleted files" : "File eliminati", + "Shares" : "Condivisioni", + "Shared with others" : "Condivisi con altri", + "Shared with you" : "Condivisi con te", + "Shared by link" : "Condivisi tramite collegamento", + "Deleted shares" : "Condivisioni eliminate", + "Pending shares" : "Condivisioni in corso", "Open folder {name}" : "Apri la cartella {name}", "Search for an account" : "Cerca un account" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" diff --git a/apps/files/l10n/ja.js b/apps/files/l10n/ja.js index ba0a97aed74..62cddc2289b 100644 --- a/apps/files/l10n/ja.js +++ b/apps/files/l10n/ja.js @@ -220,12 +220,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "アップロードしようとしているファイルは、このサーバーのファイルアップロード時の最大サイズを超えています。", "No favorites yet" : "まだお気に入りはありません", "Files and folders you mark as favorite will show up here" : "お気に入りに登録されたファイルやフォルダーは、ここに表示されます。", - "Shares" : "共有", - "Shared with others" : "他ユーザーと共有中", - "Shared with you" : "他ユーザーがあなたと共有中", - "Shared by link" : "URLリンクで共有中", - "Deleted shares" : "削除された共有", - "Pending shares" : "保留中の共有", "Text file" : "テキストファイル", "New text file.txt" : "新規のテキストファイル作成", "Storage invalid" : "ストレージが無効です", @@ -236,6 +230,12 @@ OC.L10N.register( "%s used" : "%s 使用中", "%s%%" : "%s%%", "%1$s of %2$s used" : "%2$s 中%1$s 使用中", - "Deleted files" : "ゴミ箱" + "Deleted files" : "ゴミ箱", + "Shares" : "共有", + "Shared with others" : "他ユーザーと共有中", + "Shared with you" : "他ユーザーがあなたと共有中", + "Shared by link" : "URLリンクで共有中", + "Deleted shares" : "削除された共有", + "Pending shares" : "保留中の共有" }, "nplurals=1; plural=0;"); diff --git a/apps/files/l10n/ja.json b/apps/files/l10n/ja.json index 74715e820bb..06408f66397 100644 --- a/apps/files/l10n/ja.json +++ b/apps/files/l10n/ja.json @@ -218,12 +218,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "アップロードしようとしているファイルは、このサーバーのファイルアップロード時の最大サイズを超えています。", "No favorites yet" : "まだお気に入りはありません", "Files and folders you mark as favorite will show up here" : "お気に入りに登録されたファイルやフォルダーは、ここに表示されます。", - "Shares" : "共有", - "Shared with others" : "他ユーザーと共有中", - "Shared with you" : "他ユーザーがあなたと共有中", - "Shared by link" : "URLリンクで共有中", - "Deleted shares" : "削除された共有", - "Pending shares" : "保留中の共有", "Text file" : "テキストファイル", "New text file.txt" : "新規のテキストファイル作成", "Storage invalid" : "ストレージが無効です", @@ -234,6 +228,12 @@ "%s used" : "%s 使用中", "%s%%" : "%s%%", "%1$s of %2$s used" : "%2$s 中%1$s 使用中", - "Deleted files" : "ゴミ箱" + "Deleted files" : "ゴミ箱", + "Shares" : "共有", + "Shared with others" : "他ユーザーと共有中", + "Shared with you" : "他ユーザーがあなたと共有中", + "Shared by link" : "URLリンクで共有中", + "Deleted shares" : "削除された共有", + "Pending shares" : "保留中の共有" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files/l10n/ka_GE.js b/apps/files/l10n/ka_GE.js index fa6303a1ffc..c54a9696ce3 100644 --- a/apps/files/l10n/ka_GE.js +++ b/apps/files/l10n/ka_GE.js @@ -131,10 +131,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "ფაილის ზომა რომლის ატვირთვასაც აპირებთ, აჭარბებს სერვერზე დაშვებულ მაქსიმუმს.", "No favorites yet" : "ჯერ რჩეულები არაა", "Files and folders you mark as favorite will show up here" : "აქ გამოჩნდებიან ფაილები და დირექტორიები, რომლებსაც მონიშნავთ რჩეულებად", - "Shares" : "გაზიარებები", - "Shared with others" : "გაზიარდა სხვებთან", - "Shared with you" : "გაზიარდა თქვენთან", - "Shared by link" : "გაზიარდა ბმულით", "Text file" : "ტექსტური ფაილი", "New text file.txt" : "ახალი ტექსტი file.txt", "Storage invalid" : "საცავი არასწორია", @@ -142,6 +138,10 @@ OC.L10N.register( "Cancel" : "უარყოფა", "%s used" : "%s მოხმარებულია", "%1$s of %2$s used" : "გამოყენებულია %1$s სულ %2$s-იდან ", - "Deleted files" : "გაუქმებული ფაილები" + "Deleted files" : "გაუქმებული ფაილები", + "Shares" : "გაზიარებები", + "Shared with others" : "გაზიარდა სხვებთან", + "Shared with you" : "გაზიარდა თქვენთან", + "Shared by link" : "გაზიარდა ბმულით" }, "nplurals=2; plural=(n!=1);"); diff --git a/apps/files/l10n/ka_GE.json b/apps/files/l10n/ka_GE.json index b325a934515..886c68ac825 100644 --- a/apps/files/l10n/ka_GE.json +++ b/apps/files/l10n/ka_GE.json @@ -129,10 +129,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "ფაილის ზომა რომლის ატვირთვასაც აპირებთ, აჭარბებს სერვერზე დაშვებულ მაქსიმუმს.", "No favorites yet" : "ჯერ რჩეულები არაა", "Files and folders you mark as favorite will show up here" : "აქ გამოჩნდებიან ფაილები და დირექტორიები, რომლებსაც მონიშნავთ რჩეულებად", - "Shares" : "გაზიარებები", - "Shared with others" : "გაზიარდა სხვებთან", - "Shared with you" : "გაზიარდა თქვენთან", - "Shared by link" : "გაზიარდა ბმულით", "Text file" : "ტექსტური ფაილი", "New text file.txt" : "ახალი ტექსტი file.txt", "Storage invalid" : "საცავი არასწორია", @@ -140,6 +136,10 @@ "Cancel" : "უარყოფა", "%s used" : "%s მოხმარებულია", "%1$s of %2$s used" : "გამოყენებულია %1$s სულ %2$s-იდან ", - "Deleted files" : "გაუქმებული ფაილები" + "Deleted files" : "გაუქმებული ფაილები", + "Shares" : "გაზიარებები", + "Shared with others" : "გაზიარდა სხვებთან", + "Shared with you" : "გაზიარდა თქვენთან", + "Shared by link" : "გაზიარდა ბმულით" },"pluralForm" :"nplurals=2; plural=(n!=1);" }
\ No newline at end of file diff --git a/apps/files/l10n/ko.js b/apps/files/l10n/ko.js index 4f4baa07371..6a5bd06d493 100644 --- a/apps/files/l10n/ko.js +++ b/apps/files/l10n/ko.js @@ -239,12 +239,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "이 파일이 서버에서 허용하는 최대 업로드 가능 용량보다 큽니다.", "No favorites yet" : "즐겨찾는 항목 없음", "Files and folders you mark as favorite will show up here" : "즐겨찾기에 추가한 파일과 폴더가 여기에 나타납니다", - "Shares" : "공유", - "Shared with others" : "다른 사람과 공유됨", - "Shared with you" : "나와 공유됨", - "Shared by link" : "링크로 공유됨", - "Deleted shares" : "삭제된 공유", - "Pending shares" : "진행중인 공유", "Text file" : "텍스트 파일", "New text file.txt" : "새 텍스트 파일.txt", "Storage invalid" : "저장소가 잘못됨", @@ -255,6 +249,12 @@ OC.L10N.register( "%s used" : "%s 사용함", "%1$s of %2$s used" : "%2$s 중 %1$s 사용됨", "Deleted files" : "삭제된 파일", + "Shares" : "공유", + "Shared with others" : "다른 사람과 공유됨", + "Shared with you" : "나와 공유됨", + "Shared by link" : "링크로 공유됨", + "Deleted shares" : "삭제된 공유", + "Pending shares" : "진행중인 공유", "Open folder {name}" : "{name} 폴더 열기", "Search for an account" : "계정 검색" }, diff --git a/apps/files/l10n/ko.json b/apps/files/l10n/ko.json index 34fd0bcbce4..8a469ac02a0 100644 --- a/apps/files/l10n/ko.json +++ b/apps/files/l10n/ko.json @@ -237,12 +237,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "이 파일이 서버에서 허용하는 최대 업로드 가능 용량보다 큽니다.", "No favorites yet" : "즐겨찾는 항목 없음", "Files and folders you mark as favorite will show up here" : "즐겨찾기에 추가한 파일과 폴더가 여기에 나타납니다", - "Shares" : "공유", - "Shared with others" : "다른 사람과 공유됨", - "Shared with you" : "나와 공유됨", - "Shared by link" : "링크로 공유됨", - "Deleted shares" : "삭제된 공유", - "Pending shares" : "진행중인 공유", "Text file" : "텍스트 파일", "New text file.txt" : "새 텍스트 파일.txt", "Storage invalid" : "저장소가 잘못됨", @@ -253,6 +247,12 @@ "%s used" : "%s 사용함", "%1$s of %2$s used" : "%2$s 중 %1$s 사용됨", "Deleted files" : "삭제된 파일", + "Shares" : "공유", + "Shared with others" : "다른 사람과 공유됨", + "Shared with you" : "나와 공유됨", + "Shared by link" : "링크로 공유됨", + "Deleted shares" : "삭제된 공유", + "Pending shares" : "진행중인 공유", "Open folder {name}" : "{name} 폴더 열기", "Search for an account" : "계정 검색" },"pluralForm" :"nplurals=1; plural=0;" diff --git a/apps/files/l10n/lt_LT.js b/apps/files/l10n/lt_LT.js index 175037cbb27..8aa941bfdd8 100644 --- a/apps/files/l10n/lt_LT.js +++ b/apps/files/l10n/lt_LT.js @@ -201,12 +201,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Bandomų įkelti failų dydis viršija maksimalų, šiame serveryje leidžiamų įkelti failų dydį.", "No favorites yet" : "Kol kas nėra mėgstamų", "Files and folders you mark as favorite will show up here" : "Čia bus rodomi failai ir aplankai, kuriuos pažymėsite kaip mėgstamus", - "Shares" : "Viešiniai", - "Shared with others" : "Bendrinama su kitais", - "Shared with you" : "Bendrinama su jumis", - "Shared by link" : "Bendrinama pagal nuorodą", - "Deleted shares" : "Ištrinti viešiniai", - "Pending shares" : "Laukiantys viešiniai", "Text file" : "Tekstinis failas", "New text file.txt" : "Naujas tekstinis failas.txt", "Storage invalid" : "Saugykla netinkama naudoti", @@ -217,6 +211,12 @@ OC.L10N.register( "%s used" : "%s panaudota", "%s%%" : "%s%%", "%1$s of %2$s used" : "naudojama %1$s iš %2$s", - "Deleted files" : "Ištrinti failai" + "Deleted files" : "Ištrinti failai", + "Shares" : "Viešiniai", + "Shared with others" : "Bendrinama su kitais", + "Shared with you" : "Bendrinama su jumis", + "Shared by link" : "Bendrinama pagal nuorodą", + "Deleted shares" : "Ištrinti viešiniai", + "Pending shares" : "Laukiantys viešiniai" }, "nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);"); diff --git a/apps/files/l10n/lt_LT.json b/apps/files/l10n/lt_LT.json index eb39e3a34d2..5f0436eca35 100644 --- a/apps/files/l10n/lt_LT.json +++ b/apps/files/l10n/lt_LT.json @@ -199,12 +199,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Bandomų įkelti failų dydis viršija maksimalų, šiame serveryje leidžiamų įkelti failų dydį.", "No favorites yet" : "Kol kas nėra mėgstamų", "Files and folders you mark as favorite will show up here" : "Čia bus rodomi failai ir aplankai, kuriuos pažymėsite kaip mėgstamus", - "Shares" : "Viešiniai", - "Shared with others" : "Bendrinama su kitais", - "Shared with you" : "Bendrinama su jumis", - "Shared by link" : "Bendrinama pagal nuorodą", - "Deleted shares" : "Ištrinti viešiniai", - "Pending shares" : "Laukiantys viešiniai", "Text file" : "Tekstinis failas", "New text file.txt" : "Naujas tekstinis failas.txt", "Storage invalid" : "Saugykla netinkama naudoti", @@ -215,6 +209,12 @@ "%s used" : "%s panaudota", "%s%%" : "%s%%", "%1$s of %2$s used" : "naudojama %1$s iš %2$s", - "Deleted files" : "Ištrinti failai" + "Deleted files" : "Ištrinti failai", + "Shares" : "Viešiniai", + "Shared with others" : "Bendrinama su kitais", + "Shared with you" : "Bendrinama su jumis", + "Shared by link" : "Bendrinama pagal nuorodą", + "Deleted shares" : "Ištrinti viešiniai", + "Pending shares" : "Laukiantys viešiniai" },"pluralForm" :"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);" }
\ No newline at end of file diff --git a/apps/files/l10n/lv.js b/apps/files/l10n/lv.js index 98cc165f366..f5cc826c580 100644 --- a/apps/files/l10n/lv.js +++ b/apps/files/l10n/lv.js @@ -128,12 +128,6 @@ OC.L10N.register( "Upload too large" : "Datne ir par lielu, lai to augšupielādētu", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Augšupielādējamās datnes pārsniedz servera pieļaujamo datņu augšupielādes apjomu", "Files and folders you mark as favorite will show up here" : "Datnes un mapes, ko atzīmēsiet kā favorītus, tiks rādīti šeit", - "Shares" : "Koplietots", - "Shared with others" : "Koplietots ar citiem", - "Shared with you" : "Koplietots ar tevi", - "Shared by link" : "Koplietots ar saiti", - "Deleted shares" : "Dzēstās koplietotnes", - "Pending shares" : "Gaidošie koplietojumi", "Text file" : "Teksta datne", "New text file.txt" : "Jauna teksta datne.txt", "Storage invalid" : "Nepareiza glabātuve", @@ -141,6 +135,12 @@ OC.L10N.register( "Cancel" : "Atcelt", "%s used" : "%s izmantoti", "%1$s of %2$s used" : "%1$s no %2$s lietoti", - "Deleted files" : "Dzēstās datnes" + "Deleted files" : "Dzēstās datnes", + "Shares" : "Koplietots", + "Shared with others" : "Koplietots ar citiem", + "Shared with you" : "Koplietots ar tevi", + "Shared by link" : "Koplietots ar saiti", + "Deleted shares" : "Dzēstās koplietotnes", + "Pending shares" : "Gaidošie koplietojumi" }, "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"); diff --git a/apps/files/l10n/lv.json b/apps/files/l10n/lv.json index 54a2e0efa61..e3c9c1250cd 100644 --- a/apps/files/l10n/lv.json +++ b/apps/files/l10n/lv.json @@ -126,12 +126,6 @@ "Upload too large" : "Datne ir par lielu, lai to augšupielādētu", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Augšupielādējamās datnes pārsniedz servera pieļaujamo datņu augšupielādes apjomu", "Files and folders you mark as favorite will show up here" : "Datnes un mapes, ko atzīmēsiet kā favorītus, tiks rādīti šeit", - "Shares" : "Koplietots", - "Shared with others" : "Koplietots ar citiem", - "Shared with you" : "Koplietots ar tevi", - "Shared by link" : "Koplietots ar saiti", - "Deleted shares" : "Dzēstās koplietotnes", - "Pending shares" : "Gaidošie koplietojumi", "Text file" : "Teksta datne", "New text file.txt" : "Jauna teksta datne.txt", "Storage invalid" : "Nepareiza glabātuve", @@ -139,6 +133,12 @@ "Cancel" : "Atcelt", "%s used" : "%s izmantoti", "%1$s of %2$s used" : "%1$s no %2$s lietoti", - "Deleted files" : "Dzēstās datnes" + "Deleted files" : "Dzēstās datnes", + "Shares" : "Koplietots", + "Shared with others" : "Koplietots ar citiem", + "Shared with you" : "Koplietots ar tevi", + "Shared by link" : "Koplietots ar saiti", + "Deleted shares" : "Dzēstās koplietotnes", + "Pending shares" : "Gaidošie koplietojumi" },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);" }
\ No newline at end of file diff --git a/apps/files/l10n/mk.js b/apps/files/l10n/mk.js index 7d28060cc0c..e31f3d7983f 100644 --- a/apps/files/l10n/mk.js +++ b/apps/files/l10n/mk.js @@ -219,12 +219,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Датотеките кои се обидувате да ги подигнете ја надминуваат максималната големина за подигнување датотеки на овој сервер.", "No favorites yet" : "Сеуште нема фаворити", "Files and folders you mark as favorite will show up here" : "Датотеките и папките кои ќе ги означите како чести, ќе се појават тука", - "Shares" : "Споделувања", - "Shared with others" : "Споделно со други", - "Shared with you" : "Споделено со тебе", - "Shared by link" : "Споделено со линк", - "Deleted shares" : "Избришани споделувања", - "Pending shares" : "Споделувања на чекање", "Text file" : "Текстуална датотека", "New text file.txt" : "Нова текстуална датотека file.txt", "Storage invalid" : "Невалидно складиште", @@ -235,6 +229,12 @@ OC.L10N.register( "%s used" : "Искористено %s", "%s%%" : "%s%%", "%1$s of %2$s used" : "Искористено %1$s од %2$s", - "Deleted files" : "Избришани датотеки" + "Deleted files" : "Избришани датотеки", + "Shares" : "Споделувања", + "Shared with others" : "Споделно со други", + "Shared with you" : "Споделено со тебе", + "Shared by link" : "Споделено со линк", + "Deleted shares" : "Избришани споделувања", + "Pending shares" : "Споделувања на чекање" }, "nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"); diff --git a/apps/files/l10n/mk.json b/apps/files/l10n/mk.json index f053bed93cb..7eee3a16bf4 100644 --- a/apps/files/l10n/mk.json +++ b/apps/files/l10n/mk.json @@ -217,12 +217,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Датотеките кои се обидувате да ги подигнете ја надминуваат максималната големина за подигнување датотеки на овој сервер.", "No favorites yet" : "Сеуште нема фаворити", "Files and folders you mark as favorite will show up here" : "Датотеките и папките кои ќе ги означите како чести, ќе се појават тука", - "Shares" : "Споделувања", - "Shared with others" : "Споделно со други", - "Shared with you" : "Споделено со тебе", - "Shared by link" : "Споделено со линк", - "Deleted shares" : "Избришани споделувања", - "Pending shares" : "Споделувања на чекање", "Text file" : "Текстуална датотека", "New text file.txt" : "Нова текстуална датотека file.txt", "Storage invalid" : "Невалидно складиште", @@ -233,6 +227,12 @@ "%s used" : "Искористено %s", "%s%%" : "%s%%", "%1$s of %2$s used" : "Искористено %1$s од %2$s", - "Deleted files" : "Избришани датотеки" + "Deleted files" : "Избришани датотеки", + "Shares" : "Споделувања", + "Shared with others" : "Споделно со други", + "Shared with you" : "Споделено со тебе", + "Shared by link" : "Споделено со линк", + "Deleted shares" : "Избришани споделувања", + "Pending shares" : "Споделувања на чекање" },"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;" }
\ No newline at end of file diff --git a/apps/files/l10n/mn.js b/apps/files/l10n/mn.js index a0d85e82137..4c6176af41a 100644 --- a/apps/files/l10n/mn.js +++ b/apps/files/l10n/mn.js @@ -127,15 +127,15 @@ OC.L10N.register( "No entries found in this folder" : "энэ хавтсан олдсон ч ямарч мэдээлэл олдохгүй байна", "Upload too large" : "маш том байршуулалт", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Таны байршуулах гэж оролдсон файлууд нь энэ сервер дээр файл байршуулах дээд хэмжээнээс хэтэрч.", - "Shares" : "Түгээлтүүд", - "Shared with others" : "Бусдад түгээсэн", - "Shared with you" : "тантай хуваалцсан", - "Shared by link" : "Холбоосоор түгээсэн", "Text file" : "текст файл", "New text file.txt" : "шинэ текст file.txt", "Storage invalid" : "Хадгалах төхөөрөмж буруу байна", "Cancel" : "болиулах", "%1$s of %2$s used" : "%1$s-с %2$s хэрэглэсэн", - "Deleted files" : "Устгасан файлууд" + "Deleted files" : "Устгасан файлууд", + "Shares" : "Түгээлтүүд", + "Shared with others" : "Бусдад түгээсэн", + "Shared with you" : "тантай хуваалцсан", + "Shared by link" : "Холбоосоор түгээсэн" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/mn.json b/apps/files/l10n/mn.json index b1fa31e3ea6..5e95688400a 100644 --- a/apps/files/l10n/mn.json +++ b/apps/files/l10n/mn.json @@ -125,15 +125,15 @@ "No entries found in this folder" : "энэ хавтсан олдсон ч ямарч мэдээлэл олдохгүй байна", "Upload too large" : "маш том байршуулалт", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Таны байршуулах гэж оролдсон файлууд нь энэ сервер дээр файл байршуулах дээд хэмжээнээс хэтэрч.", - "Shares" : "Түгээлтүүд", - "Shared with others" : "Бусдад түгээсэн", - "Shared with you" : "тантай хуваалцсан", - "Shared by link" : "Холбоосоор түгээсэн", "Text file" : "текст файл", "New text file.txt" : "шинэ текст file.txt", "Storage invalid" : "Хадгалах төхөөрөмж буруу байна", "Cancel" : "болиулах", "%1$s of %2$s used" : "%1$s-с %2$s хэрэглэсэн", - "Deleted files" : "Устгасан файлууд" + "Deleted files" : "Устгасан файлууд", + "Shares" : "Түгээлтүүд", + "Shared with others" : "Бусдад түгээсэн", + "Shared with you" : "тантай хуваалцсан", + "Shared by link" : "Холбоосоор түгээсэн" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/nb.js b/apps/files/l10n/nb.js index 236503ba77c..58424a9d88c 100644 --- a/apps/files/l10n/nb.js +++ b/apps/files/l10n/nb.js @@ -216,12 +216,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Filene du prøver å laste opp er for store til å laste opp til denne serveren.", "No favorites yet" : "Ingen favoritter enda", "Files and folders you mark as favorite will show up here" : "Filer og mapper som du gjør til favoritter vises her", - "Shares" : "Delinger", - "Shared with others" : "Delt med andre", - "Shared with you" : "Delt med deg", - "Shared by link" : "Delt med lenke", - "Deleted shares" : "Slettede delinger", - "Pending shares" : "Ventende delinger", "Text file" : "Tekstfil", "New text file.txt" : "Ny tekstfil.txt", "Storage invalid" : "Lagringsplass ugyldig", @@ -232,6 +226,12 @@ OC.L10N.register( "%s used" : "%s brukt", "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s av %2$s brukt", - "Deleted files" : "Slettede filer" + "Deleted files" : "Slettede filer", + "Shares" : "Delinger", + "Shared with others" : "Delt med andre", + "Shared with you" : "Delt med deg", + "Shared by link" : "Delt med lenke", + "Deleted shares" : "Slettede delinger", + "Pending shares" : "Ventende delinger" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/nb.json b/apps/files/l10n/nb.json index 335e9b811c8..d1b76962eec 100644 --- a/apps/files/l10n/nb.json +++ b/apps/files/l10n/nb.json @@ -214,12 +214,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Filene du prøver å laste opp er for store til å laste opp til denne serveren.", "No favorites yet" : "Ingen favoritter enda", "Files and folders you mark as favorite will show up here" : "Filer og mapper som du gjør til favoritter vises her", - "Shares" : "Delinger", - "Shared with others" : "Delt med andre", - "Shared with you" : "Delt med deg", - "Shared by link" : "Delt med lenke", - "Deleted shares" : "Slettede delinger", - "Pending shares" : "Ventende delinger", "Text file" : "Tekstfil", "New text file.txt" : "Ny tekstfil.txt", "Storage invalid" : "Lagringsplass ugyldig", @@ -230,6 +224,12 @@ "%s used" : "%s brukt", "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s av %2$s brukt", - "Deleted files" : "Slettede filer" + "Deleted files" : "Slettede filer", + "Shares" : "Delinger", + "Shared with others" : "Delt med andre", + "Shared with you" : "Delt med deg", + "Shared by link" : "Delt med lenke", + "Deleted shares" : "Slettede delinger", + "Pending shares" : "Ventende delinger" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/nl.js b/apps/files/l10n/nl.js index 5ae5384dcf9..7ebca1b3fd1 100644 --- a/apps/files/l10n/nl.js +++ b/apps/files/l10n/nl.js @@ -210,12 +210,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "De bestanden die je probeert te uploaden zijn groter dan de maximaal toegestane bestandsgrootte voor deze server.", "No favorites yet" : "Nog geen favorieten", "Files and folders you mark as favorite will show up here" : "Bestanden en mappen die je als favoriet aanmerkt, worden hier getoond", - "Shares" : "Shares", - "Shared with others" : "Gedeeld met anderen", - "Shared with you" : "Gedeeld met jou", - "Shared by link" : "Gedeeld via link", - "Deleted shares" : "Verwijderde shares", - "Pending shares" : "Deellinks in behandeling", "Text file" : "Tekstbestand", "New text file.txt" : "Nieuw tekstbestand.txt", "Storage invalid" : "Opslag ongeldig", @@ -226,6 +220,12 @@ OC.L10N.register( "%s used" : "%s gebruikt", "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s van %2$s gebruikt", - "Deleted files" : "Verwijderde bestanden" + "Deleted files" : "Verwijderde bestanden", + "Shares" : "Shares", + "Shared with others" : "Gedeeld met anderen", + "Shared with you" : "Gedeeld met jou", + "Shared by link" : "Gedeeld via link", + "Deleted shares" : "Verwijderde shares", + "Pending shares" : "Deellinks in behandeling" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/nl.json b/apps/files/l10n/nl.json index 881372cf593..c3bdcef759c 100644 --- a/apps/files/l10n/nl.json +++ b/apps/files/l10n/nl.json @@ -208,12 +208,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "De bestanden die je probeert te uploaden zijn groter dan de maximaal toegestane bestandsgrootte voor deze server.", "No favorites yet" : "Nog geen favorieten", "Files and folders you mark as favorite will show up here" : "Bestanden en mappen die je als favoriet aanmerkt, worden hier getoond", - "Shares" : "Shares", - "Shared with others" : "Gedeeld met anderen", - "Shared with you" : "Gedeeld met jou", - "Shared by link" : "Gedeeld via link", - "Deleted shares" : "Verwijderde shares", - "Pending shares" : "Deellinks in behandeling", "Text file" : "Tekstbestand", "New text file.txt" : "Nieuw tekstbestand.txt", "Storage invalid" : "Opslag ongeldig", @@ -224,6 +218,12 @@ "%s used" : "%s gebruikt", "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s van %2$s gebruikt", - "Deleted files" : "Verwijderde bestanden" + "Deleted files" : "Verwijderde bestanden", + "Shares" : "Shares", + "Shared with others" : "Gedeeld met anderen", + "Shared with you" : "Gedeeld met jou", + "Shared by link" : "Gedeeld via link", + "Deleted shares" : "Verwijderde shares", + "Pending shares" : "Deellinks in behandeling" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/pl.js b/apps/files/l10n/pl.js index 04ab810aa4b..dc22cb1c506 100644 --- a/apps/files/l10n/pl.js +++ b/apps/files/l10n/pl.js @@ -241,12 +241,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Pliki, które próbujesz wysłać, przekraczają maksymalną dopuszczalną wielkość.", "No favorites yet" : "Brak ulubionych", "Files and folders you mark as favorite will show up here" : "Pliki i katalogi, które oznaczysz jako ulubione wyświetlą się tutaj", - "Shares" : "Udostępnione", - "Shared with others" : "Udostępnione innym", - "Shared with you" : "Udostępnione dla Ciebie", - "Shared by link" : "Udostępnione linkiem", - "Deleted shares" : "Usunięte udostępnienia", - "Pending shares" : "Oczekujące udostępnienia", "Text file" : "Plik tekstowy", "New text file.txt" : "Nowy plik tekstowy.txt", "Storage invalid" : "Nieprawidłowy magazyn", @@ -258,6 +252,12 @@ OC.L10N.register( "%s%%" : "%s%%", "%1$s of %2$s used" : "Wykorzystane: %1$s z %2$s", "Deleted files" : "Usunięte pliki", + "Shares" : "Udostępnione", + "Shared with others" : "Udostępnione innym", + "Shared with you" : "Udostępnione dla Ciebie", + "Shared by link" : "Udostępnione linkiem", + "Deleted shares" : "Usunięte udostępnienia", + "Pending shares" : "Oczekujące udostępnienia", "Open folder {name}" : "Otwórz katalog {name}", "Search for an account" : "Wyszukaj konto" }, diff --git a/apps/files/l10n/pl.json b/apps/files/l10n/pl.json index 0d96cfc098e..ebc20b46ba0 100644 --- a/apps/files/l10n/pl.json +++ b/apps/files/l10n/pl.json @@ -239,12 +239,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Pliki, które próbujesz wysłać, przekraczają maksymalną dopuszczalną wielkość.", "No favorites yet" : "Brak ulubionych", "Files and folders you mark as favorite will show up here" : "Pliki i katalogi, które oznaczysz jako ulubione wyświetlą się tutaj", - "Shares" : "Udostępnione", - "Shared with others" : "Udostępnione innym", - "Shared with you" : "Udostępnione dla Ciebie", - "Shared by link" : "Udostępnione linkiem", - "Deleted shares" : "Usunięte udostępnienia", - "Pending shares" : "Oczekujące udostępnienia", "Text file" : "Plik tekstowy", "New text file.txt" : "Nowy plik tekstowy.txt", "Storage invalid" : "Nieprawidłowy magazyn", @@ -256,6 +250,12 @@ "%s%%" : "%s%%", "%1$s of %2$s used" : "Wykorzystane: %1$s z %2$s", "Deleted files" : "Usunięte pliki", + "Shares" : "Udostępnione", + "Shared with others" : "Udostępnione innym", + "Shared with you" : "Udostępnione dla Ciebie", + "Shared by link" : "Udostępnione linkiem", + "Deleted shares" : "Usunięte udostępnienia", + "Pending shares" : "Oczekujące udostępnienia", "Open folder {name}" : "Otwórz katalog {name}", "Search for an account" : "Wyszukaj konto" },"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);" diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js index 893eeb23bca..8c2f840bb07 100644 --- a/apps/files/l10n/pt_BR.js +++ b/apps/files/l10n/pt_BR.js @@ -171,11 +171,20 @@ OC.L10N.register( "Reload current directory" : "Recarregar diretório atual", "Go to the \"{dir}\" directory" : "Vá para o diretório \"{dir}\"", "Select the row for {displayName}" : "Selecione a linha para {displayName}", + "Rename file" : "Renomear arquivo", "File name" : "Nome do arquivo", + "A long time ago" : "A muito tempo atrás", "Download file {name}" : "Baixe o arquivo {nome}", "\"{displayName}\" action executed successfully" : "Ação \"{displayName}\" executada com sucesso", "\"{displayName}\" action failed" : "A ação \"{displayName}\" falhou", + "\"{name}\" is not an allowed filetype." : "\"{name}\" não é um tipo de arquivo permitido.", + "{newName} already exists." : "{newName} já existe.", "Name cannot be empty" : "O nome não pode ficar em branco", + "Another entry with the same name already exists" : "Já existe outra entrada com o mesmo nome", + "Renamed \"{oldName}\" to \"{newName}\"" : "Renomeado de \"{oldName}\" para \"{newName}\"", + "Could not rename \"{oldName}\", it does not exist any more" : "Não foi possível renomear \"{oldName}\", ele não existe mais", + "The name \"{newName}\"\" is already used in the folder \"{dir}\". Please choose a different name." : "O nome \"{newName}\"\" já está sendo usado na pasta \"{dir}\". Por favor, escolha um nome diferente.", + "Could not rename \"{oldName}\"" : "Não foi possível renomear \"{oldName}\"", "Total rows summary" : "Resumo total de linhas", "Select all" : "Selecionar tudo", "Unselect all" : "Desmarque todos", @@ -210,6 +219,7 @@ OC.L10N.register( "Files settings" : "Configurações de arquivos", "File cannot be accessed" : "File cannot be accessed", "You might not have have permissions to view it, ask the sender to share it" : "You might not have have permissions to view it, ask the sender to share it", + "Sort favorites first" : "Ordenar favoritos primeiro", "Show hidden files" : "Mostrar arquivos ocultos", "Crop image previews" : "Cortar visualizações de imagem", "Additional settings" : "Configurações adicionais", @@ -234,6 +244,7 @@ OC.L10N.register( "Templates" : "Modelos", "Create new templates folder" : "Criar nova pasta de modelos", "Unable to initialize the templates directory" : "Não foi possível inicializar o diretório de modelos", + "List of favorites files and folders." : "Lista de arquivos e pastas favoritos.", "Toggle %1$s sublist" : "Alternar a sublista %1$s", "Toggle grid view" : "Alternar a visão em grade", "Upload some content or sync with your devices!" : "Envie um arquivo ou sincronize com seus dispositivos!", @@ -242,12 +253,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Os arquivos que você está tentando enviar excederam o tamanho máximo para arquivos no servidor.", "No favorites yet" : "Você não possui favoritos!", "Files and folders you mark as favorite will show up here" : "Suas pastas e arquivos favoritos serão exibidos aqui.", - "Shares" : "Compartilhamentos", - "Shared with others" : "Compartilhado com os outros", - "Shared with you" : "Compartilhado com você", - "Shared by link" : "Compartilhado via link", - "Deleted shares" : "Compartilhamentos apagados", - "Pending shares" : "Compartilhamentos pendentes", "Text file" : "Arquivo texto", "New text file.txt" : "Novo arquivo de texto arquivo.txt", "Storage invalid" : "Armazenamento inválido", @@ -259,6 +264,12 @@ OC.L10N.register( "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s usados de %2$s", "Deleted files" : "Arquivos apagados", + "Shares" : "Compartilhamentos", + "Shared with others" : "Compartilhado com os outros", + "Shared with you" : "Compartilhado com você", + "Shared by link" : "Compartilhado via link", + "Deleted shares" : "Compartilhamentos apagados", + "Pending shares" : "Compartilhamentos pendentes", "Open folder {name}" : "Abra a pasta {nome}", "Search for an account" : "Pesquisar uma conta" }, diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json index 792cd007fd6..e91c4780c63 100644 --- a/apps/files/l10n/pt_BR.json +++ b/apps/files/l10n/pt_BR.json @@ -169,11 +169,20 @@ "Reload current directory" : "Recarregar diretório atual", "Go to the \"{dir}\" directory" : "Vá para o diretório \"{dir}\"", "Select the row for {displayName}" : "Selecione a linha para {displayName}", + "Rename file" : "Renomear arquivo", "File name" : "Nome do arquivo", + "A long time ago" : "A muito tempo atrás", "Download file {name}" : "Baixe o arquivo {nome}", "\"{displayName}\" action executed successfully" : "Ação \"{displayName}\" executada com sucesso", "\"{displayName}\" action failed" : "A ação \"{displayName}\" falhou", + "\"{name}\" is not an allowed filetype." : "\"{name}\" não é um tipo de arquivo permitido.", + "{newName} already exists." : "{newName} já existe.", "Name cannot be empty" : "O nome não pode ficar em branco", + "Another entry with the same name already exists" : "Já existe outra entrada com o mesmo nome", + "Renamed \"{oldName}\" to \"{newName}\"" : "Renomeado de \"{oldName}\" para \"{newName}\"", + "Could not rename \"{oldName}\", it does not exist any more" : "Não foi possível renomear \"{oldName}\", ele não existe mais", + "The name \"{newName}\"\" is already used in the folder \"{dir}\". Please choose a different name." : "O nome \"{newName}\"\" já está sendo usado na pasta \"{dir}\". Por favor, escolha um nome diferente.", + "Could not rename \"{oldName}\"" : "Não foi possível renomear \"{oldName}\"", "Total rows summary" : "Resumo total de linhas", "Select all" : "Selecionar tudo", "Unselect all" : "Desmarque todos", @@ -208,6 +217,7 @@ "Files settings" : "Configurações de arquivos", "File cannot be accessed" : "File cannot be accessed", "You might not have have permissions to view it, ask the sender to share it" : "You might not have have permissions to view it, ask the sender to share it", + "Sort favorites first" : "Ordenar favoritos primeiro", "Show hidden files" : "Mostrar arquivos ocultos", "Crop image previews" : "Cortar visualizações de imagem", "Additional settings" : "Configurações adicionais", @@ -232,6 +242,7 @@ "Templates" : "Modelos", "Create new templates folder" : "Criar nova pasta de modelos", "Unable to initialize the templates directory" : "Não foi possível inicializar o diretório de modelos", + "List of favorites files and folders." : "Lista de arquivos e pastas favoritos.", "Toggle %1$s sublist" : "Alternar a sublista %1$s", "Toggle grid view" : "Alternar a visão em grade", "Upload some content or sync with your devices!" : "Envie um arquivo ou sincronize com seus dispositivos!", @@ -240,12 +251,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Os arquivos que você está tentando enviar excederam o tamanho máximo para arquivos no servidor.", "No favorites yet" : "Você não possui favoritos!", "Files and folders you mark as favorite will show up here" : "Suas pastas e arquivos favoritos serão exibidos aqui.", - "Shares" : "Compartilhamentos", - "Shared with others" : "Compartilhado com os outros", - "Shared with you" : "Compartilhado com você", - "Shared by link" : "Compartilhado via link", - "Deleted shares" : "Compartilhamentos apagados", - "Pending shares" : "Compartilhamentos pendentes", "Text file" : "Arquivo texto", "New text file.txt" : "Novo arquivo de texto arquivo.txt", "Storage invalid" : "Armazenamento inválido", @@ -257,6 +262,12 @@ "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s usados de %2$s", "Deleted files" : "Arquivos apagados", + "Shares" : "Compartilhamentos", + "Shared with others" : "Compartilhado com os outros", + "Shared with you" : "Compartilhado com você", + "Shared by link" : "Compartilhado via link", + "Deleted shares" : "Compartilhamentos apagados", + "Pending shares" : "Compartilhamentos pendentes", "Open folder {name}" : "Abra a pasta {nome}", "Search for an account" : "Pesquisar uma conta" },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" diff --git a/apps/files/l10n/pt_PT.js b/apps/files/l10n/pt_PT.js index d6c9569462e..6408d2e1f74 100644 --- a/apps/files/l10n/pt_PT.js +++ b/apps/files/l10n/pt_PT.js @@ -159,10 +159,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Os ficheiros que está a tentar enviar excedem o tamanho máximo para os envios de ficheiro neste servidor.", "No favorites yet" : "Sem favoritos", "Files and folders you mark as favorite will show up here" : "Os ficheiros e pastas que marcou como favoritos serão mostrados aqui", - "Shares" : "Partilhas", - "Shared with others" : "Partilhado com terceiros", - "Shared with you" : "Partilhado consigo ", - "Shared by link" : "Partilhado por hiperligação", "Text file" : "Ficheiro de Texto", "New text file.txt" : "Novo texto ficheiro.txt", "Storage invalid" : "Armazenamento inválido", @@ -171,6 +167,10 @@ OC.L10N.register( "Cancel" : "Cancelar", "%s used" : "%s utilizado", "%1$s of %2$s used" : "Usado %1$s de %2$s", - "Deleted files" : "Ficheiros eliminados" + "Deleted files" : "Ficheiros eliminados", + "Shares" : "Partilhas", + "Shared with others" : "Partilhado com terceiros", + "Shared with you" : "Partilhado consigo ", + "Shared by link" : "Partilhado por hiperligação" }, "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/files/l10n/pt_PT.json b/apps/files/l10n/pt_PT.json index 1eed9acebd9..ebd6c7d131b 100644 --- a/apps/files/l10n/pt_PT.json +++ b/apps/files/l10n/pt_PT.json @@ -157,10 +157,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Os ficheiros que está a tentar enviar excedem o tamanho máximo para os envios de ficheiro neste servidor.", "No favorites yet" : "Sem favoritos", "Files and folders you mark as favorite will show up here" : "Os ficheiros e pastas que marcou como favoritos serão mostrados aqui", - "Shares" : "Partilhas", - "Shared with others" : "Partilhado com terceiros", - "Shared with you" : "Partilhado consigo ", - "Shared by link" : "Partilhado por hiperligação", "Text file" : "Ficheiro de Texto", "New text file.txt" : "Novo texto ficheiro.txt", "Storage invalid" : "Armazenamento inválido", @@ -169,6 +165,10 @@ "Cancel" : "Cancelar", "%s used" : "%s utilizado", "%1$s of %2$s used" : "Usado %1$s de %2$s", - "Deleted files" : "Ficheiros eliminados" + "Deleted files" : "Ficheiros eliminados", + "Shares" : "Partilhas", + "Shared with others" : "Partilhado com terceiros", + "Shared with you" : "Partilhado consigo ", + "Shared by link" : "Partilhado por hiperligação" },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files/l10n/ro.js b/apps/files/l10n/ro.js index 2ff9bc7805e..ce315a61b97 100644 --- a/apps/files/l10n/ro.js +++ b/apps/files/l10n/ro.js @@ -202,12 +202,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Fișierele pe care încerci să le încarci depășesc limita de încărcare maximă admisă pe acest server.", "No favorites yet" : "Nu aveți favorite încă", "Files and folders you mark as favorite will show up here" : "FIșierele și directoarele pe care le marchezi ca favorite vor apărea aici", - "Shares" : "Partajări", - "Shared with others" : "Partajat cu alții", - "Shared with you" : "Partajat cu tine", - "Shared by link" : "Partajat prin link", - "Deleted shares" : "Partajări șterse", - "Pending shares" : "Partajări in asteptare", "Text file" : "Fișier text", "New text file.txt" : "Fișier nou.txt", "Storage invalid" : "Spațiu de stocare invalid", @@ -217,6 +211,12 @@ OC.L10N.register( "Cancel" : "Anulare", "%s used" : "%s folosiți", "%1$s of %2$s used" : "%1$s din %2$s utilizat", - "Deleted files" : "Fișiere șterse" + "Deleted files" : "Fișiere șterse", + "Shares" : "Partajări", + "Shared with others" : "Partajat cu alții", + "Shared with you" : "Partajat cu tine", + "Shared by link" : "Partajat prin link", + "Deleted shares" : "Partajări șterse", + "Pending shares" : "Partajări in asteptare" }, "nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));"); diff --git a/apps/files/l10n/ro.json b/apps/files/l10n/ro.json index 2a69c9cd45f..e4a3d51e69b 100644 --- a/apps/files/l10n/ro.json +++ b/apps/files/l10n/ro.json @@ -200,12 +200,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Fișierele pe care încerci să le încarci depășesc limita de încărcare maximă admisă pe acest server.", "No favorites yet" : "Nu aveți favorite încă", "Files and folders you mark as favorite will show up here" : "FIșierele și directoarele pe care le marchezi ca favorite vor apărea aici", - "Shares" : "Partajări", - "Shared with others" : "Partajat cu alții", - "Shared with you" : "Partajat cu tine", - "Shared by link" : "Partajat prin link", - "Deleted shares" : "Partajări șterse", - "Pending shares" : "Partajări in asteptare", "Text file" : "Fișier text", "New text file.txt" : "Fișier nou.txt", "Storage invalid" : "Spațiu de stocare invalid", @@ -215,6 +209,12 @@ "Cancel" : "Anulare", "%s used" : "%s folosiți", "%1$s of %2$s used" : "%1$s din %2$s utilizat", - "Deleted files" : "Fișiere șterse" + "Deleted files" : "Fișiere șterse", + "Shares" : "Partajări", + "Shared with others" : "Partajat cu alții", + "Shared with you" : "Partajat cu tine", + "Shared by link" : "Partajat prin link", + "Deleted shares" : "Partajări șterse", + "Pending shares" : "Partajări in asteptare" },"pluralForm" :"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));" }
\ No newline at end of file diff --git a/apps/files/l10n/ru.js b/apps/files/l10n/ru.js index a5e9c709715..9dbaf3f643d 100644 --- a/apps/files/l10n/ru.js +++ b/apps/files/l10n/ru.js @@ -241,12 +241,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Файлы, которые вы пытаетесь передать, превышают лимит максимального размера на этом сервере.", "No favorites yet" : "В избранное ещё ничего не добавлено ", "Files and folders you mark as favorite will show up here" : "Здесь будут показаны файлы и каталоги, отмеченные как избранные", - "Shares" : "Общие ресурсы", - "Shared with others" : "Доступные для других", - "Shared with you" : "Доступные для вас", - "Shared by link" : "Доступные по ссылке", - "Deleted shares" : "Удалённые общие ресурсы", - "Pending shares" : "Ожидающие общие ресурсы", "Text file" : "Текстовый файл", "New text file.txt" : "Новый текстовый файл.txt", "Storage invalid" : "Хранилище неисправно", @@ -258,6 +252,12 @@ OC.L10N.register( "%s%%" : "%s%%", "%1$s of %2$s used" : "использовано %1$s из %2$s ", "Deleted files" : "Корзина", + "Shares" : "Общие ресурсы", + "Shared with others" : "Доступные для других", + "Shared with you" : "Доступные для вас", + "Shared by link" : "Доступные по ссылке", + "Deleted shares" : "Удалённые общие ресурсы", + "Pending shares" : "Ожидающие общие ресурсы", "Open folder {name}" : "Открыть папку {name}", "Search for an account" : "Поиск по учетной записи" }, diff --git a/apps/files/l10n/ru.json b/apps/files/l10n/ru.json index 27b243e7236..3d67c93eed8 100644 --- a/apps/files/l10n/ru.json +++ b/apps/files/l10n/ru.json @@ -239,12 +239,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Файлы, которые вы пытаетесь передать, превышают лимит максимального размера на этом сервере.", "No favorites yet" : "В избранное ещё ничего не добавлено ", "Files and folders you mark as favorite will show up here" : "Здесь будут показаны файлы и каталоги, отмеченные как избранные", - "Shares" : "Общие ресурсы", - "Shared with others" : "Доступные для других", - "Shared with you" : "Доступные для вас", - "Shared by link" : "Доступные по ссылке", - "Deleted shares" : "Удалённые общие ресурсы", - "Pending shares" : "Ожидающие общие ресурсы", "Text file" : "Текстовый файл", "New text file.txt" : "Новый текстовый файл.txt", "Storage invalid" : "Хранилище неисправно", @@ -256,6 +250,12 @@ "%s%%" : "%s%%", "%1$s of %2$s used" : "использовано %1$s из %2$s ", "Deleted files" : "Корзина", + "Shares" : "Общие ресурсы", + "Shared with others" : "Доступные для других", + "Shared with you" : "Доступные для вас", + "Shared by link" : "Доступные по ссылке", + "Deleted shares" : "Удалённые общие ресурсы", + "Pending shares" : "Ожидающие общие ресурсы", "Open folder {name}" : "Открыть папку {name}", "Search for an account" : "Поиск по учетной записи" },"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);" diff --git a/apps/files/l10n/sc.js b/apps/files/l10n/sc.js index 290059c4e91..457aaabb778 100644 --- a/apps/files/l10n/sc.js +++ b/apps/files/l10n/sc.js @@ -196,12 +196,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Is archìvios chi boles carrigare passant sa mannària màssima de carrigamentu de archìvios in custu serbidore.", "No favorites yet" : "Ancora perunu preferidu", "Files and folders you mark as favorite will show up here" : "Is archìvios e is cartellas chi marcas comente preferidos ant a aparèssere inoghe", - "Shares" : "Cumpartziduras", - "Shared with others" : "Cumpartzidu cun àtere", - "Shared with you" : "Cumpartzidu cun tegus", - "Shared by link" : "Cumpartzidu cun ligòngiu", - "Deleted shares" : "Cumpartziduras cantzelladas", - "Pending shares" : "Cumpartziduras in suspesu", "Text file" : "Archìviu de testu", "New text file.txt" : "Archìviu de testu .txt nou", "Storage invalid" : "Archiviatzione non vàlida", @@ -211,6 +205,12 @@ OC.L10N.register( "Cancel" : "Annulla", "%s used" : "%s impreadu", "%1$s of %2$s used" : "%1$s de %2$s impreadu", - "Deleted files" : "Archìvios cantzellados" + "Deleted files" : "Archìvios cantzellados", + "Shares" : "Cumpartziduras", + "Shared with others" : "Cumpartzidu cun àtere", + "Shared with you" : "Cumpartzidu cun tegus", + "Shared by link" : "Cumpartzidu cun ligòngiu", + "Deleted shares" : "Cumpartziduras cantzelladas", + "Pending shares" : "Cumpartziduras in suspesu" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/sc.json b/apps/files/l10n/sc.json index 1215adfc973..6eaad1a083d 100644 --- a/apps/files/l10n/sc.json +++ b/apps/files/l10n/sc.json @@ -194,12 +194,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Is archìvios chi boles carrigare passant sa mannària màssima de carrigamentu de archìvios in custu serbidore.", "No favorites yet" : "Ancora perunu preferidu", "Files and folders you mark as favorite will show up here" : "Is archìvios e is cartellas chi marcas comente preferidos ant a aparèssere inoghe", - "Shares" : "Cumpartziduras", - "Shared with others" : "Cumpartzidu cun àtere", - "Shared with you" : "Cumpartzidu cun tegus", - "Shared by link" : "Cumpartzidu cun ligòngiu", - "Deleted shares" : "Cumpartziduras cantzelladas", - "Pending shares" : "Cumpartziduras in suspesu", "Text file" : "Archìviu de testu", "New text file.txt" : "Archìviu de testu .txt nou", "Storage invalid" : "Archiviatzione non vàlida", @@ -209,6 +203,12 @@ "Cancel" : "Annulla", "%s used" : "%s impreadu", "%1$s of %2$s used" : "%1$s de %2$s impreadu", - "Deleted files" : "Archìvios cantzellados" + "Deleted files" : "Archìvios cantzellados", + "Shares" : "Cumpartziduras", + "Shared with others" : "Cumpartzidu cun àtere", + "Shared with you" : "Cumpartzidu cun tegus", + "Shared by link" : "Cumpartzidu cun ligòngiu", + "Deleted shares" : "Cumpartziduras cantzelladas", + "Pending shares" : "Cumpartziduras in suspesu" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/sk.js b/apps/files/l10n/sk.js index 6c392d80a36..305fa14c162 100644 --- a/apps/files/l10n/sk.js +++ b/apps/files/l10n/sk.js @@ -211,12 +211,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Súbory, ktoré sa snažíte nahrať, presahujú maximálnu veľkosť pre nahratie súborov na tento server.", "No favorites yet" : "Zatiaľ žiadne obľúbené", "Files and folders you mark as favorite will show up here" : "Súbory a priečinky označené ako obľúbené budú zobrazené tu", - "Shares" : "Zdieľania", - "Shared with others" : "Sprístupnené ostatným", - "Shared with you" : "Vám sprístupnené", - "Shared by link" : "Sprístupnené prostredníctvom odkazu", - "Deleted shares" : "Vymazané zdieľania", - "Pending shares" : "Čakajúce prístupy", "Text file" : "Textový súbor", "New text file.txt" : "Nový text file.txt", "Storage invalid" : "Úložisko nie je platné", @@ -227,6 +221,12 @@ OC.L10N.register( "%s used" : "%s použitých", "%s%%" : "%s%%", "%1$s of %2$s used" : "Využité: %1$s z %2$s", - "Deleted files" : "Zmazané súbory" + "Deleted files" : "Zmazané súbory", + "Shares" : "Zdieľania", + "Shared with others" : "Sprístupnené ostatným", + "Shared with you" : "Vám sprístupnené", + "Shared by link" : "Sprístupnené prostredníctvom odkazu", + "Deleted shares" : "Vymazané zdieľania", + "Pending shares" : "Čakajúce prístupy" }, "nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);"); diff --git a/apps/files/l10n/sk.json b/apps/files/l10n/sk.json index aa14ff2caa0..c3d1fc71c05 100644 --- a/apps/files/l10n/sk.json +++ b/apps/files/l10n/sk.json @@ -209,12 +209,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Súbory, ktoré sa snažíte nahrať, presahujú maximálnu veľkosť pre nahratie súborov na tento server.", "No favorites yet" : "Zatiaľ žiadne obľúbené", "Files and folders you mark as favorite will show up here" : "Súbory a priečinky označené ako obľúbené budú zobrazené tu", - "Shares" : "Zdieľania", - "Shared with others" : "Sprístupnené ostatným", - "Shared with you" : "Vám sprístupnené", - "Shared by link" : "Sprístupnené prostredníctvom odkazu", - "Deleted shares" : "Vymazané zdieľania", - "Pending shares" : "Čakajúce prístupy", "Text file" : "Textový súbor", "New text file.txt" : "Nový text file.txt", "Storage invalid" : "Úložisko nie je platné", @@ -225,6 +219,12 @@ "%s used" : "%s použitých", "%s%%" : "%s%%", "%1$s of %2$s used" : "Využité: %1$s z %2$s", - "Deleted files" : "Zmazané súbory" + "Deleted files" : "Zmazané súbory", + "Shares" : "Zdieľania", + "Shared with others" : "Sprístupnené ostatným", + "Shared with you" : "Vám sprístupnené", + "Shared by link" : "Sprístupnené prostredníctvom odkazu", + "Deleted shares" : "Vymazané zdieľania", + "Pending shares" : "Čakajúce prístupy" },"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);" }
\ No newline at end of file diff --git a/apps/files/l10n/sl.js b/apps/files/l10n/sl.js index 14f80014d80..f9623df5269 100644 --- a/apps/files/l10n/sl.js +++ b/apps/files/l10n/sl.js @@ -242,12 +242,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Datoteke, ki jih želite poslati, presegajo največjo dovoljeno velikost na strežniku.", "No favorites yet" : "Ni še dodanih priljubljenih predmetov", "Files and folders you mark as favorite will show up here" : "Datoteke ali mape, ki so označene kot priljubljene, bodo zbrane na tem mestu.", - "Shares" : "Souporaba", - "Shared with others" : "V souporabi z drugimi", - "Shared with you" : "V skupni rabi z vami", - "Shared by link" : "V souporabi sk povezavo", - "Deleted shares" : "Izbrisana mesta souporabe", - "Pending shares" : "Predmeti za souporabo na čakanju", "Text file" : "Besedilna datoteka", "New text file.txt" : "nova_datoteka.txt", "Storage invalid" : "Mesto shrambe ni veljavno", @@ -259,6 +253,12 @@ OC.L10N.register( "%s%%" : "%s%%", "%1$s of %2$s used" : "Uporabljeno %1$s od %2$s", "Deleted files" : "Izbrisane datoteke", + "Shares" : "Souporaba", + "Shared with others" : "V souporabi z drugimi", + "Shared with you" : "V skupni rabi z vami", + "Shared by link" : "V souporabi sk povezavo", + "Deleted shares" : "Izbrisana mesta souporabe", + "Pending shares" : "Predmeti za souporabo na čakanju", "Open folder {name}" : "Odpri mapo {name}", "Search for an account" : "Poišči račun" }, diff --git a/apps/files/l10n/sl.json b/apps/files/l10n/sl.json index 040e680103c..cf9d62c6d00 100644 --- a/apps/files/l10n/sl.json +++ b/apps/files/l10n/sl.json @@ -240,12 +240,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Datoteke, ki jih želite poslati, presegajo največjo dovoljeno velikost na strežniku.", "No favorites yet" : "Ni še dodanih priljubljenih predmetov", "Files and folders you mark as favorite will show up here" : "Datoteke ali mape, ki so označene kot priljubljene, bodo zbrane na tem mestu.", - "Shares" : "Souporaba", - "Shared with others" : "V souporabi z drugimi", - "Shared with you" : "V skupni rabi z vami", - "Shared by link" : "V souporabi sk povezavo", - "Deleted shares" : "Izbrisana mesta souporabe", - "Pending shares" : "Predmeti za souporabo na čakanju", "Text file" : "Besedilna datoteka", "New text file.txt" : "nova_datoteka.txt", "Storage invalid" : "Mesto shrambe ni veljavno", @@ -257,6 +251,12 @@ "%s%%" : "%s%%", "%1$s of %2$s used" : "Uporabljeno %1$s od %2$s", "Deleted files" : "Izbrisane datoteke", + "Shares" : "Souporaba", + "Shared with others" : "V souporabi z drugimi", + "Shared with you" : "V skupni rabi z vami", + "Shared by link" : "V souporabi sk povezavo", + "Deleted shares" : "Izbrisana mesta souporabe", + "Pending shares" : "Predmeti za souporabo na čakanju", "Open folder {name}" : "Odpri mapo {name}", "Search for an account" : "Poišči račun" },"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);" diff --git a/apps/files/l10n/sr.js b/apps/files/l10n/sr.js index 0a42750fec6..30d7717e9a1 100644 --- a/apps/files/l10n/sr.js +++ b/apps/files/l10n/sr.js @@ -253,12 +253,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Фајлови које желите да отпремите превазилазе ограничење отпремања на овом серверу.", "No favorites yet" : "Још нема омиљених", "Files and folders you mark as favorite will show up here" : "Фајлови и фасцикле које обележите као омиљене појавиће се овде", - "Shares" : "Дељења", - "Shared with others" : "Дељени са осталима", - "Shared with you" : "Дељени са вама", - "Shared by link" : "Дељени путем везе", - "Deleted shares" : "Обрисана дељења", - "Pending shares" : "Дељења на чекању", "Text file" : "Tекстуални фајл", "New text file.txt" : "Нов текстуални фајл.txt", "Storage invalid" : "Неисправно складиште", @@ -270,6 +264,12 @@ OC.L10N.register( "%s%%" : "%s%%", "%1$s of %2$s used" : "Заузето %1$s од %2$s", "Deleted files" : "Обрисани фајлови", + "Shares" : "Дељења", + "Shared with others" : "Дељени са осталима", + "Shared with you" : "Дељени са вама", + "Shared by link" : "Дељени путем везе", + "Deleted shares" : "Обрисана дељења", + "Pending shares" : "Дељења на чекању", "Open folder {name}" : "Отвори фолдер {name}", "Search for an account" : "Претражите налог" }, diff --git a/apps/files/l10n/sr.json b/apps/files/l10n/sr.json index efd283c6683..e0d9f3a98cd 100644 --- a/apps/files/l10n/sr.json +++ b/apps/files/l10n/sr.json @@ -251,12 +251,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Фајлови које желите да отпремите превазилазе ограничење отпремања на овом серверу.", "No favorites yet" : "Још нема омиљених", "Files and folders you mark as favorite will show up here" : "Фајлови и фасцикле које обележите као омиљене појавиће се овде", - "Shares" : "Дељења", - "Shared with others" : "Дељени са осталима", - "Shared with you" : "Дељени са вама", - "Shared by link" : "Дељени путем везе", - "Deleted shares" : "Обрисана дељења", - "Pending shares" : "Дељења на чекању", "Text file" : "Tекстуални фајл", "New text file.txt" : "Нов текстуални фајл.txt", "Storage invalid" : "Неисправно складиште", @@ -268,6 +262,12 @@ "%s%%" : "%s%%", "%1$s of %2$s used" : "Заузето %1$s од %2$s", "Deleted files" : "Обрисани фајлови", + "Shares" : "Дељења", + "Shared with others" : "Дељени са осталима", + "Shared with you" : "Дељени са вама", + "Shared by link" : "Дељени путем везе", + "Deleted shares" : "Обрисана дељења", + "Pending shares" : "Дељења на чекању", "Open folder {name}" : "Отвори фолдер {name}", "Search for an account" : "Претражите налог" },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" diff --git a/apps/files/l10n/sv.js b/apps/files/l10n/sv.js index e5487787732..04c29d34cda 100644 --- a/apps/files/l10n/sv.js +++ b/apps/files/l10n/sv.js @@ -253,12 +253,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Filerna du försöker ladda upp överstiger den maximala storleken för filöverföringar på servern.", "No favorites yet" : "Inga favoriter ännu", "Files and folders you mark as favorite will show up here" : "Filer och mappar markerade som favoriter kommer att visas här", - "Shares" : "Delningar", - "Shared with others" : "Delas med andra", - "Shared with you" : "Delas med mig", - "Shared by link" : "Delad via länk", - "Deleted shares" : "Borttagna delningar", - "Pending shares" : "Väntande delningar", "Text file" : "Textfil", "New text file.txt" : "Ny textfil.txt", "Storage invalid" : "Lagring ogiltig", @@ -270,6 +264,12 @@ OC.L10N.register( "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s av %2$s använt", "Deleted files" : "Borttagna filer", + "Shares" : "Delningar", + "Shared with others" : "Delas med andra", + "Shared with you" : "Delas med mig", + "Shared by link" : "Delad via länk", + "Deleted shares" : "Borttagna delningar", + "Pending shares" : "Väntande delningar", "Open folder {name}" : "Öppna mappen {name}", "Search for an account" : "Sök efter ett konto" }, diff --git a/apps/files/l10n/sv.json b/apps/files/l10n/sv.json index be75f5061a3..73c2461a167 100644 --- a/apps/files/l10n/sv.json +++ b/apps/files/l10n/sv.json @@ -251,12 +251,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Filerna du försöker ladda upp överstiger den maximala storleken för filöverföringar på servern.", "No favorites yet" : "Inga favoriter ännu", "Files and folders you mark as favorite will show up here" : "Filer och mappar markerade som favoriter kommer att visas här", - "Shares" : "Delningar", - "Shared with others" : "Delas med andra", - "Shared with you" : "Delas med mig", - "Shared by link" : "Delad via länk", - "Deleted shares" : "Borttagna delningar", - "Pending shares" : "Väntande delningar", "Text file" : "Textfil", "New text file.txt" : "Ny textfil.txt", "Storage invalid" : "Lagring ogiltig", @@ -268,6 +262,12 @@ "%s%%" : "%s%%", "%1$s of %2$s used" : "%1$s av %2$s använt", "Deleted files" : "Borttagna filer", + "Shares" : "Delningar", + "Shared with others" : "Delas med andra", + "Shared with you" : "Delas med mig", + "Shared by link" : "Delad via länk", + "Deleted shares" : "Borttagna delningar", + "Pending shares" : "Väntande delningar", "Open folder {name}" : "Öppna mappen {name}", "Search for an account" : "Sök efter ett konto" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files/l10n/th.js b/apps/files/l10n/th.js index 8412fae269d..a608461e6c2 100644 --- a/apps/files/l10n/th.js +++ b/apps/files/l10n/th.js @@ -213,12 +213,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "ไฟล์ที่คุณพยายามที่จะอัปโหลดมีขนาดเกินกว่าขนาดสูงสุดที่อัปโหลดได้สำหรับเซิร์ฟเวอร์นี้", "No favorites yet" : "ยังไม่มีรายการโปรด", "Files and folders you mark as favorite will show up here" : "ไฟล์และโฟลเดอร์ที่คุณระบุเป็นรายการโปรดจะแสดงที่นี่", - "Shares" : "การแชร์", - "Shared with others" : "แชร์กับผู้อื่น", - "Shared with you" : "แชร์กับคุณ", - "Shared by link" : "แชร์โดยลิงก์", - "Deleted shares" : "การแชร์ที่ถูกลบ", - "Pending shares" : "การแชร์ที่กำลังดำเนินการ", "Text file" : "ไฟล์ข้อความ", "New text file.txt" : "ไฟล์ข้อความใหม่.txt", "Storage invalid" : "การจัดเก็บข้อมูลไม่ถูกต้อง", @@ -229,6 +223,12 @@ OC.L10N.register( "%s used" : "ใช้ไป %s", "%s%%" : "%s%%", "%1$s of %2$s used" : "ใช้ไป %1$s จาก %2$s", - "Deleted files" : "ไฟล์ที่ถูกลบ" + "Deleted files" : "ไฟล์ที่ถูกลบ", + "Shares" : "การแชร์", + "Shared with others" : "แชร์กับผู้อื่น", + "Shared with you" : "แชร์กับคุณ", + "Shared by link" : "แชร์โดยลิงก์", + "Deleted shares" : "การแชร์ที่ถูกลบ", + "Pending shares" : "การแชร์ที่กำลังดำเนินการ" }, "nplurals=1; plural=0;"); diff --git a/apps/files/l10n/th.json b/apps/files/l10n/th.json index a806c5ae5e0..989d23652f6 100644 --- a/apps/files/l10n/th.json +++ b/apps/files/l10n/th.json @@ -211,12 +211,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "ไฟล์ที่คุณพยายามที่จะอัปโหลดมีขนาดเกินกว่าขนาดสูงสุดที่อัปโหลดได้สำหรับเซิร์ฟเวอร์นี้", "No favorites yet" : "ยังไม่มีรายการโปรด", "Files and folders you mark as favorite will show up here" : "ไฟล์และโฟลเดอร์ที่คุณระบุเป็นรายการโปรดจะแสดงที่นี่", - "Shares" : "การแชร์", - "Shared with others" : "แชร์กับผู้อื่น", - "Shared with you" : "แชร์กับคุณ", - "Shared by link" : "แชร์โดยลิงก์", - "Deleted shares" : "การแชร์ที่ถูกลบ", - "Pending shares" : "การแชร์ที่กำลังดำเนินการ", "Text file" : "ไฟล์ข้อความ", "New text file.txt" : "ไฟล์ข้อความใหม่.txt", "Storage invalid" : "การจัดเก็บข้อมูลไม่ถูกต้อง", @@ -227,6 +221,12 @@ "%s used" : "ใช้ไป %s", "%s%%" : "%s%%", "%1$s of %2$s used" : "ใช้ไป %1$s จาก %2$s", - "Deleted files" : "ไฟล์ที่ถูกลบ" + "Deleted files" : "ไฟล์ที่ถูกลบ", + "Shares" : "การแชร์", + "Shared with others" : "แชร์กับผู้อื่น", + "Shared with you" : "แชร์กับคุณ", + "Shared by link" : "แชร์โดยลิงก์", + "Deleted shares" : "การแชร์ที่ถูกลบ", + "Pending shares" : "การแชร์ที่กำลังดำเนินการ" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files/l10n/tr.js b/apps/files/l10n/tr.js index c377139eb8f..611fa0ef5ed 100644 --- a/apps/files/l10n/tr.js +++ b/apps/files/l10n/tr.js @@ -171,11 +171,20 @@ OC.L10N.register( "Reload current directory" : "Geçerli klasörü yeniden yükle", "Go to the \"{dir}\" directory" : "\"{dir}\" klasörüne git", "Select the row for {displayName}" : "{displayName} satırını seç", + "Rename file" : "Dosyayı yeniden adlandır", "File name" : "Dosya adı", + "A long time ago" : "Uzun süre önce", "Download file {name}" : "{name} dosyasını indir", "\"{displayName}\" action executed successfully" : "\"{displayName}\" işlemi tamamlandı", "\"{displayName}\" action failed" : "\"{displayName}\" işlemi tamamlanamadı", + "\"{name}\" is not an allowed filetype." : "\"{name}\" dosya türüne izin verilmiyor.", + "{newName} already exists." : "{newName} zaten var.", "Name cannot be empty" : "Ad boş olamaz", + "Another entry with the same name already exists" : "Aynı adlı bir kayıt zaten var", + "Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" adı \"{newName}\" olarak değiştirildi", + "Could not rename \"{oldName}\", it does not exist any more" : "\"{oldName}\" adı artık olmadığından değiştirilemedi. ", + "The name \"{newName}\"\" is already used in the folder \"{dir}\". Please choose a different name." : "\"{newName}\"\" adı \"{dir}\" klasöründe zaten kullanılmış. Lütfen başka bir ad seçin.", + "Could not rename \"{oldName}\"" : "\"{oldName}\" adı değiştirilemedi", "Total rows summary" : "Toplam satır özeti", "Select all" : "Tümünü seç", "Unselect all" : "Tümünü bırak", @@ -210,6 +219,7 @@ OC.L10N.register( "Files settings" : "Dosyalar ayarları", "File cannot be accessed" : "Dosyaya erişilemedi", "You might not have have permissions to view it, ask the sender to share it" : "Dosyayı görüntüleme izniniz olmayabilir. Gönderenden paylaşmasını isteyin", + "Sort favorites first" : "Sık kullanılanlar üstte sıralansın", "Show hidden files" : "Gizli dosyaları görüntüle", "Crop image previews" : "Görsel ön izlemeleri kırpılsın", "Additional settings" : "Ek ayarlar", @@ -234,6 +244,7 @@ OC.L10N.register( "Templates" : "Kalıplar", "Create new templates folder" : "Yeni kalıp klasörü oluştur", "Unable to initialize the templates directory" : "Kalıp klasörü hazırlanamadı", + "List of favorites files and folders." : "Sık kullanılan dosya ve klasör listesi.", "Toggle %1$s sublist" : "%1$s alt listesini aç/kapat", "Toggle grid view" : "Tablo görünümünü değiştir", "Upload some content or sync with your devices!" : "Bir şeyler yükleyin ya da aygıtlarınızla eşitleyin!", @@ -242,12 +253,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Yüklemeye çalıştığınız dosyalar bu sunucuya yüklenmesine izin verilen en büyük dosya boyutunu aşıyor.", "No favorites yet" : "Henüz sık kullanılan bir öge yok", "Files and folders you mark as favorite will show up here" : "Sık kullanılanlara eklediğiniz dosya ve klasörler burada görüntülenir", - "Shares" : "Paylaşımlar", - "Shared with others" : "Başkalarıyla paylaşılan", - "Shared with you" : "Sizinle paylaşılan", - "Shared by link" : "Bağlantı ile paylaşılmış", - "Deleted shares" : "Silinmiş paylaşımlar", - "Pending shares" : "Bekleyen paylaşımlar", "Text file" : "Metin dosyası", "New text file.txt" : "Yeni metin dosyası.txt", "Storage invalid" : "Depolama geçersiz", @@ -259,6 +264,12 @@ OC.L10N.register( "%s%%" : "%%%s", "%1$s of %2$s used" : "%1$s / %2$s kullanıldı", "Deleted files" : "Silinmiş dosyalar", + "Shares" : "Paylaşımlar", + "Shared with others" : "Başkalarıyla paylaşılan", + "Shared with you" : "Sizinle paylaşılan", + "Shared by link" : "Bağlantı ile paylaşılmış", + "Deleted shares" : "Silinmiş paylaşımlar", + "Pending shares" : "Bekleyen paylaşımlar", "Open folder {name}" : "{name} klasörünü aç", "Search for an account" : "Hesap ara" }, diff --git a/apps/files/l10n/tr.json b/apps/files/l10n/tr.json index 0e7f7af07a8..71507b44608 100644 --- a/apps/files/l10n/tr.json +++ b/apps/files/l10n/tr.json @@ -169,11 +169,20 @@ "Reload current directory" : "Geçerli klasörü yeniden yükle", "Go to the \"{dir}\" directory" : "\"{dir}\" klasörüne git", "Select the row for {displayName}" : "{displayName} satırını seç", + "Rename file" : "Dosyayı yeniden adlandır", "File name" : "Dosya adı", + "A long time ago" : "Uzun süre önce", "Download file {name}" : "{name} dosyasını indir", "\"{displayName}\" action executed successfully" : "\"{displayName}\" işlemi tamamlandı", "\"{displayName}\" action failed" : "\"{displayName}\" işlemi tamamlanamadı", + "\"{name}\" is not an allowed filetype." : "\"{name}\" dosya türüne izin verilmiyor.", + "{newName} already exists." : "{newName} zaten var.", "Name cannot be empty" : "Ad boş olamaz", + "Another entry with the same name already exists" : "Aynı adlı bir kayıt zaten var", + "Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" adı \"{newName}\" olarak değiştirildi", + "Could not rename \"{oldName}\", it does not exist any more" : "\"{oldName}\" adı artık olmadığından değiştirilemedi. ", + "The name \"{newName}\"\" is already used in the folder \"{dir}\". Please choose a different name." : "\"{newName}\"\" adı \"{dir}\" klasöründe zaten kullanılmış. Lütfen başka bir ad seçin.", + "Could not rename \"{oldName}\"" : "\"{oldName}\" adı değiştirilemedi", "Total rows summary" : "Toplam satır özeti", "Select all" : "Tümünü seç", "Unselect all" : "Tümünü bırak", @@ -208,6 +217,7 @@ "Files settings" : "Dosyalar ayarları", "File cannot be accessed" : "Dosyaya erişilemedi", "You might not have have permissions to view it, ask the sender to share it" : "Dosyayı görüntüleme izniniz olmayabilir. Gönderenden paylaşmasını isteyin", + "Sort favorites first" : "Sık kullanılanlar üstte sıralansın", "Show hidden files" : "Gizli dosyaları görüntüle", "Crop image previews" : "Görsel ön izlemeleri kırpılsın", "Additional settings" : "Ek ayarlar", @@ -232,6 +242,7 @@ "Templates" : "Kalıplar", "Create new templates folder" : "Yeni kalıp klasörü oluştur", "Unable to initialize the templates directory" : "Kalıp klasörü hazırlanamadı", + "List of favorites files and folders." : "Sık kullanılan dosya ve klasör listesi.", "Toggle %1$s sublist" : "%1$s alt listesini aç/kapat", "Toggle grid view" : "Tablo görünümünü değiştir", "Upload some content or sync with your devices!" : "Bir şeyler yükleyin ya da aygıtlarınızla eşitleyin!", @@ -240,12 +251,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Yüklemeye çalıştığınız dosyalar bu sunucuya yüklenmesine izin verilen en büyük dosya boyutunu aşıyor.", "No favorites yet" : "Henüz sık kullanılan bir öge yok", "Files and folders you mark as favorite will show up here" : "Sık kullanılanlara eklediğiniz dosya ve klasörler burada görüntülenir", - "Shares" : "Paylaşımlar", - "Shared with others" : "Başkalarıyla paylaşılan", - "Shared with you" : "Sizinle paylaşılan", - "Shared by link" : "Bağlantı ile paylaşılmış", - "Deleted shares" : "Silinmiş paylaşımlar", - "Pending shares" : "Bekleyen paylaşımlar", "Text file" : "Metin dosyası", "New text file.txt" : "Yeni metin dosyası.txt", "Storage invalid" : "Depolama geçersiz", @@ -257,6 +262,12 @@ "%s%%" : "%%%s", "%1$s of %2$s used" : "%1$s / %2$s kullanıldı", "Deleted files" : "Silinmiş dosyalar", + "Shares" : "Paylaşımlar", + "Shared with others" : "Başkalarıyla paylaşılan", + "Shared with you" : "Sizinle paylaşılan", + "Shared by link" : "Bağlantı ile paylaşılmış", + "Deleted shares" : "Silinmiş paylaşımlar", + "Pending shares" : "Bekleyen paylaşımlar", "Open folder {name}" : "{name} klasörünü aç", "Search for an account" : "Hesap ara" },"pluralForm" :"nplurals=2; plural=(n > 1);" diff --git a/apps/files/l10n/uk.js b/apps/files/l10n/uk.js index 28e9ced87ad..29ee6a85f78 100644 --- a/apps/files/l10n/uk.js +++ b/apps/files/l10n/uk.js @@ -253,12 +253,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Файли, які ви намагаєтеся завантажити, перевищують максимально дозволений розмір завантаження файлів на сервер.", "No favorites yet" : "Поки немає вподобаного", "Files and folders you mark as favorite will show up here" : "Файли та каталоги, які ви вподобали, з’являться тут", - "Shares" : "Спільне", - "Shared with others" : "Ви поділилися", - "Shared with you" : "Надано доступ вам", - "Shared by link" : "Доступ за посиланням", - "Deleted shares" : "Більше недоступні", - "Pending shares" : "Запити на доступ", "Text file" : "Текстовий файл", "New text file.txt" : "Новий текстовий файл.txt", "Storage invalid" : "Некоректне сховище", @@ -270,6 +264,12 @@ OC.L10N.register( "%s%%" : "%s%%", "%1$s of %2$s used" : "Використано %1$s із %2$s", "Deleted files" : "Кошик", + "Shares" : "Спільне", + "Shared with others" : "Ви поділилися", + "Shared with you" : "Надано доступ вам", + "Shared by link" : "Доступ за посиланням", + "Deleted shares" : "Більше недоступні", + "Pending shares" : "Запити на доступ", "Open folder {name}" : "Відкрити каталог {name}", "Search for an account" : "Пошук облікового запису" }, diff --git a/apps/files/l10n/uk.json b/apps/files/l10n/uk.json index 8b09484ec14..d9644f52eae 100644 --- a/apps/files/l10n/uk.json +++ b/apps/files/l10n/uk.json @@ -251,12 +251,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Файли, які ви намагаєтеся завантажити, перевищують максимально дозволений розмір завантаження файлів на сервер.", "No favorites yet" : "Поки немає вподобаного", "Files and folders you mark as favorite will show up here" : "Файли та каталоги, які ви вподобали, з’являться тут", - "Shares" : "Спільне", - "Shared with others" : "Ви поділилися", - "Shared with you" : "Надано доступ вам", - "Shared by link" : "Доступ за посиланням", - "Deleted shares" : "Більше недоступні", - "Pending shares" : "Запити на доступ", "Text file" : "Текстовий файл", "New text file.txt" : "Новий текстовий файл.txt", "Storage invalid" : "Некоректне сховище", @@ -268,6 +262,12 @@ "%s%%" : "%s%%", "%1$s of %2$s used" : "Використано %1$s із %2$s", "Deleted files" : "Кошик", + "Shares" : "Спільне", + "Shared with others" : "Ви поділилися", + "Shared with you" : "Надано доступ вам", + "Shared by link" : "Доступ за посиланням", + "Deleted shares" : "Більше недоступні", + "Pending shares" : "Запити на доступ", "Open folder {name}" : "Відкрити каталог {name}", "Search for an account" : "Пошук облікового запису" },"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);" diff --git a/apps/files/l10n/vi.js b/apps/files/l10n/vi.js index fcb4e7e76b7..21549180de3 100644 --- a/apps/files/l10n/vi.js +++ b/apps/files/l10n/vi.js @@ -193,12 +193,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Các tập tin bạn đang tải lên vượt quá kích thước tối đa cho phép trên máy chủ .", "No favorites yet" : "Chưa có yêu thích nào", "Files and folders you mark as favorite will show up here" : "Các tệp và thư mục mà bạn đánh dấu là yêu thích sẽ hiển thị ở đây", - "Shares" : "Chia sẻ", - "Shared with others" : "Chia sẻ với người khác", - "Shared with you" : "Đã chia sẻ với bạn", - "Shared by link" : "Được chia sẻ bởi liên kết", - "Deleted shares" : "Chia sẻ đã xóa", - "Pending shares" : "Chia sẻ đang chờ xử lý", "Text file" : "Tập tin văn bản", "New text file.txt" : "Tệp văn bản mới.txt", "Storage invalid" : "Lưu trữ không hợp lệ", @@ -208,6 +202,12 @@ OC.L10N.register( "Cancel" : "Hủy bỏ", "%s used" : "%s đã sử dụng", "%1$s of %2$s used" : "%1$s trên %2$s đã sử dụng", - "Deleted files" : "Thùng rác" + "Deleted files" : "Thùng rác", + "Shares" : "Chia sẻ", + "Shared with others" : "Chia sẻ với người khác", + "Shared with you" : "Đã chia sẻ với bạn", + "Shared by link" : "Được chia sẻ bởi liên kết", + "Deleted shares" : "Chia sẻ đã xóa", + "Pending shares" : "Chia sẻ đang chờ xử lý" }, "nplurals=1; plural=0;"); diff --git a/apps/files/l10n/vi.json b/apps/files/l10n/vi.json index f8885920e22..a580123c84f 100644 --- a/apps/files/l10n/vi.json +++ b/apps/files/l10n/vi.json @@ -191,12 +191,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Các tập tin bạn đang tải lên vượt quá kích thước tối đa cho phép trên máy chủ .", "No favorites yet" : "Chưa có yêu thích nào", "Files and folders you mark as favorite will show up here" : "Các tệp và thư mục mà bạn đánh dấu là yêu thích sẽ hiển thị ở đây", - "Shares" : "Chia sẻ", - "Shared with others" : "Chia sẻ với người khác", - "Shared with you" : "Đã chia sẻ với bạn", - "Shared by link" : "Được chia sẻ bởi liên kết", - "Deleted shares" : "Chia sẻ đã xóa", - "Pending shares" : "Chia sẻ đang chờ xử lý", "Text file" : "Tập tin văn bản", "New text file.txt" : "Tệp văn bản mới.txt", "Storage invalid" : "Lưu trữ không hợp lệ", @@ -206,6 +200,12 @@ "Cancel" : "Hủy bỏ", "%s used" : "%s đã sử dụng", "%1$s of %2$s used" : "%1$s trên %2$s đã sử dụng", - "Deleted files" : "Thùng rác" + "Deleted files" : "Thùng rác", + "Shares" : "Chia sẻ", + "Shared with others" : "Chia sẻ với người khác", + "Shared with you" : "Đã chia sẻ với bạn", + "Shared by link" : "Được chia sẻ bởi liên kết", + "Deleted shares" : "Chia sẻ đã xóa", + "Pending shares" : "Chia sẻ đang chờ xử lý" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files/l10n/zh_CN.js b/apps/files/l10n/zh_CN.js index 1f19ae5fd3e..f672d6513bf 100644 --- a/apps/files/l10n/zh_CN.js +++ b/apps/files/l10n/zh_CN.js @@ -253,12 +253,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "您尝试上传的文件大小超过了服务器的限制。", "No favorites yet" : "暂无收藏", "Files and folders you mark as favorite will show up here" : "收藏的文件和文件夹会在这里显示", - "Shares" : "共享", - "Shared with others" : "已与他人共享", - "Shared with you" : "与您共享的", - "Shared by link" : "已通过链接共享", - "Deleted shares" : "已删除的共享", - "Pending shares" : "待定共享", "Text file" : "文本文件", "New text file.txt" : "新建文本文档.txt", "Storage invalid" : "存储空间无效", @@ -270,6 +264,12 @@ OC.L10N.register( "%s%%" : "%s%%", "%1$s of %2$s used" : "已使用 %2$s 中的 %1$s", "Deleted files" : "已删除的文件", + "Shares" : "共享", + "Shared with others" : "已与他人共享", + "Shared with you" : "与您共享的", + "Shared by link" : "已通过链接共享", + "Deleted shares" : "已删除的共享", + "Pending shares" : "待定共享", "Open folder {name}" : "打开文件夹 {name}", "Search for an account" : "搜索一个账户" }, diff --git a/apps/files/l10n/zh_CN.json b/apps/files/l10n/zh_CN.json index e033e296485..082e9d1bcad 100644 --- a/apps/files/l10n/zh_CN.json +++ b/apps/files/l10n/zh_CN.json @@ -251,12 +251,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "您尝试上传的文件大小超过了服务器的限制。", "No favorites yet" : "暂无收藏", "Files and folders you mark as favorite will show up here" : "收藏的文件和文件夹会在这里显示", - "Shares" : "共享", - "Shared with others" : "已与他人共享", - "Shared with you" : "与您共享的", - "Shared by link" : "已通过链接共享", - "Deleted shares" : "已删除的共享", - "Pending shares" : "待定共享", "Text file" : "文本文件", "New text file.txt" : "新建文本文档.txt", "Storage invalid" : "存储空间无效", @@ -268,6 +262,12 @@ "%s%%" : "%s%%", "%1$s of %2$s used" : "已使用 %2$s 中的 %1$s", "Deleted files" : "已删除的文件", + "Shares" : "共享", + "Shared with others" : "已与他人共享", + "Shared with you" : "与您共享的", + "Shared by link" : "已通过链接共享", + "Deleted shares" : "已删除的共享", + "Pending shares" : "待定共享", "Open folder {name}" : "打开文件夹 {name}", "Search for an account" : "搜索一个账户" },"pluralForm" :"nplurals=1; plural=0;" diff --git a/apps/files/l10n/zh_HK.js b/apps/files/l10n/zh_HK.js index 8402dfece11..9df4de5a773 100644 --- a/apps/files/l10n/zh_HK.js +++ b/apps/files/l10n/zh_HK.js @@ -253,12 +253,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "您試圖上傳的檔案大小超過伺服器的限制", "No favorites yet" : "尚無最愛", "Files and folders you mark as favorite will show up here" : "您標記為最愛的檔案與資料夾將會顯示在這裡", - "Shares" : "分享", - "Shared with others" : "與其他人分享", - "Shared with you" : "與您分享", - "Shared by link" : "由連結分享", - "Deleted shares" : "已刪除的分享", - "Pending shares" : "等待分享", "Text file" : "文字檔", "New text file.txt" : "新文字檔.txt", "Storage invalid" : "無效的儲存空間", @@ -270,6 +264,12 @@ OC.L10N.register( "%s%%" : "%s%%", "%1$s of %2$s used" : "在 %2$s 中使用了 %1$s", "Deleted files" : "回收桶", + "Shares" : "分享", + "Shared with others" : "與其他人分享", + "Shared with you" : "與您分享", + "Shared by link" : "由連結分享", + "Deleted shares" : "已刪除的分享", + "Pending shares" : "等待分享", "Open folder {name}" : "打開資料夾 {name}", "Search for an account" : "搜尋賬號" }, diff --git a/apps/files/l10n/zh_HK.json b/apps/files/l10n/zh_HK.json index aef78381392..9ffeda6b8cc 100644 --- a/apps/files/l10n/zh_HK.json +++ b/apps/files/l10n/zh_HK.json @@ -251,12 +251,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "您試圖上傳的檔案大小超過伺服器的限制", "No favorites yet" : "尚無最愛", "Files and folders you mark as favorite will show up here" : "您標記為最愛的檔案與資料夾將會顯示在這裡", - "Shares" : "分享", - "Shared with others" : "與其他人分享", - "Shared with you" : "與您分享", - "Shared by link" : "由連結分享", - "Deleted shares" : "已刪除的分享", - "Pending shares" : "等待分享", "Text file" : "文字檔", "New text file.txt" : "新文字檔.txt", "Storage invalid" : "無效的儲存空間", @@ -268,6 +262,12 @@ "%s%%" : "%s%%", "%1$s of %2$s used" : "在 %2$s 中使用了 %1$s", "Deleted files" : "回收桶", + "Shares" : "分享", + "Shared with others" : "與其他人分享", + "Shared with you" : "與您分享", + "Shared by link" : "由連結分享", + "Deleted shares" : "已刪除的分享", + "Pending shares" : "等待分享", "Open folder {name}" : "打開資料夾 {name}", "Search for an account" : "搜尋賬號" },"pluralForm" :"nplurals=1; plural=0;" diff --git a/apps/files/l10n/zh_TW.js b/apps/files/l10n/zh_TW.js index 01eed05ebe0..c0a633fa4ee 100644 --- a/apps/files/l10n/zh_TW.js +++ b/apps/files/l10n/zh_TW.js @@ -253,12 +253,6 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "您試圖上傳的檔案大小超過伺服器的限制", "No favorites yet" : "尚無最愛", "Files and folders you mark as favorite will show up here" : "您標記為最愛的檔案與資料夾將會顯示在這裡", - "Shares" : "分享", - "Shared with others" : "與其他人分享", - "Shared with you" : "與您分享", - "Shared by link" : "由連結分享", - "Deleted shares" : "已刪除的分享", - "Pending shares" : "等待分享", "Text file" : "文字檔案", "New text file.txt" : "新文字檔案.txt", "Storage invalid" : "無效的儲存空間", @@ -270,6 +264,12 @@ OC.L10N.register( "%s%%" : "%s%%", "%1$s of %2$s used" : "在 %2$s 中使用了 %1$s ", "Deleted files" : "已刪除的檔案", + "Shares" : "分享", + "Shared with others" : "與其他人分享", + "Shared with you" : "與您分享", + "Shared by link" : "由連結分享", + "Deleted shares" : "已刪除的分享", + "Pending shares" : "等待分享", "Open folder {name}" : "開啟資料夾 {name}", "Search for an account" : "搜尋帳號" }, diff --git a/apps/files/l10n/zh_TW.json b/apps/files/l10n/zh_TW.json index 5e48fc4cdfe..04ce44d9c4b 100644 --- a/apps/files/l10n/zh_TW.json +++ b/apps/files/l10n/zh_TW.json @@ -251,12 +251,6 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "您試圖上傳的檔案大小超過伺服器的限制", "No favorites yet" : "尚無最愛", "Files and folders you mark as favorite will show up here" : "您標記為最愛的檔案與資料夾將會顯示在這裡", - "Shares" : "分享", - "Shared with others" : "與其他人分享", - "Shared with you" : "與您分享", - "Shared by link" : "由連結分享", - "Deleted shares" : "已刪除的分享", - "Pending shares" : "等待分享", "Text file" : "文字檔案", "New text file.txt" : "新文字檔案.txt", "Storage invalid" : "無效的儲存空間", @@ -268,6 +262,12 @@ "%s%%" : "%s%%", "%1$s of %2$s used" : "在 %2$s 中使用了 %1$s ", "Deleted files" : "已刪除的檔案", + "Shares" : "分享", + "Shared with others" : "與其他人分享", + "Shared with you" : "與您分享", + "Shared by link" : "由連結分享", + "Deleted shares" : "已刪除的分享", + "Pending shares" : "等待分享", "Open folder {name}" : "開啟資料夾 {name}", "Search for an account" : "搜尋帳號" },"pluralForm" :"nplurals=1; plural=0;" diff --git a/apps/files_external/l10n/gl.js b/apps/files_external/l10n/gl.js index e54e6ecac09..1e4ad671dd2 100644 --- a/apps/files_external/l10n/gl.js +++ b/apps/files_external/l10n/gl.js @@ -35,7 +35,7 @@ OC.L10N.register( "There was an error with message: " : "produciuse un erro coa mensaxe:", "External mount error" : "Produciuse un erro de montaxe externo", "external-storage" : "almacenamento externo", - "Couldn't fetch list of Windows network drive mount points: Empty response from server" : "Non é posíbel obter a lista de unidades en rede e os seus puntos de montaxe de Windows: resposta baleira dende o servidor", + "Couldn't fetch list of Windows network drive mount points: Empty response from server" : "Non é posíbel recuperar a lista de unidades en rede e os seus puntos de montaxe de Windows: resposta baleira dende o servidor", "Please enter the credentials for the {mount} mount" : "Introduza as credenciais para o punto de montaxe {mount}", "Username" : "Nome de usuario", "Password" : "Contrasinal", diff --git a/apps/files_external/l10n/gl.json b/apps/files_external/l10n/gl.json index ce448eda28e..8622383fb56 100644 --- a/apps/files_external/l10n/gl.json +++ b/apps/files_external/l10n/gl.json @@ -33,7 +33,7 @@ "There was an error with message: " : "produciuse un erro coa mensaxe:", "External mount error" : "Produciuse un erro de montaxe externo", "external-storage" : "almacenamento externo", - "Couldn't fetch list of Windows network drive mount points: Empty response from server" : "Non é posíbel obter a lista de unidades en rede e os seus puntos de montaxe de Windows: resposta baleira dende o servidor", + "Couldn't fetch list of Windows network drive mount points: Empty response from server" : "Non é posíbel recuperar a lista de unidades en rede e os seus puntos de montaxe de Windows: resposta baleira dende o servidor", "Please enter the credentials for the {mount} mount" : "Introduza as credenciais para o punto de montaxe {mount}", "Username" : "Nome de usuario", "Password" : "Contrasinal", diff --git a/apps/files_external/lib/Service/UserStoragesService.php b/apps/files_external/lib/Service/UserStoragesService.php index 9a1e4e648b3..6cf34000ab0 100644 --- a/apps/files_external/lib/Service/UserStoragesService.php +++ b/apps/files_external/lib/Service/UserStoragesService.php @@ -143,4 +143,10 @@ class UserStoragesService extends StoragesService { protected function isApplicable(StorageConfig $config) { return ($config->getApplicableUsers() === [$this->getUser()->getUID()]) && $config->getType() === StorageConfig::MOUNT_TYPE_PERSONAl; } + + public function removeStorage($id) { + // verify ownership through $this->isApplicable() and otherwise throws an exception + $this->getStorage($id); + parent::removeStorage($id); + } } diff --git a/apps/files_sharing/appinfo/info.xml b/apps/files_sharing/appinfo/info.xml index 3b375bbf87a..b38080bf130 100644 --- a/apps/files_sharing/appinfo/info.xml +++ b/apps/files_sharing/appinfo/info.xml @@ -42,6 +42,7 @@ Turning the feature off removes shared files and folders on the server for all s <commands> <command>OCA\Files_Sharing\Command\CleanupRemoteStorages</command> <command>OCA\Files_Sharing\Command\ExiprationNotification</command> + <command>OCA\Files_Sharing\Command\DeleteOrphanShares</command> </commands> <settings> diff --git a/apps/files_sharing/composer/composer/autoload_classmap.php b/apps/files_sharing/composer/composer/autoload_classmap.php index 50cbfe40d8a..a82d721b1bd 100644 --- a/apps/files_sharing/composer/composer/autoload_classmap.php +++ b/apps/files_sharing/composer/composer/autoload_classmap.php @@ -24,6 +24,7 @@ return array( 'OCA\\Files_Sharing\\Capabilities' => $baseDir . '/../lib/Capabilities.php', 'OCA\\Files_Sharing\\Collaboration\\ShareRecipientSorter' => $baseDir . '/../lib/Collaboration/ShareRecipientSorter.php', 'OCA\\Files_Sharing\\Command\\CleanupRemoteStorages' => $baseDir . '/../lib/Command/CleanupRemoteStorages.php', + 'OCA\\Files_Sharing\\Command\\DeleteOrphanShares' => $baseDir . '/../lib/Command/DeleteOrphanShares.php', 'OCA\\Files_Sharing\\Command\\ExiprationNotification' => $baseDir . '/../lib/Command/ExiprationNotification.php', 'OCA\\Files_Sharing\\Controller\\AcceptController' => $baseDir . '/../lib/Controller/AcceptController.php', 'OCA\\Files_Sharing\\Controller\\DeletedShareAPIController' => $baseDir . '/../lib/Controller/DeletedShareAPIController.php', @@ -74,6 +75,7 @@ return array( 'OCA\\Files_Sharing\\MountProvider' => $baseDir . '/../lib/MountProvider.php', 'OCA\\Files_Sharing\\Notification\\Listener' => $baseDir . '/../lib/Notification/Listener.php', 'OCA\\Files_Sharing\\Notification\\Notifier' => $baseDir . '/../lib/Notification/Notifier.php', + 'OCA\\Files_Sharing\\OrphanHelper' => $baseDir . '/../lib/OrphanHelper.php', 'OCA\\Files_Sharing\\Scanner' => $baseDir . '/../lib/Scanner.php', 'OCA\\Files_Sharing\\Settings\\Personal' => $baseDir . '/../lib/Settings/Personal.php', 'OCA\\Files_Sharing\\ShareBackend\\File' => $baseDir . '/../lib/ShareBackend/File.php', diff --git a/apps/files_sharing/composer/composer/autoload_static.php b/apps/files_sharing/composer/composer/autoload_static.php index 4ba0fd52421..63d0bae8995 100644 --- a/apps/files_sharing/composer/composer/autoload_static.php +++ b/apps/files_sharing/composer/composer/autoload_static.php @@ -39,6 +39,7 @@ class ComposerStaticInitFiles_Sharing 'OCA\\Files_Sharing\\Capabilities' => __DIR__ . '/..' . '/../lib/Capabilities.php', 'OCA\\Files_Sharing\\Collaboration\\ShareRecipientSorter' => __DIR__ . '/..' . '/../lib/Collaboration/ShareRecipientSorter.php', 'OCA\\Files_Sharing\\Command\\CleanupRemoteStorages' => __DIR__ . '/..' . '/../lib/Command/CleanupRemoteStorages.php', + 'OCA\\Files_Sharing\\Command\\DeleteOrphanShares' => __DIR__ . '/..' . '/../lib/Command/DeleteOrphanShares.php', 'OCA\\Files_Sharing\\Command\\ExiprationNotification' => __DIR__ . '/..' . '/../lib/Command/ExiprationNotification.php', 'OCA\\Files_Sharing\\Controller\\AcceptController' => __DIR__ . '/..' . '/../lib/Controller/AcceptController.php', 'OCA\\Files_Sharing\\Controller\\DeletedShareAPIController' => __DIR__ . '/..' . '/../lib/Controller/DeletedShareAPIController.php', @@ -89,6 +90,7 @@ class ComposerStaticInitFiles_Sharing 'OCA\\Files_Sharing\\MountProvider' => __DIR__ . '/..' . '/../lib/MountProvider.php', 'OCA\\Files_Sharing\\Notification\\Listener' => __DIR__ . '/..' . '/../lib/Notification/Listener.php', 'OCA\\Files_Sharing\\Notification\\Notifier' => __DIR__ . '/..' . '/../lib/Notification/Notifier.php', + 'OCA\\Files_Sharing\\OrphanHelper' => __DIR__ . '/..' . '/../lib/OrphanHelper.php', 'OCA\\Files_Sharing\\Scanner' => __DIR__ . '/..' . '/../lib/Scanner.php', 'OCA\\Files_Sharing\\Settings\\Personal' => __DIR__ . '/..' . '/../lib/Settings/Personal.php', 'OCA\\Files_Sharing\\ShareBackend\\File' => __DIR__ . '/..' . '/../lib/ShareBackend/File.php', diff --git a/apps/files_sharing/l10n/ar.js b/apps/files_sharing/l10n/ar.js index d02c4193cb9..81434e4d959 100644 --- a/apps/files_sharing/l10n/ar.js +++ b/apps/files_sharing/l10n/ar.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "تم مشاركته معك", - "Nothing shared with you yet" : "لم تتم مشاركته معك حتى الآن", - "Files and folders others share with you will show up here" : "ستظهر هنا الملفات والمجلدات التي يشاركها الآخرون معك", - "Shared with others" : "مشترك مع الآخرين", - "Nothing shared yet" : "لا توجد مشاركة حتى الآن", - "Files and folders you share will show up here" : "سوف تظهر هنا كل من الملفات و المجلدات التي قمت بمشاركتها", - "Shared by link" : "مشاركة عن طريق رابط", - "No shared links" : "لا توجد روابط مشتركة", - "Files and folders you share by link will show up here" : "سوف تظهر هنا كل من الملفات و المجلدات التي قمت بمشاركتها", - "Deleted shares" : "مشاركة محذوفة", - "No deleted shares" : "لا يوجد مشاركة محذوفة", - "Shares you deleted will show up here" : "سوف تظهر هنا كل المشاركات التي قمتم بحذفها", - "Pending shares" : "مشاركات معلقة", - "No pending shares" : "لا يوجد مشاركة معلقة", - "Shares you have received but not confirmed will show up here" : "ستظهر المشاركات التي تلقيتها ولكن لم يتم تأكيدها هنا", - "Shares" : "التي قمتَ بمشاركتها", - "No shares" : "لا يوجد مشاركات", - "Shares will show up here" : "سوف تظهر هنا كل من الملفات و المجلدات التي قمتم بمشاركتها", - "Restore" : "استعادة ", - "Restore share" : "استعادة مشاركة", - "Something happened. Unable to restore the share." : "حدث امر ما، لا يمكن استعادة المشاركة", - "Accept share" : "قبول مشاركة", - "Something happened. Unable to accept the share." : "حدث امر ما، لا يمكن قبول المشاركة", - "Reject share" : "رفض مشاركة", - "Something happened. Unable to reject the share." : "حدث امر ما، لا يمكن رفض المشاركة", "Waiting…" : "قيد الانتظار…", "error" : "خطأ", "finished" : "انتهت", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "لم يتم العثور على خادوم متوافق في {remote}", "Invalid server URL" : "عنوان الرابط للخادوم غير صالح", "Failed to add the public link to your Nextcloud" : "فشل في إضافة الرابط العام إلى الخادوم السحابي الخاص بك", - "No expiration date set" : "لم يتم تعيين تاريخ نهاية صلاحية المشاركة", - "Shared by" : "تم مشاركتها بواسطة", "File shares" : "مشاركة الملفات", "Downloaded via public link" : "تم تنزيله عبر رابط عام", "Downloaded by {email}" : "تم التنزيل بواسطة {email}", @@ -237,6 +210,10 @@ OC.L10N.register( "Expires {relativetime}" : "تنتهي في {relativetime}", "this share just expired." : "هذه المشاركة انتهت للتو.", "Shared with you by {owner}" : "شورك معك من قبل {owner}", + "_Accept share_::_Accept shares_" : ["قبول المشاركات","قبول المشاركة","قبول المشاركات","قبول المشاركات","قبول المشاركات","قبول المشاركات"], + "Open in files" : "فتح في الملفات", + "_Reject share_::_Reject shares_" : ["رفض المشاركات","رفض المشاركة","رفض المشاركات","رفض المشاركات","رفض المشاركات","رفض المشاركات"], + "_Restore share_::_Restore shares_" : ["استعادة المشاركات","استعادة المشاركة","استعادة المشاركات","استعادة المشاركات","استعادة المشاركات","استعادة المشاركات"], "Link to a file" : "ارتباط إلى ملف", "Error creating the share: {errorMessage}" : "خطأ في إنشاء المشاركة: {errorMessage}", "Error creating the share" : "خطأ في إنشاء المشاركة", @@ -247,6 +224,7 @@ OC.L10N.register( "Share {propertyName} saved" : "اسم المشاركة {propertyName} تمّ حفظه", "Shared" : "مشترك", "Share" : "شارك", + "Shared by" : "تم مشاركتها بواسطة", "Shared with" : "تمت مشاركته مع", "Password created successfully" : "تمّ إنشاء الإحالة بنجاح", "Error generating password from password policy" : "خطأ في توليد كلمة سر بسبب مخالفة قواعد إنشاء كلمات السر", @@ -254,6 +232,18 @@ OC.L10N.register( "Shared with you and {circle} by {owner}" : "تمت مشاركته معك ومع {circle} بواسطة {owner}", "Shared with you and the conversation {conversation} by {owner}" : "تمت مشاركته معك ومع المحادثة {conversation} بواسطة {owner}", "Shared with you in a conversation by {owner}" : "تمت مشاركته معك في محادثة بواسطة {owner}", + "Shares" : "التي قمتَ بمشاركتها", + "Overview of shared files." : "استعراض الملفات التي تمت مشاركتها.", + "Shared with you" : "تم مشاركته معك", + "List of files that are shared with you." : "قائمة الملفات التي تمت مشاركتها معك.", + "Shared with others" : "مشترك مع الآخرين", + "List of files that you shared with others." : "قائمة الملفات التي شاركتها مع الآخرين.", + "Shared by link" : "مشاركة عن طريق رابط", + "List of files that are shared by link." : "قائمة الملفات التي تمت مشاركتها عن طريق رابط.", + "Deleted shares" : "مشاركة محذوفة", + "List of shares that you removed yourself from." : "قائمة المشاركات التي قمت بإزالة نفسك منها.", + "Pending shares" : "مشاركات معلقة", + "List of unapproved shares." : "قائمة المشاركات التي لم يتم الموافق عليها.", "No entries found in this folder" : "لا يوجد مدخلات في هذا المجلد ", "Name" : "اسم", "Share time" : "وقت المشاركة", @@ -272,6 +262,23 @@ OC.L10N.register( "Uploaded files:" : "تم رفع ملفات:", "By uploading files, you agree to the %1$sterms of service%2$s." : "برفع الملفات ، فإنك توافق على %1$s شروط الخدمة %2$s.", "Add to your Nextcloud" : "اضف إلى حسابك", + "Nothing shared with you yet" : "لم تتم مشاركته معك حتى الآن", + "Files and folders others share with you will show up here" : "ستظهر هنا الملفات والمجلدات التي يشاركها الآخرون معك", + "Nothing shared yet" : "لا توجد مشاركة حتى الآن", + "Files and folders you share will show up here" : "سوف تظهر هنا كل من الملفات و المجلدات التي قمت بمشاركتها", + "No shared links" : "لا توجد روابط مشتركة", + "Files and folders you share by link will show up here" : "سوف تظهر هنا كل من الملفات و المجلدات التي قمت بمشاركتها", + "No deleted shares" : "لا يوجد مشاركة محذوفة", + "Shares you deleted will show up here" : "سوف تظهر هنا كل المشاركات التي قمتم بحذفها", + "No pending shares" : "لا يوجد مشاركة معلقة", + "Shares you have received but not confirmed will show up here" : "ستظهر المشاركات التي تلقيتها ولكن لم يتم تأكيدها هنا", + "No shares" : "لا يوجد مشاركات", + "Shares will show up here" : "سوف تظهر هنا كل من الملفات و المجلدات التي قمتم بمشاركتها", + "Restore" : "استعادة ", + "Something happened. Unable to restore the share." : "حدث امر ما، لا يمكن استعادة المشاركة", + "Something happened. Unable to accept the share." : "حدث امر ما، لا يمكن قبول المشاركة", + "Something happened. Unable to reject the share." : "حدث امر ما، لا يمكن رفض المشاركة", + "No expiration date set" : "لم يتم تعيين تاريخ نهاية صلاحية المشاركة", "Sharing %s failed because the back end does not support sciencemesh shares" : "مشاركة %s أخفقت بسبب أن الخادوم لا يدعم مشاركات ScienceMesh", "One or more of your shares will expire tomorrow" : "ستنتهي صلاحية مشاركتك أو أكثر من مشاركة غدًا", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/ar.json b/apps/files_sharing/l10n/ar.json index b4e5c77dd12..3c460eb28cc 100644 --- a/apps/files_sharing/l10n/ar.json +++ b/apps/files_sharing/l10n/ar.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "تم مشاركته معك", - "Nothing shared with you yet" : "لم تتم مشاركته معك حتى الآن", - "Files and folders others share with you will show up here" : "ستظهر هنا الملفات والمجلدات التي يشاركها الآخرون معك", - "Shared with others" : "مشترك مع الآخرين", - "Nothing shared yet" : "لا توجد مشاركة حتى الآن", - "Files and folders you share will show up here" : "سوف تظهر هنا كل من الملفات و المجلدات التي قمت بمشاركتها", - "Shared by link" : "مشاركة عن طريق رابط", - "No shared links" : "لا توجد روابط مشتركة", - "Files and folders you share by link will show up here" : "سوف تظهر هنا كل من الملفات و المجلدات التي قمت بمشاركتها", - "Deleted shares" : "مشاركة محذوفة", - "No deleted shares" : "لا يوجد مشاركة محذوفة", - "Shares you deleted will show up here" : "سوف تظهر هنا كل المشاركات التي قمتم بحذفها", - "Pending shares" : "مشاركات معلقة", - "No pending shares" : "لا يوجد مشاركة معلقة", - "Shares you have received but not confirmed will show up here" : "ستظهر المشاركات التي تلقيتها ولكن لم يتم تأكيدها هنا", - "Shares" : "التي قمتَ بمشاركتها", - "No shares" : "لا يوجد مشاركات", - "Shares will show up here" : "سوف تظهر هنا كل من الملفات و المجلدات التي قمتم بمشاركتها", - "Restore" : "استعادة ", - "Restore share" : "استعادة مشاركة", - "Something happened. Unable to restore the share." : "حدث امر ما، لا يمكن استعادة المشاركة", - "Accept share" : "قبول مشاركة", - "Something happened. Unable to accept the share." : "حدث امر ما، لا يمكن قبول المشاركة", - "Reject share" : "رفض مشاركة", - "Something happened. Unable to reject the share." : "حدث امر ما، لا يمكن رفض المشاركة", "Waiting…" : "قيد الانتظار…", "error" : "خطأ", "finished" : "انتهت", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "لم يتم العثور على خادوم متوافق في {remote}", "Invalid server URL" : "عنوان الرابط للخادوم غير صالح", "Failed to add the public link to your Nextcloud" : "فشل في إضافة الرابط العام إلى الخادوم السحابي الخاص بك", - "No expiration date set" : "لم يتم تعيين تاريخ نهاية صلاحية المشاركة", - "Shared by" : "تم مشاركتها بواسطة", "File shares" : "مشاركة الملفات", "Downloaded via public link" : "تم تنزيله عبر رابط عام", "Downloaded by {email}" : "تم التنزيل بواسطة {email}", @@ -235,6 +208,10 @@ "Expires {relativetime}" : "تنتهي في {relativetime}", "this share just expired." : "هذه المشاركة انتهت للتو.", "Shared with you by {owner}" : "شورك معك من قبل {owner}", + "_Accept share_::_Accept shares_" : ["قبول المشاركات","قبول المشاركة","قبول المشاركات","قبول المشاركات","قبول المشاركات","قبول المشاركات"], + "Open in files" : "فتح في الملفات", + "_Reject share_::_Reject shares_" : ["رفض المشاركات","رفض المشاركة","رفض المشاركات","رفض المشاركات","رفض المشاركات","رفض المشاركات"], + "_Restore share_::_Restore shares_" : ["استعادة المشاركات","استعادة المشاركة","استعادة المشاركات","استعادة المشاركات","استعادة المشاركات","استعادة المشاركات"], "Link to a file" : "ارتباط إلى ملف", "Error creating the share: {errorMessage}" : "خطأ في إنشاء المشاركة: {errorMessage}", "Error creating the share" : "خطأ في إنشاء المشاركة", @@ -245,6 +222,7 @@ "Share {propertyName} saved" : "اسم المشاركة {propertyName} تمّ حفظه", "Shared" : "مشترك", "Share" : "شارك", + "Shared by" : "تم مشاركتها بواسطة", "Shared with" : "تمت مشاركته مع", "Password created successfully" : "تمّ إنشاء الإحالة بنجاح", "Error generating password from password policy" : "خطأ في توليد كلمة سر بسبب مخالفة قواعد إنشاء كلمات السر", @@ -252,6 +230,18 @@ "Shared with you and {circle} by {owner}" : "تمت مشاركته معك ومع {circle} بواسطة {owner}", "Shared with you and the conversation {conversation} by {owner}" : "تمت مشاركته معك ومع المحادثة {conversation} بواسطة {owner}", "Shared with you in a conversation by {owner}" : "تمت مشاركته معك في محادثة بواسطة {owner}", + "Shares" : "التي قمتَ بمشاركتها", + "Overview of shared files." : "استعراض الملفات التي تمت مشاركتها.", + "Shared with you" : "تم مشاركته معك", + "List of files that are shared with you." : "قائمة الملفات التي تمت مشاركتها معك.", + "Shared with others" : "مشترك مع الآخرين", + "List of files that you shared with others." : "قائمة الملفات التي شاركتها مع الآخرين.", + "Shared by link" : "مشاركة عن طريق رابط", + "List of files that are shared by link." : "قائمة الملفات التي تمت مشاركتها عن طريق رابط.", + "Deleted shares" : "مشاركة محذوفة", + "List of shares that you removed yourself from." : "قائمة المشاركات التي قمت بإزالة نفسك منها.", + "Pending shares" : "مشاركات معلقة", + "List of unapproved shares." : "قائمة المشاركات التي لم يتم الموافق عليها.", "No entries found in this folder" : "لا يوجد مدخلات في هذا المجلد ", "Name" : "اسم", "Share time" : "وقت المشاركة", @@ -270,6 +260,23 @@ "Uploaded files:" : "تم رفع ملفات:", "By uploading files, you agree to the %1$sterms of service%2$s." : "برفع الملفات ، فإنك توافق على %1$s شروط الخدمة %2$s.", "Add to your Nextcloud" : "اضف إلى حسابك", + "Nothing shared with you yet" : "لم تتم مشاركته معك حتى الآن", + "Files and folders others share with you will show up here" : "ستظهر هنا الملفات والمجلدات التي يشاركها الآخرون معك", + "Nothing shared yet" : "لا توجد مشاركة حتى الآن", + "Files and folders you share will show up here" : "سوف تظهر هنا كل من الملفات و المجلدات التي قمت بمشاركتها", + "No shared links" : "لا توجد روابط مشتركة", + "Files and folders you share by link will show up here" : "سوف تظهر هنا كل من الملفات و المجلدات التي قمت بمشاركتها", + "No deleted shares" : "لا يوجد مشاركة محذوفة", + "Shares you deleted will show up here" : "سوف تظهر هنا كل المشاركات التي قمتم بحذفها", + "No pending shares" : "لا يوجد مشاركة معلقة", + "Shares you have received but not confirmed will show up here" : "ستظهر المشاركات التي تلقيتها ولكن لم يتم تأكيدها هنا", + "No shares" : "لا يوجد مشاركات", + "Shares will show up here" : "سوف تظهر هنا كل من الملفات و المجلدات التي قمتم بمشاركتها", + "Restore" : "استعادة ", + "Something happened. Unable to restore the share." : "حدث امر ما، لا يمكن استعادة المشاركة", + "Something happened. Unable to accept the share." : "حدث امر ما، لا يمكن قبول المشاركة", + "Something happened. Unable to reject the share." : "حدث امر ما، لا يمكن رفض المشاركة", + "No expiration date set" : "لم يتم تعيين تاريخ نهاية صلاحية المشاركة", "Sharing %s failed because the back end does not support sciencemesh shares" : "مشاركة %s أخفقت بسبب أن الخادوم لا يدعم مشاركات ScienceMesh", "One or more of your shares will expire tomorrow" : "ستنتهي صلاحية مشاركتك أو أكثر من مشاركة غدًا", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/bg.js b/apps/files_sharing/l10n/bg.js index befd0d393ff..20bc3197ca5 100644 --- a/apps/files_sharing/l10n/bg.js +++ b/apps/files_sharing/l10n/bg.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Споделени с вас", - "Nothing shared with you yet" : "Няма споделени файлове", - "Files and folders others share with you will show up here" : "Файловете и папки, споделени с вас, ще се показват тук", - "Shared with others" : "Споделени с други", - "Nothing shared yet" : "Няма споделени файлове", - "Files and folders you share will show up here" : "Файловете и папки, които сте споделили, ще се показват тук", - "Shared by link" : "Споделени с връзка", - "No shared links" : "Няма споделени връзки", - "Files and folders you share by link will show up here" : "Файловете и папки, които споделяте чрез връзки, ще се показват тук", - "Deleted shares" : "Изтрити", - "No deleted shares" : "Няма изтрити споделяния", - "Shares you deleted will show up here" : "Изтритите, от вас споделяния, ще се показват тук", - "Pending shares" : "Чакащи споделяния", - "No pending shares" : "Няма чакащи споделяния", - "Shares you have received but not confirmed will show up here" : "Споделянията, които сте получили, но не сте потвърдили, ще се покажат тук", - "Shares" : "Споделени", - "No shares" : "Няма споделяния", - "Shares will show up here" : "Споделените елементи ще се показват тук", - "Restore" : "Възстановяне", - "Restore share" : "Възстанови споделянето", - "Something happened. Unable to restore the share." : "Споделянето не може да бъде възстановено.", - "Accept share" : "Приемане на споделяне", - "Something happened. Unable to accept the share." : "Нещо се случи. Споделянето не може да приеме.", - "Reject share" : "Отхвърляне на споделяне", - "Something happened. Unable to reject the share." : "Нещо се случи. Споделянето не може да отхвърли.", "Waiting…" : "Изчакване...", "error" : "грешка", "finished" : "завършен", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Не беше намерен съвместим сървър на {remote}", "Invalid server URL" : "URL адреса на сървъра не е валиден", "Failed to add the public link to your Nextcloud" : "Неуспешно добавяне на публичната връзка към вашия Nextcloud", - "No expiration date set" : "Не е зададен срок на валидност", - "Shared by" : "Споделено от", "File shares" : "Няма споделяния", "Downloaded via public link" : "Изтеглен чрез публична връзка", "Downloaded by {email}" : "Изтеглен от {email}", @@ -247,6 +220,7 @@ OC.L10N.register( "Share {propertyName} saved" : "Споделянето на {propertyName} е записано", "Shared" : "Споделен", "Share" : "Сподели", + "Shared by" : "Споделено от", "Shared with" : "Споделено с", "Password created successfully" : "Създаването на парола е успешно", "Error generating password from password policy" : "Грешка при генериране на парола от политиката за пароли", @@ -254,6 +228,12 @@ OC.L10N.register( "Shared with you and {circle} by {owner}" : "Споделено с вас и {circle} от {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Споделено с вас и разговора {conversation} от {owner}", "Shared with you in a conversation by {owner}" : "Споделено с вас в разговор от {owner}", + "Shares" : "Споделени", + "Shared with you" : "Споделени с вас", + "Shared with others" : "Споделени с други", + "Shared by link" : "Споделени с връзка", + "Deleted shares" : "Изтрити", + "Pending shares" : "Чакащи споделяния", "No entries found in this folder" : "Папката е празна", "Name" : "Име", "Share time" : "Споделено на", @@ -272,6 +252,23 @@ OC.L10N.register( "Uploaded files:" : "Качени файлове:", "By uploading files, you agree to the %1$sterms of service%2$s." : "С качването на файлове, вие се съгласявате с %1$s условията на услугата%2$s.", "Add to your Nextcloud" : "Добавете към Nextcloud", + "Nothing shared with you yet" : "Няма споделени файлове", + "Files and folders others share with you will show up here" : "Файловете и папки, споделени с вас, ще се показват тук", + "Nothing shared yet" : "Няма споделени файлове", + "Files and folders you share will show up here" : "Файловете и папки, които сте споделили, ще се показват тук", + "No shared links" : "Няма споделени връзки", + "Files and folders you share by link will show up here" : "Файловете и папки, които споделяте чрез връзки, ще се показват тук", + "No deleted shares" : "Няма изтрити споделяния", + "Shares you deleted will show up here" : "Изтритите, от вас споделяния, ще се показват тук", + "No pending shares" : "Няма чакащи споделяния", + "Shares you have received but not confirmed will show up here" : "Споделянията, които сте получили, но не сте потвърдили, ще се покажат тук", + "No shares" : "Няма споделяния", + "Shares will show up here" : "Споделените елементи ще се показват тук", + "Restore" : "Възстановяне", + "Something happened. Unable to restore the share." : "Споделянето не може да бъде възстановено.", + "Something happened. Unable to accept the share." : "Нещо се случи. Споделянето не може да приеме.", + "Something happened. Unable to reject the share." : "Нещо се случи. Споделянето не може да отхвърли.", + "No expiration date set" : "Не е зададен срок на валидност", "Sharing %s failed because the back end does not support sciencemesh shares" : "Споделянето %s не бе успешно, защото вътрешния сървър не позволява споделяния на приложението sciencemesh", "One or more of your shares will expire tomorrow" : "Едно или повече от вашите спделяния изтичат утре", "Science Mesh" : "Приложение Science Mesh", diff --git a/apps/files_sharing/l10n/bg.json b/apps/files_sharing/l10n/bg.json index 8641ba98335..a23fe025c87 100644 --- a/apps/files_sharing/l10n/bg.json +++ b/apps/files_sharing/l10n/bg.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Споделени с вас", - "Nothing shared with you yet" : "Няма споделени файлове", - "Files and folders others share with you will show up here" : "Файловете и папки, споделени с вас, ще се показват тук", - "Shared with others" : "Споделени с други", - "Nothing shared yet" : "Няма споделени файлове", - "Files and folders you share will show up here" : "Файловете и папки, които сте споделили, ще се показват тук", - "Shared by link" : "Споделени с връзка", - "No shared links" : "Няма споделени връзки", - "Files and folders you share by link will show up here" : "Файловете и папки, които споделяте чрез връзки, ще се показват тук", - "Deleted shares" : "Изтрити", - "No deleted shares" : "Няма изтрити споделяния", - "Shares you deleted will show up here" : "Изтритите, от вас споделяния, ще се показват тук", - "Pending shares" : "Чакащи споделяния", - "No pending shares" : "Няма чакащи споделяния", - "Shares you have received but not confirmed will show up here" : "Споделянията, които сте получили, но не сте потвърдили, ще се покажат тук", - "Shares" : "Споделени", - "No shares" : "Няма споделяния", - "Shares will show up here" : "Споделените елементи ще се показват тук", - "Restore" : "Възстановяне", - "Restore share" : "Възстанови споделянето", - "Something happened. Unable to restore the share." : "Споделянето не може да бъде възстановено.", - "Accept share" : "Приемане на споделяне", - "Something happened. Unable to accept the share." : "Нещо се случи. Споделянето не може да приеме.", - "Reject share" : "Отхвърляне на споделяне", - "Something happened. Unable to reject the share." : "Нещо се случи. Споделянето не може да отхвърли.", "Waiting…" : "Изчакване...", "error" : "грешка", "finished" : "завършен", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "Не беше намерен съвместим сървър на {remote}", "Invalid server URL" : "URL адреса на сървъра не е валиден", "Failed to add the public link to your Nextcloud" : "Неуспешно добавяне на публичната връзка към вашия Nextcloud", - "No expiration date set" : "Не е зададен срок на валидност", - "Shared by" : "Споделено от", "File shares" : "Няма споделяния", "Downloaded via public link" : "Изтеглен чрез публична връзка", "Downloaded by {email}" : "Изтеглен от {email}", @@ -245,6 +218,7 @@ "Share {propertyName} saved" : "Споделянето на {propertyName} е записано", "Shared" : "Споделен", "Share" : "Сподели", + "Shared by" : "Споделено от", "Shared with" : "Споделено с", "Password created successfully" : "Създаването на парола е успешно", "Error generating password from password policy" : "Грешка при генериране на парола от политиката за пароли", @@ -252,6 +226,12 @@ "Shared with you and {circle} by {owner}" : "Споделено с вас и {circle} от {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Споделено с вас и разговора {conversation} от {owner}", "Shared with you in a conversation by {owner}" : "Споделено с вас в разговор от {owner}", + "Shares" : "Споделени", + "Shared with you" : "Споделени с вас", + "Shared with others" : "Споделени с други", + "Shared by link" : "Споделени с връзка", + "Deleted shares" : "Изтрити", + "Pending shares" : "Чакащи споделяния", "No entries found in this folder" : "Папката е празна", "Name" : "Име", "Share time" : "Споделено на", @@ -270,6 +250,23 @@ "Uploaded files:" : "Качени файлове:", "By uploading files, you agree to the %1$sterms of service%2$s." : "С качването на файлове, вие се съгласявате с %1$s условията на услугата%2$s.", "Add to your Nextcloud" : "Добавете към Nextcloud", + "Nothing shared with you yet" : "Няма споделени файлове", + "Files and folders others share with you will show up here" : "Файловете и папки, споделени с вас, ще се показват тук", + "Nothing shared yet" : "Няма споделени файлове", + "Files and folders you share will show up here" : "Файловете и папки, които сте споделили, ще се показват тук", + "No shared links" : "Няма споделени връзки", + "Files and folders you share by link will show up here" : "Файловете и папки, които споделяте чрез връзки, ще се показват тук", + "No deleted shares" : "Няма изтрити споделяния", + "Shares you deleted will show up here" : "Изтритите, от вас споделяния, ще се показват тук", + "No pending shares" : "Няма чакащи споделяния", + "Shares you have received but not confirmed will show up here" : "Споделянията, които сте получили, но не сте потвърдили, ще се покажат тук", + "No shares" : "Няма споделяния", + "Shares will show up here" : "Споделените елементи ще се показват тук", + "Restore" : "Възстановяне", + "Something happened. Unable to restore the share." : "Споделянето не може да бъде възстановено.", + "Something happened. Unable to accept the share." : "Нещо се случи. Споделянето не може да приеме.", + "Something happened. Unable to reject the share." : "Нещо се случи. Споделянето не може да отхвърли.", + "No expiration date set" : "Не е зададен срок на валидност", "Sharing %s failed because the back end does not support sciencemesh shares" : "Споделянето %s не бе успешно, защото вътрешния сървър не позволява споделяния на приложението sciencemesh", "One or more of your shares will expire tomorrow" : "Едно или повече от вашите спделяния изтичат утре", "Science Mesh" : "Приложение Science Mesh", diff --git a/apps/files_sharing/l10n/ca.js b/apps/files_sharing/l10n/ca.js index ec8c6586173..343f7ddc492 100644 --- a/apps/files_sharing/l10n/ca.js +++ b/apps/files_sharing/l10n/ca.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Compartit amb vós", - "Nothing shared with you yet" : "Encara no s'ha compartit res amb vós", - "Files and folders others share with you will show up here" : "Els fitxers i les carpetes que altres usuaris comparteixin amb vós es mostraran aquí", - "Shared with others" : "Compartit amb altres", - "Nothing shared yet" : "Encara no heu compartit res", - "Files and folders you share will show up here" : "Els fitxers i les carpetes que compartiu es mostraran aquí", - "Shared by link" : "Compartit amb un enllaç", - "No shared links" : "No hi ha cap enllaç compartit", - "Files and folders you share by link will show up here" : "Els fitxers i les carpetes que compartiu amb un enllaç es mostraran aquí", - "Deleted shares" : "Suprimit", - "No deleted shares" : "No hi ha cap element compartit suprimit", - "Shares you deleted will show up here" : "Els elements compartits que heu suprimit es mostraran aquí", - "Pending shares" : "Pendent", - "No pending shares" : "No hi ha cap element compartit pendent", - "Shares you have received but not confirmed will show up here" : "Els elements compartits que heu rebut, però que no heu confirmat es mostraran aquí", - "Shares" : "Element compartits", - "No shares" : "No hi ha cap element compartit", - "Shares will show up here" : "Els elements compartits es mostraran aquí", - "Restore" : "Restaura", - "Restore share" : "Restaura l'element compartit", - "Something happened. Unable to restore the share." : "S'ha produït un error. No es pot restaurar l'element compartit.", - "Accept share" : "Accepta l'element compartit", - "Something happened. Unable to accept the share." : "S'ha produït un error. No es pot acceptar l'element compartit.", - "Reject share" : "Rebutja l'element compartit", - "Something happened. Unable to reject the share." : "S'ha produït un error. No es pot rebutjar l'element compartit.", "Waiting…" : "S'està esperant…", "error" : "error", "finished" : "ha finalitzat", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "No s'ha trobat cap servidor compatible a {remote}", "Invalid server URL" : "L'URL del servidor no és vàlida", "Failed to add the public link to your Nextcloud" : "No s'ha pogut afegir l'enllaç públic al vostre Nextcloud", - "No expiration date set" : "No s'ha establert cap data de caducitat", - "Shared by" : "Compartit per", "File shares" : "Fitxers compartits", "Downloaded via public link" : "S'ha baixat mitjançant un enllaç públic", "Downloaded by {email}" : "{email} l'ha baixat", @@ -237,6 +210,10 @@ OC.L10N.register( "Expires {relativetime}" : "Caduca {relativetime}", "this share just expired." : "aquest element compartit acaba de caducar.", "Shared with you by {owner}" : "{owner} l'ha compartit amb vós", + "_Accept share_::_Accept shares_" : ["Accepta l'element compartit","Accepta els elements compartits"], + "Open in files" : "Obre a Fitxers", + "_Reject share_::_Reject shares_" : ["Rebutja l'element compartit","Rebutja els elements compartits"], + "_Restore share_::_Restore shares_" : ["Restaura l'element compartit","Restaura els elements compartits"], "Link to a file" : "Enllaç a un fitxer", "Error creating the share: {errorMessage}" : "S'ha produït un error en crear l'element compartit: {errorMessage}", "Error creating the share" : "S'ha produït un error en crear l'element compartit", @@ -247,6 +224,7 @@ OC.L10N.register( "Share {propertyName} saved" : "S'ha desat l'element compartit {propertyName}", "Shared" : "S'ha compartit", "Share" : "Comparteix", + "Shared by" : "Compartit per", "Shared with" : "S'ha compartit amb", "Password created successfully" : "La contrasenya s'ha creat correctament", "Error generating password from password policy" : "S'ha produït un error en generar la contrasenya a partir de la política de contrasenyes", @@ -254,6 +232,18 @@ OC.L10N.register( "Shared with you and {circle} by {owner}" : "{owner} l'ha compartit amb vós i amb el cercle {circle}", "Shared with you and the conversation {conversation} by {owner}" : "{owner} l'ha compartit amb vós i amb la conversa {conversation}", "Shared with you in a conversation by {owner}" : "{owner} l'ha compartit amb vós en una conversa", + "Shares" : "Element compartits", + "Overview of shared files." : "Informació general dels fitxers compartits.", + "Shared with you" : "Compartit amb vós", + "List of files that are shared with you." : "Llista de fitxers que s'han compartit amb vós.", + "Shared with others" : "Compartit amb altres", + "List of files that you shared with others." : "Llista de fitxers que heu compartit amb altres persones.", + "Shared by link" : "Compartit amb un enllaç", + "List of files that are shared by link." : "Llista de fitxers compartits mitjançant un enllaç.", + "Deleted shares" : "Suprimit", + "List of shares that you removed yourself from." : "Llista d'elements compartits dels quals us heu suprimit.", + "Pending shares" : "Pendent", + "List of unapproved shares." : "Llista d'elements compartits no aprovats.", "No entries found in this folder" : "No hi ha cap entrada en aquesta carpeta", "Name" : "Nom", "Share time" : "Temps d'ús compartit", @@ -272,6 +262,23 @@ OC.L10N.register( "Uploaded files:" : "Fitxers pujats:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Si pugeu fitxers, accepteu les %1$scondicions del servei%2$s.", "Add to your Nextcloud" : "Afegeix al Nextcloud", + "Nothing shared with you yet" : "Encara no s'ha compartit res amb vós", + "Files and folders others share with you will show up here" : "Els fitxers i les carpetes que altres usuaris comparteixin amb vós es mostraran aquí", + "Nothing shared yet" : "Encara no heu compartit res", + "Files and folders you share will show up here" : "Els fitxers i les carpetes que compartiu es mostraran aquí", + "No shared links" : "No hi ha cap enllaç compartit", + "Files and folders you share by link will show up here" : "Els fitxers i les carpetes que compartiu amb un enllaç es mostraran aquí", + "No deleted shares" : "No hi ha cap element compartit suprimit", + "Shares you deleted will show up here" : "Els elements compartits que heu suprimit es mostraran aquí", + "No pending shares" : "No hi ha cap element compartit pendent", + "Shares you have received but not confirmed will show up here" : "Els elements compartits que heu rebut, però que no heu confirmat es mostraran aquí", + "No shares" : "No hi ha cap element compartit", + "Shares will show up here" : "Els elements compartits es mostraran aquí", + "Restore" : "Restaura", + "Something happened. Unable to restore the share." : "S'ha produït un error. No es pot restaurar l'element compartit.", + "Something happened. Unable to accept the share." : "S'ha produït un error. No es pot acceptar l'element compartit.", + "Something happened. Unable to reject the share." : "S'ha produït un error. No es pot rebutjar l'element compartit.", + "No expiration date set" : "No s'ha establert cap data de caducitat", "Sharing %s failed because the back end does not support sciencemesh shares" : "No s'ha pogut compartir %s perquè el rerefons no permet l'ús compartit amb ScienceMesh", "One or more of your shares will expire tomorrow" : "Una o més dels vostres elements compartits caducaran demà", "Science Mesh" : "ScienceMesh", diff --git a/apps/files_sharing/l10n/ca.json b/apps/files_sharing/l10n/ca.json index 539cff80fb0..4f07a6505e1 100644 --- a/apps/files_sharing/l10n/ca.json +++ b/apps/files_sharing/l10n/ca.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Compartit amb vós", - "Nothing shared with you yet" : "Encara no s'ha compartit res amb vós", - "Files and folders others share with you will show up here" : "Els fitxers i les carpetes que altres usuaris comparteixin amb vós es mostraran aquí", - "Shared with others" : "Compartit amb altres", - "Nothing shared yet" : "Encara no heu compartit res", - "Files and folders you share will show up here" : "Els fitxers i les carpetes que compartiu es mostraran aquí", - "Shared by link" : "Compartit amb un enllaç", - "No shared links" : "No hi ha cap enllaç compartit", - "Files and folders you share by link will show up here" : "Els fitxers i les carpetes que compartiu amb un enllaç es mostraran aquí", - "Deleted shares" : "Suprimit", - "No deleted shares" : "No hi ha cap element compartit suprimit", - "Shares you deleted will show up here" : "Els elements compartits que heu suprimit es mostraran aquí", - "Pending shares" : "Pendent", - "No pending shares" : "No hi ha cap element compartit pendent", - "Shares you have received but not confirmed will show up here" : "Els elements compartits que heu rebut, però que no heu confirmat es mostraran aquí", - "Shares" : "Element compartits", - "No shares" : "No hi ha cap element compartit", - "Shares will show up here" : "Els elements compartits es mostraran aquí", - "Restore" : "Restaura", - "Restore share" : "Restaura l'element compartit", - "Something happened. Unable to restore the share." : "S'ha produït un error. No es pot restaurar l'element compartit.", - "Accept share" : "Accepta l'element compartit", - "Something happened. Unable to accept the share." : "S'ha produït un error. No es pot acceptar l'element compartit.", - "Reject share" : "Rebutja l'element compartit", - "Something happened. Unable to reject the share." : "S'ha produït un error. No es pot rebutjar l'element compartit.", "Waiting…" : "S'està esperant…", "error" : "error", "finished" : "ha finalitzat", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "No s'ha trobat cap servidor compatible a {remote}", "Invalid server URL" : "L'URL del servidor no és vàlida", "Failed to add the public link to your Nextcloud" : "No s'ha pogut afegir l'enllaç públic al vostre Nextcloud", - "No expiration date set" : "No s'ha establert cap data de caducitat", - "Shared by" : "Compartit per", "File shares" : "Fitxers compartits", "Downloaded via public link" : "S'ha baixat mitjançant un enllaç públic", "Downloaded by {email}" : "{email} l'ha baixat", @@ -235,6 +208,10 @@ "Expires {relativetime}" : "Caduca {relativetime}", "this share just expired." : "aquest element compartit acaba de caducar.", "Shared with you by {owner}" : "{owner} l'ha compartit amb vós", + "_Accept share_::_Accept shares_" : ["Accepta l'element compartit","Accepta els elements compartits"], + "Open in files" : "Obre a Fitxers", + "_Reject share_::_Reject shares_" : ["Rebutja l'element compartit","Rebutja els elements compartits"], + "_Restore share_::_Restore shares_" : ["Restaura l'element compartit","Restaura els elements compartits"], "Link to a file" : "Enllaç a un fitxer", "Error creating the share: {errorMessage}" : "S'ha produït un error en crear l'element compartit: {errorMessage}", "Error creating the share" : "S'ha produït un error en crear l'element compartit", @@ -245,6 +222,7 @@ "Share {propertyName} saved" : "S'ha desat l'element compartit {propertyName}", "Shared" : "S'ha compartit", "Share" : "Comparteix", + "Shared by" : "Compartit per", "Shared with" : "S'ha compartit amb", "Password created successfully" : "La contrasenya s'ha creat correctament", "Error generating password from password policy" : "S'ha produït un error en generar la contrasenya a partir de la política de contrasenyes", @@ -252,6 +230,18 @@ "Shared with you and {circle} by {owner}" : "{owner} l'ha compartit amb vós i amb el cercle {circle}", "Shared with you and the conversation {conversation} by {owner}" : "{owner} l'ha compartit amb vós i amb la conversa {conversation}", "Shared with you in a conversation by {owner}" : "{owner} l'ha compartit amb vós en una conversa", + "Shares" : "Element compartits", + "Overview of shared files." : "Informació general dels fitxers compartits.", + "Shared with you" : "Compartit amb vós", + "List of files that are shared with you." : "Llista de fitxers que s'han compartit amb vós.", + "Shared with others" : "Compartit amb altres", + "List of files that you shared with others." : "Llista de fitxers que heu compartit amb altres persones.", + "Shared by link" : "Compartit amb un enllaç", + "List of files that are shared by link." : "Llista de fitxers compartits mitjançant un enllaç.", + "Deleted shares" : "Suprimit", + "List of shares that you removed yourself from." : "Llista d'elements compartits dels quals us heu suprimit.", + "Pending shares" : "Pendent", + "List of unapproved shares." : "Llista d'elements compartits no aprovats.", "No entries found in this folder" : "No hi ha cap entrada en aquesta carpeta", "Name" : "Nom", "Share time" : "Temps d'ús compartit", @@ -270,6 +260,23 @@ "Uploaded files:" : "Fitxers pujats:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Si pugeu fitxers, accepteu les %1$scondicions del servei%2$s.", "Add to your Nextcloud" : "Afegeix al Nextcloud", + "Nothing shared with you yet" : "Encara no s'ha compartit res amb vós", + "Files and folders others share with you will show up here" : "Els fitxers i les carpetes que altres usuaris comparteixin amb vós es mostraran aquí", + "Nothing shared yet" : "Encara no heu compartit res", + "Files and folders you share will show up here" : "Els fitxers i les carpetes que compartiu es mostraran aquí", + "No shared links" : "No hi ha cap enllaç compartit", + "Files and folders you share by link will show up here" : "Els fitxers i les carpetes que compartiu amb un enllaç es mostraran aquí", + "No deleted shares" : "No hi ha cap element compartit suprimit", + "Shares you deleted will show up here" : "Els elements compartits que heu suprimit es mostraran aquí", + "No pending shares" : "No hi ha cap element compartit pendent", + "Shares you have received but not confirmed will show up here" : "Els elements compartits que heu rebut, però que no heu confirmat es mostraran aquí", + "No shares" : "No hi ha cap element compartit", + "Shares will show up here" : "Els elements compartits es mostraran aquí", + "Restore" : "Restaura", + "Something happened. Unable to restore the share." : "S'ha produït un error. No es pot restaurar l'element compartit.", + "Something happened. Unable to accept the share." : "S'ha produït un error. No es pot acceptar l'element compartit.", + "Something happened. Unable to reject the share." : "S'ha produït un error. No es pot rebutjar l'element compartit.", + "No expiration date set" : "No s'ha establert cap data de caducitat", "Sharing %s failed because the back end does not support sciencemesh shares" : "No s'ha pogut compartir %s perquè el rerefons no permet l'ús compartit amb ScienceMesh", "One or more of your shares will expire tomorrow" : "Una o més dels vostres elements compartits caducaran demà", "Science Mesh" : "ScienceMesh", diff --git a/apps/files_sharing/l10n/cs.js b/apps/files_sharing/l10n/cs.js index 0da3c54bc2e..2087cb03c06 100644 --- a/apps/files_sharing/l10n/cs.js +++ b/apps/files_sharing/l10n/cs.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Sdíleno s vámi", - "Nothing shared with you yet" : "Zatím vám nikdo nic nenasdílel", - "Files and folders others share with you will show up here" : "Zde budou zobrazeny soubory a složky, které ostatní sdílí s vámi", - "Shared with others" : "Sdíleno s ostatními", - "Nothing shared yet" : "Zatím není nic sdíleno", - "Files and folders you share will show up here" : "Zde budou zobrazeny vámi sdílené soubory a složky", - "Shared by link" : "Sdíleno prostřednictvím odkazu", - "No shared links" : "Žádné sdílené odkazy", - "Files and folders you share by link will show up here" : "Zde budou zobrazeny soubory a složky, sdílené jako webové odkazy", - "Deleted shares" : "Smazaná sdílení", - "No deleted shares" : "Žádná smazaná sdílení", - "Shares you deleted will show up here" : "Sdílení která smažete se zobrazí zde", - "Pending shares" : "Čekající sdílení", - "No pending shares" : "Žádná čekající sdílení", - "Shares you have received but not confirmed will show up here" : "Sdílení, která jste obdrželi ale nepotvrdili se zobrazí zde", - "Shares" : "Sdílení", - "No shares" : "Žádná sdílení", - "Shares will show up here" : "Sdílení se zobrazí zde", - "Restore" : "Obnovit", - "Restore share" : "Obnovit sdílení", - "Something happened. Unable to restore the share." : "Něco se stalo. Sdílení se nedaří obnovit.", - "Accept share" : "Přijmout sdílení", - "Something happened. Unable to accept the share." : "Něco se přihodilo. Sdílení se nedaří přijmout.", - "Reject share" : "Odmítnout sdílení", - "Something happened. Unable to reject the share." : "Něco se přihodilo. Sdílení se nedaří odmítnout.", "Waiting…" : "Čeká se…", "error" : "chyba", "finished" : "dokončeno", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Na {remote} nebyl nalezen kompatibilní server", "Invalid server URL" : "Neplatná URL serveru", "Failed to add the public link to your Nextcloud" : "Nepodařilo se přidání veřejného odkazu do Nextcloud", - "No expiration date set" : "Není nastaveno datum skončení platnosti", - "Shared by" : "Sdílí", "File shares" : "Sdílení souborů", "Downloaded via public link" : "Staženo pomocí veřejného odkazu", "Downloaded by {email}" : "Stáhnul(a) si {email}", @@ -237,6 +210,10 @@ OC.L10N.register( "Expires {relativetime}" : "Platnost končí {relativetime}", "this share just expired." : "platnost tohoto sdílení právě skončila.", "Shared with you by {owner}" : "S vámi sdílí {owner}", + "_Accept share_::_Accept shares_" : ["Přijmout sdílení","Přijmout sdílení","Přijmout sdílení","Přijmout sdílení"], + "Open in files" : "Otevřít v aplikaci Soubory", + "_Reject share_::_Reject shares_" : ["Odmítnout sdílení","Odmítnout sdílení","Odmítnout sdílení","Odmítnout sdílení"], + "_Restore share_::_Restore shares_" : ["Obnovit sdílení","Obnovit sdílení","Obnovit sdílení","Obnovit sdílení"], "Link to a file" : "Odkaz na soubor", "Error creating the share: {errorMessage}" : "Chyba při vytváření sdílení: {errorMessage}", "Error creating the share" : "Chyba při vytváření sdílení", @@ -247,6 +224,7 @@ OC.L10N.register( "Share {propertyName} saved" : "Sdílení {propertyName} uloženo", "Shared" : "Sdíleno", "Share" : "Sdílet", + "Shared by" : "Sdílí", "Shared with" : "Sdíleno s", "Password created successfully" : "Heslo úspěšně vytvořeno", "Error generating password from password policy" : "Chyba při vytváření hesla ze zásady pro hesla", @@ -254,6 +232,18 @@ OC.L10N.register( "Shared with you and {circle} by {owner}" : "Sdíleno s vámi a {circle} od {owner}", "Shared with you and the conversation {conversation} by {owner}" : "{owner} sdílí vám a konverzaci {conversation}", "Shared with you in a conversation by {owner}" : " {owner} vám sdílí v konverzaci", + "Shares" : "Sdílení", + "Overview of shared files." : "Přehled nasdílených souborů", + "Shared with you" : "Sdíleno s vámi", + "List of files that are shared with you." : "Seznam souborů, které vám byly nasdíleny.", + "Shared with others" : "Sdíleno s ostatními", + "List of files that you shared with others." : "Seznam souborů, které jste nasdíleli ostatním.", + "Shared by link" : "Sdíleno prostřednictvím odkazu", + "List of files that are shared by link." : "Seznam souborů, které jsou nasdílené odkazem.", + "Deleted shares" : "Smazaná sdílení", + "List of shares that you removed yourself from." : "Seznam sdílení, od kterých jste se odebrali.", + "Pending shares" : "Čekající sdílení", + "List of unapproved shares." : "Seznam neschválených sdílení.", "No entries found in this folder" : "V této složce nebylo nic nalezeno", "Name" : "Název", "Share time" : "Čas sdílení", @@ -272,6 +262,23 @@ OC.L10N.register( "Uploaded files:" : "Nahrané soubory:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Nahráním souborů vyjadřujete souhlas s %1$svšeobecnými podmínkami%2$s.", "Add to your Nextcloud" : "Přidat do Nextcloud", + "Nothing shared with you yet" : "Zatím vám nikdo nic nenasdílel", + "Files and folders others share with you will show up here" : "Zde budou zobrazeny soubory a složky, které ostatní sdílí s vámi", + "Nothing shared yet" : "Zatím není nic sdíleno", + "Files and folders you share will show up here" : "Zde budou zobrazeny vámi sdílené soubory a složky", + "No shared links" : "Žádné sdílené odkazy", + "Files and folders you share by link will show up here" : "Zde budou zobrazeny soubory a složky, sdílené jako webové odkazy", + "No deleted shares" : "Žádná smazaná sdílení", + "Shares you deleted will show up here" : "Sdílení která smažete se zobrazí zde", + "No pending shares" : "Žádná čekající sdílení", + "Shares you have received but not confirmed will show up here" : "Sdílení, která jste obdrželi ale nepotvrdili se zobrazí zde", + "No shares" : "Žádná sdílení", + "Shares will show up here" : "Sdílení se zobrazí zde", + "Restore" : "Obnovit", + "Something happened. Unable to restore the share." : "Něco se stalo. Sdílení se nedaří obnovit.", + "Something happened. Unable to accept the share." : "Něco se přihodilo. Sdílení se nedaří přijmout.", + "Something happened. Unable to reject the share." : "Něco se přihodilo. Sdílení se nedaří odmítnout.", + "No expiration date set" : "Není nastaveno datum skončení platnosti", "Sharing %s failed because the back end does not support sciencemesh shares" : "Sdílení %s se nezdařilo protože podpůrná vrstva nepodporuje sciencemesh sdílení", "One or more of your shares will expire tomorrow" : "Platnost jednoho nebo více vašich sdílení skončí zítra", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/cs.json b/apps/files_sharing/l10n/cs.json index e696b4140a9..6da47f41ac3 100644 --- a/apps/files_sharing/l10n/cs.json +++ b/apps/files_sharing/l10n/cs.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Sdíleno s vámi", - "Nothing shared with you yet" : "Zatím vám nikdo nic nenasdílel", - "Files and folders others share with you will show up here" : "Zde budou zobrazeny soubory a složky, které ostatní sdílí s vámi", - "Shared with others" : "Sdíleno s ostatními", - "Nothing shared yet" : "Zatím není nic sdíleno", - "Files and folders you share will show up here" : "Zde budou zobrazeny vámi sdílené soubory a složky", - "Shared by link" : "Sdíleno prostřednictvím odkazu", - "No shared links" : "Žádné sdílené odkazy", - "Files and folders you share by link will show up here" : "Zde budou zobrazeny soubory a složky, sdílené jako webové odkazy", - "Deleted shares" : "Smazaná sdílení", - "No deleted shares" : "Žádná smazaná sdílení", - "Shares you deleted will show up here" : "Sdílení která smažete se zobrazí zde", - "Pending shares" : "Čekající sdílení", - "No pending shares" : "Žádná čekající sdílení", - "Shares you have received but not confirmed will show up here" : "Sdílení, která jste obdrželi ale nepotvrdili se zobrazí zde", - "Shares" : "Sdílení", - "No shares" : "Žádná sdílení", - "Shares will show up here" : "Sdílení se zobrazí zde", - "Restore" : "Obnovit", - "Restore share" : "Obnovit sdílení", - "Something happened. Unable to restore the share." : "Něco se stalo. Sdílení se nedaří obnovit.", - "Accept share" : "Přijmout sdílení", - "Something happened. Unable to accept the share." : "Něco se přihodilo. Sdílení se nedaří přijmout.", - "Reject share" : "Odmítnout sdílení", - "Something happened. Unable to reject the share." : "Něco se přihodilo. Sdílení se nedaří odmítnout.", "Waiting…" : "Čeká se…", "error" : "chyba", "finished" : "dokončeno", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "Na {remote} nebyl nalezen kompatibilní server", "Invalid server URL" : "Neplatná URL serveru", "Failed to add the public link to your Nextcloud" : "Nepodařilo se přidání veřejného odkazu do Nextcloud", - "No expiration date set" : "Není nastaveno datum skončení platnosti", - "Shared by" : "Sdílí", "File shares" : "Sdílení souborů", "Downloaded via public link" : "Staženo pomocí veřejného odkazu", "Downloaded by {email}" : "Stáhnul(a) si {email}", @@ -235,6 +208,10 @@ "Expires {relativetime}" : "Platnost končí {relativetime}", "this share just expired." : "platnost tohoto sdílení právě skončila.", "Shared with you by {owner}" : "S vámi sdílí {owner}", + "_Accept share_::_Accept shares_" : ["Přijmout sdílení","Přijmout sdílení","Přijmout sdílení","Přijmout sdílení"], + "Open in files" : "Otevřít v aplikaci Soubory", + "_Reject share_::_Reject shares_" : ["Odmítnout sdílení","Odmítnout sdílení","Odmítnout sdílení","Odmítnout sdílení"], + "_Restore share_::_Restore shares_" : ["Obnovit sdílení","Obnovit sdílení","Obnovit sdílení","Obnovit sdílení"], "Link to a file" : "Odkaz na soubor", "Error creating the share: {errorMessage}" : "Chyba při vytváření sdílení: {errorMessage}", "Error creating the share" : "Chyba při vytváření sdílení", @@ -245,6 +222,7 @@ "Share {propertyName} saved" : "Sdílení {propertyName} uloženo", "Shared" : "Sdíleno", "Share" : "Sdílet", + "Shared by" : "Sdílí", "Shared with" : "Sdíleno s", "Password created successfully" : "Heslo úspěšně vytvořeno", "Error generating password from password policy" : "Chyba při vytváření hesla ze zásady pro hesla", @@ -252,6 +230,18 @@ "Shared with you and {circle} by {owner}" : "Sdíleno s vámi a {circle} od {owner}", "Shared with you and the conversation {conversation} by {owner}" : "{owner} sdílí vám a konverzaci {conversation}", "Shared with you in a conversation by {owner}" : " {owner} vám sdílí v konverzaci", + "Shares" : "Sdílení", + "Overview of shared files." : "Přehled nasdílených souborů", + "Shared with you" : "Sdíleno s vámi", + "List of files that are shared with you." : "Seznam souborů, které vám byly nasdíleny.", + "Shared with others" : "Sdíleno s ostatními", + "List of files that you shared with others." : "Seznam souborů, které jste nasdíleli ostatním.", + "Shared by link" : "Sdíleno prostřednictvím odkazu", + "List of files that are shared by link." : "Seznam souborů, které jsou nasdílené odkazem.", + "Deleted shares" : "Smazaná sdílení", + "List of shares that you removed yourself from." : "Seznam sdílení, od kterých jste se odebrali.", + "Pending shares" : "Čekající sdílení", + "List of unapproved shares." : "Seznam neschválených sdílení.", "No entries found in this folder" : "V této složce nebylo nic nalezeno", "Name" : "Název", "Share time" : "Čas sdílení", @@ -270,6 +260,23 @@ "Uploaded files:" : "Nahrané soubory:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Nahráním souborů vyjadřujete souhlas s %1$svšeobecnými podmínkami%2$s.", "Add to your Nextcloud" : "Přidat do Nextcloud", + "Nothing shared with you yet" : "Zatím vám nikdo nic nenasdílel", + "Files and folders others share with you will show up here" : "Zde budou zobrazeny soubory a složky, které ostatní sdílí s vámi", + "Nothing shared yet" : "Zatím není nic sdíleno", + "Files and folders you share will show up here" : "Zde budou zobrazeny vámi sdílené soubory a složky", + "No shared links" : "Žádné sdílené odkazy", + "Files and folders you share by link will show up here" : "Zde budou zobrazeny soubory a složky, sdílené jako webové odkazy", + "No deleted shares" : "Žádná smazaná sdílení", + "Shares you deleted will show up here" : "Sdílení která smažete se zobrazí zde", + "No pending shares" : "Žádná čekající sdílení", + "Shares you have received but not confirmed will show up here" : "Sdílení, která jste obdrželi ale nepotvrdili se zobrazí zde", + "No shares" : "Žádná sdílení", + "Shares will show up here" : "Sdílení se zobrazí zde", + "Restore" : "Obnovit", + "Something happened. Unable to restore the share." : "Něco se stalo. Sdílení se nedaří obnovit.", + "Something happened. Unable to accept the share." : "Něco se přihodilo. Sdílení se nedaří přijmout.", + "Something happened. Unable to reject the share." : "Něco se přihodilo. Sdílení se nedaří odmítnout.", + "No expiration date set" : "Není nastaveno datum skončení platnosti", "Sharing %s failed because the back end does not support sciencemesh shares" : "Sdílení %s se nezdařilo protože podpůrná vrstva nepodporuje sciencemesh sdílení", "One or more of your shares will expire tomorrow" : "Platnost jednoho nebo více vašich sdílení skončí zítra", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/da.js b/apps/files_sharing/l10n/da.js index 44442fa7db7..bc25aaa52dd 100644 --- a/apps/files_sharing/l10n/da.js +++ b/apps/files_sharing/l10n/da.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Delt med dig", - "Nothing shared with you yet" : "Der deles ikke noget med dig endnu", - "Files and folders others share with you will show up here" : "Filer og mapper som andre deler med dig, vil blive vist her", - "Shared with others" : "Delt med andre", - "Nothing shared yet" : "Der deles endnu ikke noget", - "Files and folders you share will show up here" : "Filer og mapper som du deler, vil blive vist her", - "Shared by link" : "Delt via link", - "No shared links" : "Ingen delte link", - "Files and folders you share by link will show up here" : "Filer og mapper som du deler gennem link, vil blive vist her", - "Deleted shares" : "Slettede delinger", - "No deleted shares" : "Ingen slettede delinger", - "Shares you deleted will show up here" : "Delinger du har slettet vil dukke op her", - "Pending shares" : "Afventende delinger", - "No pending shares" : "Ingen afventende delinger", - "Shares you have received but not confirmed will show up here" : "Delinger du har modtaget men ikke accepteret vil dukke op her", - "Shares" : "Delinger", - "No shares" : "Ingen delinger", - "Shares will show up here" : "Delinger vil dukke op her", - "Restore" : "Gendan", - "Restore share" : "Gendan deling", - "Something happened. Unable to restore the share." : "Der skete et eller andet. Ude af stand til at genskabe delingen.", - "Accept share" : "Accepter deling", - "Something happened. Unable to accept the share." : "Der skete et eller andet. Ude af stand til at acceptere delingen.", - "Reject share" : "Afvis deling", - "Something happened. Unable to reject the share." : "Der skete et eller andet. Ude af stand til at afvise delingen.", "Waiting…" : "Venter …", "error" : "fejl", "finished" : "Færdiggjort", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Ingen kompatible servere fundet på {remote}", "Invalid server URL" : "Ugyldig server adresse", "Failed to add the public link to your Nextcloud" : "Fejl ved tilføjelse af offentligt link til din Nextcloud", - "No expiration date set" : "Ingen udløbsdato sat", - "Shared by" : "Delt af", "File shares" : "Fildelinger", "Downloaded via public link" : "Downloaded via et offentligt link", "Downloaded by {email}" : "Downloaded af {email}", @@ -176,11 +149,18 @@ OC.L10N.register( "Error creating the share" : "Fejl ved skabelse af delt drev", "Shared" : "Delt", "Share" : "Del", + "Shared by" : "Delt af", "Shared with" : "Delt med", "Shared with you and the group {group} by {owner}" : "Delt med dig og grupp {group} af {owner}", "Shared with you and {circle} by {owner}" : "Delt med dig og {circle} af {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Delt med dig og konversationen {conversation} af {owner}", "Shared with you in a conversation by {owner}" : "Delt med dig og konversationen af {owner}", + "Shares" : "Delinger", + "Shared with you" : "Delt med dig", + "Shared with others" : "Delt med andre", + "Shared by link" : "Delt via link", + "Deleted shares" : "Slettede delinger", + "Pending shares" : "Afventende delinger", "No entries found in this folder" : "Der blev ikke fundet poster i denne mappe", "Name" : "Navn", "Share time" : "Dele periode", @@ -195,6 +175,23 @@ OC.L10N.register( "Note" : "Note", "Select or drop files" : "Vælg eller slip filer", "Uploaded files:" : "Uploadede filer:", - "Add to your Nextcloud" : "Tilføj til din Nextcloud" + "Add to your Nextcloud" : "Tilføj til din Nextcloud", + "Nothing shared with you yet" : "Der deles ikke noget med dig endnu", + "Files and folders others share with you will show up here" : "Filer og mapper som andre deler med dig, vil blive vist her", + "Nothing shared yet" : "Der deles endnu ikke noget", + "Files and folders you share will show up here" : "Filer og mapper som du deler, vil blive vist her", + "No shared links" : "Ingen delte link", + "Files and folders you share by link will show up here" : "Filer og mapper som du deler gennem link, vil blive vist her", + "No deleted shares" : "Ingen slettede delinger", + "Shares you deleted will show up here" : "Delinger du har slettet vil dukke op her", + "No pending shares" : "Ingen afventende delinger", + "Shares you have received but not confirmed will show up here" : "Delinger du har modtaget men ikke accepteret vil dukke op her", + "No shares" : "Ingen delinger", + "Shares will show up here" : "Delinger vil dukke op her", + "Restore" : "Gendan", + "Something happened. Unable to restore the share." : "Der skete et eller andet. Ude af stand til at genskabe delingen.", + "Something happened. Unable to accept the share." : "Der skete et eller andet. Ude af stand til at acceptere delingen.", + "Something happened. Unable to reject the share." : "Der skete et eller andet. Ude af stand til at afvise delingen.", + "No expiration date set" : "Ingen udløbsdato sat" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/da.json b/apps/files_sharing/l10n/da.json index e8578bc7606..5413c7a672e 100644 --- a/apps/files_sharing/l10n/da.json +++ b/apps/files_sharing/l10n/da.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Delt med dig", - "Nothing shared with you yet" : "Der deles ikke noget med dig endnu", - "Files and folders others share with you will show up here" : "Filer og mapper som andre deler med dig, vil blive vist her", - "Shared with others" : "Delt med andre", - "Nothing shared yet" : "Der deles endnu ikke noget", - "Files and folders you share will show up here" : "Filer og mapper som du deler, vil blive vist her", - "Shared by link" : "Delt via link", - "No shared links" : "Ingen delte link", - "Files and folders you share by link will show up here" : "Filer og mapper som du deler gennem link, vil blive vist her", - "Deleted shares" : "Slettede delinger", - "No deleted shares" : "Ingen slettede delinger", - "Shares you deleted will show up here" : "Delinger du har slettet vil dukke op her", - "Pending shares" : "Afventende delinger", - "No pending shares" : "Ingen afventende delinger", - "Shares you have received but not confirmed will show up here" : "Delinger du har modtaget men ikke accepteret vil dukke op her", - "Shares" : "Delinger", - "No shares" : "Ingen delinger", - "Shares will show up here" : "Delinger vil dukke op her", - "Restore" : "Gendan", - "Restore share" : "Gendan deling", - "Something happened. Unable to restore the share." : "Der skete et eller andet. Ude af stand til at genskabe delingen.", - "Accept share" : "Accepter deling", - "Something happened. Unable to accept the share." : "Der skete et eller andet. Ude af stand til at acceptere delingen.", - "Reject share" : "Afvis deling", - "Something happened. Unable to reject the share." : "Der skete et eller andet. Ude af stand til at afvise delingen.", "Waiting…" : "Venter …", "error" : "fejl", "finished" : "Færdiggjort", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "Ingen kompatible servere fundet på {remote}", "Invalid server URL" : "Ugyldig server adresse", "Failed to add the public link to your Nextcloud" : "Fejl ved tilføjelse af offentligt link til din Nextcloud", - "No expiration date set" : "Ingen udløbsdato sat", - "Shared by" : "Delt af", "File shares" : "Fildelinger", "Downloaded via public link" : "Downloaded via et offentligt link", "Downloaded by {email}" : "Downloaded af {email}", @@ -174,11 +147,18 @@ "Error creating the share" : "Fejl ved skabelse af delt drev", "Shared" : "Delt", "Share" : "Del", + "Shared by" : "Delt af", "Shared with" : "Delt med", "Shared with you and the group {group} by {owner}" : "Delt med dig og grupp {group} af {owner}", "Shared with you and {circle} by {owner}" : "Delt med dig og {circle} af {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Delt med dig og konversationen {conversation} af {owner}", "Shared with you in a conversation by {owner}" : "Delt med dig og konversationen af {owner}", + "Shares" : "Delinger", + "Shared with you" : "Delt med dig", + "Shared with others" : "Delt med andre", + "Shared by link" : "Delt via link", + "Deleted shares" : "Slettede delinger", + "Pending shares" : "Afventende delinger", "No entries found in this folder" : "Der blev ikke fundet poster i denne mappe", "Name" : "Navn", "Share time" : "Dele periode", @@ -193,6 +173,23 @@ "Note" : "Note", "Select or drop files" : "Vælg eller slip filer", "Uploaded files:" : "Uploadede filer:", - "Add to your Nextcloud" : "Tilføj til din Nextcloud" + "Add to your Nextcloud" : "Tilføj til din Nextcloud", + "Nothing shared with you yet" : "Der deles ikke noget med dig endnu", + "Files and folders others share with you will show up here" : "Filer og mapper som andre deler med dig, vil blive vist her", + "Nothing shared yet" : "Der deles endnu ikke noget", + "Files and folders you share will show up here" : "Filer og mapper som du deler, vil blive vist her", + "No shared links" : "Ingen delte link", + "Files and folders you share by link will show up here" : "Filer og mapper som du deler gennem link, vil blive vist her", + "No deleted shares" : "Ingen slettede delinger", + "Shares you deleted will show up here" : "Delinger du har slettet vil dukke op her", + "No pending shares" : "Ingen afventende delinger", + "Shares you have received but not confirmed will show up here" : "Delinger du har modtaget men ikke accepteret vil dukke op her", + "No shares" : "Ingen delinger", + "Shares will show up here" : "Delinger vil dukke op her", + "Restore" : "Gendan", + "Something happened. Unable to restore the share." : "Der skete et eller andet. Ude af stand til at genskabe delingen.", + "Something happened. Unable to accept the share." : "Der skete et eller andet. Ude af stand til at acceptere delingen.", + "Something happened. Unable to reject the share." : "Der skete et eller andet. Ude af stand til at afvise delingen.", + "No expiration date set" : "Ingen udløbsdato sat" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/de.js b/apps/files_sharing/l10n/de.js index d77ccea8ead..17e06c961d4 100644 --- a/apps/files_sharing/l10n/de.js +++ b/apps/files_sharing/l10n/de.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Mit dir geteilt", - "Nothing shared with you yet" : "Bis jetzt wurde nichts mit dir geteilt", - "Files and folders others share with you will show up here" : "Mit dir geteilte Dateien und Ordner anderer werden hier erscheinen", - "Shared with others" : "Von dir geteilt", - "Nothing shared yet" : "Noch nichts geteilt", - "Files and folders you share will show up here" : "Von dir geteilte Dateien und Ordner werden hier erscheinen", - "Shared by link" : "Geteilt über einen Link", - "No shared links" : "Keine geteilten Links", - "Files and folders you share by link will show up here" : "Per Link freigegebene Dateien und Ordner werden hier erscheinen", - "Deleted shares" : "Gelöschte Freigaben", - "No deleted shares" : "Keine gelöschten Freigaben", - "Shares you deleted will show up here" : "Von dir gelöschte Freigaben werden hier erscheinen", - "Pending shares" : "Ausstehende Freigaben", - "No pending shares" : "Keine ausstehenden Freigaben", - "Shares you have received but not confirmed will show up here" : "Freigaben, die du erhalten, aber nicht bestätigt hast, werden hier angezeigt", - "Shares" : "Freigaben", - "No shares" : "Keine Freigaben", - "Shares will show up here" : "Freigaben werden hier angezeigt", - "Restore" : "Wiederherstellen", - "Restore share" : "Freigabe wiederherstellen", - "Something happened. Unable to restore the share." : "Die Freigabe konnte nicht wiederhergestellt werden.", - "Accept share" : "Freigabe akzeptieren", - "Something happened. Unable to accept the share." : "Die Freigabe konnte nicht akzeptiert werden.", - "Reject share" : "Freigabe ablehnen", - "Something happened. Unable to reject the share." : "Die Freigabe konnte nicht abgelehnt werden.", "Waiting…" : "Warte …", "error" : "Fehler", "finished" : "Abgeschlossen", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Keinen kompatiblen Server unter {remote} gefunden", "Invalid server URL" : "Falsche Server-URL", "Failed to add the public link to your Nextcloud" : "Fehler beim Hinzufügen des öffentlichen Links zu deiner Nextcloud", - "No expiration date set" : "Kein Ablaufdatum gesetzt", - "Shared by" : "Geteilt von", "File shares" : "Dateifreigaben", "Downloaded via public link" : "Über den öffentlichen Link heruntergeladen", "Downloaded by {email}" : "Heruntergeladen von {email}", @@ -247,6 +220,7 @@ OC.L10N.register( "Share {propertyName} saved" : "Freigabe {propertyName} gespeichert", "Shared" : "Geteilt", "Share" : "Teilen", + "Shared by" : "Geteilt von", "Shared with" : "Geteilt mit", "Password created successfully" : "Passwort erstellt", "Error generating password from password policy" : "Fehler beim Erzeugen des Passworts aufgrund der Passwortrichtlinie", @@ -254,6 +228,12 @@ OC.L10N.register( "Shared with you and {circle} by {owner}" : "{owner} hat dies mit dir und dem Kreis {circle} geteilt", "Shared with you and the conversation {conversation} by {owner}" : "{owner} hat dies mit dir und der Unterhaltung {conversation} geteilt", "Shared with you in a conversation by {owner}" : "{owner} hat dies mit dir in einer Unterhaltung {conversation} geteilt", + "Shares" : "Freigaben", + "Shared with you" : "Mit dir geteilt", + "Shared with others" : "Von dir geteilt", + "Shared by link" : "Geteilt über einen Link", + "Deleted shares" : "Gelöschte Freigaben", + "Pending shares" : "Ausstehende Freigaben", "No entries found in this folder" : "Keine Einträge in diesem Ordner gefunden", "Name" : "Name", "Share time" : "Freigabezeitpunkt", @@ -272,6 +252,23 @@ OC.L10N.register( "Uploaded files:" : "Hochgeladene Dateien: ", "By uploading files, you agree to the %1$sterms of service%2$s." : "Durch das Hochladen von Dateien stimmst du den %1$sNutzungsbedingungen%2$s zu.", "Add to your Nextcloud" : "Zu deiner Nextcloud hinzufügen", + "Nothing shared with you yet" : "Bis jetzt wurde nichts mit dir geteilt", + "Files and folders others share with you will show up here" : "Mit dir geteilte Dateien und Ordner anderer werden hier erscheinen", + "Nothing shared yet" : "Noch nichts geteilt", + "Files and folders you share will show up here" : "Von dir geteilte Dateien und Ordner werden hier erscheinen", + "No shared links" : "Keine geteilten Links", + "Files and folders you share by link will show up here" : "Per Link freigegebene Dateien und Ordner werden hier erscheinen", + "No deleted shares" : "Keine gelöschten Freigaben", + "Shares you deleted will show up here" : "Von dir gelöschte Freigaben werden hier erscheinen", + "No pending shares" : "Keine ausstehenden Freigaben", + "Shares you have received but not confirmed will show up here" : "Freigaben, die du erhalten, aber nicht bestätigt hast, werden hier angezeigt", + "No shares" : "Keine Freigaben", + "Shares will show up here" : "Freigaben werden hier angezeigt", + "Restore" : "Wiederherstellen", + "Something happened. Unable to restore the share." : "Die Freigabe konnte nicht wiederhergestellt werden.", + "Something happened. Unable to accept the share." : "Die Freigabe konnte nicht akzeptiert werden.", + "Something happened. Unable to reject the share." : "Die Freigabe konnte nicht abgelehnt werden.", + "No expiration date set" : "Kein Ablaufdatum gesetzt", "Sharing %s failed because the back end does not support sciencemesh shares" : "Freigabe von %s fehlgeschlagen, da das Backend keine ScienceMesh-Freigaben unterstützt", "One or more of your shares will expire tomorrow" : "EIne andere Freigabe wird morgen ebenfalls ablaufen", "Science Mesh" : "ScienceMesh", diff --git a/apps/files_sharing/l10n/de.json b/apps/files_sharing/l10n/de.json index fbd16a332dc..5e6c08c953c 100644 --- a/apps/files_sharing/l10n/de.json +++ b/apps/files_sharing/l10n/de.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Mit dir geteilt", - "Nothing shared with you yet" : "Bis jetzt wurde nichts mit dir geteilt", - "Files and folders others share with you will show up here" : "Mit dir geteilte Dateien und Ordner anderer werden hier erscheinen", - "Shared with others" : "Von dir geteilt", - "Nothing shared yet" : "Noch nichts geteilt", - "Files and folders you share will show up here" : "Von dir geteilte Dateien und Ordner werden hier erscheinen", - "Shared by link" : "Geteilt über einen Link", - "No shared links" : "Keine geteilten Links", - "Files and folders you share by link will show up here" : "Per Link freigegebene Dateien und Ordner werden hier erscheinen", - "Deleted shares" : "Gelöschte Freigaben", - "No deleted shares" : "Keine gelöschten Freigaben", - "Shares you deleted will show up here" : "Von dir gelöschte Freigaben werden hier erscheinen", - "Pending shares" : "Ausstehende Freigaben", - "No pending shares" : "Keine ausstehenden Freigaben", - "Shares you have received but not confirmed will show up here" : "Freigaben, die du erhalten, aber nicht bestätigt hast, werden hier angezeigt", - "Shares" : "Freigaben", - "No shares" : "Keine Freigaben", - "Shares will show up here" : "Freigaben werden hier angezeigt", - "Restore" : "Wiederherstellen", - "Restore share" : "Freigabe wiederherstellen", - "Something happened. Unable to restore the share." : "Die Freigabe konnte nicht wiederhergestellt werden.", - "Accept share" : "Freigabe akzeptieren", - "Something happened. Unable to accept the share." : "Die Freigabe konnte nicht akzeptiert werden.", - "Reject share" : "Freigabe ablehnen", - "Something happened. Unable to reject the share." : "Die Freigabe konnte nicht abgelehnt werden.", "Waiting…" : "Warte …", "error" : "Fehler", "finished" : "Abgeschlossen", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "Keinen kompatiblen Server unter {remote} gefunden", "Invalid server URL" : "Falsche Server-URL", "Failed to add the public link to your Nextcloud" : "Fehler beim Hinzufügen des öffentlichen Links zu deiner Nextcloud", - "No expiration date set" : "Kein Ablaufdatum gesetzt", - "Shared by" : "Geteilt von", "File shares" : "Dateifreigaben", "Downloaded via public link" : "Über den öffentlichen Link heruntergeladen", "Downloaded by {email}" : "Heruntergeladen von {email}", @@ -245,6 +218,7 @@ "Share {propertyName} saved" : "Freigabe {propertyName} gespeichert", "Shared" : "Geteilt", "Share" : "Teilen", + "Shared by" : "Geteilt von", "Shared with" : "Geteilt mit", "Password created successfully" : "Passwort erstellt", "Error generating password from password policy" : "Fehler beim Erzeugen des Passworts aufgrund der Passwortrichtlinie", @@ -252,6 +226,12 @@ "Shared with you and {circle} by {owner}" : "{owner} hat dies mit dir und dem Kreis {circle} geteilt", "Shared with you and the conversation {conversation} by {owner}" : "{owner} hat dies mit dir und der Unterhaltung {conversation} geteilt", "Shared with you in a conversation by {owner}" : "{owner} hat dies mit dir in einer Unterhaltung {conversation} geteilt", + "Shares" : "Freigaben", + "Shared with you" : "Mit dir geteilt", + "Shared with others" : "Von dir geteilt", + "Shared by link" : "Geteilt über einen Link", + "Deleted shares" : "Gelöschte Freigaben", + "Pending shares" : "Ausstehende Freigaben", "No entries found in this folder" : "Keine Einträge in diesem Ordner gefunden", "Name" : "Name", "Share time" : "Freigabezeitpunkt", @@ -270,6 +250,23 @@ "Uploaded files:" : "Hochgeladene Dateien: ", "By uploading files, you agree to the %1$sterms of service%2$s." : "Durch das Hochladen von Dateien stimmst du den %1$sNutzungsbedingungen%2$s zu.", "Add to your Nextcloud" : "Zu deiner Nextcloud hinzufügen", + "Nothing shared with you yet" : "Bis jetzt wurde nichts mit dir geteilt", + "Files and folders others share with you will show up here" : "Mit dir geteilte Dateien und Ordner anderer werden hier erscheinen", + "Nothing shared yet" : "Noch nichts geteilt", + "Files and folders you share will show up here" : "Von dir geteilte Dateien und Ordner werden hier erscheinen", + "No shared links" : "Keine geteilten Links", + "Files and folders you share by link will show up here" : "Per Link freigegebene Dateien und Ordner werden hier erscheinen", + "No deleted shares" : "Keine gelöschten Freigaben", + "Shares you deleted will show up here" : "Von dir gelöschte Freigaben werden hier erscheinen", + "No pending shares" : "Keine ausstehenden Freigaben", + "Shares you have received but not confirmed will show up here" : "Freigaben, die du erhalten, aber nicht bestätigt hast, werden hier angezeigt", + "No shares" : "Keine Freigaben", + "Shares will show up here" : "Freigaben werden hier angezeigt", + "Restore" : "Wiederherstellen", + "Something happened. Unable to restore the share." : "Die Freigabe konnte nicht wiederhergestellt werden.", + "Something happened. Unable to accept the share." : "Die Freigabe konnte nicht akzeptiert werden.", + "Something happened. Unable to reject the share." : "Die Freigabe konnte nicht abgelehnt werden.", + "No expiration date set" : "Kein Ablaufdatum gesetzt", "Sharing %s failed because the back end does not support sciencemesh shares" : "Freigabe von %s fehlgeschlagen, da das Backend keine ScienceMesh-Freigaben unterstützt", "One or more of your shares will expire tomorrow" : "EIne andere Freigabe wird morgen ebenfalls ablaufen", "Science Mesh" : "ScienceMesh", diff --git a/apps/files_sharing/l10n/de_DE.js b/apps/files_sharing/l10n/de_DE.js index 669cad0935c..18fbc95adca 100644 --- a/apps/files_sharing/l10n/de_DE.js +++ b/apps/files_sharing/l10n/de_DE.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Mit Ihnen geteilt", - "Nothing shared with you yet" : "Bis jetzt wurde nichts mit Ihnen geteilt", - "Files and folders others share with you will show up here" : "Mit Ihnen geteilte Dateien und Ordner anderer werden hier erscheinen", - "Shared with others" : "Von Ihnen geteilt", - "Nothing shared yet" : "Noch nichts geteilt", - "Files and folders you share will show up here" : "Dateien und Ordner, die Sie teilen, werden hier erscheinen", - "Shared by link" : "Geteilt über einen Link", - "No shared links" : "Keine geteilten Links", - "Files and folders you share by link will show up here" : "Per Link freigegebene Dateien und Ordner werden hier erscheinen", - "Deleted shares" : "Gelöschte Freigaben", - "No deleted shares" : "Keine gelöschten Freigaben", - "Shares you deleted will show up here" : "Von Ihnen gelöschte Freigaben werden hier angezeigt", - "Pending shares" : "Ausstehende Freigaben", - "No pending shares" : "Keine ausstehenden Freigaben", - "Shares you have received but not confirmed will show up here" : "Freigaben, die Sie erhalten, aber nicht bestätigt haben, werden hier angezeigt", - "Shares" : "Freigaben", - "No shares" : "Keine Freigaben", - "Shares will show up here" : "Freigaben werden hier angezeigt", - "Restore" : "Wiederherstellen", - "Restore share" : "Freigabe wiederherstellen", - "Something happened. Unable to restore the share." : "Die Freigabe konnte nicht wiederhergestellt werden.", - "Accept share" : "Freigabe akzeptieren", - "Something happened. Unable to accept the share." : "Die Freigabe konnte nicht akzeptiert werden.", - "Reject share" : "Freigabe ablehnen", - "Something happened. Unable to reject the share." : "Die Freigabe konnte nicht abgelehnt werden.", "Waiting…" : "Warte…", "error" : "Fehler", "finished" : "Abgeschlossen", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Keinen kompatiblen Server unter {remote} gefunden", "Invalid server URL" : "Falsche Server-URL", "Failed to add the public link to your Nextcloud" : "Fehler beim Hinzufügen des öffentlichen Links zu Ihrer Nextcloud", - "No expiration date set" : "Kein Ablaufdatum gesetzt", - "Shared by" : "Geteilt von", "File shares" : "Dateifreigaben", "Downloaded via public link" : "Über den öffentlichen Link heruntergeladen", "Downloaded by {email}" : "Heruntergeladen von {email}", @@ -237,6 +210,10 @@ OC.L10N.register( "Expires {relativetime}" : "Läuft {relativetime} ab", "this share just expired." : "Diese Freigabe ist gerade abgelaufen.", "Shared with you by {owner}" : "{owner} hat diese mit Ihnen geteilt", + "_Accept share_::_Accept shares_" : ["Freigabe akzeptieren","Freigaben akzeptieren"], + "Open in files" : "In Dateien-App öffnen", + "_Reject share_::_Reject shares_" : ["Freigabe ablehnen","Freigaben ablehnen"], + "_Restore share_::_Restore shares_" : ["Freigabe wiederherstellen","Freigaben wiederherstellen"], "Link to a file" : "Mit einer Datei verknüpfen", "Error creating the share: {errorMessage}" : "Fehler beim Erstellen der Freigabe: {errorMessage}", "Error creating the share" : "Fehler beim Erstellen der Freigabe", @@ -247,6 +224,7 @@ OC.L10N.register( "Share {propertyName} saved" : "Freigabe {propertyName} gespeichert", "Shared" : "Geteilt", "Share" : "Teilen", + "Shared by" : "Geteilt von", "Shared with" : "Geteilt mit", "Password created successfully" : "Passwort erstellt", "Error generating password from password policy" : "Fehler beim Erzeugen des Passworts aufgrund der Passwortrichtlinie", @@ -254,6 +232,18 @@ OC.L10N.register( "Shared with you and {circle} by {owner}" : "{owner} hat dies mit Dir und dem Kreis {circle} geteilt", "Shared with you and the conversation {conversation} by {owner}" : "{owner} hat diese mit Ihnen und der Unterhaltung {conversation} geteilt", "Shared with you in a conversation by {owner}" : "{owner} hat diese mit Ihnen in einer Unterhaltung geteilt", + "Shares" : "Freigaben", + "Overview of shared files." : "Übersicht geteilter Dateien", + "Shared with you" : "Mit Ihnen geteilt", + "List of files that are shared with you." : "Liste der Dateien, die mit Ihnen geteilt wurden.", + "Shared with others" : "Von Ihnen geteilt", + "List of files that you shared with others." : "Liste der Dateien die Sie mit anderen geteilt haben.", + "Shared by link" : "Geteilt über einen Link", + "List of files that are shared by link." : "Liste der Dateien, die mittel Link geteilt wurden.", + "Deleted shares" : "Gelöschte Freigaben", + "List of shares that you removed yourself from." : "Liste der FReigaben, aus denen Sie sich selbst entfernt haben.", + "Pending shares" : "Ausstehende Freigaben", + "List of unapproved shares." : "Liste ungeprüfter Freigaben.", "No entries found in this folder" : "Keine Einträge in diesem Ordner gefunden", "Name" : "Name", "Share time" : "Freigabezeitpunkt", @@ -272,6 +262,23 @@ OC.L10N.register( "Uploaded files:" : "Hochgeladene Dateien: ", "By uploading files, you agree to the %1$sterms of service%2$s." : "Durch das Hochladen von Dateien stimmen Sie den %1$sNutzungsbedingungen%2$s zu.", "Add to your Nextcloud" : "Zu Ihrer Nextcloud hinzufügen", + "Nothing shared with you yet" : "Bis jetzt wurde nichts mit Ihnen geteilt", + "Files and folders others share with you will show up here" : "Mit Ihnen geteilte Dateien und Ordner anderer werden hier erscheinen", + "Nothing shared yet" : "Noch nichts geteilt", + "Files and folders you share will show up here" : "Dateien und Ordner, die Sie teilen, werden hier erscheinen", + "No shared links" : "Keine geteilten Links", + "Files and folders you share by link will show up here" : "Per Link freigegebene Dateien und Ordner werden hier erscheinen", + "No deleted shares" : "Keine gelöschten Freigaben", + "Shares you deleted will show up here" : "Von Ihnen gelöschte Freigaben werden hier angezeigt", + "No pending shares" : "Keine ausstehenden Freigaben", + "Shares you have received but not confirmed will show up here" : "Freigaben, die Sie erhalten, aber nicht bestätigt haben, werden hier angezeigt", + "No shares" : "Keine Freigaben", + "Shares will show up here" : "Freigaben werden hier angezeigt", + "Restore" : "Wiederherstellen", + "Something happened. Unable to restore the share." : "Die Freigabe konnte nicht wiederhergestellt werden.", + "Something happened. Unable to accept the share." : "Die Freigabe konnte nicht akzeptiert werden.", + "Something happened. Unable to reject the share." : "Die Freigabe konnte nicht abgelehnt werden.", + "No expiration date set" : "Kein Ablaufdatum gesetzt", "Sharing %s failed because the back end does not support sciencemesh shares" : "Freigabe von %s fehlgeschlagen, da das Backend keine ScienceMesh-Freigaben unterstützt", "One or more of your shares will expire tomorrow" : "EIne oder mehrere Ihrer Freigaben werden morgen ablaufen", "Science Mesh" : "ScienceMesh", diff --git a/apps/files_sharing/l10n/de_DE.json b/apps/files_sharing/l10n/de_DE.json index 9d3a395fc75..462f39a4ebe 100644 --- a/apps/files_sharing/l10n/de_DE.json +++ b/apps/files_sharing/l10n/de_DE.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Mit Ihnen geteilt", - "Nothing shared with you yet" : "Bis jetzt wurde nichts mit Ihnen geteilt", - "Files and folders others share with you will show up here" : "Mit Ihnen geteilte Dateien und Ordner anderer werden hier erscheinen", - "Shared with others" : "Von Ihnen geteilt", - "Nothing shared yet" : "Noch nichts geteilt", - "Files and folders you share will show up here" : "Dateien und Ordner, die Sie teilen, werden hier erscheinen", - "Shared by link" : "Geteilt über einen Link", - "No shared links" : "Keine geteilten Links", - "Files and folders you share by link will show up here" : "Per Link freigegebene Dateien und Ordner werden hier erscheinen", - "Deleted shares" : "Gelöschte Freigaben", - "No deleted shares" : "Keine gelöschten Freigaben", - "Shares you deleted will show up here" : "Von Ihnen gelöschte Freigaben werden hier angezeigt", - "Pending shares" : "Ausstehende Freigaben", - "No pending shares" : "Keine ausstehenden Freigaben", - "Shares you have received but not confirmed will show up here" : "Freigaben, die Sie erhalten, aber nicht bestätigt haben, werden hier angezeigt", - "Shares" : "Freigaben", - "No shares" : "Keine Freigaben", - "Shares will show up here" : "Freigaben werden hier angezeigt", - "Restore" : "Wiederherstellen", - "Restore share" : "Freigabe wiederherstellen", - "Something happened. Unable to restore the share." : "Die Freigabe konnte nicht wiederhergestellt werden.", - "Accept share" : "Freigabe akzeptieren", - "Something happened. Unable to accept the share." : "Die Freigabe konnte nicht akzeptiert werden.", - "Reject share" : "Freigabe ablehnen", - "Something happened. Unable to reject the share." : "Die Freigabe konnte nicht abgelehnt werden.", "Waiting…" : "Warte…", "error" : "Fehler", "finished" : "Abgeschlossen", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "Keinen kompatiblen Server unter {remote} gefunden", "Invalid server URL" : "Falsche Server-URL", "Failed to add the public link to your Nextcloud" : "Fehler beim Hinzufügen des öffentlichen Links zu Ihrer Nextcloud", - "No expiration date set" : "Kein Ablaufdatum gesetzt", - "Shared by" : "Geteilt von", "File shares" : "Dateifreigaben", "Downloaded via public link" : "Über den öffentlichen Link heruntergeladen", "Downloaded by {email}" : "Heruntergeladen von {email}", @@ -235,6 +208,10 @@ "Expires {relativetime}" : "Läuft {relativetime} ab", "this share just expired." : "Diese Freigabe ist gerade abgelaufen.", "Shared with you by {owner}" : "{owner} hat diese mit Ihnen geteilt", + "_Accept share_::_Accept shares_" : ["Freigabe akzeptieren","Freigaben akzeptieren"], + "Open in files" : "In Dateien-App öffnen", + "_Reject share_::_Reject shares_" : ["Freigabe ablehnen","Freigaben ablehnen"], + "_Restore share_::_Restore shares_" : ["Freigabe wiederherstellen","Freigaben wiederherstellen"], "Link to a file" : "Mit einer Datei verknüpfen", "Error creating the share: {errorMessage}" : "Fehler beim Erstellen der Freigabe: {errorMessage}", "Error creating the share" : "Fehler beim Erstellen der Freigabe", @@ -245,6 +222,7 @@ "Share {propertyName} saved" : "Freigabe {propertyName} gespeichert", "Shared" : "Geteilt", "Share" : "Teilen", + "Shared by" : "Geteilt von", "Shared with" : "Geteilt mit", "Password created successfully" : "Passwort erstellt", "Error generating password from password policy" : "Fehler beim Erzeugen des Passworts aufgrund der Passwortrichtlinie", @@ -252,6 +230,18 @@ "Shared with you and {circle} by {owner}" : "{owner} hat dies mit Dir und dem Kreis {circle} geteilt", "Shared with you and the conversation {conversation} by {owner}" : "{owner} hat diese mit Ihnen und der Unterhaltung {conversation} geteilt", "Shared with you in a conversation by {owner}" : "{owner} hat diese mit Ihnen in einer Unterhaltung geteilt", + "Shares" : "Freigaben", + "Overview of shared files." : "Übersicht geteilter Dateien", + "Shared with you" : "Mit Ihnen geteilt", + "List of files that are shared with you." : "Liste der Dateien, die mit Ihnen geteilt wurden.", + "Shared with others" : "Von Ihnen geteilt", + "List of files that you shared with others." : "Liste der Dateien die Sie mit anderen geteilt haben.", + "Shared by link" : "Geteilt über einen Link", + "List of files that are shared by link." : "Liste der Dateien, die mittel Link geteilt wurden.", + "Deleted shares" : "Gelöschte Freigaben", + "List of shares that you removed yourself from." : "Liste der FReigaben, aus denen Sie sich selbst entfernt haben.", + "Pending shares" : "Ausstehende Freigaben", + "List of unapproved shares." : "Liste ungeprüfter Freigaben.", "No entries found in this folder" : "Keine Einträge in diesem Ordner gefunden", "Name" : "Name", "Share time" : "Freigabezeitpunkt", @@ -270,6 +260,23 @@ "Uploaded files:" : "Hochgeladene Dateien: ", "By uploading files, you agree to the %1$sterms of service%2$s." : "Durch das Hochladen von Dateien stimmen Sie den %1$sNutzungsbedingungen%2$s zu.", "Add to your Nextcloud" : "Zu Ihrer Nextcloud hinzufügen", + "Nothing shared with you yet" : "Bis jetzt wurde nichts mit Ihnen geteilt", + "Files and folders others share with you will show up here" : "Mit Ihnen geteilte Dateien und Ordner anderer werden hier erscheinen", + "Nothing shared yet" : "Noch nichts geteilt", + "Files and folders you share will show up here" : "Dateien und Ordner, die Sie teilen, werden hier erscheinen", + "No shared links" : "Keine geteilten Links", + "Files and folders you share by link will show up here" : "Per Link freigegebene Dateien und Ordner werden hier erscheinen", + "No deleted shares" : "Keine gelöschten Freigaben", + "Shares you deleted will show up here" : "Von Ihnen gelöschte Freigaben werden hier angezeigt", + "No pending shares" : "Keine ausstehenden Freigaben", + "Shares you have received but not confirmed will show up here" : "Freigaben, die Sie erhalten, aber nicht bestätigt haben, werden hier angezeigt", + "No shares" : "Keine Freigaben", + "Shares will show up here" : "Freigaben werden hier angezeigt", + "Restore" : "Wiederherstellen", + "Something happened. Unable to restore the share." : "Die Freigabe konnte nicht wiederhergestellt werden.", + "Something happened. Unable to accept the share." : "Die Freigabe konnte nicht akzeptiert werden.", + "Something happened. Unable to reject the share." : "Die Freigabe konnte nicht abgelehnt werden.", + "No expiration date set" : "Kein Ablaufdatum gesetzt", "Sharing %s failed because the back end does not support sciencemesh shares" : "Freigabe von %s fehlgeschlagen, da das Backend keine ScienceMesh-Freigaben unterstützt", "One or more of your shares will expire tomorrow" : "EIne oder mehrere Ihrer Freigaben werden morgen ablaufen", "Science Mesh" : "ScienceMesh", diff --git a/apps/files_sharing/l10n/el.js b/apps/files_sharing/l10n/el.js index 1025bab6094..730b0a59cfb 100644 --- a/apps/files_sharing/l10n/el.js +++ b/apps/files_sharing/l10n/el.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Διαμοιρασμένα με εσάς", - "Nothing shared with you yet" : "Κανένα αρχείο δεν έχει διαμοιραστεί ακόμα με εσάς.", - "Files and folders others share with you will show up here" : "Τα αρχεία και οι φάκελοι που άλλοι διαμοιράζονται με εσάς θα εμφανιστούν εδώ", - "Shared with others" : "Διαμοιρασμένα με άλλους", - "Nothing shared yet" : "Δεν έχει διαμοιραστεί τίποτα μέχρι στιγμής", - "Files and folders you share will show up here" : "Τα αρχεία και οι φάκελοι που διαμοιράζεστε θα εμφανιστούν εδώ", - "Shared by link" : "Διαμοιρασμένα μέσω συνδέσμου", - "No shared links" : "Κανένας διαμοιρασμένος σύνδεσμος", - "Files and folders you share by link will show up here" : "Τα αρχεία και οι φάκελοι που διαμοιράζεστε μέσω συνδέσμου θα εμφανιστούν εδώ", - "Deleted shares" : "Διαγραμμένα κοινόχρηστα", - "No deleted shares" : "Δεν υπάρχουν διαγραμμένα κοινόχρηστα", - "Shares you deleted will show up here" : "Τα κοινόχρηστα που διαγράψατε θα εμφανίζονται εδώ", - "Pending shares" : "Κοινή χρήση σε εκκρεμότητα", - "No pending shares" : "Δεν εκκρεμούν κοινόχρηστα", - "Shares you have received but not confirmed will show up here" : "Κοινόχρηστα που λάβατε αλλά δεν επιβεβαιώθηκαν θα εμφανίζονται εδώ", - "Shares" : "Κοινόχρηστα", - "No shares" : "Κανένα κοινόχρηστο", - "Shares will show up here" : "Τα κοινόχρηστα θα εμφανιστούν εδώ", - "Restore" : "Επαναφορά", - "Restore share" : "Επαναφορά κοινόχρηστου", - "Something happened. Unable to restore the share." : "Κάτι συνέβη. Δεν μπορεί να γίνει επαναφορά.", - "Accept share" : "Αποδοχή κοινόχρηστου", - "Something happened. Unable to accept the share." : "Κάτι συνέβη. Δεν μπορεί να γίνει η αποδοχή.", - "Reject share" : "Απόρριψη κοινόχρηστου", - "Something happened. Unable to reject the share." : "Κάτι συνέβη. Δεν μπορεί να απορριφθεί το κοινόχρηστο", "Waiting…" : "Αναμονή...", "error" : "σφάλμα ", "finished" : "ολοκληρώθηκε", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Δεν βρέθηκε συμβατός διακομιστής σε {remote}", "Invalid server URL" : "Μη έγκυρο URL διακομιστή", "Failed to add the public link to your Nextcloud" : "Αποτυχία στην πρόσθεση του κοινού συνδέσμου στο Nextcloud σας", - "No expiration date set" : "Δεν ορίστηκε ημερομηνία λήξης", - "Shared by" : "Διαμοιράστηκε από", "File shares" : "Κοινή χρήση αρχείων", "Downloaded via public link" : "Μεταφορτώθηκε μέσω δημόσιου συνδέσμου", "Downloaded by {email}" : "Μεταφορτώθηκε από {email}", @@ -230,12 +203,19 @@ OC.L10N.register( "Error updating the share" : "Σφάλμα κατά την ενημέρωση του κοινόχρηστου", "Shared" : "Κοινόχρηστα", "Share" : "Διαμοιρασμός", + "Shared by" : "Διαμοιράστηκε από", "Shared with" : "Διαμοιράστηκε με", "Password created successfully" : "Συνθηματικό δημιουργήθηκε με επιτυχία", "Shared with you and the group {group} by {owner}" : "Διαμοιράστηκε με σας και με την ομάδα {group} του {owner}", "Shared with you and {circle} by {owner}" : "Διαμοιράστηκε με σας και τον {circle} από τον {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Διαμοιράστηκε με σας και με τη συζήτηση {conversation} από {owner}", "Shared with you in a conversation by {owner}" : "Διαμοιράστηκε με σας από τον {owner}", + "Shares" : "Κοινόχρηστα", + "Shared with you" : "Διαμοιρασμένα με εσάς", + "Shared with others" : "Διαμοιρασμένα με άλλους", + "Shared by link" : "Διαμοιρασμένα μέσω συνδέσμου", + "Deleted shares" : "Διαγραμμένα κοινόχρηστα", + "Pending shares" : "Κοινή χρήση σε εκκρεμότητα", "No entries found in this folder" : "Δεν βρέθηκαν καταχωρήσεις σε αυτόν το φάκελο", "Name" : "Όνομα", "Share time" : "Χρόνος διαμοιρασμού", @@ -254,6 +234,23 @@ OC.L10N.register( "Uploaded files:" : "Αποστολή αρχείων:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Με την μεταφόρτωση αρχείων, συμφωνείτε με %1$sόρους χρήσεως %2$s.", "Add to your Nextcloud" : "Προσθήκη στο Nextcloud σου", + "Nothing shared with you yet" : "Κανένα αρχείο δεν έχει διαμοιραστεί ακόμα με εσάς.", + "Files and folders others share with you will show up here" : "Τα αρχεία και οι φάκελοι που άλλοι διαμοιράζονται με εσάς θα εμφανιστούν εδώ", + "Nothing shared yet" : "Δεν έχει διαμοιραστεί τίποτα μέχρι στιγμής", + "Files and folders you share will show up here" : "Τα αρχεία και οι φάκελοι που διαμοιράζεστε θα εμφανιστούν εδώ", + "No shared links" : "Κανένας διαμοιρασμένος σύνδεσμος", + "Files and folders you share by link will show up here" : "Τα αρχεία και οι φάκελοι που διαμοιράζεστε μέσω συνδέσμου θα εμφανιστούν εδώ", + "No deleted shares" : "Δεν υπάρχουν διαγραμμένα κοινόχρηστα", + "Shares you deleted will show up here" : "Τα κοινόχρηστα που διαγράψατε θα εμφανίζονται εδώ", + "No pending shares" : "Δεν εκκρεμούν κοινόχρηστα", + "Shares you have received but not confirmed will show up here" : "Κοινόχρηστα που λάβατε αλλά δεν επιβεβαιώθηκαν θα εμφανίζονται εδώ", + "No shares" : "Κανένα κοινόχρηστο", + "Shares will show up here" : "Τα κοινόχρηστα θα εμφανιστούν εδώ", + "Restore" : "Επαναφορά", + "Something happened. Unable to restore the share." : "Κάτι συνέβη. Δεν μπορεί να γίνει επαναφορά.", + "Something happened. Unable to accept the share." : "Κάτι συνέβη. Δεν μπορεί να γίνει η αποδοχή.", + "Something happened. Unable to reject the share." : "Κάτι συνέβη. Δεν μπορεί να απορριφθεί το κοινόχρηστο", + "No expiration date set" : "Δεν ορίστηκε ημερομηνία λήξης", "One or more of your shares will expire tomorrow" : "Μία ή περισσότερες κοινές χρήσης θα λήξουν ούριο" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/el.json b/apps/files_sharing/l10n/el.json index 54fdf195f92..ab669b0f4d9 100644 --- a/apps/files_sharing/l10n/el.json +++ b/apps/files_sharing/l10n/el.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Διαμοιρασμένα με εσάς", - "Nothing shared with you yet" : "Κανένα αρχείο δεν έχει διαμοιραστεί ακόμα με εσάς.", - "Files and folders others share with you will show up here" : "Τα αρχεία και οι φάκελοι που άλλοι διαμοιράζονται με εσάς θα εμφανιστούν εδώ", - "Shared with others" : "Διαμοιρασμένα με άλλους", - "Nothing shared yet" : "Δεν έχει διαμοιραστεί τίποτα μέχρι στιγμής", - "Files and folders you share will show up here" : "Τα αρχεία και οι φάκελοι που διαμοιράζεστε θα εμφανιστούν εδώ", - "Shared by link" : "Διαμοιρασμένα μέσω συνδέσμου", - "No shared links" : "Κανένας διαμοιρασμένος σύνδεσμος", - "Files and folders you share by link will show up here" : "Τα αρχεία και οι φάκελοι που διαμοιράζεστε μέσω συνδέσμου θα εμφανιστούν εδώ", - "Deleted shares" : "Διαγραμμένα κοινόχρηστα", - "No deleted shares" : "Δεν υπάρχουν διαγραμμένα κοινόχρηστα", - "Shares you deleted will show up here" : "Τα κοινόχρηστα που διαγράψατε θα εμφανίζονται εδώ", - "Pending shares" : "Κοινή χρήση σε εκκρεμότητα", - "No pending shares" : "Δεν εκκρεμούν κοινόχρηστα", - "Shares you have received but not confirmed will show up here" : "Κοινόχρηστα που λάβατε αλλά δεν επιβεβαιώθηκαν θα εμφανίζονται εδώ", - "Shares" : "Κοινόχρηστα", - "No shares" : "Κανένα κοινόχρηστο", - "Shares will show up here" : "Τα κοινόχρηστα θα εμφανιστούν εδώ", - "Restore" : "Επαναφορά", - "Restore share" : "Επαναφορά κοινόχρηστου", - "Something happened. Unable to restore the share." : "Κάτι συνέβη. Δεν μπορεί να γίνει επαναφορά.", - "Accept share" : "Αποδοχή κοινόχρηστου", - "Something happened. Unable to accept the share." : "Κάτι συνέβη. Δεν μπορεί να γίνει η αποδοχή.", - "Reject share" : "Απόρριψη κοινόχρηστου", - "Something happened. Unable to reject the share." : "Κάτι συνέβη. Δεν μπορεί να απορριφθεί το κοινόχρηστο", "Waiting…" : "Αναμονή...", "error" : "σφάλμα ", "finished" : "ολοκληρώθηκε", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "Δεν βρέθηκε συμβατός διακομιστής σε {remote}", "Invalid server URL" : "Μη έγκυρο URL διακομιστή", "Failed to add the public link to your Nextcloud" : "Αποτυχία στην πρόσθεση του κοινού συνδέσμου στο Nextcloud σας", - "No expiration date set" : "Δεν ορίστηκε ημερομηνία λήξης", - "Shared by" : "Διαμοιράστηκε από", "File shares" : "Κοινή χρήση αρχείων", "Downloaded via public link" : "Μεταφορτώθηκε μέσω δημόσιου συνδέσμου", "Downloaded by {email}" : "Μεταφορτώθηκε από {email}", @@ -228,12 +201,19 @@ "Error updating the share" : "Σφάλμα κατά την ενημέρωση του κοινόχρηστου", "Shared" : "Κοινόχρηστα", "Share" : "Διαμοιρασμός", + "Shared by" : "Διαμοιράστηκε από", "Shared with" : "Διαμοιράστηκε με", "Password created successfully" : "Συνθηματικό δημιουργήθηκε με επιτυχία", "Shared with you and the group {group} by {owner}" : "Διαμοιράστηκε με σας και με την ομάδα {group} του {owner}", "Shared with you and {circle} by {owner}" : "Διαμοιράστηκε με σας και τον {circle} από τον {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Διαμοιράστηκε με σας και με τη συζήτηση {conversation} από {owner}", "Shared with you in a conversation by {owner}" : "Διαμοιράστηκε με σας από τον {owner}", + "Shares" : "Κοινόχρηστα", + "Shared with you" : "Διαμοιρασμένα με εσάς", + "Shared with others" : "Διαμοιρασμένα με άλλους", + "Shared by link" : "Διαμοιρασμένα μέσω συνδέσμου", + "Deleted shares" : "Διαγραμμένα κοινόχρηστα", + "Pending shares" : "Κοινή χρήση σε εκκρεμότητα", "No entries found in this folder" : "Δεν βρέθηκαν καταχωρήσεις σε αυτόν το φάκελο", "Name" : "Όνομα", "Share time" : "Χρόνος διαμοιρασμού", @@ -252,6 +232,23 @@ "Uploaded files:" : "Αποστολή αρχείων:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Με την μεταφόρτωση αρχείων, συμφωνείτε με %1$sόρους χρήσεως %2$s.", "Add to your Nextcloud" : "Προσθήκη στο Nextcloud σου", + "Nothing shared with you yet" : "Κανένα αρχείο δεν έχει διαμοιραστεί ακόμα με εσάς.", + "Files and folders others share with you will show up here" : "Τα αρχεία και οι φάκελοι που άλλοι διαμοιράζονται με εσάς θα εμφανιστούν εδώ", + "Nothing shared yet" : "Δεν έχει διαμοιραστεί τίποτα μέχρι στιγμής", + "Files and folders you share will show up here" : "Τα αρχεία και οι φάκελοι που διαμοιράζεστε θα εμφανιστούν εδώ", + "No shared links" : "Κανένας διαμοιρασμένος σύνδεσμος", + "Files and folders you share by link will show up here" : "Τα αρχεία και οι φάκελοι που διαμοιράζεστε μέσω συνδέσμου θα εμφανιστούν εδώ", + "No deleted shares" : "Δεν υπάρχουν διαγραμμένα κοινόχρηστα", + "Shares you deleted will show up here" : "Τα κοινόχρηστα που διαγράψατε θα εμφανίζονται εδώ", + "No pending shares" : "Δεν εκκρεμούν κοινόχρηστα", + "Shares you have received but not confirmed will show up here" : "Κοινόχρηστα που λάβατε αλλά δεν επιβεβαιώθηκαν θα εμφανίζονται εδώ", + "No shares" : "Κανένα κοινόχρηστο", + "Shares will show up here" : "Τα κοινόχρηστα θα εμφανιστούν εδώ", + "Restore" : "Επαναφορά", + "Something happened. Unable to restore the share." : "Κάτι συνέβη. Δεν μπορεί να γίνει επαναφορά.", + "Something happened. Unable to accept the share." : "Κάτι συνέβη. Δεν μπορεί να γίνει η αποδοχή.", + "Something happened. Unable to reject the share." : "Κάτι συνέβη. Δεν μπορεί να απορριφθεί το κοινόχρηστο", + "No expiration date set" : "Δεν ορίστηκε ημερομηνία λήξης", "One or more of your shares will expire tomorrow" : "Μία ή περισσότερες κοινές χρήσης θα λήξουν ούριο" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/en_GB.js b/apps/files_sharing/l10n/en_GB.js index d92d79f6fca..58cd53b0672 100644 --- a/apps/files_sharing/l10n/en_GB.js +++ b/apps/files_sharing/l10n/en_GB.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Shared with you", - "Nothing shared with you yet" : "Nothing shared with you yet", - "Files and folders others share with you will show up here" : "Files and folders others share with you will show up here", - "Shared with others" : "Shared with others", - "Nothing shared yet" : "Nothing shared yet", - "Files and folders you share will show up here" : "Files and folders you share will show up here", - "Shared by link" : "Shared by link", - "No shared links" : "No shared links", - "Files and folders you share by link will show up here" : "Files and folders you share by link will show up here", - "Deleted shares" : "Deleted shares", - "No deleted shares" : "No deleted shares", - "Shares you deleted will show up here" : "Shares you deleted will show up here", - "Pending shares" : "Pending shares", - "No pending shares" : "No pending shares", - "Shares you have received but not confirmed will show up here" : "Shares you have received but not confirmed will show up here", - "Shares" : "Shares", - "No shares" : "No shares", - "Shares will show up here" : "Shares will show up here", - "Restore" : "Restore", - "Restore share" : "Restore share", - "Something happened. Unable to restore the share." : "Something happened. Unable to restore the share.", - "Accept share" : "Accept share", - "Something happened. Unable to accept the share." : "Something happened. Unable to accept the share.", - "Reject share" : "Reject share", - "Something happened. Unable to reject the share." : "Something happened. Unable to reject the share.", "Waiting…" : "Waiting…", "error" : "error", "finished" : "finished", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "No compatible server found at {remote}", "Invalid server URL" : "Invalid server URL", "Failed to add the public link to your Nextcloud" : "Failed to add the public link to your Nextcloud", - "No expiration date set" : "No expiration date set", - "Shared by" : "Shared by", "File shares" : "File shares", "Downloaded via public link" : "Downloaded via public link", "Downloaded by {email}" : "Downloaded by {email}", @@ -237,6 +210,10 @@ OC.L10N.register( "Expires {relativetime}" : "Expires {relativetime}", "this share just expired." : "this share just expired.", "Shared with you by {owner}" : "Shared with you by {owner}", + "_Accept share_::_Accept shares_" : ["Accept share","Accept shares"], + "Open in files" : "Open in files", + "_Reject share_::_Reject shares_" : ["Reject share","Reject shares"], + "_Restore share_::_Restore shares_" : ["Restore share","Restore shares"], "Link to a file" : "Link to a file", "Error creating the share: {errorMessage}" : "Error creating the share: {errorMessage}", "Error creating the share" : "Error creating the share", @@ -247,6 +224,7 @@ OC.L10N.register( "Share {propertyName} saved" : "Share {propertyName} saved", "Shared" : "Shared", "Share" : "Share", + "Shared by" : "Shared by", "Shared with" : "Shared with", "Password created successfully" : "Password created successfully", "Error generating password from password policy" : "Error generating password from password policy", @@ -254,6 +232,18 @@ OC.L10N.register( "Shared with you and {circle} by {owner}" : "Shared with you and {circle} by {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Shared with you and the conversation {conversation} by {owner}", "Shared with you in a conversation by {owner}" : "Shared with you in a conversation by {owner}", + "Shares" : "Shares", + "Overview of shared files." : "Overview of shared files.", + "Shared with you" : "Shared with you", + "List of files that are shared with you." : "List of files that are shared with you.", + "Shared with others" : "Shared with others", + "List of files that you shared with others." : "List of files that you shared with others.", + "Shared by link" : "Shared by link", + "List of files that are shared by link." : "List of files that are shared by link.", + "Deleted shares" : "Deleted shares", + "List of shares that you removed yourself from." : "List of shares that you removed yourself from.", + "Pending shares" : "Pending shares", + "List of unapproved shares." : "List of unapproved shares.", "No entries found in this folder" : "No entries found in this folder", "Name" : "Name", "Share time" : "Share time", @@ -272,6 +262,23 @@ OC.L10N.register( "Uploaded files:" : "Uploaded files:", "By uploading files, you agree to the %1$sterms of service%2$s." : "By uploading files, you agree to the %1$sterms of service%2$s.", "Add to your Nextcloud" : "Add to your Nextcloud", + "Nothing shared with you yet" : "Nothing shared with you yet", + "Files and folders others share with you will show up here" : "Files and folders others share with you will show up here", + "Nothing shared yet" : "Nothing shared yet", + "Files and folders you share will show up here" : "Files and folders you share will show up here", + "No shared links" : "No shared links", + "Files and folders you share by link will show up here" : "Files and folders you share by link will show up here", + "No deleted shares" : "No deleted shares", + "Shares you deleted will show up here" : "Shares you deleted will show up here", + "No pending shares" : "No pending shares", + "Shares you have received but not confirmed will show up here" : "Shares you have received but not confirmed will show up here", + "No shares" : "No shares", + "Shares will show up here" : "Shares will show up here", + "Restore" : "Restore", + "Something happened. Unable to restore the share." : "Something happened. Unable to restore the share.", + "Something happened. Unable to accept the share." : "Something happened. Unable to accept the share.", + "Something happened. Unable to reject the share." : "Something happened. Unable to reject the share.", + "No expiration date set" : "No expiration date set", "Sharing %s failed because the back end does not support sciencemesh shares" : "Sharing %s failed because the back end does not support sciencemesh shares", "One or more of your shares will expire tomorrow" : "One or more of your shares will expire tomorrow", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/en_GB.json b/apps/files_sharing/l10n/en_GB.json index d38a15b711e..c59cc07c77f 100644 --- a/apps/files_sharing/l10n/en_GB.json +++ b/apps/files_sharing/l10n/en_GB.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Shared with you", - "Nothing shared with you yet" : "Nothing shared with you yet", - "Files and folders others share with you will show up here" : "Files and folders others share with you will show up here", - "Shared with others" : "Shared with others", - "Nothing shared yet" : "Nothing shared yet", - "Files and folders you share will show up here" : "Files and folders you share will show up here", - "Shared by link" : "Shared by link", - "No shared links" : "No shared links", - "Files and folders you share by link will show up here" : "Files and folders you share by link will show up here", - "Deleted shares" : "Deleted shares", - "No deleted shares" : "No deleted shares", - "Shares you deleted will show up here" : "Shares you deleted will show up here", - "Pending shares" : "Pending shares", - "No pending shares" : "No pending shares", - "Shares you have received but not confirmed will show up here" : "Shares you have received but not confirmed will show up here", - "Shares" : "Shares", - "No shares" : "No shares", - "Shares will show up here" : "Shares will show up here", - "Restore" : "Restore", - "Restore share" : "Restore share", - "Something happened. Unable to restore the share." : "Something happened. Unable to restore the share.", - "Accept share" : "Accept share", - "Something happened. Unable to accept the share." : "Something happened. Unable to accept the share.", - "Reject share" : "Reject share", - "Something happened. Unable to reject the share." : "Something happened. Unable to reject the share.", "Waiting…" : "Waiting…", "error" : "error", "finished" : "finished", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "No compatible server found at {remote}", "Invalid server URL" : "Invalid server URL", "Failed to add the public link to your Nextcloud" : "Failed to add the public link to your Nextcloud", - "No expiration date set" : "No expiration date set", - "Shared by" : "Shared by", "File shares" : "File shares", "Downloaded via public link" : "Downloaded via public link", "Downloaded by {email}" : "Downloaded by {email}", @@ -235,6 +208,10 @@ "Expires {relativetime}" : "Expires {relativetime}", "this share just expired." : "this share just expired.", "Shared with you by {owner}" : "Shared with you by {owner}", + "_Accept share_::_Accept shares_" : ["Accept share","Accept shares"], + "Open in files" : "Open in files", + "_Reject share_::_Reject shares_" : ["Reject share","Reject shares"], + "_Restore share_::_Restore shares_" : ["Restore share","Restore shares"], "Link to a file" : "Link to a file", "Error creating the share: {errorMessage}" : "Error creating the share: {errorMessage}", "Error creating the share" : "Error creating the share", @@ -245,6 +222,7 @@ "Share {propertyName} saved" : "Share {propertyName} saved", "Shared" : "Shared", "Share" : "Share", + "Shared by" : "Shared by", "Shared with" : "Shared with", "Password created successfully" : "Password created successfully", "Error generating password from password policy" : "Error generating password from password policy", @@ -252,6 +230,18 @@ "Shared with you and {circle} by {owner}" : "Shared with you and {circle} by {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Shared with you and the conversation {conversation} by {owner}", "Shared with you in a conversation by {owner}" : "Shared with you in a conversation by {owner}", + "Shares" : "Shares", + "Overview of shared files." : "Overview of shared files.", + "Shared with you" : "Shared with you", + "List of files that are shared with you." : "List of files that are shared with you.", + "Shared with others" : "Shared with others", + "List of files that you shared with others." : "List of files that you shared with others.", + "Shared by link" : "Shared by link", + "List of files that are shared by link." : "List of files that are shared by link.", + "Deleted shares" : "Deleted shares", + "List of shares that you removed yourself from." : "List of shares that you removed yourself from.", + "Pending shares" : "Pending shares", + "List of unapproved shares." : "List of unapproved shares.", "No entries found in this folder" : "No entries found in this folder", "Name" : "Name", "Share time" : "Share time", @@ -270,6 +260,23 @@ "Uploaded files:" : "Uploaded files:", "By uploading files, you agree to the %1$sterms of service%2$s." : "By uploading files, you agree to the %1$sterms of service%2$s.", "Add to your Nextcloud" : "Add to your Nextcloud", + "Nothing shared with you yet" : "Nothing shared with you yet", + "Files and folders others share with you will show up here" : "Files and folders others share with you will show up here", + "Nothing shared yet" : "Nothing shared yet", + "Files and folders you share will show up here" : "Files and folders you share will show up here", + "No shared links" : "No shared links", + "Files and folders you share by link will show up here" : "Files and folders you share by link will show up here", + "No deleted shares" : "No deleted shares", + "Shares you deleted will show up here" : "Shares you deleted will show up here", + "No pending shares" : "No pending shares", + "Shares you have received but not confirmed will show up here" : "Shares you have received but not confirmed will show up here", + "No shares" : "No shares", + "Shares will show up here" : "Shares will show up here", + "Restore" : "Restore", + "Something happened. Unable to restore the share." : "Something happened. Unable to restore the share.", + "Something happened. Unable to accept the share." : "Something happened. Unable to accept the share.", + "Something happened. Unable to reject the share." : "Something happened. Unable to reject the share.", + "No expiration date set" : "No expiration date set", "Sharing %s failed because the back end does not support sciencemesh shares" : "Sharing %s failed because the back end does not support sciencemesh shares", "One or more of your shares will expire tomorrow" : "One or more of your shares will expire tomorrow", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/eo.js b/apps/files_sharing/l10n/eo.js index d8469ca22d3..3216dbf1b0f 100644 --- a/apps/files_sharing/l10n/eo.js +++ b/apps/files_sharing/l10n/eo.js @@ -1,24 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Kunhavata kun vi", - "Nothing shared with you yet" : "Nenio kunhavatas kun vi ankoraŭ", - "Files and folders others share with you will show up here" : "Dosieroj kaj dosierujoj, kiujn aliuloj kunhavigas, aperos ĉi tie", - "Shared with others" : "Kunhavata kun aliaj", - "Nothing shared yet" : "Nenio kunhavatas ankoraŭ", - "Files and folders you share will show up here" : "Dosieroj kaj dosierujoj, kiujn vi kunhavigas, aperos ĉi tie", - "Shared by link" : "Kunhavata per ligilo", - "No shared links" : "Neniu kunhavata ligilo", - "Files and folders you share by link will show up here" : "Dosieroj kaj dosierujoj, kiujn vi kunhavigas per ligilo, aperos ĉi tie", - "Deleted shares" : "Forigitaj kunhavigoj", - "No deleted shares" : "Neniu forigita kunhavigo", - "Shares you deleted will show up here" : "Kunhavoj, kiujn vi forigis, aperos ĉi tie", - "Shares" : "Kunhavoj", - "No shares" : "Neniu kunhavo", - "Shares will show up here" : "Kunhavoj aperos ĉi tie", - "Restore" : "Restaŭri", - "Restore share" : "Restaŭri kunhavon", - "Something happened. Unable to restore the share." : "Io okazis. Ne eblis restaŭri la kunhavon. ", "error" : "eraro", "This will stop your current uploads." : "Tio haltigos viajn nunajn alŝutojn.", "Move or copy" : "Movi aŭ kopii", @@ -30,8 +12,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Neniu kongrua servilo trovita je {remote}", "Invalid server URL" : "Nevalida servila retadreso", "Failed to add the public link to your Nextcloud" : "Ne eblis aldoni la publikan ligilon al via Nextcloud", - "No expiration date set" : "Neniu limdato agordita", - "Shared by" : "Kunhavigita de", "File shares" : "Dosieraj kunhavoj", "Downloaded via public link" : "Elŝutita per publika ligilo", "Downloaded by {email}" : "Elŝutita de {email}", @@ -181,11 +161,17 @@ OC.L10N.register( "Error updating the share" : "Eraro dum ĝisdatigo de la kunhavigo", "Shared" : "Kunhavigita", "Share" : "Kunhavigi", + "Shared by" : "Kunhavigita de", "Shared with" : "Kunhavigita kun", "Shared with you and the group {group} by {owner}" : "Kunhavigita kun vi kaj la grupo {group} de {owner}", "Shared with you and {circle} by {owner}" : "Kunhavigita kun vi kaj {circle} de {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Kunhavigita kun vi kaj la konversacio {conversation} fare de {owner}", "Shared with you in a conversation by {owner}" : "Kunhavigita kun vi en konversacio de {owner}", + "Shares" : "Kunhavoj", + "Shared with you" : "Kunhavata kun vi", + "Shared with others" : "Kunhavata kun aliaj", + "Shared by link" : "Kunhavata per ligilo", + "Deleted shares" : "Forigitaj kunhavigoj", "No entries found in this folder" : "Neniu enigo troviĝis en ĉi tiu dosierujo", "Name" : "Nomo", "Share time" : "Kunhavotempo", @@ -202,6 +188,19 @@ OC.L10N.register( "Uploaded files:" : "Alŝutitaj dosieroj:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Se vi alŝutas dosierojn, vi konsentas pri %1$skondiĉoj de uzado%2$s.", "Add to your Nextcloud" : "Aldoni al via Nextcloud", + "Nothing shared with you yet" : "Nenio kunhavatas kun vi ankoraŭ", + "Files and folders others share with you will show up here" : "Dosieroj kaj dosierujoj, kiujn aliuloj kunhavigas, aperos ĉi tie", + "Nothing shared yet" : "Nenio kunhavatas ankoraŭ", + "Files and folders you share will show up here" : "Dosieroj kaj dosierujoj, kiujn vi kunhavigas, aperos ĉi tie", + "No shared links" : "Neniu kunhavata ligilo", + "Files and folders you share by link will show up here" : "Dosieroj kaj dosierujoj, kiujn vi kunhavigas per ligilo, aperos ĉi tie", + "No deleted shares" : "Neniu forigita kunhavigo", + "Shares you deleted will show up here" : "Kunhavoj, kiujn vi forigis, aperos ĉi tie", + "No shares" : "Neniu kunhavo", + "Shares will show up here" : "Kunhavoj aperos ĉi tie", + "Restore" : "Restaŭri", + "Something happened. Unable to restore the share." : "Io okazis. Ne eblis restaŭri la kunhavon. ", + "No expiration date set" : "Neniu limdato agordita", "One or more of your shares will expire tomorrow" : "Unu aŭ pliaj el viaj kunhavoj senvalidiĝos morgaŭ" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/eo.json b/apps/files_sharing/l10n/eo.json index c5e94a1408b..695df15fca5 100644 --- a/apps/files_sharing/l10n/eo.json +++ b/apps/files_sharing/l10n/eo.json @@ -1,22 +1,4 @@ { "translations": { - "Shared with you" : "Kunhavata kun vi", - "Nothing shared with you yet" : "Nenio kunhavatas kun vi ankoraŭ", - "Files and folders others share with you will show up here" : "Dosieroj kaj dosierujoj, kiujn aliuloj kunhavigas, aperos ĉi tie", - "Shared with others" : "Kunhavata kun aliaj", - "Nothing shared yet" : "Nenio kunhavatas ankoraŭ", - "Files and folders you share will show up here" : "Dosieroj kaj dosierujoj, kiujn vi kunhavigas, aperos ĉi tie", - "Shared by link" : "Kunhavata per ligilo", - "No shared links" : "Neniu kunhavata ligilo", - "Files and folders you share by link will show up here" : "Dosieroj kaj dosierujoj, kiujn vi kunhavigas per ligilo, aperos ĉi tie", - "Deleted shares" : "Forigitaj kunhavigoj", - "No deleted shares" : "Neniu forigita kunhavigo", - "Shares you deleted will show up here" : "Kunhavoj, kiujn vi forigis, aperos ĉi tie", - "Shares" : "Kunhavoj", - "No shares" : "Neniu kunhavo", - "Shares will show up here" : "Kunhavoj aperos ĉi tie", - "Restore" : "Restaŭri", - "Restore share" : "Restaŭri kunhavon", - "Something happened. Unable to restore the share." : "Io okazis. Ne eblis restaŭri la kunhavon. ", "error" : "eraro", "This will stop your current uploads." : "Tio haltigos viajn nunajn alŝutojn.", "Move or copy" : "Movi aŭ kopii", @@ -28,8 +10,6 @@ "No compatible server found at {remote}" : "Neniu kongrua servilo trovita je {remote}", "Invalid server URL" : "Nevalida servila retadreso", "Failed to add the public link to your Nextcloud" : "Ne eblis aldoni la publikan ligilon al via Nextcloud", - "No expiration date set" : "Neniu limdato agordita", - "Shared by" : "Kunhavigita de", "File shares" : "Dosieraj kunhavoj", "Downloaded via public link" : "Elŝutita per publika ligilo", "Downloaded by {email}" : "Elŝutita de {email}", @@ -179,11 +159,17 @@ "Error updating the share" : "Eraro dum ĝisdatigo de la kunhavigo", "Shared" : "Kunhavigita", "Share" : "Kunhavigi", + "Shared by" : "Kunhavigita de", "Shared with" : "Kunhavigita kun", "Shared with you and the group {group} by {owner}" : "Kunhavigita kun vi kaj la grupo {group} de {owner}", "Shared with you and {circle} by {owner}" : "Kunhavigita kun vi kaj {circle} de {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Kunhavigita kun vi kaj la konversacio {conversation} fare de {owner}", "Shared with you in a conversation by {owner}" : "Kunhavigita kun vi en konversacio de {owner}", + "Shares" : "Kunhavoj", + "Shared with you" : "Kunhavata kun vi", + "Shared with others" : "Kunhavata kun aliaj", + "Shared by link" : "Kunhavata per ligilo", + "Deleted shares" : "Forigitaj kunhavigoj", "No entries found in this folder" : "Neniu enigo troviĝis en ĉi tiu dosierujo", "Name" : "Nomo", "Share time" : "Kunhavotempo", @@ -200,6 +186,19 @@ "Uploaded files:" : "Alŝutitaj dosieroj:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Se vi alŝutas dosierojn, vi konsentas pri %1$skondiĉoj de uzado%2$s.", "Add to your Nextcloud" : "Aldoni al via Nextcloud", + "Nothing shared with you yet" : "Nenio kunhavatas kun vi ankoraŭ", + "Files and folders others share with you will show up here" : "Dosieroj kaj dosierujoj, kiujn aliuloj kunhavigas, aperos ĉi tie", + "Nothing shared yet" : "Nenio kunhavatas ankoraŭ", + "Files and folders you share will show up here" : "Dosieroj kaj dosierujoj, kiujn vi kunhavigas, aperos ĉi tie", + "No shared links" : "Neniu kunhavata ligilo", + "Files and folders you share by link will show up here" : "Dosieroj kaj dosierujoj, kiujn vi kunhavigas per ligilo, aperos ĉi tie", + "No deleted shares" : "Neniu forigita kunhavigo", + "Shares you deleted will show up here" : "Kunhavoj, kiujn vi forigis, aperos ĉi tie", + "No shares" : "Neniu kunhavo", + "Shares will show up here" : "Kunhavoj aperos ĉi tie", + "Restore" : "Restaŭri", + "Something happened. Unable to restore the share." : "Io okazis. Ne eblis restaŭri la kunhavon. ", + "No expiration date set" : "Neniu limdato agordita", "One or more of your shares will expire tomorrow" : "Unu aŭ pliaj el viaj kunhavoj senvalidiĝos morgaŭ" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/es.js b/apps/files_sharing/l10n/es.js index 4fcf847f8f6..23838bcd91f 100644 --- a/apps/files_sharing/l10n/es.js +++ b/apps/files_sharing/l10n/es.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Compartido conmigo", - "Nothing shared with you yet" : "Aún no hay nada compartido contigo", - "Files and folders others share with you will show up here" : "Aquí aparecerán archivos y carpetas que otros compartan contigo", - "Shared with others" : "Compartido con otros", - "Nothing shared yet" : "Aún no hay nada compartido", - "Files and folders you share will show up here" : "Aquí aparecerán los archivos y carpetas que compartas con otros", - "Shared by link" : "Compartido por enlace", - "No shared links" : "No hay enlaces compartidos", - "Files and folders you share by link will show up here" : "Aquí aparecerán los archivos y carpetas que compartas mediante un enlace", - "Deleted shares" : "Recursos compartidos eliminados", - "No deleted shares" : "No hay recursos compartidos eliminados", - "Shares you deleted will show up here" : "Los recursos compartidos que elimines aparecerán aquí", - "Pending shares" : "Recursos compartidos pendientes", - "No pending shares" : "No hay recursos compartidos pendientes", - "Shares you have received but not confirmed will show up here" : "Aquí aparecerán los recursos compatidos que hayas recibido pero no confirmado", - "Shares" : "Compartidos", - "No shares" : "No compartidos", - "Shares will show up here" : "Los archivos que compartas aparecerán aquí", - "Restore" : "Restaurar", - "Restore share" : "Restaurar recurso compartido", - "Something happened. Unable to restore the share." : "Algo ha sucedido. No se pudo restaurar el recurso compartido.", - "Accept share" : "Aceptar recurso compartido", - "Something happened. Unable to accept the share." : "Algo ha ocurrido. No es posible aceptar el recurso compartido.", - "Reject share" : "Rechazar recurso compartido", - "Something happened. Unable to reject the share." : "Algo ha ocurrido. No es posible rechazar el recurso compartido", "Waiting…" : "Esperando…", "error" : "error", "finished" : "terminó", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "No se ha encontrado un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválida", "Failed to add the public link to your Nextcloud" : "No se ha podido añadir el enlace público a tu Nextcloud", - "No expiration date set" : "No se ha establecido fecha de caducidad", - "Shared by" : "Compartido por", "File shares" : "Archivos compartidos", "Downloaded via public link" : "Descargado vía enlace público", "Downloaded by {email}" : "Descargado por {email}", @@ -247,6 +220,7 @@ OC.L10N.register( "Share {propertyName} saved" : "Se guardó la propiedad {propertyName} de la compartición", "Shared" : "Compartido", "Share" : "Compartir", + "Shared by" : "Compartido por", "Shared with" : "Compartido con", "Password created successfully" : "Contraseña creada exitosamente", "Error generating password from password policy" : "Error generando contraseña desde la política de contraseñas", @@ -254,6 +228,12 @@ OC.L10N.register( "Shared with you and {circle} by {owner}" : "Compartido contigo y {circle} por {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Compartido contigo y con la conversación {conversation} por {owner}", "Shared with you in a conversation by {owner}" : "Compartido contigo por {owner} en una conversación", + "Shares" : "Compartidos", + "Shared with you" : "Compartido conmigo", + "Shared with others" : "Compartido con otros", + "Shared by link" : "Compartido por enlace", + "Deleted shares" : "Recursos compartidos eliminados", + "Pending shares" : "Recursos compartidos pendientes", "No entries found in this folder" : "No hay nada en esta carpeta", "Name" : "Nombre", "Share time" : "Compartido hace", @@ -272,6 +252,23 @@ OC.L10N.register( "Uploaded files:" : "Archivos subidos:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Al subir archivos, aceptas los %1$stérminos del servicio%2$s.", "Add to your Nextcloud" : "Añadir a tu Nextcloud", + "Nothing shared with you yet" : "Aún no hay nada compartido contigo", + "Files and folders others share with you will show up here" : "Aquí aparecerán archivos y carpetas que otros compartan contigo", + "Nothing shared yet" : "Aún no hay nada compartido", + "Files and folders you share will show up here" : "Aquí aparecerán los archivos y carpetas que compartas con otros", + "No shared links" : "No hay enlaces compartidos", + "Files and folders you share by link will show up here" : "Aquí aparecerán los archivos y carpetas que compartas mediante un enlace", + "No deleted shares" : "No hay recursos compartidos eliminados", + "Shares you deleted will show up here" : "Los recursos compartidos que elimines aparecerán aquí", + "No pending shares" : "No hay recursos compartidos pendientes", + "Shares you have received but not confirmed will show up here" : "Aquí aparecerán los recursos compatidos que hayas recibido pero no confirmado", + "No shares" : "No compartidos", + "Shares will show up here" : "Los archivos que compartas aparecerán aquí", + "Restore" : "Restaurar", + "Something happened. Unable to restore the share." : "Algo ha sucedido. No se pudo restaurar el recurso compartido.", + "Something happened. Unable to accept the share." : "Algo ha ocurrido. No es posible aceptar el recurso compartido.", + "Something happened. Unable to reject the share." : "Algo ha ocurrido. No es posible rechazar el recurso compartido", + "No expiration date set" : "No se ha establecido fecha de caducidad", "Sharing %s failed because the back end does not support sciencemesh shares" : "Compartir %s ha fallado porque el backend no soporta recursos compartidos de ScienceMesh", "One or more of your shares will expire tomorrow" : "Uno o más de sus recursos compartidos caducarán mañana", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/es.json b/apps/files_sharing/l10n/es.json index 34c1fca1efe..e1e77334f05 100644 --- a/apps/files_sharing/l10n/es.json +++ b/apps/files_sharing/l10n/es.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Compartido conmigo", - "Nothing shared with you yet" : "Aún no hay nada compartido contigo", - "Files and folders others share with you will show up here" : "Aquí aparecerán archivos y carpetas que otros compartan contigo", - "Shared with others" : "Compartido con otros", - "Nothing shared yet" : "Aún no hay nada compartido", - "Files and folders you share will show up here" : "Aquí aparecerán los archivos y carpetas que compartas con otros", - "Shared by link" : "Compartido por enlace", - "No shared links" : "No hay enlaces compartidos", - "Files and folders you share by link will show up here" : "Aquí aparecerán los archivos y carpetas que compartas mediante un enlace", - "Deleted shares" : "Recursos compartidos eliminados", - "No deleted shares" : "No hay recursos compartidos eliminados", - "Shares you deleted will show up here" : "Los recursos compartidos que elimines aparecerán aquí", - "Pending shares" : "Recursos compartidos pendientes", - "No pending shares" : "No hay recursos compartidos pendientes", - "Shares you have received but not confirmed will show up here" : "Aquí aparecerán los recursos compatidos que hayas recibido pero no confirmado", - "Shares" : "Compartidos", - "No shares" : "No compartidos", - "Shares will show up here" : "Los archivos que compartas aparecerán aquí", - "Restore" : "Restaurar", - "Restore share" : "Restaurar recurso compartido", - "Something happened. Unable to restore the share." : "Algo ha sucedido. No se pudo restaurar el recurso compartido.", - "Accept share" : "Aceptar recurso compartido", - "Something happened. Unable to accept the share." : "Algo ha ocurrido. No es posible aceptar el recurso compartido.", - "Reject share" : "Rechazar recurso compartido", - "Something happened. Unable to reject the share." : "Algo ha ocurrido. No es posible rechazar el recurso compartido", "Waiting…" : "Esperando…", "error" : "error", "finished" : "terminó", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "No se ha encontrado un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválida", "Failed to add the public link to your Nextcloud" : "No se ha podido añadir el enlace público a tu Nextcloud", - "No expiration date set" : "No se ha establecido fecha de caducidad", - "Shared by" : "Compartido por", "File shares" : "Archivos compartidos", "Downloaded via public link" : "Descargado vía enlace público", "Downloaded by {email}" : "Descargado por {email}", @@ -245,6 +218,7 @@ "Share {propertyName} saved" : "Se guardó la propiedad {propertyName} de la compartición", "Shared" : "Compartido", "Share" : "Compartir", + "Shared by" : "Compartido por", "Shared with" : "Compartido con", "Password created successfully" : "Contraseña creada exitosamente", "Error generating password from password policy" : "Error generando contraseña desde la política de contraseñas", @@ -252,6 +226,12 @@ "Shared with you and {circle} by {owner}" : "Compartido contigo y {circle} por {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Compartido contigo y con la conversación {conversation} por {owner}", "Shared with you in a conversation by {owner}" : "Compartido contigo por {owner} en una conversación", + "Shares" : "Compartidos", + "Shared with you" : "Compartido conmigo", + "Shared with others" : "Compartido con otros", + "Shared by link" : "Compartido por enlace", + "Deleted shares" : "Recursos compartidos eliminados", + "Pending shares" : "Recursos compartidos pendientes", "No entries found in this folder" : "No hay nada en esta carpeta", "Name" : "Nombre", "Share time" : "Compartido hace", @@ -270,6 +250,23 @@ "Uploaded files:" : "Archivos subidos:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Al subir archivos, aceptas los %1$stérminos del servicio%2$s.", "Add to your Nextcloud" : "Añadir a tu Nextcloud", + "Nothing shared with you yet" : "Aún no hay nada compartido contigo", + "Files and folders others share with you will show up here" : "Aquí aparecerán archivos y carpetas que otros compartan contigo", + "Nothing shared yet" : "Aún no hay nada compartido", + "Files and folders you share will show up here" : "Aquí aparecerán los archivos y carpetas que compartas con otros", + "No shared links" : "No hay enlaces compartidos", + "Files and folders you share by link will show up here" : "Aquí aparecerán los archivos y carpetas que compartas mediante un enlace", + "No deleted shares" : "No hay recursos compartidos eliminados", + "Shares you deleted will show up here" : "Los recursos compartidos que elimines aparecerán aquí", + "No pending shares" : "No hay recursos compartidos pendientes", + "Shares you have received but not confirmed will show up here" : "Aquí aparecerán los recursos compatidos que hayas recibido pero no confirmado", + "No shares" : "No compartidos", + "Shares will show up here" : "Los archivos que compartas aparecerán aquí", + "Restore" : "Restaurar", + "Something happened. Unable to restore the share." : "Algo ha sucedido. No se pudo restaurar el recurso compartido.", + "Something happened. Unable to accept the share." : "Algo ha ocurrido. No es posible aceptar el recurso compartido.", + "Something happened. Unable to reject the share." : "Algo ha ocurrido. No es posible rechazar el recurso compartido", + "No expiration date set" : "No se ha establecido fecha de caducidad", "Sharing %s failed because the back end does not support sciencemesh shares" : "Compartir %s ha fallado porque el backend no soporta recursos compartidos de ScienceMesh", "One or more of your shares will expire tomorrow" : "Uno o más de sus recursos compartidos caducarán mañana", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/es_AR.js b/apps/files_sharing/l10n/es_AR.js index efbcf4ad4d2..cd847afa2f4 100644 --- a/apps/files_sharing/l10n/es_AR.js +++ b/apps/files_sharing/l10n/es_AR.js @@ -1,17 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Compartido con usted", - "Nothing shared with you yet" : "Nada ha sido compartido aún con usted", - "Files and folders others share with you will show up here" : "Los archivos y carpetas que sean compartidos con usted se mostrarán aquí", - "Shared with others" : "Compartido con otros", - "Nothing shared yet" : "Nada compartido aún", - "Files and folders you share will show up here" : "Los archivos y carpetas que comparta se mostrarán aquí", - "Shared by link" : "Compartido por link", - "No shared links" : "No hay links compartidos", - "Files and folders you share by link will show up here" : "Los archivos y carpetas que comparta por links se mostrarán aquí", - "Shares" : "Shares", - "Restore" : "Restaurar", "error" : "error", "Move or copy" : "Mover o Copiar", "Download" : "Descargar", @@ -20,8 +9,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", "Failed to add the public link to your Nextcloud" : "Se presentó una falla al agregar el link público a su Nextcloud", - "No expiration date set" : "No se ha establecido la fecha de expiración", - "Shared by" : "Compartido por", "File shares" : "Archivos compartidos", "Downloaded via public link" : "Descargado mediante un link público", "Downloaded by {email}" : "Descargado por {email}", @@ -128,7 +115,12 @@ OC.L10N.register( "Shared with you by {owner}" : "Compartido con usted por {owner}", "Shared" : "Compartido", "Share" : "Compartir", + "Shared by" : "Compartido por", "Shared with you and the group {group} by {owner}" : "Compartido con usted y el grupo {group} por {owner}", + "Shares" : "Shares", + "Shared with you" : "Compartido con usted", + "Shared with others" : "Compartido con otros", + "Shared by link" : "Compartido por link", "No entries found in this folder" : "No se encontraron elementos en esta carpeta", "Name" : "Nombre", "Share time" : "Tiempo de compartir", @@ -143,6 +135,14 @@ OC.L10N.register( "Note" : "Nota", "Select or drop files" : "Seleccione o suelte los archivos", "Uploaded files:" : "Archivos cargados:", - "Add to your Nextcloud" : "Agregar a su Nextcloud" + "Add to your Nextcloud" : "Agregar a su Nextcloud", + "Nothing shared with you yet" : "Nada ha sido compartido aún con usted", + "Files and folders others share with you will show up here" : "Los archivos y carpetas que sean compartidos con usted se mostrarán aquí", + "Nothing shared yet" : "Nada compartido aún", + "Files and folders you share will show up here" : "Los archivos y carpetas que comparta se mostrarán aquí", + "No shared links" : "No hay links compartidos", + "Files and folders you share by link will show up here" : "Los archivos y carpetas que comparta por links se mostrarán aquí", + "Restore" : "Restaurar", + "No expiration date set" : "No se ha establecido la fecha de expiración" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/files_sharing/l10n/es_AR.json b/apps/files_sharing/l10n/es_AR.json index d03bdc2a625..0c402bb35d1 100644 --- a/apps/files_sharing/l10n/es_AR.json +++ b/apps/files_sharing/l10n/es_AR.json @@ -1,15 +1,4 @@ { "translations": { - "Shared with you" : "Compartido con usted", - "Nothing shared with you yet" : "Nada ha sido compartido aún con usted", - "Files and folders others share with you will show up here" : "Los archivos y carpetas que sean compartidos con usted se mostrarán aquí", - "Shared with others" : "Compartido con otros", - "Nothing shared yet" : "Nada compartido aún", - "Files and folders you share will show up here" : "Los archivos y carpetas que comparta se mostrarán aquí", - "Shared by link" : "Compartido por link", - "No shared links" : "No hay links compartidos", - "Files and folders you share by link will show up here" : "Los archivos y carpetas que comparta por links se mostrarán aquí", - "Shares" : "Shares", - "Restore" : "Restaurar", "error" : "error", "Move or copy" : "Mover o Copiar", "Download" : "Descargar", @@ -18,8 +7,6 @@ "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", "Failed to add the public link to your Nextcloud" : "Se presentó una falla al agregar el link público a su Nextcloud", - "No expiration date set" : "No se ha establecido la fecha de expiración", - "Shared by" : "Compartido por", "File shares" : "Archivos compartidos", "Downloaded via public link" : "Descargado mediante un link público", "Downloaded by {email}" : "Descargado por {email}", @@ -126,7 +113,12 @@ "Shared with you by {owner}" : "Compartido con usted por {owner}", "Shared" : "Compartido", "Share" : "Compartir", + "Shared by" : "Compartido por", "Shared with you and the group {group} by {owner}" : "Compartido con usted y el grupo {group} por {owner}", + "Shares" : "Shares", + "Shared with you" : "Compartido con usted", + "Shared with others" : "Compartido con otros", + "Shared by link" : "Compartido por link", "No entries found in this folder" : "No se encontraron elementos en esta carpeta", "Name" : "Nombre", "Share time" : "Tiempo de compartir", @@ -141,6 +133,14 @@ "Note" : "Nota", "Select or drop files" : "Seleccione o suelte los archivos", "Uploaded files:" : "Archivos cargados:", - "Add to your Nextcloud" : "Agregar a su Nextcloud" + "Add to your Nextcloud" : "Agregar a su Nextcloud", + "Nothing shared with you yet" : "Nada ha sido compartido aún con usted", + "Files and folders others share with you will show up here" : "Los archivos y carpetas que sean compartidos con usted se mostrarán aquí", + "Nothing shared yet" : "Nada compartido aún", + "Files and folders you share will show up here" : "Los archivos y carpetas que comparta se mostrarán aquí", + "No shared links" : "No hay links compartidos", + "Files and folders you share by link will show up here" : "Los archivos y carpetas que comparta por links se mostrarán aquí", + "Restore" : "Restaurar", + "No expiration date set" : "No se ha establecido la fecha de expiración" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/es_MX.js b/apps/files_sharing/l10n/es_MX.js index 24d98b8ed2d..12625ec4820 100644 --- a/apps/files_sharing/l10n/es_MX.js +++ b/apps/files_sharing/l10n/es_MX.js @@ -1,19 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Compartido contigo", - "Nothing shared with you yet" : "Nada ha sido compartido contigo aún", - "Files and folders others share with you will show up here" : "Los archivos y carpetas que sean compartidos contigo se mostrarán aquí", - "Shared with others" : "Compartido con otros", - "Nothing shared yet" : "Nada compartido aún", - "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", - "Shared by link" : "Compartido por liga", - "No shared links" : "No hay ligas compartidas", - "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", - "Deleted shares" : "Recursos compartidos eliminados", - "Pending shares" : "Recursos compartidos pendientes", - "Shares" : "Elementos compartidos", - "Restore" : "Restaurar", "error" : "error", "This will stop your current uploads." : "Se detendrán las cargas en curso", "Move or copy" : "Mover o copiar", @@ -25,8 +12,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", "Failed to add the public link to your Nextcloud" : "Se presentó una falla al agregar la liga pública a tu Nextcloud", - "No expiration date set" : "No se ha establecido la fecha de expiración", - "Shared by" : "Compartido por", "File shares" : "Archivos compartidos", "Downloaded via public link" : "Descargado mediante una liga pública", "Downloaded by {email}" : "Descargado por {email}", @@ -137,8 +122,15 @@ OC.L10N.register( "Shared with you by {owner}" : "Compartido contigo por {owner}", "Shared" : "Compartido", "Share" : "Compartir", + "Shared by" : "Compartido por", "Shared with" : "Compartido con", "Shared with you and the group {group} by {owner}" : "Compartido contigo y con el grupo {group} por {owner}", + "Shares" : "Elementos compartidos", + "Shared with you" : "Compartido contigo", + "Shared with others" : "Compartido con otros", + "Shared by link" : "Compartido por liga", + "Deleted shares" : "Recursos compartidos eliminados", + "Pending shares" : "Recursos compartidos pendientes", "No entries found in this folder" : "No se encontraron elementos en esta carpeta", "Name" : "Nombre", "Share time" : "Compartido desde", @@ -153,6 +145,14 @@ OC.L10N.register( "Note" : "Nota", "Select or drop files" : "Selecciona o suelta los archivos", "Uploaded files:" : "Archivos cargados:", - "Add to your Nextcloud" : "Agregar a tu Nextcloud" + "Add to your Nextcloud" : "Agregar a tu Nextcloud", + "Nothing shared with you yet" : "Nada ha sido compartido contigo aún", + "Files and folders others share with you will show up here" : "Los archivos y carpetas que sean compartidos contigo se mostrarán aquí", + "Nothing shared yet" : "Nada compartido aún", + "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", + "No shared links" : "No hay ligas compartidas", + "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Restore" : "Restaurar", + "No expiration date set" : "No se ha establecido la fecha de expiración" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/files_sharing/l10n/es_MX.json b/apps/files_sharing/l10n/es_MX.json index 85b1749be86..6ecf338a181 100644 --- a/apps/files_sharing/l10n/es_MX.json +++ b/apps/files_sharing/l10n/es_MX.json @@ -1,17 +1,4 @@ { "translations": { - "Shared with you" : "Compartido contigo", - "Nothing shared with you yet" : "Nada ha sido compartido contigo aún", - "Files and folders others share with you will show up here" : "Los archivos y carpetas que sean compartidos contigo se mostrarán aquí", - "Shared with others" : "Compartido con otros", - "Nothing shared yet" : "Nada compartido aún", - "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", - "Shared by link" : "Compartido por liga", - "No shared links" : "No hay ligas compartidas", - "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", - "Deleted shares" : "Recursos compartidos eliminados", - "Pending shares" : "Recursos compartidos pendientes", - "Shares" : "Elementos compartidos", - "Restore" : "Restaurar", "error" : "error", "This will stop your current uploads." : "Se detendrán las cargas en curso", "Move or copy" : "Mover o copiar", @@ -23,8 +10,6 @@ "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}", "Invalid server URL" : "URL del servidor inválido", "Failed to add the public link to your Nextcloud" : "Se presentó una falla al agregar la liga pública a tu Nextcloud", - "No expiration date set" : "No se ha establecido la fecha de expiración", - "Shared by" : "Compartido por", "File shares" : "Archivos compartidos", "Downloaded via public link" : "Descargado mediante una liga pública", "Downloaded by {email}" : "Descargado por {email}", @@ -135,8 +120,15 @@ "Shared with you by {owner}" : "Compartido contigo por {owner}", "Shared" : "Compartido", "Share" : "Compartir", + "Shared by" : "Compartido por", "Shared with" : "Compartido con", "Shared with you and the group {group} by {owner}" : "Compartido contigo y con el grupo {group} por {owner}", + "Shares" : "Elementos compartidos", + "Shared with you" : "Compartido contigo", + "Shared with others" : "Compartido con otros", + "Shared by link" : "Compartido por liga", + "Deleted shares" : "Recursos compartidos eliminados", + "Pending shares" : "Recursos compartidos pendientes", "No entries found in this folder" : "No se encontraron elementos en esta carpeta", "Name" : "Nombre", "Share time" : "Compartido desde", @@ -151,6 +143,14 @@ "Note" : "Nota", "Select or drop files" : "Selecciona o suelta los archivos", "Uploaded files:" : "Archivos cargados:", - "Add to your Nextcloud" : "Agregar a tu Nextcloud" + "Add to your Nextcloud" : "Agregar a tu Nextcloud", + "Nothing shared with you yet" : "Nada ha sido compartido contigo aún", + "Files and folders others share with you will show up here" : "Los archivos y carpetas que sean compartidos contigo se mostrarán aquí", + "Nothing shared yet" : "Nada compartido aún", + "Files and folders you share will show up here" : "Los archivos y carpetas que compartas se mostrarán aquí", + "No shared links" : "No hay ligas compartidas", + "Files and folders you share by link will show up here" : "Los archivos y carpetas que compartas por ligas se mostrarán aquí", + "Restore" : "Restaurar", + "No expiration date set" : "No se ha establecido la fecha de expiración" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/et_EE.js b/apps/files_sharing/l10n/et_EE.js index e87e2dea408..0f2c934aa3f 100644 --- a/apps/files_sharing/l10n/et_EE.js +++ b/apps/files_sharing/l10n/et_EE.js @@ -1,28 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Sinuga jagatud", - "Nothing shared with you yet" : "Sinuga pole veel midagi jagatud", - "Files and folders others share with you will show up here" : "Siin näidatakse faile ja kaustasid, mida teised on sulle jaganud", - "Shared with others" : "Teistega jagatud", - "Nothing shared yet" : "Midagi pole veel jagatud", - "Files and folders you share will show up here" : "Siin kuvatakse faile ja kaustasid, mida sa oled teistega jaganud", - "Shared by link" : "Jagatud lingiga", - "No shared links" : "Jagatud linke pole", - "Files and folders you share by link will show up here" : "Siin kuvatakse faile ja kaustasid, mida sa jagad lingiga", - "Deleted shares" : "Kustutatud jagamised", - "No deleted shares" : "Kustutatud jagamisi pole", - "Shares you deleted will show up here" : "Sinu kustutatud jagamisi näidatakse siin", - "Pending shares" : "Ootel jagamised", - "No pending shares" : "Ootel jagamisi pole", - "Shares" : "Jagamisi", - "No shares" : "Jagamisi pole", - "Shares will show up here" : "Jagamisi näidatakse siin", - "Restore" : "Taasta", - "Restore share" : "Taasta jagamine", - "Something happened. Unable to restore the share." : "Midagi juhtus. Ei saa jagamist taastada.", - "Accept share" : "Võta jagamine vastu", - "Reject share" : "Lükka jagamine tagasi", "Waiting…" : "Ootan...", "error" : "viga", "finished" : "lõpetatud", @@ -36,8 +14,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Aadressil {remote} ei leitud ühilduvat serverit", "Invalid server URL" : "Vigane serveri URL", "Failed to add the public link to your Nextcloud" : "Avaliku lingi lisamine sinu Nextcloudi ebaõnnestus", - "No expiration date set" : "Aegumise kuupäeva pole määratud", - "Shared by" : "Jagas", "File shares" : "Jagatud failid", "Downloaded via public link" : "Alla laetud avalikult lingilt", "Downloaded by {email}" : "Alla laetud {email} poolt", @@ -159,8 +135,15 @@ OC.L10N.register( "Shared with you by {owner}" : "Jagatud sinuga {owner} poolt", "Shared" : "Jagatud", "Share" : "Jaga", + "Shared by" : "Jagas", "Shared with" : "Jagatud", "Shared with you and the group {group} by {owner}" : "Jagatud sinu ja grupiga {group} {owner} poolt", + "Shares" : "Jagamisi", + "Shared with you" : "Sinuga jagatud", + "Shared with others" : "Teistega jagatud", + "Shared by link" : "Jagatud lingiga", + "Deleted shares" : "Kustutatud jagamised", + "Pending shares" : "Ootel jagamised", "No entries found in this folder" : "Selles kaustas ei leitud kirjeid", "Name" : "Nimi", "Share time" : "Jagamise aeg", @@ -176,6 +159,20 @@ OC.L10N.register( "Select or drop files" : "Vali või lohista failid", "Uploaded files:" : "Üleslaetud failid:", "Add to your Nextcloud" : "Lisa oma Nextcloudi", + "Nothing shared with you yet" : "Sinuga pole veel midagi jagatud", + "Files and folders others share with you will show up here" : "Siin näidatakse faile ja kaustasid, mida teised on sulle jaganud", + "Nothing shared yet" : "Midagi pole veel jagatud", + "Files and folders you share will show up here" : "Siin kuvatakse faile ja kaustasid, mida sa oled teistega jaganud", + "No shared links" : "Jagatud linke pole", + "Files and folders you share by link will show up here" : "Siin kuvatakse faile ja kaustasid, mida sa jagad lingiga", + "No deleted shares" : "Kustutatud jagamisi pole", + "Shares you deleted will show up here" : "Sinu kustutatud jagamisi näidatakse siin", + "No pending shares" : "Ootel jagamisi pole", + "No shares" : "Jagamisi pole", + "Shares will show up here" : "Jagamisi näidatakse siin", + "Restore" : "Taasta", + "Something happened. Unable to restore the share." : "Midagi juhtus. Ei saa jagamist taastada.", + "No expiration date set" : "Aegumise kuupäeva pole määratud", "One or more of your shares will expire tomorrow" : "Sinu üks või enam jagamist aegub homme" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/et_EE.json b/apps/files_sharing/l10n/et_EE.json index 6b4f7771a44..3a7d05dd448 100644 --- a/apps/files_sharing/l10n/et_EE.json +++ b/apps/files_sharing/l10n/et_EE.json @@ -1,26 +1,4 @@ { "translations": { - "Shared with you" : "Sinuga jagatud", - "Nothing shared with you yet" : "Sinuga pole veel midagi jagatud", - "Files and folders others share with you will show up here" : "Siin näidatakse faile ja kaustasid, mida teised on sulle jaganud", - "Shared with others" : "Teistega jagatud", - "Nothing shared yet" : "Midagi pole veel jagatud", - "Files and folders you share will show up here" : "Siin kuvatakse faile ja kaustasid, mida sa oled teistega jaganud", - "Shared by link" : "Jagatud lingiga", - "No shared links" : "Jagatud linke pole", - "Files and folders you share by link will show up here" : "Siin kuvatakse faile ja kaustasid, mida sa jagad lingiga", - "Deleted shares" : "Kustutatud jagamised", - "No deleted shares" : "Kustutatud jagamisi pole", - "Shares you deleted will show up here" : "Sinu kustutatud jagamisi näidatakse siin", - "Pending shares" : "Ootel jagamised", - "No pending shares" : "Ootel jagamisi pole", - "Shares" : "Jagamisi", - "No shares" : "Jagamisi pole", - "Shares will show up here" : "Jagamisi näidatakse siin", - "Restore" : "Taasta", - "Restore share" : "Taasta jagamine", - "Something happened. Unable to restore the share." : "Midagi juhtus. Ei saa jagamist taastada.", - "Accept share" : "Võta jagamine vastu", - "Reject share" : "Lükka jagamine tagasi", "Waiting…" : "Ootan...", "error" : "viga", "finished" : "lõpetatud", @@ -34,8 +12,6 @@ "No compatible server found at {remote}" : "Aadressil {remote} ei leitud ühilduvat serverit", "Invalid server URL" : "Vigane serveri URL", "Failed to add the public link to your Nextcloud" : "Avaliku lingi lisamine sinu Nextcloudi ebaõnnestus", - "No expiration date set" : "Aegumise kuupäeva pole määratud", - "Shared by" : "Jagas", "File shares" : "Jagatud failid", "Downloaded via public link" : "Alla laetud avalikult lingilt", "Downloaded by {email}" : "Alla laetud {email} poolt", @@ -157,8 +133,15 @@ "Shared with you by {owner}" : "Jagatud sinuga {owner} poolt", "Shared" : "Jagatud", "Share" : "Jaga", + "Shared by" : "Jagas", "Shared with" : "Jagatud", "Shared with you and the group {group} by {owner}" : "Jagatud sinu ja grupiga {group} {owner} poolt", + "Shares" : "Jagamisi", + "Shared with you" : "Sinuga jagatud", + "Shared with others" : "Teistega jagatud", + "Shared by link" : "Jagatud lingiga", + "Deleted shares" : "Kustutatud jagamised", + "Pending shares" : "Ootel jagamised", "No entries found in this folder" : "Selles kaustas ei leitud kirjeid", "Name" : "Nimi", "Share time" : "Jagamise aeg", @@ -174,6 +157,20 @@ "Select or drop files" : "Vali või lohista failid", "Uploaded files:" : "Üleslaetud failid:", "Add to your Nextcloud" : "Lisa oma Nextcloudi", + "Nothing shared with you yet" : "Sinuga pole veel midagi jagatud", + "Files and folders others share with you will show up here" : "Siin näidatakse faile ja kaustasid, mida teised on sulle jaganud", + "Nothing shared yet" : "Midagi pole veel jagatud", + "Files and folders you share will show up here" : "Siin kuvatakse faile ja kaustasid, mida sa oled teistega jaganud", + "No shared links" : "Jagatud linke pole", + "Files and folders you share by link will show up here" : "Siin kuvatakse faile ja kaustasid, mida sa jagad lingiga", + "No deleted shares" : "Kustutatud jagamisi pole", + "Shares you deleted will show up here" : "Sinu kustutatud jagamisi näidatakse siin", + "No pending shares" : "Ootel jagamisi pole", + "No shares" : "Jagamisi pole", + "Shares will show up here" : "Jagamisi näidatakse siin", + "Restore" : "Taasta", + "Something happened. Unable to restore the share." : "Midagi juhtus. Ei saa jagamist taastada.", + "No expiration date set" : "Aegumise kuupäeva pole määratud", "One or more of your shares will expire tomorrow" : "Sinu üks või enam jagamist aegub homme" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/eu.js b/apps/files_sharing/l10n/eu.js index e9e23a2904d..edc543196b1 100644 --- a/apps/files_sharing/l10n/eu.js +++ b/apps/files_sharing/l10n/eu.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Zurekin partekatua", - "Nothing shared with you yet" : "Oraindik ez da ezer partekatu zurekin", - "Files and folders others share with you will show up here" : "Zurekin partekatutako fitxategi eta karpetak hemen agertuko dira", - "Shared with others" : "Beste batzuekin partekatua", - "Nothing shared yet" : "Oraindik ez da ezer partekatu", - "Files and folders you share will show up here" : "Partekatzen dituzun fitxategi eta karpetak hemen agertuko dira", - "Shared by link" : "Esteka bidez partekatua", - "No shared links" : "Ez dago partekatutako estekarik", - "Files and folders you share by link will show up here" : "Esteka bidez partekatzen dituzun fitxategi eta karpetak hemen agertuko dira", - "Deleted shares" : "Ezabatutako partekatzeak", - "No deleted shares" : "Ezabatutako partekatzerik ez", - "Shares you deleted will show up here" : "Ezabatzen dituzun partekatzeak hemen agertuko dira", - "Pending shares" : "Zain dauden partekatzeak", - "No pending shares" : "Ez dago zain dagoen partekatzerik", - "Shares you have received but not confirmed will show up here" : "Jaso dituzun baina berretsi gabe dauden partekatzeak hemen agertuko dira", - "Shares" : "Partekatzeak", - "No shares" : "Partekatzerik ez", - "Shares will show up here" : "Partekatzeak hemen agertuko dira", - "Restore" : "Berrezarri", - "Restore share" : "Berrezarri partekatzea", - "Something happened. Unable to restore the share." : "Zerbait gertatu da. Ezin izan da partekatzea berrezarri.", - "Accept share" : "Onartu partekatzea", - "Something happened. Unable to accept the share." : "Zerbait gertatu da. Ezin izan da partekatzea onartu.", - "Reject share" : "Ukatu partekatzea", - "Something happened. Unable to reject the share." : "Zerbait gertatu da. Ezin izan da partekatzea ukatu.", "Waiting…" : "Itxaroten...", "error" : "errorea", "finished" : "amaitua", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Ez da zerbitzari bateragarririk aurkitu {remote} helbidean", "Invalid server URL" : "Zerbitzari URL baliogabea", "Failed to add the public link to your Nextcloud" : "Huts egin du esteka publikoa zure Nextcloudera gehitzean", - "No expiration date set" : "Ez da iraungitze-datarik ezarri", - "Shared by" : "Honek partekatua", "File shares" : "Fitxategi partekatzeak", "Downloaded via public link" : "Esteka publikoaren bidez deskargatuta", "Downloaded by {email}" : "{email} erabiltzaileak deskargatua", @@ -245,6 +218,7 @@ OC.L10N.register( "Share {propertyName} saved" : "Partekatu {propertyName} gordeta", "Shared" : "Partekatuta", "Share" : "Partekatu", + "Shared by" : "Honek partekatua", "Shared with" : "Honekin partekatua", "Password created successfully" : "Pasahitza ongi sortu da", "Error generating password from password policy" : "Errorea pasahitz-gidalerrotik pasahitza sortzean", @@ -252,6 +226,12 @@ OC.L10N.register( "Shared with you and {circle} by {owner}" : " {owner} erabiltzaileak zurekin eta {circle} zirkuluarekin partekatua", "Shared with you and the conversation {conversation} by {owner}" : "{owner} erabiltzaileak zu eta {conversation} elkarrizketarekin partekatua", "Shared with you in a conversation by {owner}" : "{owner} erabiltzaileak zurekin partekatua elkarrizketa batean", + "Shares" : "Partekatzeak", + "Shared with you" : "Zurekin partekatua", + "Shared with others" : "Beste batzuekin partekatua", + "Shared by link" : "Esteka bidez partekatua", + "Deleted shares" : "Ezabatutako partekatzeak", + "Pending shares" : "Zain dauden partekatzeak", "No entries found in this folder" : "Karpeta honetan ez da sarreraik aurkitu", "Name" : "Izena", "Share time" : "Partekatzearen ordua", @@ -270,6 +250,23 @@ OC.L10N.register( "Uploaded files:" : "Kargatutako fitxategiak:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Fitxategiak kargatzean, %1$szerbitzu-baldintzak%2$s onartzen dituzu.", "Add to your Nextcloud" : "Gehitu zure Nextclouden", + "Nothing shared with you yet" : "Oraindik ez da ezer partekatu zurekin", + "Files and folders others share with you will show up here" : "Zurekin partekatutako fitxategi eta karpetak hemen agertuko dira", + "Nothing shared yet" : "Oraindik ez da ezer partekatu", + "Files and folders you share will show up here" : "Partekatzen dituzun fitxategi eta karpetak hemen agertuko dira", + "No shared links" : "Ez dago partekatutako estekarik", + "Files and folders you share by link will show up here" : "Esteka bidez partekatzen dituzun fitxategi eta karpetak hemen agertuko dira", + "No deleted shares" : "Ezabatutako partekatzerik ez", + "Shares you deleted will show up here" : "Ezabatzen dituzun partekatzeak hemen agertuko dira", + "No pending shares" : "Ez dago zain dagoen partekatzerik", + "Shares you have received but not confirmed will show up here" : "Jaso dituzun baina berretsi gabe dauden partekatzeak hemen agertuko dira", + "No shares" : "Partekatzerik ez", + "Shares will show up here" : "Partekatzeak hemen agertuko dira", + "Restore" : "Berrezarri", + "Something happened. Unable to restore the share." : "Zerbait gertatu da. Ezin izan da partekatzea berrezarri.", + "Something happened. Unable to accept the share." : "Zerbait gertatu da. Ezin izan da partekatzea onartu.", + "Something happened. Unable to reject the share." : "Zerbait gertatu da. Ezin izan da partekatzea ukatu.", + "No expiration date set" : "Ez da iraungitze-datarik ezarri", "Sharing %s failed because the back end does not support sciencemesh shares" : "%spartekatzeak huts egin du atzealdeak ez duelako zientzia sareko partekatzea onartzen", "One or more of your shares will expire tomorrow" : "Zure partekatzeetako bat gutxienez bihar iraungiko da", "Science Mesh" : "Zientzia sarea", diff --git a/apps/files_sharing/l10n/eu.json b/apps/files_sharing/l10n/eu.json index c88f4aeeddd..ba241f532c7 100644 --- a/apps/files_sharing/l10n/eu.json +++ b/apps/files_sharing/l10n/eu.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Zurekin partekatua", - "Nothing shared with you yet" : "Oraindik ez da ezer partekatu zurekin", - "Files and folders others share with you will show up here" : "Zurekin partekatutako fitxategi eta karpetak hemen agertuko dira", - "Shared with others" : "Beste batzuekin partekatua", - "Nothing shared yet" : "Oraindik ez da ezer partekatu", - "Files and folders you share will show up here" : "Partekatzen dituzun fitxategi eta karpetak hemen agertuko dira", - "Shared by link" : "Esteka bidez partekatua", - "No shared links" : "Ez dago partekatutako estekarik", - "Files and folders you share by link will show up here" : "Esteka bidez partekatzen dituzun fitxategi eta karpetak hemen agertuko dira", - "Deleted shares" : "Ezabatutako partekatzeak", - "No deleted shares" : "Ezabatutako partekatzerik ez", - "Shares you deleted will show up here" : "Ezabatzen dituzun partekatzeak hemen agertuko dira", - "Pending shares" : "Zain dauden partekatzeak", - "No pending shares" : "Ez dago zain dagoen partekatzerik", - "Shares you have received but not confirmed will show up here" : "Jaso dituzun baina berretsi gabe dauden partekatzeak hemen agertuko dira", - "Shares" : "Partekatzeak", - "No shares" : "Partekatzerik ez", - "Shares will show up here" : "Partekatzeak hemen agertuko dira", - "Restore" : "Berrezarri", - "Restore share" : "Berrezarri partekatzea", - "Something happened. Unable to restore the share." : "Zerbait gertatu da. Ezin izan da partekatzea berrezarri.", - "Accept share" : "Onartu partekatzea", - "Something happened. Unable to accept the share." : "Zerbait gertatu da. Ezin izan da partekatzea onartu.", - "Reject share" : "Ukatu partekatzea", - "Something happened. Unable to reject the share." : "Zerbait gertatu da. Ezin izan da partekatzea ukatu.", "Waiting…" : "Itxaroten...", "error" : "errorea", "finished" : "amaitua", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "Ez da zerbitzari bateragarririk aurkitu {remote} helbidean", "Invalid server URL" : "Zerbitzari URL baliogabea", "Failed to add the public link to your Nextcloud" : "Huts egin du esteka publikoa zure Nextcloudera gehitzean", - "No expiration date set" : "Ez da iraungitze-datarik ezarri", - "Shared by" : "Honek partekatua", "File shares" : "Fitxategi partekatzeak", "Downloaded via public link" : "Esteka publikoaren bidez deskargatuta", "Downloaded by {email}" : "{email} erabiltzaileak deskargatua", @@ -243,6 +216,7 @@ "Share {propertyName} saved" : "Partekatu {propertyName} gordeta", "Shared" : "Partekatuta", "Share" : "Partekatu", + "Shared by" : "Honek partekatua", "Shared with" : "Honekin partekatua", "Password created successfully" : "Pasahitza ongi sortu da", "Error generating password from password policy" : "Errorea pasahitz-gidalerrotik pasahitza sortzean", @@ -250,6 +224,12 @@ "Shared with you and {circle} by {owner}" : " {owner} erabiltzaileak zurekin eta {circle} zirkuluarekin partekatua", "Shared with you and the conversation {conversation} by {owner}" : "{owner} erabiltzaileak zu eta {conversation} elkarrizketarekin partekatua", "Shared with you in a conversation by {owner}" : "{owner} erabiltzaileak zurekin partekatua elkarrizketa batean", + "Shares" : "Partekatzeak", + "Shared with you" : "Zurekin partekatua", + "Shared with others" : "Beste batzuekin partekatua", + "Shared by link" : "Esteka bidez partekatua", + "Deleted shares" : "Ezabatutako partekatzeak", + "Pending shares" : "Zain dauden partekatzeak", "No entries found in this folder" : "Karpeta honetan ez da sarreraik aurkitu", "Name" : "Izena", "Share time" : "Partekatzearen ordua", @@ -268,6 +248,23 @@ "Uploaded files:" : "Kargatutako fitxategiak:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Fitxategiak kargatzean, %1$szerbitzu-baldintzak%2$s onartzen dituzu.", "Add to your Nextcloud" : "Gehitu zure Nextclouden", + "Nothing shared with you yet" : "Oraindik ez da ezer partekatu zurekin", + "Files and folders others share with you will show up here" : "Zurekin partekatutako fitxategi eta karpetak hemen agertuko dira", + "Nothing shared yet" : "Oraindik ez da ezer partekatu", + "Files and folders you share will show up here" : "Partekatzen dituzun fitxategi eta karpetak hemen agertuko dira", + "No shared links" : "Ez dago partekatutako estekarik", + "Files and folders you share by link will show up here" : "Esteka bidez partekatzen dituzun fitxategi eta karpetak hemen agertuko dira", + "No deleted shares" : "Ezabatutako partekatzerik ez", + "Shares you deleted will show up here" : "Ezabatzen dituzun partekatzeak hemen agertuko dira", + "No pending shares" : "Ez dago zain dagoen partekatzerik", + "Shares you have received but not confirmed will show up here" : "Jaso dituzun baina berretsi gabe dauden partekatzeak hemen agertuko dira", + "No shares" : "Partekatzerik ez", + "Shares will show up here" : "Partekatzeak hemen agertuko dira", + "Restore" : "Berrezarri", + "Something happened. Unable to restore the share." : "Zerbait gertatu da. Ezin izan da partekatzea berrezarri.", + "Something happened. Unable to accept the share." : "Zerbait gertatu da. Ezin izan da partekatzea onartu.", + "Something happened. Unable to reject the share." : "Zerbait gertatu da. Ezin izan da partekatzea ukatu.", + "No expiration date set" : "Ez da iraungitze-datarik ezarri", "Sharing %s failed because the back end does not support sciencemesh shares" : "%spartekatzeak huts egin du atzealdeak ez duelako zientzia sareko partekatzea onartzen", "One or more of your shares will expire tomorrow" : "Zure partekatzeetako bat gutxienez bihar iraungiko da", "Science Mesh" : "Zientzia sarea", diff --git a/apps/files_sharing/l10n/fa.js b/apps/files_sharing/l10n/fa.js index 21a1b7fd08e..a43e6a7af96 100644 --- a/apps/files_sharing/l10n/fa.js +++ b/apps/files_sharing/l10n/fa.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "موارد به اشتراک گذاشته شده با شما", - "Nothing shared with you yet" : "هیچ موردی با شما به اشتراک گذاشته نشده است", - "Files and folders others share with you will show up here" : "فایل ها و پوشه های که دیگران با شما به اشتراک گذاشته شده، اینجا نماش داده خواهند شد.", - "Shared with others" : "موارد به اشتراک گذاشته شده با دیگران", - "Nothing shared yet" : "هیچ موردی تاکنون به اشتراک گذاشته نشده است", - "Files and folders you share will show up here" : "فایل ها و پوشه هایی که شما به اشتراک می گذارید در اینجا نمایش داده خواهند شد.", - "Shared by link" : "اشتراک گذاشته شده از طریق لینک", - "No shared links" : "هیچ لینک اشتراکگذاری وجود ندارد", - "Files and folders you share by link will show up here" : "فایلها و پوشههای اشتراکگذاشته توسط شما همراه با لینک در اینجا نمایش داده خواهد شد", - "Deleted shares" : "اشتراک گذاری های حذف شده", - "No deleted shares" : "اشتراک گذاری های حذف نشده", - "Shares you deleted will show up here" : "اشتراک گذاری هایی که شما حذف کرده اید اینجا نمایش داده خواهند شد", - "Pending shares" : "اشتراک در حال انتظار ", - "No pending shares" : "بدون اشتراک در حال انتظار", - "Shares you have received but not confirmed will show up here" : "سهام شما دریافت کرده اید اما تأیید نشده است در اینجا نشان داده می شود", - "Shares" : "اشتراک گذاری ها", - "No shares" : "اشتراک گذاری وجود ندارد", - "Shares will show up here" : "موارد به اشتراک گذاری شده اینجا نمایش داده خواهند شد", - "Restore" : "بازیابی", - "Restore share" : "بازیابی مورد اشتراک گذاری شده", - "Something happened. Unable to restore the share." : "موردی پیش آمده است. امکان بازیابی مورد اشتراک گذاری شده وجود ندارد.", - "Accept share" : "پذیرفتن اشتراک ", - "Something happened. Unable to accept the share." : "اتفاقی افتاد. امکان اشتراک گذاری وجود ندارد", - "Reject share" : "رد اشتراک", - "Something happened. Unable to reject the share." : "اتفاقی افتاد. امکان رد اشتراک وجود ندارد.", "Waiting…" : "منتظر باشید ...", "error" : "خطا", "finished" : "تمام شد", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "هیچ سرور سازگار در {از راه دور} یافت نشد", "Invalid server URL" : "ادرس سرور نامعتبر", "Failed to add the public link to your Nextcloud" : "خطا در افزودن ادرس عمومی به نکس کلود شما", - "No expiration date set" : "تاریخ انقضا ست نشده است", - "Shared by" : "اشتراک گذاشته شده به وسیله", "File shares" : "اشتراک گذاری های فایل", "Downloaded via public link" : "بارگزاری شده توسط ادرس عمومی ", "Downloaded by {email}" : "بارگذاری شده توسط {email}", @@ -210,11 +183,18 @@ OC.L10N.register( "Error updating the share" : "خطایی در به روزرسانی اشتراک", "Shared" : "به اشتراک گزاشته شده ", "Share" : "همرسانی", + "Shared by" : "اشتراک گذاشته شده به وسیله", "Shared with" : "مشترک با", "Shared with you and the group {group} by {owner}" : "به اشتراک گذاشته شده با شما و گروه {گروه} توسط {دارنده}", "Shared with you and {circle} by {owner}" : "با شما و {حلقه} توسط {مالک }به اشتراک گذاشته شده است", "Shared with you and the conversation {conversation} by {owner}" : "با شما و گفتگو {مکالمه} توسط {صاحب }به اشتراک گذاشته شده است", "Shared with you in a conversation by {owner}" : "در گفتگو توسط {صاحب} با شما به اشتراک گذاشته شده است", + "Shares" : "اشتراک گذاری ها", + "Shared with you" : "موارد به اشتراک گذاشته شده با شما", + "Shared with others" : "موارد به اشتراک گذاشته شده با دیگران", + "Shared by link" : "اشتراک گذاشته شده از طریق لینک", + "Deleted shares" : "اشتراک گذاری های حذف شده", + "Pending shares" : "اشتراک در حال انتظار ", "No entries found in this folder" : "هیچ ورودیای در این پوشه وجود ندارد", "Name" : "نام", "Share time" : "زمان به اشتراک گذاری", @@ -231,6 +211,23 @@ OC.L10N.register( "Uploaded files:" : "پرونده های بارگذاری شده:", "By uploading files, you agree to the %1$sterms of service%2$s." : "%2$sبا بارگذاری پرونده ها ، شما با %1$sشرایط خدمات موافقت می کنید", "Add to your Nextcloud" : "به نکستکلود خود اضافه کنید", + "Nothing shared with you yet" : "هیچ موردی با شما به اشتراک گذاشته نشده است", + "Files and folders others share with you will show up here" : "فایل ها و پوشه های که دیگران با شما به اشتراک گذاشته شده، اینجا نماش داده خواهند شد.", + "Nothing shared yet" : "هیچ موردی تاکنون به اشتراک گذاشته نشده است", + "Files and folders you share will show up here" : "فایل ها و پوشه هایی که شما به اشتراک می گذارید در اینجا نمایش داده خواهند شد.", + "No shared links" : "هیچ لینک اشتراکگذاری وجود ندارد", + "Files and folders you share by link will show up here" : "فایلها و پوشههای اشتراکگذاشته توسط شما همراه با لینک در اینجا نمایش داده خواهد شد", + "No deleted shares" : "اشتراک گذاری های حذف نشده", + "Shares you deleted will show up here" : "اشتراک گذاری هایی که شما حذف کرده اید اینجا نمایش داده خواهند شد", + "No pending shares" : "بدون اشتراک در حال انتظار", + "Shares you have received but not confirmed will show up here" : "سهام شما دریافت کرده اید اما تأیید نشده است در اینجا نشان داده می شود", + "No shares" : "اشتراک گذاری وجود ندارد", + "Shares will show up here" : "موارد به اشتراک گذاری شده اینجا نمایش داده خواهند شد", + "Restore" : "بازیابی", + "Something happened. Unable to restore the share." : "موردی پیش آمده است. امکان بازیابی مورد اشتراک گذاری شده وجود ندارد.", + "Something happened. Unable to accept the share." : "اتفاقی افتاد. امکان اشتراک گذاری وجود ندارد", + "Something happened. Unable to reject the share." : "اتفاقی افتاد. امکان رد اشتراک وجود ندارد.", + "No expiration date set" : "تاریخ انقضا ست نشده است", "One or more of your shares will expire tomorrow" : "یک یا چند مورد از اشتراک شما فردا منقضی می شود" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/files_sharing/l10n/fa.json b/apps/files_sharing/l10n/fa.json index b6dc2d456ca..53509b5569d 100644 --- a/apps/files_sharing/l10n/fa.json +++ b/apps/files_sharing/l10n/fa.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "موارد به اشتراک گذاشته شده با شما", - "Nothing shared with you yet" : "هیچ موردی با شما به اشتراک گذاشته نشده است", - "Files and folders others share with you will show up here" : "فایل ها و پوشه های که دیگران با شما به اشتراک گذاشته شده، اینجا نماش داده خواهند شد.", - "Shared with others" : "موارد به اشتراک گذاشته شده با دیگران", - "Nothing shared yet" : "هیچ موردی تاکنون به اشتراک گذاشته نشده است", - "Files and folders you share will show up here" : "فایل ها و پوشه هایی که شما به اشتراک می گذارید در اینجا نمایش داده خواهند شد.", - "Shared by link" : "اشتراک گذاشته شده از طریق لینک", - "No shared links" : "هیچ لینک اشتراکگذاری وجود ندارد", - "Files and folders you share by link will show up here" : "فایلها و پوشههای اشتراکگذاشته توسط شما همراه با لینک در اینجا نمایش داده خواهد شد", - "Deleted shares" : "اشتراک گذاری های حذف شده", - "No deleted shares" : "اشتراک گذاری های حذف نشده", - "Shares you deleted will show up here" : "اشتراک گذاری هایی که شما حذف کرده اید اینجا نمایش داده خواهند شد", - "Pending shares" : "اشتراک در حال انتظار ", - "No pending shares" : "بدون اشتراک در حال انتظار", - "Shares you have received but not confirmed will show up here" : "سهام شما دریافت کرده اید اما تأیید نشده است در اینجا نشان داده می شود", - "Shares" : "اشتراک گذاری ها", - "No shares" : "اشتراک گذاری وجود ندارد", - "Shares will show up here" : "موارد به اشتراک گذاری شده اینجا نمایش داده خواهند شد", - "Restore" : "بازیابی", - "Restore share" : "بازیابی مورد اشتراک گذاری شده", - "Something happened. Unable to restore the share." : "موردی پیش آمده است. امکان بازیابی مورد اشتراک گذاری شده وجود ندارد.", - "Accept share" : "پذیرفتن اشتراک ", - "Something happened. Unable to accept the share." : "اتفاقی افتاد. امکان اشتراک گذاری وجود ندارد", - "Reject share" : "رد اشتراک", - "Something happened. Unable to reject the share." : "اتفاقی افتاد. امکان رد اشتراک وجود ندارد.", "Waiting…" : "منتظر باشید ...", "error" : "خطا", "finished" : "تمام شد", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "هیچ سرور سازگار در {از راه دور} یافت نشد", "Invalid server URL" : "ادرس سرور نامعتبر", "Failed to add the public link to your Nextcloud" : "خطا در افزودن ادرس عمومی به نکس کلود شما", - "No expiration date set" : "تاریخ انقضا ست نشده است", - "Shared by" : "اشتراک گذاشته شده به وسیله", "File shares" : "اشتراک گذاری های فایل", "Downloaded via public link" : "بارگزاری شده توسط ادرس عمومی ", "Downloaded by {email}" : "بارگذاری شده توسط {email}", @@ -208,11 +181,18 @@ "Error updating the share" : "خطایی در به روزرسانی اشتراک", "Shared" : "به اشتراک گزاشته شده ", "Share" : "همرسانی", + "Shared by" : "اشتراک گذاشته شده به وسیله", "Shared with" : "مشترک با", "Shared with you and the group {group} by {owner}" : "به اشتراک گذاشته شده با شما و گروه {گروه} توسط {دارنده}", "Shared with you and {circle} by {owner}" : "با شما و {حلقه} توسط {مالک }به اشتراک گذاشته شده است", "Shared with you and the conversation {conversation} by {owner}" : "با شما و گفتگو {مکالمه} توسط {صاحب }به اشتراک گذاشته شده است", "Shared with you in a conversation by {owner}" : "در گفتگو توسط {صاحب} با شما به اشتراک گذاشته شده است", + "Shares" : "اشتراک گذاری ها", + "Shared with you" : "موارد به اشتراک گذاشته شده با شما", + "Shared with others" : "موارد به اشتراک گذاشته شده با دیگران", + "Shared by link" : "اشتراک گذاشته شده از طریق لینک", + "Deleted shares" : "اشتراک گذاری های حذف شده", + "Pending shares" : "اشتراک در حال انتظار ", "No entries found in this folder" : "هیچ ورودیای در این پوشه وجود ندارد", "Name" : "نام", "Share time" : "زمان به اشتراک گذاری", @@ -229,6 +209,23 @@ "Uploaded files:" : "پرونده های بارگذاری شده:", "By uploading files, you agree to the %1$sterms of service%2$s." : "%2$sبا بارگذاری پرونده ها ، شما با %1$sشرایط خدمات موافقت می کنید", "Add to your Nextcloud" : "به نکستکلود خود اضافه کنید", + "Nothing shared with you yet" : "هیچ موردی با شما به اشتراک گذاشته نشده است", + "Files and folders others share with you will show up here" : "فایل ها و پوشه های که دیگران با شما به اشتراک گذاشته شده، اینجا نماش داده خواهند شد.", + "Nothing shared yet" : "هیچ موردی تاکنون به اشتراک گذاشته نشده است", + "Files and folders you share will show up here" : "فایل ها و پوشه هایی که شما به اشتراک می گذارید در اینجا نمایش داده خواهند شد.", + "No shared links" : "هیچ لینک اشتراکگذاری وجود ندارد", + "Files and folders you share by link will show up here" : "فایلها و پوشههای اشتراکگذاشته توسط شما همراه با لینک در اینجا نمایش داده خواهد شد", + "No deleted shares" : "اشتراک گذاری های حذف نشده", + "Shares you deleted will show up here" : "اشتراک گذاری هایی که شما حذف کرده اید اینجا نمایش داده خواهند شد", + "No pending shares" : "بدون اشتراک در حال انتظار", + "Shares you have received but not confirmed will show up here" : "سهام شما دریافت کرده اید اما تأیید نشده است در اینجا نشان داده می شود", + "No shares" : "اشتراک گذاری وجود ندارد", + "Shares will show up here" : "موارد به اشتراک گذاری شده اینجا نمایش داده خواهند شد", + "Restore" : "بازیابی", + "Something happened. Unable to restore the share." : "موردی پیش آمده است. امکان بازیابی مورد اشتراک گذاری شده وجود ندارد.", + "Something happened. Unable to accept the share." : "اتفاقی افتاد. امکان اشتراک گذاری وجود ندارد", + "Something happened. Unable to reject the share." : "اتفاقی افتاد. امکان رد اشتراک وجود ندارد.", + "No expiration date set" : "تاریخ انقضا ست نشده است", "One or more of your shares will expire tomorrow" : "یک یا چند مورد از اشتراک شما فردا منقضی می شود" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/fi.js b/apps/files_sharing/l10n/fi.js index 18b3f66af1e..b9ef6675b1a 100644 --- a/apps/files_sharing/l10n/fi.js +++ b/apps/files_sharing/l10n/fi.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Jaettu kanssasi", - "Nothing shared with you yet" : "Kanssasi ei ole vielä jaettu mitään", - "Files and folders others share with you will show up here" : "Kanssasi jaetut tiedostot ja kansiot näkyvät täällä", - "Shared with others" : "Jaettu muiden kanssa", - "Nothing shared yet" : "Ei mitään jaettua", - "Files and folders you share will show up here" : "Jakamasi tiedostot ja kansiot näkyvät täällä", - "Shared by link" : "Jaettu linkin kautta", - "No shared links" : "Ei jaettuja linkkejä", - "Files and folders you share by link will show up here" : "Linkin kautta jakamasi tiedostot ja kansiot näkyvät täällä", - "Deleted shares" : "Poistetut jaot", - "No deleted shares" : "Ei poistettuja jakoja", - "Shares you deleted will show up here" : "Poistamasi jaot näkyvät täällä", - "Pending shares" : "Odottavat jaot", - "No pending shares" : "Ei odottavia jakoja", - "Shares you have received but not confirmed will show up here" : "Vastaanottamasi jaot, joita ei ole vahvistettu, näkyvät täällä", - "Shares" : "Jaot", - "No shares" : "Ei jakoja", - "Shares will show up here" : "Jaot näkyvät täällä", - "Restore" : "Palauta", - "Restore share" : "Palauta jako", - "Something happened. Unable to restore the share." : "Jotain tapahtui. Jakoa ei kyetty palauttamaan.", - "Accept share" : "Hyväksy jako", - "Something happened. Unable to accept the share." : "Jotain tapahtui. Jakoa ei voitu hyväksyä.", - "Reject share" : "Hylkää jako", - "Something happened. Unable to reject the share." : "Tapahtui virhe. Ei voida hylätä jakoa.", "Waiting…" : "Odotetaan…", "error" : "virhe", "finished" : "valmis", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Yhteensopivaa palvelinta ei löytynyt osoitteesta {remote}", "Invalid server URL" : "Virheellinen palvelimen URL", "Failed to add the public link to your Nextcloud" : "Julkisen linkin lisääminen Nextcloudiisi epäonnistui", - "No expiration date set" : "Ei vanhenemispäivää asetettu", - "Shared by" : "Jakanut", "File shares" : "Tiedostojaot", "Downloaded via public link" : "Ladattu julkista linkkiä käyttäen", "Downloaded by {email}" : "Ladannut {email}", @@ -236,12 +209,19 @@ OC.L10N.register( "Share {propertyName} saved" : "Jako {propertyName} tallennettu", "Shared" : "Jaettu", "Share" : "Jaa", + "Shared by" : "Jakanut", "Shared with" : "Jaettu", "Password created successfully" : "Salasana luotu onnistuneesti", "Shared with you and the group {group} by {owner}" : "Jaettu sinun ja ryhmän {group} kanssa käyttäjältä {owner}", "Shared with you and {circle} by {owner}" : "{owner} on jakanut tämän sinun ja piirin {circle} kanssa", "Shared with you and the conversation {conversation} by {owner}" : "{owner} on jakanut tämän sinun ja keskustelun {conversation} kanssa", "Shared with you in a conversation by {owner}" : "{owner} jakoi tämän kanssasi keskustelussa", + "Shares" : "Jaot", + "Shared with you" : "Jaettu kanssasi", + "Shared with others" : "Jaettu muiden kanssa", + "Shared by link" : "Jaettu linkin kautta", + "Deleted shares" : "Poistetut jaot", + "Pending shares" : "Odottavat jaot", "No entries found in this folder" : "Ei kohteita tässä kansiossa", "Name" : "Nimi", "Share time" : "Jakamisen ajankohta", @@ -260,6 +240,23 @@ OC.L10N.register( "Uploaded files:" : "Lähetetyt tiedostot:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Tiedostoja lähettämällä hyväksyt %1$skäyttöehdot%2$s.", "Add to your Nextcloud" : "Lisää Nextcloudiisi", + "Nothing shared with you yet" : "Kanssasi ei ole vielä jaettu mitään", + "Files and folders others share with you will show up here" : "Kanssasi jaetut tiedostot ja kansiot näkyvät täällä", + "Nothing shared yet" : "Ei mitään jaettua", + "Files and folders you share will show up here" : "Jakamasi tiedostot ja kansiot näkyvät täällä", + "No shared links" : "Ei jaettuja linkkejä", + "Files and folders you share by link will show up here" : "Linkin kautta jakamasi tiedostot ja kansiot näkyvät täällä", + "No deleted shares" : "Ei poistettuja jakoja", + "Shares you deleted will show up here" : "Poistamasi jaot näkyvät täällä", + "No pending shares" : "Ei odottavia jakoja", + "Shares you have received but not confirmed will show up here" : "Vastaanottamasi jaot, joita ei ole vahvistettu, näkyvät täällä", + "No shares" : "Ei jakoja", + "Shares will show up here" : "Jaot näkyvät täällä", + "Restore" : "Palauta", + "Something happened. Unable to restore the share." : "Jotain tapahtui. Jakoa ei kyetty palauttamaan.", + "Something happened. Unable to accept the share." : "Jotain tapahtui. Jakoa ei voitu hyväksyä.", + "Something happened. Unable to reject the share." : "Tapahtui virhe. Ei voida hylätä jakoa.", + "No expiration date set" : "Ei vanhenemispäivää asetettu", "One or more of your shares will expire tomorrow" : "Yksi tai useampi jaoistasi vanhenee huomenna" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/fi.json b/apps/files_sharing/l10n/fi.json index fa1c8a97740..38ceb03aad2 100644 --- a/apps/files_sharing/l10n/fi.json +++ b/apps/files_sharing/l10n/fi.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Jaettu kanssasi", - "Nothing shared with you yet" : "Kanssasi ei ole vielä jaettu mitään", - "Files and folders others share with you will show up here" : "Kanssasi jaetut tiedostot ja kansiot näkyvät täällä", - "Shared with others" : "Jaettu muiden kanssa", - "Nothing shared yet" : "Ei mitään jaettua", - "Files and folders you share will show up here" : "Jakamasi tiedostot ja kansiot näkyvät täällä", - "Shared by link" : "Jaettu linkin kautta", - "No shared links" : "Ei jaettuja linkkejä", - "Files and folders you share by link will show up here" : "Linkin kautta jakamasi tiedostot ja kansiot näkyvät täällä", - "Deleted shares" : "Poistetut jaot", - "No deleted shares" : "Ei poistettuja jakoja", - "Shares you deleted will show up here" : "Poistamasi jaot näkyvät täällä", - "Pending shares" : "Odottavat jaot", - "No pending shares" : "Ei odottavia jakoja", - "Shares you have received but not confirmed will show up here" : "Vastaanottamasi jaot, joita ei ole vahvistettu, näkyvät täällä", - "Shares" : "Jaot", - "No shares" : "Ei jakoja", - "Shares will show up here" : "Jaot näkyvät täällä", - "Restore" : "Palauta", - "Restore share" : "Palauta jako", - "Something happened. Unable to restore the share." : "Jotain tapahtui. Jakoa ei kyetty palauttamaan.", - "Accept share" : "Hyväksy jako", - "Something happened. Unable to accept the share." : "Jotain tapahtui. Jakoa ei voitu hyväksyä.", - "Reject share" : "Hylkää jako", - "Something happened. Unable to reject the share." : "Tapahtui virhe. Ei voida hylätä jakoa.", "Waiting…" : "Odotetaan…", "error" : "virhe", "finished" : "valmis", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "Yhteensopivaa palvelinta ei löytynyt osoitteesta {remote}", "Invalid server URL" : "Virheellinen palvelimen URL", "Failed to add the public link to your Nextcloud" : "Julkisen linkin lisääminen Nextcloudiisi epäonnistui", - "No expiration date set" : "Ei vanhenemispäivää asetettu", - "Shared by" : "Jakanut", "File shares" : "Tiedostojaot", "Downloaded via public link" : "Ladattu julkista linkkiä käyttäen", "Downloaded by {email}" : "Ladannut {email}", @@ -234,12 +207,19 @@ "Share {propertyName} saved" : "Jako {propertyName} tallennettu", "Shared" : "Jaettu", "Share" : "Jaa", + "Shared by" : "Jakanut", "Shared with" : "Jaettu", "Password created successfully" : "Salasana luotu onnistuneesti", "Shared with you and the group {group} by {owner}" : "Jaettu sinun ja ryhmän {group} kanssa käyttäjältä {owner}", "Shared with you and {circle} by {owner}" : "{owner} on jakanut tämän sinun ja piirin {circle} kanssa", "Shared with you and the conversation {conversation} by {owner}" : "{owner} on jakanut tämän sinun ja keskustelun {conversation} kanssa", "Shared with you in a conversation by {owner}" : "{owner} jakoi tämän kanssasi keskustelussa", + "Shares" : "Jaot", + "Shared with you" : "Jaettu kanssasi", + "Shared with others" : "Jaettu muiden kanssa", + "Shared by link" : "Jaettu linkin kautta", + "Deleted shares" : "Poistetut jaot", + "Pending shares" : "Odottavat jaot", "No entries found in this folder" : "Ei kohteita tässä kansiossa", "Name" : "Nimi", "Share time" : "Jakamisen ajankohta", @@ -258,6 +238,23 @@ "Uploaded files:" : "Lähetetyt tiedostot:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Tiedostoja lähettämällä hyväksyt %1$skäyttöehdot%2$s.", "Add to your Nextcloud" : "Lisää Nextcloudiisi", + "Nothing shared with you yet" : "Kanssasi ei ole vielä jaettu mitään", + "Files and folders others share with you will show up here" : "Kanssasi jaetut tiedostot ja kansiot näkyvät täällä", + "Nothing shared yet" : "Ei mitään jaettua", + "Files and folders you share will show up here" : "Jakamasi tiedostot ja kansiot näkyvät täällä", + "No shared links" : "Ei jaettuja linkkejä", + "Files and folders you share by link will show up here" : "Linkin kautta jakamasi tiedostot ja kansiot näkyvät täällä", + "No deleted shares" : "Ei poistettuja jakoja", + "Shares you deleted will show up here" : "Poistamasi jaot näkyvät täällä", + "No pending shares" : "Ei odottavia jakoja", + "Shares you have received but not confirmed will show up here" : "Vastaanottamasi jaot, joita ei ole vahvistettu, näkyvät täällä", + "No shares" : "Ei jakoja", + "Shares will show up here" : "Jaot näkyvät täällä", + "Restore" : "Palauta", + "Something happened. Unable to restore the share." : "Jotain tapahtui. Jakoa ei kyetty palauttamaan.", + "Something happened. Unable to accept the share." : "Jotain tapahtui. Jakoa ei voitu hyväksyä.", + "Something happened. Unable to reject the share." : "Tapahtui virhe. Ei voida hylätä jakoa.", + "No expiration date set" : "Ei vanhenemispäivää asetettu", "One or more of your shares will expire tomorrow" : "Yksi tai useampi jaoistasi vanhenee huomenna" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/fr.js b/apps/files_sharing/l10n/fr.js index 911b3583d35..3183f9fc9d7 100644 --- a/apps/files_sharing/l10n/fr.js +++ b/apps/files_sharing/l10n/fr.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Partagés avec vous", - "Nothing shared with you yet" : "Aucun fichier n'est partagé avec vous pour l'instant", - "Files and folders others share with you will show up here" : "Les fichiers et dossiers partagés avec vous apparaîtront ici", - "Shared with others" : "Partagés avec d'autres", - "Nothing shared yet" : "Rien n'est partagé pour l'instant", - "Files and folders you share will show up here" : "Les fichiers et dossiers que vous partagez apparaîtront ici", - "Shared by link" : "Partagés par lien", - "No shared links" : "Aucun partage par lien", - "Files and folders you share by link will show up here" : "Les fichiers et dossiers que vous partagez par lien apparaîtront ici", - "Deleted shares" : "Partages supprimés", - "No deleted shares" : "Aucun partage supprimé", - "Shares you deleted will show up here" : "Les partages que vous avez supprimés apparaîtront ici", - "Pending shares" : "Partages en attente", - "No pending shares" : "Aucun partage en attente", - "Shares you have received but not confirmed will show up here" : "Les partages que vous avez reçus mais que vous n'avez pas encore acceptés apparaîtront ici", - "Shares" : "Partages", - "No shares" : "Aucun partage", - "Shares will show up here" : "Les partages seront affichés ici", - "Restore" : "Restaurer", - "Restore share" : "Restaurer le partage", - "Something happened. Unable to restore the share." : "Quelque chose s'est passé. Impossible de restaurer le partage.", - "Accept share" : "Accepter le partage", - "Something happened. Unable to accept the share." : "Quelque chose s'est passé. Impossible d'accepter le partage.", - "Reject share" : "Refuser le partage", - "Something happened. Unable to reject the share." : "Quelque chose s'est passé. Impossible de refuser le partage.", "Waiting…" : "En attente...", "error" : "erreur", "finished" : "terminé", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Aucun serveur compatible trouvé sur {remote}", "Invalid server URL" : "URL serveur invalide", "Failed to add the public link to your Nextcloud" : "Échec de l'ajout du lien public à votre Nextcloud", - "No expiration date set" : "Aucune date d'expiration définie", - "Shared by" : "Partagé par", "File shares" : "Partages de fichiers", "Downloaded via public link" : "Téléchargé par lien public", "Downloaded by {email}" : "Téléchargé par {email}", @@ -247,6 +220,7 @@ OC.L10N.register( "Share {propertyName} saved" : "{propertyName} du partage enregistré", "Shared" : "Partagé", "Share" : "Partager", + "Shared by" : "Partagé par", "Shared with" : "Partagé avec", "Password created successfully" : "Mot de passe créé avec succès", "Error generating password from password policy" : "Erreur de génération du mot de passe à partir de la politique de mots de passe", @@ -254,6 +228,12 @@ OC.L10N.register( "Shared with you and {circle} by {owner}" : "Partagé avec vous et {circle} par {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Partagé avec vous et la conversation {conversation} par {owner}", "Shared with you in a conversation by {owner}" : "Partagé avec vous dans une conversation de {owner}", + "Shares" : "Partages", + "Shared with you" : "Partagés avec vous", + "Shared with others" : "Partagés avec d'autres", + "Shared by link" : "Partagés par lien", + "Deleted shares" : "Partages supprimés", + "Pending shares" : "Partages en attente", "No entries found in this folder" : "Aucune entrée trouvée dans ce dossier", "Name" : "Nom", "Share time" : "Date de partage", @@ -272,6 +252,23 @@ OC.L10N.register( "Uploaded files:" : "Fichiers envoyés :", "By uploading files, you agree to the %1$sterms of service%2$s." : "En envoyant des fichiers, vous acceptez les %1$sconditions d'utilisation%2$s.", "Add to your Nextcloud" : "Ajouter à votre Nextcloud", + "Nothing shared with you yet" : "Aucun fichier n'est partagé avec vous pour l'instant", + "Files and folders others share with you will show up here" : "Les fichiers et dossiers partagés avec vous apparaîtront ici", + "Nothing shared yet" : "Rien n'est partagé pour l'instant", + "Files and folders you share will show up here" : "Les fichiers et dossiers que vous partagez apparaîtront ici", + "No shared links" : "Aucun partage par lien", + "Files and folders you share by link will show up here" : "Les fichiers et dossiers que vous partagez par lien apparaîtront ici", + "No deleted shares" : "Aucun partage supprimé", + "Shares you deleted will show up here" : "Les partages que vous avez supprimés apparaîtront ici", + "No pending shares" : "Aucun partage en attente", + "Shares you have received but not confirmed will show up here" : "Les partages que vous avez reçus mais que vous n'avez pas encore acceptés apparaîtront ici", + "No shares" : "Aucun partage", + "Shares will show up here" : "Les partages seront affichés ici", + "Restore" : "Restaurer", + "Something happened. Unable to restore the share." : "Quelque chose s'est passé. Impossible de restaurer le partage.", + "Something happened. Unable to accept the share." : "Quelque chose s'est passé. Impossible d'accepter le partage.", + "Something happened. Unable to reject the share." : "Quelque chose s'est passé. Impossible de refuser le partage.", + "No expiration date set" : "Aucune date d'expiration définie", "Sharing %s failed because the back end does not support sciencemesh shares" : "Le partage de %s a échoué car le serveur ne supporte pas les partages sciencemesh", "One or more of your shares will expire tomorrow" : "Au moins l'un de vos partages expirera demain", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/fr.json b/apps/files_sharing/l10n/fr.json index 0412c870b97..ea78c1a714b 100644 --- a/apps/files_sharing/l10n/fr.json +++ b/apps/files_sharing/l10n/fr.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Partagés avec vous", - "Nothing shared with you yet" : "Aucun fichier n'est partagé avec vous pour l'instant", - "Files and folders others share with you will show up here" : "Les fichiers et dossiers partagés avec vous apparaîtront ici", - "Shared with others" : "Partagés avec d'autres", - "Nothing shared yet" : "Rien n'est partagé pour l'instant", - "Files and folders you share will show up here" : "Les fichiers et dossiers que vous partagez apparaîtront ici", - "Shared by link" : "Partagés par lien", - "No shared links" : "Aucun partage par lien", - "Files and folders you share by link will show up here" : "Les fichiers et dossiers que vous partagez par lien apparaîtront ici", - "Deleted shares" : "Partages supprimés", - "No deleted shares" : "Aucun partage supprimé", - "Shares you deleted will show up here" : "Les partages que vous avez supprimés apparaîtront ici", - "Pending shares" : "Partages en attente", - "No pending shares" : "Aucun partage en attente", - "Shares you have received but not confirmed will show up here" : "Les partages que vous avez reçus mais que vous n'avez pas encore acceptés apparaîtront ici", - "Shares" : "Partages", - "No shares" : "Aucun partage", - "Shares will show up here" : "Les partages seront affichés ici", - "Restore" : "Restaurer", - "Restore share" : "Restaurer le partage", - "Something happened. Unable to restore the share." : "Quelque chose s'est passé. Impossible de restaurer le partage.", - "Accept share" : "Accepter le partage", - "Something happened. Unable to accept the share." : "Quelque chose s'est passé. Impossible d'accepter le partage.", - "Reject share" : "Refuser le partage", - "Something happened. Unable to reject the share." : "Quelque chose s'est passé. Impossible de refuser le partage.", "Waiting…" : "En attente...", "error" : "erreur", "finished" : "terminé", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "Aucun serveur compatible trouvé sur {remote}", "Invalid server URL" : "URL serveur invalide", "Failed to add the public link to your Nextcloud" : "Échec de l'ajout du lien public à votre Nextcloud", - "No expiration date set" : "Aucune date d'expiration définie", - "Shared by" : "Partagé par", "File shares" : "Partages de fichiers", "Downloaded via public link" : "Téléchargé par lien public", "Downloaded by {email}" : "Téléchargé par {email}", @@ -245,6 +218,7 @@ "Share {propertyName} saved" : "{propertyName} du partage enregistré", "Shared" : "Partagé", "Share" : "Partager", + "Shared by" : "Partagé par", "Shared with" : "Partagé avec", "Password created successfully" : "Mot de passe créé avec succès", "Error generating password from password policy" : "Erreur de génération du mot de passe à partir de la politique de mots de passe", @@ -252,6 +226,12 @@ "Shared with you and {circle} by {owner}" : "Partagé avec vous et {circle} par {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Partagé avec vous et la conversation {conversation} par {owner}", "Shared with you in a conversation by {owner}" : "Partagé avec vous dans une conversation de {owner}", + "Shares" : "Partages", + "Shared with you" : "Partagés avec vous", + "Shared with others" : "Partagés avec d'autres", + "Shared by link" : "Partagés par lien", + "Deleted shares" : "Partages supprimés", + "Pending shares" : "Partages en attente", "No entries found in this folder" : "Aucune entrée trouvée dans ce dossier", "Name" : "Nom", "Share time" : "Date de partage", @@ -270,6 +250,23 @@ "Uploaded files:" : "Fichiers envoyés :", "By uploading files, you agree to the %1$sterms of service%2$s." : "En envoyant des fichiers, vous acceptez les %1$sconditions d'utilisation%2$s.", "Add to your Nextcloud" : "Ajouter à votre Nextcloud", + "Nothing shared with you yet" : "Aucun fichier n'est partagé avec vous pour l'instant", + "Files and folders others share with you will show up here" : "Les fichiers et dossiers partagés avec vous apparaîtront ici", + "Nothing shared yet" : "Rien n'est partagé pour l'instant", + "Files and folders you share will show up here" : "Les fichiers et dossiers que vous partagez apparaîtront ici", + "No shared links" : "Aucun partage par lien", + "Files and folders you share by link will show up here" : "Les fichiers et dossiers que vous partagez par lien apparaîtront ici", + "No deleted shares" : "Aucun partage supprimé", + "Shares you deleted will show up here" : "Les partages que vous avez supprimés apparaîtront ici", + "No pending shares" : "Aucun partage en attente", + "Shares you have received but not confirmed will show up here" : "Les partages que vous avez reçus mais que vous n'avez pas encore acceptés apparaîtront ici", + "No shares" : "Aucun partage", + "Shares will show up here" : "Les partages seront affichés ici", + "Restore" : "Restaurer", + "Something happened. Unable to restore the share." : "Quelque chose s'est passé. Impossible de restaurer le partage.", + "Something happened. Unable to accept the share." : "Quelque chose s'est passé. Impossible d'accepter le partage.", + "Something happened. Unable to reject the share." : "Quelque chose s'est passé. Impossible de refuser le partage.", + "No expiration date set" : "Aucune date d'expiration définie", "Sharing %s failed because the back end does not support sciencemesh shares" : "Le partage de %s a échoué car le serveur ne supporte pas les partages sciencemesh", "One or more of your shares will expire tomorrow" : "Au moins l'un de vos partages expirera demain", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/gl.js b/apps/files_sharing/l10n/gl.js index bd86b082463..db31feed3df 100644 --- a/apps/files_sharing/l10n/gl.js +++ b/apps/files_sharing/l10n/gl.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Compartido con vostede", - "Nothing shared with you yet" : "Aínda non hai nada compartido con vostede.", - "Files and folders others share with you will show up here" : "Os ficheiros e cartafoles que outros compartan con vostede amosaranse aquí", - "Shared with others" : "Compartido con outros", - "Nothing shared yet" : "Aínda non hai nada compartido", - "Files and folders you share will show up here" : "Os ficheiros e cartafoles que comparta amosaranse aquí", - "Shared by link" : "Compartido por ligazón", - "No shared links" : "Non hai ligazóns compartidas", - "Files and folders you share by link will show up here" : "Os ficheiros e cartafoles que comparta por ligazón amosaranse aquí", - "Deleted shares" : "Recursos compartidos eliminados", - "No deleted shares" : "Non hai recursos compartidos eliminados", - "Shares you deleted will show up here" : "Os recursos compartidos eliminados amosaranse aquí", - "Pending shares" : "Recursos compartidos pendentes", - "No pending shares" : "Non hai comparticións pendentes", - "Shares you have received but not confirmed will show up here" : "Os recursos compartidos recibidos mais sen confirmación amosaranse aquí", - "Shares" : "Recursos compartidos", - "No shares" : "Ningún recurso compartido", - "Shares will show up here" : "Os recursos compartidos amosaránse aquí", - "Restore" : "Restaurar", - "Restore share" : "Restaurar recursos compartido", - "Something happened. Unable to restore the share." : "Algo aconteceu. Non é posíbel restaurar o recurso compartido", - "Accept share" : "Aceptar o recurso compartido", - "Something happened. Unable to accept the share." : "Algo aconteceu. Non é posíbel aceptar o recurso compartido.", - "Reject share" : "Rexeitar o recurso compartido", - "Something happened. Unable to reject the share." : "Algo aconteceu. Non é posíbel rexeitar o recurso compartido", "Waiting…" : "Agardando…", "error" : "erro", "finished" : "rematado", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Non se atopa un servidor compatíbel en {remote}", "Invalid server URL" : "URL de servidor incorrecto", "Failed to add the public link to your Nextcloud" : "Non foi posíbel engadir a ligazón pública ao seu Nextcloud", - "No expiration date set" : "Non se definiu a data de caducidade", - "Shared by" : "Compartido por", "File shares" : "Compartir ficheiros", "Downloaded via public link" : "Descargado mediante unha ligazón pública", "Downloaded by {email}" : "Descargado por {email}", @@ -52,8 +25,8 @@ OC.L10N.register( "{actor} shared with group {group}" : "{actor} compartiu co grupo {group}", "{actor} removed share for group {group}" : "{actor} retirou o recurso compartido para o grupo {group}", "Share for group {group} expired" : "Caducou a compartición polo grupo {group}", - "You shared {file} with group {group}" : "Vostede compartiu {file} co grupo {group}", - "You removed group {group} from {file}" : "Vostede retirou o grupo {group} de {file}", + "You shared {file} with group {group}" : "Vde. compartiu {file} co grupo {group}", + "You removed group {group} from {file}" : "Vde. retirou o grupo {group} de {file}", "{actor} shared {file} with group {group}" : "{actor} compartiu {file} co grupo {group}", "{actor} removed group {group} from {file}" : "{actor} retirou o grupo {group} de {file}", "Share for file {file} with group {group} expired" : "Caducou a compartición do ficheiro {file} co grupo {group} ", @@ -63,8 +36,8 @@ OC.L10N.register( "{actor} shared as public link" : "{actor} compartiu como ligazón pública", "{actor} removed public link" : "{actor} retirou a ligazón pública", "Public link of {actor} expired" : "A ligazón pública de {actor} caducou", - "You shared {file} as public link" : "Vostede compartiu {file} como ligazón pública", - "You removed public link for {file}" : "Vostede retirou a ligazón pública de {file}", + "You shared {file} as public link" : "Vde. compartiu {file} como ligazón pública", + "You removed public link for {file}" : "Vde. retirou a ligazón pública de {file}", "Public link expired for {file}" : "A ligazón pública para {file} caducou", "{actor} shared {file} as public link" : "{actor} compartiu {file} como ligazón pública", "{actor} removed public link for {file}" : "{actor} retirou a ligazón pública para {file}", @@ -74,7 +47,7 @@ OC.L10N.register( "You received a new remote share {file} from {user}" : "Recibiu unha nova compartición remota {file} de {user}", "{user} accepted the remote share of {file}" : "{user} aceptou a compartición remotade {file}", "{user} declined the remote share of {file}" : "{user} declinou a compartición remota de {file}", - "{user} unshared {file} from you" : "{user} deixou de compartir {file} con vostede", + "{user} unshared {file} from you" : "{user} deixou de compartir {file} con Vde.", "Shared with {user}" : "Compartido con {user}", "Removed share for {user}" : "Retirar o compartido para {user}", "You removed yourself" : "Retirou a sí mesmo", @@ -85,14 +58,14 @@ OC.L10N.register( "{actor} removed share" : "{actor} retirou o compartido", "Share for {user} expired" : "Caducou a compartición por {user}", "Share expired" : "Caducou a compartición", - "You shared {file} with {user}" : "Vostede compartiu {file} con {user}", - "You removed {user} from {file}" : "Vostede retirou a {user} de {file}", - "You removed yourself from {file}" : "Vostede retirouse a sí mesmo de {file}", + "You shared {file} with {user}" : "Vde. compartiu {file} con {user}", + "You removed {user} from {file}" : "Vde. retirou a {user} de {file}", + "You removed yourself from {file}" : "Vde. retirouse a sí mesmo de {file}", "{actor} removed themselves from {file}" : "{actor} foi retirado de {file}", "{actor} shared {file} with {user}" : "{actor} compartiu {file} con {user}", "{actor} removed {user} from {file}" : "{actor} retirou a {user} de {file}", - "{actor} shared {file} with you" : "{actor} compartiu {file} con vostede", - "{actor} removed you from the share named {file}" : "{actor} retirouno a vostede da compartición nomeada {file}", + "{actor} shared {file} with you" : "{actor} compartiu {file} con Vde.", + "{actor} removed you from the share named {file}" : "{actor} retirouno a Vde. da compartición nomeada {file}", "Share for file {file} with {user} expired" : "Caducou a compartición do ficheiro {file} co usuario {user} ", "Share for file {file} expired" : "Caducou a compartición do ficheiro {file}", "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Foi <strong>descargado</strong> un ficheiro ou cartafol compartido por correo ou ligazón pública", @@ -117,7 +90,7 @@ OC.L10N.register( "Please specify a valid federated user ID" : "Especifique un ID de usuario federado válido", "Invalid date, date format must be YYYY-MM-DD" : "Data incorrecta, o formato da date debe ser AAAA-MM-DD", "Please specify a valid federated group ID" : "Especifique un ID de grupo federado válido", - "You cannot share to a Circle if the app is not enabled" : "Vostede non pode compartir para un círculo se a aplicación non esta activada", + "You cannot share to a Circle if the app is not enabled" : "Vde. non pode compartir para un círculo se a aplicación non esta activada", "Please specify a valid circle" : "Especifique un círculo correcto", "Sharing %s failed because the back end does not support room shares" : "Fallou a compartición de %s, xa que a infraestrutura non admite salas compartidas", "Sharing %s failed because the back end does not support ScienceMesh shares" : "Produciuse un erro ao compartir %s porque a infraestrutura non admite recursos compartidos de ScienceMesh", @@ -137,8 +110,8 @@ OC.L10N.register( "File sharing" : "Compartir ficheiros", "Share will expire tomorrow" : "O recurso compartido caduca mañá", "Your share of {node} will expire tomorrow" : "A súa compartición de {node} caduca mañá", - "You received {share} as a share by {user}" : "Vostede recibiu {share} como un elemento compartido de {user}", - "You received {share} to group {group} as a share by {user}" : "Vostede recibiu {share} no grupo {group} como un elemento compartido de {user}", + "You received {share} as a share by {user}" : "Vde. recibiu {share} como un elemento compartido de {user}", + "You received {share} to group {group} as a share by {user}" : "Vde. recibiu {share} no grupo {group} como un elemento compartido de {user}", "Accept" : "Aceptar", "Reject" : "Rexeitar", "This application enables users to share files within Nextcloud. If enabled, the admin can choose which groups can share files. The applicable users can then share files and folders with other users and groups within Nextcloud. In addition, if the admin enables the share link feature, an external link can be used to share files with other users outside of Nextcloud. Admins can also enforce passwords, expirations dates, and enable server to server sharing via share links, as well as sharing from mobile devices.\nTurning the feature off removes shared files and folders on the server for all share recipients, and also on the sync clients and mobile apps. More information is available in the Nextcloud Documentation." : "Esta aplicación permítelle aos usuarios compartir ficheiros dentro de Nextcloud. Se o activa, o administrador pode escoller que grupos poden compartir ficheiros. Os usuarios implicados poderán compartir ficheiros e cartafoles con outros usuarios e grupos dentro de Nextcloud. Ademais, se o administrador activa a característica de ligazón compartida, pode empregarse unha ligazón externa para compartir ficheiros con outros usuarios fora doeNextcloud. Os administradores poden impor o uso de contrasinais ou datas de caducidade e activar a compartición de servidor a servidor mediante ligazóns compartidas, así como compartir dende dispositivos móbiles.\nDesactivar esta característica elimina os ficheiros compartidos e os cartafoles no servidor, para todos os receptores, e tamén dos clientes de sincronización e móbiles. Ten dispoñíbel máis información na documentación de Nextcloud.", @@ -232,11 +205,15 @@ OC.L10N.register( "No other users with access found" : "Non se atoparon outros usuarios con acceso", "Toggle list of others with access to this directory" : "Alternar a lista doutros con acceso a este directorio", "Toggle list of others with access to this file" : "Alternar a lista doutros con acceso a este ficheiro", - "Unable to fetch inherited shares" : "Non é posíbel obter os recursos compartidos herdados", + "Unable to fetch inherited shares" : "Non é posíbel recuperar os recursos compartidos herdados", "Unable to load the shares list" : "Non é posíbel cargar a lista de recursos compartidos", "Expires {relativetime}" : "Caducidades {relativetime}", "this share just expired." : "acaba de caducar este recurso compartido.", - "Shared with you by {owner}" : "Compartido con vostede por {owner}", + "Shared with you by {owner}" : "Compartido con Vde. por {owner}", + "_Accept share_::_Accept shares_" : ["Aceptar o recurso compartido","Aceptar os recursos compartidos"], + "Open in files" : "Abrir en ficheiros", + "_Reject share_::_Reject shares_" : ["Rexeitar o recurso compartido","Rexeitar os recursos compartidos"], + "_Restore share_::_Restore shares_" : ["Restaurar o recurso compartido","Restaurar os recursos compartidos"], "Link to a file" : "Ligar a un ficheiro", "Error creating the share: {errorMessage}" : "Produciuse un erro ao crear a compartición: {errorMessage}", "Error creating the share" : "Produciuse un erro ao crear a compartición", @@ -247,13 +224,26 @@ OC.L10N.register( "Share {propertyName} saved" : "{propertyName} do recurso compartido foi gardado", "Shared" : "Compartido", "Share" : "Compartir", + "Shared by" : "Compartido por", "Shared with" : "Compartido con", "Password created successfully" : "O contrasinal foi creado correctamente", "Error generating password from password policy" : "Produciuse un erro ao xerar o contrasinal a partir da directiva de contrasinais", - "Shared with you and the group {group} by {owner}" : "Compartido con vostede e co grupo {group} por {owner}", - "Shared with you and {circle} by {owner}" : "Compartido con vostede e {circle} por {owner}", - "Shared with you and the conversation {conversation} by {owner}" : "Compartido con vostede e a conversa {conversation} por {owner}", - "Shared with you in a conversation by {owner}" : "Compartido con vostede nunha conversa por {owner}", + "Shared with you and the group {group} by {owner}" : "Compartido con Vde. e co grupo {group} por {owner}", + "Shared with you and {circle} by {owner}" : "Compartido con Vde. e {circle} por {owner}", + "Shared with you and the conversation {conversation} by {owner}" : "Compartido con Vde. e a conversa {conversation} por {owner}", + "Shared with you in a conversation by {owner}" : "Compartido con Vde. nunha conversa por {owner}", + "Shares" : "Recursos compartidos", + "Overview of shared files." : "Vista xeral dos ficheiros compartidos.", + "Shared with you" : "Compartido con Vde.", + "List of files that are shared with you." : "Lista de ficheiros que se comparten con Vde.", + "Shared with others" : "Compartido con outros", + "List of files that you shared with others." : "Lista de ficheiros que compartiu Vde. con outros.", + "Shared by link" : "Compartido por ligazón", + "List of files that are shared by link." : "Lista de ficheiros que se comparten mediante ligazón.", + "Deleted shares" : "Recursos compartidos eliminados", + "List of shares that you removed yourself from." : "Lista de recursos compartidos retirados por Vde.", + "Pending shares" : "Recursos compartidos pendentes", + "List of unapproved shares." : "Lista de recursos compartidos non aprobados.", "No entries found in this folder" : "Non se atoparon entradas neste cartafol", "Name" : "Nome", "Share time" : "Compartido hai", @@ -272,6 +262,23 @@ OC.L10N.register( "Uploaded files:" : "Ficheiros enviados:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Ao enviar ficheiros acepta as %1$s condicións do servizo %2$s.", "Add to your Nextcloud" : "Engadir ao seu Nextcloud", + "Nothing shared with you yet" : "Aínda non hai nada compartido con Vde.", + "Files and folders others share with you will show up here" : "Os ficheiros e cartafoles que outros compartan con Vde. amosaranse aquí", + "Nothing shared yet" : "Aínda non hai nada compartido", + "Files and folders you share will show up here" : "Os ficheiros e cartafoles que comparta amosaranse aquí", + "No shared links" : "Non hai ligazóns compartidas", + "Files and folders you share by link will show up here" : "Os ficheiros e cartafoles que comparta por ligazón amosaranse aquí", + "No deleted shares" : "Non hai recursos compartidos eliminados", + "Shares you deleted will show up here" : "Os recursos compartidos eliminados amosaranse aquí", + "No pending shares" : "Non hai comparticións pendentes", + "Shares you have received but not confirmed will show up here" : "Os recursos compartidos recibidos mais sen confirmación amosaranse aquí", + "No shares" : "Ningún recurso compartido", + "Shares will show up here" : "Os recursos compartidos amosaránse aquí", + "Restore" : "Restaurar", + "Something happened. Unable to restore the share." : "Algo aconteceu. Non é posíbel restaurar o recurso compartido", + "Something happened. Unable to accept the share." : "Algo aconteceu. Non é posíbel aceptar o recurso compartido.", + "Something happened. Unable to reject the share." : "Algo aconteceu. Non é posíbel rexeitar o recurso compartido", + "No expiration date set" : "Non se definiu a data de caducidade", "Sharing %s failed because the back end does not support sciencemesh shares" : "Produciuse un erro ao compartir %s porque a infraestrutura non admite recursos compartidos de ScienceMesh", "One or more of your shares will expire tomorrow" : "Un ou mais dos seus recursos compartidos caducarán mañá", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/gl.json b/apps/files_sharing/l10n/gl.json index fe8fe7b6044..f488997b54d 100644 --- a/apps/files_sharing/l10n/gl.json +++ b/apps/files_sharing/l10n/gl.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Compartido con vostede", - "Nothing shared with you yet" : "Aínda non hai nada compartido con vostede.", - "Files and folders others share with you will show up here" : "Os ficheiros e cartafoles que outros compartan con vostede amosaranse aquí", - "Shared with others" : "Compartido con outros", - "Nothing shared yet" : "Aínda non hai nada compartido", - "Files and folders you share will show up here" : "Os ficheiros e cartafoles que comparta amosaranse aquí", - "Shared by link" : "Compartido por ligazón", - "No shared links" : "Non hai ligazóns compartidas", - "Files and folders you share by link will show up here" : "Os ficheiros e cartafoles que comparta por ligazón amosaranse aquí", - "Deleted shares" : "Recursos compartidos eliminados", - "No deleted shares" : "Non hai recursos compartidos eliminados", - "Shares you deleted will show up here" : "Os recursos compartidos eliminados amosaranse aquí", - "Pending shares" : "Recursos compartidos pendentes", - "No pending shares" : "Non hai comparticións pendentes", - "Shares you have received but not confirmed will show up here" : "Os recursos compartidos recibidos mais sen confirmación amosaranse aquí", - "Shares" : "Recursos compartidos", - "No shares" : "Ningún recurso compartido", - "Shares will show up here" : "Os recursos compartidos amosaránse aquí", - "Restore" : "Restaurar", - "Restore share" : "Restaurar recursos compartido", - "Something happened. Unable to restore the share." : "Algo aconteceu. Non é posíbel restaurar o recurso compartido", - "Accept share" : "Aceptar o recurso compartido", - "Something happened. Unable to accept the share." : "Algo aconteceu. Non é posíbel aceptar o recurso compartido.", - "Reject share" : "Rexeitar o recurso compartido", - "Something happened. Unable to reject the share." : "Algo aconteceu. Non é posíbel rexeitar o recurso compartido", "Waiting…" : "Agardando…", "error" : "erro", "finished" : "rematado", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "Non se atopa un servidor compatíbel en {remote}", "Invalid server URL" : "URL de servidor incorrecto", "Failed to add the public link to your Nextcloud" : "Non foi posíbel engadir a ligazón pública ao seu Nextcloud", - "No expiration date set" : "Non se definiu a data de caducidade", - "Shared by" : "Compartido por", "File shares" : "Compartir ficheiros", "Downloaded via public link" : "Descargado mediante unha ligazón pública", "Downloaded by {email}" : "Descargado por {email}", @@ -50,8 +23,8 @@ "{actor} shared with group {group}" : "{actor} compartiu co grupo {group}", "{actor} removed share for group {group}" : "{actor} retirou o recurso compartido para o grupo {group}", "Share for group {group} expired" : "Caducou a compartición polo grupo {group}", - "You shared {file} with group {group}" : "Vostede compartiu {file} co grupo {group}", - "You removed group {group} from {file}" : "Vostede retirou o grupo {group} de {file}", + "You shared {file} with group {group}" : "Vde. compartiu {file} co grupo {group}", + "You removed group {group} from {file}" : "Vde. retirou o grupo {group} de {file}", "{actor} shared {file} with group {group}" : "{actor} compartiu {file} co grupo {group}", "{actor} removed group {group} from {file}" : "{actor} retirou o grupo {group} de {file}", "Share for file {file} with group {group} expired" : "Caducou a compartición do ficheiro {file} co grupo {group} ", @@ -61,8 +34,8 @@ "{actor} shared as public link" : "{actor} compartiu como ligazón pública", "{actor} removed public link" : "{actor} retirou a ligazón pública", "Public link of {actor} expired" : "A ligazón pública de {actor} caducou", - "You shared {file} as public link" : "Vostede compartiu {file} como ligazón pública", - "You removed public link for {file}" : "Vostede retirou a ligazón pública de {file}", + "You shared {file} as public link" : "Vde. compartiu {file} como ligazón pública", + "You removed public link for {file}" : "Vde. retirou a ligazón pública de {file}", "Public link expired for {file}" : "A ligazón pública para {file} caducou", "{actor} shared {file} as public link" : "{actor} compartiu {file} como ligazón pública", "{actor} removed public link for {file}" : "{actor} retirou a ligazón pública para {file}", @@ -72,7 +45,7 @@ "You received a new remote share {file} from {user}" : "Recibiu unha nova compartición remota {file} de {user}", "{user} accepted the remote share of {file}" : "{user} aceptou a compartición remotade {file}", "{user} declined the remote share of {file}" : "{user} declinou a compartición remota de {file}", - "{user} unshared {file} from you" : "{user} deixou de compartir {file} con vostede", + "{user} unshared {file} from you" : "{user} deixou de compartir {file} con Vde.", "Shared with {user}" : "Compartido con {user}", "Removed share for {user}" : "Retirar o compartido para {user}", "You removed yourself" : "Retirou a sí mesmo", @@ -83,14 +56,14 @@ "{actor} removed share" : "{actor} retirou o compartido", "Share for {user} expired" : "Caducou a compartición por {user}", "Share expired" : "Caducou a compartición", - "You shared {file} with {user}" : "Vostede compartiu {file} con {user}", - "You removed {user} from {file}" : "Vostede retirou a {user} de {file}", - "You removed yourself from {file}" : "Vostede retirouse a sí mesmo de {file}", + "You shared {file} with {user}" : "Vde. compartiu {file} con {user}", + "You removed {user} from {file}" : "Vde. retirou a {user} de {file}", + "You removed yourself from {file}" : "Vde. retirouse a sí mesmo de {file}", "{actor} removed themselves from {file}" : "{actor} foi retirado de {file}", "{actor} shared {file} with {user}" : "{actor} compartiu {file} con {user}", "{actor} removed {user} from {file}" : "{actor} retirou a {user} de {file}", - "{actor} shared {file} with you" : "{actor} compartiu {file} con vostede", - "{actor} removed you from the share named {file}" : "{actor} retirouno a vostede da compartición nomeada {file}", + "{actor} shared {file} with you" : "{actor} compartiu {file} con Vde.", + "{actor} removed you from the share named {file}" : "{actor} retirouno a Vde. da compartición nomeada {file}", "Share for file {file} with {user} expired" : "Caducou a compartición do ficheiro {file} co usuario {user} ", "Share for file {file} expired" : "Caducou a compartición do ficheiro {file}", "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Foi <strong>descargado</strong> un ficheiro ou cartafol compartido por correo ou ligazón pública", @@ -115,7 +88,7 @@ "Please specify a valid federated user ID" : "Especifique un ID de usuario federado válido", "Invalid date, date format must be YYYY-MM-DD" : "Data incorrecta, o formato da date debe ser AAAA-MM-DD", "Please specify a valid federated group ID" : "Especifique un ID de grupo federado válido", - "You cannot share to a Circle if the app is not enabled" : "Vostede non pode compartir para un círculo se a aplicación non esta activada", + "You cannot share to a Circle if the app is not enabled" : "Vde. non pode compartir para un círculo se a aplicación non esta activada", "Please specify a valid circle" : "Especifique un círculo correcto", "Sharing %s failed because the back end does not support room shares" : "Fallou a compartición de %s, xa que a infraestrutura non admite salas compartidas", "Sharing %s failed because the back end does not support ScienceMesh shares" : "Produciuse un erro ao compartir %s porque a infraestrutura non admite recursos compartidos de ScienceMesh", @@ -135,8 +108,8 @@ "File sharing" : "Compartir ficheiros", "Share will expire tomorrow" : "O recurso compartido caduca mañá", "Your share of {node} will expire tomorrow" : "A súa compartición de {node} caduca mañá", - "You received {share} as a share by {user}" : "Vostede recibiu {share} como un elemento compartido de {user}", - "You received {share} to group {group} as a share by {user}" : "Vostede recibiu {share} no grupo {group} como un elemento compartido de {user}", + "You received {share} as a share by {user}" : "Vde. recibiu {share} como un elemento compartido de {user}", + "You received {share} to group {group} as a share by {user}" : "Vde. recibiu {share} no grupo {group} como un elemento compartido de {user}", "Accept" : "Aceptar", "Reject" : "Rexeitar", "This application enables users to share files within Nextcloud. If enabled, the admin can choose which groups can share files. The applicable users can then share files and folders with other users and groups within Nextcloud. In addition, if the admin enables the share link feature, an external link can be used to share files with other users outside of Nextcloud. Admins can also enforce passwords, expirations dates, and enable server to server sharing via share links, as well as sharing from mobile devices.\nTurning the feature off removes shared files and folders on the server for all share recipients, and also on the sync clients and mobile apps. More information is available in the Nextcloud Documentation." : "Esta aplicación permítelle aos usuarios compartir ficheiros dentro de Nextcloud. Se o activa, o administrador pode escoller que grupos poden compartir ficheiros. Os usuarios implicados poderán compartir ficheiros e cartafoles con outros usuarios e grupos dentro de Nextcloud. Ademais, se o administrador activa a característica de ligazón compartida, pode empregarse unha ligazón externa para compartir ficheiros con outros usuarios fora doeNextcloud. Os administradores poden impor o uso de contrasinais ou datas de caducidade e activar a compartición de servidor a servidor mediante ligazóns compartidas, así como compartir dende dispositivos móbiles.\nDesactivar esta característica elimina os ficheiros compartidos e os cartafoles no servidor, para todos os receptores, e tamén dos clientes de sincronización e móbiles. Ten dispoñíbel máis información na documentación de Nextcloud.", @@ -230,11 +203,15 @@ "No other users with access found" : "Non se atoparon outros usuarios con acceso", "Toggle list of others with access to this directory" : "Alternar a lista doutros con acceso a este directorio", "Toggle list of others with access to this file" : "Alternar a lista doutros con acceso a este ficheiro", - "Unable to fetch inherited shares" : "Non é posíbel obter os recursos compartidos herdados", + "Unable to fetch inherited shares" : "Non é posíbel recuperar os recursos compartidos herdados", "Unable to load the shares list" : "Non é posíbel cargar a lista de recursos compartidos", "Expires {relativetime}" : "Caducidades {relativetime}", "this share just expired." : "acaba de caducar este recurso compartido.", - "Shared with you by {owner}" : "Compartido con vostede por {owner}", + "Shared with you by {owner}" : "Compartido con Vde. por {owner}", + "_Accept share_::_Accept shares_" : ["Aceptar o recurso compartido","Aceptar os recursos compartidos"], + "Open in files" : "Abrir en ficheiros", + "_Reject share_::_Reject shares_" : ["Rexeitar o recurso compartido","Rexeitar os recursos compartidos"], + "_Restore share_::_Restore shares_" : ["Restaurar o recurso compartido","Restaurar os recursos compartidos"], "Link to a file" : "Ligar a un ficheiro", "Error creating the share: {errorMessage}" : "Produciuse un erro ao crear a compartición: {errorMessage}", "Error creating the share" : "Produciuse un erro ao crear a compartición", @@ -245,13 +222,26 @@ "Share {propertyName} saved" : "{propertyName} do recurso compartido foi gardado", "Shared" : "Compartido", "Share" : "Compartir", + "Shared by" : "Compartido por", "Shared with" : "Compartido con", "Password created successfully" : "O contrasinal foi creado correctamente", "Error generating password from password policy" : "Produciuse un erro ao xerar o contrasinal a partir da directiva de contrasinais", - "Shared with you and the group {group} by {owner}" : "Compartido con vostede e co grupo {group} por {owner}", - "Shared with you and {circle} by {owner}" : "Compartido con vostede e {circle} por {owner}", - "Shared with you and the conversation {conversation} by {owner}" : "Compartido con vostede e a conversa {conversation} por {owner}", - "Shared with you in a conversation by {owner}" : "Compartido con vostede nunha conversa por {owner}", + "Shared with you and the group {group} by {owner}" : "Compartido con Vde. e co grupo {group} por {owner}", + "Shared with you and {circle} by {owner}" : "Compartido con Vde. e {circle} por {owner}", + "Shared with you and the conversation {conversation} by {owner}" : "Compartido con Vde. e a conversa {conversation} por {owner}", + "Shared with you in a conversation by {owner}" : "Compartido con Vde. nunha conversa por {owner}", + "Shares" : "Recursos compartidos", + "Overview of shared files." : "Vista xeral dos ficheiros compartidos.", + "Shared with you" : "Compartido con Vde.", + "List of files that are shared with you." : "Lista de ficheiros que se comparten con Vde.", + "Shared with others" : "Compartido con outros", + "List of files that you shared with others." : "Lista de ficheiros que compartiu Vde. con outros.", + "Shared by link" : "Compartido por ligazón", + "List of files that are shared by link." : "Lista de ficheiros que se comparten mediante ligazón.", + "Deleted shares" : "Recursos compartidos eliminados", + "List of shares that you removed yourself from." : "Lista de recursos compartidos retirados por Vde.", + "Pending shares" : "Recursos compartidos pendentes", + "List of unapproved shares." : "Lista de recursos compartidos non aprobados.", "No entries found in this folder" : "Non se atoparon entradas neste cartafol", "Name" : "Nome", "Share time" : "Compartido hai", @@ -270,6 +260,23 @@ "Uploaded files:" : "Ficheiros enviados:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Ao enviar ficheiros acepta as %1$s condicións do servizo %2$s.", "Add to your Nextcloud" : "Engadir ao seu Nextcloud", + "Nothing shared with you yet" : "Aínda non hai nada compartido con Vde.", + "Files and folders others share with you will show up here" : "Os ficheiros e cartafoles que outros compartan con Vde. amosaranse aquí", + "Nothing shared yet" : "Aínda non hai nada compartido", + "Files and folders you share will show up here" : "Os ficheiros e cartafoles que comparta amosaranse aquí", + "No shared links" : "Non hai ligazóns compartidas", + "Files and folders you share by link will show up here" : "Os ficheiros e cartafoles que comparta por ligazón amosaranse aquí", + "No deleted shares" : "Non hai recursos compartidos eliminados", + "Shares you deleted will show up here" : "Os recursos compartidos eliminados amosaranse aquí", + "No pending shares" : "Non hai comparticións pendentes", + "Shares you have received but not confirmed will show up here" : "Os recursos compartidos recibidos mais sen confirmación amosaranse aquí", + "No shares" : "Ningún recurso compartido", + "Shares will show up here" : "Os recursos compartidos amosaránse aquí", + "Restore" : "Restaurar", + "Something happened. Unable to restore the share." : "Algo aconteceu. Non é posíbel restaurar o recurso compartido", + "Something happened. Unable to accept the share." : "Algo aconteceu. Non é posíbel aceptar o recurso compartido.", + "Something happened. Unable to reject the share." : "Algo aconteceu. Non é posíbel rexeitar o recurso compartido", + "No expiration date set" : "Non se definiu a data de caducidade", "Sharing %s failed because the back end does not support sciencemesh shares" : "Produciuse un erro ao compartir %s porque a infraestrutura non admite recursos compartidos de ScienceMesh", "One or more of your shares will expire tomorrow" : "Un ou mais dos seus recursos compartidos caducarán mañá", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/he.js b/apps/files_sharing/l10n/he.js index 277875e1d9b..cbfbacd787d 100644 --- a/apps/files_sharing/l10n/he.js +++ b/apps/files_sharing/l10n/he.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "שיתף/שיתפה אתך", - "Nothing shared with you yet" : "עדיין לא שיתפו אתך דבר", - "Files and folders others share with you will show up here" : "קבצים ותיקיות שאחרים שיתפו אתך יוצגו כאן", - "Shared with others" : "משותף עם אחרים", - "Nothing shared yet" : "עדיין לא שותף דבר", - "Files and folders you share will show up here" : "קבצים ותיקיות ששיתפת יוצגו כאן", - "Shared by link" : "משותף עם קישור", - "No shared links" : "אין קישורים משותפים", - "Files and folders you share by link will show up here" : "קבצים ותיקיות ששיתפת עם קישור יוצגו כאן", - "Deleted shares" : "שיתופים שנמחקו", - "No deleted shares" : "אין שיתופים שנמחקו", - "Shares you deleted will show up here" : "שיתופים שמחקת יופיעו כאן", - "Pending shares" : "שיתופים ממתינים", - "No pending shares" : "אין שיתופים ממתינים", - "Shares you have received but not confirmed will show up here" : "שיתופים שקיבלת אבל לא אישרת יופיעו כאן", - "Shares" : "שיתופים", - "No shares" : "אין שיתופים", - "Shares will show up here" : "שיתופים יופיעו כאן", - "Restore" : "שחזור", - "Restore share" : "שחזור שיתוף", - "Something happened. Unable to restore the share." : "משהו התרחש. לא ניתן לשחזר את השיתוף.", - "Accept share" : "קבלת השיתוף", - "Something happened. Unable to accept the share." : "משהו התרחש. לא ניתן לשחזר את השיתוף.", - "Reject share" : "דחיית השיתוף", - "Something happened. Unable to reject the share." : "משהו התרחש. לא ניתן לדחות את השיתוף.", "Waiting…" : "בהמתנה…", "error" : "שגיאה", "finished" : "הסתיים", @@ -38,8 +13,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "לא נמצא שרת תואם בכתובת {remote}", "Invalid server URL" : "כתובת השרת שגויה", "Failed to add the public link to your Nextcloud" : "אירע כשל בהוספת קישור ציבורי ל־Nextcloud שלך", - "No expiration date set" : "לא הוגדר מועד תפוגה", - "Shared by" : "שותף על־ידי", "File shares" : "שיתופי קבצים", "Downloaded via public link" : "הורד על בסיס קישור ציבורי", "Downloaded by {email}" : "הורד על ידי {email}", @@ -211,11 +184,18 @@ OC.L10N.register( "Error updating the share" : "שגיאה בעדכון השיתוף", "Shared" : "משותף", "Share" : "שיתוף", + "Shared by" : "שותף על־ידי", "Shared with" : "משותף עם", "Shared with you and the group {group} by {owner}" : "שותף אתך ועם הקבוצה {group} על ידי {owner}", "Shared with you and {circle} by {owner}" : "משותף אתך ועם {circle} על ידי {owner}", "Shared with you and the conversation {conversation} by {owner}" : "שותף אתך והדיון {conversation} על ידי {owner}", "Shared with you in a conversation by {owner}" : "שותף אתך בדיון על ידי {owner}", + "Shares" : "שיתופים", + "Shared with you" : "שיתף/שיתפה אתך", + "Shared with others" : "משותף עם אחרים", + "Shared by link" : "משותף עם קישור", + "Deleted shares" : "שיתופים שנמחקו", + "Pending shares" : "שיתופים ממתינים", "No entries found in this folder" : "לא נמצאו כניסות לתיקייה זו", "Name" : "שם", "Share time" : "זמן שיתוף", @@ -233,6 +213,23 @@ OC.L10N.register( "Uploaded files:" : "קבצים שהועלו:", "By uploading files, you agree to the %1$sterms of service%2$s." : "עצם העלאתם של קבצים מביעה את הסכמתך ל%1$sתנאי השירות%2$s.", "Add to your Nextcloud" : "הוספה ל־Nextcloud שלך", + "Nothing shared with you yet" : "עדיין לא שיתפו אתך דבר", + "Files and folders others share with you will show up here" : "קבצים ותיקיות שאחרים שיתפו אתך יוצגו כאן", + "Nothing shared yet" : "עדיין לא שותף דבר", + "Files and folders you share will show up here" : "קבצים ותיקיות ששיתפת יוצגו כאן", + "No shared links" : "אין קישורים משותפים", + "Files and folders you share by link will show up here" : "קבצים ותיקיות ששיתפת עם קישור יוצגו כאן", + "No deleted shares" : "אין שיתופים שנמחקו", + "Shares you deleted will show up here" : "שיתופים שמחקת יופיעו כאן", + "No pending shares" : "אין שיתופים ממתינים", + "Shares you have received but not confirmed will show up here" : "שיתופים שקיבלת אבל לא אישרת יופיעו כאן", + "No shares" : "אין שיתופים", + "Shares will show up here" : "שיתופים יופיעו כאן", + "Restore" : "שחזור", + "Something happened. Unable to restore the share." : "משהו התרחש. לא ניתן לשחזר את השיתוף.", + "Something happened. Unable to accept the share." : "משהו התרחש. לא ניתן לשחזר את השיתוף.", + "Something happened. Unable to reject the share." : "משהו התרחש. לא ניתן לדחות את השיתוף.", + "No expiration date set" : "לא הוגדר מועד תפוגה", "One or more of your shares will expire tomorrow" : "תפוגתם של שיתוף אחד או יותר יפוג מחר" }, "nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;"); diff --git a/apps/files_sharing/l10n/he.json b/apps/files_sharing/l10n/he.json index 1bea1a52a96..4a900307217 100644 --- a/apps/files_sharing/l10n/he.json +++ b/apps/files_sharing/l10n/he.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "שיתף/שיתפה אתך", - "Nothing shared with you yet" : "עדיין לא שיתפו אתך דבר", - "Files and folders others share with you will show up here" : "קבצים ותיקיות שאחרים שיתפו אתך יוצגו כאן", - "Shared with others" : "משותף עם אחרים", - "Nothing shared yet" : "עדיין לא שותף דבר", - "Files and folders you share will show up here" : "קבצים ותיקיות ששיתפת יוצגו כאן", - "Shared by link" : "משותף עם קישור", - "No shared links" : "אין קישורים משותפים", - "Files and folders you share by link will show up here" : "קבצים ותיקיות ששיתפת עם קישור יוצגו כאן", - "Deleted shares" : "שיתופים שנמחקו", - "No deleted shares" : "אין שיתופים שנמחקו", - "Shares you deleted will show up here" : "שיתופים שמחקת יופיעו כאן", - "Pending shares" : "שיתופים ממתינים", - "No pending shares" : "אין שיתופים ממתינים", - "Shares you have received but not confirmed will show up here" : "שיתופים שקיבלת אבל לא אישרת יופיעו כאן", - "Shares" : "שיתופים", - "No shares" : "אין שיתופים", - "Shares will show up here" : "שיתופים יופיעו כאן", - "Restore" : "שחזור", - "Restore share" : "שחזור שיתוף", - "Something happened. Unable to restore the share." : "משהו התרחש. לא ניתן לשחזר את השיתוף.", - "Accept share" : "קבלת השיתוף", - "Something happened. Unable to accept the share." : "משהו התרחש. לא ניתן לשחזר את השיתוף.", - "Reject share" : "דחיית השיתוף", - "Something happened. Unable to reject the share." : "משהו התרחש. לא ניתן לדחות את השיתוף.", "Waiting…" : "בהמתנה…", "error" : "שגיאה", "finished" : "הסתיים", @@ -36,8 +11,6 @@ "No compatible server found at {remote}" : "לא נמצא שרת תואם בכתובת {remote}", "Invalid server URL" : "כתובת השרת שגויה", "Failed to add the public link to your Nextcloud" : "אירע כשל בהוספת קישור ציבורי ל־Nextcloud שלך", - "No expiration date set" : "לא הוגדר מועד תפוגה", - "Shared by" : "שותף על־ידי", "File shares" : "שיתופי קבצים", "Downloaded via public link" : "הורד על בסיס קישור ציבורי", "Downloaded by {email}" : "הורד על ידי {email}", @@ -209,11 +182,18 @@ "Error updating the share" : "שגיאה בעדכון השיתוף", "Shared" : "משותף", "Share" : "שיתוף", + "Shared by" : "שותף על־ידי", "Shared with" : "משותף עם", "Shared with you and the group {group} by {owner}" : "שותף אתך ועם הקבוצה {group} על ידי {owner}", "Shared with you and {circle} by {owner}" : "משותף אתך ועם {circle} על ידי {owner}", "Shared with you and the conversation {conversation} by {owner}" : "שותף אתך והדיון {conversation} על ידי {owner}", "Shared with you in a conversation by {owner}" : "שותף אתך בדיון על ידי {owner}", + "Shares" : "שיתופים", + "Shared with you" : "שיתף/שיתפה אתך", + "Shared with others" : "משותף עם אחרים", + "Shared by link" : "משותף עם קישור", + "Deleted shares" : "שיתופים שנמחקו", + "Pending shares" : "שיתופים ממתינים", "No entries found in this folder" : "לא נמצאו כניסות לתיקייה זו", "Name" : "שם", "Share time" : "זמן שיתוף", @@ -231,6 +211,23 @@ "Uploaded files:" : "קבצים שהועלו:", "By uploading files, you agree to the %1$sterms of service%2$s." : "עצם העלאתם של קבצים מביעה את הסכמתך ל%1$sתנאי השירות%2$s.", "Add to your Nextcloud" : "הוספה ל־Nextcloud שלך", + "Nothing shared with you yet" : "עדיין לא שיתפו אתך דבר", + "Files and folders others share with you will show up here" : "קבצים ותיקיות שאחרים שיתפו אתך יוצגו כאן", + "Nothing shared yet" : "עדיין לא שותף דבר", + "Files and folders you share will show up here" : "קבצים ותיקיות ששיתפת יוצגו כאן", + "No shared links" : "אין קישורים משותפים", + "Files and folders you share by link will show up here" : "קבצים ותיקיות ששיתפת עם קישור יוצגו כאן", + "No deleted shares" : "אין שיתופים שנמחקו", + "Shares you deleted will show up here" : "שיתופים שמחקת יופיעו כאן", + "No pending shares" : "אין שיתופים ממתינים", + "Shares you have received but not confirmed will show up here" : "שיתופים שקיבלת אבל לא אישרת יופיעו כאן", + "No shares" : "אין שיתופים", + "Shares will show up here" : "שיתופים יופיעו כאן", + "Restore" : "שחזור", + "Something happened. Unable to restore the share." : "משהו התרחש. לא ניתן לשחזר את השיתוף.", + "Something happened. Unable to accept the share." : "משהו התרחש. לא ניתן לשחזר את השיתוף.", + "Something happened. Unable to reject the share." : "משהו התרחש. לא ניתן לדחות את השיתוף.", + "No expiration date set" : "לא הוגדר מועד תפוגה", "One or more of your shares will expire tomorrow" : "תפוגתם של שיתוף אחד או יותר יפוג מחר" },"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/hr.js b/apps/files_sharing/l10n/hr.js index 6c888e5c22b..6256c915bcc 100644 --- a/apps/files_sharing/l10n/hr.js +++ b/apps/files_sharing/l10n/hr.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Podijeljeno s vama", - "Nothing shared with you yet" : "Još ništa nije dijeljeno s vama", - "Files and folders others share with you will show up here" : "Ovdje će se prikazati datoteke i mape koje drugi podijele s vama", - "Shared with others" : "Podijeljeno s ostalima", - "Nothing shared yet" : "Još ništa nije dijeljeno", - "Files and folders you share will show up here" : "Ovdje će se prikazati datoteke i mape koje dijelite", - "Shared by link" : "Podijeljeno putem poveznice", - "No shared links" : "Nema dijeljenih poveznica", - "Files and folders you share by link will show up here" : "Ovdje će se prikazati datoteke i mape koje dijelite putem poveznice", - "Deleted shares" : "Izbrisana dijeljenja", - "No deleted shares" : "Nema izbrisanih dijeljenja", - "Shares you deleted will show up here" : "Ovdje će se prikazati izbrisana dijeljenja", - "Pending shares" : "Dijeljenja na čekanju", - "No pending shares" : "Nema dijeljenja na čekanju", - "Shares you have received but not confirmed will show up here" : "Ovdje će se prikazati primljena dijeljenja koja nisu potvrđena", - "Shares" : "Dijeljenja", - "No shares" : "Nema dijeljenja", - "Shares will show up here" : "Ovdje će se prikazati dijeljenja", - "Restore" : "Vrati", - "Restore share" : "Vrati dijeljenje", - "Something happened. Unable to restore the share." : "Nešto se dogodilo. Dijeljenje nije moguće vratiti.", - "Accept share" : "Prihvati dijeljenje", - "Something happened. Unable to accept the share." : "Nešto se dogodilo. Dijeljenje nije moguće prihvatiti.", - "Reject share" : "Odbij dijeljenje", - "Something happened. Unable to reject the share." : "Nešto se dogodilo. Dijeljenje nije moguće odbiti.", "Waiting…" : "Čekanje…", "error" : "pogreška", "finished" : "završeno", @@ -38,8 +13,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Nije pronađen nijedan kompatibilni poslužitelj na {remote}", "Invalid server URL" : "Nevažeći URL poslužitelja", "Failed to add the public link to your Nextcloud" : "Dodavanje javne poveznice u Nextcloud nije uspjelo", - "No expiration date set" : "Nije postavljen datum isteka", - "Shared by" : "Podijeljeno od", "File shares" : "Dijeljenja datoteke", "Downloaded via public link" : "Preuzeto putem javne poveznice", "Downloaded by {email}" : "Preuzeo {email}", @@ -220,11 +193,18 @@ OC.L10N.register( "Error updating the share" : "Pogreška pri ažuriranju dijeljenja", "Shared" : "Dijeljeno", "Share" : "Dijeli", + "Shared by" : "Podijeljeno od", "Shared with" : "Dijeljeno s", "Shared with you and the group {group} by {owner}" : "Dijeljeno s vama i grupom {group} vlasnika {owner}", "Shared with you and {circle} by {owner}" : "Dijeljeno s vama i {circle} od strane {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Dijeljeno s vama i razgovorom {conversation} vlasnika {owner}", "Shared with you in a conversation by {owner}" : "{owner} dijeli s vama u razgovoru", + "Shares" : "Dijeljenja", + "Shared with you" : "Podijeljeno s vama", + "Shared with others" : "Podijeljeno s ostalima", + "Shared by link" : "Podijeljeno putem poveznice", + "Deleted shares" : "Izbrisana dijeljenja", + "Pending shares" : "Dijeljenja na čekanju", "No entries found in this folder" : "U ovoj mapi nisu pronađeni nikakvi zapisi", "Name" : "Naziv", "Share time" : "Vrijeme dijeljenja", @@ -242,6 +222,23 @@ OC.L10N.register( "Uploaded files:" : "Otpremljene datoteke:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Otpremanjem datoteka prihvaćate %1$ uvjete korištenja usluge%2$s.", "Add to your Nextcloud" : "Dodaj u svoj Nextcloud", + "Nothing shared with you yet" : "Još ništa nije dijeljeno s vama", + "Files and folders others share with you will show up here" : "Ovdje će se prikazati datoteke i mape koje drugi podijele s vama", + "Nothing shared yet" : "Još ništa nije dijeljeno", + "Files and folders you share will show up here" : "Ovdje će se prikazati datoteke i mape koje dijelite", + "No shared links" : "Nema dijeljenih poveznica", + "Files and folders you share by link will show up here" : "Ovdje će se prikazati datoteke i mape koje dijelite putem poveznice", + "No deleted shares" : "Nema izbrisanih dijeljenja", + "Shares you deleted will show up here" : "Ovdje će se prikazati izbrisana dijeljenja", + "No pending shares" : "Nema dijeljenja na čekanju", + "Shares you have received but not confirmed will show up here" : "Ovdje će se prikazati primljena dijeljenja koja nisu potvrđena", + "No shares" : "Nema dijeljenja", + "Shares will show up here" : "Ovdje će se prikazati dijeljenja", + "Restore" : "Vrati", + "Something happened. Unable to restore the share." : "Nešto se dogodilo. Dijeljenje nije moguće vratiti.", + "Something happened. Unable to accept the share." : "Nešto se dogodilo. Dijeljenje nije moguće prihvatiti.", + "Something happened. Unable to reject the share." : "Nešto se dogodilo. Dijeljenje nije moguće odbiti.", + "No expiration date set" : "Nije postavljen datum isteka", "One or more of your shares will expire tomorrow" : "Sutra istječe jedno ili više dijeljenja" }, "nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"); diff --git a/apps/files_sharing/l10n/hr.json b/apps/files_sharing/l10n/hr.json index 3e5c67df171..7a956ec70e7 100644 --- a/apps/files_sharing/l10n/hr.json +++ b/apps/files_sharing/l10n/hr.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Podijeljeno s vama", - "Nothing shared with you yet" : "Još ništa nije dijeljeno s vama", - "Files and folders others share with you will show up here" : "Ovdje će se prikazati datoteke i mape koje drugi podijele s vama", - "Shared with others" : "Podijeljeno s ostalima", - "Nothing shared yet" : "Još ništa nije dijeljeno", - "Files and folders you share will show up here" : "Ovdje će se prikazati datoteke i mape koje dijelite", - "Shared by link" : "Podijeljeno putem poveznice", - "No shared links" : "Nema dijeljenih poveznica", - "Files and folders you share by link will show up here" : "Ovdje će se prikazati datoteke i mape koje dijelite putem poveznice", - "Deleted shares" : "Izbrisana dijeljenja", - "No deleted shares" : "Nema izbrisanih dijeljenja", - "Shares you deleted will show up here" : "Ovdje će se prikazati izbrisana dijeljenja", - "Pending shares" : "Dijeljenja na čekanju", - "No pending shares" : "Nema dijeljenja na čekanju", - "Shares you have received but not confirmed will show up here" : "Ovdje će se prikazati primljena dijeljenja koja nisu potvrđena", - "Shares" : "Dijeljenja", - "No shares" : "Nema dijeljenja", - "Shares will show up here" : "Ovdje će se prikazati dijeljenja", - "Restore" : "Vrati", - "Restore share" : "Vrati dijeljenje", - "Something happened. Unable to restore the share." : "Nešto se dogodilo. Dijeljenje nije moguće vratiti.", - "Accept share" : "Prihvati dijeljenje", - "Something happened. Unable to accept the share." : "Nešto se dogodilo. Dijeljenje nije moguće prihvatiti.", - "Reject share" : "Odbij dijeljenje", - "Something happened. Unable to reject the share." : "Nešto se dogodilo. Dijeljenje nije moguće odbiti.", "Waiting…" : "Čekanje…", "error" : "pogreška", "finished" : "završeno", @@ -36,8 +11,6 @@ "No compatible server found at {remote}" : "Nije pronađen nijedan kompatibilni poslužitelj na {remote}", "Invalid server URL" : "Nevažeći URL poslužitelja", "Failed to add the public link to your Nextcloud" : "Dodavanje javne poveznice u Nextcloud nije uspjelo", - "No expiration date set" : "Nije postavljen datum isteka", - "Shared by" : "Podijeljeno od", "File shares" : "Dijeljenja datoteke", "Downloaded via public link" : "Preuzeto putem javne poveznice", "Downloaded by {email}" : "Preuzeo {email}", @@ -218,11 +191,18 @@ "Error updating the share" : "Pogreška pri ažuriranju dijeljenja", "Shared" : "Dijeljeno", "Share" : "Dijeli", + "Shared by" : "Podijeljeno od", "Shared with" : "Dijeljeno s", "Shared with you and the group {group} by {owner}" : "Dijeljeno s vama i grupom {group} vlasnika {owner}", "Shared with you and {circle} by {owner}" : "Dijeljeno s vama i {circle} od strane {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Dijeljeno s vama i razgovorom {conversation} vlasnika {owner}", "Shared with you in a conversation by {owner}" : "{owner} dijeli s vama u razgovoru", + "Shares" : "Dijeljenja", + "Shared with you" : "Podijeljeno s vama", + "Shared with others" : "Podijeljeno s ostalima", + "Shared by link" : "Podijeljeno putem poveznice", + "Deleted shares" : "Izbrisana dijeljenja", + "Pending shares" : "Dijeljenja na čekanju", "No entries found in this folder" : "U ovoj mapi nisu pronađeni nikakvi zapisi", "Name" : "Naziv", "Share time" : "Vrijeme dijeljenja", @@ -240,6 +220,23 @@ "Uploaded files:" : "Otpremljene datoteke:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Otpremanjem datoteka prihvaćate %1$ uvjete korištenja usluge%2$s.", "Add to your Nextcloud" : "Dodaj u svoj Nextcloud", + "Nothing shared with you yet" : "Još ništa nije dijeljeno s vama", + "Files and folders others share with you will show up here" : "Ovdje će se prikazati datoteke i mape koje drugi podijele s vama", + "Nothing shared yet" : "Još ništa nije dijeljeno", + "Files and folders you share will show up here" : "Ovdje će se prikazati datoteke i mape koje dijelite", + "No shared links" : "Nema dijeljenih poveznica", + "Files and folders you share by link will show up here" : "Ovdje će se prikazati datoteke i mape koje dijelite putem poveznice", + "No deleted shares" : "Nema izbrisanih dijeljenja", + "Shares you deleted will show up here" : "Ovdje će se prikazati izbrisana dijeljenja", + "No pending shares" : "Nema dijeljenja na čekanju", + "Shares you have received but not confirmed will show up here" : "Ovdje će se prikazati primljena dijeljenja koja nisu potvrđena", + "No shares" : "Nema dijeljenja", + "Shares will show up here" : "Ovdje će se prikazati dijeljenja", + "Restore" : "Vrati", + "Something happened. Unable to restore the share." : "Nešto se dogodilo. Dijeljenje nije moguće vratiti.", + "Something happened. Unable to accept the share." : "Nešto se dogodilo. Dijeljenje nije moguće prihvatiti.", + "Something happened. Unable to reject the share." : "Nešto se dogodilo. Dijeljenje nije moguće odbiti.", + "No expiration date set" : "Nije postavljen datum isteka", "One or more of your shares will expire tomorrow" : "Sutra istječe jedno ili više dijeljenja" },"pluralForm" :"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/hu.js b/apps/files_sharing/l10n/hu.js index 02e4cb2031f..98b8ed2a8a5 100644 --- a/apps/files_sharing/l10n/hu.js +++ b/apps/files_sharing/l10n/hu.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Megosztva Önnel", - "Nothing shared with you yet" : "Még semmi sincs megosztva Önnel", - "Files and folders others share with you will show up here" : "A mások által megosztott fájlok és mappák itt jelennek meg", - "Shared with others" : "Megosztva másokkal", - "Nothing shared yet" : "Még semmi sincs megosztva", - "Files and folders you share will show up here" : "Az Ön által megosztott fájlok és mappák itt jelennek meg", - "Shared by link" : "Megosztva hivatkozással", - "No shared links" : "Nincs megosztott hivatkozás", - "Files and folders you share by link will show up here" : "A hivatkozással megosztott fájlok és mappák itt jelennek meg", - "Deleted shares" : "Törölt megosztások", - "No deleted shares" : "Nincs törölt megosztás", - "Shares you deleted will show up here" : "A törölt megosztások itt jelennek meg", - "Pending shares" : "Függőben lévő megosztások", - "No pending shares" : "Nincsenek függőben lévő megosztások", - "Shares you have received but not confirmed will show up here" : "A kapott, de még el nem fogadott megosztások itt jelennek meg", - "Shares" : "Megosztások", - "No shares" : "Nincs megosztás", - "Shares will show up here" : "A megosztások itt jelennek meg", - "Restore" : "Helyreállítás", - "Restore share" : "Megosztás visszaállítása", - "Something happened. Unable to restore the share." : "Hiba történt. Nem lehet visszaállítani a megosztást.", - "Accept share" : "Megosztás elfogadása", - "Something happened. Unable to accept the share." : "Valami történt. Nem lehet elfogadni a megosztást.", - "Reject share" : "Megosztás elutasítása", - "Something happened. Unable to reject the share." : "Valami történt. Nem sikerült elutasítani a megosztást.", "Waiting…" : "Várakozás…", "error" : "hiba", "finished" : "kész", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Nem található kompatibilis kiszolgáló itt: {remote}", "Invalid server URL" : "Érvénytelen kiszolgáló URL", "Failed to add the public link to your Nextcloud" : "Nem sikerült hozzáadni a nyilvános hivatkozást a Nexcloudjához", - "No expiration date set" : "Nincs beállítva lejárati dátum", - "Shared by" : "Megosztotta:", "File shares" : "Fájlmegosztások", "Downloaded via public link" : "Letöltve nyilvános hivatkozással", "Downloaded by {email}" : "Letöltötte: {email}", @@ -247,6 +220,7 @@ OC.L10N.register( "Share {propertyName} saved" : "A(z) {propertyName} megosztás mentve", "Shared" : "Megosztva", "Share" : "Megosztás", + "Shared by" : "Megosztotta:", "Shared with" : "Megosztva vele:", "Password created successfully" : "A jelszó sikeresen létrehozva", "Error generating password from password policy" : "Hiba a jelszóházirend alapján történő jelszó-előállítás során", @@ -254,6 +228,12 @@ OC.L10N.register( "Shared with you and {circle} by {owner}" : "{owner} megosztotta Önnel és a(z) {circle} körrel", "Shared with you and the conversation {conversation} by {owner}" : "{owner} megosztotta Önnel és a(z) {conversation} beszélgetéssel", "Shared with you in a conversation by {owner}" : "{owner} megosztotta Önnel egy beszélgetésben", + "Shares" : "Megosztások", + "Shared with you" : "Megosztva Önnel", + "Shared with others" : "Megosztva másokkal", + "Shared by link" : "Megosztva hivatkozással", + "Deleted shares" : "Törölt megosztások", + "Pending shares" : "Függőben lévő megosztások", "No entries found in this folder" : "Nincsenek bejegyzések ebben a mappában", "Name" : "Név", "Share time" : "Megosztás időpontja", @@ -272,6 +252,23 @@ OC.L10N.register( "Uploaded files:" : "Feltöltött fájlok:", "By uploading files, you agree to the %1$sterms of service%2$s." : "A fájlok feltöltésével elfogadja a %1$sszolgáltatási feltételeket %2$s.", "Add to your Nextcloud" : "Hozzáadás a Nextcloudjához", + "Nothing shared with you yet" : "Még semmi sincs megosztva Önnel", + "Files and folders others share with you will show up here" : "A mások által megosztott fájlok és mappák itt jelennek meg", + "Nothing shared yet" : "Még semmi sincs megosztva", + "Files and folders you share will show up here" : "Az Ön által megosztott fájlok és mappák itt jelennek meg", + "No shared links" : "Nincs megosztott hivatkozás", + "Files and folders you share by link will show up here" : "A hivatkozással megosztott fájlok és mappák itt jelennek meg", + "No deleted shares" : "Nincs törölt megosztás", + "Shares you deleted will show up here" : "A törölt megosztások itt jelennek meg", + "No pending shares" : "Nincsenek függőben lévő megosztások", + "Shares you have received but not confirmed will show up here" : "A kapott, de még el nem fogadott megosztások itt jelennek meg", + "No shares" : "Nincs megosztás", + "Shares will show up here" : "A megosztások itt jelennek meg", + "Restore" : "Helyreállítás", + "Something happened. Unable to restore the share." : "Hiba történt. Nem lehet visszaállítani a megosztást.", + "Something happened. Unable to accept the share." : "Valami történt. Nem lehet elfogadni a megosztást.", + "Something happened. Unable to reject the share." : "Valami történt. Nem sikerült elutasítani a megosztást.", + "No expiration date set" : "Nincs beállítva lejárati dátum", "Sharing %s failed because the back end does not support sciencemesh shares" : "A(z) %s megosztása sikertelen, mert a háttérprogram nem támogatja a szobamegosztásokat", "One or more of your shares will expire tomorrow" : "Egy vagy több megosztása holnap lejár", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/hu.json b/apps/files_sharing/l10n/hu.json index 2bdd46013ba..601e411cdd0 100644 --- a/apps/files_sharing/l10n/hu.json +++ b/apps/files_sharing/l10n/hu.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Megosztva Önnel", - "Nothing shared with you yet" : "Még semmi sincs megosztva Önnel", - "Files and folders others share with you will show up here" : "A mások által megosztott fájlok és mappák itt jelennek meg", - "Shared with others" : "Megosztva másokkal", - "Nothing shared yet" : "Még semmi sincs megosztva", - "Files and folders you share will show up here" : "Az Ön által megosztott fájlok és mappák itt jelennek meg", - "Shared by link" : "Megosztva hivatkozással", - "No shared links" : "Nincs megosztott hivatkozás", - "Files and folders you share by link will show up here" : "A hivatkozással megosztott fájlok és mappák itt jelennek meg", - "Deleted shares" : "Törölt megosztások", - "No deleted shares" : "Nincs törölt megosztás", - "Shares you deleted will show up here" : "A törölt megosztások itt jelennek meg", - "Pending shares" : "Függőben lévő megosztások", - "No pending shares" : "Nincsenek függőben lévő megosztások", - "Shares you have received but not confirmed will show up here" : "A kapott, de még el nem fogadott megosztások itt jelennek meg", - "Shares" : "Megosztások", - "No shares" : "Nincs megosztás", - "Shares will show up here" : "A megosztások itt jelennek meg", - "Restore" : "Helyreállítás", - "Restore share" : "Megosztás visszaállítása", - "Something happened. Unable to restore the share." : "Hiba történt. Nem lehet visszaállítani a megosztást.", - "Accept share" : "Megosztás elfogadása", - "Something happened. Unable to accept the share." : "Valami történt. Nem lehet elfogadni a megosztást.", - "Reject share" : "Megosztás elutasítása", - "Something happened. Unable to reject the share." : "Valami történt. Nem sikerült elutasítani a megosztást.", "Waiting…" : "Várakozás…", "error" : "hiba", "finished" : "kész", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "Nem található kompatibilis kiszolgáló itt: {remote}", "Invalid server URL" : "Érvénytelen kiszolgáló URL", "Failed to add the public link to your Nextcloud" : "Nem sikerült hozzáadni a nyilvános hivatkozást a Nexcloudjához", - "No expiration date set" : "Nincs beállítva lejárati dátum", - "Shared by" : "Megosztotta:", "File shares" : "Fájlmegosztások", "Downloaded via public link" : "Letöltve nyilvános hivatkozással", "Downloaded by {email}" : "Letöltötte: {email}", @@ -245,6 +218,7 @@ "Share {propertyName} saved" : "A(z) {propertyName} megosztás mentve", "Shared" : "Megosztva", "Share" : "Megosztás", + "Shared by" : "Megosztotta:", "Shared with" : "Megosztva vele:", "Password created successfully" : "A jelszó sikeresen létrehozva", "Error generating password from password policy" : "Hiba a jelszóházirend alapján történő jelszó-előállítás során", @@ -252,6 +226,12 @@ "Shared with you and {circle} by {owner}" : "{owner} megosztotta Önnel és a(z) {circle} körrel", "Shared with you and the conversation {conversation} by {owner}" : "{owner} megosztotta Önnel és a(z) {conversation} beszélgetéssel", "Shared with you in a conversation by {owner}" : "{owner} megosztotta Önnel egy beszélgetésben", + "Shares" : "Megosztások", + "Shared with you" : "Megosztva Önnel", + "Shared with others" : "Megosztva másokkal", + "Shared by link" : "Megosztva hivatkozással", + "Deleted shares" : "Törölt megosztások", + "Pending shares" : "Függőben lévő megosztások", "No entries found in this folder" : "Nincsenek bejegyzések ebben a mappában", "Name" : "Név", "Share time" : "Megosztás időpontja", @@ -270,6 +250,23 @@ "Uploaded files:" : "Feltöltött fájlok:", "By uploading files, you agree to the %1$sterms of service%2$s." : "A fájlok feltöltésével elfogadja a %1$sszolgáltatási feltételeket %2$s.", "Add to your Nextcloud" : "Hozzáadás a Nextcloudjához", + "Nothing shared with you yet" : "Még semmi sincs megosztva Önnel", + "Files and folders others share with you will show up here" : "A mások által megosztott fájlok és mappák itt jelennek meg", + "Nothing shared yet" : "Még semmi sincs megosztva", + "Files and folders you share will show up here" : "Az Ön által megosztott fájlok és mappák itt jelennek meg", + "No shared links" : "Nincs megosztott hivatkozás", + "Files and folders you share by link will show up here" : "A hivatkozással megosztott fájlok és mappák itt jelennek meg", + "No deleted shares" : "Nincs törölt megosztás", + "Shares you deleted will show up here" : "A törölt megosztások itt jelennek meg", + "No pending shares" : "Nincsenek függőben lévő megosztások", + "Shares you have received but not confirmed will show up here" : "A kapott, de még el nem fogadott megosztások itt jelennek meg", + "No shares" : "Nincs megosztás", + "Shares will show up here" : "A megosztások itt jelennek meg", + "Restore" : "Helyreállítás", + "Something happened. Unable to restore the share." : "Hiba történt. Nem lehet visszaállítani a megosztást.", + "Something happened. Unable to accept the share." : "Valami történt. Nem lehet elfogadni a megosztást.", + "Something happened. Unable to reject the share." : "Valami történt. Nem sikerült elutasítani a megosztást.", + "No expiration date set" : "Nincs beállítva lejárati dátum", "Sharing %s failed because the back end does not support sciencemesh shares" : "A(z) %s megosztása sikertelen, mert a háttérprogram nem támogatja a szobamegosztásokat", "One or more of your shares will expire tomorrow" : "Egy vagy több megosztása holnap lejár", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/is.js b/apps/files_sharing/l10n/is.js index cbd5f4b4a04..95474877dbd 100644 --- a/apps/files_sharing/l10n/is.js +++ b/apps/files_sharing/l10n/is.js @@ -1,25 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Deilt með þér", - "Nothing shared with you yet" : "Engu deilt með þér ennþá", - "Files and folders others share with you will show up here" : "Skrár og möppur sem aðrir deila með þér birtast hér", - "Shared with others" : "Deilt með öðrum", - "Nothing shared yet" : "Engu deilt ennþá", - "Files and folders you share will show up here" : "Skrár og möppur sem þú deilir birtast hér", - "Shared by link" : "Deilt með tengli", - "No shared links" : "Engir sameignartenglar", - "Files and folders you share by link will show up here" : "Skrár og möppur sem þú deilir með tenglum birtast hér", - "Deleted shares" : "Eyddar sameignir", - "No deleted shares" : "Engar eyddar sameignir", - "Shares you deleted will show up here" : "Sameignir sem þú hefur eytt munu birtast hér", - "Pending shares" : "Sameignir í bið", - "Shares" : "Sameignir", - "No shares" : "Engar sameignir", - "Shares will show up here" : "Sameignir munu birtast hér", - "Restore" : "Endurheimta", - "Restore share" : "Endurheimta sameign", - "Something happened. Unable to restore the share." : "Eitthvað skrýtið gerðist. Gat ekki endurheimt sameignina.", "error" : "villa", "This will stop your current uploads." : "Þetta mun stöðva núverandi innsendingar þínar.", "Move or copy" : "Færa eða afrita", @@ -32,8 +13,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Enginn samhæfður vefþjónn fannst á {remote}", "Invalid server URL" : "Ógild URI-slóð vefþjóns", "Failed to add the public link to your Nextcloud" : "Mistókst að bæta opinberum tengli í þitt eigið Nextcloud", - "No expiration date set" : "Engin dagsetning fyrir gildistíma er sett", - "Shared by" : "Deilt af", "File shares" : "Skráasameignir", "Downloaded via public link" : "Náð í með almenningstengli", "Downloaded by {email}" : "Náð í með {email}", @@ -161,11 +140,18 @@ OC.L10N.register( "Link to a file" : "Tengill í skrá", "Shared" : "Deilt", "Share" : "Deila", + "Shared by" : "Deilt af", "Shared with" : "Deilt með", "Shared with you and the group {group} by {owner}" : "Deilt með þér og hópnum {group} af {owner}", "Shared with you and {circle} by {owner}" : "Deilt með þér og {circle} af {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Deilt með þér og samtalinu {conversation} af {owner}", "Shared with you in a conversation by {owner}" : "Deilt með þér í samtali af {owner}", + "Shares" : "Sameignir", + "Shared with you" : "Deilt með þér", + "Shared with others" : "Deilt með öðrum", + "Shared by link" : "Deilt með tengli", + "Deleted shares" : "Eyddar sameignir", + "Pending shares" : "Sameignir í bið", "No entries found in this folder" : "Engar skrár fundust í þessari möppu", "Name" : "Nafn", "Share time" : "Deilingartími", @@ -181,6 +167,19 @@ OC.L10N.register( "Select or drop files" : "Veldu eða slepptu skrám", "Uploaded files:" : "Innsendar skrár:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Með því að senda inn skrár, samþykkir þú %1$sþjónustuskilmálana%2$s.", - "Add to your Nextcloud" : "Bæta í þitt eigið Nextcloud" + "Add to your Nextcloud" : "Bæta í þitt eigið Nextcloud", + "Nothing shared with you yet" : "Engu deilt með þér ennþá", + "Files and folders others share with you will show up here" : "Skrár og möppur sem aðrir deila með þér birtast hér", + "Nothing shared yet" : "Engu deilt ennþá", + "Files and folders you share will show up here" : "Skrár og möppur sem þú deilir birtast hér", + "No shared links" : "Engir sameignartenglar", + "Files and folders you share by link will show up here" : "Skrár og möppur sem þú deilir með tenglum birtast hér", + "No deleted shares" : "Engar eyddar sameignir", + "Shares you deleted will show up here" : "Sameignir sem þú hefur eytt munu birtast hér", + "No shares" : "Engar sameignir", + "Shares will show up here" : "Sameignir munu birtast hér", + "Restore" : "Endurheimta", + "Something happened. Unable to restore the share." : "Eitthvað skrýtið gerðist. Gat ekki endurheimt sameignina.", + "No expiration date set" : "Engin dagsetning fyrir gildistíma er sett" }, "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/apps/files_sharing/l10n/is.json b/apps/files_sharing/l10n/is.json index f2b8aeefb8c..548175bcc92 100644 --- a/apps/files_sharing/l10n/is.json +++ b/apps/files_sharing/l10n/is.json @@ -1,23 +1,4 @@ { "translations": { - "Shared with you" : "Deilt með þér", - "Nothing shared with you yet" : "Engu deilt með þér ennþá", - "Files and folders others share with you will show up here" : "Skrár og möppur sem aðrir deila með þér birtast hér", - "Shared with others" : "Deilt með öðrum", - "Nothing shared yet" : "Engu deilt ennþá", - "Files and folders you share will show up here" : "Skrár og möppur sem þú deilir birtast hér", - "Shared by link" : "Deilt með tengli", - "No shared links" : "Engir sameignartenglar", - "Files and folders you share by link will show up here" : "Skrár og möppur sem þú deilir með tenglum birtast hér", - "Deleted shares" : "Eyddar sameignir", - "No deleted shares" : "Engar eyddar sameignir", - "Shares you deleted will show up here" : "Sameignir sem þú hefur eytt munu birtast hér", - "Pending shares" : "Sameignir í bið", - "Shares" : "Sameignir", - "No shares" : "Engar sameignir", - "Shares will show up here" : "Sameignir munu birtast hér", - "Restore" : "Endurheimta", - "Restore share" : "Endurheimta sameign", - "Something happened. Unable to restore the share." : "Eitthvað skrýtið gerðist. Gat ekki endurheimt sameignina.", "error" : "villa", "This will stop your current uploads." : "Þetta mun stöðva núverandi innsendingar þínar.", "Move or copy" : "Færa eða afrita", @@ -30,8 +11,6 @@ "No compatible server found at {remote}" : "Enginn samhæfður vefþjónn fannst á {remote}", "Invalid server URL" : "Ógild URI-slóð vefþjóns", "Failed to add the public link to your Nextcloud" : "Mistókst að bæta opinberum tengli í þitt eigið Nextcloud", - "No expiration date set" : "Engin dagsetning fyrir gildistíma er sett", - "Shared by" : "Deilt af", "File shares" : "Skráasameignir", "Downloaded via public link" : "Náð í með almenningstengli", "Downloaded by {email}" : "Náð í með {email}", @@ -159,11 +138,18 @@ "Link to a file" : "Tengill í skrá", "Shared" : "Deilt", "Share" : "Deila", + "Shared by" : "Deilt af", "Shared with" : "Deilt með", "Shared with you and the group {group} by {owner}" : "Deilt með þér og hópnum {group} af {owner}", "Shared with you and {circle} by {owner}" : "Deilt með þér og {circle} af {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Deilt með þér og samtalinu {conversation} af {owner}", "Shared with you in a conversation by {owner}" : "Deilt með þér í samtali af {owner}", + "Shares" : "Sameignir", + "Shared with you" : "Deilt með þér", + "Shared with others" : "Deilt með öðrum", + "Shared by link" : "Deilt með tengli", + "Deleted shares" : "Eyddar sameignir", + "Pending shares" : "Sameignir í bið", "No entries found in this folder" : "Engar skrár fundust í þessari möppu", "Name" : "Nafn", "Share time" : "Deilingartími", @@ -179,6 +165,19 @@ "Select or drop files" : "Veldu eða slepptu skrám", "Uploaded files:" : "Innsendar skrár:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Með því að senda inn skrár, samþykkir þú %1$sþjónustuskilmálana%2$s.", - "Add to your Nextcloud" : "Bæta í þitt eigið Nextcloud" + "Add to your Nextcloud" : "Bæta í þitt eigið Nextcloud", + "Nothing shared with you yet" : "Engu deilt með þér ennþá", + "Files and folders others share with you will show up here" : "Skrár og möppur sem aðrir deila með þér birtast hér", + "Nothing shared yet" : "Engu deilt ennþá", + "Files and folders you share will show up here" : "Skrár og möppur sem þú deilir birtast hér", + "No shared links" : "Engir sameignartenglar", + "Files and folders you share by link will show up here" : "Skrár og möppur sem þú deilir með tenglum birtast hér", + "No deleted shares" : "Engar eyddar sameignir", + "Shares you deleted will show up here" : "Sameignir sem þú hefur eytt munu birtast hér", + "No shares" : "Engar sameignir", + "Shares will show up here" : "Sameignir munu birtast hér", + "Restore" : "Endurheimta", + "Something happened. Unable to restore the share." : "Eitthvað skrýtið gerðist. Gat ekki endurheimt sameignina.", + "No expiration date set" : "Engin dagsetning fyrir gildistíma er sett" },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/it.js b/apps/files_sharing/l10n/it.js index c852db3b194..9fb90f40f41 100644 --- a/apps/files_sharing/l10n/it.js +++ b/apps/files_sharing/l10n/it.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Condivisi con te", - "Nothing shared with you yet" : "Non è stato condiviso ancora niente con te", - "Files and folders others share with you will show up here" : "I file e le cartelle che altri condividono con te saranno mostrati qui", - "Shared with others" : "Condivisi con altri", - "Nothing shared yet" : "Ancora nessuna condivisione", - "Files and folders you share will show up here" : "I file e le cartelle che condividi saranno mostrati qui", - "Shared by link" : "Condivisi tramite collegamento", - "No shared links" : "Nessun collegamento condiviso", - "Files and folders you share by link will show up here" : "I file e le cartelle che condividi tramite collegamento saranno mostrati qui", - "Deleted shares" : "Condivisioni eliminate", - "No deleted shares" : "Nessuna condivisione eliminata", - "Shares you deleted will show up here" : "Qui saranno mostrate le condivisioni che hai eliminato", - "Pending shares" : "Condivisioni in corso", - "No pending shares" : "Nessuna condivisione in corso", - "Shares you have received but not confirmed will show up here" : "Le condivisioni che hai ricevuto, ma non confermato saranno mostrate qui", - "Shares" : "Condivisioni", - "No shares" : "Nessuna condivisione", - "Shares will show up here" : "Le condivisioni saranno mostrate qui", - "Restore" : "Ripristina", - "Restore share" : "Ripristina condivisione", - "Something happened. Unable to restore the share." : "Qualcosa non ha funzionato. Impossibile ripristinare la condivisione.", - "Accept share" : "Accetta condivisione", - "Something happened. Unable to accept the share." : "Qualcosa non ha funzionato. Impossibile accettare la condivisione.", - "Reject share" : "Rifiuta condivisione", - "Something happened. Unable to reject the share." : "Qualcosa non ha funzionato. Impossibile rifiutare la condivisione.", "Waiting…" : "Attendere...", "error" : "errore", "finished" : "terminato", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Nessun server compatibile trovato su {remote}", "Invalid server URL" : "URL del server non valido", "Failed to add the public link to your Nextcloud" : "Aggiunta del collegamento pubblico al tuo Nextcloud non riuscita", - "No expiration date set" : "Nessuna data di scadenza impostata", - "Shared by" : "Condiviso da", "File shares" : "Condivisioni dei file", "Downloaded via public link" : "Scaricata tramite collegamento pubblico", "Downloaded by {email}" : "Scaricato da {email}", @@ -247,6 +220,7 @@ OC.L10N.register( "Share {propertyName} saved" : "Condivisione {propertyName} salvata", "Shared" : "Condiviso", "Share" : "Condividi", + "Shared by" : "Condiviso da", "Shared with" : "Condiviso con", "Password created successfully" : "Password creata correttamente", "Error generating password from password policy" : "Errore: la password non rispetta i criteri stabiliti", @@ -254,6 +228,12 @@ OC.L10N.register( "Shared with you and {circle} by {owner}" : "Condiviso con te e {circle} da {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Condiviso con te e con la conversazione {conversation} da {owner}", "Shared with you in a conversation by {owner}" : "Condiviso con te in una conversazione da {owner}", + "Shares" : "Condivisioni", + "Shared with you" : "Condivisi con te", + "Shared with others" : "Condivisi con altri", + "Shared by link" : "Condivisi tramite collegamento", + "Deleted shares" : "Condivisioni eliminate", + "Pending shares" : "Condivisioni in corso", "No entries found in this folder" : "Nessuna voce trovata in questa cartella", "Name" : "Nome", "Share time" : "Tempo di condivisione", @@ -272,6 +252,23 @@ OC.L10N.register( "Uploaded files:" : "File caricati:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Caricando i file, accetti i %1$stermini del servizio%2$s.", "Add to your Nextcloud" : "Aggiungi al tuo Nextcloud", + "Nothing shared with you yet" : "Non è stato condiviso ancora niente con te", + "Files and folders others share with you will show up here" : "I file e le cartelle che altri condividono con te saranno mostrati qui", + "Nothing shared yet" : "Ancora nessuna condivisione", + "Files and folders you share will show up here" : "I file e le cartelle che condividi saranno mostrati qui", + "No shared links" : "Nessun collegamento condiviso", + "Files and folders you share by link will show up here" : "I file e le cartelle che condividi tramite collegamento saranno mostrati qui", + "No deleted shares" : "Nessuna condivisione eliminata", + "Shares you deleted will show up here" : "Qui saranno mostrate le condivisioni che hai eliminato", + "No pending shares" : "Nessuna condivisione in corso", + "Shares you have received but not confirmed will show up here" : "Le condivisioni che hai ricevuto, ma non confermato saranno mostrate qui", + "No shares" : "Nessuna condivisione", + "Shares will show up here" : "Le condivisioni saranno mostrate qui", + "Restore" : "Ripristina", + "Something happened. Unable to restore the share." : "Qualcosa non ha funzionato. Impossibile ripristinare la condivisione.", + "Something happened. Unable to accept the share." : "Qualcosa non ha funzionato. Impossibile accettare la condivisione.", + "Something happened. Unable to reject the share." : "Qualcosa non ha funzionato. Impossibile rifiutare la condivisione.", + "No expiration date set" : "Nessuna data di scadenza impostata", "Sharing %s failed because the back end does not support sciencemesh shares" : "Condivisione di %s non riuscita poiché il motore non supporta condivisioni di sciencemesh", "One or more of your shares will expire tomorrow" : "Una o più delle tue condivisioni scadrà domani", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/it.json b/apps/files_sharing/l10n/it.json index 21f3b60b95d..132ca471f5f 100644 --- a/apps/files_sharing/l10n/it.json +++ b/apps/files_sharing/l10n/it.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Condivisi con te", - "Nothing shared with you yet" : "Non è stato condiviso ancora niente con te", - "Files and folders others share with you will show up here" : "I file e le cartelle che altri condividono con te saranno mostrati qui", - "Shared with others" : "Condivisi con altri", - "Nothing shared yet" : "Ancora nessuna condivisione", - "Files and folders you share will show up here" : "I file e le cartelle che condividi saranno mostrati qui", - "Shared by link" : "Condivisi tramite collegamento", - "No shared links" : "Nessun collegamento condiviso", - "Files and folders you share by link will show up here" : "I file e le cartelle che condividi tramite collegamento saranno mostrati qui", - "Deleted shares" : "Condivisioni eliminate", - "No deleted shares" : "Nessuna condivisione eliminata", - "Shares you deleted will show up here" : "Qui saranno mostrate le condivisioni che hai eliminato", - "Pending shares" : "Condivisioni in corso", - "No pending shares" : "Nessuna condivisione in corso", - "Shares you have received but not confirmed will show up here" : "Le condivisioni che hai ricevuto, ma non confermato saranno mostrate qui", - "Shares" : "Condivisioni", - "No shares" : "Nessuna condivisione", - "Shares will show up here" : "Le condivisioni saranno mostrate qui", - "Restore" : "Ripristina", - "Restore share" : "Ripristina condivisione", - "Something happened. Unable to restore the share." : "Qualcosa non ha funzionato. Impossibile ripristinare la condivisione.", - "Accept share" : "Accetta condivisione", - "Something happened. Unable to accept the share." : "Qualcosa non ha funzionato. Impossibile accettare la condivisione.", - "Reject share" : "Rifiuta condivisione", - "Something happened. Unable to reject the share." : "Qualcosa non ha funzionato. Impossibile rifiutare la condivisione.", "Waiting…" : "Attendere...", "error" : "errore", "finished" : "terminato", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "Nessun server compatibile trovato su {remote}", "Invalid server URL" : "URL del server non valido", "Failed to add the public link to your Nextcloud" : "Aggiunta del collegamento pubblico al tuo Nextcloud non riuscita", - "No expiration date set" : "Nessuna data di scadenza impostata", - "Shared by" : "Condiviso da", "File shares" : "Condivisioni dei file", "Downloaded via public link" : "Scaricata tramite collegamento pubblico", "Downloaded by {email}" : "Scaricato da {email}", @@ -245,6 +218,7 @@ "Share {propertyName} saved" : "Condivisione {propertyName} salvata", "Shared" : "Condiviso", "Share" : "Condividi", + "Shared by" : "Condiviso da", "Shared with" : "Condiviso con", "Password created successfully" : "Password creata correttamente", "Error generating password from password policy" : "Errore: la password non rispetta i criteri stabiliti", @@ -252,6 +226,12 @@ "Shared with you and {circle} by {owner}" : "Condiviso con te e {circle} da {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Condiviso con te e con la conversazione {conversation} da {owner}", "Shared with you in a conversation by {owner}" : "Condiviso con te in una conversazione da {owner}", + "Shares" : "Condivisioni", + "Shared with you" : "Condivisi con te", + "Shared with others" : "Condivisi con altri", + "Shared by link" : "Condivisi tramite collegamento", + "Deleted shares" : "Condivisioni eliminate", + "Pending shares" : "Condivisioni in corso", "No entries found in this folder" : "Nessuna voce trovata in questa cartella", "Name" : "Nome", "Share time" : "Tempo di condivisione", @@ -270,6 +250,23 @@ "Uploaded files:" : "File caricati:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Caricando i file, accetti i %1$stermini del servizio%2$s.", "Add to your Nextcloud" : "Aggiungi al tuo Nextcloud", + "Nothing shared with you yet" : "Non è stato condiviso ancora niente con te", + "Files and folders others share with you will show up here" : "I file e le cartelle che altri condividono con te saranno mostrati qui", + "Nothing shared yet" : "Ancora nessuna condivisione", + "Files and folders you share will show up here" : "I file e le cartelle che condividi saranno mostrati qui", + "No shared links" : "Nessun collegamento condiviso", + "Files and folders you share by link will show up here" : "I file e le cartelle che condividi tramite collegamento saranno mostrati qui", + "No deleted shares" : "Nessuna condivisione eliminata", + "Shares you deleted will show up here" : "Qui saranno mostrate le condivisioni che hai eliminato", + "No pending shares" : "Nessuna condivisione in corso", + "Shares you have received but not confirmed will show up here" : "Le condivisioni che hai ricevuto, ma non confermato saranno mostrate qui", + "No shares" : "Nessuna condivisione", + "Shares will show up here" : "Le condivisioni saranno mostrate qui", + "Restore" : "Ripristina", + "Something happened. Unable to restore the share." : "Qualcosa non ha funzionato. Impossibile ripristinare la condivisione.", + "Something happened. Unable to accept the share." : "Qualcosa non ha funzionato. Impossibile accettare la condivisione.", + "Something happened. Unable to reject the share." : "Qualcosa non ha funzionato. Impossibile rifiutare la condivisione.", + "No expiration date set" : "Nessuna data di scadenza impostata", "Sharing %s failed because the back end does not support sciencemesh shares" : "Condivisione di %s non riuscita poiché il motore non supporta condivisioni di sciencemesh", "One or more of your shares will expire tomorrow" : "Una o più delle tue condivisioni scadrà domani", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/ja.js b/apps/files_sharing/l10n/ja.js index 6869d458ccf..cb4d475c872 100644 --- a/apps/files_sharing/l10n/ja.js +++ b/apps/files_sharing/l10n/ja.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "他ユーザーがあなたと共有中", - "Nothing shared with you yet" : "あなたと共有しているファイルはありません。", - "Files and folders others share with you will show up here" : "他の人から共有されたファイルやフォルダーは、ここに表示されます。", - "Shared with others" : "他ユーザーと共有中", - "Nothing shared yet" : "まだ何も共有されていません", - "Files and folders you share will show up here" : "共有したファイルやフォルダーは、ここに表示されます。", - "Shared by link" : "URLリンクで共有中", - "No shared links" : "共有リンクはありません", - "Files and folders you share by link will show up here" : "リンクで共有したファイルやフォルダーは、ここに表示されます。", - "Deleted shares" : "共有を解除しました", - "No deleted shares" : "削除された共有はありません", - "Shares you deleted will show up here" : "削除した共有がここに表示されます", - "Pending shares" : "保留中の共有", - "No pending shares" : "保留中の共有はありません", - "Shares you have received but not confirmed will show up here" : "受け取り確認をしていない共有がここに表示されます", - "Shares" : "共有", - "No shares" : "共有なし", - "Shares will show up here" : "共有がここに表示されます", - "Restore" : "復元", - "Restore share" : "共有を復元する", - "Something happened. Unable to restore the share." : "何らかの原因で、 共有を復元できません。", - "Accept share" : "共有を受け入れる", - "Something happened. Unable to accept the share." : "何かしらの問題があり、共有を受け入れることができません。", - "Reject share" : "共有の受け入れを拒否する", - "Something happened. Unable to reject the share." : "何かしらの問題があり、共有を拒否できません。", "Waiting…" : "待機中…", "error" : "エラー", "finished" : "完了", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "互換性のあるサーバーが {remote} にはありません。", "Invalid server URL" : "サーバーのURLが無効", "Failed to add the public link to your Nextcloud" : "このNextcloudに公開リンクを追加できませんでした", - "No expiration date set" : "有効期限が未設定", - "Shared by" : "共有者:", "File shares" : "ファイル共有", "Downloaded via public link" : "公開リンクからダウンロードしました", "Downloaded by {email}" : "{email} がダウンロードしました", @@ -245,6 +218,7 @@ OC.L10N.register( "Share {propertyName} saved" : "{propertyName} の共有が保存されました", "Shared" : "共有中", "Share" : "共有", + "Shared by" : "共有者:", "Shared with" : "と共有", "Password created successfully" : "パスワードが正常に作成されました", "Error generating password from password policy" : "パスワード ポリシーからのパスワード生成エラー", @@ -252,6 +226,12 @@ OC.L10N.register( "Shared with you and {circle} by {owner}" : "{owner} が{circle}で共有中", "Shared with you and the conversation {conversation} by {owner}" : "{owner}のスレッド{conversation}であなたと共有しました", "Shared with you in a conversation by {owner}" : "{owner}のスレッドであなたと共有しました", + "Shares" : "共有", + "Shared with you" : "他ユーザーがあなたと共有中", + "Shared with others" : "他ユーザーと共有中", + "Shared by link" : "URLリンクで共有中", + "Deleted shares" : "共有を解除しました", + "Pending shares" : "保留中の共有", "No entries found in this folder" : "このフォルダーにはエントリーがありません", "Name" : "名前", "Share time" : "共有した時刻", @@ -270,6 +250,23 @@ OC.L10N.register( "Uploaded files:" : "アップロード済ファイル:", "By uploading files, you agree to the %1$sterms of service%2$s." : "ファイルをアップロードすると、%1$s のサービス条件 %2$s に同意したことになります。", "Add to your Nextcloud" : "あなたのNextcloudに追加", + "Nothing shared with you yet" : "あなたと共有しているファイルはありません。", + "Files and folders others share with you will show up here" : "他の人から共有されたファイルやフォルダーは、ここに表示されます。", + "Nothing shared yet" : "まだ何も共有されていません", + "Files and folders you share will show up here" : "共有したファイルやフォルダーは、ここに表示されます。", + "No shared links" : "共有リンクはありません", + "Files and folders you share by link will show up here" : "リンクで共有したファイルやフォルダーは、ここに表示されます。", + "No deleted shares" : "削除された共有はありません", + "Shares you deleted will show up here" : "削除した共有がここに表示されます", + "No pending shares" : "保留中の共有はありません", + "Shares you have received but not confirmed will show up here" : "受け取り確認をしていない共有がここに表示されます", + "No shares" : "共有なし", + "Shares will show up here" : "共有がここに表示されます", + "Restore" : "復元", + "Something happened. Unable to restore the share." : "何らかの原因で、 共有を復元できません。", + "Something happened. Unable to accept the share." : "何かしらの問題があり、共有を受け入れることができません。", + "Something happened. Unable to reject the share." : "何かしらの問題があり、共有を拒否できません。", + "No expiration date set" : "有効期限が未設定", "One or more of your shares will expire tomorrow" : "1つ以上の共有が明日期限切れになります", "Error generating password from password_policy" : "password_policy からのパスワード生成エラー" }, diff --git a/apps/files_sharing/l10n/ja.json b/apps/files_sharing/l10n/ja.json index b0629d7caf0..97d0cabce79 100644 --- a/apps/files_sharing/l10n/ja.json +++ b/apps/files_sharing/l10n/ja.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "他ユーザーがあなたと共有中", - "Nothing shared with you yet" : "あなたと共有しているファイルはありません。", - "Files and folders others share with you will show up here" : "他の人から共有されたファイルやフォルダーは、ここに表示されます。", - "Shared with others" : "他ユーザーと共有中", - "Nothing shared yet" : "まだ何も共有されていません", - "Files and folders you share will show up here" : "共有したファイルやフォルダーは、ここに表示されます。", - "Shared by link" : "URLリンクで共有中", - "No shared links" : "共有リンクはありません", - "Files and folders you share by link will show up here" : "リンクで共有したファイルやフォルダーは、ここに表示されます。", - "Deleted shares" : "共有を解除しました", - "No deleted shares" : "削除された共有はありません", - "Shares you deleted will show up here" : "削除した共有がここに表示されます", - "Pending shares" : "保留中の共有", - "No pending shares" : "保留中の共有はありません", - "Shares you have received but not confirmed will show up here" : "受け取り確認をしていない共有がここに表示されます", - "Shares" : "共有", - "No shares" : "共有なし", - "Shares will show up here" : "共有がここに表示されます", - "Restore" : "復元", - "Restore share" : "共有を復元する", - "Something happened. Unable to restore the share." : "何らかの原因で、 共有を復元できません。", - "Accept share" : "共有を受け入れる", - "Something happened. Unable to accept the share." : "何かしらの問題があり、共有を受け入れることができません。", - "Reject share" : "共有の受け入れを拒否する", - "Something happened. Unable to reject the share." : "何かしらの問題があり、共有を拒否できません。", "Waiting…" : "待機中…", "error" : "エラー", "finished" : "完了", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "互換性のあるサーバーが {remote} にはありません。", "Invalid server URL" : "サーバーのURLが無効", "Failed to add the public link to your Nextcloud" : "このNextcloudに公開リンクを追加できませんでした", - "No expiration date set" : "有効期限が未設定", - "Shared by" : "共有者:", "File shares" : "ファイル共有", "Downloaded via public link" : "公開リンクからダウンロードしました", "Downloaded by {email}" : "{email} がダウンロードしました", @@ -243,6 +216,7 @@ "Share {propertyName} saved" : "{propertyName} の共有が保存されました", "Shared" : "共有中", "Share" : "共有", + "Shared by" : "共有者:", "Shared with" : "と共有", "Password created successfully" : "パスワードが正常に作成されました", "Error generating password from password policy" : "パスワード ポリシーからのパスワード生成エラー", @@ -250,6 +224,12 @@ "Shared with you and {circle} by {owner}" : "{owner} が{circle}で共有中", "Shared with you and the conversation {conversation} by {owner}" : "{owner}のスレッド{conversation}であなたと共有しました", "Shared with you in a conversation by {owner}" : "{owner}のスレッドであなたと共有しました", + "Shares" : "共有", + "Shared with you" : "他ユーザーがあなたと共有中", + "Shared with others" : "他ユーザーと共有中", + "Shared by link" : "URLリンクで共有中", + "Deleted shares" : "共有を解除しました", + "Pending shares" : "保留中の共有", "No entries found in this folder" : "このフォルダーにはエントリーがありません", "Name" : "名前", "Share time" : "共有した時刻", @@ -268,6 +248,23 @@ "Uploaded files:" : "アップロード済ファイル:", "By uploading files, you agree to the %1$sterms of service%2$s." : "ファイルをアップロードすると、%1$s のサービス条件 %2$s に同意したことになります。", "Add to your Nextcloud" : "あなたのNextcloudに追加", + "Nothing shared with you yet" : "あなたと共有しているファイルはありません。", + "Files and folders others share with you will show up here" : "他の人から共有されたファイルやフォルダーは、ここに表示されます。", + "Nothing shared yet" : "まだ何も共有されていません", + "Files and folders you share will show up here" : "共有したファイルやフォルダーは、ここに表示されます。", + "No shared links" : "共有リンクはありません", + "Files and folders you share by link will show up here" : "リンクで共有したファイルやフォルダーは、ここに表示されます。", + "No deleted shares" : "削除された共有はありません", + "Shares you deleted will show up here" : "削除した共有がここに表示されます", + "No pending shares" : "保留中の共有はありません", + "Shares you have received but not confirmed will show up here" : "受け取り確認をしていない共有がここに表示されます", + "No shares" : "共有なし", + "Shares will show up here" : "共有がここに表示されます", + "Restore" : "復元", + "Something happened. Unable to restore the share." : "何らかの原因で、 共有を復元できません。", + "Something happened. Unable to accept the share." : "何かしらの問題があり、共有を受け入れることができません。", + "Something happened. Unable to reject the share." : "何かしらの問題があり、共有を拒否できません。", + "No expiration date set" : "有効期限が未設定", "One or more of your shares will expire tomorrow" : "1つ以上の共有が明日期限切れになります", "Error generating password from password_policy" : "password_policy からのパスワード生成エラー" },"pluralForm" :"nplurals=1; plural=0;" diff --git a/apps/files_sharing/l10n/ko.js b/apps/files_sharing/l10n/ko.js index 6f79305f5df..8d36c2c0bd4 100644 --- a/apps/files_sharing/l10n/ko.js +++ b/apps/files_sharing/l10n/ko.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "나와 공유됨", - "Nothing shared with you yet" : "나와 공유된 항목 없음", - "Files and folders others share with you will show up here" : "다른 사람이 공유한 파일과 폴더가 여기에 나타납니다", - "Shared with others" : "다른 사람과 공유됨", - "Nothing shared yet" : "공유된 항목 없음", - "Files and folders you share will show up here" : "내가 공유하는 파일과 폴더가 여기에 나타납니다", - "Shared by link" : "링크로 공유됨", - "No shared links" : "공유된 링크 없음", - "Files and folders you share by link will show up here" : "내가 링크로 공유하는 파일과 폴더가 여기에 나타납니다", - "Deleted shares" : "삭제된 공유", - "No deleted shares" : "삭제된 공유 없음", - "Shares you deleted will show up here" : "삭제한 공유 목록이 여기에 표시됩니다.", - "Pending shares" : "진행중인 공유", - "No pending shares" : "보류 중인 공유 없음", - "Shares you have received but not confirmed will show up here" : "공유를 받았지만 확인하지 않은 경우 이곳에 표시됩니다.", - "Shares" : "공유", - "No shares" : "공유 없음", - "Shares will show up here" : "공유 목록이 여기에 표시됩니다.", - "Restore" : "Restore", - "Restore share" : "공유 복원", - "Something happened. Unable to restore the share." : "무언가 잘못되었습니다. 공유를 복원할 수 없습니다.", - "Accept share" : "공유 수락", - "Something happened. Unable to accept the share." : "공유를 수락할 수 없습니다.", - "Reject share" : "공유 거부", - "Something happened. Unable to reject the share." : "공유를 거절할 수 없습니다.", "Waiting…" : "대기중...", "error" : "오류", "finished" : "완료됨", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "{remote}에서 호환 서버를 찾을 수 없음", "Invalid server URL" : "잘못된 서버 URL", "Failed to add the public link to your Nextcloud" : "Nextcloud에 공개 링크를 추가할 수 없음", - "No expiration date set" : "만료 날짜가 설정되지 않았음", - "Shared by" : "공유한 사용자:", "File shares" : "파일 공유", "Downloaded via public link" : "공개 링크로 다운로드", "Downloaded by {email}" : "{email} 님이 다운로드함", @@ -245,6 +218,7 @@ OC.L10N.register( "Share {propertyName} saved" : "{propertyName} 공유 저장됨", "Shared" : "공유됨", "Share" : "공유", + "Shared by" : "공유한 사용자:", "Shared with" : "다음 사용자와 공유함", "Password created successfully" : "암호가 성공적으로 생성됨", "Error generating password from password policy" : "암호 정책에서 암호 생성 중에 오류 발생", @@ -252,6 +226,12 @@ OC.L10N.register( "Shared with you and {circle} by {owner}" : "{owner}님이 여러분과 {circle}에게 공유함", "Shared with you and the conversation {conversation} by {owner}" : "{owner}님이 여러분과 대화 {conversation}와(과) 공유함", "Shared with you in a conversation by {owner}" : "{owner}님이 대화에서 당신에게 공유함", + "Shares" : "공유", + "Shared with you" : "나와 공유됨", + "Shared with others" : "다른 사람과 공유됨", + "Shared by link" : "링크로 공유됨", + "Deleted shares" : "삭제된 공유", + "Pending shares" : "진행중인 공유", "No entries found in this folder" : "이 폴더에 항목 없음", "Name" : "이름", "Share time" : "공유 시간", @@ -270,6 +250,23 @@ OC.L10N.register( "Uploaded files:" : "업로드한 파일:", "By uploading files, you agree to the %1$sterms of service%2$s." : "파일을 업로드하면 %1$s이용 약관%2$s에 동의하는 것을 의미합니다.", "Add to your Nextcloud" : "내 Nextcloud에 추가", + "Nothing shared with you yet" : "나와 공유된 항목 없음", + "Files and folders others share with you will show up here" : "다른 사람이 공유한 파일과 폴더가 여기에 나타납니다", + "Nothing shared yet" : "공유된 항목 없음", + "Files and folders you share will show up here" : "내가 공유하는 파일과 폴더가 여기에 나타납니다", + "No shared links" : "공유된 링크 없음", + "Files and folders you share by link will show up here" : "내가 링크로 공유하는 파일과 폴더가 여기에 나타납니다", + "No deleted shares" : "삭제된 공유 없음", + "Shares you deleted will show up here" : "삭제한 공유 목록이 여기에 표시됩니다.", + "No pending shares" : "보류 중인 공유 없음", + "Shares you have received but not confirmed will show up here" : "공유를 받았지만 확인하지 않은 경우 이곳에 표시됩니다.", + "No shares" : "공유 없음", + "Shares will show up here" : "공유 목록이 여기에 표시됩니다.", + "Restore" : "Restore", + "Something happened. Unable to restore the share." : "무언가 잘못되었습니다. 공유를 복원할 수 없습니다.", + "Something happened. Unable to accept the share." : "공유를 수락할 수 없습니다.", + "Something happened. Unable to reject the share." : "공유를 거절할 수 없습니다.", + "No expiration date set" : "만료 날짜가 설정되지 않았음", "Sharing %s failed because the back end does not support sciencemesh shares" : "백엔드가 ScienceMesh 공유를 지원하지 않기 때문에 %s의 공유가 실패했습니다.", "One or more of your shares will expire tomorrow" : "하나 이상의 공유가 내일 만료됩니다.", "Error generating password from password_policy" : "password_policy에서 암호 생성 중에 오류 발생" diff --git a/apps/files_sharing/l10n/ko.json b/apps/files_sharing/l10n/ko.json index 1cb3ae7b79d..1c41b316c37 100644 --- a/apps/files_sharing/l10n/ko.json +++ b/apps/files_sharing/l10n/ko.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "나와 공유됨", - "Nothing shared with you yet" : "나와 공유된 항목 없음", - "Files and folders others share with you will show up here" : "다른 사람이 공유한 파일과 폴더가 여기에 나타납니다", - "Shared with others" : "다른 사람과 공유됨", - "Nothing shared yet" : "공유된 항목 없음", - "Files and folders you share will show up here" : "내가 공유하는 파일과 폴더가 여기에 나타납니다", - "Shared by link" : "링크로 공유됨", - "No shared links" : "공유된 링크 없음", - "Files and folders you share by link will show up here" : "내가 링크로 공유하는 파일과 폴더가 여기에 나타납니다", - "Deleted shares" : "삭제된 공유", - "No deleted shares" : "삭제된 공유 없음", - "Shares you deleted will show up here" : "삭제한 공유 목록이 여기에 표시됩니다.", - "Pending shares" : "진행중인 공유", - "No pending shares" : "보류 중인 공유 없음", - "Shares you have received but not confirmed will show up here" : "공유를 받았지만 확인하지 않은 경우 이곳에 표시됩니다.", - "Shares" : "공유", - "No shares" : "공유 없음", - "Shares will show up here" : "공유 목록이 여기에 표시됩니다.", - "Restore" : "Restore", - "Restore share" : "공유 복원", - "Something happened. Unable to restore the share." : "무언가 잘못되었습니다. 공유를 복원할 수 없습니다.", - "Accept share" : "공유 수락", - "Something happened. Unable to accept the share." : "공유를 수락할 수 없습니다.", - "Reject share" : "공유 거부", - "Something happened. Unable to reject the share." : "공유를 거절할 수 없습니다.", "Waiting…" : "대기중...", "error" : "오류", "finished" : "완료됨", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "{remote}에서 호환 서버를 찾을 수 없음", "Invalid server URL" : "잘못된 서버 URL", "Failed to add the public link to your Nextcloud" : "Nextcloud에 공개 링크를 추가할 수 없음", - "No expiration date set" : "만료 날짜가 설정되지 않았음", - "Shared by" : "공유한 사용자:", "File shares" : "파일 공유", "Downloaded via public link" : "공개 링크로 다운로드", "Downloaded by {email}" : "{email} 님이 다운로드함", @@ -243,6 +216,7 @@ "Share {propertyName} saved" : "{propertyName} 공유 저장됨", "Shared" : "공유됨", "Share" : "공유", + "Shared by" : "공유한 사용자:", "Shared with" : "다음 사용자와 공유함", "Password created successfully" : "암호가 성공적으로 생성됨", "Error generating password from password policy" : "암호 정책에서 암호 생성 중에 오류 발생", @@ -250,6 +224,12 @@ "Shared with you and {circle} by {owner}" : "{owner}님이 여러분과 {circle}에게 공유함", "Shared with you and the conversation {conversation} by {owner}" : "{owner}님이 여러분과 대화 {conversation}와(과) 공유함", "Shared with you in a conversation by {owner}" : "{owner}님이 대화에서 당신에게 공유함", + "Shares" : "공유", + "Shared with you" : "나와 공유됨", + "Shared with others" : "다른 사람과 공유됨", + "Shared by link" : "링크로 공유됨", + "Deleted shares" : "삭제된 공유", + "Pending shares" : "진행중인 공유", "No entries found in this folder" : "이 폴더에 항목 없음", "Name" : "이름", "Share time" : "공유 시간", @@ -268,6 +248,23 @@ "Uploaded files:" : "업로드한 파일:", "By uploading files, you agree to the %1$sterms of service%2$s." : "파일을 업로드하면 %1$s이용 약관%2$s에 동의하는 것을 의미합니다.", "Add to your Nextcloud" : "내 Nextcloud에 추가", + "Nothing shared with you yet" : "나와 공유된 항목 없음", + "Files and folders others share with you will show up here" : "다른 사람이 공유한 파일과 폴더가 여기에 나타납니다", + "Nothing shared yet" : "공유된 항목 없음", + "Files and folders you share will show up here" : "내가 공유하는 파일과 폴더가 여기에 나타납니다", + "No shared links" : "공유된 링크 없음", + "Files and folders you share by link will show up here" : "내가 링크로 공유하는 파일과 폴더가 여기에 나타납니다", + "No deleted shares" : "삭제된 공유 없음", + "Shares you deleted will show up here" : "삭제한 공유 목록이 여기에 표시됩니다.", + "No pending shares" : "보류 중인 공유 없음", + "Shares you have received but not confirmed will show up here" : "공유를 받았지만 확인하지 않은 경우 이곳에 표시됩니다.", + "No shares" : "공유 없음", + "Shares will show up here" : "공유 목록이 여기에 표시됩니다.", + "Restore" : "Restore", + "Something happened. Unable to restore the share." : "무언가 잘못되었습니다. 공유를 복원할 수 없습니다.", + "Something happened. Unable to accept the share." : "공유를 수락할 수 없습니다.", + "Something happened. Unable to reject the share." : "공유를 거절할 수 없습니다.", + "No expiration date set" : "만료 날짜가 설정되지 않았음", "Sharing %s failed because the back end does not support sciencemesh shares" : "백엔드가 ScienceMesh 공유를 지원하지 않기 때문에 %s의 공유가 실패했습니다.", "One or more of your shares will expire tomorrow" : "하나 이상의 공유가 내일 만료됩니다.", "Error generating password from password_policy" : "password_policy에서 암호 생성 중에 오류 발생" diff --git a/apps/files_sharing/l10n/lt_LT.js b/apps/files_sharing/l10n/lt_LT.js index f0dd3de773e..1d0fcdd1289 100644 --- a/apps/files_sharing/l10n/lt_LT.js +++ b/apps/files_sharing/l10n/lt_LT.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Bendrinama su jumis", - "Nothing shared with you yet" : "Kol kas su jumis nieko nėra bendrinama", - "Files and folders others share with you will show up here" : "Čia bus rodomi failai ir aplankai, kuriuos su jumis bendrina kiti asmenys", - "Shared with others" : "Bendrinama su kitais", - "Nothing shared yet" : "Kol kas nieko nebendrinama", - "Files and folders you share will show up here" : "Čia bus rodomi jūsų bendrinami failai ir aplankai", - "Shared by link" : "Bendrinama pagal nuorodą", - "No shared links" : "Nėra bendrinimo nuorodų", - "Files and folders you share by link will show up here" : "Čia bus rodomi failai ir aplankai, kuriuos bendrinate pagal nuorodą", - "Deleted shares" : "Ištrinti viešiniai", - "No deleted shares" : "Ištrintų viešinių nėra", - "Shares you deleted will show up here" : "Čia bus rodomi jūsų ištrinti viešiniai", - "Pending shares" : "Laukiantys viešiniai", - "No pending shares" : "Nėra jokių laukiančių viešinių", - "Shares you have received but not confirmed will show up here" : "Čia bus rodomi gauti, tačiau nepatvirtinti viešiniai", - "Shares" : "Viešiniai", - "No shares" : "Nėra jokių viešinių", - "Shares will show up here" : "Čia bus rodomi viešiniai", - "Restore" : "Atkurti", - "Restore share" : "Atkurti viešinį", - "Something happened. Unable to restore the share." : "Kažkas nutiko. Nepavyko atkurti viešinio.", - "Accept share" : "Priimti viešinį", - "Something happened. Unable to accept the share." : "Kažkas nutiko. Nepavyko priimti viešinio.", - "Reject share" : "Atmesti viešinį", - "Something happened. Unable to reject the share." : "Kažkas nutiko. Nepavyko atmesti viešinį.", "Waiting…" : "Laukiama…", "error" : "klaida", "finished" : "pabaigta", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Nerasta jokio suderinamo serverio ties {remote}", "Invalid server URL" : "Neteisingas serverio URL adresas", "Failed to add the public link to your Nextcloud" : "Nepavyko pridėti viešosios nuorodos į jūsų Nextcloud", - "No expiration date set" : "Dalinimosi pabaigos data yra nenustatyta", - "Shared by" : "Bendrina", "File shares" : "Bendrinami failai", "Downloaded via public link" : "Atsisiųstas per viešąją nuorodą", "Downloaded by {email}" : "Atsisiuntė {email}", @@ -224,12 +197,19 @@ OC.L10N.register( "Error updating the share" : "Klaida atnaujinant viešinį", "Shared" : "Bendrinama", "Share" : "Dalintis", + "Shared by" : "Bendrina", "Shared with" : "Bendrinama su", "Password created successfully" : "Slaptažodis sėkmingai sukurtas", "Shared with you and the group {group} by {owner}" : "{owner} pradėjo bendrinti su jumis ir grupe {group}", "Shared with you and {circle} by {owner}" : "{owner} pradėjo bendrinti su jumis ir {circle}", "Shared with you and the conversation {conversation} by {owner}" : "{owner} pasidalino su jumis ir pokalbiu {conversation}", "Shared with you in a conversation by {owner}" : "{owner} pasidalino su jumis pokalbyje", + "Shares" : "Viešiniai", + "Shared with you" : "Bendrinama su jumis", + "Shared with others" : "Bendrinama su kitais", + "Shared by link" : "Bendrinama pagal nuorodą", + "Deleted shares" : "Ištrinti viešiniai", + "Pending shares" : "Laukiantys viešiniai", "No entries found in this folder" : "Šiame aplanke įrašų nerasta", "Name" : "Pavadinimas", "Share time" : "Bendrinimo laikas", @@ -248,6 +228,23 @@ OC.L10N.register( "Uploaded files:" : "Įkelti failai:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Įkeldami failus, sutinkate su %1$snaudojimosi sąlygomis%2$s.", "Add to your Nextcloud" : "Pridėti į savo Nextcloud", + "Nothing shared with you yet" : "Kol kas su jumis nieko nėra bendrinama", + "Files and folders others share with you will show up here" : "Čia bus rodomi failai ir aplankai, kuriuos su jumis bendrina kiti asmenys", + "Nothing shared yet" : "Kol kas nieko nebendrinama", + "Files and folders you share will show up here" : "Čia bus rodomi jūsų bendrinami failai ir aplankai", + "No shared links" : "Nėra bendrinimo nuorodų", + "Files and folders you share by link will show up here" : "Čia bus rodomi failai ir aplankai, kuriuos bendrinate pagal nuorodą", + "No deleted shares" : "Ištrintų viešinių nėra", + "Shares you deleted will show up here" : "Čia bus rodomi jūsų ištrinti viešiniai", + "No pending shares" : "Nėra jokių laukiančių viešinių", + "Shares you have received but not confirmed will show up here" : "Čia bus rodomi gauti, tačiau nepatvirtinti viešiniai", + "No shares" : "Nėra jokių viešinių", + "Shares will show up here" : "Čia bus rodomi viešiniai", + "Restore" : "Atkurti", + "Something happened. Unable to restore the share." : "Kažkas nutiko. Nepavyko atkurti viešinio.", + "Something happened. Unable to accept the share." : "Kažkas nutiko. Nepavyko priimti viešinio.", + "Something happened. Unable to reject the share." : "Kažkas nutiko. Nepavyko atmesti viešinį.", + "No expiration date set" : "Dalinimosi pabaigos data yra nenustatyta", "One or more of your shares will expire tomorrow" : "Vienas ar daugiau Jūsų bendrinimų rytoj baigia galioti" }, "nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);"); diff --git a/apps/files_sharing/l10n/lt_LT.json b/apps/files_sharing/l10n/lt_LT.json index 090e6fb409d..92e6e703afa 100644 --- a/apps/files_sharing/l10n/lt_LT.json +++ b/apps/files_sharing/l10n/lt_LT.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Bendrinama su jumis", - "Nothing shared with you yet" : "Kol kas su jumis nieko nėra bendrinama", - "Files and folders others share with you will show up here" : "Čia bus rodomi failai ir aplankai, kuriuos su jumis bendrina kiti asmenys", - "Shared with others" : "Bendrinama su kitais", - "Nothing shared yet" : "Kol kas nieko nebendrinama", - "Files and folders you share will show up here" : "Čia bus rodomi jūsų bendrinami failai ir aplankai", - "Shared by link" : "Bendrinama pagal nuorodą", - "No shared links" : "Nėra bendrinimo nuorodų", - "Files and folders you share by link will show up here" : "Čia bus rodomi failai ir aplankai, kuriuos bendrinate pagal nuorodą", - "Deleted shares" : "Ištrinti viešiniai", - "No deleted shares" : "Ištrintų viešinių nėra", - "Shares you deleted will show up here" : "Čia bus rodomi jūsų ištrinti viešiniai", - "Pending shares" : "Laukiantys viešiniai", - "No pending shares" : "Nėra jokių laukiančių viešinių", - "Shares you have received but not confirmed will show up here" : "Čia bus rodomi gauti, tačiau nepatvirtinti viešiniai", - "Shares" : "Viešiniai", - "No shares" : "Nėra jokių viešinių", - "Shares will show up here" : "Čia bus rodomi viešiniai", - "Restore" : "Atkurti", - "Restore share" : "Atkurti viešinį", - "Something happened. Unable to restore the share." : "Kažkas nutiko. Nepavyko atkurti viešinio.", - "Accept share" : "Priimti viešinį", - "Something happened. Unable to accept the share." : "Kažkas nutiko. Nepavyko priimti viešinio.", - "Reject share" : "Atmesti viešinį", - "Something happened. Unable to reject the share." : "Kažkas nutiko. Nepavyko atmesti viešinį.", "Waiting…" : "Laukiama…", "error" : "klaida", "finished" : "pabaigta", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "Nerasta jokio suderinamo serverio ties {remote}", "Invalid server URL" : "Neteisingas serverio URL adresas", "Failed to add the public link to your Nextcloud" : "Nepavyko pridėti viešosios nuorodos į jūsų Nextcloud", - "No expiration date set" : "Dalinimosi pabaigos data yra nenustatyta", - "Shared by" : "Bendrina", "File shares" : "Bendrinami failai", "Downloaded via public link" : "Atsisiųstas per viešąją nuorodą", "Downloaded by {email}" : "Atsisiuntė {email}", @@ -222,12 +195,19 @@ "Error updating the share" : "Klaida atnaujinant viešinį", "Shared" : "Bendrinama", "Share" : "Dalintis", + "Shared by" : "Bendrina", "Shared with" : "Bendrinama su", "Password created successfully" : "Slaptažodis sėkmingai sukurtas", "Shared with you and the group {group} by {owner}" : "{owner} pradėjo bendrinti su jumis ir grupe {group}", "Shared with you and {circle} by {owner}" : "{owner} pradėjo bendrinti su jumis ir {circle}", "Shared with you and the conversation {conversation} by {owner}" : "{owner} pasidalino su jumis ir pokalbiu {conversation}", "Shared with you in a conversation by {owner}" : "{owner} pasidalino su jumis pokalbyje", + "Shares" : "Viešiniai", + "Shared with you" : "Bendrinama su jumis", + "Shared with others" : "Bendrinama su kitais", + "Shared by link" : "Bendrinama pagal nuorodą", + "Deleted shares" : "Ištrinti viešiniai", + "Pending shares" : "Laukiantys viešiniai", "No entries found in this folder" : "Šiame aplanke įrašų nerasta", "Name" : "Pavadinimas", "Share time" : "Bendrinimo laikas", @@ -246,6 +226,23 @@ "Uploaded files:" : "Įkelti failai:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Įkeldami failus, sutinkate su %1$snaudojimosi sąlygomis%2$s.", "Add to your Nextcloud" : "Pridėti į savo Nextcloud", + "Nothing shared with you yet" : "Kol kas su jumis nieko nėra bendrinama", + "Files and folders others share with you will show up here" : "Čia bus rodomi failai ir aplankai, kuriuos su jumis bendrina kiti asmenys", + "Nothing shared yet" : "Kol kas nieko nebendrinama", + "Files and folders you share will show up here" : "Čia bus rodomi jūsų bendrinami failai ir aplankai", + "No shared links" : "Nėra bendrinimo nuorodų", + "Files and folders you share by link will show up here" : "Čia bus rodomi failai ir aplankai, kuriuos bendrinate pagal nuorodą", + "No deleted shares" : "Ištrintų viešinių nėra", + "Shares you deleted will show up here" : "Čia bus rodomi jūsų ištrinti viešiniai", + "No pending shares" : "Nėra jokių laukiančių viešinių", + "Shares you have received but not confirmed will show up here" : "Čia bus rodomi gauti, tačiau nepatvirtinti viešiniai", + "No shares" : "Nėra jokių viešinių", + "Shares will show up here" : "Čia bus rodomi viešiniai", + "Restore" : "Atkurti", + "Something happened. Unable to restore the share." : "Kažkas nutiko. Nepavyko atkurti viešinio.", + "Something happened. Unable to accept the share." : "Kažkas nutiko. Nepavyko priimti viešinio.", + "Something happened. Unable to reject the share." : "Kažkas nutiko. Nepavyko atmesti viešinį.", + "No expiration date set" : "Dalinimosi pabaigos data yra nenustatyta", "One or more of your shares will expire tomorrow" : "Vienas ar daugiau Jūsų bendrinimų rytoj baigia galioti" },"pluralForm" :"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/lv.js b/apps/files_sharing/l10n/lv.js index 23edcd05e4a..0af1f5dff05 100644 --- a/apps/files_sharing/l10n/lv.js +++ b/apps/files_sharing/l10n/lv.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Koplietots ar jums", - "Nothing shared with you yet" : "Nekas vēl nav koplietots", - "Files and folders others share with you will show up here" : "Šeit būs redzamas koplietotās datnes un mapes, ko citi koplietos ar jums", - "Shared with others" : "Koplietots ar citiem", - "Nothing shared yet" : "Nekas vēl nav koplietots", - "Files and folders you share will show up here" : "Šeit būs redzamas jūsu koplietotās datnes un mapes", - "Shared by link" : "Koplietots ar saiti", - "No shared links" : "Nav koplietotu saišu", - "Files and folders you share by link will show up here" : "Šeit būs redzamas ar saiti koplietotās datnes un mapes", - "Deleted shares" : "Dzēstie koplietojumi", - "No deleted shares" : "Nav dzēstu koplietojumu", - "Shares you deleted will show up here" : "Šeit būs redzami jūsu dzēstie koplietojumi", - "Pending shares" : "Gaidošie koplietojumi", - "No pending shares" : "Nav gaidošie koplietojumi", - "Shares you have received but not confirmed will show up here" : "Šeit tiks rādīti jūsu saņemtie, bet neapstiprinātie koplietojumi", - "Shares" : "Koplietots", - "No shares" : "Nav koplietojumu", - "Shares will show up here" : "Šeit tiks rādīti koplietojumi", - "Restore" : "Atjaunot", - "Restore share" : "Atjaunot koplietojumu", - "Something happened. Unable to restore the share." : "Kaut kas atgadījās. Nevar atjaunot kopīgošanu.", - "Accept share" : "Pieņemt koplietojumu", - "Something happened. Unable to accept the share." : "Kaut kas atgadījās. Nevar apstiprināt koplietošanu.", - "Reject share" : "Noraidīt koplietojumu", - "Something happened. Unable to reject the share." : "Kaut kas atgadījās. Nevar noraidīt koplietojumu.", "Waiting…" : "Gaida...", "error" : "kļūda", "finished" : "pabeigts", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Nav atrasts neviens saderīgs serveris {remote}", "Invalid server URL" : "Nederīgs servera url", "Failed to add the public link to your Nextcloud" : "Neizdevās pievienot publisku saiti jūsu Nextcloud", - "No expiration date set" : "Nav noteikts derīguma termiņa beigu datums", - "Shared by" : "Koplietoja", "File shares" : "Datņu koplietojumi", "Downloaded via public link" : "Lejupielādēt izmantojot publisku saiti", "Downloaded by {email}" : "Lejupielādēts {email}", @@ -184,11 +157,18 @@ OC.L10N.register( "Link to a file" : "Datnes saite", "Shared" : "Koplietots", "Share" : "Koplietot", + "Shared by" : "Koplietoja", "Shared with" : "Koplietots ar", "Shared with you and the group {group} by {owner}" : "{owner} koplietoja ar jums un grupu {group}", "Shared with you and {circle} by {owner}" : "{owner} koplietoja ar jums un {circle}", "Shared with you and the conversation {conversation} by {owner}" : "{owner} koplietoja ar jums un sarunu {conversation}", "Shared with you in a conversation by {owner}" : " {owner} koplietoja ar jums sarunā", + "Shares" : "Koplietots", + "Shared with you" : "Koplietots ar jums", + "Shared with others" : "Koplietots ar citiem", + "Shared by link" : "Koplietots ar saiti", + "Deleted shares" : "Dzēstie koplietojumi", + "Pending shares" : "Gaidošie koplietojumi", "No entries found in this folder" : "Šajā mapē nekas nav atrasts", "Name" : "Nosaukums", "Share time" : "Koplietošanas laiks", @@ -206,6 +186,23 @@ OC.L10N.register( "Uploaded files:" : "Augšupielādētas datnes:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Veicot datņu augšupielādi, jūs piekrītat %1$spakalpojuma noteikumiem%2$s.", "Add to your Nextcloud" : "Pievienot savam Nextcloud", + "Nothing shared with you yet" : "Nekas vēl nav koplietots", + "Files and folders others share with you will show up here" : "Šeit būs redzamas koplietotās datnes un mapes, ko citi koplietos ar jums", + "Nothing shared yet" : "Nekas vēl nav koplietots", + "Files and folders you share will show up here" : "Šeit būs redzamas jūsu koplietotās datnes un mapes", + "No shared links" : "Nav koplietotu saišu", + "Files and folders you share by link will show up here" : "Šeit būs redzamas ar saiti koplietotās datnes un mapes", + "No deleted shares" : "Nav dzēstu koplietojumu", + "Shares you deleted will show up here" : "Šeit būs redzami jūsu dzēstie koplietojumi", + "No pending shares" : "Nav gaidošie koplietojumi", + "Shares you have received but not confirmed will show up here" : "Šeit tiks rādīti jūsu saņemtie, bet neapstiprinātie koplietojumi", + "No shares" : "Nav koplietojumu", + "Shares will show up here" : "Šeit tiks rādīti koplietojumi", + "Restore" : "Atjaunot", + "Something happened. Unable to restore the share." : "Kaut kas atgadījās. Nevar atjaunot kopīgošanu.", + "Something happened. Unable to accept the share." : "Kaut kas atgadījās. Nevar apstiprināt koplietošanu.", + "Something happened. Unable to reject the share." : "Kaut kas atgadījās. Nevar noraidīt koplietojumu.", + "No expiration date set" : "Nav noteikts derīguma termiņa beigu datums", "One or more of your shares will expire tomorrow" : "Vienam vai vairākiem jūsu koplietojumiem rīt beigsies termiņš" }, "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"); diff --git a/apps/files_sharing/l10n/lv.json b/apps/files_sharing/l10n/lv.json index 72c4d31e611..fe644a84651 100644 --- a/apps/files_sharing/l10n/lv.json +++ b/apps/files_sharing/l10n/lv.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Koplietots ar jums", - "Nothing shared with you yet" : "Nekas vēl nav koplietots", - "Files and folders others share with you will show up here" : "Šeit būs redzamas koplietotās datnes un mapes, ko citi koplietos ar jums", - "Shared with others" : "Koplietots ar citiem", - "Nothing shared yet" : "Nekas vēl nav koplietots", - "Files and folders you share will show up here" : "Šeit būs redzamas jūsu koplietotās datnes un mapes", - "Shared by link" : "Koplietots ar saiti", - "No shared links" : "Nav koplietotu saišu", - "Files and folders you share by link will show up here" : "Šeit būs redzamas ar saiti koplietotās datnes un mapes", - "Deleted shares" : "Dzēstie koplietojumi", - "No deleted shares" : "Nav dzēstu koplietojumu", - "Shares you deleted will show up here" : "Šeit būs redzami jūsu dzēstie koplietojumi", - "Pending shares" : "Gaidošie koplietojumi", - "No pending shares" : "Nav gaidošie koplietojumi", - "Shares you have received but not confirmed will show up here" : "Šeit tiks rādīti jūsu saņemtie, bet neapstiprinātie koplietojumi", - "Shares" : "Koplietots", - "No shares" : "Nav koplietojumu", - "Shares will show up here" : "Šeit tiks rādīti koplietojumi", - "Restore" : "Atjaunot", - "Restore share" : "Atjaunot koplietojumu", - "Something happened. Unable to restore the share." : "Kaut kas atgadījās. Nevar atjaunot kopīgošanu.", - "Accept share" : "Pieņemt koplietojumu", - "Something happened. Unable to accept the share." : "Kaut kas atgadījās. Nevar apstiprināt koplietošanu.", - "Reject share" : "Noraidīt koplietojumu", - "Something happened. Unable to reject the share." : "Kaut kas atgadījās. Nevar noraidīt koplietojumu.", "Waiting…" : "Gaida...", "error" : "kļūda", "finished" : "pabeigts", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "Nav atrasts neviens saderīgs serveris {remote}", "Invalid server URL" : "Nederīgs servera url", "Failed to add the public link to your Nextcloud" : "Neizdevās pievienot publisku saiti jūsu Nextcloud", - "No expiration date set" : "Nav noteikts derīguma termiņa beigu datums", - "Shared by" : "Koplietoja", "File shares" : "Datņu koplietojumi", "Downloaded via public link" : "Lejupielādēt izmantojot publisku saiti", "Downloaded by {email}" : "Lejupielādēts {email}", @@ -182,11 +155,18 @@ "Link to a file" : "Datnes saite", "Shared" : "Koplietots", "Share" : "Koplietot", + "Shared by" : "Koplietoja", "Shared with" : "Koplietots ar", "Shared with you and the group {group} by {owner}" : "{owner} koplietoja ar jums un grupu {group}", "Shared with you and {circle} by {owner}" : "{owner} koplietoja ar jums un {circle}", "Shared with you and the conversation {conversation} by {owner}" : "{owner} koplietoja ar jums un sarunu {conversation}", "Shared with you in a conversation by {owner}" : " {owner} koplietoja ar jums sarunā", + "Shares" : "Koplietots", + "Shared with you" : "Koplietots ar jums", + "Shared with others" : "Koplietots ar citiem", + "Shared by link" : "Koplietots ar saiti", + "Deleted shares" : "Dzēstie koplietojumi", + "Pending shares" : "Gaidošie koplietojumi", "No entries found in this folder" : "Šajā mapē nekas nav atrasts", "Name" : "Nosaukums", "Share time" : "Koplietošanas laiks", @@ -204,6 +184,23 @@ "Uploaded files:" : "Augšupielādētas datnes:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Veicot datņu augšupielādi, jūs piekrītat %1$spakalpojuma noteikumiem%2$s.", "Add to your Nextcloud" : "Pievienot savam Nextcloud", + "Nothing shared with you yet" : "Nekas vēl nav koplietots", + "Files and folders others share with you will show up here" : "Šeit būs redzamas koplietotās datnes un mapes, ko citi koplietos ar jums", + "Nothing shared yet" : "Nekas vēl nav koplietots", + "Files and folders you share will show up here" : "Šeit būs redzamas jūsu koplietotās datnes un mapes", + "No shared links" : "Nav koplietotu saišu", + "Files and folders you share by link will show up here" : "Šeit būs redzamas ar saiti koplietotās datnes un mapes", + "No deleted shares" : "Nav dzēstu koplietojumu", + "Shares you deleted will show up here" : "Šeit būs redzami jūsu dzēstie koplietojumi", + "No pending shares" : "Nav gaidošie koplietojumi", + "Shares you have received but not confirmed will show up here" : "Šeit tiks rādīti jūsu saņemtie, bet neapstiprinātie koplietojumi", + "No shares" : "Nav koplietojumu", + "Shares will show up here" : "Šeit tiks rādīti koplietojumi", + "Restore" : "Atjaunot", + "Something happened. Unable to restore the share." : "Kaut kas atgadījās. Nevar atjaunot kopīgošanu.", + "Something happened. Unable to accept the share." : "Kaut kas atgadījās. Nevar apstiprināt koplietošanu.", + "Something happened. Unable to reject the share." : "Kaut kas atgadījās. Nevar noraidīt koplietojumu.", + "No expiration date set" : "Nav noteikts derīguma termiņa beigu datums", "One or more of your shares will expire tomorrow" : "Vienam vai vairākiem jūsu koplietojumiem rīt beigsies termiņš" },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/mk.js b/apps/files_sharing/l10n/mk.js index 6628df2341e..0504ae56771 100644 --- a/apps/files_sharing/l10n/mk.js +++ b/apps/files_sharing/l10n/mk.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Споделено со вас", - "Nothing shared with you yet" : "Ништо не е споделено со вас", - "Files and folders others share with you will show up here" : "Датотеките и папките што другите ги споделуваат со вас ќе се прикажат овде", - "Shared with others" : "Споделно со други", - "Nothing shared yet" : "Ништо не е споделено", - "Files and folders you share will show up here" : "Датотеките и папките кои ги споделувате ќе се појават тука", - "Shared by link" : "Споделено со линк", - "No shared links" : "Нема споделени врски/линкови", - "Files and folders you share by link will show up here" : "Датотеките и папките кои ги споделувате со линк ќе се појават тука", - "Deleted shares" : "Избришани споделувања", - "No deleted shares" : "Нема избришани споделувања", - "Shares you deleted will show up here" : "Споделувањата што сте ги избришале ќе се појават овде", - "Pending shares" : "Споделувања на чекање", - "No pending shares" : "Нема споделувања на чекање", - "Shares you have received but not confirmed will show up here" : "Споделувањата кој сте ги добиле но не сте ги потврдиле ќе се појават овде.", - "Shares" : "Споделувања", - "No shares" : "Нема споделувања", - "Shares will show up here" : "Споделувањата ќе се појават овде", - "Restore" : "Врати", - "Restore share" : "Врати споделување", - "Something happened. Unable to restore the share." : "Нешто се случило. Неможе да се врати споделувањето.", - "Accept share" : "Прифати го споделувањето", - "Something happened. Unable to accept the share." : "Нешто се случи. Неможам да го прифатам споделувањето.", - "Reject share" : "Одбиј го споделувањето", - "Something happened. Unable to reject the share." : "Нешто се случи. Неможам да го одбијам споделувањето.", "Waiting…" : "Почекајте...", "error" : "грешка", "finished" : "завршено", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "{remote} не е компатибилен сервер", "Invalid server URL" : "Неправилна URL на сервер", "Failed to add the public link to your Nextcloud" : "Неуспешно додавање на јавниот линк", - "No expiration date set" : "Не е поставен рок на траење", - "Shared by" : "Споделено од", "File shares" : "Споделување на датотеки", "Downloaded via public link" : "Превемено преку јавен линк", "Downloaded by {email}" : "Преземено од {email}", @@ -244,6 +217,7 @@ OC.L10N.register( "Share {propertyName} saved" : "Зачувано е споделувањето {propertyName}", "Shared" : "Споделен", "Share" : "Сподели", + "Shared by" : "Споделено од", "Shared with" : "Споделено со", "Password created successfully" : "Успрешно е креирана лозинка", "Error generating password from password policy" : "Грешка при генерирање на лозинка од политиката на лозинки", @@ -251,6 +225,12 @@ OC.L10N.register( "Shared with you and {circle} by {owner}" : "Споделено со тебе и {circle} од {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Споделено со тебе и во разговорот {conversation} од {owner}", "Shared with you in a conversation by {owner}" : "Споделено со тебе и во разговорот од {owner}", + "Shares" : "Споделувања", + "Shared with you" : "Споделено со вас", + "Shared with others" : "Споделно со други", + "Shared by link" : "Споделено со линк", + "Deleted shares" : "Избришани споделувања", + "Pending shares" : "Споделувања на чекање", "No entries found in this folder" : "Нема ништо во оваа папка", "Name" : "Име", "Share time" : "Време на споделување", @@ -269,6 +249,23 @@ OC.L10N.register( "Uploaded files:" : "Прикачени датотеки:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Со прикачување на датотеките, се согласувате со %1$sусловите за користење%2$s.", "Add to your Nextcloud" : "Додадете во вашиот Cloud", + "Nothing shared with you yet" : "Ништо не е споделено со вас", + "Files and folders others share with you will show up here" : "Датотеките и папките што другите ги споделуваат со вас ќе се прикажат овде", + "Nothing shared yet" : "Ништо не е споделено", + "Files and folders you share will show up here" : "Датотеките и папките кои ги споделувате ќе се појават тука", + "No shared links" : "Нема споделени врски/линкови", + "Files and folders you share by link will show up here" : "Датотеките и папките кои ги споделувате со линк ќе се појават тука", + "No deleted shares" : "Нема избришани споделувања", + "Shares you deleted will show up here" : "Споделувањата што сте ги избришале ќе се појават овде", + "No pending shares" : "Нема споделувања на чекање", + "Shares you have received but not confirmed will show up here" : "Споделувањата кој сте ги добиле но не сте ги потврдиле ќе се појават овде.", + "No shares" : "Нема споделувања", + "Shares will show up here" : "Споделувањата ќе се појават овде", + "Restore" : "Врати", + "Something happened. Unable to restore the share." : "Нешто се случило. Неможе да се врати споделувањето.", + "Something happened. Unable to accept the share." : "Нешто се случи. Неможам да го прифатам споделувањето.", + "Something happened. Unable to reject the share." : "Нешто се случи. Неможам да го одбијам споделувањето.", + "No expiration date set" : "Не е поставен рок на траење", "One or more of your shares will expire tomorrow" : "Едно или повеќе од твојте споделувања ќе истечат утре", "Error generating password from password_policy" : "Грешка при генерирање на лозинка од политиката на лозинки" }, diff --git a/apps/files_sharing/l10n/mk.json b/apps/files_sharing/l10n/mk.json index c9dc936f976..aecee4815dd 100644 --- a/apps/files_sharing/l10n/mk.json +++ b/apps/files_sharing/l10n/mk.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Споделено со вас", - "Nothing shared with you yet" : "Ништо не е споделено со вас", - "Files and folders others share with you will show up here" : "Датотеките и папките што другите ги споделуваат со вас ќе се прикажат овде", - "Shared with others" : "Споделно со други", - "Nothing shared yet" : "Ништо не е споделено", - "Files and folders you share will show up here" : "Датотеките и папките кои ги споделувате ќе се појават тука", - "Shared by link" : "Споделено со линк", - "No shared links" : "Нема споделени врски/линкови", - "Files and folders you share by link will show up here" : "Датотеките и папките кои ги споделувате со линк ќе се појават тука", - "Deleted shares" : "Избришани споделувања", - "No deleted shares" : "Нема избришани споделувања", - "Shares you deleted will show up here" : "Споделувањата што сте ги избришале ќе се појават овде", - "Pending shares" : "Споделувања на чекање", - "No pending shares" : "Нема споделувања на чекање", - "Shares you have received but not confirmed will show up here" : "Споделувањата кој сте ги добиле но не сте ги потврдиле ќе се појават овде.", - "Shares" : "Споделувања", - "No shares" : "Нема споделувања", - "Shares will show up here" : "Споделувањата ќе се појават овде", - "Restore" : "Врати", - "Restore share" : "Врати споделување", - "Something happened. Unable to restore the share." : "Нешто се случило. Неможе да се врати споделувањето.", - "Accept share" : "Прифати го споделувањето", - "Something happened. Unable to accept the share." : "Нешто се случи. Неможам да го прифатам споделувањето.", - "Reject share" : "Одбиј го споделувањето", - "Something happened. Unable to reject the share." : "Нешто се случи. Неможам да го одбијам споделувањето.", "Waiting…" : "Почекајте...", "error" : "грешка", "finished" : "завршено", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "{remote} не е компатибилен сервер", "Invalid server URL" : "Неправилна URL на сервер", "Failed to add the public link to your Nextcloud" : "Неуспешно додавање на јавниот линк", - "No expiration date set" : "Не е поставен рок на траење", - "Shared by" : "Споделено од", "File shares" : "Споделување на датотеки", "Downloaded via public link" : "Превемено преку јавен линк", "Downloaded by {email}" : "Преземено од {email}", @@ -242,6 +215,7 @@ "Share {propertyName} saved" : "Зачувано е споделувањето {propertyName}", "Shared" : "Споделен", "Share" : "Сподели", + "Shared by" : "Споделено од", "Shared with" : "Споделено со", "Password created successfully" : "Успрешно е креирана лозинка", "Error generating password from password policy" : "Грешка при генерирање на лозинка од политиката на лозинки", @@ -249,6 +223,12 @@ "Shared with you and {circle} by {owner}" : "Споделено со тебе и {circle} од {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Споделено со тебе и во разговорот {conversation} од {owner}", "Shared with you in a conversation by {owner}" : "Споделено со тебе и во разговорот од {owner}", + "Shares" : "Споделувања", + "Shared with you" : "Споделено со вас", + "Shared with others" : "Споделно со други", + "Shared by link" : "Споделено со линк", + "Deleted shares" : "Избришани споделувања", + "Pending shares" : "Споделувања на чекање", "No entries found in this folder" : "Нема ништо во оваа папка", "Name" : "Име", "Share time" : "Време на споделување", @@ -267,6 +247,23 @@ "Uploaded files:" : "Прикачени датотеки:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Со прикачување на датотеките, се согласувате со %1$sусловите за користење%2$s.", "Add to your Nextcloud" : "Додадете во вашиот Cloud", + "Nothing shared with you yet" : "Ништо не е споделено со вас", + "Files and folders others share with you will show up here" : "Датотеките и папките што другите ги споделуваат со вас ќе се прикажат овде", + "Nothing shared yet" : "Ништо не е споделено", + "Files and folders you share will show up here" : "Датотеките и папките кои ги споделувате ќе се појават тука", + "No shared links" : "Нема споделени врски/линкови", + "Files and folders you share by link will show up here" : "Датотеките и папките кои ги споделувате со линк ќе се појават тука", + "No deleted shares" : "Нема избришани споделувања", + "Shares you deleted will show up here" : "Споделувањата што сте ги избришале ќе се појават овде", + "No pending shares" : "Нема споделувања на чекање", + "Shares you have received but not confirmed will show up here" : "Споделувањата кој сте ги добиле но не сте ги потврдиле ќе се појават овде.", + "No shares" : "Нема споделувања", + "Shares will show up here" : "Споделувањата ќе се појават овде", + "Restore" : "Врати", + "Something happened. Unable to restore the share." : "Нешто се случило. Неможе да се врати споделувањето.", + "Something happened. Unable to accept the share." : "Нешто се случи. Неможам да го прифатам споделувањето.", + "Something happened. Unable to reject the share." : "Нешто се случи. Неможам да го одбијам споделувањето.", + "No expiration date set" : "Не е поставен рок на траење", "One or more of your shares will expire tomorrow" : "Едно или повеќе од твојте споделувања ќе истечат утре", "Error generating password from password_policy" : "Грешка при генерирање на лозинка од политиката на лозинки" },"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;" diff --git a/apps/files_sharing/l10n/nb.js b/apps/files_sharing/l10n/nb.js index 5242064b25c..4729b9fdbb9 100644 --- a/apps/files_sharing/l10n/nb.js +++ b/apps/files_sharing/l10n/nb.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Delt med deg", - "Nothing shared with you yet" : "Ingenting er delt med deg enda", - "Files and folders others share with you will show up here" : "Filer og mapper som andre deler med deg vil bli vist her", - "Shared with others" : "Delt med andre", - "Nothing shared yet" : "Ingenting er delt ennå", - "Files and folders you share will show up here" : "Filer og mapper som du deler vil bli vist her", - "Shared by link" : "Delt med lenke", - "No shared links" : "Ingen delte lenker", - "Files and folders you share by link will show up here" : "Filer og mapper som du deler med lenke vil bli vist her", - "Deleted shares" : "Slettede delinger", - "No deleted shares" : "Ingen slettede delinger", - "Shares you deleted will show up here" : "Delinger du har slettet vil vises her", - "Pending shares" : "Ventende delinger", - "No pending shares" : "Ingen ventende delinger", - "Shares you have received but not confirmed will show up here" : "Delinger du har mottatt men ikke bekreftet vil vises her", - "Shares" : "Delinger", - "No shares" : "Ingen delinger", - "Shares will show up here" : "Delinger vil vises her", - "Restore" : "Gjenopprett", - "Restore share" : "Gjenopprett deling", - "Something happened. Unable to restore the share." : "Noe skjedde. Ikke mulig å gjenopprette delingen.", - "Accept share" : "Aksepter deling", - "Something happened. Unable to accept the share." : "Noe skjedde. Ikke mulig å motta delingen.", - "Reject share" : "Avvis deling", - "Something happened. Unable to reject the share." : "Noe skjedde. Ikke mulig å avvise delingen.", "Waiting…" : "Venter...", "error" : "feil", "finished" : "fullført", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Ingen kompatibel server ble funnet på {remote}", "Invalid server URL" : "Ugyldig server adresse", "Failed to add the public link to your Nextcloud" : "Feil oppsto under oppretting av offentlig lenke til din Nextcloud", - "No expiration date set" : "Ingen utløpsdato er satt", - "Shared by" : "Delt av", "File shares" : "Fildelinger", "Downloaded via public link" : "Nedlastet via offentlig lenke", "Downloaded by {email}" : "Lastet ned av {email}", @@ -245,6 +218,7 @@ OC.L10N.register( "Share {propertyName} saved" : "Deling {propertyName} er lagret", "Shared" : "Delt", "Share" : "Del", + "Shared by" : "Delt av", "Shared with" : "Delt med", "Password created successfully" : "Passord opprettet", "Error generating password from password policy" : "Feil under generering av passord fra passordregler", @@ -252,6 +226,12 @@ OC.L10N.register( "Shared with you and {circle} by {owner}" : "Delt med deg og {circle} av {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Delt med deg og samtalen {conversation} av {owner}", "Shared with you in a conversation by {owner}" : "Delt md deg i samtale med {owner}", + "Shares" : "Delinger", + "Shared with you" : "Delt med deg", + "Shared with others" : "Delt med andre", + "Shared by link" : "Delt med lenke", + "Deleted shares" : "Slettede delinger", + "Pending shares" : "Ventende delinger", "No entries found in this folder" : "Ingen oppføringer funnet i denne mappen", "Name" : "Navn", "Share time" : "Delingstidspunkt", @@ -270,6 +250,23 @@ OC.L10N.register( "Uploaded files:" : "Opplastede filer:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Ved å laste opp filer godtar du %1$stjenestevilkårene%2$s.", "Add to your Nextcloud" : "Legg til i din Nextcloud", + "Nothing shared with you yet" : "Ingenting er delt med deg enda", + "Files and folders others share with you will show up here" : "Filer og mapper som andre deler med deg vil bli vist her", + "Nothing shared yet" : "Ingenting er delt ennå", + "Files and folders you share will show up here" : "Filer og mapper som du deler vil bli vist her", + "No shared links" : "Ingen delte lenker", + "Files and folders you share by link will show up here" : "Filer og mapper som du deler med lenke vil bli vist her", + "No deleted shares" : "Ingen slettede delinger", + "Shares you deleted will show up here" : "Delinger du har slettet vil vises her", + "No pending shares" : "Ingen ventende delinger", + "Shares you have received but not confirmed will show up here" : "Delinger du har mottatt men ikke bekreftet vil vises her", + "No shares" : "Ingen delinger", + "Shares will show up here" : "Delinger vil vises her", + "Restore" : "Gjenopprett", + "Something happened. Unable to restore the share." : "Noe skjedde. Ikke mulig å gjenopprette delingen.", + "Something happened. Unable to accept the share." : "Noe skjedde. Ikke mulig å motta delingen.", + "Something happened. Unable to reject the share." : "Noe skjedde. Ikke mulig å avvise delingen.", + "No expiration date set" : "Ingen utløpsdato er satt", "One or more of your shares will expire tomorrow" : "En eller flere av delingene dine utløper i morgen", "Error generating password from password_policy" : "Feil under generering av passord fra passordregler" }, diff --git a/apps/files_sharing/l10n/nb.json b/apps/files_sharing/l10n/nb.json index eec641c70aa..0ce3c327df3 100644 --- a/apps/files_sharing/l10n/nb.json +++ b/apps/files_sharing/l10n/nb.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Delt med deg", - "Nothing shared with you yet" : "Ingenting er delt med deg enda", - "Files and folders others share with you will show up here" : "Filer og mapper som andre deler med deg vil bli vist her", - "Shared with others" : "Delt med andre", - "Nothing shared yet" : "Ingenting er delt ennå", - "Files and folders you share will show up here" : "Filer og mapper som du deler vil bli vist her", - "Shared by link" : "Delt med lenke", - "No shared links" : "Ingen delte lenker", - "Files and folders you share by link will show up here" : "Filer og mapper som du deler med lenke vil bli vist her", - "Deleted shares" : "Slettede delinger", - "No deleted shares" : "Ingen slettede delinger", - "Shares you deleted will show up here" : "Delinger du har slettet vil vises her", - "Pending shares" : "Ventende delinger", - "No pending shares" : "Ingen ventende delinger", - "Shares you have received but not confirmed will show up here" : "Delinger du har mottatt men ikke bekreftet vil vises her", - "Shares" : "Delinger", - "No shares" : "Ingen delinger", - "Shares will show up here" : "Delinger vil vises her", - "Restore" : "Gjenopprett", - "Restore share" : "Gjenopprett deling", - "Something happened. Unable to restore the share." : "Noe skjedde. Ikke mulig å gjenopprette delingen.", - "Accept share" : "Aksepter deling", - "Something happened. Unable to accept the share." : "Noe skjedde. Ikke mulig å motta delingen.", - "Reject share" : "Avvis deling", - "Something happened. Unable to reject the share." : "Noe skjedde. Ikke mulig å avvise delingen.", "Waiting…" : "Venter...", "error" : "feil", "finished" : "fullført", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "Ingen kompatibel server ble funnet på {remote}", "Invalid server URL" : "Ugyldig server adresse", "Failed to add the public link to your Nextcloud" : "Feil oppsto under oppretting av offentlig lenke til din Nextcloud", - "No expiration date set" : "Ingen utløpsdato er satt", - "Shared by" : "Delt av", "File shares" : "Fildelinger", "Downloaded via public link" : "Nedlastet via offentlig lenke", "Downloaded by {email}" : "Lastet ned av {email}", @@ -243,6 +216,7 @@ "Share {propertyName} saved" : "Deling {propertyName} er lagret", "Shared" : "Delt", "Share" : "Del", + "Shared by" : "Delt av", "Shared with" : "Delt med", "Password created successfully" : "Passord opprettet", "Error generating password from password policy" : "Feil under generering av passord fra passordregler", @@ -250,6 +224,12 @@ "Shared with you and {circle} by {owner}" : "Delt med deg og {circle} av {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Delt med deg og samtalen {conversation} av {owner}", "Shared with you in a conversation by {owner}" : "Delt md deg i samtale med {owner}", + "Shares" : "Delinger", + "Shared with you" : "Delt med deg", + "Shared with others" : "Delt med andre", + "Shared by link" : "Delt med lenke", + "Deleted shares" : "Slettede delinger", + "Pending shares" : "Ventende delinger", "No entries found in this folder" : "Ingen oppføringer funnet i denne mappen", "Name" : "Navn", "Share time" : "Delingstidspunkt", @@ -268,6 +248,23 @@ "Uploaded files:" : "Opplastede filer:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Ved å laste opp filer godtar du %1$stjenestevilkårene%2$s.", "Add to your Nextcloud" : "Legg til i din Nextcloud", + "Nothing shared with you yet" : "Ingenting er delt med deg enda", + "Files and folders others share with you will show up here" : "Filer og mapper som andre deler med deg vil bli vist her", + "Nothing shared yet" : "Ingenting er delt ennå", + "Files and folders you share will show up here" : "Filer og mapper som du deler vil bli vist her", + "No shared links" : "Ingen delte lenker", + "Files and folders you share by link will show up here" : "Filer og mapper som du deler med lenke vil bli vist her", + "No deleted shares" : "Ingen slettede delinger", + "Shares you deleted will show up here" : "Delinger du har slettet vil vises her", + "No pending shares" : "Ingen ventende delinger", + "Shares you have received but not confirmed will show up here" : "Delinger du har mottatt men ikke bekreftet vil vises her", + "No shares" : "Ingen delinger", + "Shares will show up here" : "Delinger vil vises her", + "Restore" : "Gjenopprett", + "Something happened. Unable to restore the share." : "Noe skjedde. Ikke mulig å gjenopprette delingen.", + "Something happened. Unable to accept the share." : "Noe skjedde. Ikke mulig å motta delingen.", + "Something happened. Unable to reject the share." : "Noe skjedde. Ikke mulig å avvise delingen.", + "No expiration date set" : "Ingen utløpsdato er satt", "One or more of your shares will expire tomorrow" : "En eller flere av delingene dine utløper i morgen", "Error generating password from password_policy" : "Feil under generering av passord fra passordregler" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files_sharing/l10n/nl.js b/apps/files_sharing/l10n/nl.js index 7cffc0309dd..052da6b106b 100644 --- a/apps/files_sharing/l10n/nl.js +++ b/apps/files_sharing/l10n/nl.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Met je gedeeld", - "Nothing shared with you yet" : "Nog niets met je gedeeld", - "Files and folders others share with you will show up here" : "Bestanden en mappen die anderen met je delen, worden hier getoond", - "Shared with others" : "Gedeeld met anderen", - "Nothing shared yet" : "Nog niets gedeeld", - "Files and folders you share will show up here" : "Bestanden en mappen die je deelt, worden hier getoond", - "Shared by link" : "Gedeeld via een link", - "No shared links" : "Geen gedeelde links", - "Files and folders you share by link will show up here" : "Bestanden en mappen die je via links deelt, worden hier getoond", - "Deleted shares" : "Verwijderde shares", - "No deleted shares" : "Geen verwijderde shares", - "Shares you deleted will show up here" : "Shares die je verwijderde, worden hier getoond", - "Pending shares" : "Deellinks in behandeling", - "No pending shares" : "Geen deellinks in behandeling", - "Shares you have received but not confirmed will show up here" : "Hier staan de ontvangen maar nog niet geaccepteerde deellinks", - "Shares" : "Shares", - "No shares" : "Geen shares", - "Shares will show up here" : "Shares worden hier getoond", - "Restore" : "Herstellen", - "Restore share" : "Herstel share", - "Something happened. Unable to restore the share." : "Er is iets gebeurd. Kan de share niet herstellen.", - "Accept share" : "Accepteer deellink", - "Something happened. Unable to accept the share." : "Er is iets gebeurd. Kan de deellink niet accepteren.", - "Reject share" : "Weiger deellink", - "Something happened. Unable to reject the share." : "Er is iets gebeurd. Kan de deellink niet weigeren.", "Waiting…" : "Wachten ...", "error" : "fout", "finished" : "klaar", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Geen geschikte server gevonden op {remote}", "Invalid server URL" : "Ongeldig server URL", "Failed to add the public link to your Nextcloud" : "Kon de openbare link niet aan je Nextcloud toevoegen", - "No expiration date set" : "Geen vervaldatum ingesteld", - "Shared by" : "Gedeeld door", "File shares" : "File shares", "Downloaded via public link" : "Gedownload via een openbare link", "Downloaded by {email}" : "Gedownload via {email}", @@ -235,11 +208,18 @@ OC.L10N.register( "Folder \"{path}\" has been unshared" : "Map \"{path}\" is niet meer gedeeld", "Shared" : "Gedeeld", "Share" : "Delen", + "Shared by" : "Gedeeld door", "Shared with" : "Gedeeld met", "Shared with you and the group {group} by {owner}" : "Met jou en de groep {group} gedeeld door {owner}", "Shared with you and {circle} by {owner}" : "Gedeeld met jou en {circle} door {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Gedeeld met jou en gesprek {conversation} door {owner}", "Shared with you in a conversation by {owner}" : "Met jou in een gesprek gedeeld door {owner}", + "Shares" : "Shares", + "Shared with you" : "Met je gedeeld", + "Shared with others" : "Gedeeld met anderen", + "Shared by link" : "Gedeeld via een link", + "Deleted shares" : "Verwijderde shares", + "Pending shares" : "Deellinks in behandeling", "No entries found in this folder" : "Niets gevonden in deze map", "Name" : "Naam", "Share time" : "Deel tijd", @@ -257,6 +237,23 @@ OC.L10N.register( "Uploaded files:" : "Geüploade bestanden", "By uploading files, you agree to the %1$sterms of service%2$s." : "Door het uploaden van bestanden stem je in met de %1$sgebruiksvoorwaarden%2$s.", "Add to your Nextcloud" : "Toevoegen aan je Nextcloud", + "Nothing shared with you yet" : "Nog niets met je gedeeld", + "Files and folders others share with you will show up here" : "Bestanden en mappen die anderen met je delen, worden hier getoond", + "Nothing shared yet" : "Nog niets gedeeld", + "Files and folders you share will show up here" : "Bestanden en mappen die je deelt, worden hier getoond", + "No shared links" : "Geen gedeelde links", + "Files and folders you share by link will show up here" : "Bestanden en mappen die je via links deelt, worden hier getoond", + "No deleted shares" : "Geen verwijderde shares", + "Shares you deleted will show up here" : "Shares die je verwijderde, worden hier getoond", + "No pending shares" : "Geen deellinks in behandeling", + "Shares you have received but not confirmed will show up here" : "Hier staan de ontvangen maar nog niet geaccepteerde deellinks", + "No shares" : "Geen shares", + "Shares will show up here" : "Shares worden hier getoond", + "Restore" : "Herstellen", + "Something happened. Unable to restore the share." : "Er is iets gebeurd. Kan de share niet herstellen.", + "Something happened. Unable to accept the share." : "Er is iets gebeurd. Kan de deellink niet accepteren.", + "Something happened. Unable to reject the share." : "Er is iets gebeurd. Kan de deellink niet weigeren.", + "No expiration date set" : "Geen vervaldatum ingesteld", "One or more of your shares will expire tomorrow" : "Één of meer van je shares zal morgen vervallen" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/nl.json b/apps/files_sharing/l10n/nl.json index f0b7547c3d2..5282bfedbd3 100644 --- a/apps/files_sharing/l10n/nl.json +++ b/apps/files_sharing/l10n/nl.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Met je gedeeld", - "Nothing shared with you yet" : "Nog niets met je gedeeld", - "Files and folders others share with you will show up here" : "Bestanden en mappen die anderen met je delen, worden hier getoond", - "Shared with others" : "Gedeeld met anderen", - "Nothing shared yet" : "Nog niets gedeeld", - "Files and folders you share will show up here" : "Bestanden en mappen die je deelt, worden hier getoond", - "Shared by link" : "Gedeeld via een link", - "No shared links" : "Geen gedeelde links", - "Files and folders you share by link will show up here" : "Bestanden en mappen die je via links deelt, worden hier getoond", - "Deleted shares" : "Verwijderde shares", - "No deleted shares" : "Geen verwijderde shares", - "Shares you deleted will show up here" : "Shares die je verwijderde, worden hier getoond", - "Pending shares" : "Deellinks in behandeling", - "No pending shares" : "Geen deellinks in behandeling", - "Shares you have received but not confirmed will show up here" : "Hier staan de ontvangen maar nog niet geaccepteerde deellinks", - "Shares" : "Shares", - "No shares" : "Geen shares", - "Shares will show up here" : "Shares worden hier getoond", - "Restore" : "Herstellen", - "Restore share" : "Herstel share", - "Something happened. Unable to restore the share." : "Er is iets gebeurd. Kan de share niet herstellen.", - "Accept share" : "Accepteer deellink", - "Something happened. Unable to accept the share." : "Er is iets gebeurd. Kan de deellink niet accepteren.", - "Reject share" : "Weiger deellink", - "Something happened. Unable to reject the share." : "Er is iets gebeurd. Kan de deellink niet weigeren.", "Waiting…" : "Wachten ...", "error" : "fout", "finished" : "klaar", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "Geen geschikte server gevonden op {remote}", "Invalid server URL" : "Ongeldig server URL", "Failed to add the public link to your Nextcloud" : "Kon de openbare link niet aan je Nextcloud toevoegen", - "No expiration date set" : "Geen vervaldatum ingesteld", - "Shared by" : "Gedeeld door", "File shares" : "File shares", "Downloaded via public link" : "Gedownload via een openbare link", "Downloaded by {email}" : "Gedownload via {email}", @@ -233,11 +206,18 @@ "Folder \"{path}\" has been unshared" : "Map \"{path}\" is niet meer gedeeld", "Shared" : "Gedeeld", "Share" : "Delen", + "Shared by" : "Gedeeld door", "Shared with" : "Gedeeld met", "Shared with you and the group {group} by {owner}" : "Met jou en de groep {group} gedeeld door {owner}", "Shared with you and {circle} by {owner}" : "Gedeeld met jou en {circle} door {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Gedeeld met jou en gesprek {conversation} door {owner}", "Shared with you in a conversation by {owner}" : "Met jou in een gesprek gedeeld door {owner}", + "Shares" : "Shares", + "Shared with you" : "Met je gedeeld", + "Shared with others" : "Gedeeld met anderen", + "Shared by link" : "Gedeeld via een link", + "Deleted shares" : "Verwijderde shares", + "Pending shares" : "Deellinks in behandeling", "No entries found in this folder" : "Niets gevonden in deze map", "Name" : "Naam", "Share time" : "Deel tijd", @@ -255,6 +235,23 @@ "Uploaded files:" : "Geüploade bestanden", "By uploading files, you agree to the %1$sterms of service%2$s." : "Door het uploaden van bestanden stem je in met de %1$sgebruiksvoorwaarden%2$s.", "Add to your Nextcloud" : "Toevoegen aan je Nextcloud", + "Nothing shared with you yet" : "Nog niets met je gedeeld", + "Files and folders others share with you will show up here" : "Bestanden en mappen die anderen met je delen, worden hier getoond", + "Nothing shared yet" : "Nog niets gedeeld", + "Files and folders you share will show up here" : "Bestanden en mappen die je deelt, worden hier getoond", + "No shared links" : "Geen gedeelde links", + "Files and folders you share by link will show up here" : "Bestanden en mappen die je via links deelt, worden hier getoond", + "No deleted shares" : "Geen verwijderde shares", + "Shares you deleted will show up here" : "Shares die je verwijderde, worden hier getoond", + "No pending shares" : "Geen deellinks in behandeling", + "Shares you have received but not confirmed will show up here" : "Hier staan de ontvangen maar nog niet geaccepteerde deellinks", + "No shares" : "Geen shares", + "Shares will show up here" : "Shares worden hier getoond", + "Restore" : "Herstellen", + "Something happened. Unable to restore the share." : "Er is iets gebeurd. Kan de share niet herstellen.", + "Something happened. Unable to accept the share." : "Er is iets gebeurd. Kan de deellink niet accepteren.", + "Something happened. Unable to reject the share." : "Er is iets gebeurd. Kan de deellink niet weigeren.", + "No expiration date set" : "Geen vervaldatum ingesteld", "One or more of your shares will expire tomorrow" : "Één of meer van je shares zal morgen vervallen" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/pl.js b/apps/files_sharing/l10n/pl.js index e334547865b..ce4ed91e807 100644 --- a/apps/files_sharing/l10n/pl.js +++ b/apps/files_sharing/l10n/pl.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Udostępnione Tobie", - "Nothing shared with you yet" : "Nie masz jeszcze nic udostępnionego", - "Files and folders others share with you will show up here" : "Tutaj pokażą się udostępnione pliki i katalogi przez innych", - "Shared with others" : "Udostępnione innym", - "Nothing shared yet" : "Jeszcze nic nie udostępniłeś", - "Files and folders you share will show up here" : "Tutaj pokażą się pliki i katalogi, które udostępnisz", - "Shared by link" : "Udostępnione linkiem", - "No shared links" : "Brak udostępnionych linków", - "Files and folders you share by link will show up here" : "Tutaj pokażą się pliki i katalogi, które udostępnisz linkiem", - "Deleted shares" : "Usunięte udostępnienia", - "No deleted shares" : "Brak usuniętych udostępnień", - "Shares you deleted will show up here" : "Tutaj pojawią się usunięte udostępnienia", - "Pending shares" : "Oczekujące udostępnienia", - "No pending shares" : "Brak oczekujących udostępnień", - "Shares you have received but not confirmed will show up here" : "Tutaj pojawią się niepotwierdzone udostępnienia", - "Shares" : "Udostępnienia", - "No shares" : "Brak udostępnień", - "Shares will show up here" : "Tutaj pojawią się udostępnienia", - "Restore" : "Przywróć", - "Restore share" : "Przywróć udostępnienia", - "Something happened. Unable to restore the share." : "Coś nie tak. Nie można przywrócić udostępnienia", - "Accept share" : "Akceptacja udostępnienia", - "Something happened. Unable to accept the share." : "Coś się stało. Nie można zaakceptować udostępnienia.", - "Reject share" : "Odrzuć udostępnienie", - "Something happened. Unable to reject the share." : "Coś się stało. Nie można odrzucić udostępnienia.", "Waiting…" : "Oczekiwanie…", "error" : "błąd", "finished" : "zakończone", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Nie znaleziono kompatybilnego serwera na {remote}", "Invalid server URL" : "Nieprawidłowy adres URL serwera", "Failed to add the public link to your Nextcloud" : "Nie udało się dodać linku publicznego do Nextcloud", - "No expiration date set" : "Nie ustawiono daty wygaśnięcia", - "Shared by" : "Udostępnione przez", "File shares" : "Udostępniony plik", "Downloaded via public link" : "Pobrano przez link publiczny", "Downloaded by {email}" : "Pobrano przez {email}", @@ -247,6 +220,7 @@ OC.L10N.register( "Share {propertyName} saved" : "Zapisano udostępnienie {propertyName}", "Shared" : "Udostępniono", "Share" : "Udostępnij", + "Shared by" : "Udostępnione przez", "Shared with" : "Udostępnione", "Password created successfully" : "Hasło utworzone pomyślnie", "Error generating password from password policy" : "Błąd generowania hasła z zasad haseł", @@ -254,6 +228,12 @@ OC.L10N.register( "Shared with you and {circle} by {owner}" : "Udostępnione Tobie i {circle} przez {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Udostępnione Tobie i w rozmowie {conversation} przez {owner}", "Shared with you in a conversation by {owner}" : "Udostępnione Tobie w rozmowie przez {owner}", + "Shares" : "Udostępnienia", + "Shared with you" : "Udostępnione Tobie", + "Shared with others" : "Udostępnione innym", + "Shared by link" : "Udostępnione linkiem", + "Deleted shares" : "Usunięte udostępnienia", + "Pending shares" : "Oczekujące udostępnienia", "No entries found in this folder" : "Brak wpisów w tym katalogu", "Name" : "Nazwa", "Share time" : "Czas udostępnienia", @@ -272,6 +252,23 @@ OC.L10N.register( "Uploaded files:" : "Wysłane pliki:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Wysyłając pliki, zgadzasz się na %1$swarunki korzystania z usługi%2$s.", "Add to your Nextcloud" : "Dodaj do swojego Nextcloud", + "Nothing shared with you yet" : "Nie masz jeszcze nic udostępnionego", + "Files and folders others share with you will show up here" : "Tutaj pokażą się udostępnione pliki i katalogi przez innych", + "Nothing shared yet" : "Jeszcze nic nie udostępniłeś", + "Files and folders you share will show up here" : "Tutaj pokażą się pliki i katalogi, które udostępnisz", + "No shared links" : "Brak udostępnionych linków", + "Files and folders you share by link will show up here" : "Tutaj pokażą się pliki i katalogi, które udostępnisz linkiem", + "No deleted shares" : "Brak usuniętych udostępnień", + "Shares you deleted will show up here" : "Tutaj pojawią się usunięte udostępnienia", + "No pending shares" : "Brak oczekujących udostępnień", + "Shares you have received but not confirmed will show up here" : "Tutaj pojawią się niepotwierdzone udostępnienia", + "No shares" : "Brak udostępnień", + "Shares will show up here" : "Tutaj pojawią się udostępnienia", + "Restore" : "Przywróć", + "Something happened. Unable to restore the share." : "Coś nie tak. Nie można przywrócić udostępnienia", + "Something happened. Unable to accept the share." : "Coś się stało. Nie można zaakceptować udostępnienia.", + "Something happened. Unable to reject the share." : "Coś się stało. Nie można odrzucić udostępnienia.", + "No expiration date set" : "Nie ustawiono daty wygaśnięcia", "Sharing %s failed because the back end does not support sciencemesh shares" : "Udostępnienie %s nie powiodło się, ponieważ oprogramowanie nie obsługuje udostępnień Science Mesh", "One or more of your shares will expire tomorrow" : "Co najmniej jeden z Twoich udostępnień wygaśnie jutro", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/pl.json b/apps/files_sharing/l10n/pl.json index 1ba9bf495ca..c65eee0b821 100644 --- a/apps/files_sharing/l10n/pl.json +++ b/apps/files_sharing/l10n/pl.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Udostępnione Tobie", - "Nothing shared with you yet" : "Nie masz jeszcze nic udostępnionego", - "Files and folders others share with you will show up here" : "Tutaj pokażą się udostępnione pliki i katalogi przez innych", - "Shared with others" : "Udostępnione innym", - "Nothing shared yet" : "Jeszcze nic nie udostępniłeś", - "Files and folders you share will show up here" : "Tutaj pokażą się pliki i katalogi, które udostępnisz", - "Shared by link" : "Udostępnione linkiem", - "No shared links" : "Brak udostępnionych linków", - "Files and folders you share by link will show up here" : "Tutaj pokażą się pliki i katalogi, które udostępnisz linkiem", - "Deleted shares" : "Usunięte udostępnienia", - "No deleted shares" : "Brak usuniętych udostępnień", - "Shares you deleted will show up here" : "Tutaj pojawią się usunięte udostępnienia", - "Pending shares" : "Oczekujące udostępnienia", - "No pending shares" : "Brak oczekujących udostępnień", - "Shares you have received but not confirmed will show up here" : "Tutaj pojawią się niepotwierdzone udostępnienia", - "Shares" : "Udostępnienia", - "No shares" : "Brak udostępnień", - "Shares will show up here" : "Tutaj pojawią się udostępnienia", - "Restore" : "Przywróć", - "Restore share" : "Przywróć udostępnienia", - "Something happened. Unable to restore the share." : "Coś nie tak. Nie można przywrócić udostępnienia", - "Accept share" : "Akceptacja udostępnienia", - "Something happened. Unable to accept the share." : "Coś się stało. Nie można zaakceptować udostępnienia.", - "Reject share" : "Odrzuć udostępnienie", - "Something happened. Unable to reject the share." : "Coś się stało. Nie można odrzucić udostępnienia.", "Waiting…" : "Oczekiwanie…", "error" : "błąd", "finished" : "zakończone", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "Nie znaleziono kompatybilnego serwera na {remote}", "Invalid server URL" : "Nieprawidłowy adres URL serwera", "Failed to add the public link to your Nextcloud" : "Nie udało się dodać linku publicznego do Nextcloud", - "No expiration date set" : "Nie ustawiono daty wygaśnięcia", - "Shared by" : "Udostępnione przez", "File shares" : "Udostępniony plik", "Downloaded via public link" : "Pobrano przez link publiczny", "Downloaded by {email}" : "Pobrano przez {email}", @@ -245,6 +218,7 @@ "Share {propertyName} saved" : "Zapisano udostępnienie {propertyName}", "Shared" : "Udostępniono", "Share" : "Udostępnij", + "Shared by" : "Udostępnione przez", "Shared with" : "Udostępnione", "Password created successfully" : "Hasło utworzone pomyślnie", "Error generating password from password policy" : "Błąd generowania hasła z zasad haseł", @@ -252,6 +226,12 @@ "Shared with you and {circle} by {owner}" : "Udostępnione Tobie i {circle} przez {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Udostępnione Tobie i w rozmowie {conversation} przez {owner}", "Shared with you in a conversation by {owner}" : "Udostępnione Tobie w rozmowie przez {owner}", + "Shares" : "Udostępnienia", + "Shared with you" : "Udostępnione Tobie", + "Shared with others" : "Udostępnione innym", + "Shared by link" : "Udostępnione linkiem", + "Deleted shares" : "Usunięte udostępnienia", + "Pending shares" : "Oczekujące udostępnienia", "No entries found in this folder" : "Brak wpisów w tym katalogu", "Name" : "Nazwa", "Share time" : "Czas udostępnienia", @@ -270,6 +250,23 @@ "Uploaded files:" : "Wysłane pliki:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Wysyłając pliki, zgadzasz się na %1$swarunki korzystania z usługi%2$s.", "Add to your Nextcloud" : "Dodaj do swojego Nextcloud", + "Nothing shared with you yet" : "Nie masz jeszcze nic udostępnionego", + "Files and folders others share with you will show up here" : "Tutaj pokażą się udostępnione pliki i katalogi przez innych", + "Nothing shared yet" : "Jeszcze nic nie udostępniłeś", + "Files and folders you share will show up here" : "Tutaj pokażą się pliki i katalogi, które udostępnisz", + "No shared links" : "Brak udostępnionych linków", + "Files and folders you share by link will show up here" : "Tutaj pokażą się pliki i katalogi, które udostępnisz linkiem", + "No deleted shares" : "Brak usuniętych udostępnień", + "Shares you deleted will show up here" : "Tutaj pojawią się usunięte udostępnienia", + "No pending shares" : "Brak oczekujących udostępnień", + "Shares you have received but not confirmed will show up here" : "Tutaj pojawią się niepotwierdzone udostępnienia", + "No shares" : "Brak udostępnień", + "Shares will show up here" : "Tutaj pojawią się udostępnienia", + "Restore" : "Przywróć", + "Something happened. Unable to restore the share." : "Coś nie tak. Nie można przywrócić udostępnienia", + "Something happened. Unable to accept the share." : "Coś się stało. Nie można zaakceptować udostępnienia.", + "Something happened. Unable to reject the share." : "Coś się stało. Nie można odrzucić udostępnienia.", + "No expiration date set" : "Nie ustawiono daty wygaśnięcia", "Sharing %s failed because the back end does not support sciencemesh shares" : "Udostępnienie %s nie powiodło się, ponieważ oprogramowanie nie obsługuje udostępnień Science Mesh", "One or more of your shares will expire tomorrow" : "Co najmniej jeden z Twoich udostępnień wygaśnie jutro", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/pt_BR.js b/apps/files_sharing/l10n/pt_BR.js index e3eafddb3e7..c9e201a42ac 100644 --- a/apps/files_sharing/l10n/pt_BR.js +++ b/apps/files_sharing/l10n/pt_BR.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Compartilhado com você", - "Nothing shared with you yet" : "Nada foi compartilhado!", - "Files and folders others share with you will show up here" : "Arquivos e pastas que outras pessoas compartilham com você serão exibidos aqui.", - "Shared with others" : "Compartilhado com outros", - "Nothing shared yet" : "Você ainda não compartilhou nada!", - "Files and folders you share will show up here" : "Arquivos e pastas que você compartilhar serão exibidos aqui.", - "Shared by link" : "Compartilhado por link", - "No shared links" : "Nenhum link compartilhado!", - "Files and folders you share by link will show up here" : "Arquivos e pastas que você compartilha por link serão exibidos aqui", - "Deleted shares" : "Compartilhamentos apagados", - "No deleted shares" : "Não há compartilhamentos apagados", - "Shares you deleted will show up here" : "Compartilhamentos apagados aparecem aqui", - "Pending shares" : "Compartilhamentos pendentes", - "No pending shares" : "Não há compartilhamentos pendentes", - "Shares you have received but not confirmed will show up here" : "Compartilhamentos que você recebeu, mas ainda não confirmou, serão exibidos aqui", - "Shares" : "Compartilhamentos", - "No shares" : "Sem compartilhamentos", - "Shares will show up here" : "Compartilhamentos serão mostrados aqui", - "Restore" : "Restaurar", - "Restore share" : "Restaurar compartilhamento", - "Something happened. Unable to restore the share." : "Algo aconteceu. Não foi possível restaurar o compartilhamento.", - "Accept share" : "Aceitar compartilhamento", - "Something happened. Unable to accept the share." : "Ocorreu um erro. Não foi possível aceitar o compartilhamento.", - "Reject share" : "Recusar compartilhamentos", - "Something happened. Unable to reject the share." : "Ocorreu um erro. Não foi possível recusar o compartilhamento.", "Waiting…" : "Aguarde...", "error" : "erro", "finished" : "terminou", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Nenhum servidor compativel encontrado em {remote}", "Invalid server URL" : "URL do servidor inválida", "Failed to add the public link to your Nextcloud" : "Ocorreu uma falha ao adicionar o link público ao seu Nextcloud", - "No expiration date set" : "Nenhuma data de expiração definida", - "Shared by" : "Compartilhado por", "File shares" : "Compartilhamentos de arquivos", "Downloaded via public link" : "Baixado via link público", "Downloaded by {email}" : "Baixado por {email}", @@ -247,6 +220,7 @@ OC.L10N.register( "Share {propertyName} saved" : "Compartilhe {propertyName} salvo", "Shared" : "Compartilhado", "Share" : "Compartilhar", + "Shared by" : "Compartilhado por", "Shared with" : "Compartilhado com", "Password created successfully" : "Senha criada com sucesso", "Error generating password from password policy" : "Erro ao gerar senha da política de senha", @@ -254,6 +228,12 @@ OC.L10N.register( "Shared with you and {circle} by {owner}" : "Compartilhado com você e {circle} por {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Compartilhado com você e a conversa {conversation} por {owner}", "Shared with you in a conversation by {owner}" : "Compartilhado com você em uma conversa por {owner}", + "Shares" : "Compartilhamentos", + "Shared with you" : "Compartilhado com você", + "Shared with others" : "Compartilhado com outros", + "Shared by link" : "Compartilhado por link", + "Deleted shares" : "Compartilhamentos apagados", + "Pending shares" : "Compartilhamentos pendentes", "No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta", "Name" : "Nome", "Share time" : "Compartilhamento", @@ -272,6 +252,23 @@ OC.L10N.register( "Uploaded files:" : "Arquivos enviados:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Ao enviar arquivos, você concorda com os %1$stermos de serviço%2$s.", "Add to your Nextcloud" : "Adicionar ao seu Nextcloud", + "Nothing shared with you yet" : "Nada foi compartilhado!", + "Files and folders others share with you will show up here" : "Arquivos e pastas que outras pessoas compartilham com você serão exibidos aqui.", + "Nothing shared yet" : "Você ainda não compartilhou nada!", + "Files and folders you share will show up here" : "Arquivos e pastas que você compartilhar serão exibidos aqui.", + "No shared links" : "Nenhum link compartilhado!", + "Files and folders you share by link will show up here" : "Arquivos e pastas que você compartilha por link serão exibidos aqui", + "No deleted shares" : "Não há compartilhamentos apagados", + "Shares you deleted will show up here" : "Compartilhamentos apagados aparecem aqui", + "No pending shares" : "Não há compartilhamentos pendentes", + "Shares you have received but not confirmed will show up here" : "Compartilhamentos que você recebeu, mas ainda não confirmou, serão exibidos aqui", + "No shares" : "Sem compartilhamentos", + "Shares will show up here" : "Compartilhamentos serão mostrados aqui", + "Restore" : "Restaurar", + "Something happened. Unable to restore the share." : "Algo aconteceu. Não foi possível restaurar o compartilhamento.", + "Something happened. Unable to accept the share." : "Ocorreu um erro. Não foi possível aceitar o compartilhamento.", + "Something happened. Unable to reject the share." : "Ocorreu um erro. Não foi possível recusar o compartilhamento.", + "No expiration date set" : "Nenhuma data de expiração definida", "Sharing %s failed because the back end does not support sciencemesh shares" : "Sharing %s failed because the back end does not support sciencemesh shares", "One or more of your shares will expire tomorrow" : "Um ou mais de seus compartilhamentos irão expirar amanhã", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/pt_BR.json b/apps/files_sharing/l10n/pt_BR.json index 7c852c5400d..2db21f0aedd 100644 --- a/apps/files_sharing/l10n/pt_BR.json +++ b/apps/files_sharing/l10n/pt_BR.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Compartilhado com você", - "Nothing shared with you yet" : "Nada foi compartilhado!", - "Files and folders others share with you will show up here" : "Arquivos e pastas que outras pessoas compartilham com você serão exibidos aqui.", - "Shared with others" : "Compartilhado com outros", - "Nothing shared yet" : "Você ainda não compartilhou nada!", - "Files and folders you share will show up here" : "Arquivos e pastas que você compartilhar serão exibidos aqui.", - "Shared by link" : "Compartilhado por link", - "No shared links" : "Nenhum link compartilhado!", - "Files and folders you share by link will show up here" : "Arquivos e pastas que você compartilha por link serão exibidos aqui", - "Deleted shares" : "Compartilhamentos apagados", - "No deleted shares" : "Não há compartilhamentos apagados", - "Shares you deleted will show up here" : "Compartilhamentos apagados aparecem aqui", - "Pending shares" : "Compartilhamentos pendentes", - "No pending shares" : "Não há compartilhamentos pendentes", - "Shares you have received but not confirmed will show up here" : "Compartilhamentos que você recebeu, mas ainda não confirmou, serão exibidos aqui", - "Shares" : "Compartilhamentos", - "No shares" : "Sem compartilhamentos", - "Shares will show up here" : "Compartilhamentos serão mostrados aqui", - "Restore" : "Restaurar", - "Restore share" : "Restaurar compartilhamento", - "Something happened. Unable to restore the share." : "Algo aconteceu. Não foi possível restaurar o compartilhamento.", - "Accept share" : "Aceitar compartilhamento", - "Something happened. Unable to accept the share." : "Ocorreu um erro. Não foi possível aceitar o compartilhamento.", - "Reject share" : "Recusar compartilhamentos", - "Something happened. Unable to reject the share." : "Ocorreu um erro. Não foi possível recusar o compartilhamento.", "Waiting…" : "Aguarde...", "error" : "erro", "finished" : "terminou", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "Nenhum servidor compativel encontrado em {remote}", "Invalid server URL" : "URL do servidor inválida", "Failed to add the public link to your Nextcloud" : "Ocorreu uma falha ao adicionar o link público ao seu Nextcloud", - "No expiration date set" : "Nenhuma data de expiração definida", - "Shared by" : "Compartilhado por", "File shares" : "Compartilhamentos de arquivos", "Downloaded via public link" : "Baixado via link público", "Downloaded by {email}" : "Baixado por {email}", @@ -245,6 +218,7 @@ "Share {propertyName} saved" : "Compartilhe {propertyName} salvo", "Shared" : "Compartilhado", "Share" : "Compartilhar", + "Shared by" : "Compartilhado por", "Shared with" : "Compartilhado com", "Password created successfully" : "Senha criada com sucesso", "Error generating password from password policy" : "Erro ao gerar senha da política de senha", @@ -252,6 +226,12 @@ "Shared with you and {circle} by {owner}" : "Compartilhado com você e {circle} por {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Compartilhado com você e a conversa {conversation} por {owner}", "Shared with you in a conversation by {owner}" : "Compartilhado com você em uma conversa por {owner}", + "Shares" : "Compartilhamentos", + "Shared with you" : "Compartilhado com você", + "Shared with others" : "Compartilhado com outros", + "Shared by link" : "Compartilhado por link", + "Deleted shares" : "Compartilhamentos apagados", + "Pending shares" : "Compartilhamentos pendentes", "No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta", "Name" : "Nome", "Share time" : "Compartilhamento", @@ -270,6 +250,23 @@ "Uploaded files:" : "Arquivos enviados:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Ao enviar arquivos, você concorda com os %1$stermos de serviço%2$s.", "Add to your Nextcloud" : "Adicionar ao seu Nextcloud", + "Nothing shared with you yet" : "Nada foi compartilhado!", + "Files and folders others share with you will show up here" : "Arquivos e pastas que outras pessoas compartilham com você serão exibidos aqui.", + "Nothing shared yet" : "Você ainda não compartilhou nada!", + "Files and folders you share will show up here" : "Arquivos e pastas que você compartilhar serão exibidos aqui.", + "No shared links" : "Nenhum link compartilhado!", + "Files and folders you share by link will show up here" : "Arquivos e pastas que você compartilha por link serão exibidos aqui", + "No deleted shares" : "Não há compartilhamentos apagados", + "Shares you deleted will show up here" : "Compartilhamentos apagados aparecem aqui", + "No pending shares" : "Não há compartilhamentos pendentes", + "Shares you have received but not confirmed will show up here" : "Compartilhamentos que você recebeu, mas ainda não confirmou, serão exibidos aqui", + "No shares" : "Sem compartilhamentos", + "Shares will show up here" : "Compartilhamentos serão mostrados aqui", + "Restore" : "Restaurar", + "Something happened. Unable to restore the share." : "Algo aconteceu. Não foi possível restaurar o compartilhamento.", + "Something happened. Unable to accept the share." : "Ocorreu um erro. Não foi possível aceitar o compartilhamento.", + "Something happened. Unable to reject the share." : "Ocorreu um erro. Não foi possível recusar o compartilhamento.", + "No expiration date set" : "Nenhuma data de expiração definida", "Sharing %s failed because the back end does not support sciencemesh shares" : "Sharing %s failed because the back end does not support sciencemesh shares", "One or more of your shares will expire tomorrow" : "Um ou mais de seus compartilhamentos irão expirar amanhã", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/pt_PT.js b/apps/files_sharing/l10n/pt_PT.js index 0f614b223fe..ff96d06eb69 100644 --- a/apps/files_sharing/l10n/pt_PT.js +++ b/apps/files_sharing/l10n/pt_PT.js @@ -1,17 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Partilhado consigo ", - "Nothing shared with you yet" : "Ainda não foi partilhado nada consigo", - "Files and folders others share with you will show up here" : "Os ficheiros e pastas que terceiros partilham consigo, serão mostrados aqui", - "Shared with others" : "Partilhado com terceiros", - "Nothing shared yet" : "Ainda não foi partilhado nada", - "Files and folders you share will show up here" : "Os ficheiros e as pastas que partilha serão mostrados aqui", - "Shared by link" : "Partilhado por hiperligação", - "No shared links" : "Sem hiperligações partilhadas", - "Files and folders you share by link will show up here" : "Os ficheiros e as pastas que partilha por hiperligação, serão mostrados aqui", - "Shares" : "Partilhas", - "Restore" : "Restaurar", "error" : "erro", "This will stop your current uploads." : "Isto irá interromper os seus carregamentos atuais.", "Move or copy" : "Mover ou copiar", @@ -23,8 +12,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Nenhum servidor compatível encontrado em {remote}", "Invalid server URL" : "URL de servidor inválido", "Failed to add the public link to your Nextcloud" : "Não foi possível adicionar a hiperligação pública ao seu Nextcloud", - "No expiration date set" : "Data de expiração não definida", - "Shared by" : "Partilhado por", "File shares" : "Partilhas de ficheiro", "Downloaded via public link" : "Transferido via hiperligação pública", "Downloaded by {email}" : "Transferido por {email}", @@ -139,11 +126,16 @@ OC.L10N.register( "Shared with you by {owner}" : "Partilhado consigo por {owner}", "Shared" : "Partilhados", "Share" : "Partilhar", + "Shared by" : "Partilhado por", "Shared with" : "Partilhado com ", "Shared with you and the group {group} by {owner}" : "Partilhado consigo e com o grupo {group} por {owner}", "Shared with you and {circle} by {owner}" : "Partilhado consigo e com {circle} por {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Partilhado consigo e com a conversação {conversation} por {owner}", "Shared with you in a conversation by {owner}" : "Partilhado consigo numa conversação por {owner}", + "Shares" : "Partilhas", + "Shared with you" : "Partilhado consigo ", + "Shared with others" : "Partilhado com terceiros", + "Shared by link" : "Partilhado por hiperligação", "No entries found in this folder" : "Não foram encontradas entradas nesta pasta", "Name" : "Nome", "Share time" : "Hora da Partilha", @@ -158,6 +150,14 @@ OC.L10N.register( "Note" : "Nota", "Select or drop files" : "Seleccione ou solte ficheiros", "Uploaded files:" : "Ficheiros enviados:", - "Add to your Nextcloud" : "Adicionar à sua Nextcloud" + "Add to your Nextcloud" : "Adicionar à sua Nextcloud", + "Nothing shared with you yet" : "Ainda não foi partilhado nada consigo", + "Files and folders others share with you will show up here" : "Os ficheiros e pastas que terceiros partilham consigo, serão mostrados aqui", + "Nothing shared yet" : "Ainda não foi partilhado nada", + "Files and folders you share will show up here" : "Os ficheiros e as pastas que partilha serão mostrados aqui", + "No shared links" : "Sem hiperligações partilhadas", + "Files and folders you share by link will show up here" : "Os ficheiros e as pastas que partilha por hiperligação, serão mostrados aqui", + "Restore" : "Restaurar", + "No expiration date set" : "Data de expiração não definida" }, "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/files_sharing/l10n/pt_PT.json b/apps/files_sharing/l10n/pt_PT.json index f5b3e6bf595..2f5b36ec81f 100644 --- a/apps/files_sharing/l10n/pt_PT.json +++ b/apps/files_sharing/l10n/pt_PT.json @@ -1,15 +1,4 @@ { "translations": { - "Shared with you" : "Partilhado consigo ", - "Nothing shared with you yet" : "Ainda não foi partilhado nada consigo", - "Files and folders others share with you will show up here" : "Os ficheiros e pastas que terceiros partilham consigo, serão mostrados aqui", - "Shared with others" : "Partilhado com terceiros", - "Nothing shared yet" : "Ainda não foi partilhado nada", - "Files and folders you share will show up here" : "Os ficheiros e as pastas que partilha serão mostrados aqui", - "Shared by link" : "Partilhado por hiperligação", - "No shared links" : "Sem hiperligações partilhadas", - "Files and folders you share by link will show up here" : "Os ficheiros e as pastas que partilha por hiperligação, serão mostrados aqui", - "Shares" : "Partilhas", - "Restore" : "Restaurar", "error" : "erro", "This will stop your current uploads." : "Isto irá interromper os seus carregamentos atuais.", "Move or copy" : "Mover ou copiar", @@ -21,8 +10,6 @@ "No compatible server found at {remote}" : "Nenhum servidor compatível encontrado em {remote}", "Invalid server URL" : "URL de servidor inválido", "Failed to add the public link to your Nextcloud" : "Não foi possível adicionar a hiperligação pública ao seu Nextcloud", - "No expiration date set" : "Data de expiração não definida", - "Shared by" : "Partilhado por", "File shares" : "Partilhas de ficheiro", "Downloaded via public link" : "Transferido via hiperligação pública", "Downloaded by {email}" : "Transferido por {email}", @@ -137,11 +124,16 @@ "Shared with you by {owner}" : "Partilhado consigo por {owner}", "Shared" : "Partilhados", "Share" : "Partilhar", + "Shared by" : "Partilhado por", "Shared with" : "Partilhado com ", "Shared with you and the group {group} by {owner}" : "Partilhado consigo e com o grupo {group} por {owner}", "Shared with you and {circle} by {owner}" : "Partilhado consigo e com {circle} por {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Partilhado consigo e com a conversação {conversation} por {owner}", "Shared with you in a conversation by {owner}" : "Partilhado consigo numa conversação por {owner}", + "Shares" : "Partilhas", + "Shared with you" : "Partilhado consigo ", + "Shared with others" : "Partilhado com terceiros", + "Shared by link" : "Partilhado por hiperligação", "No entries found in this folder" : "Não foram encontradas entradas nesta pasta", "Name" : "Nome", "Share time" : "Hora da Partilha", @@ -156,6 +148,14 @@ "Note" : "Nota", "Select or drop files" : "Seleccione ou solte ficheiros", "Uploaded files:" : "Ficheiros enviados:", - "Add to your Nextcloud" : "Adicionar à sua Nextcloud" + "Add to your Nextcloud" : "Adicionar à sua Nextcloud", + "Nothing shared with you yet" : "Ainda não foi partilhado nada consigo", + "Files and folders others share with you will show up here" : "Os ficheiros e pastas que terceiros partilham consigo, serão mostrados aqui", + "Nothing shared yet" : "Ainda não foi partilhado nada", + "Files and folders you share will show up here" : "Os ficheiros e as pastas que partilha serão mostrados aqui", + "No shared links" : "Sem hiperligações partilhadas", + "Files and folders you share by link will show up here" : "Os ficheiros e as pastas que partilha por hiperligação, serão mostrados aqui", + "Restore" : "Restaurar", + "No expiration date set" : "Data de expiração não definida" },"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/ru.js b/apps/files_sharing/l10n/ru.js index be8fecc836d..aca435a5636 100644 --- a/apps/files_sharing/l10n/ru.js +++ b/apps/files_sharing/l10n/ru.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Предоставленные вам", - "Nothing shared with you yet" : "С вами пока ничем не поделились", - "Files and folders others share with you will show up here" : "Здесь появятся файлы и каталоги, к которым вам предоставят общий доступ", - "Shared with others" : "Доступные для других", - "Nothing shared yet" : "Пока ничего не опубликовано", - "Files and folders you share will show up here" : "Здесь появятся файлы и каталоги, к которым вы предоставили общий доступ", - "Shared by link" : "Доступные по ссылке", - "No shared links" : "Нет общедоступных ссылок", - "Files and folders you share by link will show up here" : "Здесь появятся файлы и каталоги, ссылкой на которые вы поделитесь", - "Deleted shares" : "Удалённые общие ресурсы", - "No deleted shares" : "Удалённые ресурсы отсуствуют", - "Shares you deleted will show up here" : "Здесь будут показаны удалённые вами общие ресурсы", - "Pending shares" : "Ожидающие подтверждения", - "No pending shares" : "Ожидающие общие ресурсы отсуствуют", - "Shares you have received but not confirmed will show up here" : "Здесь появятся файлы и каталоги, ожидающие подтверждения получения с вашей стороны", - "Shares" : "Опубликованные ресурсы", - "No shares" : "Нет ресурсов общего доступа", - "Shares will show up here" : "Здесь будут показаны общие ресурсы", - "Restore" : "Восстановить", - "Restore share" : "Восстановить ресурсы общего доступа", - "Something happened. Unable to restore the share." : "Не удалось восстановить общий ресурс.", - "Accept share" : "Принять общий ресурс", - "Something happened. Unable to accept the share." : "Не удалось принять общий ресурс.", - "Reject share" : "Отклонить общий ресурс", - "Something happened. Unable to reject the share." : "Не удалось отклонить предложение общего ресурса.", "Waiting…" : "Ожидание…", "error" : "ошибка", "finished" : "завершено", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Не найден совместимый сервер на {remote}", "Invalid server URL" : "Неверный URL сервера", "Failed to add the public link to your Nextcloud" : "Не удалось создать общедоступную ссылку", - "No expiration date set" : "Дата истечения не установлена", - "Shared by" : "Поделился", "File shares" : "Обмен файлами", "Downloaded via public link" : "Скачано по общедоступной ссылке", "Downloaded by {email}" : "Скачано {email}", @@ -247,6 +220,7 @@ OC.L10N.register( "Share {propertyName} saved" : "Общий ресурс «{propertyName}» сохранён", "Shared" : "Опубликованное", "Share" : "Поделиться", + "Shared by" : "Поделился", "Shared with" : "Общий доступ", "Password created successfully" : "Пароль создан", "Error generating password from password policy" : "Не удалось создать пароль на основе политики", @@ -254,6 +228,12 @@ OC.L10N.register( "Shared with you and {circle} by {owner}" : "{owner} предоставил(а) доступ Вам и участникам круга «{circle}»", "Shared with you and the conversation {conversation} by {owner}" : "{owner} предоставил(а) доступ Вам и участникам беседы «{conversation}»", "Shared with you in a conversation by {owner}" : "Пользователь {owner} предоставил(а) Вам доступ во время беседы", + "Shares" : "Опубликованные ресурсы", + "Shared with you" : "Предоставленные вам", + "Shared with others" : "Доступные для других", + "Shared by link" : "Доступные по ссылке", + "Deleted shares" : "Удалённые общие ресурсы", + "Pending shares" : "Ожидающие подтверждения", "No entries found in this folder" : "В этой папке ничего нет", "Name" : "Имя", "Share time" : "Дата публикации", @@ -272,6 +252,23 @@ OC.L10N.register( "Uploaded files:" : "Отправленные файлы:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Передачей файлов на сервер, вы принимаете %1$sусловия обслуживания%2$s.", "Add to your Nextcloud" : "Добавить в свой Nextcloud", + "Nothing shared with you yet" : "С вами пока ничем не поделились", + "Files and folders others share with you will show up here" : "Здесь появятся файлы и каталоги, к которым вам предоставят общий доступ", + "Nothing shared yet" : "Пока ничего не опубликовано", + "Files and folders you share will show up here" : "Здесь появятся файлы и каталоги, к которым вы предоставили общий доступ", + "No shared links" : "Нет общедоступных ссылок", + "Files and folders you share by link will show up here" : "Здесь появятся файлы и каталоги, ссылкой на которые вы поделитесь", + "No deleted shares" : "Удалённые ресурсы отсуствуют", + "Shares you deleted will show up here" : "Здесь будут показаны удалённые вами общие ресурсы", + "No pending shares" : "Ожидающие общие ресурсы отсуствуют", + "Shares you have received but not confirmed will show up here" : "Здесь появятся файлы и каталоги, ожидающие подтверждения получения с вашей стороны", + "No shares" : "Нет ресурсов общего доступа", + "Shares will show up here" : "Здесь будут показаны общие ресурсы", + "Restore" : "Восстановить", + "Something happened. Unable to restore the share." : "Не удалось восстановить общий ресурс.", + "Something happened. Unable to accept the share." : "Не удалось принять общий ресурс.", + "Something happened. Unable to reject the share." : "Не удалось отклонить предложение общего ресурса.", + "No expiration date set" : "Дата истечения не установлена", "Sharing %s failed because the back end does not support sciencemesh shares" : "Не удалось предоставить общий доступ к «%s» поскольку механизм обмена не поддерживает общие ресурсы типа Science Mesh", "One or more of your shares will expire tomorrow" : "Завтра истекает срок одного или нескольких опубликованных вами ресурсов", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/ru.json b/apps/files_sharing/l10n/ru.json index 37e22c9aa2b..0367da78c29 100644 --- a/apps/files_sharing/l10n/ru.json +++ b/apps/files_sharing/l10n/ru.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Предоставленные вам", - "Nothing shared with you yet" : "С вами пока ничем не поделились", - "Files and folders others share with you will show up here" : "Здесь появятся файлы и каталоги, к которым вам предоставят общий доступ", - "Shared with others" : "Доступные для других", - "Nothing shared yet" : "Пока ничего не опубликовано", - "Files and folders you share will show up here" : "Здесь появятся файлы и каталоги, к которым вы предоставили общий доступ", - "Shared by link" : "Доступные по ссылке", - "No shared links" : "Нет общедоступных ссылок", - "Files and folders you share by link will show up here" : "Здесь появятся файлы и каталоги, ссылкой на которые вы поделитесь", - "Deleted shares" : "Удалённые общие ресурсы", - "No deleted shares" : "Удалённые ресурсы отсуствуют", - "Shares you deleted will show up here" : "Здесь будут показаны удалённые вами общие ресурсы", - "Pending shares" : "Ожидающие подтверждения", - "No pending shares" : "Ожидающие общие ресурсы отсуствуют", - "Shares you have received but not confirmed will show up here" : "Здесь появятся файлы и каталоги, ожидающие подтверждения получения с вашей стороны", - "Shares" : "Опубликованные ресурсы", - "No shares" : "Нет ресурсов общего доступа", - "Shares will show up here" : "Здесь будут показаны общие ресурсы", - "Restore" : "Восстановить", - "Restore share" : "Восстановить ресурсы общего доступа", - "Something happened. Unable to restore the share." : "Не удалось восстановить общий ресурс.", - "Accept share" : "Принять общий ресурс", - "Something happened. Unable to accept the share." : "Не удалось принять общий ресурс.", - "Reject share" : "Отклонить общий ресурс", - "Something happened. Unable to reject the share." : "Не удалось отклонить предложение общего ресурса.", "Waiting…" : "Ожидание…", "error" : "ошибка", "finished" : "завершено", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "Не найден совместимый сервер на {remote}", "Invalid server URL" : "Неверный URL сервера", "Failed to add the public link to your Nextcloud" : "Не удалось создать общедоступную ссылку", - "No expiration date set" : "Дата истечения не установлена", - "Shared by" : "Поделился", "File shares" : "Обмен файлами", "Downloaded via public link" : "Скачано по общедоступной ссылке", "Downloaded by {email}" : "Скачано {email}", @@ -245,6 +218,7 @@ "Share {propertyName} saved" : "Общий ресурс «{propertyName}» сохранён", "Shared" : "Опубликованное", "Share" : "Поделиться", + "Shared by" : "Поделился", "Shared with" : "Общий доступ", "Password created successfully" : "Пароль создан", "Error generating password from password policy" : "Не удалось создать пароль на основе политики", @@ -252,6 +226,12 @@ "Shared with you and {circle} by {owner}" : "{owner} предоставил(а) доступ Вам и участникам круга «{circle}»", "Shared with you and the conversation {conversation} by {owner}" : "{owner} предоставил(а) доступ Вам и участникам беседы «{conversation}»", "Shared with you in a conversation by {owner}" : "Пользователь {owner} предоставил(а) Вам доступ во время беседы", + "Shares" : "Опубликованные ресурсы", + "Shared with you" : "Предоставленные вам", + "Shared with others" : "Доступные для других", + "Shared by link" : "Доступные по ссылке", + "Deleted shares" : "Удалённые общие ресурсы", + "Pending shares" : "Ожидающие подтверждения", "No entries found in this folder" : "В этой папке ничего нет", "Name" : "Имя", "Share time" : "Дата публикации", @@ -270,6 +250,23 @@ "Uploaded files:" : "Отправленные файлы:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Передачей файлов на сервер, вы принимаете %1$sусловия обслуживания%2$s.", "Add to your Nextcloud" : "Добавить в свой Nextcloud", + "Nothing shared with you yet" : "С вами пока ничем не поделились", + "Files and folders others share with you will show up here" : "Здесь появятся файлы и каталоги, к которым вам предоставят общий доступ", + "Nothing shared yet" : "Пока ничего не опубликовано", + "Files and folders you share will show up here" : "Здесь появятся файлы и каталоги, к которым вы предоставили общий доступ", + "No shared links" : "Нет общедоступных ссылок", + "Files and folders you share by link will show up here" : "Здесь появятся файлы и каталоги, ссылкой на которые вы поделитесь", + "No deleted shares" : "Удалённые ресурсы отсуствуют", + "Shares you deleted will show up here" : "Здесь будут показаны удалённые вами общие ресурсы", + "No pending shares" : "Ожидающие общие ресурсы отсуствуют", + "Shares you have received but not confirmed will show up here" : "Здесь появятся файлы и каталоги, ожидающие подтверждения получения с вашей стороны", + "No shares" : "Нет ресурсов общего доступа", + "Shares will show up here" : "Здесь будут показаны общие ресурсы", + "Restore" : "Восстановить", + "Something happened. Unable to restore the share." : "Не удалось восстановить общий ресурс.", + "Something happened. Unable to accept the share." : "Не удалось принять общий ресурс.", + "Something happened. Unable to reject the share." : "Не удалось отклонить предложение общего ресурса.", + "No expiration date set" : "Дата истечения не установлена", "Sharing %s failed because the back end does not support sciencemesh shares" : "Не удалось предоставить общий доступ к «%s» поскольку механизм обмена не поддерживает общие ресурсы типа Science Mesh", "One or more of your shares will expire tomorrow" : "Завтра истекает срок одного или нескольких опубликованных вами ресурсов", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/sc.js b/apps/files_sharing/l10n/sc.js index cc28c40eac1..a484ea1665f 100644 --- a/apps/files_sharing/l10n/sc.js +++ b/apps/files_sharing/l10n/sc.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Cumpartzidu cun tegus", - "Nothing shared with you yet" : "Ancora peruna cumpartzidura cun tegus", - "Files and folders others share with you will show up here" : "Archìvios e cartellas cumpartzidas dae àtere ant a aparèssere inoghe", - "Shared with others" : "Cumpartzidu cun àtere", - "Nothing shared yet" : "Ancora peruna cumpartzidura", - "Files and folders you share will show up here" : "Is cartellas e is archìvios chi cumpartzis ant a aparèssere inoghe", - "Shared by link" : "Cumpartzidu cun ligòngiu", - "No shared links" : "Perunu ligòngiu cumpartzidu", - "Files and folders you share by link will show up here" : "Is cartellas e is archìvios chi cumpartzis cun ligòngiu ant a aparèssere inoghe", - "Deleted shares" : "Cumpartziduras cantzelladas", - "No deleted shares" : "Peruna cumpartzidura cantzellada", - "Shares you deleted will show up here" : "Is cumpartziduras chi has cantzelladu ant a aparèssere inoghe", - "Pending shares" : "Cumpartziduras in suspesu", - "No pending shares" : "Peruna cumpartzidura in suspesu", - "Shares you have received but not confirmed will show up here" : "Is cumpartziduras retzidas e non cunfirmadas ant a aparèssere inoghe", - "Shares" : "Cumpartziduras", - "No shares" : "Peruna cumpartzidura", - "Shares will show up here" : "Is cumpartziduras ant a aparèssere inoghe", - "Restore" : "Riprìstina", - "Restore share" : "Riprìstina cumpartzidura", - "Something happened. Unable to restore the share." : "Non faghet a ripristinare sa cumpartzidura.", - "Accept share" : "Atzeta cumpartzidura", - "Something happened. Unable to accept the share." : "Non faghet a atzetare sa cumpartzidura.", - "Reject share" : "Refuda cumpartzidura", - "Something happened. Unable to reject the share." : "Non faghet a refudare sa cumpartzidura.", "Waiting…" : "Abeta…", "error" : "errore", "finished" : "agabbadu", @@ -38,8 +13,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Perunu serbidore cumpatìbile agatadu in {remote}", "Invalid server URL" : "URL de su serbidore non vàlidu", "Failed to add the public link to your Nextcloud" : "No at fatu a agiùnghere su ligòngiu pùblicu in Nextcloud", - "No expiration date set" : "Peruna data de iscadèntzia impostada", - "Shared by" : "Cumpartzidu dae", "File shares" : "Cumpartziduras de archìvios", "Downloaded via public link" : "Iscarrigadu cun ligòngiu pùblicu", "Downloaded by {email}" : "Iscarrigadu dae {email}", @@ -220,11 +193,18 @@ OC.L10N.register( "Error updating the share" : "Errore in s'agiornamentu de sa cumpatzidura", "Shared" : "Cumpartzidu", "Share" : "Cumpartzi", + "Shared by" : "Cumpartzidu dae", "Shared with" : "Cumpartzidu cun", "Shared with you and the group {group} by {owner}" : "Cumpartzidu cun tegus e su grupu {group} dae {owner}", "Shared with you and {circle} by {owner}" : "Cumpartzidu cun tegus {circle} dae {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Cumpartzidu cun tegus e sa resonada {conversation} dae {owner}", "Shared with you in a conversation by {owner}" : "Cumpartzidu cun tegus in una resonada dae {owner}", + "Shares" : "Cumpartziduras", + "Shared with you" : "Cumpartzidu cun tegus", + "Shared with others" : "Cumpartzidu cun àtere", + "Shared by link" : "Cumpartzidu cun ligòngiu", + "Deleted shares" : "Cumpartziduras cantzelladas", + "Pending shares" : "Cumpartziduras in suspesu", "No entries found in this folder" : "Perunu elementu agatadu in custa cartella", "Name" : "Nùmene", "Share time" : "Ora de cumpartzidura", @@ -242,6 +222,23 @@ OC.L10N.register( "Uploaded files:" : "Archìvios carrigados:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Carrighende is archìvios, cuncordas cun is %1$scunditziones de servìtziu%2$s.", "Add to your Nextcloud" : "Agiunghe a su Nextcloud tuo", + "Nothing shared with you yet" : "Ancora peruna cumpartzidura cun tegus", + "Files and folders others share with you will show up here" : "Archìvios e cartellas cumpartzidas dae àtere ant a aparèssere inoghe", + "Nothing shared yet" : "Ancora peruna cumpartzidura", + "Files and folders you share will show up here" : "Is cartellas e is archìvios chi cumpartzis ant a aparèssere inoghe", + "No shared links" : "Perunu ligòngiu cumpartzidu", + "Files and folders you share by link will show up here" : "Is cartellas e is archìvios chi cumpartzis cun ligòngiu ant a aparèssere inoghe", + "No deleted shares" : "Peruna cumpartzidura cantzellada", + "Shares you deleted will show up here" : "Is cumpartziduras chi has cantzelladu ant a aparèssere inoghe", + "No pending shares" : "Peruna cumpartzidura in suspesu", + "Shares you have received but not confirmed will show up here" : "Is cumpartziduras retzidas e non cunfirmadas ant a aparèssere inoghe", + "No shares" : "Peruna cumpartzidura", + "Shares will show up here" : "Is cumpartziduras ant a aparèssere inoghe", + "Restore" : "Riprìstina", + "Something happened. Unable to restore the share." : "Non faghet a ripristinare sa cumpartzidura.", + "Something happened. Unable to accept the share." : "Non faghet a atzetare sa cumpartzidura.", + "Something happened. Unable to reject the share." : "Non faghet a refudare sa cumpartzidura.", + "No expiration date set" : "Peruna data de iscadèntzia impostada", "One or more of your shares will expire tomorrow" : "Una o prus cumpartziduras tuas ant a iscadire cras" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/sc.json b/apps/files_sharing/l10n/sc.json index 4cd705ad212..74243dfbdbf 100644 --- a/apps/files_sharing/l10n/sc.json +++ b/apps/files_sharing/l10n/sc.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Cumpartzidu cun tegus", - "Nothing shared with you yet" : "Ancora peruna cumpartzidura cun tegus", - "Files and folders others share with you will show up here" : "Archìvios e cartellas cumpartzidas dae àtere ant a aparèssere inoghe", - "Shared with others" : "Cumpartzidu cun àtere", - "Nothing shared yet" : "Ancora peruna cumpartzidura", - "Files and folders you share will show up here" : "Is cartellas e is archìvios chi cumpartzis ant a aparèssere inoghe", - "Shared by link" : "Cumpartzidu cun ligòngiu", - "No shared links" : "Perunu ligòngiu cumpartzidu", - "Files and folders you share by link will show up here" : "Is cartellas e is archìvios chi cumpartzis cun ligòngiu ant a aparèssere inoghe", - "Deleted shares" : "Cumpartziduras cantzelladas", - "No deleted shares" : "Peruna cumpartzidura cantzellada", - "Shares you deleted will show up here" : "Is cumpartziduras chi has cantzelladu ant a aparèssere inoghe", - "Pending shares" : "Cumpartziduras in suspesu", - "No pending shares" : "Peruna cumpartzidura in suspesu", - "Shares you have received but not confirmed will show up here" : "Is cumpartziduras retzidas e non cunfirmadas ant a aparèssere inoghe", - "Shares" : "Cumpartziduras", - "No shares" : "Peruna cumpartzidura", - "Shares will show up here" : "Is cumpartziduras ant a aparèssere inoghe", - "Restore" : "Riprìstina", - "Restore share" : "Riprìstina cumpartzidura", - "Something happened. Unable to restore the share." : "Non faghet a ripristinare sa cumpartzidura.", - "Accept share" : "Atzeta cumpartzidura", - "Something happened. Unable to accept the share." : "Non faghet a atzetare sa cumpartzidura.", - "Reject share" : "Refuda cumpartzidura", - "Something happened. Unable to reject the share." : "Non faghet a refudare sa cumpartzidura.", "Waiting…" : "Abeta…", "error" : "errore", "finished" : "agabbadu", @@ -36,8 +11,6 @@ "No compatible server found at {remote}" : "Perunu serbidore cumpatìbile agatadu in {remote}", "Invalid server URL" : "URL de su serbidore non vàlidu", "Failed to add the public link to your Nextcloud" : "No at fatu a agiùnghere su ligòngiu pùblicu in Nextcloud", - "No expiration date set" : "Peruna data de iscadèntzia impostada", - "Shared by" : "Cumpartzidu dae", "File shares" : "Cumpartziduras de archìvios", "Downloaded via public link" : "Iscarrigadu cun ligòngiu pùblicu", "Downloaded by {email}" : "Iscarrigadu dae {email}", @@ -218,11 +191,18 @@ "Error updating the share" : "Errore in s'agiornamentu de sa cumpatzidura", "Shared" : "Cumpartzidu", "Share" : "Cumpartzi", + "Shared by" : "Cumpartzidu dae", "Shared with" : "Cumpartzidu cun", "Shared with you and the group {group} by {owner}" : "Cumpartzidu cun tegus e su grupu {group} dae {owner}", "Shared with you and {circle} by {owner}" : "Cumpartzidu cun tegus {circle} dae {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Cumpartzidu cun tegus e sa resonada {conversation} dae {owner}", "Shared with you in a conversation by {owner}" : "Cumpartzidu cun tegus in una resonada dae {owner}", + "Shares" : "Cumpartziduras", + "Shared with you" : "Cumpartzidu cun tegus", + "Shared with others" : "Cumpartzidu cun àtere", + "Shared by link" : "Cumpartzidu cun ligòngiu", + "Deleted shares" : "Cumpartziduras cantzelladas", + "Pending shares" : "Cumpartziduras in suspesu", "No entries found in this folder" : "Perunu elementu agatadu in custa cartella", "Name" : "Nùmene", "Share time" : "Ora de cumpartzidura", @@ -240,6 +220,23 @@ "Uploaded files:" : "Archìvios carrigados:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Carrighende is archìvios, cuncordas cun is %1$scunditziones de servìtziu%2$s.", "Add to your Nextcloud" : "Agiunghe a su Nextcloud tuo", + "Nothing shared with you yet" : "Ancora peruna cumpartzidura cun tegus", + "Files and folders others share with you will show up here" : "Archìvios e cartellas cumpartzidas dae àtere ant a aparèssere inoghe", + "Nothing shared yet" : "Ancora peruna cumpartzidura", + "Files and folders you share will show up here" : "Is cartellas e is archìvios chi cumpartzis ant a aparèssere inoghe", + "No shared links" : "Perunu ligòngiu cumpartzidu", + "Files and folders you share by link will show up here" : "Is cartellas e is archìvios chi cumpartzis cun ligòngiu ant a aparèssere inoghe", + "No deleted shares" : "Peruna cumpartzidura cantzellada", + "Shares you deleted will show up here" : "Is cumpartziduras chi has cantzelladu ant a aparèssere inoghe", + "No pending shares" : "Peruna cumpartzidura in suspesu", + "Shares you have received but not confirmed will show up here" : "Is cumpartziduras retzidas e non cunfirmadas ant a aparèssere inoghe", + "No shares" : "Peruna cumpartzidura", + "Shares will show up here" : "Is cumpartziduras ant a aparèssere inoghe", + "Restore" : "Riprìstina", + "Something happened. Unable to restore the share." : "Non faghet a ripristinare sa cumpartzidura.", + "Something happened. Unable to accept the share." : "Non faghet a atzetare sa cumpartzidura.", + "Something happened. Unable to reject the share." : "Non faghet a refudare sa cumpartzidura.", + "No expiration date set" : "Peruna data de iscadèntzia impostada", "One or more of your shares will expire tomorrow" : "Una o prus cumpartziduras tuas ant a iscadire cras" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/sk.js b/apps/files_sharing/l10n/sk.js index a18e2e168a4..62c563f6044 100644 --- a/apps/files_sharing/l10n/sk.js +++ b/apps/files_sharing/l10n/sk.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Vám sprístupnené", - "Nothing shared with you yet" : "Zatiaľ vám nikto nič nesprístupnil", - "Files and folders others share with you will show up here" : "Tu budú zobrazené súbory a priečinky, ktoré vám ostatní sprístupnili", - "Shared with others" : "Sprístupnené ostatným", - "Nothing shared yet" : "Zatiaľ ste nič nesprístupnili", - "Files and folders you share will show up here" : "Tu sú zobrazené súbory a priečinky, ktoré ste sprístupnili", - "Shared by link" : "Sprístupnené prostredníctvom odkazu", - "No shared links" : "Žiadne sprístupnené odkazy", - "Files and folders you share by link will show up here" : "Tu sú zobrazené súbory a priečinky, ktoré ste sprístupnili prostredníctvom odkazov", - "Deleted shares" : "Zmazať sprístupnenia", - "No deleted shares" : "Žiadne zmazané sprístupnené položky", - "Shares you deleted will show up here" : "Tu sa zobrazia sprístupnené položky, ktoré zmažete", - "Pending shares" : "Čakajúce prístupy", - "No pending shares" : "Žiadne čakajúce zdieľania", - "Shares you have received but not confirmed will show up here" : "Tu sa zobrazia zdieľania, ktoré ste obdržali, ale nepotvrdili", - "Shares" : "Sprístupnené položky", - "No shares" : "Žiadne sprístupnené položky", - "Shares will show up here" : "Tu sa zobrazia sprístupnené položky", - "Restore" : "Obnoviť", - "Restore share" : "Obnoviť sprístupnené položky", - "Something happened. Unable to restore the share." : "Niečo sa udialo. Nedarí sa obnoviť sprístupnenú položku.", - "Accept share" : "Prijať zdieľanie", - "Something happened. Unable to accept the share." : "Niečo sa stalo. Nedarí sa prijať zdieľanie.", - "Reject share" : "Odmietnuť zdieľanie", - "Something happened. Unable to reject the share." : "Niečo sa stalo. Nedarí sa odmietnuť zdieľanie.", "Waiting…" : "Čaká sa…", "error" : "chyba", "finished" : "dokončené", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Nebol nájdený kompatibilný server na adrese {remote}", "Invalid server URL" : "Neplatná URL servera", "Failed to add the public link to your Nextcloud" : "Pridanie verejne dostupného odkazu do vášho Nextcloud zlyhalo", - "No expiration date set" : "Dátum exspirácie nenastavený", - "Shared by" : "Zdieľané od", "File shares" : "Zdieľané súbory", "Downloaded via public link" : "Stiahnuté prostredníctvom verejného odkazu", "Downloaded by {email}" : "Stiahnuté prostredníctvom {email}", @@ -238,11 +211,18 @@ OC.L10N.register( "Error updating the share" : "Pri aktualizácii zdieľania sa vyskytla chyba", "Shared" : "Sprístupnené", "Share" : "Sprístupniť", + "Shared by" : "Zdieľané od", "Shared with" : "Sprístupnené používateľovi", "Shared with you and the group {group} by {owner}" : "Zdieľané s vami a so skupinou {group} používateľom {owner}", "Shared with you and {circle} by {owner}" : "Sprístupnené vám a {circle} od {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Sprístupnené vám a rozhovoru {conversation} od {owner}", "Shared with you in a conversation by {owner}" : "Sprístupnené vám vrámci rozhovoru s {owner}", + "Shares" : "Sprístupnené položky", + "Shared with you" : "Vám sprístupnené", + "Shared with others" : "Sprístupnené ostatným", + "Shared by link" : "Sprístupnené prostredníctvom odkazu", + "Deleted shares" : "Zmazať sprístupnenia", + "Pending shares" : "Čakajúce prístupy", "No entries found in this folder" : "V tomto priečinku nebolo nič nájdené", "Name" : "Názov", "Share time" : "Čas sprístupnenia", @@ -261,6 +241,23 @@ OC.L10N.register( "Uploaded files:" : "Nahrané súbory...", "By uploading files, you agree to the %1$sterms of service%2$s." : "Nahraním súborov vyjadrujete súhlas so všeobecnými podmienkami %1$s %2$s.", "Add to your Nextcloud" : "Pridať do svojho Nextcloud", + "Nothing shared with you yet" : "Zatiaľ vám nikto nič nesprístupnil", + "Files and folders others share with you will show up here" : "Tu budú zobrazené súbory a priečinky, ktoré vám ostatní sprístupnili", + "Nothing shared yet" : "Zatiaľ ste nič nesprístupnili", + "Files and folders you share will show up here" : "Tu sú zobrazené súbory a priečinky, ktoré ste sprístupnili", + "No shared links" : "Žiadne sprístupnené odkazy", + "Files and folders you share by link will show up here" : "Tu sú zobrazené súbory a priečinky, ktoré ste sprístupnili prostredníctvom odkazov", + "No deleted shares" : "Žiadne zmazané sprístupnené položky", + "Shares you deleted will show up here" : "Tu sa zobrazia sprístupnené položky, ktoré zmažete", + "No pending shares" : "Žiadne čakajúce zdieľania", + "Shares you have received but not confirmed will show up here" : "Tu sa zobrazia zdieľania, ktoré ste obdržali, ale nepotvrdili", + "No shares" : "Žiadne sprístupnené položky", + "Shares will show up here" : "Tu sa zobrazia sprístupnené položky", + "Restore" : "Obnoviť", + "Something happened. Unable to restore the share." : "Niečo sa udialo. Nedarí sa obnoviť sprístupnenú položku.", + "Something happened. Unable to accept the share." : "Niečo sa stalo. Nedarí sa prijať zdieľanie.", + "Something happened. Unable to reject the share." : "Niečo sa stalo. Nedarí sa odmietnuť zdieľanie.", + "No expiration date set" : "Dátum exspirácie nenastavený", "One or more of your shares will expire tomorrow" : "Jedenému alebo viac zdieľaniam zajtra skončí platnosť" }, "nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);"); diff --git a/apps/files_sharing/l10n/sk.json b/apps/files_sharing/l10n/sk.json index f4874d7fa7f..1911ca531e6 100644 --- a/apps/files_sharing/l10n/sk.json +++ b/apps/files_sharing/l10n/sk.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Vám sprístupnené", - "Nothing shared with you yet" : "Zatiaľ vám nikto nič nesprístupnil", - "Files and folders others share with you will show up here" : "Tu budú zobrazené súbory a priečinky, ktoré vám ostatní sprístupnili", - "Shared with others" : "Sprístupnené ostatným", - "Nothing shared yet" : "Zatiaľ ste nič nesprístupnili", - "Files and folders you share will show up here" : "Tu sú zobrazené súbory a priečinky, ktoré ste sprístupnili", - "Shared by link" : "Sprístupnené prostredníctvom odkazu", - "No shared links" : "Žiadne sprístupnené odkazy", - "Files and folders you share by link will show up here" : "Tu sú zobrazené súbory a priečinky, ktoré ste sprístupnili prostredníctvom odkazov", - "Deleted shares" : "Zmazať sprístupnenia", - "No deleted shares" : "Žiadne zmazané sprístupnené položky", - "Shares you deleted will show up here" : "Tu sa zobrazia sprístupnené položky, ktoré zmažete", - "Pending shares" : "Čakajúce prístupy", - "No pending shares" : "Žiadne čakajúce zdieľania", - "Shares you have received but not confirmed will show up here" : "Tu sa zobrazia zdieľania, ktoré ste obdržali, ale nepotvrdili", - "Shares" : "Sprístupnené položky", - "No shares" : "Žiadne sprístupnené položky", - "Shares will show up here" : "Tu sa zobrazia sprístupnené položky", - "Restore" : "Obnoviť", - "Restore share" : "Obnoviť sprístupnené položky", - "Something happened. Unable to restore the share." : "Niečo sa udialo. Nedarí sa obnoviť sprístupnenú položku.", - "Accept share" : "Prijať zdieľanie", - "Something happened. Unable to accept the share." : "Niečo sa stalo. Nedarí sa prijať zdieľanie.", - "Reject share" : "Odmietnuť zdieľanie", - "Something happened. Unable to reject the share." : "Niečo sa stalo. Nedarí sa odmietnuť zdieľanie.", "Waiting…" : "Čaká sa…", "error" : "chyba", "finished" : "dokončené", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "Nebol nájdený kompatibilný server na adrese {remote}", "Invalid server URL" : "Neplatná URL servera", "Failed to add the public link to your Nextcloud" : "Pridanie verejne dostupného odkazu do vášho Nextcloud zlyhalo", - "No expiration date set" : "Dátum exspirácie nenastavený", - "Shared by" : "Zdieľané od", "File shares" : "Zdieľané súbory", "Downloaded via public link" : "Stiahnuté prostredníctvom verejného odkazu", "Downloaded by {email}" : "Stiahnuté prostredníctvom {email}", @@ -236,11 +209,18 @@ "Error updating the share" : "Pri aktualizácii zdieľania sa vyskytla chyba", "Shared" : "Sprístupnené", "Share" : "Sprístupniť", + "Shared by" : "Zdieľané od", "Shared with" : "Sprístupnené používateľovi", "Shared with you and the group {group} by {owner}" : "Zdieľané s vami a so skupinou {group} používateľom {owner}", "Shared with you and {circle} by {owner}" : "Sprístupnené vám a {circle} od {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Sprístupnené vám a rozhovoru {conversation} od {owner}", "Shared with you in a conversation by {owner}" : "Sprístupnené vám vrámci rozhovoru s {owner}", + "Shares" : "Sprístupnené položky", + "Shared with you" : "Vám sprístupnené", + "Shared with others" : "Sprístupnené ostatným", + "Shared by link" : "Sprístupnené prostredníctvom odkazu", + "Deleted shares" : "Zmazať sprístupnenia", + "Pending shares" : "Čakajúce prístupy", "No entries found in this folder" : "V tomto priečinku nebolo nič nájdené", "Name" : "Názov", "Share time" : "Čas sprístupnenia", @@ -259,6 +239,23 @@ "Uploaded files:" : "Nahrané súbory...", "By uploading files, you agree to the %1$sterms of service%2$s." : "Nahraním súborov vyjadrujete súhlas so všeobecnými podmienkami %1$s %2$s.", "Add to your Nextcloud" : "Pridať do svojho Nextcloud", + "Nothing shared with you yet" : "Zatiaľ vám nikto nič nesprístupnil", + "Files and folders others share with you will show up here" : "Tu budú zobrazené súbory a priečinky, ktoré vám ostatní sprístupnili", + "Nothing shared yet" : "Zatiaľ ste nič nesprístupnili", + "Files and folders you share will show up here" : "Tu sú zobrazené súbory a priečinky, ktoré ste sprístupnili", + "No shared links" : "Žiadne sprístupnené odkazy", + "Files and folders you share by link will show up here" : "Tu sú zobrazené súbory a priečinky, ktoré ste sprístupnili prostredníctvom odkazov", + "No deleted shares" : "Žiadne zmazané sprístupnené položky", + "Shares you deleted will show up here" : "Tu sa zobrazia sprístupnené položky, ktoré zmažete", + "No pending shares" : "Žiadne čakajúce zdieľania", + "Shares you have received but not confirmed will show up here" : "Tu sa zobrazia zdieľania, ktoré ste obdržali, ale nepotvrdili", + "No shares" : "Žiadne sprístupnené položky", + "Shares will show up here" : "Tu sa zobrazia sprístupnené položky", + "Restore" : "Obnoviť", + "Something happened. Unable to restore the share." : "Niečo sa udialo. Nedarí sa obnoviť sprístupnenú položku.", + "Something happened. Unable to accept the share." : "Niečo sa stalo. Nedarí sa prijať zdieľanie.", + "Something happened. Unable to reject the share." : "Niečo sa stalo. Nedarí sa odmietnuť zdieľanie.", + "No expiration date set" : "Dátum exspirácie nenastavený", "One or more of your shares will expire tomorrow" : "Jedenému alebo viac zdieľaniam zajtra skončí platnosť" },"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/sl.js b/apps/files_sharing/l10n/sl.js index 0e604724979..d26944e66a8 100644 --- a/apps/files_sharing/l10n/sl.js +++ b/apps/files_sharing/l10n/sl.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "V souporabi z vami", - "Nothing shared with you yet" : "Datotek drugih uporabnikov še ni v souporabi", - "Files and folders others share with you will show up here" : "Datoteke in mape, katerih souporabo z vami omogočijo drugi, bodo zbrane na tem mestu.", - "Shared with others" : "V souporabi z drugimi", - "Nothing shared yet" : "Souporabe datotek še niste omogočili", - "Files and folders you share will show up here" : "Datoteke in mape, ki ste jih označili za souporabo z drugimi, bodo zbrane na tem mestu.", - "Shared by link" : "V souporabi s povezavo", - "No shared links" : "Ni povezav za souporabo", - "Files and folders you share by link will show up here" : "Datoteke in mape, ki ste jih označili za souporabo po povezavi, bodo zbrane na tem mestu.", - "Deleted shares" : "Izbrisana mesta souporabe", - "No deleted shares" : "Ni izbrisanih povezav za souporabo.", - "Shares you deleted will show up here" : "Izbrisana mesta souporabe prikazana na tem mestu.", - "Pending shares" : "Predmeti za souporabo na čakanju", - "No pending shares" : "Ni nobenega predmeta za souporabo na čakanju", - "Shares you have received but not confirmed will show up here" : "To so mape in datoteke, ki ste jih že prejeli v souporabo, vendar ne tudi potrdili.", - "Shares" : "‧ V Souporabi", - "No shares" : "Ni še vpisanih mest souporabe", - "Shares will show up here" : "Predmeti v souporabi bodo prikazani na tem mestu.", - "Restore" : "Obnovi", - "Restore share" : "Obnovi mesto souporabe", - "Something happened. Unable to restore the share." : "Prišlo je do napake. Ni mogoče obnoviti mesta souporabe.", - "Accept share" : "Sprejmi souporabo", - "Something happened. Unable to accept the share." : "Prišlo je do napake. Ni mogoče sprejeti mesta souporabe.", - "Reject share" : "Zavrni souporabo", - "Something happened. Unable to reject the share." : "Prišlo je do napake. Ni mogoče zavrniti mesta souporabe.", "Waiting…" : "Čakanje na povezavo ...", "error" : "napaka", "finished" : "končano", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Skladnega strežnika na {remote} ni mogoče najti", "Invalid server URL" : "Neveljaven naslov URL strežnika", "Failed to add the public link to your Nextcloud" : "Dodajanje javne povezave v oblak je spodletelo.", - "No expiration date set" : "Datum preteka ni določen", - "Shared by" : "Souporabo omogoča", "File shares" : "Datoteke v souporabi", "Downloaded via public link" : "Prejeto po javni povezavi", "Downloaded by {email}" : "Prejeto po {email}", @@ -244,6 +217,7 @@ OC.L10N.register( "Share {propertyName} saved" : "Lastnost mesta souporabe {propertyName} je shranjena", "Shared" : "V souporabi", "Share" : "·Souporaba·", + "Shared by" : "Souporabo omogoča", "Shared with" : "V skupni rabi z uporabnikom", "Password created successfully" : "Geslo je uspešno ustvarjeno", "Error generating password from password policy" : "Napaka ustvarjanja gesla po določenih varnostnih pravilih", @@ -251,6 +225,12 @@ OC.L10N.register( "Shared with you and {circle} by {owner}" : "{owner} omogoči souporabo vam in članom kroga {circle}.", "Shared with you and the conversation {conversation} by {owner}" : "{owner} omogoči souporabo vam in udeležencem pogovora {conversation}.", "Shared with you in a conversation by {owner}" : "{owner} vam omogoči souporabo v pogovoru.", + "Shares" : "‧ V Souporabi", + "Shared with you" : "V souporabi z vami", + "Shared with others" : "V souporabi z drugimi", + "Shared by link" : "V souporabi s povezavo", + "Deleted shares" : "Izbrisana mesta souporabe", + "Pending shares" : "Predmeti za souporabo na čakanju", "No entries found in this folder" : "V tej mapi ni najdenih predmetov.", "Name" : "Ime", "Share time" : "Čas souporabe", @@ -269,6 +249,23 @@ OC.L10N.register( "Uploaded files:" : "Poslane datoteke:", "By uploading files, you agree to the %1$sterms of service%2$s." : "S pošiljanjem datotek v oblak sprejemate tudi %1$spogoje uporabe storitve%2$s.", "Add to your Nextcloud" : "Dodaj v oblak Nextcloud", + "Nothing shared with you yet" : "Datotek drugih uporabnikov še ni v souporabi", + "Files and folders others share with you will show up here" : "Datoteke in mape, katerih souporabo z vami omogočijo drugi, bodo zbrane na tem mestu.", + "Nothing shared yet" : "Souporabe datotek še niste omogočili", + "Files and folders you share will show up here" : "Datoteke in mape, ki ste jih označili za souporabo z drugimi, bodo zbrane na tem mestu.", + "No shared links" : "Ni povezav za souporabo", + "Files and folders you share by link will show up here" : "Datoteke in mape, ki ste jih označili za souporabo po povezavi, bodo zbrane na tem mestu.", + "No deleted shares" : "Ni izbrisanih povezav za souporabo.", + "Shares you deleted will show up here" : "Izbrisana mesta souporabe prikazana na tem mestu.", + "No pending shares" : "Ni nobenega predmeta za souporabo na čakanju", + "Shares you have received but not confirmed will show up here" : "To so mape in datoteke, ki ste jih že prejeli v souporabo, vendar ne tudi potrdili.", + "No shares" : "Ni še vpisanih mest souporabe", + "Shares will show up here" : "Predmeti v souporabi bodo prikazani na tem mestu.", + "Restore" : "Obnovi", + "Something happened. Unable to restore the share." : "Prišlo je do napake. Ni mogoče obnoviti mesta souporabe.", + "Something happened. Unable to accept the share." : "Prišlo je do napake. Ni mogoče sprejeti mesta souporabe.", + "Something happened. Unable to reject the share." : "Prišlo je do napake. Ni mogoče zavrniti mesta souporabe.", + "No expiration date set" : "Datum preteka ni določen", "Sharing %s failed because the back end does not support sciencemesh shares" : "Souporaba %s je spodletela, ker sistem ne podpira souporabe sciencemesh", "One or more of your shares will expire tomorrow" : "Eno ali več mest souporabe bo jutri poteklo", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/sl.json b/apps/files_sharing/l10n/sl.json index b4464bd41f4..4e7e57e5206 100644 --- a/apps/files_sharing/l10n/sl.json +++ b/apps/files_sharing/l10n/sl.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "V souporabi z vami", - "Nothing shared with you yet" : "Datotek drugih uporabnikov še ni v souporabi", - "Files and folders others share with you will show up here" : "Datoteke in mape, katerih souporabo z vami omogočijo drugi, bodo zbrane na tem mestu.", - "Shared with others" : "V souporabi z drugimi", - "Nothing shared yet" : "Souporabe datotek še niste omogočili", - "Files and folders you share will show up here" : "Datoteke in mape, ki ste jih označili za souporabo z drugimi, bodo zbrane na tem mestu.", - "Shared by link" : "V souporabi s povezavo", - "No shared links" : "Ni povezav za souporabo", - "Files and folders you share by link will show up here" : "Datoteke in mape, ki ste jih označili za souporabo po povezavi, bodo zbrane na tem mestu.", - "Deleted shares" : "Izbrisana mesta souporabe", - "No deleted shares" : "Ni izbrisanih povezav za souporabo.", - "Shares you deleted will show up here" : "Izbrisana mesta souporabe prikazana na tem mestu.", - "Pending shares" : "Predmeti za souporabo na čakanju", - "No pending shares" : "Ni nobenega predmeta za souporabo na čakanju", - "Shares you have received but not confirmed will show up here" : "To so mape in datoteke, ki ste jih že prejeli v souporabo, vendar ne tudi potrdili.", - "Shares" : "‧ V Souporabi", - "No shares" : "Ni še vpisanih mest souporabe", - "Shares will show up here" : "Predmeti v souporabi bodo prikazani na tem mestu.", - "Restore" : "Obnovi", - "Restore share" : "Obnovi mesto souporabe", - "Something happened. Unable to restore the share." : "Prišlo je do napake. Ni mogoče obnoviti mesta souporabe.", - "Accept share" : "Sprejmi souporabo", - "Something happened. Unable to accept the share." : "Prišlo je do napake. Ni mogoče sprejeti mesta souporabe.", - "Reject share" : "Zavrni souporabo", - "Something happened. Unable to reject the share." : "Prišlo je do napake. Ni mogoče zavrniti mesta souporabe.", "Waiting…" : "Čakanje na povezavo ...", "error" : "napaka", "finished" : "končano", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "Skladnega strežnika na {remote} ni mogoče najti", "Invalid server URL" : "Neveljaven naslov URL strežnika", "Failed to add the public link to your Nextcloud" : "Dodajanje javne povezave v oblak je spodletelo.", - "No expiration date set" : "Datum preteka ni določen", - "Shared by" : "Souporabo omogoča", "File shares" : "Datoteke v souporabi", "Downloaded via public link" : "Prejeto po javni povezavi", "Downloaded by {email}" : "Prejeto po {email}", @@ -242,6 +215,7 @@ "Share {propertyName} saved" : "Lastnost mesta souporabe {propertyName} je shranjena", "Shared" : "V souporabi", "Share" : "·Souporaba·", + "Shared by" : "Souporabo omogoča", "Shared with" : "V skupni rabi z uporabnikom", "Password created successfully" : "Geslo je uspešno ustvarjeno", "Error generating password from password policy" : "Napaka ustvarjanja gesla po določenih varnostnih pravilih", @@ -249,6 +223,12 @@ "Shared with you and {circle} by {owner}" : "{owner} omogoči souporabo vam in članom kroga {circle}.", "Shared with you and the conversation {conversation} by {owner}" : "{owner} omogoči souporabo vam in udeležencem pogovora {conversation}.", "Shared with you in a conversation by {owner}" : "{owner} vam omogoči souporabo v pogovoru.", + "Shares" : "‧ V Souporabi", + "Shared with you" : "V souporabi z vami", + "Shared with others" : "V souporabi z drugimi", + "Shared by link" : "V souporabi s povezavo", + "Deleted shares" : "Izbrisana mesta souporabe", + "Pending shares" : "Predmeti za souporabo na čakanju", "No entries found in this folder" : "V tej mapi ni najdenih predmetov.", "Name" : "Ime", "Share time" : "Čas souporabe", @@ -267,6 +247,23 @@ "Uploaded files:" : "Poslane datoteke:", "By uploading files, you agree to the %1$sterms of service%2$s." : "S pošiljanjem datotek v oblak sprejemate tudi %1$spogoje uporabe storitve%2$s.", "Add to your Nextcloud" : "Dodaj v oblak Nextcloud", + "Nothing shared with you yet" : "Datotek drugih uporabnikov še ni v souporabi", + "Files and folders others share with you will show up here" : "Datoteke in mape, katerih souporabo z vami omogočijo drugi, bodo zbrane na tem mestu.", + "Nothing shared yet" : "Souporabe datotek še niste omogočili", + "Files and folders you share will show up here" : "Datoteke in mape, ki ste jih označili za souporabo z drugimi, bodo zbrane na tem mestu.", + "No shared links" : "Ni povezav za souporabo", + "Files and folders you share by link will show up here" : "Datoteke in mape, ki ste jih označili za souporabo po povezavi, bodo zbrane na tem mestu.", + "No deleted shares" : "Ni izbrisanih povezav za souporabo.", + "Shares you deleted will show up here" : "Izbrisana mesta souporabe prikazana na tem mestu.", + "No pending shares" : "Ni nobenega predmeta za souporabo na čakanju", + "Shares you have received but not confirmed will show up here" : "To so mape in datoteke, ki ste jih že prejeli v souporabo, vendar ne tudi potrdili.", + "No shares" : "Ni še vpisanih mest souporabe", + "Shares will show up here" : "Predmeti v souporabi bodo prikazani na tem mestu.", + "Restore" : "Obnovi", + "Something happened. Unable to restore the share." : "Prišlo je do napake. Ni mogoče obnoviti mesta souporabe.", + "Something happened. Unable to accept the share." : "Prišlo je do napake. Ni mogoče sprejeti mesta souporabe.", + "Something happened. Unable to reject the share." : "Prišlo je do napake. Ni mogoče zavrniti mesta souporabe.", + "No expiration date set" : "Datum preteka ni določen", "Sharing %s failed because the back end does not support sciencemesh shares" : "Souporaba %s je spodletela, ker sistem ne podpira souporabe sciencemesh", "One or more of your shares will expire tomorrow" : "Eno ali več mest souporabe bo jutri poteklo", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/sr.js b/apps/files_sharing/l10n/sr.js index 69105e3cab8..d3ee279799b 100644 --- a/apps/files_sharing/l10n/sr.js +++ b/apps/files_sharing/l10n/sr.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Дељено са вама", - "Nothing shared with you yet" : "Још увек се ништа не дели са Вама", - "Files and folders others share with you will show up here" : "Фајлови и фасцикле које други деле са вама појавиће се овде", - "Shared with others" : "Дељено са осталима", - "Nothing shared yet" : "Још се ништа не дели", - "Files and folders you share will show up here" : "Фајлови и фасцикле које делите појавиће се овде", - "Shared by link" : "Дељено путем везе", - "No shared links" : "Нема веза за дељење", - "Files and folders you share by link will show up here" : "Фајлови и фасцикле које делите путем везе појавиће се овде", - "Deleted shares" : "Обрисана дељења", - "No deleted shares" : "Нема обрисаних дељења", - "Shares you deleted will show up here" : "Дељења која обришете ће се појавити овде", - "Pending shares" : "Дељења на чекању", - "No pending shares" : "Нема дељења на чекању", - "Shares you have received but not confirmed will show up here" : "Дељања која сте добили, а још нису потврђена ће се појавити овде", - "Shares" : "Дељења", - "No shares" : "Нема дељења", - "Shares will show up here" : "Дељења ће се појавити овде", - "Restore" : "Врати", - "Restore share" : "Поврати дељење", - "Something happened. Unable to restore the share." : "Нешто чудно се десило. Дељење не може да се поврати.", - "Accept share" : "Прихвати дељење", - "Something happened. Unable to accept the share." : "Нешто се десило. Не могу да прихватим дељење.", - "Reject share" : "Одбиј дељење", - "Something happened. Unable to reject the share." : "Нешто се десило. Не могу да одбијем дељење.", "Waiting…" : "Чекам…", "error" : "грешка", "finished" : "завршено", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Нема компатибилног сервера на {remote}", "Invalid server URL" : "Неисправна адреса сервера", "Failed to add the public link to your Nextcloud" : "Неуспело додавање јавне везе ка Вашем Некстклауду", - "No expiration date set" : "Није постављен датум истека", - "Shared by" : "Поделио", "File shares" : "Дељења фајлова", "Downloaded via public link" : "Скинуто преко јавне везе", "Downloaded by {email}" : "Скинуо {email}", @@ -237,6 +210,10 @@ OC.L10N.register( "Expires {relativetime}" : "Истиче {relativetime}", "this share just expired." : "ово дељење је управо истекло.", "Shared with you by {owner}" : "{owner} је поделио са Вама", + "_Accept share_::_Accept shares_" : ["Прихвати дељење","Прихвати дељењa","Прихвати дељењa"], + "Open in files" : "Отвори у фајловима", + "_Reject share_::_Reject shares_" : ["Одбиј дељење","Одбиј дељења","Одбиј дељења"], + "_Restore share_::_Restore shares_" : ["Обнови дељење","Обнови дељења","Обнови дељења"], "Link to a file" : "Веза ка фајлу", "Error creating the share: {errorMessage}" : "Greška pri pravljenju deljenja: {errorMessage}", "Error creating the share" : "Грешка при прављењу дељења", @@ -247,6 +224,7 @@ OC.L10N.register( "Share {propertyName} saved" : "Сачувано је дељење {propertyName}", "Shared" : "Подељено", "Share" : "Подели", + "Shared by" : "Поделио", "Shared with" : "Подељено са", "Password created successfully" : "Лозинка је успешно креирана", "Error generating password from password policy" : "Грешка приликом креирања лозинке из полисе за лозинке", @@ -254,6 +232,18 @@ OC.L10N.register( "Shared with you and {circle} by {owner}" : "{owner} је поделио са Вама и кругом {circle}", "Shared with you and the conversation {conversation} by {owner}" : "{owner} је поделио са Вама и разговором {conversation}", "Shared with you in a conversation by {owner}" : "{owner} је поделио са Вама у разговору", + "Shares" : "Дељења", + "Overview of shared files." : "Преглед дељених фајлова.", + "Shared with you" : "Дељено са вама", + "List of files that are shared with you." : "Листа фајлова који су подељени са вама.", + "Shared with others" : "Дељено са осталима", + "List of files that you shared with others." : "Листа фајлова које сте поделили другима.", + "Shared by link" : "Дељено путем везе", + "List of files that are shared by link." : "Листа фајлова који су подељени линком.", + "Deleted shares" : "Обрисана дељења", + "List of shares that you removed yourself from." : "Листа дељења из којих сте уклонили себе.", + "Pending shares" : "Дељења на чекању", + "List of unapproved shares." : "Листа дељења која нису одобрена.", "No entries found in this folder" : "Нема ничега у овој фасцикли", "Name" : "Назив", "Share time" : "Време дељења", @@ -272,6 +262,23 @@ OC.L10N.register( "Uploaded files:" : "Отпремљени фајлови:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Отпремањем фајлова, слажете се са %1$sусловима коришћења%2$s.", "Add to your Nextcloud" : "Додајте у свој облак", + "Nothing shared with you yet" : "Још увек се ништа не дели са Вама", + "Files and folders others share with you will show up here" : "Фајлови и фасцикле које други деле са вама појавиће се овде", + "Nothing shared yet" : "Још се ништа не дели", + "Files and folders you share will show up here" : "Фајлови и фасцикле које делите појавиће се овде", + "No shared links" : "Нема веза за дељење", + "Files and folders you share by link will show up here" : "Фајлови и фасцикле које делите путем везе појавиће се овде", + "No deleted shares" : "Нема обрисаних дељења", + "Shares you deleted will show up here" : "Дељења која обришете ће се појавити овде", + "No pending shares" : "Нема дељења на чекању", + "Shares you have received but not confirmed will show up here" : "Дељања која сте добили, а још нису потврђена ће се појавити овде", + "No shares" : "Нема дељења", + "Shares will show up here" : "Дељења ће се појавити овде", + "Restore" : "Врати", + "Something happened. Unable to restore the share." : "Нешто чудно се десило. Дељење не може да се поврати.", + "Something happened. Unable to accept the share." : "Нешто се десило. Не могу да прихватим дељење.", + "Something happened. Unable to reject the share." : "Нешто се десило. Не могу да одбијем дељење.", + "No expiration date set" : "Није постављен датум истека", "Sharing %s failed because the back end does not support sciencemesh shares" : "Дељење %s није успело јер позадински механизам не подржава sciencemesh дељења", "One or more of your shares will expire tomorrow" : "Једно или више Ваших дељења ће истећи сутра", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/sr.json b/apps/files_sharing/l10n/sr.json index 5f2a91fe867..0129cd395d6 100644 --- a/apps/files_sharing/l10n/sr.json +++ b/apps/files_sharing/l10n/sr.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Дељено са вама", - "Nothing shared with you yet" : "Још увек се ништа не дели са Вама", - "Files and folders others share with you will show up here" : "Фајлови и фасцикле које други деле са вама појавиће се овде", - "Shared with others" : "Дељено са осталима", - "Nothing shared yet" : "Још се ништа не дели", - "Files and folders you share will show up here" : "Фајлови и фасцикле које делите појавиће се овде", - "Shared by link" : "Дељено путем везе", - "No shared links" : "Нема веза за дељење", - "Files and folders you share by link will show up here" : "Фајлови и фасцикле које делите путем везе појавиће се овде", - "Deleted shares" : "Обрисана дељења", - "No deleted shares" : "Нема обрисаних дељења", - "Shares you deleted will show up here" : "Дељења која обришете ће се појавити овде", - "Pending shares" : "Дељења на чекању", - "No pending shares" : "Нема дељења на чекању", - "Shares you have received but not confirmed will show up here" : "Дељања која сте добили, а још нису потврђена ће се појавити овде", - "Shares" : "Дељења", - "No shares" : "Нема дељења", - "Shares will show up here" : "Дељења ће се појавити овде", - "Restore" : "Врати", - "Restore share" : "Поврати дељење", - "Something happened. Unable to restore the share." : "Нешто чудно се десило. Дељење не може да се поврати.", - "Accept share" : "Прихвати дељење", - "Something happened. Unable to accept the share." : "Нешто се десило. Не могу да прихватим дељење.", - "Reject share" : "Одбиј дељење", - "Something happened. Unable to reject the share." : "Нешто се десило. Не могу да одбијем дељење.", "Waiting…" : "Чекам…", "error" : "грешка", "finished" : "завршено", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "Нема компатибилног сервера на {remote}", "Invalid server URL" : "Неисправна адреса сервера", "Failed to add the public link to your Nextcloud" : "Неуспело додавање јавне везе ка Вашем Некстклауду", - "No expiration date set" : "Није постављен датум истека", - "Shared by" : "Поделио", "File shares" : "Дељења фајлова", "Downloaded via public link" : "Скинуто преко јавне везе", "Downloaded by {email}" : "Скинуо {email}", @@ -235,6 +208,10 @@ "Expires {relativetime}" : "Истиче {relativetime}", "this share just expired." : "ово дељење је управо истекло.", "Shared with you by {owner}" : "{owner} је поделио са Вама", + "_Accept share_::_Accept shares_" : ["Прихвати дељење","Прихвати дељењa","Прихвати дељењa"], + "Open in files" : "Отвори у фајловима", + "_Reject share_::_Reject shares_" : ["Одбиј дељење","Одбиј дељења","Одбиј дељења"], + "_Restore share_::_Restore shares_" : ["Обнови дељење","Обнови дељења","Обнови дељења"], "Link to a file" : "Веза ка фајлу", "Error creating the share: {errorMessage}" : "Greška pri pravljenju deljenja: {errorMessage}", "Error creating the share" : "Грешка при прављењу дељења", @@ -245,6 +222,7 @@ "Share {propertyName} saved" : "Сачувано је дељење {propertyName}", "Shared" : "Подељено", "Share" : "Подели", + "Shared by" : "Поделио", "Shared with" : "Подељено са", "Password created successfully" : "Лозинка је успешно креирана", "Error generating password from password policy" : "Грешка приликом креирања лозинке из полисе за лозинке", @@ -252,6 +230,18 @@ "Shared with you and {circle} by {owner}" : "{owner} је поделио са Вама и кругом {circle}", "Shared with you and the conversation {conversation} by {owner}" : "{owner} је поделио са Вама и разговором {conversation}", "Shared with you in a conversation by {owner}" : "{owner} је поделио са Вама у разговору", + "Shares" : "Дељења", + "Overview of shared files." : "Преглед дељених фајлова.", + "Shared with you" : "Дељено са вама", + "List of files that are shared with you." : "Листа фајлова који су подељени са вама.", + "Shared with others" : "Дељено са осталима", + "List of files that you shared with others." : "Листа фајлова које сте поделили другима.", + "Shared by link" : "Дељено путем везе", + "List of files that are shared by link." : "Листа фајлова који су подељени линком.", + "Deleted shares" : "Обрисана дељења", + "List of shares that you removed yourself from." : "Листа дељења из којих сте уклонили себе.", + "Pending shares" : "Дељења на чекању", + "List of unapproved shares." : "Листа дељења која нису одобрена.", "No entries found in this folder" : "Нема ничега у овој фасцикли", "Name" : "Назив", "Share time" : "Време дељења", @@ -270,6 +260,23 @@ "Uploaded files:" : "Отпремљени фајлови:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Отпремањем фајлова, слажете се са %1$sусловима коришћења%2$s.", "Add to your Nextcloud" : "Додајте у свој облак", + "Nothing shared with you yet" : "Још увек се ништа не дели са Вама", + "Files and folders others share with you will show up here" : "Фајлови и фасцикле које други деле са вама појавиће се овде", + "Nothing shared yet" : "Још се ништа не дели", + "Files and folders you share will show up here" : "Фајлови и фасцикле које делите појавиће се овде", + "No shared links" : "Нема веза за дељење", + "Files and folders you share by link will show up here" : "Фајлови и фасцикле које делите путем везе појавиће се овде", + "No deleted shares" : "Нема обрисаних дељења", + "Shares you deleted will show up here" : "Дељења која обришете ће се појавити овде", + "No pending shares" : "Нема дељења на чекању", + "Shares you have received but not confirmed will show up here" : "Дељања која сте добили, а још нису потврђена ће се појавити овде", + "No shares" : "Нема дељења", + "Shares will show up here" : "Дељења ће се појавити овде", + "Restore" : "Врати", + "Something happened. Unable to restore the share." : "Нешто чудно се десило. Дељење не може да се поврати.", + "Something happened. Unable to accept the share." : "Нешто се десило. Не могу да прихватим дељење.", + "Something happened. Unable to reject the share." : "Нешто се десило. Не могу да одбијем дељење.", + "No expiration date set" : "Није постављен датум истека", "Sharing %s failed because the back end does not support sciencemesh shares" : "Дељење %s није успело јер позадински механизам не подржава sciencemesh дељења", "One or more of your shares will expire tomorrow" : "Једно или више Ваших дељења ће истећи сутра", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/sv.js b/apps/files_sharing/l10n/sv.js index e310d2f0346..63ab68cde2d 100644 --- a/apps/files_sharing/l10n/sv.js +++ b/apps/files_sharing/l10n/sv.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Delas med mig", - "Nothing shared with you yet" : "Inget delat med dig ännu", - "Files and folders others share with you will show up here" : "Filer och mappar som andra delar med dig kommer visas här", - "Shared with others" : "Delas med andra", - "Nothing shared yet" : "Inget delat ännu", - "Files and folders you share will show up here" : "Filer och mappar som du delar kommer visas här", - "Shared by link" : "Delat som länk", - "No shared links" : "Inga delade länkar", - "Files and folders you share by link will show up here" : "Filer och mappar som du delar som länkar kommer visas här", - "Deleted shares" : "Borttagna delningar", - "No deleted shares" : "Inga borttagna delningar", - "Shares you deleted will show up here" : "Borttagna delningar visas här", - "Pending shares" : "Väntande delningar", - "No pending shares" : "Inga väntande delningar", - "Shares you have received but not confirmed will show up here" : "Delningar du har mottagit men inte bekräftat visas här", - "Shares" : "Delningar", - "No shares" : "Inga delningar", - "Shares will show up here" : "Delningar visas här", - "Restore" : "Återställ", - "Restore share" : "Återställ delning", - "Something happened. Unable to restore the share." : "Ett fel uppstod. Kan inte återställa delningen.", - "Accept share" : "Acceptera delning", - "Something happened. Unable to accept the share." : "Ett fel uppstod. Kan inte acceptera delningen.", - "Reject share" : "Avvisa delning", - "Something happened. Unable to reject the share." : "Ett fel uppstod. Kan inte avvisa delningen.", "Waiting…" : "Väntar...", "error" : "fel", "finished" : "klar", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Ingen kompatibel server hittad på {remote}", "Invalid server URL" : "Ogiltig serverwebbadress", "Failed to add the public link to your Nextcloud" : "Misslyckades skapa den offentliga delningslänken till ditt moln", - "No expiration date set" : "Inget utgångsdatum satt", - "Shared by" : "Delad av", "File shares" : "Fildelningar", "Downloaded via public link" : "Hämtad via offentlig länk", "Downloaded by {email}" : "Hämtad av {email}", @@ -237,6 +210,10 @@ OC.L10N.register( "Expires {relativetime}" : "Upphör {relativetime}", "this share just expired." : "denna delning har just gått ut.", "Shared with you by {owner}" : "Delad med dig av {owner}", + "_Accept share_::_Accept shares_" : ["Acceptera delning","Acceptera delningar"], + "Open in files" : "Öppna i filer", + "_Reject share_::_Reject shares_" : ["Avvisa delning","Avvisa delningar"], + "_Restore share_::_Restore shares_" : ["Återställ delning","Återställ delningar"], "Link to a file" : "Länka till en fil", "Error creating the share: {errorMessage}" : "Kunde inte skapa delningen: {errorMessage}", "Error creating the share" : "Kunde inte skapa delning", @@ -247,6 +224,7 @@ OC.L10N.register( "Share {propertyName} saved" : "Delning {propertyName} sparad", "Shared" : "Delad", "Share" : "Dela", + "Shared by" : "Delad av", "Shared with" : "Delad med", "Password created successfully" : "Lösenordet har skapats", "Error generating password from password policy" : "Fel vid generering av lösenord från lösenordspolicy", @@ -254,6 +232,18 @@ OC.L10N.register( "Shared with you and {circle} by {owner}" : "Delad med dig och {circle} av {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Delad med dig och konversation {conversation} av {owner}", "Shared with you in a conversation by {owner}" : "Delad med dig i en konversation av {owner}", + "Shares" : "Delningar", + "Overview of shared files." : "Översikt över delade filer.", + "Shared with you" : "Delas med mig", + "List of files that are shared with you." : "Lista över filer som delas med dig.", + "Shared with others" : "Delas med andra", + "List of files that you shared with others." : "Lista över filer som du delat med andra.", + "Shared by link" : "Delat som länk", + "List of files that are shared by link." : "Lista över filer som delas via länk.", + "Deleted shares" : "Borttagna delningar", + "List of shares that you removed yourself from." : "Lista över delningar som du tagit bort dig själv från.", + "Pending shares" : "Väntande delningar", + "List of unapproved shares." : "Lista över ej godkända delningar.", "No entries found in this folder" : "Inga filer hittades i denna mapp", "Name" : "Namn", "Share time" : "Delningstid", @@ -272,6 +262,23 @@ OC.L10N.register( "Uploaded files:" : "Uppladdade filer:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Genom att ladda upp filer godkänner du %1$sanvändarvillkoren %2$s.", "Add to your Nextcloud" : "Lägg till i molnet", + "Nothing shared with you yet" : "Inget delat med dig ännu", + "Files and folders others share with you will show up here" : "Filer och mappar som andra delar med dig kommer visas här", + "Nothing shared yet" : "Inget delat ännu", + "Files and folders you share will show up here" : "Filer och mappar som du delar kommer visas här", + "No shared links" : "Inga delade länkar", + "Files and folders you share by link will show up here" : "Filer och mappar som du delar som länkar kommer visas här", + "No deleted shares" : "Inga borttagna delningar", + "Shares you deleted will show up here" : "Borttagna delningar visas här", + "No pending shares" : "Inga väntande delningar", + "Shares you have received but not confirmed will show up here" : "Delningar du har mottagit men inte bekräftat visas här", + "No shares" : "Inga delningar", + "Shares will show up here" : "Delningar visas här", + "Restore" : "Återställ", + "Something happened. Unable to restore the share." : "Ett fel uppstod. Kan inte återställa delningen.", + "Something happened. Unable to accept the share." : "Ett fel uppstod. Kan inte acceptera delningen.", + "Something happened. Unable to reject the share." : "Ett fel uppstod. Kan inte avvisa delningen.", + "No expiration date set" : "Inget utgångsdatum satt", "Sharing %s failed because the back end does not support sciencemesh shares" : "Delning av %s misslyckades eftersom servern inte stödjer ScienceMesh-delningar", "One or more of your shares will expire tomorrow" : "En eller flera av dina delningar kommer att upphöra imorgon", "Science Mesh" : "ScienceMesh", diff --git a/apps/files_sharing/l10n/sv.json b/apps/files_sharing/l10n/sv.json index d2b75159685..8b9d85796df 100644 --- a/apps/files_sharing/l10n/sv.json +++ b/apps/files_sharing/l10n/sv.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Delas med mig", - "Nothing shared with you yet" : "Inget delat med dig ännu", - "Files and folders others share with you will show up here" : "Filer och mappar som andra delar med dig kommer visas här", - "Shared with others" : "Delas med andra", - "Nothing shared yet" : "Inget delat ännu", - "Files and folders you share will show up here" : "Filer och mappar som du delar kommer visas här", - "Shared by link" : "Delat som länk", - "No shared links" : "Inga delade länkar", - "Files and folders you share by link will show up here" : "Filer och mappar som du delar som länkar kommer visas här", - "Deleted shares" : "Borttagna delningar", - "No deleted shares" : "Inga borttagna delningar", - "Shares you deleted will show up here" : "Borttagna delningar visas här", - "Pending shares" : "Väntande delningar", - "No pending shares" : "Inga väntande delningar", - "Shares you have received but not confirmed will show up here" : "Delningar du har mottagit men inte bekräftat visas här", - "Shares" : "Delningar", - "No shares" : "Inga delningar", - "Shares will show up here" : "Delningar visas här", - "Restore" : "Återställ", - "Restore share" : "Återställ delning", - "Something happened. Unable to restore the share." : "Ett fel uppstod. Kan inte återställa delningen.", - "Accept share" : "Acceptera delning", - "Something happened. Unable to accept the share." : "Ett fel uppstod. Kan inte acceptera delningen.", - "Reject share" : "Avvisa delning", - "Something happened. Unable to reject the share." : "Ett fel uppstod. Kan inte avvisa delningen.", "Waiting…" : "Väntar...", "error" : "fel", "finished" : "klar", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "Ingen kompatibel server hittad på {remote}", "Invalid server URL" : "Ogiltig serverwebbadress", "Failed to add the public link to your Nextcloud" : "Misslyckades skapa den offentliga delningslänken till ditt moln", - "No expiration date set" : "Inget utgångsdatum satt", - "Shared by" : "Delad av", "File shares" : "Fildelningar", "Downloaded via public link" : "Hämtad via offentlig länk", "Downloaded by {email}" : "Hämtad av {email}", @@ -235,6 +208,10 @@ "Expires {relativetime}" : "Upphör {relativetime}", "this share just expired." : "denna delning har just gått ut.", "Shared with you by {owner}" : "Delad med dig av {owner}", + "_Accept share_::_Accept shares_" : ["Acceptera delning","Acceptera delningar"], + "Open in files" : "Öppna i filer", + "_Reject share_::_Reject shares_" : ["Avvisa delning","Avvisa delningar"], + "_Restore share_::_Restore shares_" : ["Återställ delning","Återställ delningar"], "Link to a file" : "Länka till en fil", "Error creating the share: {errorMessage}" : "Kunde inte skapa delningen: {errorMessage}", "Error creating the share" : "Kunde inte skapa delning", @@ -245,6 +222,7 @@ "Share {propertyName} saved" : "Delning {propertyName} sparad", "Shared" : "Delad", "Share" : "Dela", + "Shared by" : "Delad av", "Shared with" : "Delad med", "Password created successfully" : "Lösenordet har skapats", "Error generating password from password policy" : "Fel vid generering av lösenord från lösenordspolicy", @@ -252,6 +230,18 @@ "Shared with you and {circle} by {owner}" : "Delad med dig och {circle} av {owner}", "Shared with you and the conversation {conversation} by {owner}" : "Delad med dig och konversation {conversation} av {owner}", "Shared with you in a conversation by {owner}" : "Delad med dig i en konversation av {owner}", + "Shares" : "Delningar", + "Overview of shared files." : "Översikt över delade filer.", + "Shared with you" : "Delas med mig", + "List of files that are shared with you." : "Lista över filer som delas med dig.", + "Shared with others" : "Delas med andra", + "List of files that you shared with others." : "Lista över filer som du delat med andra.", + "Shared by link" : "Delat som länk", + "List of files that are shared by link." : "Lista över filer som delas via länk.", + "Deleted shares" : "Borttagna delningar", + "List of shares that you removed yourself from." : "Lista över delningar som du tagit bort dig själv från.", + "Pending shares" : "Väntande delningar", + "List of unapproved shares." : "Lista över ej godkända delningar.", "No entries found in this folder" : "Inga filer hittades i denna mapp", "Name" : "Namn", "Share time" : "Delningstid", @@ -270,6 +260,23 @@ "Uploaded files:" : "Uppladdade filer:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Genom att ladda upp filer godkänner du %1$sanvändarvillkoren %2$s.", "Add to your Nextcloud" : "Lägg till i molnet", + "Nothing shared with you yet" : "Inget delat med dig ännu", + "Files and folders others share with you will show up here" : "Filer och mappar som andra delar med dig kommer visas här", + "Nothing shared yet" : "Inget delat ännu", + "Files and folders you share will show up here" : "Filer och mappar som du delar kommer visas här", + "No shared links" : "Inga delade länkar", + "Files and folders you share by link will show up here" : "Filer och mappar som du delar som länkar kommer visas här", + "No deleted shares" : "Inga borttagna delningar", + "Shares you deleted will show up here" : "Borttagna delningar visas här", + "No pending shares" : "Inga väntande delningar", + "Shares you have received but not confirmed will show up here" : "Delningar du har mottagit men inte bekräftat visas här", + "No shares" : "Inga delningar", + "Shares will show up here" : "Delningar visas här", + "Restore" : "Återställ", + "Something happened. Unable to restore the share." : "Ett fel uppstod. Kan inte återställa delningen.", + "Something happened. Unable to accept the share." : "Ett fel uppstod. Kan inte acceptera delningen.", + "Something happened. Unable to reject the share." : "Ett fel uppstod. Kan inte avvisa delningen.", + "No expiration date set" : "Inget utgångsdatum satt", "Sharing %s failed because the back end does not support sciencemesh shares" : "Delning av %s misslyckades eftersom servern inte stödjer ScienceMesh-delningar", "One or more of your shares will expire tomorrow" : "En eller flera av dina delningar kommer att upphöra imorgon", "Science Mesh" : "ScienceMesh", diff --git a/apps/files_sharing/l10n/tr.js b/apps/files_sharing/l10n/tr.js index e04b0e1d354..91653c2fe3b 100644 --- a/apps/files_sharing/l10n/tr.js +++ b/apps/files_sharing/l10n/tr.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Sizinle paylaşılmış", - "Nothing shared with you yet" : "Sizinle henüz herhangi bir şey paylaşılmamış", - "Files and folders others share with you will show up here" : "Diğerlerinin sizinle paylaştığı dosya ve klasörler burada görüntülenir", - "Shared with others" : "Diğerleri ile paylaşılmış", - "Nothing shared yet" : "Henüz hiçbir şey paylaşılmamış", - "Files and folders you share will show up here" : "Paylaştığınız dosya ve klasörler burada görüntülenir", - "Shared by link" : "Bağlantı ile paylaşılmış", - "No shared links" : "Paylaşılmış bir bağlantı yok", - "Files and folders you share by link will show up here" : "Bağlantı ile paylaştığınız dosya ve klasörler burada görüntülenir", - "Deleted shares" : "Silinmiş paylaşımlar", - "No deleted shares" : "Silinmiş bir paylaşım yok", - "Shares you deleted will show up here" : "Sildiğiniz paylaşımlar burada görüntülenir", - "Pending shares" : "Bekleyen paylaşımlar", - "No pending shares" : "Bekleyen paylaşım yok", - "Shares you have received but not confirmed will show up here" : "Aldığınız ancak henüz kabul etmediğiniz paylaşımlar burada görüntülenir", - "Shares" : "Paylaşımlar", - "No shares" : "Henüz bir şey paylaşılmamış", - "Shares will show up here" : "Paylaşımlar burada görüntülenir", - "Restore" : "Geri yükle", - "Restore share" : "Paylaşımı geri yükle", - "Something happened. Unable to restore the share." : "Bir sorun çıktı. Paylaşım geri yüklenemedi.", - "Accept share" : "Paylaşımı kabul et", - "Something happened. Unable to accept the share." : "Bir sorun çıktı. Paylaşım kabul edilemedi.", - "Reject share" : "Paylaşımı reddet", - "Something happened. Unable to reject the share." : "Bir sorun çıktı. Paylaşım reddedilemedi.", "Waiting…" : "Bekleniyor…", "error" : "sorun", "finished" : "tamamlandı", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "{remote} konumunda uyumlu sunucu bulunamadı", "Invalid server URL" : "Sunucu adresi geçersiz", "Failed to add the public link to your Nextcloud" : "Herkese açık bağlantı Nextcould üzerine eklenemedi", - "No expiration date set" : "Son kullanma tarihi belirtilmemiş", - "Shared by" : "Paylaşan", "File shares" : "Dosya paylaşımları", "Downloaded via public link" : "Herkese açık bağlantı ile indirildi", "Downloaded by {email}" : "{email} tarafından indirildi", @@ -247,6 +220,7 @@ OC.L10N.register( "Share {propertyName} saved" : "{propertyName} paylaşımı kaydedildi", "Shared" : "Paylaşılan", "Share" : "Paylaş", + "Shared by" : "Paylaşan", "Shared with" : "Şunlarla paylaşılmış", "Password created successfully" : "Parola oluşturuldu", "Error generating password from password policy" : "Parola, parola ilkesine göre oluşturulurken sorun çıktı", @@ -254,6 +228,12 @@ OC.L10N.register( "Shared with you and {circle} by {owner}" : "{owner} tarafından sizinle ve {circle} çevresi ile paylaşılmış", "Shared with you and the conversation {conversation} by {owner}" : "{owner} tarafından sizinle ve {conversation} görüşmesi ile paylaştırılmış", "Shared with you in a conversation by {owner}" : "{owner} tarafından sizinle bir görüşmede paylaşılmış", + "Shares" : "Paylaşımlar", + "Shared with you" : "Sizinle paylaşılmış", + "Shared with others" : "Diğerleri ile paylaşılmış", + "Shared by link" : "Bağlantı ile paylaşılmış", + "Deleted shares" : "Silinmiş paylaşımlar", + "Pending shares" : "Bekleyen paylaşımlar", "No entries found in this folder" : "Bu klasörde herhangi bir kayıt yok", "Name" : "Ad", "Share time" : "Paylaşma zamanı", @@ -272,6 +252,23 @@ OC.L10N.register( "Uploaded files:" : "Yüklenmiş dosyalar:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Dosya yükleyerek %1$shizmet koşullarını%2$s kabul etmiş olursunuz.", "Add to your Nextcloud" : "Nextcloud hesabınıza ekleyin", + "Nothing shared with you yet" : "Sizinle henüz herhangi bir şey paylaşılmamış", + "Files and folders others share with you will show up here" : "Diğerlerinin sizinle paylaştığı dosya ve klasörler burada görüntülenir", + "Nothing shared yet" : "Henüz hiçbir şey paylaşılmamış", + "Files and folders you share will show up here" : "Paylaştığınız dosya ve klasörler burada görüntülenir", + "No shared links" : "Paylaşılmış bir bağlantı yok", + "Files and folders you share by link will show up here" : "Bağlantı ile paylaştığınız dosya ve klasörler burada görüntülenir", + "No deleted shares" : "Silinmiş bir paylaşım yok", + "Shares you deleted will show up here" : "Sildiğiniz paylaşımlar burada görüntülenir", + "No pending shares" : "Bekleyen paylaşım yok", + "Shares you have received but not confirmed will show up here" : "Aldığınız ancak henüz kabul etmediğiniz paylaşımlar burada görüntülenir", + "No shares" : "Henüz bir şey paylaşılmamış", + "Shares will show up here" : "Paylaşımlar burada görüntülenir", + "Restore" : "Geri yükle", + "Something happened. Unable to restore the share." : "Bir sorun çıktı. Paylaşım geri yüklenemedi.", + "Something happened. Unable to accept the share." : "Bir sorun çıktı. Paylaşım kabul edilemedi.", + "Something happened. Unable to reject the share." : "Bir sorun çıktı. Paylaşım reddedilemedi.", + "No expiration date set" : "Son kullanma tarihi belirtilmemiş", "Sharing %s failed because the back end does not support sciencemesh shares" : "Arka uç ScienceMesh paylaşımlarına izin vermediğinden %s paylaşılamadı", "One or more of your shares will expire tomorrow" : "Bir ya da daha çok paylaşımınızın geçerlilik süresi yarın dolacak", "Science Mesh" : "ScienceMesh", diff --git a/apps/files_sharing/l10n/tr.json b/apps/files_sharing/l10n/tr.json index f998fddd468..11cdf101cf1 100644 --- a/apps/files_sharing/l10n/tr.json +++ b/apps/files_sharing/l10n/tr.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Sizinle paylaşılmış", - "Nothing shared with you yet" : "Sizinle henüz herhangi bir şey paylaşılmamış", - "Files and folders others share with you will show up here" : "Diğerlerinin sizinle paylaştığı dosya ve klasörler burada görüntülenir", - "Shared with others" : "Diğerleri ile paylaşılmış", - "Nothing shared yet" : "Henüz hiçbir şey paylaşılmamış", - "Files and folders you share will show up here" : "Paylaştığınız dosya ve klasörler burada görüntülenir", - "Shared by link" : "Bağlantı ile paylaşılmış", - "No shared links" : "Paylaşılmış bir bağlantı yok", - "Files and folders you share by link will show up here" : "Bağlantı ile paylaştığınız dosya ve klasörler burada görüntülenir", - "Deleted shares" : "Silinmiş paylaşımlar", - "No deleted shares" : "Silinmiş bir paylaşım yok", - "Shares you deleted will show up here" : "Sildiğiniz paylaşımlar burada görüntülenir", - "Pending shares" : "Bekleyen paylaşımlar", - "No pending shares" : "Bekleyen paylaşım yok", - "Shares you have received but not confirmed will show up here" : "Aldığınız ancak henüz kabul etmediğiniz paylaşımlar burada görüntülenir", - "Shares" : "Paylaşımlar", - "No shares" : "Henüz bir şey paylaşılmamış", - "Shares will show up here" : "Paylaşımlar burada görüntülenir", - "Restore" : "Geri yükle", - "Restore share" : "Paylaşımı geri yükle", - "Something happened. Unable to restore the share." : "Bir sorun çıktı. Paylaşım geri yüklenemedi.", - "Accept share" : "Paylaşımı kabul et", - "Something happened. Unable to accept the share." : "Bir sorun çıktı. Paylaşım kabul edilemedi.", - "Reject share" : "Paylaşımı reddet", - "Something happened. Unable to reject the share." : "Bir sorun çıktı. Paylaşım reddedilemedi.", "Waiting…" : "Bekleniyor…", "error" : "sorun", "finished" : "tamamlandı", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "{remote} konumunda uyumlu sunucu bulunamadı", "Invalid server URL" : "Sunucu adresi geçersiz", "Failed to add the public link to your Nextcloud" : "Herkese açık bağlantı Nextcould üzerine eklenemedi", - "No expiration date set" : "Son kullanma tarihi belirtilmemiş", - "Shared by" : "Paylaşan", "File shares" : "Dosya paylaşımları", "Downloaded via public link" : "Herkese açık bağlantı ile indirildi", "Downloaded by {email}" : "{email} tarafından indirildi", @@ -245,6 +218,7 @@ "Share {propertyName} saved" : "{propertyName} paylaşımı kaydedildi", "Shared" : "Paylaşılan", "Share" : "Paylaş", + "Shared by" : "Paylaşan", "Shared with" : "Şunlarla paylaşılmış", "Password created successfully" : "Parola oluşturuldu", "Error generating password from password policy" : "Parola, parola ilkesine göre oluşturulurken sorun çıktı", @@ -252,6 +226,12 @@ "Shared with you and {circle} by {owner}" : "{owner} tarafından sizinle ve {circle} çevresi ile paylaşılmış", "Shared with you and the conversation {conversation} by {owner}" : "{owner} tarafından sizinle ve {conversation} görüşmesi ile paylaştırılmış", "Shared with you in a conversation by {owner}" : "{owner} tarafından sizinle bir görüşmede paylaşılmış", + "Shares" : "Paylaşımlar", + "Shared with you" : "Sizinle paylaşılmış", + "Shared with others" : "Diğerleri ile paylaşılmış", + "Shared by link" : "Bağlantı ile paylaşılmış", + "Deleted shares" : "Silinmiş paylaşımlar", + "Pending shares" : "Bekleyen paylaşımlar", "No entries found in this folder" : "Bu klasörde herhangi bir kayıt yok", "Name" : "Ad", "Share time" : "Paylaşma zamanı", @@ -270,6 +250,23 @@ "Uploaded files:" : "Yüklenmiş dosyalar:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Dosya yükleyerek %1$shizmet koşullarını%2$s kabul etmiş olursunuz.", "Add to your Nextcloud" : "Nextcloud hesabınıza ekleyin", + "Nothing shared with you yet" : "Sizinle henüz herhangi bir şey paylaşılmamış", + "Files and folders others share with you will show up here" : "Diğerlerinin sizinle paylaştığı dosya ve klasörler burada görüntülenir", + "Nothing shared yet" : "Henüz hiçbir şey paylaşılmamış", + "Files and folders you share will show up here" : "Paylaştığınız dosya ve klasörler burada görüntülenir", + "No shared links" : "Paylaşılmış bir bağlantı yok", + "Files and folders you share by link will show up here" : "Bağlantı ile paylaştığınız dosya ve klasörler burada görüntülenir", + "No deleted shares" : "Silinmiş bir paylaşım yok", + "Shares you deleted will show up here" : "Sildiğiniz paylaşımlar burada görüntülenir", + "No pending shares" : "Bekleyen paylaşım yok", + "Shares you have received but not confirmed will show up here" : "Aldığınız ancak henüz kabul etmediğiniz paylaşımlar burada görüntülenir", + "No shares" : "Henüz bir şey paylaşılmamış", + "Shares will show up here" : "Paylaşımlar burada görüntülenir", + "Restore" : "Geri yükle", + "Something happened. Unable to restore the share." : "Bir sorun çıktı. Paylaşım geri yüklenemedi.", + "Something happened. Unable to accept the share." : "Bir sorun çıktı. Paylaşım kabul edilemedi.", + "Something happened. Unable to reject the share." : "Bir sorun çıktı. Paylaşım reddedilemedi.", + "No expiration date set" : "Son kullanma tarihi belirtilmemiş", "Sharing %s failed because the back end does not support sciencemesh shares" : "Arka uç ScienceMesh paylaşımlarına izin vermediğinden %s paylaşılamadı", "One or more of your shares will expire tomorrow" : "Bir ya da daha çok paylaşımınızın geçerlilik süresi yarın dolacak", "Science Mesh" : "ScienceMesh", diff --git a/apps/files_sharing/l10n/uk.js b/apps/files_sharing/l10n/uk.js index b5916a0dc7d..22e2ccfa67b 100644 --- a/apps/files_sharing/l10n/uk.js +++ b/apps/files_sharing/l10n/uk.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Відкриті для мене", - "Nothing shared with you yet" : "З вами ще ніхто не поділився файлами", - "Files and folders others share with you will show up here" : "Спільні файли та каталоги, якими поділилися з вами, з’являться тут", - "Shared with others" : "Ви поділилися", - "Nothing shared yet" : "Поки немає спільних ресурсів", - "Files and folders you share will show up here" : "Файли та каталоги, якими ви поділилися, показуватимуться тут", - "Shared by link" : "Поділилися за посиланням", - "No shared links" : "Відсутні спільні посилання", - "Files and folders you share by link will show up here" : "Файли та каталоги, якими ви поділилися за посиланням, показуватимуться тут", - "Deleted shares" : "Більше недоступні", - "No deleted shares" : "Відсутні спільні каталоги чи файли, які було вилучено", - "Shares you deleted will show up here" : "Спільні каталоги чи файли, які ви вилучили, показуватимуться тут", - "Pending shares" : "Запити на доступ", - "No pending shares" : "Відсутні запити на доступ", - "Shares you have received but not confirmed will show up here" : "Спільні дані, які ви отримали, але не підтвердили, показуватимуться тут", - "Shares" : "Спільні", - "No shares" : "Відсутні спільні дані", - "Shares will show up here" : "Спільні дані показуватимуться тут", - "Restore" : "Відновити", - "Restore share" : "Відновити спільні дані", - "Something happened. Unable to restore the share." : "От халепа! Неможливо відновити спільні дані.", - "Accept share" : "Прийняти запит на спільні дані", - "Something happened. Unable to accept the share." : "От халепа! Неможливо прийняти дані, якими поділилися з вами.", - "Reject share" : "Відхилити запропоновані спільні дані", - "Something happened. Unable to reject the share." : "От халепа! Неможливо відхилити дані, якими поділилися з вами.", "Waiting…" : "Зачекайте...", "error" : "помилка", "finished" : "завершено", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "Відсутній сумісний сервер за адресою {remote}", "Invalid server URL" : "Недійсна адреса сервера URL", "Failed to add the public link to your Nextcloud" : "Не вдалося додати загальнодоступне посилання до вашого Nextcloud", - "No expiration date set" : "Не встановлено терміну дії", - "Shared by" : "Поділилися", "File shares" : "Спільні файли", "Downloaded via public link" : "Звантажено за публічним посиланням", "Downloaded by {email}" : "Завантажено через {email}", @@ -247,6 +220,7 @@ OC.L10N.register( "Share {propertyName} saved" : "Спільний ресурс {propertyName} збережено", "Shared" : "Спільні", "Share" : "Спільне", + "Shared by" : "Поділилися", "Shared with" : "Спільний доступ з", "Password created successfully" : "Успішно створено пароль", "Error generating password from password policy" : "Помилка під час створення пароля згідно з політикою паролів", @@ -254,6 +228,12 @@ OC.L10N.register( "Shared with you and {circle} by {owner}" : "{owner} надав доступ вам та колу {circle}", "Shared with you and the conversation {conversation} by {owner}" : "{owner} надав доступ вам та у чаті {conversation}", "Shared with you in a conversation by {owner}" : "{owner} поділився з вами у чаті", + "Shares" : "Спільні", + "Shared with you" : "Відкриті для мене", + "Shared with others" : "Ви поділилися", + "Shared by link" : "Поділилися за посиланням", + "Deleted shares" : "Більше недоступні", + "Pending shares" : "Запити на доступ", "No entries found in this folder" : "Записів не знайдено в цьому каталозі", "Name" : "Ім’я", "Share time" : "Поділилися", @@ -272,6 +252,23 @@ OC.L10N.register( "Uploaded files:" : "Завантажені файли:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Завантажуючи файли, ви погоджуєтеся з %1$sумовами користування%2$s.", "Add to your Nextcloud" : "Додати до вашої хмари Nextcloud", + "Nothing shared with you yet" : "З вами ще ніхто не поділився файлами", + "Files and folders others share with you will show up here" : "Спільні файли та каталоги, якими поділилися з вами, з’являться тут", + "Nothing shared yet" : "Поки немає спільних ресурсів", + "Files and folders you share will show up here" : "Файли та каталоги, якими ви поділилися, показуватимуться тут", + "No shared links" : "Відсутні спільні посилання", + "Files and folders you share by link will show up here" : "Файли та каталоги, якими ви поділилися за посиланням, показуватимуться тут", + "No deleted shares" : "Відсутні спільні каталоги чи файли, які було вилучено", + "Shares you deleted will show up here" : "Спільні каталоги чи файли, які ви вилучили, показуватимуться тут", + "No pending shares" : "Відсутні запити на доступ", + "Shares you have received but not confirmed will show up here" : "Спільні дані, які ви отримали, але не підтвердили, показуватимуться тут", + "No shares" : "Відсутні спільні дані", + "Shares will show up here" : "Спільні дані показуватимуться тут", + "Restore" : "Відновити", + "Something happened. Unable to restore the share." : "От халепа! Неможливо відновити спільні дані.", + "Something happened. Unable to accept the share." : "От халепа! Неможливо прийняти дані, якими поділилися з вами.", + "Something happened. Unable to reject the share." : "От халепа! Неможливо відхилити дані, якими поділилися з вами.", + "No expiration date set" : "Не встановлено терміну дії", "Sharing %s failed because the back end does not support sciencemesh shares" : "Поширення %s не вдалося, оскільки бекенд не підтримує ресурси типа ScienceMesh", "One or more of your shares will expire tomorrow" : "Термін дії одного чи кількох ваших спільних ресурсів спливає завтра", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/uk.json b/apps/files_sharing/l10n/uk.json index 44d675a48c8..1cdcbff531b 100644 --- a/apps/files_sharing/l10n/uk.json +++ b/apps/files_sharing/l10n/uk.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "Відкриті для мене", - "Nothing shared with you yet" : "З вами ще ніхто не поділився файлами", - "Files and folders others share with you will show up here" : "Спільні файли та каталоги, якими поділилися з вами, з’являться тут", - "Shared with others" : "Ви поділилися", - "Nothing shared yet" : "Поки немає спільних ресурсів", - "Files and folders you share will show up here" : "Файли та каталоги, якими ви поділилися, показуватимуться тут", - "Shared by link" : "Поділилися за посиланням", - "No shared links" : "Відсутні спільні посилання", - "Files and folders you share by link will show up here" : "Файли та каталоги, якими ви поділилися за посиланням, показуватимуться тут", - "Deleted shares" : "Більше недоступні", - "No deleted shares" : "Відсутні спільні каталоги чи файли, які було вилучено", - "Shares you deleted will show up here" : "Спільні каталоги чи файли, які ви вилучили, показуватимуться тут", - "Pending shares" : "Запити на доступ", - "No pending shares" : "Відсутні запити на доступ", - "Shares you have received but not confirmed will show up here" : "Спільні дані, які ви отримали, але не підтвердили, показуватимуться тут", - "Shares" : "Спільні", - "No shares" : "Відсутні спільні дані", - "Shares will show up here" : "Спільні дані показуватимуться тут", - "Restore" : "Відновити", - "Restore share" : "Відновити спільні дані", - "Something happened. Unable to restore the share." : "От халепа! Неможливо відновити спільні дані.", - "Accept share" : "Прийняти запит на спільні дані", - "Something happened. Unable to accept the share." : "От халепа! Неможливо прийняти дані, якими поділилися з вами.", - "Reject share" : "Відхилити запропоновані спільні дані", - "Something happened. Unable to reject the share." : "От халепа! Неможливо відхилити дані, якими поділилися з вами.", "Waiting…" : "Зачекайте...", "error" : "помилка", "finished" : "завершено", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "Відсутній сумісний сервер за адресою {remote}", "Invalid server URL" : "Недійсна адреса сервера URL", "Failed to add the public link to your Nextcloud" : "Не вдалося додати загальнодоступне посилання до вашого Nextcloud", - "No expiration date set" : "Не встановлено терміну дії", - "Shared by" : "Поділилися", "File shares" : "Спільні файли", "Downloaded via public link" : "Звантажено за публічним посиланням", "Downloaded by {email}" : "Завантажено через {email}", @@ -245,6 +218,7 @@ "Share {propertyName} saved" : "Спільний ресурс {propertyName} збережено", "Shared" : "Спільні", "Share" : "Спільне", + "Shared by" : "Поділилися", "Shared with" : "Спільний доступ з", "Password created successfully" : "Успішно створено пароль", "Error generating password from password policy" : "Помилка під час створення пароля згідно з політикою паролів", @@ -252,6 +226,12 @@ "Shared with you and {circle} by {owner}" : "{owner} надав доступ вам та колу {circle}", "Shared with you and the conversation {conversation} by {owner}" : "{owner} надав доступ вам та у чаті {conversation}", "Shared with you in a conversation by {owner}" : "{owner} поділився з вами у чаті", + "Shares" : "Спільні", + "Shared with you" : "Відкриті для мене", + "Shared with others" : "Ви поділилися", + "Shared by link" : "Поділилися за посиланням", + "Deleted shares" : "Більше недоступні", + "Pending shares" : "Запити на доступ", "No entries found in this folder" : "Записів не знайдено в цьому каталозі", "Name" : "Ім’я", "Share time" : "Поділилися", @@ -270,6 +250,23 @@ "Uploaded files:" : "Завантажені файли:", "By uploading files, you agree to the %1$sterms of service%2$s." : "Завантажуючи файли, ви погоджуєтеся з %1$sумовами користування%2$s.", "Add to your Nextcloud" : "Додати до вашої хмари Nextcloud", + "Nothing shared with you yet" : "З вами ще ніхто не поділився файлами", + "Files and folders others share with you will show up here" : "Спільні файли та каталоги, якими поділилися з вами, з’являться тут", + "Nothing shared yet" : "Поки немає спільних ресурсів", + "Files and folders you share will show up here" : "Файли та каталоги, якими ви поділилися, показуватимуться тут", + "No shared links" : "Відсутні спільні посилання", + "Files and folders you share by link will show up here" : "Файли та каталоги, якими ви поділилися за посиланням, показуватимуться тут", + "No deleted shares" : "Відсутні спільні каталоги чи файли, які було вилучено", + "Shares you deleted will show up here" : "Спільні каталоги чи файли, які ви вилучили, показуватимуться тут", + "No pending shares" : "Відсутні запити на доступ", + "Shares you have received but not confirmed will show up here" : "Спільні дані, які ви отримали, але не підтвердили, показуватимуться тут", + "No shares" : "Відсутні спільні дані", + "Shares will show up here" : "Спільні дані показуватимуться тут", + "Restore" : "Відновити", + "Something happened. Unable to restore the share." : "От халепа! Неможливо відновити спільні дані.", + "Something happened. Unable to accept the share." : "От халепа! Неможливо прийняти дані, якими поділилися з вами.", + "Something happened. Unable to reject the share." : "От халепа! Неможливо відхилити дані, якими поділилися з вами.", + "No expiration date set" : "Не встановлено терміну дії", "Sharing %s failed because the back end does not support sciencemesh shares" : "Поширення %s не вдалося, оскільки бекенд не підтримує ресурси типа ScienceMesh", "One or more of your shares will expire tomorrow" : "Термін дії одного чи кількох ваших спільних ресурсів спливає завтра", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/zh_CN.js b/apps/files_sharing/l10n/zh_CN.js index 68fe9c6c8e6..149e335607a 100644 --- a/apps/files_sharing/l10n/zh_CN.js +++ b/apps/files_sharing/l10n/zh_CN.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "共享给您的", - "Nothing shared with you yet" : "您还没有收到任何共享的文件", - "Files and folders others share with you will show up here" : "其它人共享给您的文件和文件夹将显示在这里", - "Shared with others" : "您共享的文件", - "Nothing shared yet" : "还没有共享过文件", - "Files and folders you share will show up here" : "您共享的文件和文件夹将显示在这里", - "Shared by link" : "通过链接共享", - "No shared links" : "无共享链接", - "Files and folders you share by link will show up here" : "您通过链接共享的文件和文件夹将显示在这里", - "Deleted shares" : "已删除的共享", - "No deleted shares" : "没有删除的共享", - "Shares you deleted will show up here" : "您删除的共享将在这里显示", - "Pending shares" : "待定共享", - "No pending shares" : "没有待定共享", - "Shares you have received but not confirmed will show up here" : "您收到但未确认的共享将显示在这里", - "Shares" : "共享", - "No shares" : "没有共享", - "Shares will show up here" : "共享将在这里显示", - "Restore" : "恢复", - "Restore share" : "恢复共享", - "Something happened. Unable to restore the share." : "发生了问题。无法恢复该共享。", - "Accept share" : "接受共享", - "Something happened. Unable to accept the share." : "发生了问题。无法接受该共享。", - "Reject share" : "拒绝共享", - "Something happened. Unable to reject the share." : "发生了问题。无法拒绝该共享。", "Waiting…" : "等待中...", "error" : "错误", "finished" : "完成", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : " {remote} 未发现匹配的服务器", "Invalid server URL" : "无效的服务器地址", "Failed to add the public link to your Nextcloud" : "添加公开链接到您的Nextcloud失败", - "No expiration date set" : "未设置失效时间", - "Shared by" : "共享人", "File shares" : "文件共享", "Downloaded via public link" : "通过公开链接下载", "Downloaded by {email}" : "已被 {email} 下载", @@ -247,6 +220,7 @@ OC.L10N.register( "Share {propertyName} saved" : "共享 {propertyName} 已保存", "Shared" : "已共享", "Share" : "共享", + "Shared by" : "共享人", "Shared with" : "共享给", "Password created successfully" : "成功创建密码", "Error generating password from password policy" : "从密码策略生成密码时出错", @@ -254,6 +228,12 @@ OC.L10N.register( "Shared with you and {circle} by {owner}" : "{owner} 共享给您及 {circle}", "Shared with you and the conversation {conversation} by {owner}" : "由{owner} 共享给您及对话 {conversation}", "Shared with you in a conversation by {owner}" : "由 {owner} 在一个会话中共享给您", + "Shares" : "共享", + "Shared with you" : "共享给您的", + "Shared with others" : "您共享的文件", + "Shared by link" : "通过链接共享", + "Deleted shares" : "已删除的共享", + "Pending shares" : "待定共享", "No entries found in this folder" : "在此文件夹中找不到项目", "Name" : "名称", "Share time" : "共享时间", @@ -272,6 +252,23 @@ OC.L10N.register( "Uploaded files:" : "上传的文件: ", "By uploading files, you agree to the %1$sterms of service%2$s." : "通过上传文件,您同意了 %1$s 服务条款 %2$s。", "Add to your Nextcloud" : "添加到您的 Nextcloud", + "Nothing shared with you yet" : "您还没有收到任何共享的文件", + "Files and folders others share with you will show up here" : "其它人共享给您的文件和文件夹将显示在这里", + "Nothing shared yet" : "还没有共享过文件", + "Files and folders you share will show up here" : "您共享的文件和文件夹将显示在这里", + "No shared links" : "无共享链接", + "Files and folders you share by link will show up here" : "您通过链接共享的文件和文件夹将显示在这里", + "No deleted shares" : "没有删除的共享", + "Shares you deleted will show up here" : "您删除的共享将在这里显示", + "No pending shares" : "没有待定共享", + "Shares you have received but not confirmed will show up here" : "您收到但未确认的共享将显示在这里", + "No shares" : "没有共享", + "Shares will show up here" : "共享将在这里显示", + "Restore" : "恢复", + "Something happened. Unable to restore the share." : "发生了问题。无法恢复该共享。", + "Something happened. Unable to accept the share." : "发生了问题。无法接受该共享。", + "Something happened. Unable to reject the share." : "发生了问题。无法拒绝该共享。", + "No expiration date set" : "未设置失效时间", "Sharing %s failed because the back end does not support sciencemesh shares" : "共享 %s 失败,因为后端不支持 ScienceMesh 共享。", "One or more of your shares will expire tomorrow" : "您的一个或多个共享将在明天过期", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/zh_CN.json b/apps/files_sharing/l10n/zh_CN.json index aba28589a46..8ac977e310d 100644 --- a/apps/files_sharing/l10n/zh_CN.json +++ b/apps/files_sharing/l10n/zh_CN.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "共享给您的", - "Nothing shared with you yet" : "您还没有收到任何共享的文件", - "Files and folders others share with you will show up here" : "其它人共享给您的文件和文件夹将显示在这里", - "Shared with others" : "您共享的文件", - "Nothing shared yet" : "还没有共享过文件", - "Files and folders you share will show up here" : "您共享的文件和文件夹将显示在这里", - "Shared by link" : "通过链接共享", - "No shared links" : "无共享链接", - "Files and folders you share by link will show up here" : "您通过链接共享的文件和文件夹将显示在这里", - "Deleted shares" : "已删除的共享", - "No deleted shares" : "没有删除的共享", - "Shares you deleted will show up here" : "您删除的共享将在这里显示", - "Pending shares" : "待定共享", - "No pending shares" : "没有待定共享", - "Shares you have received but not confirmed will show up here" : "您收到但未确认的共享将显示在这里", - "Shares" : "共享", - "No shares" : "没有共享", - "Shares will show up here" : "共享将在这里显示", - "Restore" : "恢复", - "Restore share" : "恢复共享", - "Something happened. Unable to restore the share." : "发生了问题。无法恢复该共享。", - "Accept share" : "接受共享", - "Something happened. Unable to accept the share." : "发生了问题。无法接受该共享。", - "Reject share" : "拒绝共享", - "Something happened. Unable to reject the share." : "发生了问题。无法拒绝该共享。", "Waiting…" : "等待中...", "error" : "错误", "finished" : "完成", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : " {remote} 未发现匹配的服务器", "Invalid server URL" : "无效的服务器地址", "Failed to add the public link to your Nextcloud" : "添加公开链接到您的Nextcloud失败", - "No expiration date set" : "未设置失效时间", - "Shared by" : "共享人", "File shares" : "文件共享", "Downloaded via public link" : "通过公开链接下载", "Downloaded by {email}" : "已被 {email} 下载", @@ -245,6 +218,7 @@ "Share {propertyName} saved" : "共享 {propertyName} 已保存", "Shared" : "已共享", "Share" : "共享", + "Shared by" : "共享人", "Shared with" : "共享给", "Password created successfully" : "成功创建密码", "Error generating password from password policy" : "从密码策略生成密码时出错", @@ -252,6 +226,12 @@ "Shared with you and {circle} by {owner}" : "{owner} 共享给您及 {circle}", "Shared with you and the conversation {conversation} by {owner}" : "由{owner} 共享给您及对话 {conversation}", "Shared with you in a conversation by {owner}" : "由 {owner} 在一个会话中共享给您", + "Shares" : "共享", + "Shared with you" : "共享给您的", + "Shared with others" : "您共享的文件", + "Shared by link" : "通过链接共享", + "Deleted shares" : "已删除的共享", + "Pending shares" : "待定共享", "No entries found in this folder" : "在此文件夹中找不到项目", "Name" : "名称", "Share time" : "共享时间", @@ -270,6 +250,23 @@ "Uploaded files:" : "上传的文件: ", "By uploading files, you agree to the %1$sterms of service%2$s." : "通过上传文件,您同意了 %1$s 服务条款 %2$s。", "Add to your Nextcloud" : "添加到您的 Nextcloud", + "Nothing shared with you yet" : "您还没有收到任何共享的文件", + "Files and folders others share with you will show up here" : "其它人共享给您的文件和文件夹将显示在这里", + "Nothing shared yet" : "还没有共享过文件", + "Files and folders you share will show up here" : "您共享的文件和文件夹将显示在这里", + "No shared links" : "无共享链接", + "Files and folders you share by link will show up here" : "您通过链接共享的文件和文件夹将显示在这里", + "No deleted shares" : "没有删除的共享", + "Shares you deleted will show up here" : "您删除的共享将在这里显示", + "No pending shares" : "没有待定共享", + "Shares you have received but not confirmed will show up here" : "您收到但未确认的共享将显示在这里", + "No shares" : "没有共享", + "Shares will show up here" : "共享将在这里显示", + "Restore" : "恢复", + "Something happened. Unable to restore the share." : "发生了问题。无法恢复该共享。", + "Something happened. Unable to accept the share." : "发生了问题。无法接受该共享。", + "Something happened. Unable to reject the share." : "发生了问题。无法拒绝该共享。", + "No expiration date set" : "未设置失效时间", "Sharing %s failed because the back end does not support sciencemesh shares" : "共享 %s 失败,因为后端不支持 ScienceMesh 共享。", "One or more of your shares will expire tomorrow" : "您的一个或多个共享将在明天过期", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/zh_HK.js b/apps/files_sharing/l10n/zh_HK.js index 9df6d51a4d4..f59ee40c684 100644 --- a/apps/files_sharing/l10n/zh_HK.js +++ b/apps/files_sharing/l10n/zh_HK.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "與您分享", - "Nothing shared with you yet" : "目前沒有任何與您分享的內容", - "Files and folders others share with you will show up here" : "與您分享的檔案與資料夾將會顯示在這裡", - "Shared with others" : "與其他人分享", - "Nothing shared yet" : "目前沒有分享內容", - "Files and folders you share will show up here" : "您分享的檔案與資料夾將會顯示在這裡", - "Shared by link" : "由連結分享", - "No shared links" : "沒有已分享的連結", - "Files and folders you share by link will show up here" : "您分享的檔案與資料夾連結將會顯示在這裡", - "Deleted shares" : "移除分享", - "No deleted shares" : "沒有移除的分享", - "Shares you deleted will show up here" : "您刪除的分享會在此顯示", - "Pending shares" : "等待分享", - "No pending shares" : "沒有待處理的分享", - "Shares you have received but not confirmed will show up here" : "您收到但尚未確認的分享將會在此顯示", - "Shares" : "分享", - "No shares" : "無分享", - "Shares will show up here" : "分享將會在此顯示", - "Restore" : "回復", - "Restore share" : "還原分享", - "Something happened. Unable to restore the share." : "出了些狀況,無法還原分享。", - "Accept share" : "接受分享", - "Something happened. Unable to accept the share." : "好像有東西出錯了。無法接受分享。", - "Reject share" : "拒絕分享", - "Something happened. Unable to reject the share." : "好像有東西出錯了。無法拒絕分享。", "Waiting…" : "正在等待……", "error" : "錯誤", "finished" : "已結束", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "沒有在 {remote} 找到相容的伺服器", "Invalid server URL" : "無效的伺服器 URL", "Failed to add the public link to your Nextcloud" : "無法將公開連結加入您的 Nextcloud", - "No expiration date set" : "未指定到期日", - "Shared by" : "分享自", "File shares" : "檔案分享", "Downloaded via public link" : "透過公用連結下載", "Downloaded by {email}" : "{email} 已下載", @@ -237,6 +210,9 @@ OC.L10N.register( "Expires {relativetime}" : "有效期至 {relativetime}", "this share just expired." : "此分享剛過期。", "Shared with you by {owner}" : "{owner} 已經和您分享", + "_Accept share_::_Accept shares_" : ["接受分享"], + "_Reject share_::_Reject shares_" : ["拒絕分享"], + "_Restore share_::_Restore shares_" : ["還原分享"], "Link to a file" : "連結到一個檔案", "Error creating the share: {errorMessage}" : "創建分享出錯:{errorMessage}", "Error creating the share" : "創建分享出錯", @@ -247,6 +223,7 @@ OC.L10N.register( "Share {propertyName} saved" : "分享 {propertyName} 已保存", "Shared" : "已分享", "Share" : "分享", + "Shared by" : "分享自", "Shared with" : "分享給", "Password created successfully" : "成功創建了密碼", "Error generating password from password policy" : "從密碼策略生成密碼時出錯", @@ -254,6 +231,18 @@ OC.L10N.register( "Shared with you and {circle} by {owner}" : "{owner} 分享給您和 {circle}", "Shared with you and the conversation {conversation} by {owner}" : "{owner} 分享給您和 {conversation} 對話", "Shared with you in a conversation by {owner}" : "{owner} 在對話中分享給您", + "Shares" : "分享", + "Overview of shared files." : "已分享檔案的概覽。", + "Shared with you" : "與您分享", + "List of files that are shared with you." : "與您分享的檔案清單。", + "Shared with others" : "與其他人分享", + "List of files that you shared with others." : "您與其他人分享的檔案清單。", + "Shared by link" : "由連結分享", + "List of files that are shared by link." : "透過連結分享的檔案清單。", + "Deleted shares" : "移除分享", + "List of shares that you removed yourself from." : "您將您自己從其中移除的分享清單。", + "Pending shares" : "等待分享", + "List of unapproved shares." : "未批准的分享清單。", "No entries found in this folder" : "在此資料夾中沒有任何項目", "Name" : "名稱", "Share time" : "分享時間", @@ -272,6 +261,23 @@ OC.L10N.register( "Uploaded files:" : "已上傳的檔案:", "By uploading files, you agree to the %1$sterms of service%2$s." : "上傳檔案即表示您同意 %1$s服務條款%2$s。 ", "Add to your Nextcloud" : "加入到您的 Nextcloud", + "Nothing shared with you yet" : "目前沒有任何與您分享的內容", + "Files and folders others share with you will show up here" : "與您分享的檔案與資料夾將會顯示在這裡", + "Nothing shared yet" : "目前沒有分享內容", + "Files and folders you share will show up here" : "您分享的檔案與資料夾將會顯示在這裡", + "No shared links" : "沒有已分享的連結", + "Files and folders you share by link will show up here" : "您分享的檔案與資料夾連結將會顯示在這裡", + "No deleted shares" : "沒有移除的分享", + "Shares you deleted will show up here" : "您刪除的分享會在此顯示", + "No pending shares" : "沒有待處理的分享", + "Shares you have received but not confirmed will show up here" : "您收到但尚未確認的分享將會在此顯示", + "No shares" : "無分享", + "Shares will show up here" : "分享將會在此顯示", + "Restore" : "回復", + "Something happened. Unable to restore the share." : "出了些狀況,無法還原分享。", + "Something happened. Unable to accept the share." : "好像有東西出錯了。無法接受分享。", + "Something happened. Unable to reject the share." : "好像有東西出錯了。無法拒絕分享。", + "No expiration date set" : "未指定到期日", "Sharing %s failed because the back end does not support sciencemesh shares" : "分享 %s 失敗,因為後端不支援 Science Mesh 分享", "One or more of your shares will expire tomorrow" : "您的一個或多個分享將於明日到期", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/zh_HK.json b/apps/files_sharing/l10n/zh_HK.json index e81eef7f152..9e0654311a3 100644 --- a/apps/files_sharing/l10n/zh_HK.json +++ b/apps/files_sharing/l10n/zh_HK.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "與您分享", - "Nothing shared with you yet" : "目前沒有任何與您分享的內容", - "Files and folders others share with you will show up here" : "與您分享的檔案與資料夾將會顯示在這裡", - "Shared with others" : "與其他人分享", - "Nothing shared yet" : "目前沒有分享內容", - "Files and folders you share will show up here" : "您分享的檔案與資料夾將會顯示在這裡", - "Shared by link" : "由連結分享", - "No shared links" : "沒有已分享的連結", - "Files and folders you share by link will show up here" : "您分享的檔案與資料夾連結將會顯示在這裡", - "Deleted shares" : "移除分享", - "No deleted shares" : "沒有移除的分享", - "Shares you deleted will show up here" : "您刪除的分享會在此顯示", - "Pending shares" : "等待分享", - "No pending shares" : "沒有待處理的分享", - "Shares you have received but not confirmed will show up here" : "您收到但尚未確認的分享將會在此顯示", - "Shares" : "分享", - "No shares" : "無分享", - "Shares will show up here" : "分享將會在此顯示", - "Restore" : "回復", - "Restore share" : "還原分享", - "Something happened. Unable to restore the share." : "出了些狀況,無法還原分享。", - "Accept share" : "接受分享", - "Something happened. Unable to accept the share." : "好像有東西出錯了。無法接受分享。", - "Reject share" : "拒絕分享", - "Something happened. Unable to reject the share." : "好像有東西出錯了。無法拒絕分享。", "Waiting…" : "正在等待……", "error" : "錯誤", "finished" : "已結束", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "沒有在 {remote} 找到相容的伺服器", "Invalid server URL" : "無效的伺服器 URL", "Failed to add the public link to your Nextcloud" : "無法將公開連結加入您的 Nextcloud", - "No expiration date set" : "未指定到期日", - "Shared by" : "分享自", "File shares" : "檔案分享", "Downloaded via public link" : "透過公用連結下載", "Downloaded by {email}" : "{email} 已下載", @@ -235,6 +208,9 @@ "Expires {relativetime}" : "有效期至 {relativetime}", "this share just expired." : "此分享剛過期。", "Shared with you by {owner}" : "{owner} 已經和您分享", + "_Accept share_::_Accept shares_" : ["接受分享"], + "_Reject share_::_Reject shares_" : ["拒絕分享"], + "_Restore share_::_Restore shares_" : ["還原分享"], "Link to a file" : "連結到一個檔案", "Error creating the share: {errorMessage}" : "創建分享出錯:{errorMessage}", "Error creating the share" : "創建分享出錯", @@ -245,6 +221,7 @@ "Share {propertyName} saved" : "分享 {propertyName} 已保存", "Shared" : "已分享", "Share" : "分享", + "Shared by" : "分享自", "Shared with" : "分享給", "Password created successfully" : "成功創建了密碼", "Error generating password from password policy" : "從密碼策略生成密碼時出錯", @@ -252,6 +229,18 @@ "Shared with you and {circle} by {owner}" : "{owner} 分享給您和 {circle}", "Shared with you and the conversation {conversation} by {owner}" : "{owner} 分享給您和 {conversation} 對話", "Shared with you in a conversation by {owner}" : "{owner} 在對話中分享給您", + "Shares" : "分享", + "Overview of shared files." : "已分享檔案的概覽。", + "Shared with you" : "與您分享", + "List of files that are shared with you." : "與您分享的檔案清單。", + "Shared with others" : "與其他人分享", + "List of files that you shared with others." : "您與其他人分享的檔案清單。", + "Shared by link" : "由連結分享", + "List of files that are shared by link." : "透過連結分享的檔案清單。", + "Deleted shares" : "移除分享", + "List of shares that you removed yourself from." : "您將您自己從其中移除的分享清單。", + "Pending shares" : "等待分享", + "List of unapproved shares." : "未批准的分享清單。", "No entries found in this folder" : "在此資料夾中沒有任何項目", "Name" : "名稱", "Share time" : "分享時間", @@ -270,6 +259,23 @@ "Uploaded files:" : "已上傳的檔案:", "By uploading files, you agree to the %1$sterms of service%2$s." : "上傳檔案即表示您同意 %1$s服務條款%2$s。 ", "Add to your Nextcloud" : "加入到您的 Nextcloud", + "Nothing shared with you yet" : "目前沒有任何與您分享的內容", + "Files and folders others share with you will show up here" : "與您分享的檔案與資料夾將會顯示在這裡", + "Nothing shared yet" : "目前沒有分享內容", + "Files and folders you share will show up here" : "您分享的檔案與資料夾將會顯示在這裡", + "No shared links" : "沒有已分享的連結", + "Files and folders you share by link will show up here" : "您分享的檔案與資料夾連結將會顯示在這裡", + "No deleted shares" : "沒有移除的分享", + "Shares you deleted will show up here" : "您刪除的分享會在此顯示", + "No pending shares" : "沒有待處理的分享", + "Shares you have received but not confirmed will show up here" : "您收到但尚未確認的分享將會在此顯示", + "No shares" : "無分享", + "Shares will show up here" : "分享將會在此顯示", + "Restore" : "回復", + "Something happened. Unable to restore the share." : "出了些狀況,無法還原分享。", + "Something happened. Unable to accept the share." : "好像有東西出錯了。無法接受分享。", + "Something happened. Unable to reject the share." : "好像有東西出錯了。無法拒絕分享。", + "No expiration date set" : "未指定到期日", "Sharing %s failed because the back end does not support sciencemesh shares" : "分享 %s 失敗,因為後端不支援 Science Mesh 分享", "One or more of your shares will expire tomorrow" : "您的一個或多個分享將於明日到期", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/zh_TW.js b/apps/files_sharing/l10n/zh_TW.js index 491dec93a76..b8f2d5ff708 100644 --- a/apps/files_sharing/l10n/zh_TW.js +++ b/apps/files_sharing/l10n/zh_TW.js @@ -1,31 +1,6 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "與您分享", - "Nothing shared with you yet" : "目前沒有任何與您分享的內容", - "Files and folders others share with you will show up here" : "與您分享的檔案與資料夾將會顯示在這裡", - "Shared with others" : "與其他人分享", - "Nothing shared yet" : "目前沒有分享內容", - "Files and folders you share will show up here" : "您分享的檔案與資料夾將會顯示在這裡", - "Shared by link" : "由連結分享", - "No shared links" : "沒有已分享的連結", - "Files and folders you share by link will show up here" : "您分享的檔案與資料夾連結將會顯示在這裡", - "Deleted shares" : "已刪除的分享", - "No deleted shares" : "沒有已刪除的分享", - "Shares you deleted will show up here" : "您刪除的分享會在此顯示", - "Pending shares" : "擱置中的分享", - "No pending shares" : "沒有擱置中的分享", - "Shares you have received but not confirmed will show up here" : "您收到但尚未確認的分享將會在此顯示", - "Shares" : "分享", - "No shares" : "無分享", - "Shares will show up here" : "分享將會在此顯示", - "Restore" : "還原", - "Restore share" : "還原分享", - "Something happened. Unable to restore the share." : "好像有東西出錯了。無法還原分享。", - "Accept share" : "接受分享", - "Something happened. Unable to accept the share." : "好像有東西出錯了。無法接受分享。", - "Reject share" : "拒絕分享", - "Something happened. Unable to reject the share." : "好像有東西出錯了。無法拒絕分享。", "Waiting…" : "正在等待……", "error" : "錯誤", "finished" : "已結束", @@ -40,8 +15,6 @@ OC.L10N.register( "No compatible server found at {remote}" : "在 {remote} 找不到相容的伺服器", "Invalid server URL" : "無效的伺服器 URL", "Failed to add the public link to your Nextcloud" : "無法將公開連結新增到您的 Nextcloud", - "No expiration date set" : "未指定到期日", - "Shared by" : "分享自", "File shares" : "檔案分享", "Downloaded via public link" : "透過公開連結下載", "Downloaded by {email}" : "{email} 已下載", @@ -237,6 +210,10 @@ OC.L10N.register( "Expires {relativetime}" : "過期於 {relativetime}", "this share just expired." : "此分享剛過期。", "Shared with you by {owner}" : "{owner} 已經和您分享", + "_Accept share_::_Accept shares_" : ["接受分享"], + "Open in files" : "在檔案中開啟", + "_Reject share_::_Reject shares_" : ["拒絕分享"], + "_Restore share_::_Restore shares_" : ["還原分享"], "Link to a file" : "檔案連結", "Error creating the share: {errorMessage}" : "建立分享時發生錯誤:{errorMessage}", "Error creating the share" : "建立分享時發生錯誤", @@ -247,6 +224,7 @@ OC.L10N.register( "Share {propertyName} saved" : "分享 {propertyName} 已儲存", "Shared" : "已分享", "Share" : "分享", + "Shared by" : "分享自", "Shared with" : "分享給", "Password created successfully" : "成功建立密碼", "Error generating password from password policy" : "從密碼策略產生密碼時發生錯誤", @@ -254,6 +232,18 @@ OC.L10N.register( "Shared with you and {circle} by {owner}" : "{owner} 分享給您和 {circle}", "Shared with you and the conversation {conversation} by {owner}" : "{owner} 分享給您和 {conversation} 對話", "Shared with you in a conversation by {owner}" : "{owner} 在對話中分享給您", + "Shares" : "分享", + "Overview of shared files." : "已分享檔案的概覽。", + "Shared with you" : "與您分享", + "List of files that are shared with you." : "與您分享的檔案清單。", + "Shared with others" : "與其他人分享", + "List of files that you shared with others." : "您與其他人分享的檔案清單。", + "Shared by link" : "由連結分享", + "List of files that are shared by link." : "透過連結分享的檔案清單。", + "Deleted shares" : "已刪除的分享", + "List of shares that you removed yourself from." : "您將您自己從其中移除的分享清單。", + "Pending shares" : "擱置中的分享", + "List of unapproved shares." : "未批准的分享清單。", "No entries found in this folder" : "在此資料夾中沒有任何項目", "Name" : "名稱", "Share time" : "分享時間", @@ -272,6 +262,23 @@ OC.L10N.register( "Uploaded files:" : "已上傳的檔案:", "By uploading files, you agree to the %1$sterms of service%2$s." : "上傳檔案即表示您同意%1$s服務條款%2$s。", "Add to your Nextcloud" : "新增到您的 Nextcloud", + "Nothing shared with you yet" : "目前沒有任何與您分享的內容", + "Files and folders others share with you will show up here" : "與您分享的檔案與資料夾將會顯示在這裡", + "Nothing shared yet" : "目前沒有分享內容", + "Files and folders you share will show up here" : "您分享的檔案與資料夾將會顯示在這裡", + "No shared links" : "沒有已分享的連結", + "Files and folders you share by link will show up here" : "您分享的檔案與資料夾連結將會顯示在這裡", + "No deleted shares" : "沒有已刪除的分享", + "Shares you deleted will show up here" : "您刪除的分享會在此顯示", + "No pending shares" : "沒有擱置中的分享", + "Shares you have received but not confirmed will show up here" : "您收到但尚未確認的分享將會在此顯示", + "No shares" : "無分享", + "Shares will show up here" : "分享將會在此顯示", + "Restore" : "還原", + "Something happened. Unable to restore the share." : "好像有東西出錯了。無法還原分享。", + "Something happened. Unable to accept the share." : "好像有東西出錯了。無法接受分享。", + "Something happened. Unable to reject the share." : "好像有東西出錯了。無法拒絕分享。", + "No expiration date set" : "未指定到期日", "Sharing %s failed because the back end does not support sciencemesh shares" : "分享 %s 失敗,因為後端不支援 sciencemesh 分享", "One or more of your shares will expire tomorrow" : "您的一個或多個分享將於明天到期", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/l10n/zh_TW.json b/apps/files_sharing/l10n/zh_TW.json index 3848b466536..2c5da3ad308 100644 --- a/apps/files_sharing/l10n/zh_TW.json +++ b/apps/files_sharing/l10n/zh_TW.json @@ -1,29 +1,4 @@ { "translations": { - "Shared with you" : "與您分享", - "Nothing shared with you yet" : "目前沒有任何與您分享的內容", - "Files and folders others share with you will show up here" : "與您分享的檔案與資料夾將會顯示在這裡", - "Shared with others" : "與其他人分享", - "Nothing shared yet" : "目前沒有分享內容", - "Files and folders you share will show up here" : "您分享的檔案與資料夾將會顯示在這裡", - "Shared by link" : "由連結分享", - "No shared links" : "沒有已分享的連結", - "Files and folders you share by link will show up here" : "您分享的檔案與資料夾連結將會顯示在這裡", - "Deleted shares" : "已刪除的分享", - "No deleted shares" : "沒有已刪除的分享", - "Shares you deleted will show up here" : "您刪除的分享會在此顯示", - "Pending shares" : "擱置中的分享", - "No pending shares" : "沒有擱置中的分享", - "Shares you have received but not confirmed will show up here" : "您收到但尚未確認的分享將會在此顯示", - "Shares" : "分享", - "No shares" : "無分享", - "Shares will show up here" : "分享將會在此顯示", - "Restore" : "還原", - "Restore share" : "還原分享", - "Something happened. Unable to restore the share." : "好像有東西出錯了。無法還原分享。", - "Accept share" : "接受分享", - "Something happened. Unable to accept the share." : "好像有東西出錯了。無法接受分享。", - "Reject share" : "拒絕分享", - "Something happened. Unable to reject the share." : "好像有東西出錯了。無法拒絕分享。", "Waiting…" : "正在等待……", "error" : "錯誤", "finished" : "已結束", @@ -38,8 +13,6 @@ "No compatible server found at {remote}" : "在 {remote} 找不到相容的伺服器", "Invalid server URL" : "無效的伺服器 URL", "Failed to add the public link to your Nextcloud" : "無法將公開連結新增到您的 Nextcloud", - "No expiration date set" : "未指定到期日", - "Shared by" : "分享自", "File shares" : "檔案分享", "Downloaded via public link" : "透過公開連結下載", "Downloaded by {email}" : "{email} 已下載", @@ -235,6 +208,10 @@ "Expires {relativetime}" : "過期於 {relativetime}", "this share just expired." : "此分享剛過期。", "Shared with you by {owner}" : "{owner} 已經和您分享", + "_Accept share_::_Accept shares_" : ["接受分享"], + "Open in files" : "在檔案中開啟", + "_Reject share_::_Reject shares_" : ["拒絕分享"], + "_Restore share_::_Restore shares_" : ["還原分享"], "Link to a file" : "檔案連結", "Error creating the share: {errorMessage}" : "建立分享時發生錯誤:{errorMessage}", "Error creating the share" : "建立分享時發生錯誤", @@ -245,6 +222,7 @@ "Share {propertyName} saved" : "分享 {propertyName} 已儲存", "Shared" : "已分享", "Share" : "分享", + "Shared by" : "分享自", "Shared with" : "分享給", "Password created successfully" : "成功建立密碼", "Error generating password from password policy" : "從密碼策略產生密碼時發生錯誤", @@ -252,6 +230,18 @@ "Shared with you and {circle} by {owner}" : "{owner} 分享給您和 {circle}", "Shared with you and the conversation {conversation} by {owner}" : "{owner} 分享給您和 {conversation} 對話", "Shared with you in a conversation by {owner}" : "{owner} 在對話中分享給您", + "Shares" : "分享", + "Overview of shared files." : "已分享檔案的概覽。", + "Shared with you" : "與您分享", + "List of files that are shared with you." : "與您分享的檔案清單。", + "Shared with others" : "與其他人分享", + "List of files that you shared with others." : "您與其他人分享的檔案清單。", + "Shared by link" : "由連結分享", + "List of files that are shared by link." : "透過連結分享的檔案清單。", + "Deleted shares" : "已刪除的分享", + "List of shares that you removed yourself from." : "您將您自己從其中移除的分享清單。", + "Pending shares" : "擱置中的分享", + "List of unapproved shares." : "未批准的分享清單。", "No entries found in this folder" : "在此資料夾中沒有任何項目", "Name" : "名稱", "Share time" : "分享時間", @@ -270,6 +260,23 @@ "Uploaded files:" : "已上傳的檔案:", "By uploading files, you agree to the %1$sterms of service%2$s." : "上傳檔案即表示您同意%1$s服務條款%2$s。", "Add to your Nextcloud" : "新增到您的 Nextcloud", + "Nothing shared with you yet" : "目前沒有任何與您分享的內容", + "Files and folders others share with you will show up here" : "與您分享的檔案與資料夾將會顯示在這裡", + "Nothing shared yet" : "目前沒有分享內容", + "Files and folders you share will show up here" : "您分享的檔案與資料夾將會顯示在這裡", + "No shared links" : "沒有已分享的連結", + "Files and folders you share by link will show up here" : "您分享的檔案與資料夾連結將會顯示在這裡", + "No deleted shares" : "沒有已刪除的分享", + "Shares you deleted will show up here" : "您刪除的分享會在此顯示", + "No pending shares" : "沒有擱置中的分享", + "Shares you have received but not confirmed will show up here" : "您收到但尚未確認的分享將會在此顯示", + "No shares" : "無分享", + "Shares will show up here" : "分享將會在此顯示", + "Restore" : "還原", + "Something happened. Unable to restore the share." : "好像有東西出錯了。無法還原分享。", + "Something happened. Unable to accept the share." : "好像有東西出錯了。無法接受分享。", + "Something happened. Unable to reject the share." : "好像有東西出錯了。無法拒絕分享。", + "No expiration date set" : "未指定到期日", "Sharing %s failed because the back end does not support sciencemesh shares" : "分享 %s 失敗,因為後端不支援 sciencemesh 分享", "One or more of your shares will expire tomorrow" : "您的一個或多個分享將於明天到期", "Science Mesh" : "Science Mesh", diff --git a/apps/files_sharing/lib/Activity/Providers/Base.php b/apps/files_sharing/lib/Activity/Providers/Base.php index 4a2c6ac919e..e9e1d870f9a 100644 --- a/apps/files_sharing/lib/Activity/Providers/Base.php +++ b/apps/files_sharing/lib/Activity/Providers/Base.php @@ -157,9 +157,11 @@ abstract class Base implements IProvider { /** * @param string $uid + * @param string $overwriteDisplayName - overwrite display name, only if user is not local + * * @return array */ - protected function getUser($uid) { + protected function getUser(string $uid, string $overwriteDisplayName = '') { // First try local user $displayName = $this->userManager->getDisplayName($uid); if ($displayName !== null) { @@ -176,7 +178,7 @@ abstract class Base implements IProvider { return [ 'type' => 'user', 'id' => $cloudId->getUser(), - 'name' => $this->getDisplayNameFromAddressBook($cloudId->getDisplayId()), + 'name' => (($overwriteDisplayName !== '') ? $overwriteDisplayName : $this->getDisplayNameFromAddressBook($cloudId->getDisplayId())), 'server' => $cloudId->getRemote(), ]; } @@ -185,7 +187,7 @@ abstract class Base implements IProvider { return [ 'type' => 'user', 'id' => $uid, - 'name' => $uid, + 'name' => (($overwriteDisplayName !== '') ? $overwriteDisplayName : $uid), ]; } diff --git a/apps/files_sharing/lib/Activity/Providers/RemoteShares.php b/apps/files_sharing/lib/Activity/Providers/RemoteShares.php index f1cc90f5e65..e24645f8a26 100644 --- a/apps/files_sharing/lib/Activity/Providers/RemoteShares.php +++ b/apps/files_sharing/lib/Activity/Providers/RemoteShares.php @@ -115,13 +115,14 @@ class RemoteShares extends Base { switch ($subject) { case self::SUBJECT_REMOTE_SHARE_RECEIVED: case self::SUBJECT_REMOTE_SHARE_UNSHARED: + $displayName = (count($parameters) > 2) ? $parameters[2] : ''; return [ 'file' => [ 'type' => 'pending-federated-share', 'id' => $parameters[1], 'name' => $parameters[1], ], - 'user' => $this->getUser($parameters[0]), + 'user' => $this->getUser($parameters[0], $displayName) ]; case self::SUBJECT_REMOTE_SHARE_ACCEPTED: case self::SUBJECT_REMOTE_SHARE_DECLINED: diff --git a/apps/files_sharing/lib/Command/DeleteOrphanShares.php b/apps/files_sharing/lib/Command/DeleteOrphanShares.php new file mode 100644 index 00000000000..310f27ebfa3 --- /dev/null +++ b/apps/files_sharing/lib/Command/DeleteOrphanShares.php @@ -0,0 +1,96 @@ +<?php + +declare(strict_types=1); +/** + * @copyright Copyright (c) 2023 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\Files_Sharing\Command; + + +use Symfony\Component\Console\Question\ConfirmationQuestion; +use OC\Core\Command\Base; +use OCA\Files_Sharing\OrphanHelper; +use Symfony\Component\Console\Helper\QuestionHelper; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; + +class DeleteOrphanShares extends Base { + private OrphanHelper $orphanHelper; + + public function __construct(OrphanHelper $orphanHelper) { + parent::__construct(); + $this->orphanHelper = $orphanHelper; + } + + protected function configure(): void { + $this + ->setName('sharing:delete-orphan-shares') + ->setDescription('Delete shares where the owner no longer has access to the file') + ->addOption( + 'force', + 'f', + InputOption::VALUE_NONE, + 'delete the shares without asking' + ); + } + + public function execute(InputInterface $input, OutputInterface $output): int { + $force = $input->getOption('force'); + $shares = $this->orphanHelper->getAllShares(); + + $orphans = []; + foreach ($shares as $share) { + if (!$this->orphanHelper->isShareValid($share['owner'], $share['fileid'])) { + $orphans[] = $share['id']; + $exists = $this->orphanHelper->fileExists($share['fileid']); + $output->writeln("<info>{$share['target']}</info> owned by <info>{$share['owner']}</info>"); + if ($exists) { + $output->writeln(" file still exists but the share owner lost access to it, run <info>occ info:file {$share['fileid']}</info> for more information about the file"); + } else { + $output->writeln(" file no longer exists"); + } + } + } + + $count = count($orphans); + + if ($count === 0) { + $output->writeln("No orphan shares detected"); + return 0; + } + + if ($force) { + $doDelete = true; + } else { + $output->writeln(""); + /** @var QuestionHelper $helper */ + $helper = $this->getHelper('question'); + $question = new ConfirmationQuestion("Delete <info>$count</info> orphan shares? [y/N] ", false); + $doDelete = $helper->ask($input, $output, $question); + } + + if ($doDelete) { + $this->orphanHelper->deleteShares($orphans); + } + + return 0; + } +} diff --git a/apps/files_sharing/lib/Controller/ShareAPIController.php b/apps/files_sharing/lib/Controller/ShareAPIController.php index 2de5f7a5305..cc3afefd321 100644 --- a/apps/files_sharing/lib/Controller/ShareAPIController.php +++ b/apps/files_sharing/lib/Controller/ShareAPIController.php @@ -44,12 +44,13 @@ declare(strict_types=1); */ namespace OCA\Files_Sharing\Controller; +use Exception; use OC\Files\FileInfo; use OC\Files\Storage\Wrapper\Wrapper; +use OCA\Files\Helper; use OCA\Files_Sharing\Exceptions\SharingRightsException; use OCA\Files_Sharing\External\Storage; use OCA\Files_Sharing\SharedStorage; -use OCA\Files\Helper; use OCP\App\IAppManager; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\OCS\OCSBadRequestException; @@ -59,9 +60,9 @@ use OCP\AppFramework\OCS\OCSNotFoundException; use OCP\AppFramework\OCSController; use OCP\AppFramework\QueryException; use OCP\Constants; +use OCP\Files\Folder; use OCP\Files\InvalidPathException; use OCP\Files\IRootFolder; -use OCP\Files\Folder; use OCP\Files\Node; use OCP\Files\NotFoundException; use OCP\IConfig; @@ -74,12 +75,14 @@ use OCP\IURLGenerator; use OCP\IUserManager; use OCP\Lock\ILockingProvider; use OCP\Lock\LockedException; -use OCP\Share; +use OCP\Server; use OCP\Share\Exceptions\GenericShareException; use OCP\Share\Exceptions\ShareNotFound; use OCP\Share\IManager; use OCP\Share\IShare; use OCP\UserStatus\IManager as IUserStatusManager; +use Psr\Container\ContainerExceptionInterface; +use Psr\Log\LoggerInterface; /** * Class Share20OCS @@ -274,7 +277,11 @@ class ShareAPIController extends OCSController { $result['token'] = $share->getToken(); $result['url'] = $this->urlGenerator->linkToRouteAbsolute('files_sharing.sharecontroller.showShare', ['token' => $share->getToken()]); - } elseif ($share->getShareType() === IShare::TYPE_REMOTE || $share->getShareType() === IShare::TYPE_REMOTE_GROUP) { + } elseif ($share->getShareType() === IShare::TYPE_REMOTE) { + $result['share_with'] = $share->getSharedWith(); + $result['share_with_displayname'] = $this->getCachedFederatedDisplayName($share->getSharedWith()); + $result['token'] = $share->getToken(); + } elseif ($share->getShareType() === IShare::TYPE_REMOTE_GROUP) { $result['share_with'] = $share->getSharedWith(); $result['share_with_displayname'] = $this->getDisplayNameFromAddressBook($share->getSharedWith(), 'CLOUD'); $result['token'] = $share->getToken(); @@ -344,7 +351,7 @@ class ShareAPIController extends OCSController { /** * Check if one of the users address books knows the exact property, if - * yes we return the full name. + * not we return the full name. * * @param string $query * @param string $property @@ -352,11 +359,20 @@ class ShareAPIController extends OCSController { */ private function getDisplayNameFromAddressBook(string $query, string $property): string { // FIXME: If we inject the contacts manager it gets initialized before any address books are registered - $result = \OC::$server->getContactsManager()->search($query, [$property], [ - 'limit' => 1, - 'enumeration' => false, - 'strict_search' => true, - ]); + try { + $result = \OC::$server->getContactsManager()->search($query, [$property], [ + 'limit' => 1, + 'enumeration' => false, + 'strict_search' => true, + ]); + } catch (Exception $e) { + Server::get(LoggerInterface::class)->error( + $e->getMessage(), + ['exception' => $e] + ); + return $query; + } + foreach ($result as $r) { foreach ($r[$property] as $value) { if ($value === $query && $r['FN']) { @@ -368,6 +384,102 @@ class ShareAPIController extends OCSController { return $query; } + + /** + * @param array $shares + * @param array|null $updatedDisplayName + * + * @return array + */ + private function fixMissingDisplayName(array $shares, ?array $updatedDisplayName = null): array { + $userIds = $updated = []; + foreach ($shares as $share) { + // share is federated and share have no display name yet + if ($share['share_type'] === IShare::TYPE_REMOTE + && ($share['share_with'] ?? '') !== '' + && ($share['share_with_displayname'] ?? '') === '') { + $userIds[] = $userId = $share['share_with']; + + if ($updatedDisplayName !== null && array_key_exists($userId, $updatedDisplayName)) { + $share['share_with_displayname'] = $updatedDisplayName[$userId]; + } + } + + // prepping userIds with displayName to be updated + $updated[] = $share; + } + + // if $updatedDisplayName is not null, it means we should have already fixed displayNames of the shares + if ($updatedDisplayName !== null) { + return $updated; + } + + // get displayName for the generated list of userId with no displayName + $displayNames = $this->retrieveFederatedDisplayName($userIds); + + // if no displayName are updated, we exit + if (empty($displayNames)) { + return $updated; + } + + // let's fix missing display name and returns all shares + return $this->fixMissingDisplayName($shares, $displayNames); + } + + + /** + * get displayName of a list of userIds from the lookup-server; through the globalsiteselector app. + * returns an array with userIds as keys and displayName as values. + * + * @param array $userIds + * @param bool $cacheOnly - do not reach LUS, get data from cache. + * + * @return array + * @throws ContainerExceptionInterface + */ + private function retrieveFederatedDisplayName(array $userIds, bool $cacheOnly = false): array { + // check if gss is enabled and available + if (count($userIds) === 0 + || !$this->appManager->isInstalled('globalsiteselector') + || !class_exists('\OCA\GlobalSiteSelector\Service\SlaveService')) { + return []; + } + + try { + $slaveService = Server::get(\OCA\GlobalSiteSelector\Service\SlaveService::class); + } catch (\Throwable $e) { + Server::get(LoggerInterface::class)->error( + $e->getMessage(), + ['exception' => $e] + ); + return []; + } + + return $slaveService->getUsersDisplayName($userIds, $cacheOnly); + } + + + /** + * retrieve displayName from cache if available (should be used on federated shares) + * if not available in cache/lus, try for get from address-book, else returns empty string. + * + * @param string $userId + * @param bool $cacheOnly if true will not reach the lus but will only get data from cache + * + * @return string + */ + private function getCachedFederatedDisplayName(string $userId, bool $cacheOnly = true): string { + $details = $this->retrieveFederatedDisplayName([$userId], $cacheOnly); + if (array_key_exists($userId, $details)) { + return $details[$userId]; + } + + $displayName = $this->getDisplayNameFromAddressBook($userId, 'CLOUD'); + return ($displayName === $userId) ? '' : $displayName; + } + + + /** * Get a specific share by id * @@ -646,6 +758,8 @@ class ShareAPIController extends OCSController { throw new OCSNotFoundException($this->l->t('Invalid date, date format must be YYYY-MM-DD')); } } + + $share->setSharedWithDisplayName($this->getCachedFederatedDisplayName($shareWith, false)); } elseif ($shareType === IShare::TYPE_REMOTE_GROUP) { if (!$this->shareManager->outgoingServer2ServerGroupSharesAllowed()) { throw new OCSForbiddenException($this->l->t('Sharing %1$s failed because the back end does not allow shares from type %2$s', [$node->getPath(), $shareType])); @@ -793,7 +907,6 @@ class ShareAPIController extends OCSController { // filter out duplicate shares $known = []; - $formatted = $miniFormatted = []; $resharingRight = false; $known = []; @@ -957,6 +1070,9 @@ class ShareAPIController extends OCSController { $formatted = $miniFormatted; } + // fix eventual missing display name from federated shares + $formatted = $this->fixMissingDisplayName($formatted); + if ($includeTags) { $formatted = Helper::populateTags($formatted, 'file_source', \OC::$server->getTagManager()); diff --git a/apps/files_sharing/lib/OrphanHelper.php b/apps/files_sharing/lib/OrphanHelper.php new file mode 100644 index 00000000000..6d15680f882 --- /dev/null +++ b/apps/files_sharing/lib/OrphanHelper.php @@ -0,0 +1,86 @@ +<?php + +declare(strict_types=1); +/** + * @copyright Copyright (c) 2023 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\Files_Sharing; + +use OCP\DB\QueryBuilder\IQueryBuilder; +use OCP\Files\IRootFolder; +use OCP\IDBConnection; + +class OrphanHelper { + private IDBConnection $connection; + private IRootFolder $rootFolder; + + public function __construct( + IDBConnection $connection, + IRootFolder $rootFolder + ) { + $this->connection = $connection; + $this->rootFolder = $rootFolder; + } + + public function isShareValid(string $owner, int $fileId): bool { + $userFolder = $this->rootFolder->getUserFolder($owner); + $nodes = $userFolder->getById($fileId); + return count($nodes) > 0; + } + + /** + * @param int[] $ids + * @return void + */ + public function deleteShares(array $ids): void { + $query = $this->connection->getQueryBuilder(); + $query->delete('share') + ->where($query->expr()->in('id', $query->createNamedParameter($ids, IQueryBuilder::PARAM_INT_ARRAY))); + $query->executeStatement(); + } + + public function fileExists(int $fileId): bool { + $query = $this->connection->getQueryBuilder(); + $query->select('fileid') + ->from('filecache') + ->where($query->expr()->eq('fileid', $query->createNamedParameter($fileId, IQueryBuilder::PARAM_INT))); + return $query->executeQuery()->fetchOne() !== false; + } + + /** + * @return \Traversable<int, array{id: int, owner: string, fileid: int, target: string}> + */ + public function getAllShares() { + $query = $this->connection->getQueryBuilder(); + $query->select('id', 'file_source', 'uid_owner', 'file_target') + ->from('share') + ->where($query->expr()->eq('item_type', $query->createNamedParameter('file'))) + ->orWhere($query->expr()->eq('item_type', $query->createNamedParameter('folder'))); + $result = $query->executeQuery(); + while ($row = $result->fetch()) { + yield [ + 'id' => (int)$row['id'], + 'owner' => (string)$row['uid_owner'], + 'fileid' => (int)$row['file_source'], + 'target' => (string)$row['file_target'], + ]; + } + } +} diff --git a/apps/files_sharing/src/components/SharingEntry.vue b/apps/files_sharing/src/components/SharingEntry.vue index 92527a8f14a..a7ab43249fc 100644 --- a/apps/files_sharing/src/components/SharingEntry.vue +++ b/apps/files_sharing/src/components/SharingEntry.vue @@ -404,6 +404,12 @@ export default { * @return {boolean} */ isSetDownloadButtonVisible() { + // TODO: Implement download permission for circle shares instead of hiding the option. + // https://github.com/nextcloud/server/issues/39161 + if (this.share && this.share.type === this.SHARE_TYPES.SHARE_TYPE_CIRCLE) { + return false + } + const allowedMimetypes = [ // Office documents 'application/msword', diff --git a/apps/files_trashbin/l10n/zh_CN.js b/apps/files_trashbin/l10n/zh_CN.js index 7a3b9b23f37..06e276f9076 100644 --- a/apps/files_trashbin/l10n/zh_CN.js +++ b/apps/files_trashbin/l10n/zh_CN.js @@ -3,9 +3,11 @@ OC.L10N.register( { "restored" : "已恢复", "Deleted files" : "已删除文件", + "Deleted files and folders in the trash bin (may expire during export if you are low on storage space)" : "回收站中已删除的文件与文件夹(如果您的存储空间不足,导出过程中可能会过期)", "This application enables users to restore files that were deleted from the system." : "此应用允许用户恢复从系统中删除的文件。", "This application enables users to restore files that were deleted from the system. It displays a list of deleted files in the web interface, and has options to restore those deleted files back to the users file directories or remove them permanently from the system. Restoring a file also restores related file versions, if the versions application is enabled. When a file is deleted from a share, it can be restored in the same manner, though it is no longer shared. By default, these files remain in the trash bin for 30 days.\nTo prevent a user from running out of disk space, the Deleted files app will not utilize more than 50% of the currently available free quota for deleted files. If the deleted files exceed this limit, the app deletes the oldest files until it gets below this limit. More information is available in the Deleted Files documentation." : "此应用允许用户恢复从系统中删除的文件。它会在 web 界面上显示已删除文件的列表,且可以选择将这些已删除文件恢复到用户的文件目录中或者将其永久地从系统删除。如果版本应用启用的话,恢复文件同时也会恢复相关的文件副本。当文件从共享中删除时,它可以用同样的方法恢复,但它不会再被共享。默认情况下,这些文件将会在回收站中保留 30 天。\n为防止用户把磁盘空间用完,文件删除应用用于保存已删除文件的空间将不会超过当前可用空闲配额的 50%。当已删除文件的容量超过这一限制时,应用将删除最旧的文件直到容量低于限制。更多信息请参考文件删除应用文档。", "Restore" : "恢复", + "List of files that have been deleted." : "已被删除的文件清单", "Deleted" : "已删除", "No deleted files" : "无已删除文件", "You will be able to recover deleted files from here" : "您可以在此处恢复已删除的文件", diff --git a/apps/files_trashbin/l10n/zh_CN.json b/apps/files_trashbin/l10n/zh_CN.json index 441827987ef..2009babed3e 100644 --- a/apps/files_trashbin/l10n/zh_CN.json +++ b/apps/files_trashbin/l10n/zh_CN.json @@ -1,9 +1,11 @@ { "translations": { "restored" : "已恢复", "Deleted files" : "已删除文件", + "Deleted files and folders in the trash bin (may expire during export if you are low on storage space)" : "回收站中已删除的文件与文件夹(如果您的存储空间不足,导出过程中可能会过期)", "This application enables users to restore files that were deleted from the system." : "此应用允许用户恢复从系统中删除的文件。", "This application enables users to restore files that were deleted from the system. It displays a list of deleted files in the web interface, and has options to restore those deleted files back to the users file directories or remove them permanently from the system. Restoring a file also restores related file versions, if the versions application is enabled. When a file is deleted from a share, it can be restored in the same manner, though it is no longer shared. By default, these files remain in the trash bin for 30 days.\nTo prevent a user from running out of disk space, the Deleted files app will not utilize more than 50% of the currently available free quota for deleted files. If the deleted files exceed this limit, the app deletes the oldest files until it gets below this limit. More information is available in the Deleted Files documentation." : "此应用允许用户恢复从系统中删除的文件。它会在 web 界面上显示已删除文件的列表,且可以选择将这些已删除文件恢复到用户的文件目录中或者将其永久地从系统删除。如果版本应用启用的话,恢复文件同时也会恢复相关的文件副本。当文件从共享中删除时,它可以用同样的方法恢复,但它不会再被共享。默认情况下,这些文件将会在回收站中保留 30 天。\n为防止用户把磁盘空间用完,文件删除应用用于保存已删除文件的空间将不会超过当前可用空闲配额的 50%。当已删除文件的容量超过这一限制时,应用将删除最旧的文件直到容量低于限制。更多信息请参考文件删除应用文档。", "Restore" : "恢复", + "List of files that have been deleted." : "已被删除的文件清单", "Deleted" : "已删除", "No deleted files" : "无已删除文件", "You will be able to recover deleted files from here" : "您可以在此处恢复已删除的文件", diff --git a/apps/files_versions/l10n/zh_CN.js b/apps/files_versions/l10n/zh_CN.js index 10659f9b7ff..5399984b8b6 100644 --- a/apps/files_versions/l10n/zh_CN.js +++ b/apps/files_versions/l10n/zh_CN.js @@ -3,14 +3,14 @@ OC.L10N.register( { "Versions" : "版本", "This application automatically maintains older versions of files that are changed." : "此应用程序自动维护已更改文件的旧版本。", - "This application automatically maintains older versions of files that are changed. When enabled, a hidden versions folder is provisioned in every user's directory and is used to store old file versions. A user can revert to an older version through the web interface at any time, with the replaced file becoming a version. The app automatically manages the versions folder to ensure the user does not run out of Quota because of versions.\n\t\tIn addition to the expiry of versions, the versions app makes certain never to use more than 50% of the user's currently available free space. If stored versions exceed this limit, the app will delete the oldest versions first until it meets this limit. More information is available in the Versions documentation." : "此应用程序自动维护已被更改的旧版本文件。开启时,每个用户的目录中都将呈现一个隐藏的版本文件夹,其用来储存旧版本文件。用户可随时通过Web界面还原到更旧的版本,使其成为新版本。此应用自动管理版本文件夹,以确保用户不因版本而用尽配额。\n除版本到期以外,版本App确保永不使用超过用户当前可用空间的50%。如果存储的版本超过此限制,此App将首先删除最旧的版本,直到符合限制。更多信息可见 版本 文档。", + "This application automatically maintains older versions of files that are changed. When enabled, a hidden versions folder is provisioned in every user's directory and is used to store old file versions. A user can revert to an older version through the web interface at any time, with the replaced file becoming a version. The app automatically manages the versions folder to ensure the user does not run out of Quota because of versions.\n\t\tIn addition to the expiry of versions, the versions app makes certain never to use more than 50% of the user's currently available free space. If stored versions exceed this limit, the app will delete the oldest versions first until it meets this limit. More information is available in the Versions documentation." : "此应用程序自动维护已被更改的旧版本文件。开启时,每个用户的目录中都将呈现一个隐藏的版本文件夹,其用来储存旧版本文件。用户可随时通过Web界面还原到更旧的版本,使其成为新版本。此应用自动管理版本文件夹,以确保用户不因版本而用尽配额。\n\t\t除版本到期以外,版本App确保永不使用超过用户当前可用空间的50%。如果存储的版本超过此限制,此App将首先删除最旧的版本,直到符合限制。更多信息可见 版本 文档。", "Name this version" : "命名此版本", "Edit version name" : "编辑版本名", "Restore version" : "恢复版本", "Download version" : "下载版本", "Delete version" : "删除版本", "Version name" : "版本名", - "Named versions are persisted, and excluded from automatic cleanups when your storage quota is full." : "命名版本已保留,且当你的存储配额已满时,它将被从自动清理中排除。", + "Named versions are persisted, and excluded from automatic cleanups when your storage quota is full." : "命名版本会保留,且当你的存储配额已满时,它将被从自动清理中排除。", "Remove version name" : "删除版本名", "Save version name" : "保存版本名", "Initial version restored" : "已还原最初版本", @@ -18,7 +18,7 @@ OC.L10N.register( "Could not restore version" : "无法还原版本", "Could not set version name" : "无法设置版本名", "Could not delete version" : "无法删除版本", - "${version.label} restored" : "已还原版本 ${version.label} ", + "${version.label} restored" : "已还原版本${version.label} ", "Failed to revert {file} to revision {timestamp}." : "将{file}还原为修订版{timestamp}失败。", "_%n byte_::_%n bytes_" : ["%n 个字节"], "Restore" : "恢复", diff --git a/apps/files_versions/l10n/zh_CN.json b/apps/files_versions/l10n/zh_CN.json index bac575b16fc..0025aa416eb 100644 --- a/apps/files_versions/l10n/zh_CN.json +++ b/apps/files_versions/l10n/zh_CN.json @@ -1,14 +1,14 @@ { "translations": { "Versions" : "版本", "This application automatically maintains older versions of files that are changed." : "此应用程序自动维护已更改文件的旧版本。", - "This application automatically maintains older versions of files that are changed. When enabled, a hidden versions folder is provisioned in every user's directory and is used to store old file versions. A user can revert to an older version through the web interface at any time, with the replaced file becoming a version. The app automatically manages the versions folder to ensure the user does not run out of Quota because of versions.\n\t\tIn addition to the expiry of versions, the versions app makes certain never to use more than 50% of the user's currently available free space. If stored versions exceed this limit, the app will delete the oldest versions first until it meets this limit. More information is available in the Versions documentation." : "此应用程序自动维护已被更改的旧版本文件。开启时,每个用户的目录中都将呈现一个隐藏的版本文件夹,其用来储存旧版本文件。用户可随时通过Web界面还原到更旧的版本,使其成为新版本。此应用自动管理版本文件夹,以确保用户不因版本而用尽配额。\n除版本到期以外,版本App确保永不使用超过用户当前可用空间的50%。如果存储的版本超过此限制,此App将首先删除最旧的版本,直到符合限制。更多信息可见 版本 文档。", + "This application automatically maintains older versions of files that are changed. When enabled, a hidden versions folder is provisioned in every user's directory and is used to store old file versions. A user can revert to an older version through the web interface at any time, with the replaced file becoming a version. The app automatically manages the versions folder to ensure the user does not run out of Quota because of versions.\n\t\tIn addition to the expiry of versions, the versions app makes certain never to use more than 50% of the user's currently available free space. If stored versions exceed this limit, the app will delete the oldest versions first until it meets this limit. More information is available in the Versions documentation." : "此应用程序自动维护已被更改的旧版本文件。开启时,每个用户的目录中都将呈现一个隐藏的版本文件夹,其用来储存旧版本文件。用户可随时通过Web界面还原到更旧的版本,使其成为新版本。此应用自动管理版本文件夹,以确保用户不因版本而用尽配额。\n\t\t除版本到期以外,版本App确保永不使用超过用户当前可用空间的50%。如果存储的版本超过此限制,此App将首先删除最旧的版本,直到符合限制。更多信息可见 版本 文档。", "Name this version" : "命名此版本", "Edit version name" : "编辑版本名", "Restore version" : "恢复版本", "Download version" : "下载版本", "Delete version" : "删除版本", "Version name" : "版本名", - "Named versions are persisted, and excluded from automatic cleanups when your storage quota is full." : "命名版本已保留,且当你的存储配额已满时,它将被从自动清理中排除。", + "Named versions are persisted, and excluded from automatic cleanups when your storage quota is full." : "命名版本会保留,且当你的存储配额已满时,它将被从自动清理中排除。", "Remove version name" : "删除版本名", "Save version name" : "保存版本名", "Initial version restored" : "已还原最初版本", @@ -16,7 +16,7 @@ "Could not restore version" : "无法还原版本", "Could not set version name" : "无法设置版本名", "Could not delete version" : "无法删除版本", - "${version.label} restored" : "已还原版本 ${version.label} ", + "${version.label} restored" : "已还原版本${version.label} ", "Failed to revert {file} to revision {timestamp}." : "将{file}还原为修订版{timestamp}失败。", "_%n byte_::_%n bytes_" : ["%n 个字节"], "Restore" : "恢复", diff --git a/apps/files_versions/lib/Listener/FileEventsListener.php b/apps/files_versions/lib/Listener/FileEventsListener.php index 76590733e26..fe638364b9d 100644 --- a/apps/files_versions/lib/Listener/FileEventsListener.php +++ b/apps/files_versions/lib/Listener/FileEventsListener.php @@ -40,6 +40,7 @@ use OCA\Files_Versions\Db\VersionEntity; use OCA\Files_Versions\Db\VersionsMapper; use OCA\Files_Versions\Storage; use OCP\AppFramework\Db\DoesNotExistException; +use OCP\DB\Exception; use OCP\EventDispatcher\Event; use OCP\EventDispatcher\IEventListener; use OCP\Files\Events\Node\BeforeNodeCopiedEvent; @@ -57,6 +58,7 @@ use OCP\Files\Folder; use OCP\Files\IMimeTypeLoader; use OCP\Files\IRootFolder; use OCP\Files\Node; +use Psr\Log\LoggerInterface; class FileEventsListener implements IEventListener { private IRootFolder $rootFolder; @@ -74,15 +76,18 @@ class FileEventsListener implements IEventListener { */ private array $versionsDeleted = []; private IMimeTypeLoader $mimeTypeLoader; + private LoggerInterface $logger; public function __construct( IRootFolder $rootFolder, VersionsMapper $versionsMapper, - IMimeTypeLoader $mimeTypeLoader + IMimeTypeLoader $mimeTypeLoader, + LoggerInterface $logger, ) { $this->rootFolder = $rootFolder; $this->versionsMapper = $versionsMapper; $this->mimeTypeLoader = $mimeTypeLoader; + $this->logger = $logger; } public function handle(Event $event): void { @@ -226,24 +231,37 @@ class FileEventsListener implements IEventListener { return; } - if ($writeHookInfo['versionCreated'] && $node->getMTime() !== $writeHookInfo['previousNode']->getMTime()) { + if ( + ($writeHookInfo['versionCreated'] || $writeHookInfo['previousNode']->getSize() === 0) && + $node->getMTime() !== $writeHookInfo['previousNode']->getMTime() + ) { // If a new version was created, insert a version in the DB for the current content. // Unless both versions have the same mtime. - $versionEntity = new VersionEntity(); - $versionEntity->setFileId($node->getId()); - $versionEntity->setTimestamp($node->getMTime()); - $versionEntity->setSize($node->getSize()); - $versionEntity->setMimetype($this->mimeTypeLoader->getId($node->getMimetype())); - $versionEntity->setMetadata([]); - $this->versionsMapper->insert($versionEntity); + $this->created($node); } else { - // If no new version was stored in the FS, no new version should be added in the DB. - // So we simply update the associated version. - $currentVersionEntity = $this->versionsMapper->findVersionForFileId($node->getId(), $writeHookInfo['previousNode']->getMtime()); - $currentVersionEntity->setTimestamp($node->getMTime()); - $currentVersionEntity->setSize($node->getSize()); - $currentVersionEntity->setMimetype($this->mimeTypeLoader->getId($node->getMimetype())); - $this->versionsMapper->update($currentVersionEntity); + try { + // If no new version was stored in the FS, no new version should be added in the DB. + // So we simply update the associated version. + $currentVersionEntity = $this->versionsMapper->findVersionForFileId($node->getId(), $writeHookInfo['previousNode']->getMtime()); + $currentVersionEntity->setTimestamp($node->getMTime()); + $currentVersionEntity->setSize($node->getSize()); + $currentVersionEntity->setMimetype($this->mimeTypeLoader->getId($node->getMimetype())); + $this->versionsMapper->update($currentVersionEntity); + } catch (Exception $e) { + $this->logger->error('Failed to update existing version for ' . $node->getPath(), [ + 'exception' => $e, + 'versionCreated' => $writeHookInfo['versionCreated'], + 'previousNode' => [ + 'size' => $writeHookInfo['previousNode']->getSize(), + 'mtime' => $writeHookInfo['previousNode']->getMTime(), + ], + 'node' => [ + 'size' => $node->getSize(), + 'mtime' => $node->getMTime(), + ] + ]); + throw $e; + } } unset($this->writeHookInfo[$node->getId()]); diff --git a/apps/settings/l10n/ar.js b/apps/settings/l10n/ar.js index 9edff0b9cde..34047e0eb5c 100644 --- a/apps/settings/l10n/ar.js +++ b/apps/settings/l10n/ar.js @@ -187,6 +187,7 @@ OC.L10N.register( "Disable all" : "تعطيل الكل", "Enable all" : "تمكين الكل", "_%n app has an update available_::_%n apps have an update available_" : ["%n تطبيقات لها تحديث متاح","%n تطبيق له تحديث متاح","%n تطبيقات لها تحديث متاح","%n تطبيقات لها تحديث متاح","%n تطبيقات لها تحديث متاح","%n تطبيقات لها تحديث متاح"], + "_Update_::_Update all_" : ["تحديث الكل","تحديث","تحديث الكل","تحديث الكل","تحديث الكل","تحديث الكل"], "Marked for remote wipe" : "مُعلَّمٌ ليتم مَحوُه عن بُعدٍ", "Device settings" : "إعدادات الجهاز", "Allow filesystem access" : "السماح بالنفاذ إلى نظام الملفات", diff --git a/apps/settings/l10n/ar.json b/apps/settings/l10n/ar.json index ceb6e152c21..c80c34c771c 100644 --- a/apps/settings/l10n/ar.json +++ b/apps/settings/l10n/ar.json @@ -185,6 +185,7 @@ "Disable all" : "تعطيل الكل", "Enable all" : "تمكين الكل", "_%n app has an update available_::_%n apps have an update available_" : ["%n تطبيقات لها تحديث متاح","%n تطبيق له تحديث متاح","%n تطبيقات لها تحديث متاح","%n تطبيقات لها تحديث متاح","%n تطبيقات لها تحديث متاح","%n تطبيقات لها تحديث متاح"], + "_Update_::_Update all_" : ["تحديث الكل","تحديث","تحديث الكل","تحديث الكل","تحديث الكل","تحديث الكل"], "Marked for remote wipe" : "مُعلَّمٌ ليتم مَحوُه عن بُعدٍ", "Device settings" : "إعدادات الجهاز", "Allow filesystem access" : "السماح بالنفاذ إلى نظام الملفات", diff --git a/apps/settings/l10n/gl.js b/apps/settings/l10n/gl.js index 4bd7d881aa8..e65ef7aa2c4 100644 --- a/apps/settings/l10n/gl.js +++ b/apps/settings/l10n/gl.js @@ -21,29 +21,29 @@ OC.L10N.register( "Group list is empty" : "A lista de grupos está baleira", "Unable to retrieve the group list" : "Non é posíbel recuperar a lista de grupos", "{actor} added you to group {group}" : "{actor} engadiuno ao grupo {group}", - "You added {user} to group {group}" : "Vostede engadiu a {actor} ao grupo {group}", + "You added {user} to group {group}" : "Vde. engadiu a {actor} ao grupo {group}", "{actor} added {user} to group {group}" : "{actor} engadiu a {user} ao grupo {group}", "An administrator added you to group {group}" : "Un administrador engadiuno ao grupo {group} ", "An administrator added {user} to group {group}" : "Un administrador engadiu a {user} ao grupo {group}", "{actor} removed you from group {group}" : "{actor} retirouno do grupo {group}", - "You removed {user} from group {group}" : "Vostede retirou a {user} do grupo {group}", + "You removed {user} from group {group}" : "Vde. retirou a {user} do grupo {group}", "{actor} removed {user} from group {group}" : "{actor} retirou a {user} do grupo {group}", "An administrator removed you from group {group}" : "Un administrador retirouno do grupo {group} ", "An administrator removed {user} from group {group}" : "Un administrador retirou a {user} do grupo {group}", "Your <strong>group memberships</strong> were modified" : "Foron modificados os <strong>membros do seu grupo</strong>", "{actor} changed your password" : "{actor} cambiou o seu contrasinal", - "You changed your password" : "Vostede cambiou o seu contrasinal", + "You changed your password" : "Vde. cambiou o seu contrasinal", "Your password was reset by an administrator" : "O seu contrasinal foi restabelecido por un administrador", "Your password was reset" : "O seu contrasinal foi restabelecido", "{actor} changed your email address" : "{actor} cambiou o seu enderezo de correo", - "You changed your email address" : "Vostede cambiou o seu enderezo de correo", + "You changed your email address" : "Vde. cambiou o seu enderezo de correo", "Your email address was changed by an administrator" : "O seu enderezo de correo foi cambiado por un administrador", "You created an app password for a session named \"{token}\"" : "Creou un contrasinal de aplicación para unha sesión chamada «{token}»", "An administrator created an app password for a session named \"{token}\"" : "Un administrador creou un contrasinal de aplicación para unha sesión chamada «{token}»", - "You deleted app password \"{token}\"" : "Vostede eliminou o contrasinal da aplicación «{token}»", - "You renamed app password \"{token}\" to \"{newToken}\"" : "Vostede renomeou o contrasinal da aplicación «{token}» como «{newToken}»", - "You granted filesystem access to app password \"{token}\"" : "Vostede concedeu acceso ao sistema de ficheiros ao contrasinal da aplicación «{token}»", - "You revoked filesystem access from app password \"{token}\"" : "Vostede revogou o acceso ao sistema de ficheiros dende o contrasinal da aplicación «{token}»", + "You deleted app password \"{token}\"" : "Vde. eliminou o contrasinal da aplicación «{token}»", + "You renamed app password \"{token}\" to \"{newToken}\"" : "Vde. renomeou o contrasinal da aplicación «{token}» como «{newToken}»", + "You granted filesystem access to app password \"{token}\"" : "Vde. concedeu acceso ao sistema de ficheiros ao contrasinal da aplicación «{token}»", + "You revoked filesystem access from app password \"{token}\"" : "Vde. revogou o acceso ao sistema de ficheiros dende o contrasinal da aplicación «{token}»", "Security" : "Seguranza", "You successfully logged in using two-factor authentication (%1$s)" : "Accedeu satisfactoriamente usando autenticación de dous factores (%1$s)", "A login attempt using two-factor authentication failed (%1$s)" : "Fallou un intento de acceso usando autenticación de dous factores (%1$s)", @@ -80,7 +80,7 @@ OC.L10N.register( "Invalid SMTP password." : "Contrasinal SMTP incorrecta.", "Email setting test" : "Proba do axuste do correo", "Well done, %s!" : "Ben feito, %s!", - "If you received this email, the email configuration seems to be correct." : "Se vostede ten recibido este correo, a configuración do correo semella ser correcta. ", + "If you received this email, the email configuration seems to be correct." : "Se Vde. ten recibido este correo, a configuración do correo semella ser correcta. ", "Email could not be sent. Check your mail server log" : "Non foi posíbel enviar o correo. Comprobe o rexistro do servidor de correo", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Ocorreu un problema ao enviar o correo. Revise os seus axustes. (Erro: %s)", "You need to set your user email before being able to send test emails. Go to %s for that." : "É necesario estabelecer o seu correo de usuario antes de poder enviar correos de proba. Vaia a %spara iso.", @@ -101,7 +101,7 @@ OC.L10N.register( "Your password on %s was reset." : "Foi restabelecido o seu contrasinal en %s.", "Password for %1$s changed on %2$s" : "Contrasinal para %1$s cambiado en %2$s", "Password changed for %s" : "Contrasinal cambiado por %s", - "If you did not request this, please contact an administrator." : "Se vostede non solicitou isto, póñase en contacto coa administración desta instancia.", + "If you did not request this, please contact an administrator." : "Se Vde. non solicitou isto, póñase en contacto coa administración desta instancia.", "Your email address on %s was changed." : "Foi cambiado o seu enderezo de correo en %s.", "Your email address on %s was changed by an administrator." : "O seu enderezo de correo en %s foi cambiado por un administrador", "Email address for %1$s changed on %2$s" : "Enderezo de correo para %1$s cambiado en %2$s", @@ -256,7 +256,7 @@ OC.L10N.register( "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "O cifrado por si só non garante a seguranza do sistema. Vexa a documentación para obter máis información sobre como funciona a aplicación de cifrado e os casos de uso admitidos.", "Be aware that encryption always increases the file size." : "Teña presente que o cifrado sempre incrementa o tamaño do ficheiro.", "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Sempre é bo crear copias de seguranza dos seus datos, no caso do cifrado, asegúrese de ter unha copia de seguranza das chaves de cifrado xunto cos seus datos.", - "This is the final warning: Do you really want to enable encryption?" : "Esta é a advertencia final. Confirma que quere activar o cifrado?", + "This is the final warning: Do you really want to enable encryption?" : "Esta é a última advertencia: confirma que quere activar o cifrado?", "No encryption module loaded, please enable an encryption module in the app menu." : "Non hai cargado ningún módulo de cifrado, active un módulo de cifrado no menú de aplicacións.", "Select default encryption module:" : "Seleccionar o módulo predeterminado de cifrado:", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run {command}" : "É necesario migrar as súas chave de cifrado do antigo cifrado (ownCloud <= 8,0) cara ao novo. Active o «Módulo predeterminado de cifrado» e execute {command}", @@ -286,7 +286,7 @@ OC.L10N.register( "Error removing profile picture" : "Produciuse un erro ao retirar a imaxe de perfil", "Your biography" : "A súa biografía", "Details" : "Detalles", - "You are a member of the following groups:" : "Vostede é membro dos seguintes grupos:", + "You are a member of the following groups:" : "Vde. é membro dos seguintes grupos:", "You are using <strong>{usage}</strong>" : "Está a usar <strong>{usage}</strong>", "You are using <strong>{usage}</strong> of <strong>{totalSpace}</strong> (<strong>{usageRelative}%</strong>)" : "Está a usar <strong>{usage}</strong> de <strong>{totalSpace}</strong> (<strong>{usageRelative}%</strong>)", "Your full name" : "O seu nome completo", @@ -363,7 +363,7 @@ OC.L10N.register( "Add new user" : "Engadir un novo usuario", "Username will be autogenerated" : "O nome de usuario vai ser xerado automaticamente", "Username (required)" : "Nome de usuario (obrigatorio)", - "You do not have permissions to see the details of this user" : "Vostede non ten permisos para ver os detalles deste usuario", + "You do not have permissions to see the details of this user" : "Vde. non ten permisos para ver os detalles deste usuario", "Edit display name" : "Editar o nome para amosar", "Add new password" : "Engadir un novo contrasinal", "Add new email address" : "Engadir un novo enderezo de correo", @@ -524,7 +524,7 @@ OC.L10N.register( "This community release of Nextcloud is unsupported and instant notifications are unavailable." : "Esta versión comunitaria de Nextcloud non é compatíbel e as notificacións instantáneas non están dispoñíbeis.", "Use a second factor besides your password to increase security for your account." : "Empregue un segundo factor ademais do seu contrasinal para aumentar a seguranza da súa conta.", "If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : " Se usa aplicacións de terceiros para conectarse a Nextcloud, asegúrese de crear e configurar un contrasinal de aplicación para cada unha antes de activar a autenticación de segundo factor.", - "You created app password \"{token}\"" : "Vostede creou o contrasinal da aplicación «{token}»", + "You created app password \"{token}\"" : "Vde. creou o contrasinal da aplicación «{token}»", "An administrator created app password \"{token}\"" : "Un administrador creou o contrasinal da aplicación «{token}»", "Choose profile picture from files" : "Escolla a imaxe de perfil en ficheiros", "png or jpg, max. 20 MB" : "png ou jpg, max. 20 MB", diff --git a/apps/settings/l10n/gl.json b/apps/settings/l10n/gl.json index fdbeac3bb21..1c295fbd7cb 100644 --- a/apps/settings/l10n/gl.json +++ b/apps/settings/l10n/gl.json @@ -19,29 +19,29 @@ "Group list is empty" : "A lista de grupos está baleira", "Unable to retrieve the group list" : "Non é posíbel recuperar a lista de grupos", "{actor} added you to group {group}" : "{actor} engadiuno ao grupo {group}", - "You added {user} to group {group}" : "Vostede engadiu a {actor} ao grupo {group}", + "You added {user} to group {group}" : "Vde. engadiu a {actor} ao grupo {group}", "{actor} added {user} to group {group}" : "{actor} engadiu a {user} ao grupo {group}", "An administrator added you to group {group}" : "Un administrador engadiuno ao grupo {group} ", "An administrator added {user} to group {group}" : "Un administrador engadiu a {user} ao grupo {group}", "{actor} removed you from group {group}" : "{actor} retirouno do grupo {group}", - "You removed {user} from group {group}" : "Vostede retirou a {user} do grupo {group}", + "You removed {user} from group {group}" : "Vde. retirou a {user} do grupo {group}", "{actor} removed {user} from group {group}" : "{actor} retirou a {user} do grupo {group}", "An administrator removed you from group {group}" : "Un administrador retirouno do grupo {group} ", "An administrator removed {user} from group {group}" : "Un administrador retirou a {user} do grupo {group}", "Your <strong>group memberships</strong> were modified" : "Foron modificados os <strong>membros do seu grupo</strong>", "{actor} changed your password" : "{actor} cambiou o seu contrasinal", - "You changed your password" : "Vostede cambiou o seu contrasinal", + "You changed your password" : "Vde. cambiou o seu contrasinal", "Your password was reset by an administrator" : "O seu contrasinal foi restabelecido por un administrador", "Your password was reset" : "O seu contrasinal foi restabelecido", "{actor} changed your email address" : "{actor} cambiou o seu enderezo de correo", - "You changed your email address" : "Vostede cambiou o seu enderezo de correo", + "You changed your email address" : "Vde. cambiou o seu enderezo de correo", "Your email address was changed by an administrator" : "O seu enderezo de correo foi cambiado por un administrador", "You created an app password for a session named \"{token}\"" : "Creou un contrasinal de aplicación para unha sesión chamada «{token}»", "An administrator created an app password for a session named \"{token}\"" : "Un administrador creou un contrasinal de aplicación para unha sesión chamada «{token}»", - "You deleted app password \"{token}\"" : "Vostede eliminou o contrasinal da aplicación «{token}»", - "You renamed app password \"{token}\" to \"{newToken}\"" : "Vostede renomeou o contrasinal da aplicación «{token}» como «{newToken}»", - "You granted filesystem access to app password \"{token}\"" : "Vostede concedeu acceso ao sistema de ficheiros ao contrasinal da aplicación «{token}»", - "You revoked filesystem access from app password \"{token}\"" : "Vostede revogou o acceso ao sistema de ficheiros dende o contrasinal da aplicación «{token}»", + "You deleted app password \"{token}\"" : "Vde. eliminou o contrasinal da aplicación «{token}»", + "You renamed app password \"{token}\" to \"{newToken}\"" : "Vde. renomeou o contrasinal da aplicación «{token}» como «{newToken}»", + "You granted filesystem access to app password \"{token}\"" : "Vde. concedeu acceso ao sistema de ficheiros ao contrasinal da aplicación «{token}»", + "You revoked filesystem access from app password \"{token}\"" : "Vde. revogou o acceso ao sistema de ficheiros dende o contrasinal da aplicación «{token}»", "Security" : "Seguranza", "You successfully logged in using two-factor authentication (%1$s)" : "Accedeu satisfactoriamente usando autenticación de dous factores (%1$s)", "A login attempt using two-factor authentication failed (%1$s)" : "Fallou un intento de acceso usando autenticación de dous factores (%1$s)", @@ -78,7 +78,7 @@ "Invalid SMTP password." : "Contrasinal SMTP incorrecta.", "Email setting test" : "Proba do axuste do correo", "Well done, %s!" : "Ben feito, %s!", - "If you received this email, the email configuration seems to be correct." : "Se vostede ten recibido este correo, a configuración do correo semella ser correcta. ", + "If you received this email, the email configuration seems to be correct." : "Se Vde. ten recibido este correo, a configuración do correo semella ser correcta. ", "Email could not be sent. Check your mail server log" : "Non foi posíbel enviar o correo. Comprobe o rexistro do servidor de correo", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Ocorreu un problema ao enviar o correo. Revise os seus axustes. (Erro: %s)", "You need to set your user email before being able to send test emails. Go to %s for that." : "É necesario estabelecer o seu correo de usuario antes de poder enviar correos de proba. Vaia a %spara iso.", @@ -99,7 +99,7 @@ "Your password on %s was reset." : "Foi restabelecido o seu contrasinal en %s.", "Password for %1$s changed on %2$s" : "Contrasinal para %1$s cambiado en %2$s", "Password changed for %s" : "Contrasinal cambiado por %s", - "If you did not request this, please contact an administrator." : "Se vostede non solicitou isto, póñase en contacto coa administración desta instancia.", + "If you did not request this, please contact an administrator." : "Se Vde. non solicitou isto, póñase en contacto coa administración desta instancia.", "Your email address on %s was changed." : "Foi cambiado o seu enderezo de correo en %s.", "Your email address on %s was changed by an administrator." : "O seu enderezo de correo en %s foi cambiado por un administrador", "Email address for %1$s changed on %2$s" : "Enderezo de correo para %1$s cambiado en %2$s", @@ -254,7 +254,7 @@ "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "O cifrado por si só non garante a seguranza do sistema. Vexa a documentación para obter máis información sobre como funciona a aplicación de cifrado e os casos de uso admitidos.", "Be aware that encryption always increases the file size." : "Teña presente que o cifrado sempre incrementa o tamaño do ficheiro.", "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Sempre é bo crear copias de seguranza dos seus datos, no caso do cifrado, asegúrese de ter unha copia de seguranza das chaves de cifrado xunto cos seus datos.", - "This is the final warning: Do you really want to enable encryption?" : "Esta é a advertencia final. Confirma que quere activar o cifrado?", + "This is the final warning: Do you really want to enable encryption?" : "Esta é a última advertencia: confirma que quere activar o cifrado?", "No encryption module loaded, please enable an encryption module in the app menu." : "Non hai cargado ningún módulo de cifrado, active un módulo de cifrado no menú de aplicacións.", "Select default encryption module:" : "Seleccionar o módulo predeterminado de cifrado:", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run {command}" : "É necesario migrar as súas chave de cifrado do antigo cifrado (ownCloud <= 8,0) cara ao novo. Active o «Módulo predeterminado de cifrado» e execute {command}", @@ -284,7 +284,7 @@ "Error removing profile picture" : "Produciuse un erro ao retirar a imaxe de perfil", "Your biography" : "A súa biografía", "Details" : "Detalles", - "You are a member of the following groups:" : "Vostede é membro dos seguintes grupos:", + "You are a member of the following groups:" : "Vde. é membro dos seguintes grupos:", "You are using <strong>{usage}</strong>" : "Está a usar <strong>{usage}</strong>", "You are using <strong>{usage}</strong> of <strong>{totalSpace}</strong> (<strong>{usageRelative}%</strong>)" : "Está a usar <strong>{usage}</strong> de <strong>{totalSpace}</strong> (<strong>{usageRelative}%</strong>)", "Your full name" : "O seu nome completo", @@ -361,7 +361,7 @@ "Add new user" : "Engadir un novo usuario", "Username will be autogenerated" : "O nome de usuario vai ser xerado automaticamente", "Username (required)" : "Nome de usuario (obrigatorio)", - "You do not have permissions to see the details of this user" : "Vostede non ten permisos para ver os detalles deste usuario", + "You do not have permissions to see the details of this user" : "Vde. non ten permisos para ver os detalles deste usuario", "Edit display name" : "Editar o nome para amosar", "Add new password" : "Engadir un novo contrasinal", "Add new email address" : "Engadir un novo enderezo de correo", @@ -522,7 +522,7 @@ "This community release of Nextcloud is unsupported and instant notifications are unavailable." : "Esta versión comunitaria de Nextcloud non é compatíbel e as notificacións instantáneas non están dispoñíbeis.", "Use a second factor besides your password to increase security for your account." : "Empregue un segundo factor ademais do seu contrasinal para aumentar a seguranza da súa conta.", "If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : " Se usa aplicacións de terceiros para conectarse a Nextcloud, asegúrese de crear e configurar un contrasinal de aplicación para cada unha antes de activar a autenticación de segundo factor.", - "You created app password \"{token}\"" : "Vostede creou o contrasinal da aplicación «{token}»", + "You created app password \"{token}\"" : "Vde. creou o contrasinal da aplicación «{token}»", "An administrator created app password \"{token}\"" : "Un administrador creou o contrasinal da aplicación «{token}»", "Choose profile picture from files" : "Escolla a imaxe de perfil en ficheiros", "png or jpg, max. 20 MB" : "png ou jpg, max. 20 MB", diff --git a/apps/settings/l10n/pt_BR.js b/apps/settings/l10n/pt_BR.js index 9c64cc6275d..c9dd52f52da 100644 --- a/apps/settings/l10n/pt_BR.js +++ b/apps/settings/l10n/pt_BR.js @@ -380,9 +380,14 @@ OC.L10N.register( "In case of lost device or exiting the organization, this can remotely wipe the Nextcloud data from all devices associated with {userid}. Only works if the devices are connected to the internet." : "Em caso de perda do dispositivo ou saída da organização, pode-se limpar remotamente os dados do Nextcloud dos dispositivos associados ao {userid}. Só funciona se estiverem conectados à Internet.", "Remote wipe of devices" : "Limpeza remota de dispositivos", "Wipe {userid}'s devices" : "Limpar os dispositivos de {userid}", + "Wiped {userid}'s devices" : "Dispositivos de {userid}'s apagados", + "Update of user manager was failed" : "A atualização do gerenciador de usuários falhou", "Fully delete {userid}'s account including all their personal files, app data, etc." : "Excluir a conta de {userid}, incluindo todos os arquivos pessoais, dados de aplicativos, etc", "Account deletion" : "Exclusão de conta", "Delete {userid}'s account" : "Excluir a conta de {userid}", + "Display name was successfully changed" : "O nome de exibição foi alterado com sucesso", + "Password was successfully changed" : "A senha foi alterada com sucesso", + "Email was successfully changed" : "O e-mail foi alterado com sucesso", "Welcome mail sent!" : "E-mail de boas-vindas enviado!", "Toggle user actions menu" : "Alternar o menu de ações do usuário", "Edit" : "Editar", diff --git a/apps/settings/l10n/pt_BR.json b/apps/settings/l10n/pt_BR.json index b2b77c3aa79..965eed67862 100644 --- a/apps/settings/l10n/pt_BR.json +++ b/apps/settings/l10n/pt_BR.json @@ -378,9 +378,14 @@ "In case of lost device or exiting the organization, this can remotely wipe the Nextcloud data from all devices associated with {userid}. Only works if the devices are connected to the internet." : "Em caso de perda do dispositivo ou saída da organização, pode-se limpar remotamente os dados do Nextcloud dos dispositivos associados ao {userid}. Só funciona se estiverem conectados à Internet.", "Remote wipe of devices" : "Limpeza remota de dispositivos", "Wipe {userid}'s devices" : "Limpar os dispositivos de {userid}", + "Wiped {userid}'s devices" : "Dispositivos de {userid}'s apagados", + "Update of user manager was failed" : "A atualização do gerenciador de usuários falhou", "Fully delete {userid}'s account including all their personal files, app data, etc." : "Excluir a conta de {userid}, incluindo todos os arquivos pessoais, dados de aplicativos, etc", "Account deletion" : "Exclusão de conta", "Delete {userid}'s account" : "Excluir a conta de {userid}", + "Display name was successfully changed" : "O nome de exibição foi alterado com sucesso", + "Password was successfully changed" : "A senha foi alterada com sucesso", + "Email was successfully changed" : "O e-mail foi alterado com sucesso", "Welcome mail sent!" : "E-mail de boas-vindas enviado!", "Toggle user actions menu" : "Alternar o menu de ações do usuário", "Edit" : "Editar", diff --git a/apps/sharebymail/l10n/gl.js b/apps/sharebymail/l10n/gl.js index e862d8891c8..7788274ce99 100644 --- a/apps/sharebymail/l10n/gl.js +++ b/apps/sharebymail/l10n/gl.js @@ -12,28 +12,28 @@ OC.L10N.register( "You unshared {file} from {email} by mail" : "Deixou de compartir {file} dende {email} por correo", "{actor} unshared {file} from {email} by mail" : "{actor} deixou de compartir {file} dende {email} por correo", "Password to access {file} was sent to {email}" : "Envióuselle a {email} un contrasinal para acceder a {file}", - "Password to access {file} was sent to you" : "Envióuselle a vostede un correo para acceder a {file}", + "Password to access {file} was sent to you" : "Envióuselle a Vde. un correo para acceder a {file}", "Share by mail" : "Compartido por correo", "Sharing %1$s failed, because this item is already shared with user %2$s" : "Fallou a compartición de %1$s por mor de que este elemento xa foi compartido co usuario %2$s", "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Non é posíbel enviarlle o contrasinal xerado automaticamente. Estabeleza un enderezo de correo correcto nos seus axustes persoais e ténteo de novo.", "Failed to send share by email. Got an invalid email address" : "Produciuse un erro ao enviar o recurso compartido por correo. O enderezo de correo non é válido", "Failed to send share by email" : "Produciuse un fallo ao enviar o recurso compartido por correo", - "%1$s shared »%2$s« with you" : "%1$s compartiu «%2$s» con vostede", - "%1$s shared »%2$s« with you." : "%1$s compartiu «%2$s» con vostede.", + "%1$s shared »%2$s« with you" : "%1$s compartiu «%2$s» con Vde.", + "%1$s shared »%2$s« with you." : "%1$s compartiu «%2$s» con Vde.", "Click the button below to open it." : "Prema no botón de embaixo para abrilo.", "Open »%s«" : "Abrir «%s»", "%1$s via %2$s" : "%1$s mediante %2$s", - "%1$s shared »%2$s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%1$s compartiu «%2$s» con vostede.\nDebería ter recibido un correo por separado cunha ligazón acceder.\n", - "%1$s shared »%2$s« with you. You should have already received a separate mail with a link to access it." : "%1$s compartiu «%2$s» con vostede. Debería ter recibido un correo por separado cunha ligazón acceder.", - "Password to access »%1$s« shared to you by %2$s" : "O contrasinal para acceder a «%1$s» foi compartido con vostede por %2$s", + "%1$s shared »%2$s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%1$s compartiu «%2$s» con Vde.\nDebería ter recibido un correo por separado cunha ligazón acceder.\n", + "%1$s shared »%2$s« with you. You should have already received a separate mail with a link to access it." : "%1$s compartiu «%2$s» con Vde. Debería ter recibido un correo por separado cunha ligazón acceder.", + "Password to access »%1$s« shared to you by %2$s" : "O contrasinal para acceder a «%1$s» foi compartido con Vde. por %2$s", "Password to access »%s«" : "Contrasinal para acceder a «%s»", "It is protected with the following password:" : "Está protexido co seguinte contrasinal: ", "This password will expire at %s" : "Este contrasinal caducará o %s", - "%1$s shared »%2$s« with you and wants to add:" : "%1$s compartiu «%2$s» con vostede e quere engadir:", - "%1$s shared »%2$s« with you and wants to add" : "%1$s compartiu «%2$s» con vostede e quere engadir", - "»%s« added a note to a file shared with you" : "«%s» engadiu unha nota a un ficheiro compartido con vostede", - "You just shared »%1$s« with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Ven de de compartir «%1$s» con %2$s. O recurso compartido xa foi enviado ao destinatario. Por mor das directivas de seguranza definidas polo administrador de %3$s cada recurso compartido necesita ser protexido por un contrasinal e non está permitido que vostede envíe o contrasinal directamente ao destinatario. Daquela, necesita enviar manualmente o contrasinal ao destinatario.", - "Password to access »%1$s« shared by you with %2$s" : "Contrasinal para acceder a «%1$s» compartida por vostede con %2$s", + "%1$s shared »%2$s« with you and wants to add:" : "%1$s compartiu «%2$s» con Vde. e quere engadir:", + "%1$s shared »%2$s« with you and wants to add" : "%1$s compartiu «%2$s» con Vde. e quere engadir", + "»%s« added a note to a file shared with you" : "«%s» engadiu unha nota a un ficheiro compartido con Vde.", + "You just shared »%1$s« with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Ven de de compartir «%1$s» con %2$s. O recurso compartido xa foi enviado ao destinatario. Por mor das directivas de seguranza definidas polo administrador de %3$s cada recurso compartido necesita ser protexido por un contrasinal e non está permitido que Vde. envíe o contrasinal directamente ao destinatario. Daquela, necesita enviar manualmente o contrasinal ao destinatario.", + "Password to access »%1$s« shared by you with %2$s" : "Contrasinal para acceder a «%1$s» compartida por Vde. con %2$s", "This is the password:" : "Este é o contrasinal:", "You can choose a different password at any time in the share dialog." : "Pode escoller un contrasinal diferente en calquera momento no diálogo de compartir.", "Could not find share" : "Non foi posíbel atopar o recurso compartido", @@ -52,6 +52,6 @@ OC.L10N.register( "You unshared %1$s from %2$s by mail" : "Deixou de compartir %1$s dende %2$s por correo", "%3$s unshared %1$s from %2$s by mail" : "%3$s deixou de compartir %1$s dende %2$s por correo", "Password to access %1$s was sent to %2s" : "Envióuselle a %2s un contrasinal para acceder a %1$s", - "Password to access %1$s was sent to you" : "Envióuselle a vostede un correo para acceder a %1$s" + "Password to access %1$s was sent to you" : "Envióuselle a Vde. un correo para acceder a %1$s" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/sharebymail/l10n/gl.json b/apps/sharebymail/l10n/gl.json index 37d826245b8..ea400dcaf06 100644 --- a/apps/sharebymail/l10n/gl.json +++ b/apps/sharebymail/l10n/gl.json @@ -10,28 +10,28 @@ "You unshared {file} from {email} by mail" : "Deixou de compartir {file} dende {email} por correo", "{actor} unshared {file} from {email} by mail" : "{actor} deixou de compartir {file} dende {email} por correo", "Password to access {file} was sent to {email}" : "Envióuselle a {email} un contrasinal para acceder a {file}", - "Password to access {file} was sent to you" : "Envióuselle a vostede un correo para acceder a {file}", + "Password to access {file} was sent to you" : "Envióuselle a Vde. un correo para acceder a {file}", "Share by mail" : "Compartido por correo", "Sharing %1$s failed, because this item is already shared with user %2$s" : "Fallou a compartición de %1$s por mor de que este elemento xa foi compartido co usuario %2$s", "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Non é posíbel enviarlle o contrasinal xerado automaticamente. Estabeleza un enderezo de correo correcto nos seus axustes persoais e ténteo de novo.", "Failed to send share by email. Got an invalid email address" : "Produciuse un erro ao enviar o recurso compartido por correo. O enderezo de correo non é válido", "Failed to send share by email" : "Produciuse un fallo ao enviar o recurso compartido por correo", - "%1$s shared »%2$s« with you" : "%1$s compartiu «%2$s» con vostede", - "%1$s shared »%2$s« with you." : "%1$s compartiu «%2$s» con vostede.", + "%1$s shared »%2$s« with you" : "%1$s compartiu «%2$s» con Vde.", + "%1$s shared »%2$s« with you." : "%1$s compartiu «%2$s» con Vde.", "Click the button below to open it." : "Prema no botón de embaixo para abrilo.", "Open »%s«" : "Abrir «%s»", "%1$s via %2$s" : "%1$s mediante %2$s", - "%1$s shared »%2$s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%1$s compartiu «%2$s» con vostede.\nDebería ter recibido un correo por separado cunha ligazón acceder.\n", - "%1$s shared »%2$s« with you. You should have already received a separate mail with a link to access it." : "%1$s compartiu «%2$s» con vostede. Debería ter recibido un correo por separado cunha ligazón acceder.", - "Password to access »%1$s« shared to you by %2$s" : "O contrasinal para acceder a «%1$s» foi compartido con vostede por %2$s", + "%1$s shared »%2$s« with you.\nYou should have already received a separate mail with a link to access it.\n" : "%1$s compartiu «%2$s» con Vde.\nDebería ter recibido un correo por separado cunha ligazón acceder.\n", + "%1$s shared »%2$s« with you. You should have already received a separate mail with a link to access it." : "%1$s compartiu «%2$s» con Vde. Debería ter recibido un correo por separado cunha ligazón acceder.", + "Password to access »%1$s« shared to you by %2$s" : "O contrasinal para acceder a «%1$s» foi compartido con Vde. por %2$s", "Password to access »%s«" : "Contrasinal para acceder a «%s»", "It is protected with the following password:" : "Está protexido co seguinte contrasinal: ", "This password will expire at %s" : "Este contrasinal caducará o %s", - "%1$s shared »%2$s« with you and wants to add:" : "%1$s compartiu «%2$s» con vostede e quere engadir:", - "%1$s shared »%2$s« with you and wants to add" : "%1$s compartiu «%2$s» con vostede e quere engadir", - "»%s« added a note to a file shared with you" : "«%s» engadiu unha nota a un ficheiro compartido con vostede", - "You just shared »%1$s« with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Ven de de compartir «%1$s» con %2$s. O recurso compartido xa foi enviado ao destinatario. Por mor das directivas de seguranza definidas polo administrador de %3$s cada recurso compartido necesita ser protexido por un contrasinal e non está permitido que vostede envíe o contrasinal directamente ao destinatario. Daquela, necesita enviar manualmente o contrasinal ao destinatario.", - "Password to access »%1$s« shared by you with %2$s" : "Contrasinal para acceder a «%1$s» compartida por vostede con %2$s", + "%1$s shared »%2$s« with you and wants to add:" : "%1$s compartiu «%2$s» con Vde. e quere engadir:", + "%1$s shared »%2$s« with you and wants to add" : "%1$s compartiu «%2$s» con Vde. e quere engadir", + "»%s« added a note to a file shared with you" : "«%s» engadiu unha nota a un ficheiro compartido con Vde.", + "You just shared »%1$s« with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Ven de de compartir «%1$s» con %2$s. O recurso compartido xa foi enviado ao destinatario. Por mor das directivas de seguranza definidas polo administrador de %3$s cada recurso compartido necesita ser protexido por un contrasinal e non está permitido que Vde. envíe o contrasinal directamente ao destinatario. Daquela, necesita enviar manualmente o contrasinal ao destinatario.", + "Password to access »%1$s« shared by you with %2$s" : "Contrasinal para acceder a «%1$s» compartida por Vde. con %2$s", "This is the password:" : "Este é o contrasinal:", "You can choose a different password at any time in the share dialog." : "Pode escoller un contrasinal diferente en calquera momento no diálogo de compartir.", "Could not find share" : "Non foi posíbel atopar o recurso compartido", @@ -50,6 +50,6 @@ "You unshared %1$s from %2$s by mail" : "Deixou de compartir %1$s dende %2$s por correo", "%3$s unshared %1$s from %2$s by mail" : "%3$s deixou de compartir %1$s dende %2$s por correo", "Password to access %1$s was sent to %2s" : "Envióuselle a %2s un contrasinal para acceder a %1$s", - "Password to access %1$s was sent to you" : "Envióuselle a vostede un correo para acceder a %1$s" + "Password to access %1$s was sent to you" : "Envióuselle a Vde. un correo para acceder a %1$s" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/systemtags/l10n/gl.js b/apps/systemtags/l10n/gl.js index 0c2c7d82cb0..46c7b6eaca0 100644 --- a/apps/systemtags/l10n/gl.js +++ b/apps/systemtags/l10n/gl.js @@ -15,28 +15,28 @@ OC.L10N.register( "Removed system tag %1$s" : "Retirada a etiqueta de sistema %1$s", "%1$s removed system tag %2$s" : "%1$s retirou a etiqueta de sistema %2$s", "{actor} removed system tag {systemtag}" : "{actor} retirou a etiqueta de sistema {systemtag}", - "You created system tag %1$s" : "Vostede creou a etiqueta de sistema %1$s", - "You created system tag {systemtag}" : "Vostede creou a etiqueta de sistema {systemtag}", + "You created system tag %1$s" : "Vde. creou a etiqueta de sistema %1$s", + "You created system tag {systemtag}" : "Vde. creou a etiqueta de sistema {systemtag}", "%1$s created system tag %2$s" : "%1$s creou a etiqueta de sistema %2$s", "{actor} created system tag {systemtag}" : "{actor} creou a etiqueta de sistema {systemtag}", - "You deleted system tag %1$s" : "Vostede eliminou a etiqueta de sistema %1$s", - "You deleted system tag {systemtag}" : "Vostede eliminou a etiqueta de sistema {systemtag}", + "You deleted system tag %1$s" : "Vde. eliminou a etiqueta de sistema %1$s", + "You deleted system tag {systemtag}" : "Vde. eliminou a etiqueta de sistema {systemtag}", "%1$s deleted system tag %2$s" : "%1$s eliminou a etiqueta de sistema %2$s", "{actor} deleted system tag {systemtag}" : "{actor} eliminou a etiqueta de sistema {systemtag}", - "You updated system tag %2$s to %1$s" : "Vostede actualizou a etiqueta de sistema %2$s a %1$s", - "You updated system tag {oldsystemtag} to {newsystemtag}" : "Vostede actualizou a etiqueta de sistema {oldsystemtag} a {newsystemtag}", + "You updated system tag %2$s to %1$s" : "Vde. actualizou a etiqueta de sistema %2$s a %1$s", + "You updated system tag {oldsystemtag} to {newsystemtag}" : "Vde. actualizou a etiqueta de sistema {oldsystemtag} a {newsystemtag}", "%1$s updated system tag %3$s to %2$s" : "%1$s actualizou a etiqueta de sistema %3$s a %2$s", "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} actualizou a etiqueta de sistema {oldsystemtag} a {newsystemtag}", "System tag %2$s was added to %1$s by the system" : "Etiqueta de sistema %2$sfoi engadida a %1$s polo sistema", "System tag {systemtag} was added to {file} by the system" : "Etiqueta de sistema {systemtag} foi engadida a {file} polo sistema", - "You added system tag %2$s to %1$s" : "Vostede engadiu a etiqueta de sistema %2$s a %1$s", - "You added system tag {systemtag} to {file}" : "Vostede engadiu a etiqueta de sistema {systemtag} a {file}", + "You added system tag %2$s to %1$s" : "Vde. engadiu a etiqueta de sistema %2$s a %1$s", + "You added system tag {systemtag} to {file}" : "Vde. engadiu a etiqueta de sistema {systemtag} a {file}", "%1$s added system tag %3$s to %2$s" : "%1$s engadiu a etiqueta de sistema %3$s a %2$s", "{actor} added system tag {systemtag} to {file}" : "{actor} engadiu a etiqueta de sistema {systemtag} a {file}", "System tag %2$s was removed from %1$s by the system" : "Etiqueta de sistema %2$s retirada de %1$s polo sistema", "System tag {systemtag} was removed from {file} by the system" : "Etiqueta de sistema {systemtag} retirada de {file} polo sistema", - "You removed system tag %2$s from %1$s" : "Vostede retirou a etiqueta de sistema %2$s de %1$s", - "You removed system tag {systemtag} from {file}" : "Vostede retirou a etiqueta de sistema {systemtag} de {file}", + "You removed system tag %2$s from %1$s" : "Vde. retirou a etiqueta de sistema %2$s de %1$s", + "You removed system tag {systemtag} from {file}" : "Vde. retirou a etiqueta de sistema {systemtag} de {file}", "%1$s removed system tag %3$s from %2$s" : "%1$s retirou a etiqueta de sistema %3$s de %2$s", "{actor} removed system tag {systemtag} from {file}" : "{actor} retirou a etiqueta de sistema {systemtag} de {file}", "%s (restricted)" : "%s (restrinxida)", @@ -47,17 +47,17 @@ OC.L10N.register( "tagged %s" : "etiquetado %s", "Collaborative tags" : "Etiquetas colaborativas", "Collaborative tagging functionality which shares tags among users." : "Funcionalidade de etiquetado colaborativo que comparte as etiquetas entre usuarios.", - "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Funcionalidade de etiquetado colaborativo que comparte as etiquetas entre usuarios. Moi axeitado para equipos.\n(Se vostede é un provedor cunha instalación de varias instalacións, recoméndase desactivar esta aplicación xa que as etiquetas compártense).", + "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Funcionalidade de etiquetado colaborativo que comparte as etiquetas entre usuarios. Moi axeitado para equipos.\n(Se Vde. é un provedor cunha instalación de varias instalacións, recoméndase desactivar esta aplicación xa que as etiquetas compártense).", "Loading collaborative tags …" : "Cargando etiquetas colaborativas…", "Search or create collaborative tags" : "Buscar ou crear etiquetas colaborativas", "Collaborative tags …" : "Etiquetas colaborativas…", "No tags to select, type to create a new tag" : "Non hai etiquetas que seleccionar, escriba para crear unha nova", "Failed to load tags" : "Produciuse un fallo ao cargar as etiquetas", - "Failed to load selected tags" : "Produciuse un erro ao cargar as etiquetas seleccionadas", - "Failed to select tag" : "Produciuse un erro ao seleccionar a etiqueta", - "Failed to create tag" : "Produciuse un erro ao crear a etiqueta", - "Failed to delete tag" : "Produciuse un erro ao eliminar a etiqueta", - "Failed to load last used tags" : "Produciuse un erro ao cargar as últimas etiquetas utilizadas", + "Failed to load selected tags" : "Produciuse un fallo ao cargar as etiquetas seleccionadas", + "Failed to select tag" : "Produciuse un fallo ao seleccionar a etiqueta", + "Failed to create tag" : "Produciuse un fallo ao crear a etiqueta", + "Failed to delete tag" : "Produciuse un fallo ao eliminar a etiqueta", + "Failed to load last used tags" : "Produciuse un fallo ao cargar as últimas etiquetas utilizadas", "Missing \"Content-Location\" header" : "Falta a cabeceira «Content-Location».", "Tagged files" : "Ficheiros etiquetados", "Select tags to filter by" : "Seleccionar etiquetas polas que filtrar", diff --git a/apps/systemtags/l10n/gl.json b/apps/systemtags/l10n/gl.json index 7e668b7f5f7..f9ea76b7b81 100644 --- a/apps/systemtags/l10n/gl.json +++ b/apps/systemtags/l10n/gl.json @@ -13,28 +13,28 @@ "Removed system tag %1$s" : "Retirada a etiqueta de sistema %1$s", "%1$s removed system tag %2$s" : "%1$s retirou a etiqueta de sistema %2$s", "{actor} removed system tag {systemtag}" : "{actor} retirou a etiqueta de sistema {systemtag}", - "You created system tag %1$s" : "Vostede creou a etiqueta de sistema %1$s", - "You created system tag {systemtag}" : "Vostede creou a etiqueta de sistema {systemtag}", + "You created system tag %1$s" : "Vde. creou a etiqueta de sistema %1$s", + "You created system tag {systemtag}" : "Vde. creou a etiqueta de sistema {systemtag}", "%1$s created system tag %2$s" : "%1$s creou a etiqueta de sistema %2$s", "{actor} created system tag {systemtag}" : "{actor} creou a etiqueta de sistema {systemtag}", - "You deleted system tag %1$s" : "Vostede eliminou a etiqueta de sistema %1$s", - "You deleted system tag {systemtag}" : "Vostede eliminou a etiqueta de sistema {systemtag}", + "You deleted system tag %1$s" : "Vde. eliminou a etiqueta de sistema %1$s", + "You deleted system tag {systemtag}" : "Vde. eliminou a etiqueta de sistema {systemtag}", "%1$s deleted system tag %2$s" : "%1$s eliminou a etiqueta de sistema %2$s", "{actor} deleted system tag {systemtag}" : "{actor} eliminou a etiqueta de sistema {systemtag}", - "You updated system tag %2$s to %1$s" : "Vostede actualizou a etiqueta de sistema %2$s a %1$s", - "You updated system tag {oldsystemtag} to {newsystemtag}" : "Vostede actualizou a etiqueta de sistema {oldsystemtag} a {newsystemtag}", + "You updated system tag %2$s to %1$s" : "Vde. actualizou a etiqueta de sistema %2$s a %1$s", + "You updated system tag {oldsystemtag} to {newsystemtag}" : "Vde. actualizou a etiqueta de sistema {oldsystemtag} a {newsystemtag}", "%1$s updated system tag %3$s to %2$s" : "%1$s actualizou a etiqueta de sistema %3$s a %2$s", "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} actualizou a etiqueta de sistema {oldsystemtag} a {newsystemtag}", "System tag %2$s was added to %1$s by the system" : "Etiqueta de sistema %2$sfoi engadida a %1$s polo sistema", "System tag {systemtag} was added to {file} by the system" : "Etiqueta de sistema {systemtag} foi engadida a {file} polo sistema", - "You added system tag %2$s to %1$s" : "Vostede engadiu a etiqueta de sistema %2$s a %1$s", - "You added system tag {systemtag} to {file}" : "Vostede engadiu a etiqueta de sistema {systemtag} a {file}", + "You added system tag %2$s to %1$s" : "Vde. engadiu a etiqueta de sistema %2$s a %1$s", + "You added system tag {systemtag} to {file}" : "Vde. engadiu a etiqueta de sistema {systemtag} a {file}", "%1$s added system tag %3$s to %2$s" : "%1$s engadiu a etiqueta de sistema %3$s a %2$s", "{actor} added system tag {systemtag} to {file}" : "{actor} engadiu a etiqueta de sistema {systemtag} a {file}", "System tag %2$s was removed from %1$s by the system" : "Etiqueta de sistema %2$s retirada de %1$s polo sistema", "System tag {systemtag} was removed from {file} by the system" : "Etiqueta de sistema {systemtag} retirada de {file} polo sistema", - "You removed system tag %2$s from %1$s" : "Vostede retirou a etiqueta de sistema %2$s de %1$s", - "You removed system tag {systemtag} from {file}" : "Vostede retirou a etiqueta de sistema {systemtag} de {file}", + "You removed system tag %2$s from %1$s" : "Vde. retirou a etiqueta de sistema %2$s de %1$s", + "You removed system tag {systemtag} from {file}" : "Vde. retirou a etiqueta de sistema {systemtag} de {file}", "%1$s removed system tag %3$s from %2$s" : "%1$s retirou a etiqueta de sistema %3$s de %2$s", "{actor} removed system tag {systemtag} from {file}" : "{actor} retirou a etiqueta de sistema {systemtag} de {file}", "%s (restricted)" : "%s (restrinxida)", @@ -45,17 +45,17 @@ "tagged %s" : "etiquetado %s", "Collaborative tags" : "Etiquetas colaborativas", "Collaborative tagging functionality which shares tags among users." : "Funcionalidade de etiquetado colaborativo que comparte as etiquetas entre usuarios.", - "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Funcionalidade de etiquetado colaborativo que comparte as etiquetas entre usuarios. Moi axeitado para equipos.\n(Se vostede é un provedor cunha instalación de varias instalacións, recoméndase desactivar esta aplicación xa que as etiquetas compártense).", + "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Funcionalidade de etiquetado colaborativo que comparte as etiquetas entre usuarios. Moi axeitado para equipos.\n(Se Vde. é un provedor cunha instalación de varias instalacións, recoméndase desactivar esta aplicación xa que as etiquetas compártense).", "Loading collaborative tags …" : "Cargando etiquetas colaborativas…", "Search or create collaborative tags" : "Buscar ou crear etiquetas colaborativas", "Collaborative tags …" : "Etiquetas colaborativas…", "No tags to select, type to create a new tag" : "Non hai etiquetas que seleccionar, escriba para crear unha nova", "Failed to load tags" : "Produciuse un fallo ao cargar as etiquetas", - "Failed to load selected tags" : "Produciuse un erro ao cargar as etiquetas seleccionadas", - "Failed to select tag" : "Produciuse un erro ao seleccionar a etiqueta", - "Failed to create tag" : "Produciuse un erro ao crear a etiqueta", - "Failed to delete tag" : "Produciuse un erro ao eliminar a etiqueta", - "Failed to load last used tags" : "Produciuse un erro ao cargar as últimas etiquetas utilizadas", + "Failed to load selected tags" : "Produciuse un fallo ao cargar as etiquetas seleccionadas", + "Failed to select tag" : "Produciuse un fallo ao seleccionar a etiqueta", + "Failed to create tag" : "Produciuse un fallo ao crear a etiqueta", + "Failed to delete tag" : "Produciuse un fallo ao eliminar a etiqueta", + "Failed to load last used tags" : "Produciuse un fallo ao cargar as últimas etiquetas utilizadas", "Missing \"Content-Location\" header" : "Falta a cabeceira «Content-Location».", "Tagged files" : "Ficheiros etiquetados", "Select tags to filter by" : "Seleccionar etiquetas polas que filtrar", diff --git a/apps/user_ldap/l10n/ar.js b/apps/user_ldap/l10n/ar.js index faf6536916f..0f7b395a65b 100644 --- a/apps/user_ldap/l10n/ar.js +++ b/apps/user_ldap/l10n/ar.js @@ -61,8 +61,10 @@ OC.L10N.register( "Your password will expire today." : "كلمة مرورك تنتهي صلاحيتها اليوم.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %n أيام.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nيوم.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nأيام.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nأيام.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nأيام.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nأيام."], "LDAP/AD integration" : "مُكاملة LDAP/AD ", + "_%n group found_::_%n groups found_" : ["تم العثور على %n مجموعات","تم العثور على %n مجموعة","تم العثور على %n مجموعات","تم العثور على %n مجموعات","تم العثور على %n مجموعات","تم العثور على %n مجموعات"], "> 1000 groups found" : "> 1000 مجموعة موجودة", "> 1000 users found" : "> 1000 مستخدِم موجود", + "_%n user found_::_%n users found_" : ["تم العثور على %n مستخدمين","تم العثور على %n مستخدم","تم العثور على %n مستخدمين","تم العثور على %n مستخدمين","تم العثور على %n مستخدمين","تم العثور على %n مستخدمين"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "تعذر اكتشاف خاصّية الاسم المعروض للمستخدم user display name attribute. يرجى تحديدها بنفسك في الإعدادات المتقدمة لخادوم LDAP.", "Could not find the desired feature" : "تعذر العثور على الميزة المطلوبة", "Invalid Host" : "مُضيف غير صالح", diff --git a/apps/user_ldap/l10n/ar.json b/apps/user_ldap/l10n/ar.json index 2eaa27d6066..776c3c441b7 100644 --- a/apps/user_ldap/l10n/ar.json +++ b/apps/user_ldap/l10n/ar.json @@ -59,8 +59,10 @@ "Your password will expire today." : "كلمة مرورك تنتهي صلاحيتها اليوم.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %n أيام.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nيوم.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nأيام.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nأيام.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nأيام.","سوف تنتهي صلاحية كلمة المرور الخاصة بك خلال %nأيام."], "LDAP/AD integration" : "مُكاملة LDAP/AD ", + "_%n group found_::_%n groups found_" : ["تم العثور على %n مجموعات","تم العثور على %n مجموعة","تم العثور على %n مجموعات","تم العثور على %n مجموعات","تم العثور على %n مجموعات","تم العثور على %n مجموعات"], "> 1000 groups found" : "> 1000 مجموعة موجودة", "> 1000 users found" : "> 1000 مستخدِم موجود", + "_%n user found_::_%n users found_" : ["تم العثور على %n مستخدمين","تم العثور على %n مستخدم","تم العثور على %n مستخدمين","تم العثور على %n مستخدمين","تم العثور على %n مستخدمين","تم العثور على %n مستخدمين"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "تعذر اكتشاف خاصّية الاسم المعروض للمستخدم user display name attribute. يرجى تحديدها بنفسك في الإعدادات المتقدمة لخادوم LDAP.", "Could not find the desired feature" : "تعذر العثور على الميزة المطلوبة", "Invalid Host" : "مُضيف غير صالح", diff --git a/apps/user_ldap/l10n/gl.js b/apps/user_ldap/l10n/gl.js index 0c2b7907ee1..bc7a4a80f89 100644 --- a/apps/user_ldap/l10n/gl.js +++ b/apps/user_ldap/l10n/gl.js @@ -65,7 +65,7 @@ OC.L10N.register( "> 1000 groups found" : "> 1000 grupos atopados", "> 1000 users found" : "> 1000 usuarios atopados", "_%n user found_::_%n users found_" : ["%n usuario atopado","%n usuarios atopados"], - "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Non foi posíbel detectar o atributo nome de usuario que amosar. Especifíqueo vostede mesmo nos axustes avanzados de LDAP. ", + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Non foi posíbel detectar o atributo nome de usuario que amosar. Especifíqueo Vde. mesmo nos axustes avanzados de LDAP. ", "Could not find the desired feature" : "Non foi posíbel atopar a función desexada", "Invalid Host" : "Máquina incorrecta", "LDAP user and group backend" : "Infraestrutura de usuarios e grupos LDAP", @@ -150,7 +150,7 @@ OC.L10N.register( "User Display Name Field" : "Campo de nome de usuario para amosar", "The LDAP attribute to use to generate the user's display name." : "O atributo LDAP a empregar para xerar o nome de usuario para amosar.", "2nd User Display Name Field" : "2º campo de nome de usuario para amosar", - "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcional. Un atributo LDAP para ser engadido no nome para amosar entre parénteses. Resulta en p.ex. «Xan Carallás (xan.carallas@exemple.org)».", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcional. Un atributo LDAP para ser engadido no nome para amosar entre parénteses. Resulta en p.ex. «Xan Carallás (xan.carallas@exemplo.org)».", "Base User Tree" : "Base da árbore de usuarios", "One User Base DN per line" : "Un DN base de usuario por liña", "User Search Attributes" : "Atributos de busca do usuario", @@ -208,7 +208,7 @@ OC.L10N.register( "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "De xeito predeterminado, o nome de usuario interno crearase a partir do atributo UUID. Isto asegura que o nome de usuario é único e que non é necesario converter os caracteres. O nome de usuario interno ten a restrición de que só se permiten estes caracteres: [a-zA-Z0-9_.@-]. Outros caracteres substitúense pola súa correspondencia ASCII ou simplemente omítense. Nos casos de colisións engadirase/aumentarase un número. O nome de usuario interno úsase para identificar un usuario internamente. Tamén é o nome predeterminado para o cartafol de inicio do usuario. Tamén forma parte dos URL remotos, por exemplo para todos os servizos DAV. Con esta configuración, pódese anular o comportamento predeterminado. Os cambios só terán efecto nos usuarios LDAP recén asignados (engadidos). Déixeo baleiro para o comportamento predeterminado.", "Internal Username Attribute:" : "Atributo do nome interno de usuario:", "Override UUID detection" : "Ignorar a detección do UUID", - "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Por omisión, o atributo UUID é detectado automaticamente. O atributo UUID utilizase para identificar, sen dúbida, aos usuarios e grupos LDAP. Ademais, crearase o nome interno de usuario baseado no UUID, se non se especifica anteriormente o contrario. Pode anular a configuración e pasar un atributo da súa escolla. Vostede debe asegurarse de que o atributo da súa escolla pode ser recuperado polos usuarios e grupos e de que é único. Déixeo baleiro para o comportamento predeterminado. Os cambios terán efecto só nas novas asignacións (engadidos) de usuarios de LDAP.", + "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Por omisión, o atributo UUID é detectado automaticamente. O atributo UUID utilizase para identificar, sen dúbida, aos usuarios e grupos LDAP. Ademais, crearase o nome interno de usuario baseado no UUID, se non se especifica anteriormente o contrario. Pode anular a configuración e pasar un atributo da súa escolla. Vde. debe asegurarse de que o atributo da súa escolla pode ser recuperado polos usuarios e grupos e de que é único. Déixeo baleiro para o comportamento predeterminado. Os cambios terán efecto só nas novas asignacións (engadidos) de usuarios de LDAP.", "UUID Attribute for Users:" : "Atributo do UUID para usuarios:", "UUID Attribute for Groups:" : "Atributo do UUID para grupos:", "Username-LDAP User Mapping" : "Asignación do usuario ao «nome de usuario LDAP»", diff --git a/apps/user_ldap/l10n/gl.json b/apps/user_ldap/l10n/gl.json index 078610eb33c..6c18b4670d0 100644 --- a/apps/user_ldap/l10n/gl.json +++ b/apps/user_ldap/l10n/gl.json @@ -63,7 +63,7 @@ "> 1000 groups found" : "> 1000 grupos atopados", "> 1000 users found" : "> 1000 usuarios atopados", "_%n user found_::_%n users found_" : ["%n usuario atopado","%n usuarios atopados"], - "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Non foi posíbel detectar o atributo nome de usuario que amosar. Especifíqueo vostede mesmo nos axustes avanzados de LDAP. ", + "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Non foi posíbel detectar o atributo nome de usuario que amosar. Especifíqueo Vde. mesmo nos axustes avanzados de LDAP. ", "Could not find the desired feature" : "Non foi posíbel atopar a función desexada", "Invalid Host" : "Máquina incorrecta", "LDAP user and group backend" : "Infraestrutura de usuarios e grupos LDAP", @@ -148,7 +148,7 @@ "User Display Name Field" : "Campo de nome de usuario para amosar", "The LDAP attribute to use to generate the user's display name." : "O atributo LDAP a empregar para xerar o nome de usuario para amosar.", "2nd User Display Name Field" : "2º campo de nome de usuario para amosar", - "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcional. Un atributo LDAP para ser engadido no nome para amosar entre parénteses. Resulta en p.ex. «Xan Carallás (xan.carallas@exemple.org)».", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcional. Un atributo LDAP para ser engadido no nome para amosar entre parénteses. Resulta en p.ex. «Xan Carallás (xan.carallas@exemplo.org)».", "Base User Tree" : "Base da árbore de usuarios", "One User Base DN per line" : "Un DN base de usuario por liña", "User Search Attributes" : "Atributos de busca do usuario", @@ -206,7 +206,7 @@ "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. Changes will have effect only on newly mapped (added) LDAP users. Leave it empty for default behavior." : "De xeito predeterminado, o nome de usuario interno crearase a partir do atributo UUID. Isto asegura que o nome de usuario é único e que non é necesario converter os caracteres. O nome de usuario interno ten a restrición de que só se permiten estes caracteres: [a-zA-Z0-9_.@-]. Outros caracteres substitúense pola súa correspondencia ASCII ou simplemente omítense. Nos casos de colisións engadirase/aumentarase un número. O nome de usuario interno úsase para identificar un usuario internamente. Tamén é o nome predeterminado para o cartafol de inicio do usuario. Tamén forma parte dos URL remotos, por exemplo para todos os servizos DAV. Con esta configuración, pódese anular o comportamento predeterminado. Os cambios só terán efecto nos usuarios LDAP recén asignados (engadidos). Déixeo baleiro para o comportamento predeterminado.", "Internal Username Attribute:" : "Atributo do nome interno de usuario:", "Override UUID detection" : "Ignorar a detección do UUID", - "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Por omisión, o atributo UUID é detectado automaticamente. O atributo UUID utilizase para identificar, sen dúbida, aos usuarios e grupos LDAP. Ademais, crearase o nome interno de usuario baseado no UUID, se non se especifica anteriormente o contrario. Pode anular a configuración e pasar un atributo da súa escolla. Vostede debe asegurarse de que o atributo da súa escolla pode ser recuperado polos usuarios e grupos e de que é único. Déixeo baleiro para o comportamento predeterminado. Os cambios terán efecto só nas novas asignacións (engadidos) de usuarios de LDAP.", + "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Por omisión, o atributo UUID é detectado automaticamente. O atributo UUID utilizase para identificar, sen dúbida, aos usuarios e grupos LDAP. Ademais, crearase o nome interno de usuario baseado no UUID, se non se especifica anteriormente o contrario. Pode anular a configuración e pasar un atributo da súa escolla. Vde. debe asegurarse de que o atributo da súa escolla pode ser recuperado polos usuarios e grupos e de que é único. Déixeo baleiro para o comportamento predeterminado. Os cambios terán efecto só nas novas asignacións (engadidos) de usuarios de LDAP.", "UUID Attribute for Users:" : "Atributo do UUID para usuarios:", "UUID Attribute for Groups:" : "Atributo do UUID para grupos:", "Username-LDAP User Mapping" : "Asignación do usuario ao «nome de usuario LDAP»", diff --git a/apps/user_ldap/l10n/pt_BR.js b/apps/user_ldap/l10n/pt_BR.js index 31556eb272e..a5220e5b5f0 100644 --- a/apps/user_ldap/l10n/pt_BR.js +++ b/apps/user_ldap/l10n/pt_BR.js @@ -155,6 +155,8 @@ OC.L10N.register( "One User Base DN per line" : "Um usuário de Base DN por linha", "User Search Attributes" : "Atributos de Busca de Usuário", "Optional; one attribute per line" : "Opcional; um atributo por linha", + "Disable users missing from LDAP" : "Desabilitar usuários ausentes do LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Quando ativado, os usuários importados do LDAP que estiverem ausentes serão desativados", "Group Display Name Field" : "Campo de nome de exibição do Grupo", "The LDAP attribute to use to generate the groups's display name." : "O atributo LDAP a usar para gerar o nome de apresentação do grupo.", "Base Group Tree" : "Árvore de Grupo Base", diff --git a/apps/user_ldap/l10n/pt_BR.json b/apps/user_ldap/l10n/pt_BR.json index 50def2eec46..3e55a77a531 100644 --- a/apps/user_ldap/l10n/pt_BR.json +++ b/apps/user_ldap/l10n/pt_BR.json @@ -153,6 +153,8 @@ "One User Base DN per line" : "Um usuário de Base DN por linha", "User Search Attributes" : "Atributos de Busca de Usuário", "Optional; one attribute per line" : "Opcional; um atributo por linha", + "Disable users missing from LDAP" : "Desabilitar usuários ausentes do LDAP", + "When switched on, users imported from LDAP which are then missing will be disabled" : "Quando ativado, os usuários importados do LDAP que estiverem ausentes serão desativados", "Group Display Name Field" : "Campo de nome de exibição do Grupo", "The LDAP attribute to use to generate the groups's display name." : "O atributo LDAP a usar para gerar o nome de apresentação do grupo.", "Base Group Tree" : "Árvore de Grupo Base", diff --git a/apps/workflowengine/l10n/ar.js b/apps/workflowengine/l10n/ar.js index 5b00ffbc102..a091151116a 100644 --- a/apps/workflowengine/l10n/ar.js +++ b/apps/workflowengine/l10n/ar.js @@ -54,6 +54,7 @@ OC.L10N.register( "Images" : "صور", "Office documents" : "مستندات المكتب", "PDF documents" : "مستندات PDF", + "Custom MIME type" : "نوع MIME مخصص", "Custom mimetype" : "أنواع ملفات مخصصة", "Please enter a valid time span" : "الرجاء إدخال نطاق زمني صالح", "Select a request URL" : "حدد عنوان URL الخاص بالطلب", diff --git a/apps/workflowengine/l10n/ar.json b/apps/workflowengine/l10n/ar.json index 3119586087a..7fb680cbe8c 100644 --- a/apps/workflowengine/l10n/ar.json +++ b/apps/workflowengine/l10n/ar.json @@ -52,6 +52,7 @@ "Images" : "صور", "Office documents" : "مستندات المكتب", "PDF documents" : "مستندات PDF", + "Custom MIME type" : "نوع MIME مخصص", "Custom mimetype" : "أنواع ملفات مخصصة", "Please enter a valid time span" : "الرجاء إدخال نطاق زمني صالح", "Select a request URL" : "حدد عنوان URL الخاص بالطلب", diff --git a/apps/workflowengine/l10n/de.js b/apps/workflowengine/l10n/de.js index 06ce3246c3b..2fd7794d476 100644 --- a/apps/workflowengine/l10n/de.js +++ b/apps/workflowengine/l10n/de.js @@ -48,6 +48,7 @@ OC.L10N.register( "Nextcloud workflow engine" : "Nextcloud Arbeitsablauf-Engine", "Select a filter" : "Filter auswählen", "Select a comparator" : "Wähle einen Komparator", + "Remove filter" : "Filter entfernen", "Select a file type" : "Dateityp auswählen", "e.g. httpd/unix-directory" : "z. B. httpd/unix-directory", "Folder" : "Ordner", @@ -66,10 +67,11 @@ OC.L10N.register( "Desktop client" : "Desktop-Client", "Thunderbird & Outlook addons" : "Thunderbird & Outlook Add-ons", "Custom user agent" : "Benutzerdefinierter User-Agent", - "At least one event must be selected" : "Mindestens ein Termin muss ausgewählt werden", + "At least one event must be selected" : "Mindestens ein Ereignis muss ausgewählt werden", "Add new flow" : "Neuen Ablauf hinzufügen", "When" : "Wenn", "and" : "und", + "Add a new filter" : "Neuen Filter hinzufügen", "Cancel" : "Abbrechen", "Delete" : "Löschen", "The configuration is invalid" : "Die Konfiguration ist ungültig", diff --git a/apps/workflowengine/l10n/de.json b/apps/workflowengine/l10n/de.json index 90f020765d4..e45b6b02632 100644 --- a/apps/workflowengine/l10n/de.json +++ b/apps/workflowengine/l10n/de.json @@ -46,6 +46,7 @@ "Nextcloud workflow engine" : "Nextcloud Arbeitsablauf-Engine", "Select a filter" : "Filter auswählen", "Select a comparator" : "Wähle einen Komparator", + "Remove filter" : "Filter entfernen", "Select a file type" : "Dateityp auswählen", "e.g. httpd/unix-directory" : "z. B. httpd/unix-directory", "Folder" : "Ordner", @@ -64,10 +65,11 @@ "Desktop client" : "Desktop-Client", "Thunderbird & Outlook addons" : "Thunderbird & Outlook Add-ons", "Custom user agent" : "Benutzerdefinierter User-Agent", - "At least one event must be selected" : "Mindestens ein Termin muss ausgewählt werden", + "At least one event must be selected" : "Mindestens ein Ereignis muss ausgewählt werden", "Add new flow" : "Neuen Ablauf hinzufügen", "When" : "Wenn", "and" : "und", + "Add a new filter" : "Neuen Filter hinzufügen", "Cancel" : "Abbrechen", "Delete" : "Löschen", "The configuration is invalid" : "Die Konfiguration ist ungültig", diff --git a/apps/workflowengine/l10n/gl.js b/apps/workflowengine/l10n/gl.js index 6e7c011d4a9..deb75bff917 100644 --- a/apps/workflowengine/l10n/gl.js +++ b/apps/workflowengine/l10n/gl.js @@ -48,13 +48,15 @@ OC.L10N.register( "Nextcloud workflow engine" : "Motor de fluxo de traballo de Nextcloud", "Select a filter" : "Seleccione un filtro", "Select a comparator" : "Seleccione un comparador", + "Remove filter" : "Retirar o filtro", "Select a file type" : "Seleccione un tipo de ficheiro", "e.g. httpd/unix-directory" : "p. ex.: httpd/unix-directory", "Folder" : "Cartafol", "Images" : "Imaxes", "Office documents" : "Documentos de oficina", "PDF documents" : "Documentos PDF", - "Custom mimetype" : "Mimetipe personalizado", + "Custom MIME type" : "Tipo MIME personalizado", + "Custom mimetype" : "Tipo MIME personalizado", "Please enter a valid time span" : "Introduza un intervalo de tempo válido", "Select a request URL" : "Seleccione un URL de solicitude", "Files WebDAV" : "Ficheiros WebDAV", @@ -69,6 +71,7 @@ OC.L10N.register( "Add new flow" : "Engadir un novo fluxo", "When" : "Cando", "and" : "e", + "Add a new filter" : "Engadir un novo filtro", "Cancel" : "Cancelar", "Delete" : "Eliminar", "The configuration is invalid" : "A configuración é incorrecta", diff --git a/apps/workflowengine/l10n/gl.json b/apps/workflowengine/l10n/gl.json index 1d2ef1ffce2..f53b96cbc07 100644 --- a/apps/workflowengine/l10n/gl.json +++ b/apps/workflowengine/l10n/gl.json @@ -46,13 +46,15 @@ "Nextcloud workflow engine" : "Motor de fluxo de traballo de Nextcloud", "Select a filter" : "Seleccione un filtro", "Select a comparator" : "Seleccione un comparador", + "Remove filter" : "Retirar o filtro", "Select a file type" : "Seleccione un tipo de ficheiro", "e.g. httpd/unix-directory" : "p. ex.: httpd/unix-directory", "Folder" : "Cartafol", "Images" : "Imaxes", "Office documents" : "Documentos de oficina", "PDF documents" : "Documentos PDF", - "Custom mimetype" : "Mimetipe personalizado", + "Custom MIME type" : "Tipo MIME personalizado", + "Custom mimetype" : "Tipo MIME personalizado", "Please enter a valid time span" : "Introduza un intervalo de tempo válido", "Select a request URL" : "Seleccione un URL de solicitude", "Files WebDAV" : "Ficheiros WebDAV", @@ -67,6 +69,7 @@ "Add new flow" : "Engadir un novo fluxo", "When" : "Cando", "and" : "e", + "Add a new filter" : "Engadir un novo filtro", "Cancel" : "Cancelar", "Delete" : "Eliminar", "The configuration is invalid" : "A configuración é incorrecta", diff --git a/build/integration/features/bootstrap/CalDavContext.php b/build/integration/features/bootstrap/CalDavContext.php index 49d8c8e5963..936463b579e 100644 --- a/build/integration/features/bootstrap/CalDavContext.php +++ b/build/integration/features/bootstrap/CalDavContext.php @@ -27,6 +27,7 @@ require __DIR__ . '/../../vendor/autoload.php'; use GuzzleHttp\Client; +use GuzzleHttp\Exception\GuzzleException; use Psr\Http\Message\ResponseInterface; class CalDavContext implements \Behat\Behat\Context\Context { @@ -233,4 +234,28 @@ class CalDavContext implements \Behat\Behat\Context\Context { ); } } + + /** + * @When :user sends a create calendar request to :calendar on the endpoint :endpoint + */ + public function sendsCreateCalendarRequest(string $user, string $calendar, string $endpoint) { + $davUrl = $this->baseUrl . $endpoint . $calendar; + $password = ($user === 'admin') ? 'admin' : '123456'; + + try { + $this->response = $this->client->request( + 'MKCALENDAR', + $davUrl, + [ + 'body' => '<c:mkcalendar xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:" xmlns:a="http://apple.com/ns/ical/" xmlns:o="http://owncloud.org/ns"><d:set><d:prop><d:displayname>test</d:displayname><o:calendar-enabled>1</o:calendar-enabled><a:calendar-color>#21213D</a:calendar-color><c:supported-calendar-component-set><c:comp name="VEVENT"/></c:supported-calendar-component-set></d:prop></d:set></c:mkcalendar>', + 'auth' => [ + $user, + $password, + ], + ] + ); + } catch (GuzzleException $e) { + $this->response = $e->getResponse(); + } + } } diff --git a/build/integration/features/bootstrap/CardDavContext.php b/build/integration/features/bootstrap/CardDavContext.php index 18a9f3dd249..80d96215eba 100644 --- a/build/integration/features/bootstrap/CardDavContext.php +++ b/build/integration/features/bootstrap/CardDavContext.php @@ -26,6 +26,7 @@ require __DIR__ . '/../../vendor/autoload.php'; use GuzzleHttp\Client; +use GuzzleHttp\Exception\GuzzleException; use GuzzleHttp\Message\ResponseInterface; class CardDavContext implements \Behat\Behat\Context\Context { @@ -311,4 +312,64 @@ class CardDavContext implements \Behat\Behat\Context\Context { } } } + + /** + * @When :user sends a create addressbook request to :addressbook on the endpoint :endpoint + */ + public function sendsCreateAddressbookRequest(string $user, string $addressbook, string $endpoint) { + $davUrl = $this->baseUrl . $endpoint . $addressbook; + $password = ($user === 'admin') ? 'admin' : '123456'; + + try { + $this->response = $this->client->request( + 'MKCOL', + $davUrl, + [ + 'body' => '<d:mkcol xmlns:card="urn:ietf:params:xml:ns:carddav" + xmlns:d="DAV:"> + <d:set> + <d:prop> + <d:resourcetype> + <d:collection />,<card:addressbook /> + </d:resourcetype>,<d:displayname>' . $addressbook . '</d:displayname> + </d:prop> + </d:set> + </d:mkcol>', + 'auth' => [ + $user, + $password, + ], + 'headers' => [ + 'Content-Type' => 'application/xml;charset=UTF-8', + ], + ] + ); + } catch (GuzzleException $e) { + $this->response = $e->getResponse(); + } + } + + /** + * @Then The CardDAV HTTP status code should be :code + * @param int $code + * @throws \Exception + */ + public function theCarddavHttpStatusCodeShouldBe($code) { + if ((int)$code !== $this->response->getStatusCode()) { + throw new \Exception( + sprintf( + 'Expected %s got %s', + (int)$code, + $this->response->getStatusCode() + ) + ); + } + + $body = $this->response->getBody()->getContents(); + if ($body && substr($body, 0, 1) === '<') { + $reader = new Sabre\Xml\Reader(); + $reader->xml($body); + $this->responseXml = $reader->parse(); + } + } } diff --git a/build/integration/features/caldav.feature b/build/integration/features/caldav.feature index 2bddbc3e9e4..e2cb4f8dc92 100644 --- a/build/integration/features/caldav.feature +++ b/build/integration/features/caldav.feature @@ -58,4 +58,20 @@ Feature: caldav Then The CalDAV HTTP status code should be "202" When "admin" requests calendar "/" on the endpoint "/remote.php/dav/public-calendars" Then The CalDAV HTTP status code should be "207" - Then There should be "0" calendars in the response body
\ No newline at end of file + Then There should be "0" calendars in the response body + + Scenario: Create calendar request for non-existing calendar of another user + Given user "user0" exists + When "user0" sends a create calendar request to "admin/MyCalendar2" on the endpoint "/remote.php/dav/calendars/" + Then The CalDAV HTTP status code should be "404" + And The exception is "Sabre\DAV\Exception\NotFound" + And The error message is "Node with name 'admin' could not be found" + + Scenario: Create calendar request for existing calendar of another user + Given user "user0" exists + When "admin" creates a calendar named "MyCalendar2" + Then The CalDAV HTTP status code should be "201" + When "user0" sends a create calendar request to "admin/MyCalendar2" on the endpoint "/remote.php/dav/calendars/" + Then The CalDAV HTTP status code should be "404" + And The exception is "Sabre\DAV\Exception\NotFound" + And The error message is "Node with name 'admin' could not be found" diff --git a/build/integration/features/carddav.feature b/build/integration/features/carddav.feature index e0c11ec8dc1..9c9df6ddd94 100644 --- a/build/integration/features/carddav.feature +++ b/build/integration/features/carddav.feature @@ -62,3 +62,18 @@ Feature: carddav |X-Permitted-Cross-Domain-Policies|none| |X-Robots-Tag|noindex, nofollow| |X-XSS-Protection|1; mode=block| + + Scenario: Create addressbook request for non-existing addressbook of another user + Given user "user0" exists + When "user0" sends a create addressbook request to "admin/MyAddressbook2" on the endpoint "/remote.php/dav/addressbooks/" + Then The CardDAV HTTP status code should be "404" + And The CardDAV exception is "Sabre\DAV\Exception\NotFound" + And The CardDAV error message is "File not found: admin in 'addressbooks'" + + Scenario: Create addressbook request for existing addressbook of another user + Given user "user0" exists + When "admin" creates an addressbook named "MyAddressbook2" with statuscode "201" + When "user0" sends a create addressbook request to "admin/MyAddressbook2" on the endpoint "/remote.php/dav/addressbooks/" + Then The CardDAV HTTP status code should be "404" + And The CardDAV exception is "Sabre\DAV\Exception\NotFound" + And The CardDAV error message is "File not found: admin in 'addressbooks'" diff --git a/build/psalm-baseline.xml b/build/psalm-baseline.xml index 530556e6d89..f27f8629da1 100644 --- a/build/psalm-baseline.xml +++ b/build/psalm-baseline.xml @@ -2248,9 +2248,6 @@ </InvalidReturnStatement> </file> <file src="lib/private/Files/Node/Node.php"> - <ImplementedReturnTypeMismatch occurrences="1"> - <code>Node</code> - </ImplementedReturnTypeMismatch> <InvalidArgument occurrences="1"> <code>'\OCP\Files::' . $hook</code> </InvalidArgument> @@ -2282,9 +2279,6 @@ </ParamNameMismatch> </file> <file src="lib/private/Files/Node/Root.php"> - <ImplementedReturnTypeMismatch occurrences="1"> - <code>Node</code> - </ImplementedReturnTypeMismatch> <InvalidNullableReturnType occurrences="1"> <code>\OC\User\User</code> </InvalidNullableReturnType> diff --git a/core/l10n/ar.js b/core/l10n/ar.js index 82ea3487a36..8e5a25831ce 100644 --- a/core/l10n/ar.js +++ b/core/l10n/ar.js @@ -147,6 +147,7 @@ OC.L10N.register( "_The update was successful. Redirecting you to {productName} in %n second._::_The update was successful. Redirecting you to {productName} in %n seconds._" : ["تم التحديث بنجاح، سوف يعاد توجيهك إلى {productName} خلال %n ثواني.","تم التحديث بنجاح، سوف يعاد توجيهك إلى {productName} خلال%n ثواني.","تم التحديث بنجاح، سوف يعاد توجيهك إلى {productName} خلال %n ثواني.","تم التحديث بنجاح، سوف يعاد توجيهك إلى {productName} خلال %n ثواني.","تم التحديث بنجاح، سوف يعاد توجيهك إلى {productName} خلال %n ثواني.","تم التحديث بنجاح، سوف يعاد توجيهك إلى {productName} خلال %n ثواني."], "More apps" : "المزيد من التطبيقات", "Currently open" : "مفتوح حاليّاً ", + "_{count} notification_::_{count} notifications_" : ["{count} إخطارات","{count} إخطار","{count} إخطارات","{count} إخطارات","{count} إخطارات","{count} إخطارات"], "Log in" : "تسجيل الدخول", "Logging in …" : "تسجيل الدخول …", "Server side authentication failed!" : "رفض الخادم المصادقة!", diff --git a/core/l10n/ar.json b/core/l10n/ar.json index 82c9c115f7b..0c644cb7e8e 100644 --- a/core/l10n/ar.json +++ b/core/l10n/ar.json @@ -145,6 +145,7 @@ "_The update was successful. Redirecting you to {productName} in %n second._::_The update was successful. Redirecting you to {productName} in %n seconds._" : ["تم التحديث بنجاح، سوف يعاد توجيهك إلى {productName} خلال %n ثواني.","تم التحديث بنجاح، سوف يعاد توجيهك إلى {productName} خلال%n ثواني.","تم التحديث بنجاح، سوف يعاد توجيهك إلى {productName} خلال %n ثواني.","تم التحديث بنجاح، سوف يعاد توجيهك إلى {productName} خلال %n ثواني.","تم التحديث بنجاح، سوف يعاد توجيهك إلى {productName} خلال %n ثواني.","تم التحديث بنجاح، سوف يعاد توجيهك إلى {productName} خلال %n ثواني."], "More apps" : "المزيد من التطبيقات", "Currently open" : "مفتوح حاليّاً ", + "_{count} notification_::_{count} notifications_" : ["{count} إخطارات","{count} إخطار","{count} إخطارات","{count} إخطارات","{count} إخطارات","{count} إخطارات"], "Log in" : "تسجيل الدخول", "Logging in …" : "تسجيل الدخول …", "Server side authentication failed!" : "رفض الخادم المصادقة!", diff --git a/core/l10n/eu.js b/core/l10n/eu.js index 134f1bebd7a..1bcd481c12e 100644 --- a/core/l10n/eu.js +++ b/core/l10n/eu.js @@ -119,6 +119,7 @@ OC.L10N.register( "This instance uses an S3 based object store as primary storage. The uploaded files are stored temporarily on the server and thus it is recommended to have 50 GB of free space available in the temp directory of PHP. Check the logs for full details about the path and the available space. To improve this please change the temporary directory in the php.ini or make more space available in that path." : "Instantzia honek S3n oinarritutako objektuen biltegia erabiltzen du biltegiratze nagusi bezala. Kargatutako fitxategiak behin-behinean zerbitzarian gordetzen direnez, PHPren aldi baterako direktorioan 50 GB libre edukitzea gomendatzen da. Egiaztatu egunkariak bideari eta erabilgarri dagoen espazioari buruzko xehetasunak izateko. Hau hobetzeko aldatu aldi baterako direktorioa php.ini fitxategian edo egin leku gehiago bide horretan.", "The temporary directory of this instance points to an either non-existing or non-writable directory." : "Instantzia honen aldi baterako direktorioak existitzen ez den edo idatzi ezin den direktorio batera erreferentziatzen du.", "You are accessing your instance over a secure connection, however your instance is generating insecure URLs. This most likely means that you are behind a reverse proxy and the overwrite config variables are not set correctly. Please read {linkstart}the documentation page about this ↗{linkend}." : "Zure instantziara konexio seguru baten bidez sartzen ari zara, hala ere, instantziak seguruak ez diren URLak sortzen ditu. Seguruenik horrek esan nahi du alderantzizko proxy baten atzean zaudela eta gainidazte konfigurazio aldagaiak ez daudela ondo ezarrita. Irakurri {linkstart}honi buruzko dokumentazio orria ↗{linkend}.", + "This instance is running in debug mode. Only enable this for local development and not in production environments." : "Instantzia hau arazketa moduan exekutatzen ari da. Gaitu hau garapen lokalerako soilik eta ez produkzio inguruneetarako.", "Error occurred while checking server setup" : "Errorea gertatu da zerbitzariaren konfigurazioa egiaztatzean", "For more details see the {linkstart}documentation ↗{linkend}." : "Xehetasun gehiago lortzeko, ikusi {linkstart}dokumentazioa ↗{linkedin}.", "Your data directory and files are probably accessible from the internet. The .htaccess file is not working. It is strongly recommended that you configure your web server so that the data directory is no longer accessible, or move the data directory outside the web server document root." : "Zure datuen direktorioa eta fitxategiak Internetetik atzitu daitezke seguru aski. .htaccess fitxategiak ez du funtzionatzen. Biziki gomendatzen da web zerbitzariaren konfigurazioa aldatzea datuen direktorioa atzigarri egon ez dadin, edo datuen direktorioa ateratzea web zerbitzariaren dokumentuen errotik kanpora.", @@ -127,6 +128,7 @@ OC.L10N.register( "The \"{header}\" HTTP header does not contain \"{expected}\". This is a potential security or privacy risk, as it is recommended to adjust this setting accordingly." : "\"{expected}\" ez dago \"{header}\" HTTP goiburuaren barnean. Hau segurtasun edo pribatutasun arrisku bat izan daiteke. Ezarpenean dagokion balioa jartzea gomendatzen da.", "The \"{header}\" HTTP header is not set to \"{val1}\", \"{val2}\", \"{val3}\", \"{val4}\" or \"{val5}\". This can leak referer information. See the {linkstart}W3C Recommendation ↗{linkend}." : "\"{Header}\" HTTP goiburua ez dago \"{val1}\", \"{val2}\", \"{val3}\", \"{val4}\" edo \"{val5}\" gisa ezarrita. Horrek aipamenen informazioa isuri dezake. Ikusi {linkstart}W3C gomendioa ↗ {linkend}.", "The \"Strict-Transport-Security\" HTTP header is not set to at least \"{seconds}\" seconds. For enhanced security, it is recommended to enable HSTS as described in the {linkstart}security tips ↗{linkend}." : "\"Strict-Transport-Security\" HTTP goiburua ez dago gutxienez \"{segundo}\" segundotan ezarrita. Segurtasuna hobetzeko, HSTS gaitzea gomendatzen da {linkstart}segurtasun aholkuak ↗{linkend} atalean azaltzen den moduan.", + "Accessing site insecurely via HTTP. You are strongly advised to set up your server to require HTTPS instead, as described in the {linkstart}security tips ↗{linkend}. Without it some important web functionality like \"copy to clipboard\" or \"service workers\" will not work!" : "Gunera HTTP modu ez-seguruan sartzen ari zara. Zure zerbitzaria HTTPS eskatzeko konfiguratzea gomendatzen da biziki, linkstart}segurtasun aholkuak ↗{linkend} atalean azaltzen den moduan. Hau gabe, \"kopiatu arbelera\" edo \"zerbitzu-langileak\" bezalako web funtzionalitateak ez dute funtzionatuko!", "unknown text" : "testu ezezaguna", "Hello world!" : "Kaixo mundua!", "sunny" : "eguzkitsua", @@ -191,6 +193,7 @@ OC.L10N.register( "Distraction free note taking app." : "Distrakziorik gabeko oharrak hartzeko aplikazioa.", "Search contacts" : "Bilatu kontaktuak", "Forgot password?" : "Pasahitza ahaztu duzu?", + "Back to login form" : "Itzuli saio hasierara", "Back" : "Atzera", "Login form is disabled." : "Saioa hasteko inprimakia desgaituta dago.", "Edit Profile" : "Editatu profila", @@ -307,6 +310,7 @@ OC.L10N.register( "The profile does not exist." : "Profila ez da existitzen", "Back to %s" : "Itzuli %s(e)ra", "Page not found" : "Orria ez da aurkitu", + "The page could not be found on the server or you may not be allowed to view it." : "Ezin izan da orria aurkitu edo ez duzu ikusteko baimenik.", "Too many requests" : "Eskaera gehiegi", "There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Eskaera gehiegi zeuden zure saretik. Saiatu beranduago edo kontaktatu zure administrailearekin hau errorea bada.", "Error" : "Errorea", diff --git a/core/l10n/eu.json b/core/l10n/eu.json index aa0ceba5fbe..049c9e911e4 100644 --- a/core/l10n/eu.json +++ b/core/l10n/eu.json @@ -117,6 +117,7 @@ "This instance uses an S3 based object store as primary storage. The uploaded files are stored temporarily on the server and thus it is recommended to have 50 GB of free space available in the temp directory of PHP. Check the logs for full details about the path and the available space. To improve this please change the temporary directory in the php.ini or make more space available in that path." : "Instantzia honek S3n oinarritutako objektuen biltegia erabiltzen du biltegiratze nagusi bezala. Kargatutako fitxategiak behin-behinean zerbitzarian gordetzen direnez, PHPren aldi baterako direktorioan 50 GB libre edukitzea gomendatzen da. Egiaztatu egunkariak bideari eta erabilgarri dagoen espazioari buruzko xehetasunak izateko. Hau hobetzeko aldatu aldi baterako direktorioa php.ini fitxategian edo egin leku gehiago bide horretan.", "The temporary directory of this instance points to an either non-existing or non-writable directory." : "Instantzia honen aldi baterako direktorioak existitzen ez den edo idatzi ezin den direktorio batera erreferentziatzen du.", "You are accessing your instance over a secure connection, however your instance is generating insecure URLs. This most likely means that you are behind a reverse proxy and the overwrite config variables are not set correctly. Please read {linkstart}the documentation page about this ↗{linkend}." : "Zure instantziara konexio seguru baten bidez sartzen ari zara, hala ere, instantziak seguruak ez diren URLak sortzen ditu. Seguruenik horrek esan nahi du alderantzizko proxy baten atzean zaudela eta gainidazte konfigurazio aldagaiak ez daudela ondo ezarrita. Irakurri {linkstart}honi buruzko dokumentazio orria ↗{linkend}.", + "This instance is running in debug mode. Only enable this for local development and not in production environments." : "Instantzia hau arazketa moduan exekutatzen ari da. Gaitu hau garapen lokalerako soilik eta ez produkzio inguruneetarako.", "Error occurred while checking server setup" : "Errorea gertatu da zerbitzariaren konfigurazioa egiaztatzean", "For more details see the {linkstart}documentation ↗{linkend}." : "Xehetasun gehiago lortzeko, ikusi {linkstart}dokumentazioa ↗{linkedin}.", "Your data directory and files are probably accessible from the internet. The .htaccess file is not working. It is strongly recommended that you configure your web server so that the data directory is no longer accessible, or move the data directory outside the web server document root." : "Zure datuen direktorioa eta fitxategiak Internetetik atzitu daitezke seguru aski. .htaccess fitxategiak ez du funtzionatzen. Biziki gomendatzen da web zerbitzariaren konfigurazioa aldatzea datuen direktorioa atzigarri egon ez dadin, edo datuen direktorioa ateratzea web zerbitzariaren dokumentuen errotik kanpora.", @@ -125,6 +126,7 @@ "The \"{header}\" HTTP header does not contain \"{expected}\". This is a potential security or privacy risk, as it is recommended to adjust this setting accordingly." : "\"{expected}\" ez dago \"{header}\" HTTP goiburuaren barnean. Hau segurtasun edo pribatutasun arrisku bat izan daiteke. Ezarpenean dagokion balioa jartzea gomendatzen da.", "The \"{header}\" HTTP header is not set to \"{val1}\", \"{val2}\", \"{val3}\", \"{val4}\" or \"{val5}\". This can leak referer information. See the {linkstart}W3C Recommendation ↗{linkend}." : "\"{Header}\" HTTP goiburua ez dago \"{val1}\", \"{val2}\", \"{val3}\", \"{val4}\" edo \"{val5}\" gisa ezarrita. Horrek aipamenen informazioa isuri dezake. Ikusi {linkstart}W3C gomendioa ↗ {linkend}.", "The \"Strict-Transport-Security\" HTTP header is not set to at least \"{seconds}\" seconds. For enhanced security, it is recommended to enable HSTS as described in the {linkstart}security tips ↗{linkend}." : "\"Strict-Transport-Security\" HTTP goiburua ez dago gutxienez \"{segundo}\" segundotan ezarrita. Segurtasuna hobetzeko, HSTS gaitzea gomendatzen da {linkstart}segurtasun aholkuak ↗{linkend} atalean azaltzen den moduan.", + "Accessing site insecurely via HTTP. You are strongly advised to set up your server to require HTTPS instead, as described in the {linkstart}security tips ↗{linkend}. Without it some important web functionality like \"copy to clipboard\" or \"service workers\" will not work!" : "Gunera HTTP modu ez-seguruan sartzen ari zara. Zure zerbitzaria HTTPS eskatzeko konfiguratzea gomendatzen da biziki, linkstart}segurtasun aholkuak ↗{linkend} atalean azaltzen den moduan. Hau gabe, \"kopiatu arbelera\" edo \"zerbitzu-langileak\" bezalako web funtzionalitateak ez dute funtzionatuko!", "unknown text" : "testu ezezaguna", "Hello world!" : "Kaixo mundua!", "sunny" : "eguzkitsua", @@ -189,6 +191,7 @@ "Distraction free note taking app." : "Distrakziorik gabeko oharrak hartzeko aplikazioa.", "Search contacts" : "Bilatu kontaktuak", "Forgot password?" : "Pasahitza ahaztu duzu?", + "Back to login form" : "Itzuli saio hasierara", "Back" : "Atzera", "Login form is disabled." : "Saioa hasteko inprimakia desgaituta dago.", "Edit Profile" : "Editatu profila", @@ -305,6 +308,7 @@ "The profile does not exist." : "Profila ez da existitzen", "Back to %s" : "Itzuli %s(e)ra", "Page not found" : "Orria ez da aurkitu", + "The page could not be found on the server or you may not be allowed to view it." : "Ezin izan da orria aurkitu edo ez duzu ikusteko baimenik.", "Too many requests" : "Eskaera gehiegi", "There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Eskaera gehiegi zeuden zure saretik. Saiatu beranduago edo kontaktatu zure administrailearekin hau errorea bada.", "Error" : "Errorea", diff --git a/core/l10n/gl.js b/core/l10n/gl.js index 4f0a8b6c8b0..b3d6e99952a 100644 --- a/core/l10n/gl.js +++ b/core/l10n/gl.js @@ -36,15 +36,15 @@ OC.L10N.register( "Password is too long. Maximum allowed length is 469 characters." : "O contrasinal é longo de máis. A lonxitude máxima permitida é de 469 caracteres.", "%s password reset" : "Restabelecer o contrasinal %s", "Password reset" : "Restabelecer o contrasinal", - "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Prema no seguinte botón para restabelecer o seu contrasinal. Se vostede non solicitou o restabelecemento do contrasinal, entón ignore este correo.", - "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Prema na seguinte ligazón para restabelecer o seu contrasinal. Se vostede non solicitou o restabelecemento do contrasinal, entón ignore este correo.", + "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Prema no seguinte botón para restabelecer o seu contrasinal. Se Vde. non solicitou o restabelecemento do contrasinal, entón ignore este correo.", + "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Prema na seguinte ligazón para restabelecer o seu contrasinal. Se Vde. non solicitou o restabelecemento do contrasinal, entón ignore este correo.", "Reset your password" : "Restabelecer o seu contrasinal", "No translation provider available" : "Non hai ningún provedor de tradución dispoñíbel", "Could not detect language" : "Non foi posíbel detectar o idioma", "Unable to translate" : "Non é posíbel traducir", "Nextcloud Server" : "Servidor de Nextcloud", "Some of your link shares have been removed" : "Elimináronse algunhas das súas ligazóns de compartición", - "Due to a security bug we had to remove some of your link shares. Please see the link for more information." : "Por mor dun erro de seguranza tivemos que retirar algunhas das súas ligazóns de compartición. Vexa a ligazón para obter máis información.", + "Due to a security bug we had to remove some of your link shares. Please see the link for more information." : "Por mor dun fallo de seguranza tivemos que retirar algunhas das súas ligazóns de compartición. Vexa a ligazón para obter máis información.", "The user limit of this instance is reached." : "Acadouse o límite de usuarios desta instancia.", "Enter your subscription key in the support app in order to increase the user limit. This does also grant you all additional benefits that Nextcloud Enterprise offers and is highly recommended for the operation in companies." : "Introduza a súa chave de subscrición na aplicación de asistencia para aumentar o límite de usuarios. Isto tamén lle outorga todos os beneficios adicionais que ofrece Nextcloud Enterprise e é moi recomendábel para a operativa nas empresas.", "Learn more ↗" : "Aprender máis ↗", @@ -92,7 +92,7 @@ OC.L10N.register( "No suitable source for randomness found by PHP which is highly discouraged for security reasons. Further information can be found in the {linkstart}documentation ↗{linkend}." : "PHP non atopa unha fonte de aleatoriedade, por mor da seguranza isto está moi desaconsellado. Pode atopar máis información na nosa {linkstart}documentación ↗{linkend}.", "You are currently running PHP {version}. Upgrade your PHP version to take advantage of {linkstart}performance and security updates provided by the PHP Group ↗{linkend} as soon as your distribution supports it." : "Actualmente está a empregar PHP {version}. Anove a versión de PHP para beneficiarse das {linkstart}melloras de rendemento e seguranza que aporta PHP Group ↗{linkend} tan cedo como a súa distribución o admita. ", "PHP 8.0 is now deprecated in Nextcloud 27. Nextcloud 28 may require at least PHP 8.1. Please upgrade to {linkstart}one of the officially supported PHP versions provided by the PHP Group ↗{linkend} as soon as possible." : "PHP 8.0 é obsoleto en Nextcloud 27. Nextcloud 28 pode requirir polo menos PHP 8.1. Actualice a {linkstart}unha das versións de PHP oficialmente compatíbeis fornecidas polo Grupo PHP ↗{linkend} o antes posíbel.", - "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 configuración de cabeceiras do proxy inverso é incorrecta, ou vostede está accedendo a Nextcloud dende un proxy no que confía. Se non, isto é un incidente de seguranza que pode permitir a un atacante disfrazar o seu enderezo IP como visíbel para Nextcloud. Pode atopar máis información na nosa {linkstart}documentación ↗{linkend}.", + "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 configuración de cabeceiras do proxy inverso é incorrecta, ou Vde. está accedendo a Nextcloud dende un proxy no que confía. Se non, isto é un incidente de seguranza que pode permitir a un atacante disfrazar o seu enderezo IP como visíbel para Nextcloud. Pode atopar máis información na nosa {linkstart}documentación ↗{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 caché distribuído, pero está instalado o módulo PHP erróneo «memcache». \\OC\\Memcache\\Memcached só admite «memcached» e non «memcache». Consulte a {linkstart}wiki de memcached sobre os dous módulos ↗{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})" : "Algúns ficheiros non superaron a comprobación de integridade. Pode atopar máis información sobre como resolver este problema na nosa {linkstart1}documentación ↗{linkend}. ({linkstart2}Lista de ficheiros incorrectos…{linkend} / {linkstart3}Volver analizar…{linkend})", "The PHP OPcache module is not properly configured. See the {linkstart}documentation ↗{linkend} for more information." : "O módulo PHP OPcache non está configurado correctamente. Consulte a {linkstart}documentación ↗{linkend} para obter máis información.", @@ -178,7 +178,7 @@ OC.L10N.register( "Resetting password" : "Restabelecendo o contrasinal", "Recommended apps" : "Aplicacións recomendadas", "Loading apps …" : "Cargando aplicacións…", - "Could not fetch list of apps from the App Store." : "Non foi posíbel obter a lista de aplicacións da tenda de aplicacións.", + "Could not fetch list of apps from the App Store." : "Non foi posíbel recuperar a lista de aplicacións da tenda de aplicacións.", "Installing apps …" : "Instalando aplicacións…", "App download or installation failed" : "Produciuse un fallo ao descargar ou instalar a aplicación", "Cannot install this app because it is not compatible" : "Non é posíbel instalar esta aplicación porque non ser compatíbel", @@ -291,7 +291,7 @@ OC.L10N.register( "Good password" : "Contrasinal bo", "Strong password" : "Contrasinal forte", "No action available" : "Non hai accións dispoñíbeis", - "Error fetching contact actions" : "Produciuse un erro ao obter as accións do contacto", + "Error fetching contact actions" : "Produciuse un erro ao recuperar as accións do contacto", "Close \"{dialogTitle}\" dialog" : "Pechar o diálogo «{dialogTitle}».", "Non-existing tag #{tag}" : "A etiqueta #{tag} non existe", "Restricted" : "Restrinxida", @@ -393,7 +393,7 @@ OC.L10N.register( "Enhanced security is enforced for your account. Choose which provider to set up:" : "Foi activada a seguranza obrigatoria para a súa conta. Escolla o provedor que quere estabelecer:", "Error while validating your second factor" : "Produciuse un erro ao validar o seu segundo factor", "Access through untrusted domain" : "Acceso a través dun dominio non fiábel", - "Please contact your administrator. If you are an administrator, edit the \"trusted_domains\" setting in config/config.php like the example in config.sample.php." : "Contacte coa administración do sistema. Se vostede é un administrador, edite o axuste de «trusted_domains» en config/config.php coma no exemplo en config.sample.php. ", + "Please contact your administrator. If you are an administrator, edit the \"trusted_domains\" setting in config/config.php like the example in config.sample.php." : "Contacte coa administración do sistema. Se Vde. é un administrador, edite o axuste de «trusted_domains» en config/config.php coma no exemplo en config.sample.php. ", "Further information how to configure this can be found in the %1$sdocumentation%2$s." : "Pode atopar máis información sobre cómo configurar isto na %1$sdocumentación%2$s.", "App update required" : "É necesario actualizar a aplicación", "%1$s will be updated to version %2$s" : "%1$s actualizarase á versión %2$s", @@ -405,7 +405,7 @@ OC.L10N.register( "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Para evitar tempos de espera nas instalacións grandes, no seu lugar pode executar a seguinte orde dende o directorio de instalación:", "Detailed logs" : "Rexistros detallados", "Update needed" : "É necesario actualizar", - "Please use the command line updater because you have a big instance with more than 50 users." : "Vostede ten unha instancia moi grande con máis de 50 usuarios, faga a actualización empregando a liña de ordes.", + "Please use the command line updater because you have a big instance with more than 50 users." : "Vde. ten unha instancia moi grande con máis de 50 usuarios, faga a actualización empregando a liña de ordes.", "For help, see the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">documentation</a>." : "Para obter axuda, vexa a <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">documentación</a>.", "I know that if I continue doing the update via web UI has the risk, that the request runs into a timeout and could cause data loss, but I have a backup and know how to restore my instance in case of a failure." : "Sei que se continúo facendo a actualización a través da interface web, corro o risco de que a solicitude non se execute no tempo de espera e provoque a perda de información pero teño unha copia de seguranza dos datos e sei como restaurala.", "Upgrade via web on my own risk" : "Anovar a través da web, correndo o risco baixo a miña responsabilidade", diff --git a/core/l10n/gl.json b/core/l10n/gl.json index f3dbdb4f4e7..4f29f64b696 100644 --- a/core/l10n/gl.json +++ b/core/l10n/gl.json @@ -34,15 +34,15 @@ "Password is too long. Maximum allowed length is 469 characters." : "O contrasinal é longo de máis. A lonxitude máxima permitida é de 469 caracteres.", "%s password reset" : "Restabelecer o contrasinal %s", "Password reset" : "Restabelecer o contrasinal", - "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Prema no seguinte botón para restabelecer o seu contrasinal. Se vostede non solicitou o restabelecemento do contrasinal, entón ignore este correo.", - "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Prema na seguinte ligazón para restabelecer o seu contrasinal. Se vostede non solicitou o restabelecemento do contrasinal, entón ignore este correo.", + "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Prema no seguinte botón para restabelecer o seu contrasinal. Se Vde. non solicitou o restabelecemento do contrasinal, entón ignore este correo.", + "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Prema na seguinte ligazón para restabelecer o seu contrasinal. Se Vde. non solicitou o restabelecemento do contrasinal, entón ignore este correo.", "Reset your password" : "Restabelecer o seu contrasinal", "No translation provider available" : "Non hai ningún provedor de tradución dispoñíbel", "Could not detect language" : "Non foi posíbel detectar o idioma", "Unable to translate" : "Non é posíbel traducir", "Nextcloud Server" : "Servidor de Nextcloud", "Some of your link shares have been removed" : "Elimináronse algunhas das súas ligazóns de compartición", - "Due to a security bug we had to remove some of your link shares. Please see the link for more information." : "Por mor dun erro de seguranza tivemos que retirar algunhas das súas ligazóns de compartición. Vexa a ligazón para obter máis información.", + "Due to a security bug we had to remove some of your link shares. Please see the link for more information." : "Por mor dun fallo de seguranza tivemos que retirar algunhas das súas ligazóns de compartición. Vexa a ligazón para obter máis información.", "The user limit of this instance is reached." : "Acadouse o límite de usuarios desta instancia.", "Enter your subscription key in the support app in order to increase the user limit. This does also grant you all additional benefits that Nextcloud Enterprise offers and is highly recommended for the operation in companies." : "Introduza a súa chave de subscrición na aplicación de asistencia para aumentar o límite de usuarios. Isto tamén lle outorga todos os beneficios adicionais que ofrece Nextcloud Enterprise e é moi recomendábel para a operativa nas empresas.", "Learn more ↗" : "Aprender máis ↗", @@ -90,7 +90,7 @@ "No suitable source for randomness found by PHP which is highly discouraged for security reasons. Further information can be found in the {linkstart}documentation ↗{linkend}." : "PHP non atopa unha fonte de aleatoriedade, por mor da seguranza isto está moi desaconsellado. Pode atopar máis información na nosa {linkstart}documentación ↗{linkend}.", "You are currently running PHP {version}. Upgrade your PHP version to take advantage of {linkstart}performance and security updates provided by the PHP Group ↗{linkend} as soon as your distribution supports it." : "Actualmente está a empregar PHP {version}. Anove a versión de PHP para beneficiarse das {linkstart}melloras de rendemento e seguranza que aporta PHP Group ↗{linkend} tan cedo como a súa distribución o admita. ", "PHP 8.0 is now deprecated in Nextcloud 27. Nextcloud 28 may require at least PHP 8.1. Please upgrade to {linkstart}one of the officially supported PHP versions provided by the PHP Group ↗{linkend} as soon as possible." : "PHP 8.0 é obsoleto en Nextcloud 27. Nextcloud 28 pode requirir polo menos PHP 8.1. Actualice a {linkstart}unha das versións de PHP oficialmente compatíbeis fornecidas polo Grupo PHP ↗{linkend} o antes posíbel.", - "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 configuración de cabeceiras do proxy inverso é incorrecta, ou vostede está accedendo a Nextcloud dende un proxy no que confía. Se non, isto é un incidente de seguranza que pode permitir a un atacante disfrazar o seu enderezo IP como visíbel para Nextcloud. Pode atopar máis información na nosa {linkstart}documentación ↗{linkend}.", + "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 configuración de cabeceiras do proxy inverso é incorrecta, ou Vde. está accedendo a Nextcloud dende un proxy no que confía. Se non, isto é un incidente de seguranza que pode permitir a un atacante disfrazar o seu enderezo IP como visíbel para Nextcloud. Pode atopar máis información na nosa {linkstart}documentación ↗{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 caché distribuído, pero está instalado o módulo PHP erróneo «memcache». \\OC\\Memcache\\Memcached só admite «memcached» e non «memcache». Consulte a {linkstart}wiki de memcached sobre os dous módulos ↗{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})" : "Algúns ficheiros non superaron a comprobación de integridade. Pode atopar máis información sobre como resolver este problema na nosa {linkstart1}documentación ↗{linkend}. ({linkstart2}Lista de ficheiros incorrectos…{linkend} / {linkstart3}Volver analizar…{linkend})", "The PHP OPcache module is not properly configured. See the {linkstart}documentation ↗{linkend} for more information." : "O módulo PHP OPcache non está configurado correctamente. Consulte a {linkstart}documentación ↗{linkend} para obter máis información.", @@ -176,7 +176,7 @@ "Resetting password" : "Restabelecendo o contrasinal", "Recommended apps" : "Aplicacións recomendadas", "Loading apps …" : "Cargando aplicacións…", - "Could not fetch list of apps from the App Store." : "Non foi posíbel obter a lista de aplicacións da tenda de aplicacións.", + "Could not fetch list of apps from the App Store." : "Non foi posíbel recuperar a lista de aplicacións da tenda de aplicacións.", "Installing apps …" : "Instalando aplicacións…", "App download or installation failed" : "Produciuse un fallo ao descargar ou instalar a aplicación", "Cannot install this app because it is not compatible" : "Non é posíbel instalar esta aplicación porque non ser compatíbel", @@ -289,7 +289,7 @@ "Good password" : "Contrasinal bo", "Strong password" : "Contrasinal forte", "No action available" : "Non hai accións dispoñíbeis", - "Error fetching contact actions" : "Produciuse un erro ao obter as accións do contacto", + "Error fetching contact actions" : "Produciuse un erro ao recuperar as accións do contacto", "Close \"{dialogTitle}\" dialog" : "Pechar o diálogo «{dialogTitle}».", "Non-existing tag #{tag}" : "A etiqueta #{tag} non existe", "Restricted" : "Restrinxida", @@ -391,7 +391,7 @@ "Enhanced security is enforced for your account. Choose which provider to set up:" : "Foi activada a seguranza obrigatoria para a súa conta. Escolla o provedor que quere estabelecer:", "Error while validating your second factor" : "Produciuse un erro ao validar o seu segundo factor", "Access through untrusted domain" : "Acceso a través dun dominio non fiábel", - "Please contact your administrator. If you are an administrator, edit the \"trusted_domains\" setting in config/config.php like the example in config.sample.php." : "Contacte coa administración do sistema. Se vostede é un administrador, edite o axuste de «trusted_domains» en config/config.php coma no exemplo en config.sample.php. ", + "Please contact your administrator. If you are an administrator, edit the \"trusted_domains\" setting in config/config.php like the example in config.sample.php." : "Contacte coa administración do sistema. Se Vde. é un administrador, edite o axuste de «trusted_domains» en config/config.php coma no exemplo en config.sample.php. ", "Further information how to configure this can be found in the %1$sdocumentation%2$s." : "Pode atopar máis información sobre cómo configurar isto na %1$sdocumentación%2$s.", "App update required" : "É necesario actualizar a aplicación", "%1$s will be updated to version %2$s" : "%1$s actualizarase á versión %2$s", @@ -403,7 +403,7 @@ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Para evitar tempos de espera nas instalacións grandes, no seu lugar pode executar a seguinte orde dende o directorio de instalación:", "Detailed logs" : "Rexistros detallados", "Update needed" : "É necesario actualizar", - "Please use the command line updater because you have a big instance with more than 50 users." : "Vostede ten unha instancia moi grande con máis de 50 usuarios, faga a actualización empregando a liña de ordes.", + "Please use the command line updater because you have a big instance with more than 50 users." : "Vde. ten unha instancia moi grande con máis de 50 usuarios, faga a actualización empregando a liña de ordes.", "For help, see the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">documentation</a>." : "Para obter axuda, vexa a <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"%s\">documentación</a>.", "I know that if I continue doing the update via web UI has the risk, that the request runs into a timeout and could cause data loss, but I have a backup and know how to restore my instance in case of a failure." : "Sei que se continúo facendo a actualización a través da interface web, corro o risco de que a solicitude non se execute no tempo de espera e provoque a perda de información pero teño unha copia de seguranza dos datos e sei como restaurala.", "Upgrade via web on my own risk" : "Anovar a través da web, correndo o risco baixo a miña responsabilidade", diff --git a/core/l10n/zh_CN.js b/core/l10n/zh_CN.js index fc152bcb42b..581432e4426 100644 --- a/core/l10n/zh_CN.js +++ b/core/l10n/zh_CN.js @@ -157,7 +157,7 @@ OC.L10N.register( "Log in to {productName}" : "登录到 {productName}", "Wrong username or password." : "错误的用户名或密码。", "User disabled" : "用户不可用", - "We have detected multiple invalid login attempts from your IP. Therefore your next login is throttled up to 30 seconds." : "我们检测到您的 IP 进行了多次无效登录尝试。因此,您的下一次登录最长会延迟 30 秒。", + "We have detected multiple invalid login attempts from your IP. Therefore your next login is throttled up to 30 seconds." : "我们检测到您的IP进行了多次无效登录尝试。因此,您的下一次登录最长会延迟30秒。", "Log in with a device" : "使用设备登录", "Username or email" : "用户名或邮箱", "Your account is not setup for passwordless login." : "您的账号未设置无密码登录。", diff --git a/core/l10n/zh_CN.json b/core/l10n/zh_CN.json index f5e0373b7cc..a3b59eec1eb 100644 --- a/core/l10n/zh_CN.json +++ b/core/l10n/zh_CN.json @@ -155,7 +155,7 @@ "Log in to {productName}" : "登录到 {productName}", "Wrong username or password." : "错误的用户名或密码。", "User disabled" : "用户不可用", - "We have detected multiple invalid login attempts from your IP. Therefore your next login is throttled up to 30 seconds." : "我们检测到您的 IP 进行了多次无效登录尝试。因此,您的下一次登录最长会延迟 30 秒。", + "We have detected multiple invalid login attempts from your IP. Therefore your next login is throttled up to 30 seconds." : "我们检测到您的IP进行了多次无效登录尝试。因此,您的下一次登录最长会延迟30秒。", "Log in with a device" : "使用设备登录", "Username or email" : "用户名或邮箱", "Your account is not setup for passwordless login." : "您的账号未设置无密码登录。", diff --git a/core/src/OC/password-confirmation.js b/core/src/OC/password-confirmation.js index 4aa643c19fb..8fba8508328 100644 --- a/core/src/OC/password-confirmation.js +++ b/core/src/OC/password-confirmation.js @@ -94,9 +94,10 @@ export default { const $error = $('<p></p>').addClass('msg warning').text(config.error) $dialog.find('.oc-dialog-content').append($error) } - $dialog.find('.oc-dialog-buttonrow').addClass('aside') + const $buttonrow = $dialog.find('.oc-dialog-buttonrow') + $buttonrow.addClass('aside') - const $buttons = $dialog.find('button') + const $buttons = $buttonrow.find('button') $buttons.eq(0).hide() $buttons.eq(1).text(config.confirm) }) diff --git a/dist/core-login.js b/dist/core-login.js index 6bc912f5fe4..d22641316e6 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={39977:function(e,o,i){"use strict";var r=i(20144),a=i(78595),s=i(19755),l=i.n(s),c=i(79753),u=i(25108),d={},f=[],p=i(18181),h=i(64024),m=i(25108),g={updatableNotification:null,getDefaultNotificationFunction:null,setDefault:function(t){this.getDefaultNotificationFunction=t},hide:function(t,e){p.ZP.isFunction(t)&&(e=t,t=void 0),t?(t.each((function(){l()(this)[0].toastify?l()(this)[0].toastify.hideToast():m.error("cannot hide toast because object is not set"),this===this.updatableNotification&&(this.updatableNotification=null)})),e&&e.call(),this.getDefaultNotificationFunction&&this.getDefaultNotificationFunction()):m.error("Missing argument $row in OC.Notification.hide() call, caller needs to be adjusted to only dismiss its own notification")},showHtml:function(t,e){(e=e||{}).isHTML=!0,e.timeout=e.timeout?e.timeout:h.Rl;var n=(0,h.PV)(t,e);return n.toastElement.toastify=n,l()(n.toastElement)},show:function(t,e){(e=e||{}).timeout=e.timeout?e.timeout:h.Rl;var n=(0,h.PV)(function(t){return t.toString().split("&").join("&").split("<").join("<").split(">").join(">").split('"').join(""").split("'").join("'")}(t),e);return n.toastElement.toastify=n,l()(n.toastElement)},showUpdate:function(t){return this.updatableNotification&&this.updatableNotification.hideToast(),this.updatableNotification=(0,h.PV)(t,{timeout:h.Rl}),this.updatableNotification.toastElement.toastify=this.updatableNotification,l()(this.updatableNotification.toastElement)},showTemporary:function(t,e){(e=e||{}).timeout=e.timeout||h.TN;var n=(0,h.PV)(t,e);return n.toastElement.toastify=n,l()(n.toastElement)},isHidden:function(){return!l()("#content").find(".toastify").length}},v=p.ZP.throttle((function(){g.showTemporary(t("core","Connection to server lost"))}),7e3,{trailing:!1}),y={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 w(t,e,n){"post"!==t&&"delete"!==t||!Bt.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})):Bt.PasswordConfirmation.requirePasswordConfirmation(_.bind(w,this,t,e,n))}var b=window.oc_appconfig||{},P={getValue:function(t,e,n,o){!function(t,e,n,o){(o=o||{}).data={defaultValue:n},w("get","/"+t+"/"+e,o)}(t,e,n,{success:o})},setValue:function(t,e,n){!function(t,e,n,o){(o=o||{}).data={value:n},w("post","/"+t+"/"+e,o)}(t,e,n)},getApps:function(t){!function(t){w("get","",t)}({success:t})},getKeys:function(t,e){!function(t,e){w("get","/"+t,e)}(t,{success:e})},deleteKey:function(t,e){!function(t,e,n){w("delete","/"+t+"/"+e,void 0)}(t,e)}},C=i(25108),A=void 0!==window._oc_appswebroots&&window._oc_appswebroots,k=i(72316),x=i.n(k),O=i(76591),T=i(25108),j={create:"POST",update:"PROPPATCH",patch:"PROPPATCH",delete:"DELETE",read:"PROPFIND"};function E(t,e){if(p.ZP.isArray(t))return p.ZP.map(t,(function(t){return E(t,e)}));var n={href:t.href};return p.ZP.each(t.propStat,(function(t){if("HTTP/1.1 200 OK"===t.status)for(var o in t.properties){var i=o;o in e&&(i=e[o]),n[i]=t.properties[o]}})),n.id||(n.id=S(n.href)),n}function S(t){var e=t.indexOf("?");e>0&&(t=t.substr(0,e));var n,o=t.split("/");do{n=o[o.length-1],o.pop()}while(!n&&o.length>0);return n}function L(t){return t>=200&&t<=299}function N(t,e,n,o){return t.propPatch(e.url,function(t,e){var n,o={};for(n in t){var i=e[n],r=t[n];i||(T.warn('No matching DAV property for property "'+n),i=n),(p.ZP.isBoolean(r)||p.ZP.isNumber(r))&&(r=""+r),o[i]=r}return o}(n.changed,e.davProperties),o).then((function(t){L(t.status)?p.ZP.isFunction(e.success)&&e.success(n.toJSON()):p.ZP.isFunction(e.error)&&e.error(t)}))}var I=x().noConflict();Object.assign(I,{davCall:function(t,e){var n=new O.dav.Client({baseUrl:t.url,xmlNamespaces:p.ZP.extend({"DAV:":"d","http://owncloud.org/ns":"oc"},t.xmlNamespaces||{})});n.resolveUrl=function(){return t.url};var o=p.ZP.extend({"X-Requested-With":"XMLHttpRequest",requesttoken:OC.requestToken},t.headers);return"PROPFIND"===t.type?function(t,e,n,o){return t.propFind(e.url,p.ZP.values(e.davProperties)||[],e.depth,o).then((function(t){if(L(t.status)){if(p.ZP.isFunction(e.success)){var n=p.ZP.invert(e.davProperties),o=E(t.body,n);e.depth>0&&o.shift(),e.success(o)}}else p.ZP.isFunction(e.error)&&e.error(t)}))}(n,t,0,o):"PROPPATCH"===t.type?N(n,t,e,o):"MKCOL"===t.type?function(t,e,n,o){return t.request(e.type,e.url,o,null).then((function(i){L(i.status)?N(t,e,n,o):p.ZP.isFunction(e.error)&&e.error(i)}))}(n,t,e,o):function(t,e,n,o){return o["Content-Type"]="application/json",t.request(e.type,e.url,o,e.data).then((function(t){if(L(t.status)){if(p.ZP.isFunction(e.success)){if("PUT"===e.type||"POST"===e.type||"MKCOL"===e.type){var o=t.body||n.toJSON(),i=t.xhr.getResponseHeader("Content-Location");return"POST"===e.type&&i&&(o.id=S(i)),void e.success(o)}if(207===t.status){var r=p.ZP.invert(e.davProperties);e.success(E(t.body,r))}else e.success(t.body)}}else p.ZP.isFunction(e.error)&&e.error(t)}))}(n,t,e,o)},davSync:function(t){return function(e,n,o){var i={type:j[e]||e},r=n instanceof t.Collection;if("update"===e&&(n.hasInnerCollection?i.type="MKCOL":(n.usePUT||n.collection&&n.collection.usePUT)&&(i.type="PUT")),o.url||(i.url=p.ZP.result(n,"url")||function(){throw new Error('A "url" property or function must be specified')}()),null!=o.data||!n||"create"!==e&&"update"!==e&&"patch"!==e||(i.data=JSON.stringify(o.attrs||n.toJSON(o))),"PROPFIND"!==i.type&&(i.processData=!1),"PROPFIND"===i.type||"PROPPATCH"===i.type){var a=n.davProperties;!a&&n.model&&(a=n.model.prototype.davProperties),a&&(p.ZP.isFunction(a)?i.davProperties=a.call(n):i.davProperties=a),i.davProperties=p.ZP.extend(i.davProperties||{},o.davProperties),p.ZP.isUndefined(o.depth)&&(o.depth=r?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.ZP.extend(i,o),n);return n.trigger("request",n,l,o),l}}(I)});var U=I,$=i(65358),R=window._oc_config||{},F=i(25108),M=k.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)}}),B=k.Collection.extend({model:M}),z=k.View.extend({_collection:void 0,_subViews:[],tagName:"ul",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 D({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)}))}}),D=k.View.extend({className:"contact",tagName:"li",_template:void 0,_model:void 0,_actionMenuShown:!1,events:{"click .icon-more":"_onToggleActionsMenu"},contactTemplate:i(10944),template:function(t){return this.contactTemplate(t)},initialize:function(t){this._model=t.model,this.on("parent:toggle:actionmenu",this._onOtherActionMenuOpened,this)},render:function(){return this.$el.html(this.template({contact:this._model.toJSON()})),this.delegateEvents(),this.$("div.avatar").imageplaceholder(this._model.get("fullName")),this},_onToggleActionsMenu:function(){this._actionMenuShown=!this._actionMenuShown,this._actionMenuShown?this.$(".menu").show():this.$(".menu").hide(),this.trigger("toggle:actionmenu",this.$el)},_onOtherActionMenuOpened:function(t){this.$el.is(t)||(this._actionMenuShown=!1,this.$(".menu").hide())}}),Z=k.View.extend({_loadingTemplate:void 0,_errorTemplate:void 0,_contentTemplate:void 0,_contactsTemplate:void 0,_contacts:void 0,_searchTerm:"",events:{"input #contactsmenu-search":"_onSearch"},templates:{loading:i(95386),error:i(20421),menu:i(66115),list:i(34083)},_onSearch:p.ZP.debounce((function(t){var e=this.$("#contactsmenu-search").val();e!==this._searchTerm&&(this.trigger("search",this.$("#contactsmenu-search").val()),this._searchTerm=e)}),700),loadingTemplate:function(t){return this.templates.loading(t)},errorTemplate:function(e){return this.templates.error(p.ZP.extend({couldNotLoadText:t("core","Could not load your contacts")},e))},contentTemplate:function(e){return this.templates.menu(p.ZP.extend({searchContactsText:t("core","Search contacts …")},e))},contactsTemplate:function(e){return this.templates.list(p.ZP.extend({noContactsFoundText:t("core","No contacts found"),showAllContactsText:t("core","Show all contacts …"),contactsAppMgmtText:t("core","Install the Contacts app")},e))},initialize:function(t){this.options=t},showLoading:function(t){this.render(),this._contacts=void 0,this.$(".content").html(this.loadingTemplate({loadingText:t}))},showError:function(){this.render(),this._contacts=void 0,this.$(".content").html(this.errorTemplate())},showContacts:function(t,e){this._contacts=t.contacts,this.render({contacts:t.contacts});var n=new z({collection:t.contacts});n.render(),this.$(".content").html(this.contactsTemplate({contacts:t.contacts,searchTerm:e,contactsAppEnabled:t.contactsAppEnabled,contactsAppURL:Bt.generateUrl("/apps/contacts"),canInstallApp:Bt.isUserAdmin(),contactsAppMgmtURL:Bt.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}}),H=function(t){this.initialize(t)};H.prototype={$el:void 0,_view:void 0,_contactsPromise:void 0,initialize:function(t){this.$el=l()(t.el),this._view=new Z({el:this.$el}),this._view.on("search",(function(t){this.loadContacts(t)}),this)},_getContacts:function(t){var e=Bt.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.ZP.isUndefined(e)||""===e?n._view.showLoading(t("core","Loading your contacts …")):n._view.showLoading(t("core","Looking for {term} …",{term:e})),n._contactsPromise.then((function(t){t.contacts=new B(t.contacts),n._view.showContacts(t,e)}),(function(t){n._view.showError(),F.error("There was an error loading your contacts",t)})).then((function(){delete n._contactsPromise})).catch(F.error.bind(this))}};var Y=H,q=document.getElementsByTagName("head")[0].getAttribute("data-user"),K=document.getElementsByTagName("head")[0].getAttribute("data-user-displayname"),V=void 0!==q&&q,G=i(25108);function W(t){return W="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},W(t)}function J(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,(void 0,i=function(t,e){if("object"!==W(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var o=n.call(t,"string");if("object"!==W(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(o.key),"symbol"===W(i)?i:String(i)),o)}var i}function Q(t,e,n){return e&&J(t.prototype,e),n&&J(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}var X={Search:Q((function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),G.warn("OCA.Search is deprecated. Please use the unified search API instead")}))},tt=function(t){return"click"===t.type||"keydown"===t.type&&"Enter"===t.key},et=i(25108);function nt(t,e,n,o,i,r,a){try{var s=t[r](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(o,i)}function ot(t){return function(){var e=this,n=arguments;return new Promise((function(o,i){var r=t.apply(e,n);function a(t){nt(r,o,i,a,s,"next",t)}function s(t){nt(r,o,i,a,s,"throw",t)}a(void 0)}))}}function it(t){return it="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},it(t)}var rt,at,st,lt,ct={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",ct.OK_BUTTON,n,o)},info:function(t,e,n,o){this.message(t,e,"info",ct.OK_BUTTON,n,o)},confirm:function(t,e,n,o){return this.message(t,e,"notice",ct.YES_NO_BUTTONS,n,o)},confirmDestructive:function(t,e,n,o,i){return this.message(t,e,"none",n,o,void 0===i||i)},confirmHtml:function(t,e,n,o){return this.message(t,e,"notice",ct.YES_NO_BUTTONS,n,o,!0)},prompt:function(e,n,o,i,r,a){return l().when(this._getMessageTemplate()).then((function(s){var c="oc-dialog-"+ct.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",r);var h=l()("<label/>").attr("for",c+"-input").text(r+": ");d.append(h),d.append(f),void 0===i&&(i=!1),l()("body").append(d),void 0!==o&&(o=p.ZP.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:i,buttons:m,close:function(){void 0!==o&&o(!1,f.val())}}),f.focus(),ct.dialogsCounter++}))},filepicker:function(e,n,o,i,r,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=X.Sharing&&X.Sharing.PublicApp&&X.Sharing.PublicApp.fileList?X.Sharing.PublicApp.fileList.filesClient:Bt.Files.getClient(),this.filelist=null,s=s||"",c=Object.assign({allowDirectoryChooser:!1},c),l().when(this._getFilePickerTemplate()).then((function(p){var h,m;u.filepicker.loading=!1,u.$filePicker&&u.$filePicker.ocdialog("close"),null==i&&(i=[]),"string"==typeof i&&(i=[i]),u.$filePicker=p.octemplate({dialog_name:"oc-dialog-filepicker-content",title:e,emptytext:d,newtext:f,nameCol:t("core","Name"),sizeCol:t("core","Size"),modifiedCol:t("core","Modified")}).data("path",s).data("multiselect",o).data("mimetype",i).data("allowDirectoryChooser",c.allowDirectoryChooser),"function"==typeof c.filter&&u.$filePicker.data("filter",c.filter),void 0===r&&(r=!1),void 0===o&&(o=!1),l()(null!==(h=null===(m=c)||void 0===m?void 0:m.target)&&void 0!==h?h:"body").prepend(u.$filePicker),u.$showGridView=l()("button#picker-showgridview"),u.$showGridView.on("click keydown",(function(t){tt(t)&&u._onGridviewChange()})),u._getGridSettings();var g=u.$filePicker.find(".actions.creatable .button-add");a!==u.FILEPICKER_TYPE_CHOOSE||c.allowDirectoryChooser||u.$filePicker.find(".actions.creatable").hide(),g.on("focus",(function(){u.$filePicker.ocdialog("setEnterCallback",(function(t){t.stopImmediatePropagation(),t.preventDefault(),g.click()}))})),g.on("blur",(function(){u.$filePicker.ocdialog("unsetEnterCallback")})),Bt.registerMenu(g,u.$filePicker.find(".menu"),(function(){y.tooltip("hide"),y.focus(),u.$filePicker.ocdialog("setEnterCallback",(function(t){t.stopImmediatePropagation(),t.preventDefault(),u.$filePicker.submit()}));var t=y.val(),e=t.lastIndexOf(".");-1===e&&(e=t.length),y.selectRange(0,e)}));var v=u.$filePicker.find(".filenameform"),y=v.find("input[type='text']"),w=v.find("input[type='submit']");y.on("keydown",(function(t){tt(t)&&(t.stopImmediatePropagation(),t.preventDefault(),v.submit())})),w.on("click",(function(t){t.stopImmediatePropagation(),t.preventDefault(),v.submit()}));v.on("submit",(function(e){if(e.stopPropagation(),e.preventDefault(),function(){var e=y.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(Bt.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){y.attr("title",t),y.tooltip({placement:"right",trigger:"manual",container:".newFolderMenu"}),y.tooltip("_fixTitle"),y.tooltip("show"),y.addClass("error")}return!1}()){var n=y.val();u.filepicker.filesClient.createDirectory(u.$filePicker.data("path")+"/"+n).always((function(t){u._fillFilePicker(u.$filePicker.data("path")+"/"+n,a)})),Bt.hideMenus(),u.$filePicker.ocdialog("unsetEnterCallback"),u.$filePicker.click(),y.val(f)}})),y.on("input",(function(t){y.tooltip("hide")})),u.$filePicker.ready((function(){u.$fileListHeader=u.$filePicker.find(".filelist thead tr"),u.$filelist=u.$filePicker.find(".filelist tbody"),u.$filelistContainer=u.$filePicker.find(".filelist-container"),u.$dirTree=u.$filePicker.find(".dirtree"),u.$dirTree.on("click keydown","div:not(:last-child)",u,(function(t){tt(t)&&u._handleTreeListSelect(t,a)})),u.$filelist.on("click keydown","tr",(function(t){tt(t)&&u._handlePickerClick(t,l()(this),a)})),u.$fileListHeader.on("click keydown","a",(function(t){if(tt(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,a)}})),u._fillFilePicker(s,a)}));var b=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 i=u.$filelist.find("tr.filepicker_element_selected").data("entryname");i&&(e+="/"+i)}n(e,t),u.$filePicker.ocdialog("close")}},P=[];a===ct.FILEPICKER_TYPE_CHOOSE?P.push({text:t("core","Choose"),click:function(){b(ct.FILEPICKER_TYPE_CHOOSE)},defaultButton:!0}):a===ct.FILEPICKER_TYPE_CUSTOM?c.buttons.forEach((function(t){P.push({text:t.text,click:function(){b(t.type)},defaultButton:t.defaultButton})})):(a!==ct.FILEPICKER_TYPE_COPY&&a!==ct.FILEPICKER_TYPE_COPY_MOVE||P.push({text:t("core","Copy"),click:function(){b(ct.FILEPICKER_TYPE_COPY)},defaultButton:!1}),a!==ct.FILEPICKER_TYPE_MOVE&&a!==ct.FILEPICKER_TYPE_COPY_MOVE||P.push({text:t("core","Move"),click:function(){b(ct.FILEPICKER_TYPE_MOVE)},defaultButton:!0})),u.$filePicker.ocdialog({closeOnEscape:!0,width:600,height:500,modal:r,buttons:P,style:{buttons:"aside"},close:function(){try{l()(this).ocdialog("destroy").remove()}catch(t){}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,o,i,r,a,s){return l().when(this._getMessageTemplate()).then((function(c){var u="oc-dialog-"+ct.dialogsCounter+"-content",d="#"+u,f=c.octemplate({dialog_name:u,title:n,message:e,type:o},s?{escapeFunction:""}:{});void 0===a&&(a=!1),l()("body").append(f);var p=[];switch(i){case ct.YES_NO_BUTTONS:p=[{text:t("core","No"),click:function(){void 0!==r&&r(!1),l()(d).ocdialog("close")}},{text:t("core","Yes"),click:function(){void 0!==r&&r(!0),l()(d).ocdialog("close")},defaultButton:!0}];break;case ct.OK_BUTTON:p[0]={text:t("core","OK"),click:function(){l()(d).ocdialog("close"),void 0!==r&&r()},defaultButton:!0};break;default:"object"===it(i)&&i.type===ct.YES_NO_BUTTONS&&(p=[{text:i.cancel||t("core","No"),click:function(){void 0!==r&&r(!1),l()(d).ocdialog("close")}},{text:i.confirm||t("core","Yes"),click:function(){void 0!==r&&r(!0),l()(d).ocdialog("close")},defaultButton:!0,classes:i.confirmClasses}])}l()(d).ocdialog({closeOnEscape:!0,closeCallback:function(){r&&r(!1)},modal:a,buttons:p}),ct.dialogsCounter++})).fail((function(o,i){0===o?alert(n+": "+e):alert(t("core","Error loading message template: {error}",{error:i}))}))},_fileexistsshown:!1,fileexists:function(e,o,i,r){var a=this,s=new(l().Deferred),c=function(t,e,n,o,i){o=Math.round(o),i=Math.round(i);for(var r=t.getContext("2d").getImageData(0,0,e,n),a=t.getContext("2d").getImageData(0,0,o,i),s=r.data,l=a.data,c=e/o,u=n/i,d=Math.ceil(c/2),f=Math.ceil(u/2),p=0;p<i;p++)for(var h=0;h<o;h++){for(var m=4*(h+p*o),g=0,v=0,y=0,w=0,b=0,P=0,C=0,_=(p+.5)*u,A=Math.floor(p*u);A<(p+1)*u;A++)for(var k=Math.abs(_-(A+.5))/f,x=(h+.5)*c,O=k*k,T=Math.floor(h*c);T<(h+1)*c;T++){var j=Math.abs(x-(T+.5))/d,E=Math.sqrt(O+j*j);E>=-1&&E<=1&&(g=2*E*E*E-3*E*E+1)>0&&(C+=g*s[3+(j=4*(T+A*e))],y+=g,s[j+3]<255&&(g=g*s[j+3]/250),w+=g*s[j],b+=g*s[j+1],P+=g*s[j+2],v+=g)}l[m]=w/v,l[m+1]=b/v,l[m+2]=P/v,l[m+3]=C/y}t.getContext("2d").clearRect(0,0,Math.max(e,o),Math.max(n,i)),t.width=o,t.height=i,t.getContext("2d").putImageData(a,0,0)},u=function(n,o,i){var r=n.find(".template").clone().removeClass("template").addClass("conflict"),a=r.find(".original"),s=r.find(".replacement");r.data("data",e),r.find(".filename").text(o.name),a.find(".size").text(Bt.Util.humanFileSize(o.size)),a.find(".mtime").text(Bt.Util.formatDate(o.mtime)),i.size&&i.lastModified&&(s.find(".size").text(Bt.Util.humanFileSize(i.size)),s.find(".mtime").text(Bt.Util.formatDate(i.lastModified)));var u=o.directory+"/"+o.name,d={file:u,x:96,y:96,c:o.etag,forceIcon:0},f=Files.generatePreviewUrl(d);f=f.replace(/'/g,"%27"),a.find(".icon").css({"background-image":"url('"+f+"')"}),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),i=new Image;i.src=o,i.onload=function(){var t,n,o,r,a,s,l,u=(t=i,a=document.createElement("canvas"),s=t.width,l=t.height,s>l?(o=0,n=(s-l)/2):(o=(l-s)/2,n=0),r=Math.min(s,l),a.width=r,a.height=r,a.getContext("2d").drawImage(t,n,o,r,r,0,0,r,r),c(a,r,r,96,96),a.toDataURL("image/png",.7));e.resolve(u)}},o.readAsArrayBuffer(t)}else e.reject();return e}(i).then((function(t){s.find(".icon").css("background-image","url("+t+")")}),(function(){u=Bt.MimeType.getIconUrl(i.type),s.find(".icon").css("background-image","url("+u+")")}));var p=n.find(".conflict").length;a.find("input:checkbox").attr("id","checkbox_original_"+p),s.find("input:checkbox").attr("id","checkbox_replacement_"+p),n.append(r),i.lastModified>o.mtime?s.find(".mtime").css("font-weight","bold"):i.lastModified<o.mtime&&a.find(".mtime").css("font-weight","bold"),i.size&&i.size>o.size?s.find(".size").css("font-weight","bold"):i.size&&i.size<o.size&&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",f="#"+d;if(this._fileexistsshown){var p=l()(f+" .conflicts");u(p,o,i);var h=l()(f+" .conflict").length,m=n("core","{count} file conflict","{count} file conflicts",h,{count:h});l()(f).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"),p=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(p),o&&i){var h=p.find(".conflicts");u(h,o,i)}var m=[{text:t("core","Cancel"),classes:"cancel",click:function(){void 0!==r.onCancel&&r.onCancel(e),l()(f).ocdialog("close")}},{text:t("core","Continue"),classes:"continue",click:function(){void 0!==r.onContinue&&r.onContinue(l()(f+" .conflict")),l()(f).ocdialog("close")}}];l()(f).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()(f).css("height","auto");var g=p.closest(".oc-dialog").find("button.continue");function v(){var t=p.find(".conflicts .checkbox:checked").length;g.prop("disabled",0===t)}g.prop("disabled",!0),l()(f).find(".allnewfiles").on("click",(function(){l()(f).find('.conflict .replacement input[type="checkbox"]').prop("checked",l()(this).prop("checked"))})),l()(f).find(".allexistingfiles").on("click",(function(){l()(f).find('.conflict .original:not(.readonly) input[type="checkbox"]').prop("checked",l()(this).prop("checked"))})),l()(f).find(".conflicts").on("click",".replacement,.original:not(.readonly)",(function(){var t=l()(this).find('input[type="checkbox"]');t.prop("checked",!t.prop("checked"))})),l()(f).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()(f).on("click",".replacement,.allnewfiles",(function(){var e=l()(f).find('.conflict .replacement input[type="checkbox"]:checked').length;e===l()(f+" .conflict").length?(l()(f).find(".allnewfiles").prop("checked",!0),l()(f).find(".allnewfiles + .count").text(t("core","(all selected)"))):e>0?(l()(f).find(".allnewfiles").prop("checked",!1),l()(f).find(".allnewfiles + .count").text(t("core","({count} selected)",{count:e}))):(l()(f).find(".allnewfiles").prop("checked",!1),l()(f).find(".allnewfiles + .count").text("")),v()})),l()(f).on("click",".original,.allexistingfiles",(function(){var e=l()(f).find('.conflict .original input[type="checkbox"]:checked').length;e===l()(f+" .conflict").length?(l()(f).find(".allexistingfiles").prop("checked",!0),l()(f).find(".allexistingfiles + .count").text(t("core","(all selected)"))):e>0?(l()(f).find(".allexistingfiles").prop("checked",!1),l()(f).find(".allexistingfiles + .count").text(t("core","({count} selected)",{count:e}))):(l()(f).find(".allexistingfiles").prop("checked",!1),l()(f).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 e=this;l().get(Bt.generateUrl("/apps/files/api/v1/showgridview"),(function(n){e.$showGridView.removeClass("icon-toggle-filelist icon-toggle-pictures").addClass(n.gridview?"icon-toggle-filelist":"icon-toggle-pictures"),e.$showGridView.attr("aria-label",n.gridview?t("files","Show list view"):t("files","Show grid view")),l()(".list-container").toggleClass("view-grid",n.gridview)}))},_onGridviewChange:function(){var e=this.$showGridView.hasClass("icon-toggle-filelist");Bt.currentUser&&l().post(Bt.generateUrl("/apps/files/api/v1/showgridview"),{show:!e}),this.$showGridView.removeClass("icon-toggle-filelist icon-toggle-pictures").addClass(e?"icon-toggle-pictures":"icon-toggle-filelist"),this.$showGridView.attr("aria-label",e?t("files","Show grid view"):t("files","Show list view")),this.$filePicker.find(".list-container").toggleClass("view-grid",!e)},_getFilePickerTemplate:function(){var t=l().Deferred();if(this.$filePickerTemplate)t.resolve(this.$filePickerTemplate);else{var e=this;l().get(Bt.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(Bt.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(Bt.filePath("files","templates","fileexists.html"),(function(n){e.$fileexistsTemplate=l()(n),t.resolve(e.$fileexistsTemplate)})).fail((function(){t.reject()}))}return t.promise()},_fillFilePicker:(rt=ot(regeneratorRuntime.mark((function e(n,o){var i,r,a,s,c,u,d,f;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=this,this.$filelist.empty(),this.$filePicker.find(".emptycontent").hide(),this.$filelistContainer.addClass("icon-loading"),this.$filePicker.data("path",n),r=this.$filePicker.data("mimetype"),a=this.$filePicker.data("filter"),"string"==typeof r&&(r=[r]),i.$fileListHeader.find(".sort-indicator").addClass("hidden").removeClass("icon-triangle-n").removeClass("icon-triangle-s"),i.$fileListHeader.find("[data-sort="+i.filepicker.sortField+"] .sort-indicator").removeClass("hidden"),"asc"===i.filepicker.sortOrder?i.$fileListHeader.find("[data-sort="+i.filepicker.sortField+"] .sort-indicator").addClass("icon-triangle-n"):i.$fileListHeader.find("[data-sort="+i.filepicker.sortField+"] .sort-indicator").addClass("icon-triangle-s"),s=function(){var t=ot(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",i.filepicker.filesClient.getFolderContents(e).then((function(t,e){return e})));case 1:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),e.prev=12,e.next=15,s(n);case 15:c=e.sent,e.next=26;break;case 18:return e.prev=18,e.t0=e.catch(12),et.error("Requested path does not exists, falling back to root"),e.next=23,s("/");case 23:c=e.sent,this.$filePicker.data("path","/"),this._changeButtonsText(o,"");case 26:i.filelist=c,r&&r.length>0&&-1===r.indexOf("*")&&(c=c.filter((function(t){return"dir"===t.type||-1!==r.indexOf(t.mimetype)}))),a&&(c=c.filter(a)),null===(u=document.getElementById("showHiddenFiles"))||"1"===u.value||(c=c.filter((function(t){return!t.name.startsWith(".")}))),f=(d={name:function(t,e){return"dir"===t.type&&"dir"!==e.type?-1:"dir"!==t.type&&"dir"===e.type?1:Bt.Util.naturalSortCompare(t.name,e.name)},size:function(t,e){return t.size-e.size},mtime:function(t,e){return t.mtime-e.mtime}})[i.filepicker.sortField]||d.name,c=c.sort((function(t,e){var n=function(t){return t.tags&&t.tags.indexOf(Bt.TAG_FAVORITE)>=0};return n(t)&&!n(e)?-1:!n(t)&&n(e)?1:"asc"===i.filepicker.sortOrder?f(t,e):-f(t,e)})),i._fillSlug(),0===c.length?(i.$filePicker.find(".emptycontent").show(),i.$fileListHeader.hide()):(i.$filePicker.find(".emptycontent").hide(),i.$fileListHeader.show()),i.$filelist.empty(),l().each(c,(function(e,o){var r,a;if(o.isEncrypted&&"httpd/unix-directory"===o.mimetype?o.icon=Bt.MimeType.getIconUrl("dir-encrypted"):o.icon=Bt.MimeType.getIconUrl(o.mimetype),void 0!==o.size&&o.size>=0?(r=Bt.Util.humanFileSize(parseInt(o.size,10),!0),a=Math.round(160-Math.pow(o.size/1048576,2))):(r=t("files","Pending"),a=80),o.name.length>=10)var s=Math.min(Math.floor(o.name.length/2),10),c=o.name.substr(0,o.name.length-s),u=o.name.substr(o.name.length-s);else c=o.name,u="";var d=i.$listTmpl.octemplate({type:o.type,dir:n,filename:o.name,filename1:c,filename2:u,date:Bt.Util.relativeModifiedDate(o.mtime),size:r,sizeColor:a,icon:o.icon});if("file"===o.type){var f={file:n+"/"+o.name,x:100,y:100},p=new Image,h=Bt.generateUrl("/core/preview.png?")+l().param(f);p.onload=function(){p.width>5&&d.find("td.filename").attr("style","background-image:url("+h+")")},p.src=h}i.$filelist.append(d)})),i.$filelistContainer.removeClass("icon-loading");case 40:case"end":return e.stop()}}),e,this,[[12,18]])}))),function(t,e){return rt.apply(this,arguments)}),_fillSlug:function(){var e=this.$dirTree.find(".actions.creatable").detach();this.$dirTree.empty();var n=this;n.$dirTree.append(e);var o=this.$filePicker.data("path"),i=l()('<div data-dir="{dir}" tabindex="0"><a>{name}</a></div>').addClass("crumb");if(o){var r=o.split("/");l().each(r,(function(t,e){if(""===(e=r.pop()))return!1;n.$dirTree.prepend(i.octemplate({dir:r.join("/")+"/"+e,name:e}))}))}i.octemplate({dir:"",name:t("core","Home")},{escapeFunction:null}).prependTo(this.$dirTree)},_handleTreeListSelect:function(t,e){var n=t.data,o=l()(t.target).closest(".crumb").data("dir");n._fillFilePicker(o,e);var i=t.target.closest(".oc-dialog"),r=l()(".primary",i);this._changeButtonsText(e,o.split(/[/]+/).pop()),-1!==this.$filePicker.data("mimetype").indexOf("httpd/unix-directory")||this.$filePicker.data("allowDirectoryChooser")?r.prop("disabled",!1):r.prop("disabled",!0)},_handlePickerClick:function(t,e,n){var o=this.$filePicker.closest(".oc-dialog").find(".primary");"file"===e.data("type")?(!0===this.$filePicker.data("multiselect")&&t.ctrlKey||this.$filelist.find(".filepicker_element_selected").removeClass("filepicker_element_selected"),e.toggleClass("filepicker_element_selected"),o.prop("disabled",!1)):"dir"===e.data("type")&&(this._fillFilePicker(this.$filePicker.data("path")+"/"+e.data("entryname"),n),this._changeButtonsText(n,e.data("entryname")),-1!==this.$filePicker.data("mimetype").indexOf("httpd/unix-directory")||this.$filePicker.data("allowDirectoryChooser")?o.prop("disabled",!1):o.prop("disabled",!0))},_changeButtonsText:function(e,n){var o=""===n?t("core","Copy"):t("core","Copy to {folder}",{folder:n}),i=""===n?t("core","Move"):t("core","Move to {folder}",{folder:n}),r=l()(".oc-dialog-buttonrow button");switch(e){case this.FILEPICKER_TYPE_CHOOSE:case this.FILEPICKER_TYPE_CUSTOM:break;case this.FILEPICKER_TYPE_COPY:r.text(o);break;case this.FILEPICKER_TYPE_MOVE:r.text(i);break;case this.FILEPICKER_TYPE_COPY_MOVE:r.eq(0).text(o),r.eq(1).text(i)}}},ut=ct,dt=(at=document,st=a.j8,lt=at.getElementsByTagName("head")[0].getAttribute("data-requesttoken"),{getToken:function(){return lt},setToken:function(t){st("csrf-token-update",{token:lt=t})}}).getToken,ft=function t(e,n){var o,i,r="";if(this.typelessListeners=[],this.closed=!1,this.listeners={},n)for(o in n)r+=o+"="+encodeURIComponent(n[o])+"&";if(r+="requesttoken="+encodeURIComponent(dt()),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(),i="&",-1===e.indexOf("?")&&(i="?"),this.iframe.attr("src",e+i+"fallback=true&fallback_id="+t.iframeCount+"&"+r),l()("body").append(this.iframe),this.useFallBack=!0,t.iframeCount++}else i="&",-1===e.indexOf("?")&&(i="?"),this.source=new EventSource(e+i+r),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))};ft.fallBackSources=[],ft.iframeCount=0,ft.fallBackCallBack=function(t,e,n){ft.fallBackSources[t].fallBackCallBack(e,n)},ft.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 pt=ft,ht=i(42515),mt=i(25108),gt=null,vt=null,yt=function(t){if(gt){var e=gt;gt.trigger(new(l().Event)("beforeHide")),gt.slideUp(50,(function(){e.trigger(new(l().Event)("afterHide")),t&&t.apply(this,arguments)}))}l()(".menutoggle").attr("aria-expanded",!1),vt&&vt.attr("aria-expanded",!1),l()(".openedMenu").removeClass("openedMenu"),gt=null,vt=null},wt=!!window._oc_isadmin,bt=i(86834),Pt=i.n(bt),Ct=i(31352),_t={load:Ct.XJ,register:Ct.z2,_unregister:Ct.ET,translate:Ct.Iu,translatePlural:Ct.uN};Pt().registerHelper("t",(function(t,e){return(0,Ct.Iu)(t,e)}));var At={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()}},kt=i(30381),xt=i.n(kt),Ot={callback:null,pageLoadTime:null,init:function(){l()(".password-confirm-required").on("click",p.ZP.bind(this.requirePasswordConfirmation,this)),this.pageLoadTime=xt().now()},requiresPasswordConfirmation:function(){var t=this.pageLoadTime-1e3*window.nc_pageLoad,e=xt().now()-(t+1e3*window.nc_lastLogin);return window.backendAllowsPasswordConfirmation&&e>18e5},requirePasswordConfirmation:function(e,n,o){n=void 0!==n?n:{};var i={title:t("core","Authentication required"),text:t("core","This action requires you to confirm your password"),confirm:t("core","Confirm"),label:t("core","Password"),error:""},r=p.ZP.extend(i,n),a=this;this.requiresPasswordConfirmation()&&Bt.dialogs.prompt(r.text,r.title,(function(t,e){t&&""!==e?a._confirmPassword(e,r):p.ZP.isFunction(o)&&o()}),!0,r.label,!0).then((function(){var t=l()(".oc-dialog:visible");if(t.find(".ui-icon").remove(),t.addClass("password-confirmation"),""!==r.error){var e=l()("<p></p>").addClass("msg warning").text(r.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(r.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.ZP.isFunction(o.callback)&&o.callback()},error:function(){n.error=t("core","Failed to authenticate, try again"),Bt.PasswordConfirmation.requirePasswordConfirmation(o.callback,n)}})}},Tt=window._theme||{},jt={_handlers:[],_pushState:function(t,e,n){var o;if(o="string"==typeof t?t:Bt.buildQueryString(t),window.history.pushState){if(e=e||location.pathname+"?"+o,navigator.userAgent.toLowerCase().indexOf("firefox")>-1&&parseInt(navigator.userAgent.split("/").pop())<51)for(var i,r=document.querySelectorAll('[fill^="url(#"], [stroke^="url(#"], [filter^="url(#invert"]'),a=0,s=r.length;a<s;a++)(i=r[a]).style.fill=i.style.fill,i.style.stroke=i.style.stroke,i.removeAttribute("filter"),i.setAttribute("filter","url(#invert)");n?window.history.replaceState(t,"",e):window.history.pushState(t,"",e)}else window.location.hash="?"+o,this._cancelPop=!0},pushState:function(t,e){this._pushState(t,e,!1)},replaceState:function(t,e){this._pushState(t,e,!0)},addOnPopStateHandler:function(t){this._handlers.push(t)},_parseHashQuery:function(){var t=window.location.hash,e=t.indexOf("?");return e>=0?t.substr(e+1):t.length?t.substr(1):""},_decodeQuery:function(t){return t.replace(/\+/g," ")},parseUrlQuery:function(){var t,e=this._parseHashQuery();return e&&(t=Bt.parseQueryString(this._decodeQuery(e))),(t=p.ZP.extend(t||{},Bt.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.ZP.isString(e)?e=Bt.parseQueryString(e):e||(e=this.parseUrlQuery()||{});for(var n=0;n<this._handlers.length;n++)this._handlers[n](e)}}},Et=i(91770),St=i(25108);function Lt(t){for(var e,n=[],o=0,i=-1,r=0;o<t.length;){e=t.charAt(o);var a=!r&&"."===e||e>="0"&&e<="9";a!==r&&(n[++i]="",r=a),n[i]+=e,o++}return n}var Nt={History:jt,humanFileSize:Et.sS,computerFileSize:function(t){if("string"!=typeof t)return null;var e=t.toLowerCase().trim(),n=null,o=e.match(/^[\s+]?([0-9]*)(\.([0-9]+))?( +)?([kmgtp]?b?)$/i);return null===o?null:(n=parseFloat(e),isFinite(n)?(o[5]&&(n*={b:1,k:1024,kb:1024,mb:1048576,m:1048576,gb:1073741824,g:1073741824,tb:1099511627776,t:1099511627776,pb:0x4000000000000,p:0x4000000000000}[o[5]]),n=Math.round(n)):null)},formatDate:function(t,e){return void 0===window.TESTING&&St.warn("OC.Util.formatDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment"),e=e||"LLL",xt()(t).format(e)},relativeModifiedDate:function(e){void 0===window.TESTING&&St.warn("OC.Util.relativeModifiedDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment");var n=xt()().diff(xt()(e));return n>=0&&n<45e3?t("core","seconds ago"):xt()(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=Lt(t),i=Lt(e);for(n=0;o[n]&&i[n];n++)if(o[n]!==i[n]){var r=Number(o[n]),a=Number(i[n]);return r==o[n]&&a==i[n]?r-a:o[n].localeCompare(i[n],Bt.getLanguage())}return o.length-i.length},waitFor:function(t,e){!function n(){!0!==t()&&setTimeout(n,e)}()},isCookieSetToValue:function(t,e){for(var n=document.cookie.split(";"),o=0;o<n.length;o++){var i=n[o].split("=");if(i[0].trim()===t&&i[1].trim()===e)return!0}return!1}},It=window._oc_debug,Ut=window._oc_webroot;if(void 0===Ut){var $t=(Ut=location.pathname).indexOf("/index.php/");Ut=-1!==$t?Ut.substr(0,$t):Ut.substr(0,Ut.lastIndexOf("/"))}var Rt,Ft=Ut,Mt=i(25108),Bt={coreApps:["","admin","log","core/search","core","3rdparty"],menuSpeed:50,PERMISSION_ALL:31,PERMISSION_CREATE:4,PERMISSION_DELETE:8,PERMISSION_NONE:0,PERMISSION_READ:1,PERMISSION_SHARE:16,PERMISSION_UPDATE:2,TAG_FAVORITE:"_$!<Favorite>!$_",fileIsBlacklisted:function(t){return!!t.match(R.blacklist_files_regex)},addScript:function(t,e,n){var o;u.warn("OC.addScript is deprecated, use OCP.Loader.loadScript instead");var i=(0,c.generateFilePath)(t,"js",e+".js");return d[i]?n&&n():(o=l().Deferred(),l().getScript(i,(function(){return o.resolve()})),d[i]=o),d[i]},addStyle:function(t,e){u.warn("OC.addStyle is deprecated, use OCP.Loader.loadStylesheet instead");var n=(0,c.generateFilePath)(t,"css",e+".css");-1===f.indexOf(n)&&(f.push(n),document.createStyleSheet?document.createStyleSheet(n):(e=l()('<link rel="stylesheet" type="text/css" href="'+n+'"/>'),l()("head").append(e)))},Apps:y,AppConfig:P,appConfig:b,appSettings:function(e){if(C.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 i=l()("#appsettings_popup");if(0===i.length&&(l()("body").prepend('<div class="popup hidden" id="appsettings_popup"></div>'),(i=l()("#appsettings_popup")).addClass(o.hasClass("topright")?"topright":"bottomleft")),i.is(":visible"))i.hide().remove();else{var r=o.hasClass("topright")?"up":"left";l().get((0,c.generateFilePath)(n.appid,"",n.scriptName),(function(e){i.html(e).ready((function(){if(i.prepend('<span class="arrow '+r+'"></span><h2>'+t("core","Settings")+'</h2><a class="close"></a>').show(),i.find(".close").bind("click",(function(){i.remove()})),void 0!==n.loadJS){var e;if(!0===n.loadJS)e="settings.js";else{if("string"!=typeof n.loadJS)throw{name:"InvalidParameter",message:'The "loadJS" parameter must be either boolean or a string.'};e=n.loadJS}n.cache&&l().ajaxSetup({cache:!0}),l().getScript((0,c.generateFilePath)(n.appid,"js",e)).fail((function(t,e,n){throw n}))}})).show()}),"html")}},appswebroots:A,Backbone:U,ContactsMenu:Y,config:R,currentUser:V,dialogs:ut,EventSource:pt,getCurrentUser:function(){return{uid:V,displayName:K}},isUserAdmin:function(){return wt},L10N:_t,_ajaxConnectionLostHandler:v,_processAjaxError:function(t){(0!==t.status||"abort"!==t.statusText&&"timeout"!==t.statusText&&!Bt._reloadCalled)&&(p.ZP.contains([302,303,307,401],t.status)&&Bt.currentUser?setTimeout((function(){if(!Bt._userIsNavigatingAway&&!Bt._reloadCalled){var t=0,e=setInterval((function(){g.showUpdate(n("core","Problem loading page, reloading in %n second","Problem loading page, reloading in %n seconds",5-t)),t>=5&&(clearInterval(e),Bt.reload()),t++}),1e3);Bt._reloadCalled=!0}}),100):0===t.status&&setTimeout((function(){Bt._userIsNavigatingAway||Bt._reloadCalled||Bt._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 mt.warn("OC.getCapabilities is deprecated and will be removed in Nextcloud 21. See @nextcloud/capabilities"),(0,ht.getCapabilities)()},hideMenus:yt,registerMenu:function(t,e,n,o){e.addClass("menu");var i="A"===t.prop("tagName")||"BUTTON"===t.prop("tagName");t.on(i?"click.menu":"click.menu keyup.menu",(function(i){i.preventDefault(),i.key&&"Enter"!==i.key||(e.is(gt)?yt():(gt&&yt(),!0===o&&e.parent().addClass("openedMenu"),t.attr("aria-expanded",!0),e.slideToggle(50,n),gt=e,vt=t))}))},showMenu:function(t,e,n){e.is(gt)||(yt(),gt=e,vt=t,e.trigger(new(l().Event)("beforeShow")),e.show(),e.trigger(new(l().Event)("afterShow")),p.ZP.isFunction(n)&&n())},unregisterMenu:function(t,e){e.is(gt)&&yt(),t.off("click.menu").removeClass("menutoggle"),e.removeClass("menu")},basename:$.EZ,encodePath:$.Ec,dirname:$.XX,isSamePath:$.Mg,joinPaths:$.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:Ct.aj,getLocale:Ct.Kd,getLanguage:Ct.G3,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,i={};if(!t)return null;(e=t.indexOf("?"))>=0&&(t=t.substr(e+1));for(var r=t.replace(/\+/g,"%20").split("&"),a=0;a<r.length;a++){var s=r[a];(n=(e=s.indexOf("="))>=0?[s.substr(0,e),s.substr(e+1)]:[s]).length&&(o=decodeURIComponent(n[0]))&&(i[o]=n.length>1?decodeURIComponent(n[1]):null)}return i},msg:At,Notification:g,PasswordConfirmation:Ot,Plugins:{_plugins:{},register:function(t,e){var n=this._plugins[t];n||(n=this._plugins[t]=[]),n.push(e)},getPlugins:function(t){return this._plugins[t]||[]},attach:function(t,e,n){for(var o=this.getPlugins(t),i=0;i<o.length;i++)o[i].attach&&o[i].attach(e,n)},detach:function(t,e,n){for(var o=this.getPlugins(t),i=0;i<o.length;i++)o[i].detach&&o[i].detach(e,n)}},theme:Tt,Util:Nt,debug:It,filePath:c.generateFilePath,generateUrl:c.generateUrl,get:(Rt=window,function(t){for(var e=t.split("."),n=e.pop(),o=0;o<e.length;o++)if(!(Rt=Rt[e[o]]))return!1;return Rt[n]}),set:function(t){return function(e,n){for(var o=e.split("."),i=o.pop(),r=0;r<o.length;r++)t[o[r]]||(t[o[r]]={}),t=t[o[r]];return t[i]=n,n}}(window),getRootPath:c.getRootUrl,imagePath:c.imagePath,redirect:function(t){window.location=t},reload:function(){window.location.reload()},requestToken:dt(),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:Ft};(0,a.Ld)("csrf-token-update",(function(t){OC.requestToken=t.token,Mt.info("OC.requestToken changed",t.token)}));var zt=i(79954),Dt=i(17563),Zt=i(22660),Ht=i.n(Zt),Yt=i(10204),qt=i.n(Yt),Kt=i(57290),Vt=i.n(Kt),Gt=i(10861),Wt=i.n(Gt),Jt={name:"LoginButton",components:{ArrowRight:i(39429).default,NcButton:Wt()},props:{value:{type:String,default:t("core","Log in")},valueLoading:{type:String,default:t("core","Logging in …")},loading:{type:Boolean,required:!0},invertedColors:{type:Boolean,default:!1}}},Qt=i(93379),Xt=i.n(Qt),te=i(7795),ee=i.n(te),ne=i(90569),oe=i.n(ne),ie=i(3565),re=i.n(ie),ae=i(19216),se=i.n(ae),le=i(44589),ce=i.n(le),ue=i(49665),de={};de.styleTagTransform=ce(),de.setAttributes=re(),de.insert=oe().bind(null,"head"),de.domAPI=ee(),de.insertStyleElement=se(),Xt()(ue.Z,de),ue.Z&&ue.Z.locals&&ue.Z.locals;var fe=i(51900),pe=(0,fe.Z)(Jt,(function(){var t=this,e=t._self._c;return e("NcButton",{attrs:{type:"primary","native-type":"submit",wide:!0},on:{click:function(e){return t.$emit("click")}},scopedSlots:t._u([{key:"icon",fn:function(){return[t.loading?e("div",{staticClass:"submit-wrapper__icon icon-loading-small-dark"}):e("ArrowRight",{staticClass:"submit-wrapper__icon"})]},proxy:!0}])},[t._v("\n\t"+t._s(t.loading?t.valueLoading:t.value)+"\n\t")])}),[],!1,null,"756414a8",null).exports,he={name:"LoginForm",components:{LoginButton:pe,NcPasswordField:Ht(),NcTextField:qt(),NcNoteCard:Vt()},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},autoCompleteAllowed:{type:Boolean,default:!0},directLogin:{type:Boolean,default:!1}},data:function(){var e,n;return{loading:!1,timezone:null===(e=new Intl.DateTimeFormat)||void 0===e||null===(n=e.resolvedOptions())||void 0===n?void 0:n.timeZone,timezoneOffset:-(new Date).getTimezoneOffset()/60,headline:t("core","Log in to {productName}",{productName:OC.theme.name}),user:"",password:""}},computed:{isError:function(){return this.invalidPassword||this.userDisabled||this.throttleDelay>5e3},errorLabel:function(){return this.invalidPassword?t("core","Wrong username or password."):this.userDisabled?t("core","User disabled"):this.throttleDelay>5e3?t("core","We have detected multiple invalid login attempts from your IP. Therefore your next login is throttled up to 30 seconds."):void 0},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")},loadingIcon:function(){return(0,c.imagePath)("core","loading-dark.gif")},loginActionUrl:function(){return(0,c.generateUrl)("login")}},mounted:function(){""===this.username?this.$refs.user.$refs.inputField.$refs.input.focus():(this.user=this.username,this.$refs.password.$refs.inputField.$refs.input.focus())},methods:{updateUsername:function(){this.$emit("update:username",this.user)},submit:function(){this.loading=!0,this.$emit("submit")}}},me=i(3591),ge={};ge.styleTagTransform=ce(),ge.setAttributes=re(),ge.insert=oe().bind(null,"head"),ge.domAPI=ee(),ge.insertStyleElement=se(),Xt()(me.Z,ge),me.Z&&me.Z.locals&&me.Z.locals;var ve=(0,fe.Z)(he,(function(){var t=this,e=t._self._c;return e("form",{ref:"loginForm",staticClass:"login-form",attrs:{method:"post",name:"login",action:t.loginActionUrl},on:{submit:t.submit}},[e("fieldset",{staticClass:"login-form__fieldset",attrs:{"data-login-form":""}},[t.apacheAuthFailed?e("NcNoteCard",{attrs:{title:t.t("core","Server side authentication failed!"),type:"warning"}},[t._v("\n\t\t\t"+t._s(t.t("core","Please contact your administrator."))+"\n\t\t")]):t._e(),t._v(" "),t.messages.length>0?e("NcNoteCard",t._l(t.messages,(function(n,o){return e("div",{key:o},[t._v("\n\t\t\t\t"+t._s(n)),e("br")])})),0):t._e(),t._v(" "),t.internalException?e("NcNoteCard",{class:t.t("core","An internal error occurred."),attrs:{type:"warning"}},[t._v("\n\t\t\t"+t._s(t.t("core","Please try again or contact your administrator."))+"\n\t\t")]):t._e(),t._v(" "),e("div",{staticClass:"hidden",attrs:{id:"message"}},[e("img",{staticClass:"float-spinner",attrs:{alt:"",src:t.loadingIcon}}),t._v(" "),e("span",{attrs:{id:"messageText"}}),t._v(" "),e("div",{staticStyle:{clear:"both"}})]),t._v(" "),e("h2",{staticClass:"login-form__headline",attrs:{"data-login-form-headline":""},domProps:{innerHTML:t._s(t.headline)}}),t._v(" "),e("NcTextField",{ref:"user",class:{shake:t.invalidPassword},attrs:{id:"user",label:t.t("core","Account name or email"),"label-visible":!0,name:"user",value:t.user,autocapitalize:"none",spellchecking:!1,autocomplete:t.autoCompleteAllowed?"username":"off",required:"","data-login-form-input-user":""},on:{"update:value":function(e){t.user=e},change:t.updateUsername}}),t._v(" "),e("NcPasswordField",{ref:"password",class:{shake:t.invalidPassword},attrs:{id:"password",name:"password","label-visible":!0,value:t.password,spellchecking:!1,autocapitalize:"none",autocomplete:t.autoCompleteAllowed?"current-password":"off",label:t.t("core","Password"),"helper-text":t.errorLabel,error:t.isError,"data-login-form-input-password":"",required:""},on:{"update:value":function(e){t.password=e}}}),t._v(" "),e("LoginButton",{attrs:{"data-login-form-submit":"",loading:t.loading}}),t._v(" "),t.redirectUrl?e("input",{attrs:{type:"hidden",name:"redirect_url"},domProps:{value:t.redirectUrl}}):t._e(),t._v(" "),e("input",{attrs:{type:"hidden",name:"timezone"},domProps:{value:t.timezone}}),t._v(" "),e("input",{attrs:{type:"hidden",name:"timezone_offset"},domProps:{value:t.timezoneOffset}}),t._v(" "),e("input",{attrs:{type:"hidden",name:"requesttoken"},domProps:{value:t.OC.requestToken}}),t._v(" "),t.directLogin?e("input",{attrs:{type:"hidden",name:"direct",value:"1"}}):t._e()],1)])}),[],!1,null,"5bd351bc",null).exports,ye=i(4820),we=i(37838),be=i(38213),Pe=i(25108);function Ce(t){return Ce="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},Ce(t)}function _e(t){return function(t){if(Array.isArray(t))return Ae(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 Ae(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)?Ae(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 Ae(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 ke(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 xe(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?ke(Object(n),!0).forEach((function(e){Oe(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ke(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function Oe(t,e,n){return(e=Te(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Te(t){var e=function(t,e){if("object"!==Ce(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var o=n.call(t,"string");if("object"!==Ce(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"===Ce(e)?e:String(e)}function je(t){var e="function"==typeof Map?new Map:void 0;return je=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 Ee(t,arguments,Ne(this).constructor)}return o.prototype=Object.create(t.prototype,{constructor:{value:o,enumerable:!1,writable:!0,configurable:!0}}),Le(o,t)},je(t)}function Ee(t,e,n){return Ee=Se()?Reflect.construct.bind():function(t,e,n){var o=[null];o.push.apply(o,e);var i=new(Function.bind.apply(t,o));return n&&Le(i,n.prototype),i},Ee.apply(null,arguments)}function Se(){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 Le(t,e){return Le=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},Le(t,e)}function Ne(t){return Ne=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},Ne(t)}var Ie=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&&Le(t,e)}(r,t);var e,n,o,i=(n=r,o=Se(),function(){var t,e=Ne(n);if(o){var i=Ne(this).constructor;t=Reflect.construct(e,arguments,i)}else t=e.apply(this,arguments);return function(t,e){if(e&&("object"===Ce(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)}(this,t)});function r(){return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,r),i.apply(this,arguments)}return e=r,Object.defineProperty(e,"prototype",{writable:!1}),e}(je(Error)),Ue={name:"PasswordLessLoginForm",components:{LoginButton:pe,InformationIcon:we.Z,LockOpenIcon:be.Z},props:{username:{type:String,default:""},redirectUrl:{type:[String,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;Pe.debug("passwordless login initiated"),this.getAuthenticationData(this.user).then((function(t){return Pe.debug(t),t})).then(this.sign).then(this.completeAuthentication).catch((function(e){e instanceof Ie?t.validCredentials=!1:Pe.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"),ye.default.post(n,{loginName:e}).then((function(t){return t.data}))).then((function(t){if(Pe.debug("Obtained PublicKeyCredentialRequestOptions"),Pe.debug(t),!Object.prototype.hasOwnProperty.call(t,"allowCredentials"))throw Pe.debug("No credentials found."),new Ie;return t.challenge=Uint8Array.from(o(t.challenge),(function(t){return t.charCodeAt(0)})),t.allowCredentials=t.allowCredentials.map((function(t){return xe(xe({},t),{},{id:Uint8Array.from(o(t.id),(function(t){return t.charCodeAt(0)}))})})),Pe.debug("Converted PublicKeyCredentialRequestOptions"),Pe.debug(t),t})).catch((function(t){throw Pe.debug("Error while obtaining data"),t}))},sign:function(t){var e=function(t){return window.btoa(String.fromCharCode.apply(String,_e(t)))};return navigator.credentials.get({publicKey:t}).then((function(t){return Pe.debug(t),Pe.debug(new Uint8Array(t.rawId)),Pe.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,_e(n))):null}};var n})).then((function(t){return Pe.debug(t),t})).catch((function(t){Pe.debug("GOT AN ERROR!"),Pe.debug(t)}))},completeAuthentication:function(t){Pe.debug("TIME TO COMPLETE");var e,n,o=this.redirectUrl;return(e=JSON.stringify(t),n=(0,c.generateUrl)("/login/webauthn/finish"),ye.default.post(n,{data:e}).then((function(t){return t.data}))).then((function(t){var e=t.defaultRedirectUrl;Pe.debug("Logged in redirecting"),window.location.href=o||e})).catch((function(t){Pe.debug("GOT AN ERROR WHILE SUBMITTING CHALLENGE!"),Pe.debug(t)}))},submit:function(){}}},$e=i(43848),Re={};Re.styleTagTransform=ce(),Re.setAttributes=re(),Re.insert=oe().bind(null,"head"),Re.domAPI=ee(),Re.insertStyleElement=se(),Xt()($e.Z,Re),$e.Z&&$e.Z.locals&&$e.Z.locals;var Fe=(0,fe.Z)(Ue,(function(){var t=this,e=t._self._c;return(t.isHttps||t.isLocalhost)&&t.hasPublicKeyCredential?e("form",{ref:"loginForm",attrs:{method:"post",name:"login"},on:{submit:function(e){return e.preventDefault(),t.submit.apply(null,arguments)}}},[e("fieldset",[e("p",{staticClass:"grouptop groupbottom"},[e("label",{staticClass:"infield",attrs:{for:"user"}},[t._v(t._s(t.t("core","Username or\temail")))]),t._v(" "),e("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():e("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?e("LoginButton",{attrs:{loading:t.loading},on:{click:t.authenticate}}):t._e()],1)]):t.hasPublicKeyCredential?t.isHttps||t.isLocalhost?t._e():e("div",{staticClass:"body-login-container update"},[e("LockOpenIcon",{attrs:{size:"70"}}),t._v(" "),e("h2",[t._v(t._s(t.t("core","Your connection is not secure")))]),t._v(" "),e("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):e("div",{staticClass:"body-login-container update"},[e("InformationIcon",{attrs:{size:"70"}}),t._v(" "),e("h2",[t._v(t._s(t.t("core","Browser not supported")))]),t._v(" "),e("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,"20256748",null),Me=Fe.exports,Be=i(25108),ze={name:"ResetPassword",components:{LoginButton:pe,NcNoteCard:Vt(),NcTextField:qt()},props:{username:{type:String,required:!0},resetPasswordLink:{type:String,required:!0}},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 ye.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){Be.error("could not send reset email request",e),t.error=!0,t.message="send-error"})).then((function(){t.loading=!1}))}}},De=i(28032),Ze={};Ze.styleTagTransform=ce(),Ze.setAttributes=re(),Ze.insert=oe().bind(null,"head"),Ze.domAPI=ee(),Ze.insertStyleElement=se(),Xt()(De.Z,Ze),De.Z&&De.Z.locals&&De.Z.locals;var He=(0,fe.Z)(ze,(function(){var t=this,e=t._self._c;return e("form",{staticClass:"login-form",on:{submit:function(e){return e.preventDefault(),t.submit.apply(null,arguments)}}},[e("fieldset",{staticClass:"login-form__fieldset"},[e("NcTextField",{attrs:{id:"user",value:t.user,name:"user",autocapitalize:"off",label:t.t("core","Account name or email"),"label-visible":!0,required:""},on:{"update:value":function(e){t.user=e},change:t.updateUsername}}),t._v(" "),e("LoginButton",{attrs:{value:t.t("core","Reset password")}}),t._v(" "),"send-success"===t.message?e("NcNoteCard",{attrs:{type:"success"}},[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"),e("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?e("NcNoteCard",{attrs:{type:"error"}},[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?e("NcNoteCard",{attrs:{type:"error"}},[t._v("\n\t\t\t"+t._s(t.t("core","Password cannot be changed. Please contact your administrator."))+"\n\t\t")]):t._e(),t._v(" "),e("a",{staticClass:"login-form__link",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)])}),[],!1,null,"27cabc60",null),Ye=He.exports;function qe(t,e,n,o,i,r,a){try{var s=t[r](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(o,i)}var Ke={name:"UpdatePassword",components:{LoginButton:pe},props:{username:{type:String,required:!0},resetPasswordTarget:{type:String,required:!0}},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,i;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,ye.default.post(n.resetPasswordTarget,{password:n.password,proceed:n.proceed});case 6:if(o=e.sent,!(i=o.data)||"success"!==i.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(!i||!i.encryption){e.next=18;break}n.encrypted=!0,e.next=23;break;case 18:if(!i||!i.msg){e.next=22;break}throw new Error(i.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,i){var r=e.apply(t,n);function a(t){qe(r,o,i,a,s,"next",t)}function s(t){qe(r,o,i,a,s,"throw",t)}a(void 0)}))})()}}},Ve=Ke,Ge=i(74778),We={};We.styleTagTransform=ce(),We.setAttributes=re(),We.insert=oe().bind(null,"head"),We.domAPI=ee(),We.insertStyleElement=se(),Xt()(Ge.Z,We),Ge.Z&&Ge.Z.locals&&Ge.Z.locals;var Je=(0,fe.Z)(Ve,(function(){var t=this,e=t._self._c;return e("form",{on:{submit:function(e){return e.preventDefault(),t.submit.apply(null,arguments)}}},[e("fieldset",[e("p",[e("label",{staticClass:"infield",attrs:{for:"password"}},[t._v(t._s(t.t("core","New password")))]),t._v(" "),e("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?e("div",{staticClass:"update"},[e("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(" "),e("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,i=!!o.checked;if(Array.isArray(n)){var r=t._i(n,null);o.checked?r<0&&(t.proceed=n.concat([null])):r>-1&&(t.proceed=n.slice(0,r).concat(n.slice(r+1)))}else t.proceed=i}}}),t._v(" "),e("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(" "),e("LoginButton",{attrs:{loading:t.loading,value:t.t("core","Reset password"),"value-loading":t.t("core","Resetting password")}}),t._v(" "),t.error&&t.message?e("p",{class:{warning:t.error}},[t._v("\n\t\t\t"+t._s(t.message)+"\n\t\t")]):t._e()],1)])}),[],!1,null,"4dc21d74",null),Qe=Je.exports,Xe=i(25108),tn=Dt.parse(location.search);if("1"===tn.clear)try{window.localStorage.clear(),window.sessionStorage.clear(),Xe.debug("Browser storage cleared")}catch(t){Xe.error("Could not clear browser storage",t)}var en={name:"Login",components:{LoginForm:ve,PasswordLessLoginForm:Me,ResetPassword:Ye,UpdatePassword:Qe,NcButton:Wt(),NcNoteCard:Vt()},data:function(){return{loading:!1,user:(0,zt.j)("core","loginUsername",""),passwordlessLogin:!1,resetPassword:!1,errors:(0,zt.j)("core","loginErrors",[]),messages:(0,zt.j)("core","loginMessages",[]),redirectUrl:(0,zt.j)("core","loginRedirectUrl",!1),throttleDelay:(0,zt.j)("core","loginThrottleDelay",0),canResetPassword:(0,zt.j)("core","loginCanResetPassword",!1),resetPasswordLink:(0,zt.j)("core","loginResetPasswordLink",""),autoCompleteAllowed:(0,zt.j)("core","loginAutocomplete",!0),resetPasswordTarget:(0,zt.j)("core","resetPasswordTarget",""),resetPasswordUser:(0,zt.j)("core","resetPasswordUser",""),directLogin:"1"===tn.direct,hasPasswordless:(0,zt.j)("core","webauthn-available",!1),countAlternativeLogins:(0,zt.j)("core","countAlternativeLogins",!1),alternativeLogins:(0,zt.j)("core","alternativeLogins",[]),isHttps:"https:"===window.location.protocol,isLocalhost:"localhost"===window.location.hostname,hasPublicKeyCredential:void 0!==window.PublicKeyCredential,hideLoginForm:(0,zt.j)("core","hideLoginForm",!1)}},methods:{passwordResetFinished:function(){this.resetPasswordTarget="",this.directLogin=!0}}},nn=i(20549),on={};on.styleTagTransform=ce(),on.setAttributes=re(),on.insert=oe().bind(null,"head"),on.domAPI=ee(),on.insertStyleElement=se(),Xt()(nn.Z,on),nn.Z&&nn.Z.locals&&nn.Z.locals;var rn=(0,fe.Z)(en,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"guest-box login-box"},[!t.hideLoginForm||t.directLogin?e("div",[e("transition",{attrs:{name:"fade",mode:"out-in"}},[t.passwordlessLogin||t.resetPassword||""!==t.resetPasswordTarget?!t.loading&&t.passwordlessLogin?e("div",{key:"reset",staticClass:"login-additional"},[e("PasswordLessLoginForm",{attrs:{username:t.user,"redirect-url":t.redirectUrl,"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(" "),e("a",{staticClass:"login-box__link",attrs:{href:"#"},on:{click:function(e){e.preventDefault(),t.passwordlessLogin=!1}}},[t._v("\n\t\t\t\t\t"+t._s(t.t("core","Back"))+"\n\t\t\t\t")])],1):!t.loading&&t.canResetPassword?e("div",{key:"reset",staticClass:"login-additional"},[e("div",{staticClass:"lost-password-container"},[t.resetPassword?e("ResetPassword",{attrs:{username:t.user,"reset-password-link":t.resetPasswordLink},on:{"update:username":function(e){t.user=e},abort:function(e){t.resetPassword=!1}}}):t._e()],1)]):""!==t.resetPasswordTarget?e("div",[e("UpdatePassword",{attrs:{username:t.user,"reset-password-target":t.resetPasswordTarget},on:{"update:username":function(e){t.user=e},done:t.passwordResetFinished}})],1):t._e():e("div",[e("LoginForm",{attrs:{username:t.user,"redirect-url":t.redirectUrl,"direct-login":t.directLogin,messages:t.messages,errors:t.errors,"throttle-delay":t.throttleDelay,"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?e("a",{staticClass:"login-box__link",attrs:{id:"lost-password",href:t.resetPasswordLink}},[t._v("\n\t\t\t\t\t"+t._s(t.t("core","Forgot password?"))+"\n\t\t\t\t")]):t.canResetPassword&&!t.resetPassword?e("a",{staticClass:"login-box__link",attrs:{id:"lost-password",href:t.resetPasswordLink},on:{click:function(e){e.preventDefault(),t.resetPassword=!0}}},[t._v("\n\t\t\t\t\t"+t._s(t.t("core","Forgot password?"))+"\n\t\t\t\t")]):t._e(),t._v(" "),t.hasPasswordless?[t.countAlternativeLogins?e("div",{staticClass:"alternative-logins"},[t.hasPasswordless?e("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"+t._s(t.t("core","Log in with a device"))+"\n\t\t\t\t\t\t")]):t._e()]):e("a",{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()],2)])],1):e("div",[e("transition",{attrs:{name:"fade",mode:"out-in"}},[e("NcNoteCard",{attrs:{type:"warning",title:t.t("core","Login form is disabled.")}},[t._v("\n\t\t\t\t"+t._s(t.t("core","Please contact your administrator."))+"\n\t\t\t")])],1)],1),t._v(" "),e("div",{staticClass:"alternative-logins",attrs:{id:"alternative-logins"}},t._l(t.alternativeLogins,(function(n,o){return e("NcButton",{key:o,class:[n.class],attrs:{type:"secondary",wide:!0,role:"link",href:n.href}},[t._v("\n\t\t\t"+t._s(n.name)+"\n\t\t")])})),1)])}),[],!1,null,null,null).exports,an={data:function(){return{OC:Bt}},methods:{t:_t.translate.bind(_t),n:_t.translatePlural.bind(_t)}};r.ZP.mixin(an),(new(r.ZP.extend(rn))).$mount("#login")},49665:function(t,e,n){"use strict";var o=n(87537),i=n.n(o),r=n(23645),a=n.n(r)()(i());a.push([t.id,".button-vue[data-v-756414a8]{margin-top:.5rem}","",{version:3,sources:["webpack://./core/src/components/login/LoginButton.vue"],names:[],mappings:"AACA,6BACC,gBAAA",sourcesContent:["\n.button-vue {\n\tmargin-top: .5rem;\n}\n"],sourceRoot:""}]),e.Z=a},3591:function(t,e,n){"use strict";var o=n(87537),i=n.n(o),r=n(23645),a=n.n(r)()(i());a.push([t.id,".login-form[data-v-5bd351bc]{text-align:left;font-size:1rem}.login-form__fieldset[data-v-5bd351bc]{width:100%;display:flex;flex-direction:column;gap:.5rem}.login-form__headline[data-v-5bd351bc]{text-align:center}","",{version:3,sources:["webpack://./core/src/components/login/LoginForm.vue"],names:[],mappings:"AACA,6BACC,eAAA,CACA,cAAA,CAEA,uCACC,UAAA,CACA,YAAA,CACA,qBAAA,CACA,SAAA,CAGD,uCACC,iBAAA",sourcesContent:["\n.login-form {\n\ttext-align: left;\n\tfont-size: 1rem;\n\n\t&__fieldset {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: .5rem;\n\t}\n\n\t&__headline {\n\t\ttext-align: center;\n\t}\n}\n"],sourceRoot:""}]),e.Z=a},43848:function(t,e,n){"use strict";var o=n(87537),i=n.n(o),r=n(23645),a=n.n(r)()(i());a.push([t.id,".body-login-container.update[data-v-20256748]{margin:15px 0}.body-login-container.update.form__message-box[data-v-20256748]{width:240px;margin:5px}","",{version:3,sources:["webpack://./core/src/components/login/PasswordLessLoginForm.vue"],names:[],mappings:"AACA,8CACC,aAAA,CAEA,gEACC,WAAA,CACA,UAAA",sourcesContent:["\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},28032:function(t,e,n){"use strict";var o=n(87537),i=n.n(o),r=n(23645),a=n.n(r)()(i());a.push([t.id,".login-form[data-v-27cabc60]{text-align:left;font-size:1rem}.login-form__fieldset[data-v-27cabc60]{width:100%;display:flex;flex-direction:column;gap:.5rem}.login-form__link[data-v-27cabc60]{display:block;font-weight:normal !important;padding-bottom:1rem;cursor:pointer;font-size:var(--default-font-size);text-align:center;padding:.5rem 1rem 1rem 1rem}","",{version:3,sources:["webpack://./core/src/components/login/ResetPassword.vue"],names:[],mappings:"AACA,6BACC,eAAA,CACA,cAAA,CAEA,uCACC,UAAA,CACA,YAAA,CACA,qBAAA,CACA,SAAA,CAGD,mCACC,aAAA,CACA,6BAAA,CACA,mBAAA,CACA,cAAA,CACA,kCAAA,CACA,iBAAA,CACA,4BAAA",sourcesContent:["\n.login-form {\n\ttext-align: left;\n\tfont-size: 1rem;\n\n\t&__fieldset {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: .5rem;\n\t}\n\n\t&__link {\n\t\tdisplay: block;\n\t\tfont-weight: normal !important;\n\t\tpadding-bottom: 1rem;\n\t\tcursor: pointer;\n\t\tfont-size: var(--default-font-size);\n\t\ttext-align: center;\n\t\tpadding: .5rem 1rem 1rem 1rem;\n\t}\n}\n"],sourceRoot:""}]),e.Z=a},20549:function(t,e,n){"use strict";var o=n(87537),i=n.n(o),r=n(23645),a=n.n(r)()(i());a.push([t.id,"body{font-size:var(--default-font-size)}.login-box{width:300px}.login-box__link{display:block;padding:1rem;font-size:var(--default-font-size);text-align:center;font-weight:normal !important}.fade-enter-active,.fade-leave-active{transition:opacity .3s}.fade-enter,.fade-leave-to{opacity:0}.alternative-logins{display:flex;flex-direction:column;gap:.75rem}.alternative-logins .button-vue{box-sizing:border-box}","",{version:3,sources:["webpack://./core/src/views/Login.vue"],names:[],mappings:"AACA,KACC,kCAAA,CAGD,WACC,WAAA,CAEA,iBACC,aAAA,CACA,YAAA,CACA,kCAAA,CACA,iBAAA,CACA,6BAAA,CAGF,sCACC,sBAAA,CAED,2BACC,SAAA,CAGD,oBACC,YAAA,CACA,qBAAA,CACA,UAAA,CAEA,gCACC,qBAAA",sourcesContent:["\nbody {\n\tfont-size: var(--default-font-size);\n}\n\n.login-box {\n\twidth: 300px;\n\n\t&__link {\n\t\tdisplay: block;\n\t\tpadding: 1rem;\n\t\tfont-size: var(--default-font-size);\n\t\ttext-align: center;\n\t\tfont-weight: normal !important;\n\t}\n}\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\n.alternative-logins {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 0.75rem;\n\n\t.button-vue {\n\t\tbox-sizing: border-box;\n\t}\n}\n"],sourceRoot:""}]),e.Z=a},74778:function(t,e,n){"use strict";var o=n(87537),i=n.n(o),r=n(23645),a=n.n(r)()(i());a.push([t.id,"\nfieldset[data-v-4dc21d74] {\n\ttext-align: center;\n}\ninput[type=submit][data-v-4dc21d74] {\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<LoginButton :loading=\"loading\"\n\t\t\t\t:value=\"t('core', 'Reset password')\"\n\t\t\t\t:value-loading=\"t('core', 'Resetting password')\" />\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'\nimport LoginButton from './LoginButton.vue'\n\nexport default {\n\tname: 'UpdatePassword',\n\tcomponents: {\n\t\tLoginButton,\n\t},\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},\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},10944:function(t,e,n){var o=n(40202);t.exports=(o.default||o).template({1:function(t,e,n,o,i){var r,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(r=a(n,"if").call(null!=e?e:t.nullContext||{},null!=(r=null!=e?a(e,"contact"):e)?a(r,"profileUrl"):r,{name:"if",hash:{},fn:t.program(2,i,0),inverse:t.program(5,i,0),data:i,loc:{start:{line:2,column:1},end:{line:10,column:8}}}))?r:""},2:function(t,e,n,o,i){var r,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(r=a(n,"if").call(null!=e?e:t.nullContext||{},null!=(r=null!=e?a(e,"contact"):e)?a(r,"profileTitle"):r,{name:"if",hash:{},fn:t.program(3,i,0),inverse:t.noop,data:i,loc:{start:{line:3,column:2},end:{line:7,column:9}}}))?r:""},3:function(t,e,n,o,i){var r,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!=(r=null!=e?l(e,"contact"):e)?l(r,"profileUrl"):r,e))+'">\n\t\t\t\t<img src="'+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"avatar"):r,e))+'&size=32" class="avatar" srcset="'+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"avatar"):r,e))+"&size=32 1x, "+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"avatar"):r,e))+"&size=64 2x, "+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"avatar"):r,e))+'&size=128 4x" alt="">\n\t\t\t</a>\n'},5:function(t,e,n,o,i){var r,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!=(r=null!=e?l(e,"contact"):e)?l(r,"avatar"):r,e))+'&size=32" class="avatar" srcset="'+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"avatar"):r,e))+"&size=32 1x, "+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"avatar"):r,e))+"&size=64 2x, "+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"avatar"):r,e))+'&size=128 4x" alt="">\n'},7:function(t,e,n,o,i){var r,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(r=a(n,"if").call(null!=e?e:t.nullContext||{},null!=(r=null!=e?a(e,"contact"):e)?a(r,"profileUrl"):r,{name:"if",hash:{},fn:t.program(8,i,0),inverse:t.program(11,i,0),data:i,loc:{start:{line:12,column:1},end:{line:20,column:8}}}))?r:""},8:function(t,e,n,o,i){var r,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(r=a(n,"if").call(null!=e?e:t.nullContext||{},null!=(r=null!=e?a(e,"contact"):e)?a(r,"profileTitle"):r,{name:"if",hash:{},fn:t.program(9,i,0),inverse:t.noop,data:i,loc:{start:{line:13,column:2},end:{line:17,column:9}}}))?r:""},9:function(t,e,n,o,i){var r,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!=(r=null!=e?a(e,"contact"):e)?a(r,"profileUrl"):r,e))+'">\n\t\t\t\t<div class="avatar"></div>\n\t\t\t</a>\n'},11:function(t,e,n,o,i){return'\t\t<div class="avatar"></div>\n'},13:function(t,e,n,o,i){var r,a=null!=e?e:t.nullContext||{},s=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return(null!=(r=s(n,"if").call(a,null!=(r=null!=e?s(e,"contact"):e)?s(r,"profileTitle"):r,{name:"if",hash:{},fn:t.program(14,i,0),inverse:t.noop,data:i,loc:{start:{line:23,column:1},end:{line:29,column:8}}}))?r:"")+(null!=(r=s(n,"if").call(a,null!=(r=null!=e?s(e,"contact"):e)?s(r,"topAction"):r,{name:"if",hash:{},fn:t.program(16,i,0),inverse:t.noop,data:i,loc:{start:{line:30,column:1},end:{line:34,column:8}}}))?r:"")},14:function(t,e,n,o,i){var r,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!=(r=null!=e?l(e,"contact"):e)?l(r,"profileUrl"):r,e))+'">\n\t\t\t<div class="full-name">'+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"fullName"):r,e))+'</div>\n\t\t\t<div class="last-message">'+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"lastMessage"):r,e))+'</div>\n\t\t\t<div class="email-address">'+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"emailAddresses"):r,e))+"</div>\n\t\t</a>\n"},16:function(t,e,n,o,i){var r,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="top-action" href="'+s(a(null!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"topAction"):r)?l(r,"hyperlink"):r,e))+'" title="'+s(a(null!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"topAction"):r)?l(r,"title"):r,e))+'" aria-label="'+s(a(null!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"topAction"):r)?l(r,"title"):r,e))+'">\n\t\t\t<img src="'+s(a(null!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"topAction"):r)?l(r,"icon"):r,e))+'" alt="'+s(a(null!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"topAction"):r)?l(r,"title"):r,e))+'">\n\t\t</a>\n'},18:function(t,e,n,o,i){var r,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(r=a(n,"if").call(null!=e?e:t.nullContext||{},null!=(r=null!=e?a(e,"contact"):e)?a(r,"topAction"):r,{name:"if",hash:{},fn:t.program(19,i,0),inverse:t.program(21,i,0),data:i,loc:{start:{line:35,column:0},end:{line:50,column:0}}}))?r:""},19:function(t,e,n,o,i){var r,a=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t<a class="body" href="'+s(a(null!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"topAction"):r)?l(r,"hyperlink"):r,e))+'">\n\t\t<div class="full-name">'+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"fullName"):r,e))+'</div>\n\t\t<div class="last-message">'+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"lastMessage"):r,e))+'</div>\n\t\t<div class="email-address">'+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"emailAddresses"):r,e))+'</div>\n\t</a>\n \t<a class="top-action" href="'+s(a(null!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"topAction"):r)?l(r,"hyperlink"):r,e))+'" title="'+s(a(null!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"topAction"):r)?l(r,"title"):r,e))+'">\n \t\t<img src="'+s(a(null!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"topAction"):r)?l(r,"icon"):r,e))+'" alt="'+s(a(null!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"topAction"):r)?l(r,"title"):r,e))+'">\n\t</a>\n'},21:function(t,e,n,o,i){var r,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!=(r=null!=e?l(e,"contact"):e)?l(r,"fullName"):r,e))+'</div>\n\t\t<div class="last-message">'+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"lastMessage"):r,e))+'</div>\n\t\t<div class="email-address">'+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"emailAddresses"):r,e))+"</div>\n\t</div>\n"},23:function(t,e,n,o,i){var r,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!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"secondAction"):r)?l(r,"hyperlink"):r,e))+'" aria-label="'+s(a(null!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"secondAction"):r)?l(r,"title"):r,e))+'" title="'+s(a(null!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"secondAction"):r)?l(r,"title"):r,e))+'">\n\t<img src="'+s(a(null!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"secondAction"):r)?l(r,"icon"):r,e))+'" alt="'+s(a(null!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"secondAction"):r)?l(r,"title"):r,e))+'">\n</a>\n'},25:function(t,e,n,o,i){var r,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t<button class="other-actions icon-more"></button>\n\t<div class="menu popovermenu">\n\t\t<ul>\n'+(null!=(r=a(n,"each").call(null!=e?e:t.nullContext||{},null!=(r=null!=e?a(e,"contact"):e)?a(r,"actions"):r,{name:"each",hash:{},fn:t.program(26,i,0),inverse:t.noop,data:i,loc:{start:{line:60,column:3},end:{line:67,column:12}}}))?r:"")+"\t\t</ul>\n\t</div>\n"},26:function(t,e,n,o,i){var r,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(r=null!=(r=u(n,"hyperlink")||(null!=e?u(e,"hyperlink"):e))?r:s)===l?r.call(a,{name:"hyperlink",hash:{},data:i,loc:{start:{line:62,column:13},end:{line:62,column:26}}}):r)+'">\n\t\t\t\t\t<img src="'+c(typeof(r=null!=(r=u(n,"icon")||(null!=e?u(e,"icon"):e))?r:s)===l?r.call(a,{name:"icon",hash:{},data:i,loc:{start:{line:63,column:15},end:{line:63,column:23}}}):r)+'" alt="">\n\t\t\t\t\t<span>'+c(typeof(r=null!=(r=u(n,"title")||(null!=e?u(e,"title"):e))?r:s)===l?r.call(a,{name:"title",hash:{},data:i,loc:{start:{line:64,column:11},end:{line:64,column:20}}}):r)+"</span>\n\t\t\t\t</a>\n\t\t\t</li>\n"},compiler:[8,">= 4.3.0"],main:function(t,e,n,o,i){var r,a=null!=e?e:t.nullContext||{},s=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return(null!=(r=s(n,"if").call(a,null!=(r=null!=e?s(e,"contact"):e)?s(r,"avatar"):r,{name:"if",hash:{},fn:t.program(1,i,0),inverse:t.program(7,i,0),data:i,loc:{start:{line:1,column:0},end:{line:21,column:7}}}))?r:"")+(null!=(r=s(n,"if").call(a,null!=(r=null!=e?s(e,"contact"):e)?s(r,"profileUrl"):r,{name:"if",hash:{},fn:t.program(13,i,0),inverse:t.program(18,i,0),data:i,loc:{start:{line:22,column:0},end:{line:50,column:7}}}))?r:"")+(null!=(r=s(n,"if").call(a,null!=(r=null!=e?s(e,"contact"):e)?s(r,"hasTwoActions"):r,{name:"if",hash:{},fn:t.program(23,i,0),inverse:t.noop,data:i,loc:{start:{line:51,column:0},end:{line:55,column:7}}}))?r:"")+(null!=(r=s(n,"if").call(a,null!=(r=null!=e?s(e,"contact"):e)?s(r,"hasManyActions"):r,{name:"if",hash:{},fn:t.program(25,i,0),inverse:t.noop,data:i,loc:{start:{line:56,column:0},end:{line:70,column:7}}}))?r:"")},useData:!0})},20421:function(t,e,n){var o=n(40202);t.exports=(o.default||o).template({compiler:[8,">= 4.3.0"],main:function(t,e,n,o,i){var r,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(r=null!=(r=a(n,"couldNotLoadText")||(null!=e?a(e,"couldNotLoadText"):e))?r:t.hooks.helperMissing)?r.call(null!=e?e:t.nullContext||{},{name:"couldNotLoadText",hash:{},data:i,loc:{start:{line:3,column:5},end:{line:3,column:25}}}):r)+"</h2>\n</div>\n"},useData:!0})},34083:function(t,e,n){var o=n(40202);t.exports=(o.default||o).template({1:function(t,e,n,o,i){var r,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(r=null!=(r=a(n,"noContactsFoundText")||(null!=e?a(e,"noContactsFoundText"):e))?r:t.hooks.helperMissing)?r.call(null!=e?e:t.nullContext||{},{name:"noContactsFoundText",hash:{},data:i,loc:{start:{line:4,column:5},end:{line:4,column:28}}}):r)+"</h2>\n</div>\n"},3:function(t,e,n,o,i){var r,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(r=null!=(r=u(n,"contactsAppURL")||(null!=e?u(e,"contactsAppURL"):e))?r:s)===l?r.call(a,{name:"contactsAppURL",hash:{},data:i,loc:{start:{line:9,column:29},end:{line:9,column:47}}}):r)+'">'+c(typeof(r=null!=(r=u(n,"showAllContactsText")||(null!=e?u(e,"showAllContactsText"):e))?r:s)===l?r.call(a,{name:"showAllContactsText",hash:{},data:i,loc:{start:{line:9,column:49},end:{line:9,column:72}}}):r)+"</a></div>\n"},5:function(t,e,n,o,i){var r,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(r=a(n,"if").call(null!=e?e:t.nullContext||{},null!=e?a(e,"canInstallApp"):e,{name:"if",hash:{},fn:t.program(6,i,0),inverse:t.noop,data:i,loc:{start:{line:10,column:0},end:{line:12,column:0}}}))?r:""},6:function(t,e,n,o,i){var r,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(r=null!=(r=u(n,"contactsAppMgmtURL")||(null!=e?u(e,"contactsAppMgmtURL"):e))?r:s)===l?r.call(a,{name:"contactsAppMgmtURL",hash:{},data:i,loc:{start:{line:11,column:29},end:{line:11,column:51}}}):r)+'">'+c(typeof(r=null!=(r=u(n,"contactsAppMgmtText")||(null!=e?u(e,"contactsAppMgmtText"):e))?r:s)===l?r.call(a,{name:"contactsAppMgmtText",hash:{},data:i,loc:{start:{line:11,column:53},end:{line:11,column:76}}}):r)+"</a></div>\n"},compiler:[8,">= 4.3.0"],main:function(t,e,n,o,i){var r,a=null!=e?e:t.nullContext||{},s=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return(null!=(r=s(n,"unless").call(a,null!=(r=null!=e?s(e,"contacts"):e)?s(r,"length"):r,{name:"unless",hash:{},fn:t.program(1,i,0),inverse:t.noop,data:i,loc:{start:{line:1,column:0},end:{line:6,column:11}}}))?r:"")+'<div id="contactsmenu-contacts"></div>\n'+(null!=(r=s(n,"if").call(a,null!=e?s(e,"contactsAppEnabled"):e,{name:"if",hash:{},fn:t.program(3,i,0),inverse:t.program(5,i,0),data:i,loc:{start:{line:8,column:0},end:{line:12,column:7}}}))?r:"")},useData:!0})},95386:function(t,e,n){var o=n(40202);t.exports=(o.default||o).template({compiler:[8,">= 4.3.0"],main:function(t,e,n,o,i){var r,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(r=null!=(r=a(n,"loadingText")||(null!=e?a(e,"loadingText"):e))?r:t.hooks.helperMissing)?r.call(null!=e?e:t.nullContext||{},{name:"loadingText",hash:{},data:i,loc:{start:{line:3,column:5},end:{line:3,column:20}}}):r)+"</h2>\n</div>\n"},useData:!0})},66115:function(t,e,n){var o=n(40202);t.exports=(o.default||o).template({compiler:[8,">= 4.3.0"],main:function(t,e,n,o,i){var r,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(r=null!=(r=u(n,"searchContactsText")||(null!=e?u(e,"searchContactsText"):e))?r:s)===l?r.call(a,{name:"searchContactsText",hash:{},data:i,loc:{start:{line:1,column:57},end:{line:1,column:79}}}):r)+'</label>\n<input id="contactsmenu-search" type="search" placeholder="'+c(typeof(r=null!=(r=u(n,"searchContactsText")||(null!=e?u(e,"searchContactsText"):e))?r:s)===l?r.call(a,{name:"searchContactsText",hash:{},data:i,loc:{start:{line:2,column:59},end:{line:2,column:81}}}):r)+'" value="'+c(typeof(r=null!=(r=u(n,"searchTerm")||(null!=e?u(e,"searchTerm"):e))?r:s)===l?r.call(a,{name:"searchTerm",hash:{},data:i,loc:{start:{line:2,column:90},end:{line:2,column:104}}}):r)+'">\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 i(t){var e=r(t);return n(e)}function r(t){if(!n.o(o,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return o[t]}i.keys=function(){return Object.keys(o)},i.resolve=r,t.exports=i,i.id=46700}},i={};function r(t){var e=i[t];if(void 0!==e)return e.exports;var n=i[t]={id:t,loaded:!1,exports:{}};return o[t].call(n.exports,n,n.exports,r),n.loaded=!0,n.exports}r.m=o,e=[],r.O=function(t,n,o,i){if(!n){var a=1/0;for(u=0;u<e.length;u++){n=e[u][0],o=e[u][1],i=e[u][2];for(var s=!0,l=0;l<n.length;l++)(!1&i||a>=i)&&Object.keys(r.O).every((function(t){return r.O[t](n[l])}))?n.splice(l--,1):(s=!1,i<a&&(a=i));if(s){e.splice(u--,1);var c=o();void 0!==c&&(t=c)}}return t}i=i||0;for(var u=e.length;u>0&&e[u-1][2]>i;u--)e[u]=e[u-1];e[u]=[n,o,i]},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,{a:e}),e},r.d=function(t,e){for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},r.j=4577,function(){r.b=document.baseURI||self.location.href;var t={4577:0};r.O.j=function(e){return 0===t[e]};var e=function(e,n){var o,i,a=n[0],s=n[1],l=n[2],c=0;if(a.some((function(e){return 0!==t[e]}))){for(o in s)r.o(s,o)&&(r.m[o]=s[o]);if(l)var u=l(r)}for(e&&e(n);c<a.length;c++)i=a[c],r.o(t,i)&&t[i]&&t[i][0](),t[i]=0;return r.O(u)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))}(),r.nc=void 0;var a=r.O(void 0,[7874],(function(){return r(39977)}));a=r.O(a)}(); -//# sourceMappingURL=core-login.js.map?v=84ef45f80b03f8681f46
\ No newline at end of file +!function(){var e,o={39977:function(e,o,i){"use strict";var r=i(20144),a=i(78595),s=i(19755),l=i.n(s),c=i(79753),u=i(25108),d={},f=[],p=i(18181),h=i(64024),m=i(25108),g={updatableNotification:null,getDefaultNotificationFunction:null,setDefault:function(t){this.getDefaultNotificationFunction=t},hide:function(t,e){p.ZP.isFunction(t)&&(e=t,t=void 0),t?(t.each((function(){l()(this)[0].toastify?l()(this)[0].toastify.hideToast():m.error("cannot hide toast because object is not set"),this===this.updatableNotification&&(this.updatableNotification=null)})),e&&e.call(),this.getDefaultNotificationFunction&&this.getDefaultNotificationFunction()):m.error("Missing argument $row in OC.Notification.hide() call, caller needs to be adjusted to only dismiss its own notification")},showHtml:function(t,e){(e=e||{}).isHTML=!0,e.timeout=e.timeout?e.timeout:h.Rl;var n=(0,h.PV)(t,e);return n.toastElement.toastify=n,l()(n.toastElement)},show:function(t,e){(e=e||{}).timeout=e.timeout?e.timeout:h.Rl;var n=(0,h.PV)(function(t){return t.toString().split("&").join("&").split("<").join("<").split(">").join(">").split('"').join(""").split("'").join("'")}(t),e);return n.toastElement.toastify=n,l()(n.toastElement)},showUpdate:function(t){return this.updatableNotification&&this.updatableNotification.hideToast(),this.updatableNotification=(0,h.PV)(t,{timeout:h.Rl}),this.updatableNotification.toastElement.toastify=this.updatableNotification,l()(this.updatableNotification.toastElement)},showTemporary:function(t,e){(e=e||{}).timeout=e.timeout||h.TN;var n=(0,h.PV)(t,e);return n.toastElement.toastify=n,l()(n.toastElement)},isHidden:function(){return!l()("#content").find(".toastify").length}},v=p.ZP.throttle((function(){g.showTemporary(t("core","Connection to server lost"))}),7e3,{trailing:!1}),y={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 w(t,e,n){"post"!==t&&"delete"!==t||!Bt.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})):Bt.PasswordConfirmation.requirePasswordConfirmation(_.bind(w,this,t,e,n))}var b=window.oc_appconfig||{},P={getValue:function(t,e,n,o){!function(t,e,n,o){(o=o||{}).data={defaultValue:n},w("get","/"+t+"/"+e,o)}(t,e,n,{success:o})},setValue:function(t,e,n){!function(t,e,n,o){(o=o||{}).data={value:n},w("post","/"+t+"/"+e,o)}(t,e,n)},getApps:function(t){!function(t){w("get","",t)}({success:t})},getKeys:function(t,e){!function(t,e){w("get","/"+t,e)}(t,{success:e})},deleteKey:function(t,e){!function(t,e,n){w("delete","/"+t+"/"+e,void 0)}(t,e)}},C=i(25108),A=void 0!==window._oc_appswebroots&&window._oc_appswebroots,k=i(72316),x=i.n(k),O=i(76591),T=i(25108),j={create:"POST",update:"PROPPATCH",patch:"PROPPATCH",delete:"DELETE",read:"PROPFIND"};function E(t,e){if(p.ZP.isArray(t))return p.ZP.map(t,(function(t){return E(t,e)}));var n={href:t.href};return p.ZP.each(t.propStat,(function(t){if("HTTP/1.1 200 OK"===t.status)for(var o in t.properties){var i=o;o in e&&(i=e[o]),n[i]=t.properties[o]}})),n.id||(n.id=S(n.href)),n}function S(t){var e=t.indexOf("?");e>0&&(t=t.substr(0,e));var n,o=t.split("/");do{n=o[o.length-1],o.pop()}while(!n&&o.length>0);return n}function L(t){return t>=200&&t<=299}function N(t,e,n,o){return t.propPatch(e.url,function(t,e){var n,o={};for(n in t){var i=e[n],r=t[n];i||(T.warn('No matching DAV property for property "'+n),i=n),(p.ZP.isBoolean(r)||p.ZP.isNumber(r))&&(r=""+r),o[i]=r}return o}(n.changed,e.davProperties),o).then((function(t){L(t.status)?p.ZP.isFunction(e.success)&&e.success(n.toJSON()):p.ZP.isFunction(e.error)&&e.error(t)}))}var I=x().noConflict();Object.assign(I,{davCall:function(t,e){var n=new O.dav.Client({baseUrl:t.url,xmlNamespaces:p.ZP.extend({"DAV:":"d","http://owncloud.org/ns":"oc"},t.xmlNamespaces||{})});n.resolveUrl=function(){return t.url};var o=p.ZP.extend({"X-Requested-With":"XMLHttpRequest",requesttoken:OC.requestToken},t.headers);return"PROPFIND"===t.type?function(t,e,n,o){return t.propFind(e.url,p.ZP.values(e.davProperties)||[],e.depth,o).then((function(t){if(L(t.status)){if(p.ZP.isFunction(e.success)){var n=p.ZP.invert(e.davProperties),o=E(t.body,n);e.depth>0&&o.shift(),e.success(o)}}else p.ZP.isFunction(e.error)&&e.error(t)}))}(n,t,0,o):"PROPPATCH"===t.type?N(n,t,e,o):"MKCOL"===t.type?function(t,e,n,o){return t.request(e.type,e.url,o,null).then((function(i){L(i.status)?N(t,e,n,o):p.ZP.isFunction(e.error)&&e.error(i)}))}(n,t,e,o):function(t,e,n,o){return o["Content-Type"]="application/json",t.request(e.type,e.url,o,e.data).then((function(t){if(L(t.status)){if(p.ZP.isFunction(e.success)){if("PUT"===e.type||"POST"===e.type||"MKCOL"===e.type){var o=t.body||n.toJSON(),i=t.xhr.getResponseHeader("Content-Location");return"POST"===e.type&&i&&(o.id=S(i)),void e.success(o)}if(207===t.status){var r=p.ZP.invert(e.davProperties);e.success(E(t.body,r))}else e.success(t.body)}}else p.ZP.isFunction(e.error)&&e.error(t)}))}(n,t,e,o)},davSync:function(t){return function(e,n,o){var i={type:j[e]||e},r=n instanceof t.Collection;if("update"===e&&(n.hasInnerCollection?i.type="MKCOL":(n.usePUT||n.collection&&n.collection.usePUT)&&(i.type="PUT")),o.url||(i.url=p.ZP.result(n,"url")||function(){throw new Error('A "url" property or function must be specified')}()),null!=o.data||!n||"create"!==e&&"update"!==e&&"patch"!==e||(i.data=JSON.stringify(o.attrs||n.toJSON(o))),"PROPFIND"!==i.type&&(i.processData=!1),"PROPFIND"===i.type||"PROPPATCH"===i.type){var a=n.davProperties;!a&&n.model&&(a=n.model.prototype.davProperties),a&&(p.ZP.isFunction(a)?i.davProperties=a.call(n):i.davProperties=a),i.davProperties=p.ZP.extend(i.davProperties||{},o.davProperties),p.ZP.isUndefined(o.depth)&&(o.depth=r?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.ZP.extend(i,o),n);return n.trigger("request",n,l,o),l}}(I)});var U=I,$=i(65358),R=window._oc_config||{},F=i(25108),M=k.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)}}),B=k.Collection.extend({model:M}),z=k.View.extend({_collection:void 0,_subViews:[],tagName:"ul",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 D({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)}))}}),D=k.View.extend({className:"contact",tagName:"li",_template:void 0,_model:void 0,_actionMenuShown:!1,events:{"click .icon-more":"_onToggleActionsMenu"},contactTemplate:i(10944),template:function(t){return this.contactTemplate(t)},initialize:function(t){this._model=t.model,this.on("parent:toggle:actionmenu",this._onOtherActionMenuOpened,this)},render:function(){return this.$el.html(this.template({contact:this._model.toJSON()})),this.delegateEvents(),this.$("div.avatar").imageplaceholder(this._model.get("fullName")),this},_onToggleActionsMenu:function(){this._actionMenuShown=!this._actionMenuShown,this._actionMenuShown?this.$(".menu").show():this.$(".menu").hide(),this.trigger("toggle:actionmenu",this.$el)},_onOtherActionMenuOpened:function(t){this.$el.is(t)||(this._actionMenuShown=!1,this.$(".menu").hide())}}),Z=k.View.extend({_loadingTemplate:void 0,_errorTemplate:void 0,_contentTemplate:void 0,_contactsTemplate:void 0,_contacts:void 0,_searchTerm:"",events:{"input #contactsmenu-search":"_onSearch"},templates:{loading:i(95386),error:i(20421),menu:i(66115),list:i(34083)},_onSearch:p.ZP.debounce((function(t){var e=this.$("#contactsmenu-search").val();e!==this._searchTerm&&(this.trigger("search",this.$("#contactsmenu-search").val()),this._searchTerm=e)}),700),loadingTemplate:function(t){return this.templates.loading(t)},errorTemplate:function(e){return this.templates.error(p.ZP.extend({couldNotLoadText:t("core","Could not load your contacts")},e))},contentTemplate:function(e){return this.templates.menu(p.ZP.extend({searchContactsText:t("core","Search contacts …")},e))},contactsTemplate:function(e){return this.templates.list(p.ZP.extend({noContactsFoundText:t("core","No contacts found"),showAllContactsText:t("core","Show all contacts …"),contactsAppMgmtText:t("core","Install the Contacts app")},e))},initialize:function(t){this.options=t},showLoading:function(t){this.render(),this._contacts=void 0,this.$(".content").html(this.loadingTemplate({loadingText:t}))},showError:function(){this.render(),this._contacts=void 0,this.$(".content").html(this.errorTemplate())},showContacts:function(t,e){this._contacts=t.contacts,this.render({contacts:t.contacts});var n=new z({collection:t.contacts});n.render(),this.$(".content").html(this.contactsTemplate({contacts:t.contacts,searchTerm:e,contactsAppEnabled:t.contactsAppEnabled,contactsAppURL:Bt.generateUrl("/apps/contacts"),canInstallApp:Bt.isUserAdmin(),contactsAppMgmtURL:Bt.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}}),H=function(t){this.initialize(t)};H.prototype={$el:void 0,_view:void 0,_contactsPromise:void 0,initialize:function(t){this.$el=l()(t.el),this._view=new Z({el:this.$el}),this._view.on("search",(function(t){this.loadContacts(t)}),this)},_getContacts:function(t){var e=Bt.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.ZP.isUndefined(e)||""===e?n._view.showLoading(t("core","Loading your contacts …")):n._view.showLoading(t("core","Looking for {term} …",{term:e})),n._contactsPromise.then((function(t){t.contacts=new B(t.contacts),n._view.showContacts(t,e)}),(function(t){n._view.showError(),F.error("There was an error loading your contacts",t)})).then((function(){delete n._contactsPromise})).catch(F.error.bind(this))}};var Y=H,q=document.getElementsByTagName("head")[0].getAttribute("data-user"),K=document.getElementsByTagName("head")[0].getAttribute("data-user-displayname"),V=void 0!==q&&q,G=i(25108);function W(t){return W="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},W(t)}function J(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,(void 0,i=function(t,e){if("object"!==W(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var o=n.call(t,"string");if("object"!==W(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(o.key),"symbol"===W(i)?i:String(i)),o)}var i}function Q(t,e,n){return e&&J(t.prototype,e),n&&J(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}var X={Search:Q((function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),G.warn("OCA.Search is deprecated. Please use the unified search API instead")}))},tt=function(t){return"click"===t.type||"keydown"===t.type&&"Enter"===t.key},et=i(25108);function nt(t,e,n,o,i,r,a){try{var s=t[r](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(o,i)}function ot(t){return function(){var e=this,n=arguments;return new Promise((function(o,i){var r=t.apply(e,n);function a(t){nt(r,o,i,a,s,"next",t)}function s(t){nt(r,o,i,a,s,"throw",t)}a(void 0)}))}}function it(t){return it="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},it(t)}var rt,at,st,lt,ct={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",ct.OK_BUTTON,n,o)},info:function(t,e,n,o){this.message(t,e,"info",ct.OK_BUTTON,n,o)},confirm:function(t,e,n,o){return this.message(t,e,"notice",ct.YES_NO_BUTTONS,n,o)},confirmDestructive:function(t,e,n,o,i){return this.message(t,e,"none",n,o,void 0===i||i)},confirmHtml:function(t,e,n,o){return this.message(t,e,"notice",ct.YES_NO_BUTTONS,n,o,!0)},prompt:function(e,n,o,i,r,a){return l().when(this._getMessageTemplate()).then((function(s){var c="oc-dialog-"+ct.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",r);var h=l()("<label/>").attr("for",c+"-input").text(r+": ");d.append(h),d.append(f),void 0===i&&(i=!1),l()("body").append(d),void 0!==o&&(o=p.ZP.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:i,buttons:m,close:function(){void 0!==o&&o(!1,f.val())}}),f.focus(),ct.dialogsCounter++}))},filepicker:function(e,n,o,i,r,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=X.Sharing&&X.Sharing.PublicApp&&X.Sharing.PublicApp.fileList?X.Sharing.PublicApp.fileList.filesClient:Bt.Files.getClient(),this.filelist=null,s=s||"",c=Object.assign({allowDirectoryChooser:!1},c),l().when(this._getFilePickerTemplate()).then((function(p){var h,m;u.filepicker.loading=!1,u.$filePicker&&u.$filePicker.ocdialog("close"),null==i&&(i=[]),"string"==typeof i&&(i=[i]),u.$filePicker=p.octemplate({dialog_name:"oc-dialog-filepicker-content",title:e,emptytext:d,newtext:f,nameCol:t("core","Name"),sizeCol:t("core","Size"),modifiedCol:t("core","Modified")}).data("path",s).data("multiselect",o).data("mimetype",i).data("allowDirectoryChooser",c.allowDirectoryChooser),"function"==typeof c.filter&&u.$filePicker.data("filter",c.filter),void 0===r&&(r=!1),void 0===o&&(o=!1),l()(null!==(h=null===(m=c)||void 0===m?void 0:m.target)&&void 0!==h?h:"body").prepend(u.$filePicker),u.$showGridView=l()("button#picker-showgridview"),u.$showGridView.on("click keydown",(function(t){tt(t)&&u._onGridviewChange()})),u._getGridSettings();var g=u.$filePicker.find(".actions.creatable .button-add");a!==u.FILEPICKER_TYPE_CHOOSE||c.allowDirectoryChooser||u.$filePicker.find(".actions.creatable").hide(),g.on("focus",(function(){u.$filePicker.ocdialog("setEnterCallback",(function(t){t.stopImmediatePropagation(),t.preventDefault(),g.click()}))})),g.on("blur",(function(){u.$filePicker.ocdialog("unsetEnterCallback")})),Bt.registerMenu(g,u.$filePicker.find(".menu"),(function(){y.tooltip("hide"),y.focus(),u.$filePicker.ocdialog("setEnterCallback",(function(t){t.stopImmediatePropagation(),t.preventDefault(),u.$filePicker.submit()}));var t=y.val(),e=t.lastIndexOf(".");-1===e&&(e=t.length),y.selectRange(0,e)}));var v=u.$filePicker.find(".filenameform"),y=v.find("input[type='text']"),w=v.find("input[type='submit']");y.on("keydown",(function(t){tt(t)&&(t.stopImmediatePropagation(),t.preventDefault(),v.submit())})),w.on("click",(function(t){t.stopImmediatePropagation(),t.preventDefault(),v.submit()}));v.on("submit",(function(e){if(e.stopPropagation(),e.preventDefault(),function(){var e=y.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(Bt.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){y.attr("title",t),y.tooltip({placement:"right",trigger:"manual",container:".newFolderMenu"}),y.tooltip("_fixTitle"),y.tooltip("show"),y.addClass("error")}return!1}()){var n=y.val();u.filepicker.filesClient.createDirectory(u.$filePicker.data("path")+"/"+n).always((function(t){u._fillFilePicker(u.$filePicker.data("path")+"/"+n,a)})),Bt.hideMenus(),u.$filePicker.ocdialog("unsetEnterCallback"),u.$filePicker.click(),y.val(f)}})),y.on("input",(function(t){y.tooltip("hide")})),u.$filePicker.ready((function(){u.$fileListHeader=u.$filePicker.find(".filelist thead tr"),u.$filelist=u.$filePicker.find(".filelist tbody"),u.$filelistContainer=u.$filePicker.find(".filelist-container"),u.$dirTree=u.$filePicker.find(".dirtree"),u.$dirTree.on("click keydown","div:not(:last-child)",u,(function(t){tt(t)&&u._handleTreeListSelect(t,a)})),u.$filelist.on("click keydown","tr",(function(t){tt(t)&&u._handlePickerClick(t,l()(this),a)})),u.$fileListHeader.on("click keydown","a",(function(t){if(tt(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,a)}})),u._fillFilePicker(s,a)}));var b=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 i=u.$filelist.find("tr.filepicker_element_selected").data("entryname");i&&(e+="/"+i)}n(e,t),u.$filePicker.ocdialog("close")}},P=[];a===ct.FILEPICKER_TYPE_CHOOSE?P.push({text:t("core","Choose"),click:function(){b(ct.FILEPICKER_TYPE_CHOOSE)},defaultButton:!0}):a===ct.FILEPICKER_TYPE_CUSTOM?c.buttons.forEach((function(t){P.push({text:t.text,click:function(){b(t.type)},defaultButton:t.defaultButton})})):(a!==ct.FILEPICKER_TYPE_COPY&&a!==ct.FILEPICKER_TYPE_COPY_MOVE||P.push({text:t("core","Copy"),click:function(){b(ct.FILEPICKER_TYPE_COPY)},defaultButton:!1}),a!==ct.FILEPICKER_TYPE_MOVE&&a!==ct.FILEPICKER_TYPE_COPY_MOVE||P.push({text:t("core","Move"),click:function(){b(ct.FILEPICKER_TYPE_MOVE)},defaultButton:!0})),u.$filePicker.ocdialog({closeOnEscape:!0,width:600,height:500,modal:r,buttons:P,style:{buttons:"aside"},close:function(){try{l()(this).ocdialog("destroy").remove()}catch(t){}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,o,i,r,a,s){return l().when(this._getMessageTemplate()).then((function(c){var u="oc-dialog-"+ct.dialogsCounter+"-content",d="#"+u,f=c.octemplate({dialog_name:u,title:n,message:e,type:o},s?{escapeFunction:""}:{});void 0===a&&(a=!1),l()("body").append(f);var p=[];switch(i){case ct.YES_NO_BUTTONS:p=[{text:t("core","No"),click:function(){void 0!==r&&r(!1),l()(d).ocdialog("close")}},{text:t("core","Yes"),click:function(){void 0!==r&&r(!0),l()(d).ocdialog("close")},defaultButton:!0}];break;case ct.OK_BUTTON:p[0]={text:t("core","OK"),click:function(){l()(d).ocdialog("close"),void 0!==r&&r()},defaultButton:!0};break;default:"object"===it(i)&&i.type===ct.YES_NO_BUTTONS&&(p=[{text:i.cancel||t("core","No"),click:function(){void 0!==r&&r(!1),l()(d).ocdialog("close")}},{text:i.confirm||t("core","Yes"),click:function(){void 0!==r&&r(!0),l()(d).ocdialog("close")},defaultButton:!0,classes:i.confirmClasses}])}l()(d).ocdialog({closeOnEscape:!0,closeCallback:function(){r&&r(!1)},modal:a,buttons:p}),ct.dialogsCounter++})).fail((function(o,i){0===o?alert(n+": "+e):alert(t("core","Error loading message template: {error}",{error:i}))}))},_fileexistsshown:!1,fileexists:function(e,o,i,r){var a=this,s=new(l().Deferred),c=function(t,e,n,o,i){o=Math.round(o),i=Math.round(i);for(var r=t.getContext("2d").getImageData(0,0,e,n),a=t.getContext("2d").getImageData(0,0,o,i),s=r.data,l=a.data,c=e/o,u=n/i,d=Math.ceil(c/2),f=Math.ceil(u/2),p=0;p<i;p++)for(var h=0;h<o;h++){for(var m=4*(h+p*o),g=0,v=0,y=0,w=0,b=0,P=0,C=0,_=(p+.5)*u,A=Math.floor(p*u);A<(p+1)*u;A++)for(var k=Math.abs(_-(A+.5))/f,x=(h+.5)*c,O=k*k,T=Math.floor(h*c);T<(h+1)*c;T++){var j=Math.abs(x-(T+.5))/d,E=Math.sqrt(O+j*j);E>=-1&&E<=1&&(g=2*E*E*E-3*E*E+1)>0&&(C+=g*s[3+(j=4*(T+A*e))],y+=g,s[j+3]<255&&(g=g*s[j+3]/250),w+=g*s[j],b+=g*s[j+1],P+=g*s[j+2],v+=g)}l[m]=w/v,l[m+1]=b/v,l[m+2]=P/v,l[m+3]=C/y}t.getContext("2d").clearRect(0,0,Math.max(e,o),Math.max(n,i)),t.width=o,t.height=i,t.getContext("2d").putImageData(a,0,0)},u=function(n,o,i){var r=n.find(".template").clone().removeClass("template").addClass("conflict"),a=r.find(".original"),s=r.find(".replacement");r.data("data",e),r.find(".filename").text(o.name),a.find(".size").text(Bt.Util.humanFileSize(o.size)),a.find(".mtime").text(Bt.Util.formatDate(o.mtime)),i.size&&i.lastModified&&(s.find(".size").text(Bt.Util.humanFileSize(i.size)),s.find(".mtime").text(Bt.Util.formatDate(i.lastModified)));var u=o.directory+"/"+o.name,d={file:u,x:96,y:96,c:o.etag,forceIcon:0},f=Files.generatePreviewUrl(d);f=f.replace(/'/g,"%27"),a.find(".icon").css({"background-image":"url('"+f+"')"}),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),i=new Image;i.src=o,i.onload=function(){var t,n,o,r,a,s,l,u=(t=i,a=document.createElement("canvas"),s=t.width,l=t.height,s>l?(o=0,n=(s-l)/2):(o=(l-s)/2,n=0),r=Math.min(s,l),a.width=r,a.height=r,a.getContext("2d").drawImage(t,n,o,r,r,0,0,r,r),c(a,r,r,96,96),a.toDataURL("image/png",.7));e.resolve(u)}},o.readAsArrayBuffer(t)}else e.reject();return e}(i).then((function(t){s.find(".icon").css("background-image","url("+t+")")}),(function(){u=Bt.MimeType.getIconUrl(i.type),s.find(".icon").css("background-image","url("+u+")")}));var p=n.find(".conflict").length;a.find("input:checkbox").attr("id","checkbox_original_"+p),s.find("input:checkbox").attr("id","checkbox_replacement_"+p),n.append(r),i.lastModified>o.mtime?s.find(".mtime").css("font-weight","bold"):i.lastModified<o.mtime&&a.find(".mtime").css("font-weight","bold"),i.size&&i.size>o.size?s.find(".size").css("font-weight","bold"):i.size&&i.size<o.size&&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",f="#"+d;if(this._fileexistsshown){var p=l()(f+" .conflicts");u(p,o,i);var h=l()(f+" .conflict").length,m=n("core","{count} file conflict","{count} file conflicts",h,{count:h});l()(f).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"),p=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(p),o&&i){var h=p.find(".conflicts");u(h,o,i)}var m=[{text:t("core","Cancel"),classes:"cancel",click:function(){void 0!==r.onCancel&&r.onCancel(e),l()(f).ocdialog("close")}},{text:t("core","Continue"),classes:"continue",click:function(){void 0!==r.onContinue&&r.onContinue(l()(f+" .conflict")),l()(f).ocdialog("close")}}];l()(f).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()(f).css("height","auto");var g=p.closest(".oc-dialog").find("button.continue");function v(){var t=p.find(".conflicts .checkbox:checked").length;g.prop("disabled",0===t)}g.prop("disabled",!0),l()(f).find(".allnewfiles").on("click",(function(){l()(f).find('.conflict .replacement input[type="checkbox"]').prop("checked",l()(this).prop("checked"))})),l()(f).find(".allexistingfiles").on("click",(function(){l()(f).find('.conflict .original:not(.readonly) input[type="checkbox"]').prop("checked",l()(this).prop("checked"))})),l()(f).find(".conflicts").on("click",".replacement,.original:not(.readonly)",(function(){var t=l()(this).find('input[type="checkbox"]');t.prop("checked",!t.prop("checked"))})),l()(f).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()(f).on("click",".replacement,.allnewfiles",(function(){var e=l()(f).find('.conflict .replacement input[type="checkbox"]:checked').length;e===l()(f+" .conflict").length?(l()(f).find(".allnewfiles").prop("checked",!0),l()(f).find(".allnewfiles + .count").text(t("core","(all selected)"))):e>0?(l()(f).find(".allnewfiles").prop("checked",!1),l()(f).find(".allnewfiles + .count").text(t("core","({count} selected)",{count:e}))):(l()(f).find(".allnewfiles").prop("checked",!1),l()(f).find(".allnewfiles + .count").text("")),v()})),l()(f).on("click",".original,.allexistingfiles",(function(){var e=l()(f).find('.conflict .original input[type="checkbox"]:checked').length;e===l()(f+" .conflict").length?(l()(f).find(".allexistingfiles").prop("checked",!0),l()(f).find(".allexistingfiles + .count").text(t("core","(all selected)"))):e>0?(l()(f).find(".allexistingfiles").prop("checked",!1),l()(f).find(".allexistingfiles + .count").text(t("core","({count} selected)",{count:e}))):(l()(f).find(".allexistingfiles").prop("checked",!1),l()(f).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 e=this;l().get(Bt.generateUrl("/apps/files/api/v1/showgridview"),(function(n){e.$showGridView.removeClass("icon-toggle-filelist icon-toggle-pictures").addClass(n.gridview?"icon-toggle-filelist":"icon-toggle-pictures"),e.$showGridView.attr("aria-label",n.gridview?t("files","Show list view"):t("files","Show grid view")),l()(".list-container").toggleClass("view-grid",n.gridview)}))},_onGridviewChange:function(){var e=this.$showGridView.hasClass("icon-toggle-filelist");Bt.currentUser&&l().post(Bt.generateUrl("/apps/files/api/v1/showgridview"),{show:!e}),this.$showGridView.removeClass("icon-toggle-filelist icon-toggle-pictures").addClass(e?"icon-toggle-pictures":"icon-toggle-filelist"),this.$showGridView.attr("aria-label",e?t("files","Show grid view"):t("files","Show list view")),this.$filePicker.find(".list-container").toggleClass("view-grid",!e)},_getFilePickerTemplate:function(){var t=l().Deferred();if(this.$filePickerTemplate)t.resolve(this.$filePickerTemplate);else{var e=this;l().get(Bt.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(Bt.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(Bt.filePath("files","templates","fileexists.html"),(function(n){e.$fileexistsTemplate=l()(n),t.resolve(e.$fileexistsTemplate)})).fail((function(){t.reject()}))}return t.promise()},_fillFilePicker:(rt=ot(regeneratorRuntime.mark((function e(n,o){var i,r,a,s,c,u,d,f;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=this,this.$filelist.empty(),this.$filePicker.find(".emptycontent").hide(),this.$filelistContainer.addClass("icon-loading"),this.$filePicker.data("path",n),r=this.$filePicker.data("mimetype"),a=this.$filePicker.data("filter"),"string"==typeof r&&(r=[r]),i.$fileListHeader.find(".sort-indicator").addClass("hidden").removeClass("icon-triangle-n").removeClass("icon-triangle-s"),i.$fileListHeader.find("[data-sort="+i.filepicker.sortField+"] .sort-indicator").removeClass("hidden"),"asc"===i.filepicker.sortOrder?i.$fileListHeader.find("[data-sort="+i.filepicker.sortField+"] .sort-indicator").addClass("icon-triangle-n"):i.$fileListHeader.find("[data-sort="+i.filepicker.sortField+"] .sort-indicator").addClass("icon-triangle-s"),s=function(){var t=ot(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",i.filepicker.filesClient.getFolderContents(e).then((function(t,e){return e})));case 1:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),e.prev=12,e.next=15,s(n);case 15:c=e.sent,e.next=26;break;case 18:return e.prev=18,e.t0=e.catch(12),et.error("Requested path does not exists, falling back to root"),e.next=23,s("/");case 23:c=e.sent,this.$filePicker.data("path","/"),this._changeButtonsText(o,"");case 26:i.filelist=c,r&&r.length>0&&-1===r.indexOf("*")&&(c=c.filter((function(t){return"dir"===t.type||-1!==r.indexOf(t.mimetype)}))),a&&(c=c.filter(a)),null===(u=document.getElementById("showHiddenFiles"))||"1"===u.value||(c=c.filter((function(t){return!t.name.startsWith(".")}))),f=(d={name:function(t,e){return"dir"===t.type&&"dir"!==e.type?-1:"dir"!==t.type&&"dir"===e.type?1:Bt.Util.naturalSortCompare(t.name,e.name)},size:function(t,e){return t.size-e.size},mtime:function(t,e){return t.mtime-e.mtime}})[i.filepicker.sortField]||d.name,c=c.sort((function(t,e){var n=function(t){return t.tags&&t.tags.indexOf(Bt.TAG_FAVORITE)>=0};return n(t)&&!n(e)?-1:!n(t)&&n(e)?1:"asc"===i.filepicker.sortOrder?f(t,e):-f(t,e)})),i._fillSlug(),0===c.length?(i.$filePicker.find(".emptycontent").show(),i.$fileListHeader.hide()):(i.$filePicker.find(".emptycontent").hide(),i.$fileListHeader.show()),i.$filelist.empty(),l().each(c,(function(e,o){var r,a;if(o.isEncrypted&&"httpd/unix-directory"===o.mimetype?o.icon=Bt.MimeType.getIconUrl("dir-encrypted"):o.icon=Bt.MimeType.getIconUrl(o.mimetype),void 0!==o.size&&o.size>=0?(r=Bt.Util.humanFileSize(parseInt(o.size,10),!0),a=Math.round(160-Math.pow(o.size/1048576,2))):(r=t("files","Pending"),a=80),o.name.length>=10)var s=Math.min(Math.floor(o.name.length/2),10),c=o.name.substr(0,o.name.length-s),u=o.name.substr(o.name.length-s);else c=o.name,u="";var d=i.$listTmpl.octemplate({type:o.type,dir:n,filename:o.name,filename1:c,filename2:u,date:Bt.Util.relativeModifiedDate(o.mtime),size:r,sizeColor:a,icon:o.icon});if("file"===o.type){var f={file:n+"/"+o.name,x:100,y:100},p=new Image,h=Bt.generateUrl("/core/preview.png?")+l().param(f);p.onload=function(){p.width>5&&d.find("td.filename").attr("style","background-image:url("+h+")")},p.src=h}i.$filelist.append(d)})),i.$filelistContainer.removeClass("icon-loading");case 40:case"end":return e.stop()}}),e,this,[[12,18]])}))),function(t,e){return rt.apply(this,arguments)}),_fillSlug:function(){var e=this.$dirTree.find(".actions.creatable").detach();this.$dirTree.empty();var n=this;n.$dirTree.append(e);var o=this.$filePicker.data("path"),i=l()('<div data-dir="{dir}" tabindex="0"><a>{name}</a></div>').addClass("crumb");if(o){var r=o.split("/");l().each(r,(function(t,e){if(""===(e=r.pop()))return!1;n.$dirTree.prepend(i.octemplate({dir:r.join("/")+"/"+e,name:e}))}))}i.octemplate({dir:"",name:t("core","Home")},{escapeFunction:null}).prependTo(this.$dirTree)},_handleTreeListSelect:function(t,e){var n=t.data,o=l()(t.target).closest(".crumb").data("dir");n._fillFilePicker(o,e);var i=t.target.closest(".oc-dialog"),r=l()(".primary",i);this._changeButtonsText(e,o.split(/[/]+/).pop()),-1!==this.$filePicker.data("mimetype").indexOf("httpd/unix-directory")||this.$filePicker.data("allowDirectoryChooser")?r.prop("disabled",!1):r.prop("disabled",!0)},_handlePickerClick:function(t,e,n){var o=this.$filePicker.closest(".oc-dialog").find(".primary");"file"===e.data("type")?(!0===this.$filePicker.data("multiselect")&&t.ctrlKey||this.$filelist.find(".filepicker_element_selected").removeClass("filepicker_element_selected"),e.toggleClass("filepicker_element_selected"),o.prop("disabled",!1)):"dir"===e.data("type")&&(this._fillFilePicker(this.$filePicker.data("path")+"/"+e.data("entryname"),n),this._changeButtonsText(n,e.data("entryname")),-1!==this.$filePicker.data("mimetype").indexOf("httpd/unix-directory")||this.$filePicker.data("allowDirectoryChooser")?o.prop("disabled",!1):o.prop("disabled",!0))},_changeButtonsText:function(e,n){var o=""===n?t("core","Copy"):t("core","Copy to {folder}",{folder:n}),i=""===n?t("core","Move"):t("core","Move to {folder}",{folder:n}),r=l()(".oc-dialog-buttonrow button");switch(e){case this.FILEPICKER_TYPE_CHOOSE:case this.FILEPICKER_TYPE_CUSTOM:break;case this.FILEPICKER_TYPE_COPY:r.text(o);break;case this.FILEPICKER_TYPE_MOVE:r.text(i);break;case this.FILEPICKER_TYPE_COPY_MOVE:r.eq(0).text(o),r.eq(1).text(i)}}},ut=ct,dt=(at=document,st=a.j8,lt=at.getElementsByTagName("head")[0].getAttribute("data-requesttoken"),{getToken:function(){return lt},setToken:function(t){st("csrf-token-update",{token:lt=t})}}).getToken,ft=function t(e,n){var o,i,r="";if(this.typelessListeners=[],this.closed=!1,this.listeners={},n)for(o in n)r+=o+"="+encodeURIComponent(n[o])+"&";if(r+="requesttoken="+encodeURIComponent(dt()),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(),i="&",-1===e.indexOf("?")&&(i="?"),this.iframe.attr("src",e+i+"fallback=true&fallback_id="+t.iframeCount+"&"+r),l()("body").append(this.iframe),this.useFallBack=!0,t.iframeCount++}else i="&",-1===e.indexOf("?")&&(i="?"),this.source=new EventSource(e+i+r),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))};ft.fallBackSources=[],ft.iframeCount=0,ft.fallBackCallBack=function(t,e,n){ft.fallBackSources[t].fallBackCallBack(e,n)},ft.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 pt=ft,ht=i(42515),mt=i(25108),gt=null,vt=null,yt=function(t){if(gt){var e=gt;gt.trigger(new(l().Event)("beforeHide")),gt.slideUp(50,(function(){e.trigger(new(l().Event)("afterHide")),t&&t.apply(this,arguments)}))}l()(".menutoggle").attr("aria-expanded",!1),vt&&vt.attr("aria-expanded",!1),l()(".openedMenu").removeClass("openedMenu"),gt=null,vt=null},wt=!!window._oc_isadmin,bt=i(86834),Pt=i.n(bt),Ct=i(31352),_t={load:Ct.XJ,register:Ct.z2,_unregister:Ct.ET,translate:Ct.Iu,translatePlural:Ct.uN};Pt().registerHelper("t",(function(t,e){return(0,Ct.Iu)(t,e)}));var At={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()}},kt=i(30381),xt=i.n(kt),Ot={callback:null,pageLoadTime:null,init:function(){l()(".password-confirm-required").on("click",p.ZP.bind(this.requirePasswordConfirmation,this)),this.pageLoadTime=xt().now()},requiresPasswordConfirmation:function(){var t=this.pageLoadTime-1e3*window.nc_pageLoad,e=xt().now()-(t+1e3*window.nc_lastLogin);return window.backendAllowsPasswordConfirmation&&e>18e5},requirePasswordConfirmation:function(e,n,o){n=void 0!==n?n:{};var i={title:t("core","Authentication required"),text:t("core","This action requires you to confirm your password"),confirm:t("core","Confirm"),label:t("core","Password"),error:""},r=p.ZP.extend(i,n),a=this;this.requiresPasswordConfirmation()&&Bt.dialogs.prompt(r.text,r.title,(function(t,e){t&&""!==e?a._confirmPassword(e,r):p.ZP.isFunction(o)&&o()}),!0,r.label,!0).then((function(){var t=l()(".oc-dialog:visible");if(t.find(".ui-icon").remove(),t.addClass("password-confirmation"),""!==r.error){var e=l()("<p></p>").addClass("msg warning").text(r.error);t.find(".oc-dialog-content").append(e)}var n=t.find(".oc-dialog-buttonrow");n.addClass("aside");var o=n.find("button");o.eq(0).hide(),o.eq(1).text(r.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.ZP.isFunction(o.callback)&&o.callback()},error:function(){n.error=t("core","Failed to authenticate, try again"),Bt.PasswordConfirmation.requirePasswordConfirmation(o.callback,n)}})}},Tt=window._theme||{},jt={_handlers:[],_pushState:function(t,e,n){var o;if(o="string"==typeof t?t:Bt.buildQueryString(t),window.history.pushState){if(e=e||location.pathname+"?"+o,navigator.userAgent.toLowerCase().indexOf("firefox")>-1&&parseInt(navigator.userAgent.split("/").pop())<51)for(var i,r=document.querySelectorAll('[fill^="url(#"], [stroke^="url(#"], [filter^="url(#invert"]'),a=0,s=r.length;a<s;a++)(i=r[a]).style.fill=i.style.fill,i.style.stroke=i.style.stroke,i.removeAttribute("filter"),i.setAttribute("filter","url(#invert)");n?window.history.replaceState(t,"",e):window.history.pushState(t,"",e)}else window.location.hash="?"+o,this._cancelPop=!0},pushState:function(t,e){this._pushState(t,e,!1)},replaceState:function(t,e){this._pushState(t,e,!0)},addOnPopStateHandler:function(t){this._handlers.push(t)},_parseHashQuery:function(){var t=window.location.hash,e=t.indexOf("?");return e>=0?t.substr(e+1):t.length?t.substr(1):""},_decodeQuery:function(t){return t.replace(/\+/g," ")},parseUrlQuery:function(){var t,e=this._parseHashQuery();return e&&(t=Bt.parseQueryString(this._decodeQuery(e))),(t=p.ZP.extend(t||{},Bt.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.ZP.isString(e)?e=Bt.parseQueryString(e):e||(e=this.parseUrlQuery()||{});for(var n=0;n<this._handlers.length;n++)this._handlers[n](e)}}},Et=i(91770),St=i(25108);function Lt(t){for(var e,n=[],o=0,i=-1,r=0;o<t.length;){e=t.charAt(o);var a=!r&&"."===e||e>="0"&&e<="9";a!==r&&(n[++i]="",r=a),n[i]+=e,o++}return n}var Nt={History:jt,humanFileSize:Et.sS,computerFileSize:function(t){if("string"!=typeof t)return null;var e=t.toLowerCase().trim(),n=null,o=e.match(/^[\s+]?([0-9]*)(\.([0-9]+))?( +)?([kmgtp]?b?)$/i);return null===o?null:(n=parseFloat(e),isFinite(n)?(o[5]&&(n*={b:1,k:1024,kb:1024,mb:1048576,m:1048576,gb:1073741824,g:1073741824,tb:1099511627776,t:1099511627776,pb:0x4000000000000,p:0x4000000000000}[o[5]]),n=Math.round(n)):null)},formatDate:function(t,e){return void 0===window.TESTING&&St.warn("OC.Util.formatDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment"),e=e||"LLL",xt()(t).format(e)},relativeModifiedDate:function(e){void 0===window.TESTING&&St.warn("OC.Util.relativeModifiedDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment");var n=xt()().diff(xt()(e));return n>=0&&n<45e3?t("core","seconds ago"):xt()(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=Lt(t),i=Lt(e);for(n=0;o[n]&&i[n];n++)if(o[n]!==i[n]){var r=Number(o[n]),a=Number(i[n]);return r==o[n]&&a==i[n]?r-a:o[n].localeCompare(i[n],Bt.getLanguage())}return o.length-i.length},waitFor:function(t,e){!function n(){!0!==t()&&setTimeout(n,e)}()},isCookieSetToValue:function(t,e){for(var n=document.cookie.split(";"),o=0;o<n.length;o++){var i=n[o].split("=");if(i[0].trim()===t&&i[1].trim()===e)return!0}return!1}},It=window._oc_debug,Ut=window._oc_webroot;if(void 0===Ut){var $t=(Ut=location.pathname).indexOf("/index.php/");Ut=-1!==$t?Ut.substr(0,$t):Ut.substr(0,Ut.lastIndexOf("/"))}var Rt,Ft=Ut,Mt=i(25108),Bt={coreApps:["","admin","log","core/search","core","3rdparty"],menuSpeed:50,PERMISSION_ALL:31,PERMISSION_CREATE:4,PERMISSION_DELETE:8,PERMISSION_NONE:0,PERMISSION_READ:1,PERMISSION_SHARE:16,PERMISSION_UPDATE:2,TAG_FAVORITE:"_$!<Favorite>!$_",fileIsBlacklisted:function(t){return!!t.match(R.blacklist_files_regex)},addScript:function(t,e,n){var o;u.warn("OC.addScript is deprecated, use OCP.Loader.loadScript instead");var i=(0,c.generateFilePath)(t,"js",e+".js");return d[i]?n&&n():(o=l().Deferred(),l().getScript(i,(function(){return o.resolve()})),d[i]=o),d[i]},addStyle:function(t,e){u.warn("OC.addStyle is deprecated, use OCP.Loader.loadStylesheet instead");var n=(0,c.generateFilePath)(t,"css",e+".css");-1===f.indexOf(n)&&(f.push(n),document.createStyleSheet?document.createStyleSheet(n):(e=l()('<link rel="stylesheet" type="text/css" href="'+n+'"/>'),l()("head").append(e)))},Apps:y,AppConfig:P,appConfig:b,appSettings:function(e){if(C.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 i=l()("#appsettings_popup");if(0===i.length&&(l()("body").prepend('<div class="popup hidden" id="appsettings_popup"></div>'),(i=l()("#appsettings_popup")).addClass(o.hasClass("topright")?"topright":"bottomleft")),i.is(":visible"))i.hide().remove();else{var r=o.hasClass("topright")?"up":"left";l().get((0,c.generateFilePath)(n.appid,"",n.scriptName),(function(e){i.html(e).ready((function(){if(i.prepend('<span class="arrow '+r+'"></span><h2>'+t("core","Settings")+'</h2><a class="close"></a>').show(),i.find(".close").bind("click",(function(){i.remove()})),void 0!==n.loadJS){var e;if(!0===n.loadJS)e="settings.js";else{if("string"!=typeof n.loadJS)throw{name:"InvalidParameter",message:'The "loadJS" parameter must be either boolean or a string.'};e=n.loadJS}n.cache&&l().ajaxSetup({cache:!0}),l().getScript((0,c.generateFilePath)(n.appid,"js",e)).fail((function(t,e,n){throw n}))}})).show()}),"html")}},appswebroots:A,Backbone:U,ContactsMenu:Y,config:R,currentUser:V,dialogs:ut,EventSource:pt,getCurrentUser:function(){return{uid:V,displayName:K}},isUserAdmin:function(){return wt},L10N:_t,_ajaxConnectionLostHandler:v,_processAjaxError:function(t){(0!==t.status||"abort"!==t.statusText&&"timeout"!==t.statusText&&!Bt._reloadCalled)&&(p.ZP.contains([302,303,307,401],t.status)&&Bt.currentUser?setTimeout((function(){if(!Bt._userIsNavigatingAway&&!Bt._reloadCalled){var t=0,e=setInterval((function(){g.showUpdate(n("core","Problem loading page, reloading in %n second","Problem loading page, reloading in %n seconds",5-t)),t>=5&&(clearInterval(e),Bt.reload()),t++}),1e3);Bt._reloadCalled=!0}}),100):0===t.status&&setTimeout((function(){Bt._userIsNavigatingAway||Bt._reloadCalled||Bt._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 mt.warn("OC.getCapabilities is deprecated and will be removed in Nextcloud 21. See @nextcloud/capabilities"),(0,ht.getCapabilities)()},hideMenus:yt,registerMenu:function(t,e,n,o){e.addClass("menu");var i="A"===t.prop("tagName")||"BUTTON"===t.prop("tagName");t.on(i?"click.menu":"click.menu keyup.menu",(function(i){i.preventDefault(),i.key&&"Enter"!==i.key||(e.is(gt)?yt():(gt&&yt(),!0===o&&e.parent().addClass("openedMenu"),t.attr("aria-expanded",!0),e.slideToggle(50,n),gt=e,vt=t))}))},showMenu:function(t,e,n){e.is(gt)||(yt(),gt=e,vt=t,e.trigger(new(l().Event)("beforeShow")),e.show(),e.trigger(new(l().Event)("afterShow")),p.ZP.isFunction(n)&&n())},unregisterMenu:function(t,e){e.is(gt)&&yt(),t.off("click.menu").removeClass("menutoggle"),e.removeClass("menu")},basename:$.EZ,encodePath:$.Ec,dirname:$.XX,isSamePath:$.Mg,joinPaths:$.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:Ct.aj,getLocale:Ct.Kd,getLanguage:Ct.G3,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,i={};if(!t)return null;(e=t.indexOf("?"))>=0&&(t=t.substr(e+1));for(var r=t.replace(/\+/g,"%20").split("&"),a=0;a<r.length;a++){var s=r[a];(n=(e=s.indexOf("="))>=0?[s.substr(0,e),s.substr(e+1)]:[s]).length&&(o=decodeURIComponent(n[0]))&&(i[o]=n.length>1?decodeURIComponent(n[1]):null)}return i},msg:At,Notification:g,PasswordConfirmation:Ot,Plugins:{_plugins:{},register:function(t,e){var n=this._plugins[t];n||(n=this._plugins[t]=[]),n.push(e)},getPlugins:function(t){return this._plugins[t]||[]},attach:function(t,e,n){for(var o=this.getPlugins(t),i=0;i<o.length;i++)o[i].attach&&o[i].attach(e,n)},detach:function(t,e,n){for(var o=this.getPlugins(t),i=0;i<o.length;i++)o[i].detach&&o[i].detach(e,n)}},theme:Tt,Util:Nt,debug:It,filePath:c.generateFilePath,generateUrl:c.generateUrl,get:(Rt=window,function(t){for(var e=t.split("."),n=e.pop(),o=0;o<e.length;o++)if(!(Rt=Rt[e[o]]))return!1;return Rt[n]}),set:function(t){return function(e,n){for(var o=e.split("."),i=o.pop(),r=0;r<o.length;r++)t[o[r]]||(t[o[r]]={}),t=t[o[r]];return t[i]=n,n}}(window),getRootPath:c.getRootUrl,imagePath:c.imagePath,redirect:function(t){window.location=t},reload:function(){window.location.reload()},requestToken:dt(),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:Ft};(0,a.Ld)("csrf-token-update",(function(t){OC.requestToken=t.token,Mt.info("OC.requestToken changed",t.token)}));var zt=i(79954),Dt=i(17563),Zt=i(22660),Ht=i.n(Zt),Yt=i(10204),qt=i.n(Yt),Kt=i(57290),Vt=i.n(Kt),Gt=i(10861),Wt=i.n(Gt),Jt={name:"LoginButton",components:{ArrowRight:i(39429).default,NcButton:Wt()},props:{value:{type:String,default:t("core","Log in")},valueLoading:{type:String,default:t("core","Logging in …")},loading:{type:Boolean,required:!0},invertedColors:{type:Boolean,default:!1}}},Qt=i(93379),Xt=i.n(Qt),te=i(7795),ee=i.n(te),ne=i(90569),oe=i.n(ne),ie=i(3565),re=i.n(ie),ae=i(19216),se=i.n(ae),le=i(44589),ce=i.n(le),ue=i(49665),de={};de.styleTagTransform=ce(),de.setAttributes=re(),de.insert=oe().bind(null,"head"),de.domAPI=ee(),de.insertStyleElement=se(),Xt()(ue.Z,de),ue.Z&&ue.Z.locals&&ue.Z.locals;var fe=i(51900),pe=(0,fe.Z)(Jt,(function(){var t=this,e=t._self._c;return e("NcButton",{attrs:{type:"primary","native-type":"submit",wide:!0},on:{click:function(e){return t.$emit("click")}},scopedSlots:t._u([{key:"icon",fn:function(){return[t.loading?e("div",{staticClass:"submit-wrapper__icon icon-loading-small-dark"}):e("ArrowRight",{staticClass:"submit-wrapper__icon"})]},proxy:!0}])},[t._v("\n\t"+t._s(t.loading?t.valueLoading:t.value)+"\n\t")])}),[],!1,null,"756414a8",null).exports,he={name:"LoginForm",components:{LoginButton:pe,NcPasswordField:Ht(),NcTextField:qt(),NcNoteCard:Vt()},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},autoCompleteAllowed:{type:Boolean,default:!0},directLogin:{type:Boolean,default:!1}},data:function(){var e,n;return{loading:!1,timezone:null===(e=new Intl.DateTimeFormat)||void 0===e||null===(n=e.resolvedOptions())||void 0===n?void 0:n.timeZone,timezoneOffset:-(new Date).getTimezoneOffset()/60,headline:t("core","Log in to {productName}",{productName:OC.theme.name}),user:"",password:""}},computed:{isError:function(){return this.invalidPassword||this.userDisabled||this.throttleDelay>5e3},errorLabel:function(){return this.invalidPassword?t("core","Wrong username or password."):this.userDisabled?t("core","User disabled"):this.throttleDelay>5e3?t("core","We have detected multiple invalid login attempts from your IP. Therefore your next login is throttled up to 30 seconds."):void 0},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")},loadingIcon:function(){return(0,c.imagePath)("core","loading-dark.gif")},loginActionUrl:function(){return(0,c.generateUrl)("login")}},mounted:function(){""===this.username?this.$refs.user.$refs.inputField.$refs.input.focus():(this.user=this.username,this.$refs.password.$refs.inputField.$refs.input.focus())},methods:{updateUsername:function(){this.$emit("update:username",this.user)},submit:function(){this.loading=!0,this.$emit("submit")}}},me=i(3591),ge={};ge.styleTagTransform=ce(),ge.setAttributes=re(),ge.insert=oe().bind(null,"head"),ge.domAPI=ee(),ge.insertStyleElement=se(),Xt()(me.Z,ge),me.Z&&me.Z.locals&&me.Z.locals;var ve=(0,fe.Z)(he,(function(){var t=this,e=t._self._c;return e("form",{ref:"loginForm",staticClass:"login-form",attrs:{method:"post",name:"login",action:t.loginActionUrl},on:{submit:t.submit}},[e("fieldset",{staticClass:"login-form__fieldset",attrs:{"data-login-form":""}},[t.apacheAuthFailed?e("NcNoteCard",{attrs:{title:t.t("core","Server side authentication failed!"),type:"warning"}},[t._v("\n\t\t\t"+t._s(t.t("core","Please contact your administrator."))+"\n\t\t")]):t._e(),t._v(" "),t.messages.length>0?e("NcNoteCard",t._l(t.messages,(function(n,o){return e("div",{key:o},[t._v("\n\t\t\t\t"+t._s(n)),e("br")])})),0):t._e(),t._v(" "),t.internalException?e("NcNoteCard",{class:t.t("core","An internal error occurred."),attrs:{type:"warning"}},[t._v("\n\t\t\t"+t._s(t.t("core","Please try again or contact your administrator."))+"\n\t\t")]):t._e(),t._v(" "),e("div",{staticClass:"hidden",attrs:{id:"message"}},[e("img",{staticClass:"float-spinner",attrs:{alt:"",src:t.loadingIcon}}),t._v(" "),e("span",{attrs:{id:"messageText"}}),t._v(" "),e("div",{staticStyle:{clear:"both"}})]),t._v(" "),e("h2",{staticClass:"login-form__headline",attrs:{"data-login-form-headline":""},domProps:{innerHTML:t._s(t.headline)}}),t._v(" "),e("NcTextField",{ref:"user",class:{shake:t.invalidPassword},attrs:{id:"user",label:t.t("core","Account name or email"),"label-visible":!0,name:"user",value:t.user,autocapitalize:"none",spellchecking:!1,autocomplete:t.autoCompleteAllowed?"username":"off",required:"","data-login-form-input-user":""},on:{"update:value":function(e){t.user=e},change:t.updateUsername}}),t._v(" "),e("NcPasswordField",{ref:"password",class:{shake:t.invalidPassword},attrs:{id:"password",name:"password","label-visible":!0,value:t.password,spellchecking:!1,autocapitalize:"none",autocomplete:t.autoCompleteAllowed?"current-password":"off",label:t.t("core","Password"),"helper-text":t.errorLabel,error:t.isError,"data-login-form-input-password":"",required:""},on:{"update:value":function(e){t.password=e}}}),t._v(" "),e("LoginButton",{attrs:{"data-login-form-submit":"",loading:t.loading}}),t._v(" "),t.redirectUrl?e("input",{attrs:{type:"hidden",name:"redirect_url"},domProps:{value:t.redirectUrl}}):t._e(),t._v(" "),e("input",{attrs:{type:"hidden",name:"timezone"},domProps:{value:t.timezone}}),t._v(" "),e("input",{attrs:{type:"hidden",name:"timezone_offset"},domProps:{value:t.timezoneOffset}}),t._v(" "),e("input",{attrs:{type:"hidden",name:"requesttoken"},domProps:{value:t.OC.requestToken}}),t._v(" "),t.directLogin?e("input",{attrs:{type:"hidden",name:"direct",value:"1"}}):t._e()],1)])}),[],!1,null,"5bd351bc",null).exports,ye=i(4820),we=i(37838),be=i(38213),Pe=i(25108);function Ce(t){return Ce="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},Ce(t)}function _e(t){return function(t){if(Array.isArray(t))return Ae(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 Ae(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)?Ae(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 Ae(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 ke(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 xe(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?ke(Object(n),!0).forEach((function(e){Oe(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ke(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function Oe(t,e,n){return(e=Te(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Te(t){var e=function(t,e){if("object"!==Ce(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var o=n.call(t,"string");if("object"!==Ce(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"===Ce(e)?e:String(e)}function je(t){var e="function"==typeof Map?new Map:void 0;return je=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 Ee(t,arguments,Ne(this).constructor)}return o.prototype=Object.create(t.prototype,{constructor:{value:o,enumerable:!1,writable:!0,configurable:!0}}),Le(o,t)},je(t)}function Ee(t,e,n){return Ee=Se()?Reflect.construct.bind():function(t,e,n){var o=[null];o.push.apply(o,e);var i=new(Function.bind.apply(t,o));return n&&Le(i,n.prototype),i},Ee.apply(null,arguments)}function Se(){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 Le(t,e){return Le=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},Le(t,e)}function Ne(t){return Ne=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},Ne(t)}var Ie=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&&Le(t,e)}(r,t);var e,n,o,i=(n=r,o=Se(),function(){var t,e=Ne(n);if(o){var i=Ne(this).constructor;t=Reflect.construct(e,arguments,i)}else t=e.apply(this,arguments);return function(t,e){if(e&&("object"===Ce(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)}(this,t)});function r(){return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,r),i.apply(this,arguments)}return e=r,Object.defineProperty(e,"prototype",{writable:!1}),e}(je(Error)),Ue={name:"PasswordLessLoginForm",components:{LoginButton:pe,InformationIcon:we.Z,LockOpenIcon:be.Z},props:{username:{type:String,default:""},redirectUrl:{type:[String,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;Pe.debug("passwordless login initiated"),this.getAuthenticationData(this.user).then((function(t){return Pe.debug(t),t})).then(this.sign).then(this.completeAuthentication).catch((function(e){e instanceof Ie?t.validCredentials=!1:Pe.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"),ye.default.post(n,{loginName:e}).then((function(t){return t.data}))).then((function(t){if(Pe.debug("Obtained PublicKeyCredentialRequestOptions"),Pe.debug(t),!Object.prototype.hasOwnProperty.call(t,"allowCredentials"))throw Pe.debug("No credentials found."),new Ie;return t.challenge=Uint8Array.from(o(t.challenge),(function(t){return t.charCodeAt(0)})),t.allowCredentials=t.allowCredentials.map((function(t){return xe(xe({},t),{},{id:Uint8Array.from(o(t.id),(function(t){return t.charCodeAt(0)}))})})),Pe.debug("Converted PublicKeyCredentialRequestOptions"),Pe.debug(t),t})).catch((function(t){throw Pe.debug("Error while obtaining data"),t}))},sign:function(t){var e=function(t){return window.btoa(String.fromCharCode.apply(String,_e(t)))};return navigator.credentials.get({publicKey:t}).then((function(t){return Pe.debug(t),Pe.debug(new Uint8Array(t.rawId)),Pe.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,_e(n))):null}};var n})).then((function(t){return Pe.debug(t),t})).catch((function(t){Pe.debug("GOT AN ERROR!"),Pe.debug(t)}))},completeAuthentication:function(t){Pe.debug("TIME TO COMPLETE");var e,n,o=this.redirectUrl;return(e=JSON.stringify(t),n=(0,c.generateUrl)("/login/webauthn/finish"),ye.default.post(n,{data:e}).then((function(t){return t.data}))).then((function(t){var e=t.defaultRedirectUrl;Pe.debug("Logged in redirecting"),window.location.href=o||e})).catch((function(t){Pe.debug("GOT AN ERROR WHILE SUBMITTING CHALLENGE!"),Pe.debug(t)}))},submit:function(){}}},$e=i(43848),Re={};Re.styleTagTransform=ce(),Re.setAttributes=re(),Re.insert=oe().bind(null,"head"),Re.domAPI=ee(),Re.insertStyleElement=se(),Xt()($e.Z,Re),$e.Z&&$e.Z.locals&&$e.Z.locals;var Fe=(0,fe.Z)(Ue,(function(){var t=this,e=t._self._c;return(t.isHttps||t.isLocalhost)&&t.hasPublicKeyCredential?e("form",{ref:"loginForm",attrs:{method:"post",name:"login"},on:{submit:function(e){return e.preventDefault(),t.submit.apply(null,arguments)}}},[e("fieldset",[e("p",{staticClass:"grouptop groupbottom"},[e("label",{staticClass:"infield",attrs:{for:"user"}},[t._v(t._s(t.t("core","Username or\temail")))]),t._v(" "),e("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():e("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?e("LoginButton",{attrs:{loading:t.loading},on:{click:t.authenticate}}):t._e()],1)]):t.hasPublicKeyCredential?t.isHttps||t.isLocalhost?t._e():e("div",{staticClass:"body-login-container update"},[e("LockOpenIcon",{attrs:{size:"70"}}),t._v(" "),e("h2",[t._v(t._s(t.t("core","Your connection is not secure")))]),t._v(" "),e("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):e("div",{staticClass:"body-login-container update"},[e("InformationIcon",{attrs:{size:"70"}}),t._v(" "),e("h2",[t._v(t._s(t.t("core","Browser not supported")))]),t._v(" "),e("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,"20256748",null),Me=Fe.exports,Be=i(25108),ze={name:"ResetPassword",components:{LoginButton:pe,NcNoteCard:Vt(),NcTextField:qt()},props:{username:{type:String,required:!0},resetPasswordLink:{type:String,required:!0}},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 ye.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){Be.error("could not send reset email request",e),t.error=!0,t.message="send-error"})).then((function(){t.loading=!1}))}}},De=i(28032),Ze={};Ze.styleTagTransform=ce(),Ze.setAttributes=re(),Ze.insert=oe().bind(null,"head"),Ze.domAPI=ee(),Ze.insertStyleElement=se(),Xt()(De.Z,Ze),De.Z&&De.Z.locals&&De.Z.locals;var He=(0,fe.Z)(ze,(function(){var t=this,e=t._self._c;return e("form",{staticClass:"login-form",on:{submit:function(e){return e.preventDefault(),t.submit.apply(null,arguments)}}},[e("fieldset",{staticClass:"login-form__fieldset"},[e("NcTextField",{attrs:{id:"user",value:t.user,name:"user",autocapitalize:"off",label:t.t("core","Account name or email"),"label-visible":!0,required:""},on:{"update:value":function(e){t.user=e},change:t.updateUsername}}),t._v(" "),e("LoginButton",{attrs:{value:t.t("core","Reset password")}}),t._v(" "),"send-success"===t.message?e("NcNoteCard",{attrs:{type:"success"}},[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"),e("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?e("NcNoteCard",{attrs:{type:"error"}},[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?e("NcNoteCard",{attrs:{type:"error"}},[t._v("\n\t\t\t"+t._s(t.t("core","Password cannot be changed. Please contact your administrator."))+"\n\t\t")]):t._e(),t._v(" "),e("a",{staticClass:"login-form__link",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)])}),[],!1,null,"27cabc60",null),Ye=He.exports;function qe(t,e,n,o,i,r,a){try{var s=t[r](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(o,i)}var Ke={name:"UpdatePassword",components:{LoginButton:pe},props:{username:{type:String,required:!0},resetPasswordTarget:{type:String,required:!0}},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,i;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,ye.default.post(n.resetPasswordTarget,{password:n.password,proceed:n.proceed});case 6:if(o=e.sent,!(i=o.data)||"success"!==i.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(!i||!i.encryption){e.next=18;break}n.encrypted=!0,e.next=23;break;case 18:if(!i||!i.msg){e.next=22;break}throw new Error(i.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,i){var r=e.apply(t,n);function a(t){qe(r,o,i,a,s,"next",t)}function s(t){qe(r,o,i,a,s,"throw",t)}a(void 0)}))})()}}},Ve=Ke,Ge=i(74778),We={};We.styleTagTransform=ce(),We.setAttributes=re(),We.insert=oe().bind(null,"head"),We.domAPI=ee(),We.insertStyleElement=se(),Xt()(Ge.Z,We),Ge.Z&&Ge.Z.locals&&Ge.Z.locals;var Je=(0,fe.Z)(Ve,(function(){var t=this,e=t._self._c;return e("form",{on:{submit:function(e){return e.preventDefault(),t.submit.apply(null,arguments)}}},[e("fieldset",[e("p",[e("label",{staticClass:"infield",attrs:{for:"password"}},[t._v(t._s(t.t("core","New password")))]),t._v(" "),e("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?e("div",{staticClass:"update"},[e("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(" "),e("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,i=!!o.checked;if(Array.isArray(n)){var r=t._i(n,null);o.checked?r<0&&(t.proceed=n.concat([null])):r>-1&&(t.proceed=n.slice(0,r).concat(n.slice(r+1)))}else t.proceed=i}}}),t._v(" "),e("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(" "),e("LoginButton",{attrs:{loading:t.loading,value:t.t("core","Reset password"),"value-loading":t.t("core","Resetting password")}}),t._v(" "),t.error&&t.message?e("p",{class:{warning:t.error}},[t._v("\n\t\t\t"+t._s(t.message)+"\n\t\t")]):t._e()],1)])}),[],!1,null,"4dc21d74",null),Qe=Je.exports,Xe=i(25108),tn=Dt.parse(location.search);if("1"===tn.clear)try{window.localStorage.clear(),window.sessionStorage.clear(),Xe.debug("Browser storage cleared")}catch(t){Xe.error("Could not clear browser storage",t)}var en={name:"Login",components:{LoginForm:ve,PasswordLessLoginForm:Me,ResetPassword:Ye,UpdatePassword:Qe,NcButton:Wt(),NcNoteCard:Vt()},data:function(){return{loading:!1,user:(0,zt.j)("core","loginUsername",""),passwordlessLogin:!1,resetPassword:!1,errors:(0,zt.j)("core","loginErrors",[]),messages:(0,zt.j)("core","loginMessages",[]),redirectUrl:(0,zt.j)("core","loginRedirectUrl",!1),throttleDelay:(0,zt.j)("core","loginThrottleDelay",0),canResetPassword:(0,zt.j)("core","loginCanResetPassword",!1),resetPasswordLink:(0,zt.j)("core","loginResetPasswordLink",""),autoCompleteAllowed:(0,zt.j)("core","loginAutocomplete",!0),resetPasswordTarget:(0,zt.j)("core","resetPasswordTarget",""),resetPasswordUser:(0,zt.j)("core","resetPasswordUser",""),directLogin:"1"===tn.direct,hasPasswordless:(0,zt.j)("core","webauthn-available",!1),countAlternativeLogins:(0,zt.j)("core","countAlternativeLogins",!1),alternativeLogins:(0,zt.j)("core","alternativeLogins",[]),isHttps:"https:"===window.location.protocol,isLocalhost:"localhost"===window.location.hostname,hasPublicKeyCredential:void 0!==window.PublicKeyCredential,hideLoginForm:(0,zt.j)("core","hideLoginForm",!1)}},methods:{passwordResetFinished:function(){this.resetPasswordTarget="",this.directLogin=!0}}},nn=i(20549),on={};on.styleTagTransform=ce(),on.setAttributes=re(),on.insert=oe().bind(null,"head"),on.domAPI=ee(),on.insertStyleElement=se(),Xt()(nn.Z,on),nn.Z&&nn.Z.locals&&nn.Z.locals;var rn=(0,fe.Z)(en,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"guest-box login-box"},[!t.hideLoginForm||t.directLogin?e("div",[e("transition",{attrs:{name:"fade",mode:"out-in"}},[t.passwordlessLogin||t.resetPassword||""!==t.resetPasswordTarget?!t.loading&&t.passwordlessLogin?e("div",{key:"reset",staticClass:"login-additional"},[e("PasswordLessLoginForm",{attrs:{username:t.user,"redirect-url":t.redirectUrl,"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(" "),e("a",{staticClass:"login-box__link",attrs:{href:"#"},on:{click:function(e){e.preventDefault(),t.passwordlessLogin=!1}}},[t._v("\n\t\t\t\t\t"+t._s(t.t("core","Back"))+"\n\t\t\t\t")])],1):!t.loading&&t.canResetPassword?e("div",{key:"reset",staticClass:"login-additional"},[e("div",{staticClass:"lost-password-container"},[t.resetPassword?e("ResetPassword",{attrs:{username:t.user,"reset-password-link":t.resetPasswordLink},on:{"update:username":function(e){t.user=e},abort:function(e){t.resetPassword=!1}}}):t._e()],1)]):""!==t.resetPasswordTarget?e("div",[e("UpdatePassword",{attrs:{username:t.user,"reset-password-target":t.resetPasswordTarget},on:{"update:username":function(e){t.user=e},done:t.passwordResetFinished}})],1):t._e():e("div",[e("LoginForm",{attrs:{username:t.user,"redirect-url":t.redirectUrl,"direct-login":t.directLogin,messages:t.messages,errors:t.errors,"throttle-delay":t.throttleDelay,"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?e("a",{staticClass:"login-box__link",attrs:{id:"lost-password",href:t.resetPasswordLink}},[t._v("\n\t\t\t\t\t"+t._s(t.t("core","Forgot password?"))+"\n\t\t\t\t")]):t.canResetPassword&&!t.resetPassword?e("a",{staticClass:"login-box__link",attrs:{id:"lost-password",href:t.resetPasswordLink},on:{click:function(e){e.preventDefault(),t.resetPassword=!0}}},[t._v("\n\t\t\t\t\t"+t._s(t.t("core","Forgot password?"))+"\n\t\t\t\t")]):t._e(),t._v(" "),t.hasPasswordless?[t.countAlternativeLogins?e("div",{staticClass:"alternative-logins"},[t.hasPasswordless?e("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"+t._s(t.t("core","Log in with a device"))+"\n\t\t\t\t\t\t")]):t._e()]):e("a",{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()],2)])],1):e("div",[e("transition",{attrs:{name:"fade",mode:"out-in"}},[e("NcNoteCard",{attrs:{type:"warning",title:t.t("core","Login form is disabled.")}},[t._v("\n\t\t\t\t"+t._s(t.t("core","Please contact your administrator."))+"\n\t\t\t")])],1)],1),t._v(" "),e("div",{staticClass:"alternative-logins",attrs:{id:"alternative-logins"}},t._l(t.alternativeLogins,(function(n,o){return e("NcButton",{key:o,class:[n.class],attrs:{type:"secondary",wide:!0,role:"link",href:n.href}},[t._v("\n\t\t\t"+t._s(n.name)+"\n\t\t")])})),1)])}),[],!1,null,null,null).exports,an={data:function(){return{OC:Bt}},methods:{t:_t.translate.bind(_t),n:_t.translatePlural.bind(_t)}};r.ZP.mixin(an),(new(r.ZP.extend(rn))).$mount("#login")},49665:function(t,e,n){"use strict";var o=n(87537),i=n.n(o),r=n(23645),a=n.n(r)()(i());a.push([t.id,".button-vue[data-v-756414a8]{margin-top:.5rem}","",{version:3,sources:["webpack://./core/src/components/login/LoginButton.vue"],names:[],mappings:"AACA,6BACC,gBAAA",sourcesContent:["\n.button-vue {\n\tmargin-top: .5rem;\n}\n"],sourceRoot:""}]),e.Z=a},3591:function(t,e,n){"use strict";var o=n(87537),i=n.n(o),r=n(23645),a=n.n(r)()(i());a.push([t.id,".login-form[data-v-5bd351bc]{text-align:left;font-size:1rem}.login-form__fieldset[data-v-5bd351bc]{width:100%;display:flex;flex-direction:column;gap:.5rem}.login-form__headline[data-v-5bd351bc]{text-align:center}","",{version:3,sources:["webpack://./core/src/components/login/LoginForm.vue"],names:[],mappings:"AACA,6BACC,eAAA,CACA,cAAA,CAEA,uCACC,UAAA,CACA,YAAA,CACA,qBAAA,CACA,SAAA,CAGD,uCACC,iBAAA",sourcesContent:["\n.login-form {\n\ttext-align: left;\n\tfont-size: 1rem;\n\n\t&__fieldset {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: .5rem;\n\t}\n\n\t&__headline {\n\t\ttext-align: center;\n\t}\n}\n"],sourceRoot:""}]),e.Z=a},43848:function(t,e,n){"use strict";var o=n(87537),i=n.n(o),r=n(23645),a=n.n(r)()(i());a.push([t.id,".body-login-container.update[data-v-20256748]{margin:15px 0}.body-login-container.update.form__message-box[data-v-20256748]{width:240px;margin:5px}","",{version:3,sources:["webpack://./core/src/components/login/PasswordLessLoginForm.vue"],names:[],mappings:"AACA,8CACC,aAAA,CAEA,gEACC,WAAA,CACA,UAAA",sourcesContent:["\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},28032:function(t,e,n){"use strict";var o=n(87537),i=n.n(o),r=n(23645),a=n.n(r)()(i());a.push([t.id,".login-form[data-v-27cabc60]{text-align:left;font-size:1rem}.login-form__fieldset[data-v-27cabc60]{width:100%;display:flex;flex-direction:column;gap:.5rem}.login-form__link[data-v-27cabc60]{display:block;font-weight:normal !important;padding-bottom:1rem;cursor:pointer;font-size:var(--default-font-size);text-align:center;padding:.5rem 1rem 1rem 1rem}","",{version:3,sources:["webpack://./core/src/components/login/ResetPassword.vue"],names:[],mappings:"AACA,6BACC,eAAA,CACA,cAAA,CAEA,uCACC,UAAA,CACA,YAAA,CACA,qBAAA,CACA,SAAA,CAGD,mCACC,aAAA,CACA,6BAAA,CACA,mBAAA,CACA,cAAA,CACA,kCAAA,CACA,iBAAA,CACA,4BAAA",sourcesContent:["\n.login-form {\n\ttext-align: left;\n\tfont-size: 1rem;\n\n\t&__fieldset {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: .5rem;\n\t}\n\n\t&__link {\n\t\tdisplay: block;\n\t\tfont-weight: normal !important;\n\t\tpadding-bottom: 1rem;\n\t\tcursor: pointer;\n\t\tfont-size: var(--default-font-size);\n\t\ttext-align: center;\n\t\tpadding: .5rem 1rem 1rem 1rem;\n\t}\n}\n"],sourceRoot:""}]),e.Z=a},20549:function(t,e,n){"use strict";var o=n(87537),i=n.n(o),r=n(23645),a=n.n(r)()(i());a.push([t.id,"body{font-size:var(--default-font-size)}.login-box{width:300px}.login-box__link{display:block;padding:1rem;font-size:var(--default-font-size);text-align:center;font-weight:normal !important}.fade-enter-active,.fade-leave-active{transition:opacity .3s}.fade-enter,.fade-leave-to{opacity:0}.alternative-logins{display:flex;flex-direction:column;gap:.75rem}.alternative-logins .button-vue{box-sizing:border-box}","",{version:3,sources:["webpack://./core/src/views/Login.vue"],names:[],mappings:"AACA,KACC,kCAAA,CAGD,WACC,WAAA,CAEA,iBACC,aAAA,CACA,YAAA,CACA,kCAAA,CACA,iBAAA,CACA,6BAAA,CAGF,sCACC,sBAAA,CAED,2BACC,SAAA,CAGD,oBACC,YAAA,CACA,qBAAA,CACA,UAAA,CAEA,gCACC,qBAAA",sourcesContent:["\nbody {\n\tfont-size: var(--default-font-size);\n}\n\n.login-box {\n\twidth: 300px;\n\n\t&__link {\n\t\tdisplay: block;\n\t\tpadding: 1rem;\n\t\tfont-size: var(--default-font-size);\n\t\ttext-align: center;\n\t\tfont-weight: normal !important;\n\t}\n}\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\n.alternative-logins {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 0.75rem;\n\n\t.button-vue {\n\t\tbox-sizing: border-box;\n\t}\n}\n"],sourceRoot:""}]),e.Z=a},74778:function(t,e,n){"use strict";var o=n(87537),i=n.n(o),r=n(23645),a=n.n(r)()(i());a.push([t.id,"\nfieldset[data-v-4dc21d74] {\n\ttext-align: center;\n}\ninput[type=submit][data-v-4dc21d74] {\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<LoginButton :loading=\"loading\"\n\t\t\t\t:value=\"t('core', 'Reset password')\"\n\t\t\t\t:value-loading=\"t('core', 'Resetting password')\" />\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'\nimport LoginButton from './LoginButton.vue'\n\nexport default {\n\tname: 'UpdatePassword',\n\tcomponents: {\n\t\tLoginButton,\n\t},\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},\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},10944:function(t,e,n){var o=n(40202);t.exports=(o.default||o).template({1:function(t,e,n,o,i){var r,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(r=a(n,"if").call(null!=e?e:t.nullContext||{},null!=(r=null!=e?a(e,"contact"):e)?a(r,"profileUrl"):r,{name:"if",hash:{},fn:t.program(2,i,0),inverse:t.program(5,i,0),data:i,loc:{start:{line:2,column:1},end:{line:10,column:8}}}))?r:""},2:function(t,e,n,o,i){var r,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(r=a(n,"if").call(null!=e?e:t.nullContext||{},null!=(r=null!=e?a(e,"contact"):e)?a(r,"profileTitle"):r,{name:"if",hash:{},fn:t.program(3,i,0),inverse:t.noop,data:i,loc:{start:{line:3,column:2},end:{line:7,column:9}}}))?r:""},3:function(t,e,n,o,i){var r,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!=(r=null!=e?l(e,"contact"):e)?l(r,"profileUrl"):r,e))+'">\n\t\t\t\t<img src="'+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"avatar"):r,e))+'&size=32" class="avatar" srcset="'+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"avatar"):r,e))+"&size=32 1x, "+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"avatar"):r,e))+"&size=64 2x, "+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"avatar"):r,e))+'&size=128 4x" alt="">\n\t\t\t</a>\n'},5:function(t,e,n,o,i){var r,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!=(r=null!=e?l(e,"contact"):e)?l(r,"avatar"):r,e))+'&size=32" class="avatar" srcset="'+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"avatar"):r,e))+"&size=32 1x, "+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"avatar"):r,e))+"&size=64 2x, "+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"avatar"):r,e))+'&size=128 4x" alt="">\n'},7:function(t,e,n,o,i){var r,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(r=a(n,"if").call(null!=e?e:t.nullContext||{},null!=(r=null!=e?a(e,"contact"):e)?a(r,"profileUrl"):r,{name:"if",hash:{},fn:t.program(8,i,0),inverse:t.program(11,i,0),data:i,loc:{start:{line:12,column:1},end:{line:20,column:8}}}))?r:""},8:function(t,e,n,o,i){var r,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(r=a(n,"if").call(null!=e?e:t.nullContext||{},null!=(r=null!=e?a(e,"contact"):e)?a(r,"profileTitle"):r,{name:"if",hash:{},fn:t.program(9,i,0),inverse:t.noop,data:i,loc:{start:{line:13,column:2},end:{line:17,column:9}}}))?r:""},9:function(t,e,n,o,i){var r,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!=(r=null!=e?a(e,"contact"):e)?a(r,"profileUrl"):r,e))+'">\n\t\t\t\t<div class="avatar"></div>\n\t\t\t</a>\n'},11:function(t,e,n,o,i){return'\t\t<div class="avatar"></div>\n'},13:function(t,e,n,o,i){var r,a=null!=e?e:t.nullContext||{},s=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return(null!=(r=s(n,"if").call(a,null!=(r=null!=e?s(e,"contact"):e)?s(r,"profileTitle"):r,{name:"if",hash:{},fn:t.program(14,i,0),inverse:t.noop,data:i,loc:{start:{line:23,column:1},end:{line:29,column:8}}}))?r:"")+(null!=(r=s(n,"if").call(a,null!=(r=null!=e?s(e,"contact"):e)?s(r,"topAction"):r,{name:"if",hash:{},fn:t.program(16,i,0),inverse:t.noop,data:i,loc:{start:{line:30,column:1},end:{line:34,column:8}}}))?r:"")},14:function(t,e,n,o,i){var r,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!=(r=null!=e?l(e,"contact"):e)?l(r,"profileUrl"):r,e))+'">\n\t\t\t<div class="full-name">'+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"fullName"):r,e))+'</div>\n\t\t\t<div class="last-message">'+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"lastMessage"):r,e))+'</div>\n\t\t\t<div class="email-address">'+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"emailAddresses"):r,e))+"</div>\n\t\t</a>\n"},16:function(t,e,n,o,i){var r,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="top-action" href="'+s(a(null!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"topAction"):r)?l(r,"hyperlink"):r,e))+'" title="'+s(a(null!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"topAction"):r)?l(r,"title"):r,e))+'" aria-label="'+s(a(null!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"topAction"):r)?l(r,"title"):r,e))+'">\n\t\t\t<img src="'+s(a(null!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"topAction"):r)?l(r,"icon"):r,e))+'" alt="'+s(a(null!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"topAction"):r)?l(r,"title"):r,e))+'">\n\t\t</a>\n'},18:function(t,e,n,o,i){var r,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(r=a(n,"if").call(null!=e?e:t.nullContext||{},null!=(r=null!=e?a(e,"contact"):e)?a(r,"topAction"):r,{name:"if",hash:{},fn:t.program(19,i,0),inverse:t.program(21,i,0),data:i,loc:{start:{line:35,column:0},end:{line:50,column:0}}}))?r:""},19:function(t,e,n,o,i){var r,a=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t<a class="body" href="'+s(a(null!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"topAction"):r)?l(r,"hyperlink"):r,e))+'">\n\t\t<div class="full-name">'+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"fullName"):r,e))+'</div>\n\t\t<div class="last-message">'+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"lastMessage"):r,e))+'</div>\n\t\t<div class="email-address">'+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"emailAddresses"):r,e))+'</div>\n\t</a>\n \t<a class="top-action" href="'+s(a(null!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"topAction"):r)?l(r,"hyperlink"):r,e))+'" title="'+s(a(null!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"topAction"):r)?l(r,"title"):r,e))+'">\n \t\t<img src="'+s(a(null!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"topAction"):r)?l(r,"icon"):r,e))+'" alt="'+s(a(null!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"topAction"):r)?l(r,"title"):r,e))+'">\n\t</a>\n'},21:function(t,e,n,o,i){var r,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!=(r=null!=e?l(e,"contact"):e)?l(r,"fullName"):r,e))+'</div>\n\t\t<div class="last-message">'+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"lastMessage"):r,e))+'</div>\n\t\t<div class="email-address">'+s(a(null!=(r=null!=e?l(e,"contact"):e)?l(r,"emailAddresses"):r,e))+"</div>\n\t</div>\n"},23:function(t,e,n,o,i){var r,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!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"secondAction"):r)?l(r,"hyperlink"):r,e))+'" aria-label="'+s(a(null!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"secondAction"):r)?l(r,"title"):r,e))+'" title="'+s(a(null!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"secondAction"):r)?l(r,"title"):r,e))+'">\n\t<img src="'+s(a(null!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"secondAction"):r)?l(r,"icon"):r,e))+'" alt="'+s(a(null!=(r=null!=(r=null!=e?l(e,"contact"):e)?l(r,"secondAction"):r)?l(r,"title"):r,e))+'">\n</a>\n'},25:function(t,e,n,o,i){var r,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t<button class="other-actions icon-more"></button>\n\t<div class="menu popovermenu">\n\t\t<ul>\n'+(null!=(r=a(n,"each").call(null!=e?e:t.nullContext||{},null!=(r=null!=e?a(e,"contact"):e)?a(r,"actions"):r,{name:"each",hash:{},fn:t.program(26,i,0),inverse:t.noop,data:i,loc:{start:{line:60,column:3},end:{line:67,column:12}}}))?r:"")+"\t\t</ul>\n\t</div>\n"},26:function(t,e,n,o,i){var r,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(r=null!=(r=u(n,"hyperlink")||(null!=e?u(e,"hyperlink"):e))?r:s)===l?r.call(a,{name:"hyperlink",hash:{},data:i,loc:{start:{line:62,column:13},end:{line:62,column:26}}}):r)+'">\n\t\t\t\t\t<img src="'+c(typeof(r=null!=(r=u(n,"icon")||(null!=e?u(e,"icon"):e))?r:s)===l?r.call(a,{name:"icon",hash:{},data:i,loc:{start:{line:63,column:15},end:{line:63,column:23}}}):r)+'" alt="">\n\t\t\t\t\t<span>'+c(typeof(r=null!=(r=u(n,"title")||(null!=e?u(e,"title"):e))?r:s)===l?r.call(a,{name:"title",hash:{},data:i,loc:{start:{line:64,column:11},end:{line:64,column:20}}}):r)+"</span>\n\t\t\t\t</a>\n\t\t\t</li>\n"},compiler:[8,">= 4.3.0"],main:function(t,e,n,o,i){var r,a=null!=e?e:t.nullContext||{},s=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return(null!=(r=s(n,"if").call(a,null!=(r=null!=e?s(e,"contact"):e)?s(r,"avatar"):r,{name:"if",hash:{},fn:t.program(1,i,0),inverse:t.program(7,i,0),data:i,loc:{start:{line:1,column:0},end:{line:21,column:7}}}))?r:"")+(null!=(r=s(n,"if").call(a,null!=(r=null!=e?s(e,"contact"):e)?s(r,"profileUrl"):r,{name:"if",hash:{},fn:t.program(13,i,0),inverse:t.program(18,i,0),data:i,loc:{start:{line:22,column:0},end:{line:50,column:7}}}))?r:"")+(null!=(r=s(n,"if").call(a,null!=(r=null!=e?s(e,"contact"):e)?s(r,"hasTwoActions"):r,{name:"if",hash:{},fn:t.program(23,i,0),inverse:t.noop,data:i,loc:{start:{line:51,column:0},end:{line:55,column:7}}}))?r:"")+(null!=(r=s(n,"if").call(a,null!=(r=null!=e?s(e,"contact"):e)?s(r,"hasManyActions"):r,{name:"if",hash:{},fn:t.program(25,i,0),inverse:t.noop,data:i,loc:{start:{line:56,column:0},end:{line:70,column:7}}}))?r:"")},useData:!0})},20421:function(t,e,n){var o=n(40202);t.exports=(o.default||o).template({compiler:[8,">= 4.3.0"],main:function(t,e,n,o,i){var r,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(r=null!=(r=a(n,"couldNotLoadText")||(null!=e?a(e,"couldNotLoadText"):e))?r:t.hooks.helperMissing)?r.call(null!=e?e:t.nullContext||{},{name:"couldNotLoadText",hash:{},data:i,loc:{start:{line:3,column:5},end:{line:3,column:25}}}):r)+"</h2>\n</div>\n"},useData:!0})},34083:function(t,e,n){var o=n(40202);t.exports=(o.default||o).template({1:function(t,e,n,o,i){var r,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(r=null!=(r=a(n,"noContactsFoundText")||(null!=e?a(e,"noContactsFoundText"):e))?r:t.hooks.helperMissing)?r.call(null!=e?e:t.nullContext||{},{name:"noContactsFoundText",hash:{},data:i,loc:{start:{line:4,column:5},end:{line:4,column:28}}}):r)+"</h2>\n</div>\n"},3:function(t,e,n,o,i){var r,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(r=null!=(r=u(n,"contactsAppURL")||(null!=e?u(e,"contactsAppURL"):e))?r:s)===l?r.call(a,{name:"contactsAppURL",hash:{},data:i,loc:{start:{line:9,column:29},end:{line:9,column:47}}}):r)+'">'+c(typeof(r=null!=(r=u(n,"showAllContactsText")||(null!=e?u(e,"showAllContactsText"):e))?r:s)===l?r.call(a,{name:"showAllContactsText",hash:{},data:i,loc:{start:{line:9,column:49},end:{line:9,column:72}}}):r)+"</a></div>\n"},5:function(t,e,n,o,i){var r,a=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(r=a(n,"if").call(null!=e?e:t.nullContext||{},null!=e?a(e,"canInstallApp"):e,{name:"if",hash:{},fn:t.program(6,i,0),inverse:t.noop,data:i,loc:{start:{line:10,column:0},end:{line:12,column:0}}}))?r:""},6:function(t,e,n,o,i){var r,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(r=null!=(r=u(n,"contactsAppMgmtURL")||(null!=e?u(e,"contactsAppMgmtURL"):e))?r:s)===l?r.call(a,{name:"contactsAppMgmtURL",hash:{},data:i,loc:{start:{line:11,column:29},end:{line:11,column:51}}}):r)+'">'+c(typeof(r=null!=(r=u(n,"contactsAppMgmtText")||(null!=e?u(e,"contactsAppMgmtText"):e))?r:s)===l?r.call(a,{name:"contactsAppMgmtText",hash:{},data:i,loc:{start:{line:11,column:53},end:{line:11,column:76}}}):r)+"</a></div>\n"},compiler:[8,">= 4.3.0"],main:function(t,e,n,o,i){var r,a=null!=e?e:t.nullContext||{},s=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return(null!=(r=s(n,"unless").call(a,null!=(r=null!=e?s(e,"contacts"):e)?s(r,"length"):r,{name:"unless",hash:{},fn:t.program(1,i,0),inverse:t.noop,data:i,loc:{start:{line:1,column:0},end:{line:6,column:11}}}))?r:"")+'<div id="contactsmenu-contacts"></div>\n'+(null!=(r=s(n,"if").call(a,null!=e?s(e,"contactsAppEnabled"):e,{name:"if",hash:{},fn:t.program(3,i,0),inverse:t.program(5,i,0),data:i,loc:{start:{line:8,column:0},end:{line:12,column:7}}}))?r:"")},useData:!0})},95386:function(t,e,n){var o=n(40202);t.exports=(o.default||o).template({compiler:[8,">= 4.3.0"],main:function(t,e,n,o,i){var r,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(r=null!=(r=a(n,"loadingText")||(null!=e?a(e,"loadingText"):e))?r:t.hooks.helperMissing)?r.call(null!=e?e:t.nullContext||{},{name:"loadingText",hash:{},data:i,loc:{start:{line:3,column:5},end:{line:3,column:20}}}):r)+"</h2>\n</div>\n"},useData:!0})},66115:function(t,e,n){var o=n(40202);t.exports=(o.default||o).template({compiler:[8,">= 4.3.0"],main:function(t,e,n,o,i){var r,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(r=null!=(r=u(n,"searchContactsText")||(null!=e?u(e,"searchContactsText"):e))?r:s)===l?r.call(a,{name:"searchContactsText",hash:{},data:i,loc:{start:{line:1,column:57},end:{line:1,column:79}}}):r)+'</label>\n<input id="contactsmenu-search" type="search" placeholder="'+c(typeof(r=null!=(r=u(n,"searchContactsText")||(null!=e?u(e,"searchContactsText"):e))?r:s)===l?r.call(a,{name:"searchContactsText",hash:{},data:i,loc:{start:{line:2,column:59},end:{line:2,column:81}}}):r)+'" value="'+c(typeof(r=null!=(r=u(n,"searchTerm")||(null!=e?u(e,"searchTerm"):e))?r:s)===l?r.call(a,{name:"searchTerm",hash:{},data:i,loc:{start:{line:2,column:90},end:{line:2,column:104}}}):r)+'">\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 i(t){var e=r(t);return n(e)}function r(t){if(!n.o(o,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return o[t]}i.keys=function(){return Object.keys(o)},i.resolve=r,t.exports=i,i.id=46700}},i={};function r(t){var e=i[t];if(void 0!==e)return e.exports;var n=i[t]={id:t,loaded:!1,exports:{}};return o[t].call(n.exports,n,n.exports,r),n.loaded=!0,n.exports}r.m=o,e=[],r.O=function(t,n,o,i){if(!n){var a=1/0;for(u=0;u<e.length;u++){n=e[u][0],o=e[u][1],i=e[u][2];for(var s=!0,l=0;l<n.length;l++)(!1&i||a>=i)&&Object.keys(r.O).every((function(t){return r.O[t](n[l])}))?n.splice(l--,1):(s=!1,i<a&&(a=i));if(s){e.splice(u--,1);var c=o();void 0!==c&&(t=c)}}return t}i=i||0;for(var u=e.length;u>0&&e[u-1][2]>i;u--)e[u]=e[u-1];e[u]=[n,o,i]},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,{a:e}),e},r.d=function(t,e){for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},r.j=4577,function(){r.b=document.baseURI||self.location.href;var t={4577:0};r.O.j=function(e){return 0===t[e]};var e=function(e,n){var o,i,a=n[0],s=n[1],l=n[2],c=0;if(a.some((function(e){return 0!==t[e]}))){for(o in s)r.o(s,o)&&(r.m[o]=s[o]);if(l)var u=l(r)}for(e&&e(n);c<a.length;c++)i=a[c],r.o(t,i)&&t[i]&&t[i][0](),t[i]=0;return r.O(u)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))}(),r.nc=void 0;var a=r.O(void 0,[7874],(function(){return r(39977)}));a=r.O(a)}(); +//# sourceMappingURL=core-login.js.map?v=b9a6004583ef314d39b5
\ No newline at end of file diff --git a/dist/core-login.js.map b/dist/core-login.js.map index 8ae60a78e0a..e518789c1ee 100644 --- a/dist/core-login.js.map +++ b/dist/core-login.js.map @@ -1 +1 @@ -{"version":3,"file":"core-login.js?v=84ef45f80b03f8681f46","mappings":";gBAAIA,4GC4BEC,EAAgB,CAAC,EACjBC,EAAe,oCCQrB,GAECC,sBAAuB,KAEvBC,+BAAgC,KAMhCC,WAAU,SAACC,GACVC,KAAKH,+BAAiCE,CACvC,EAYAE,KAAI,SAACC,EAAMH,GACNI,EAAAA,GAAAA,WAAaD,KAEhBH,EAAWG,EACXA,OAAOE,GAGHF,GAMLA,EAAKG,MAAK,WACLC,IAAEN,MAAM,GAAGO,SACdD,IAAEN,MAAM,GAAGO,SAASC,YAEpBC,EAAQC,MAAM,+CAEXV,OAASA,KAAKJ,wBACjBI,KAAKJ,sBAAwB,KAE/B,IACIG,GACHA,EAASY,OAENX,KAAKH,gCACRG,KAAKH,kCAnBLY,EAAQC,MAAM,yHAqBhB,EAcAE,SAAQ,SAACC,EAAMC,IACdA,EAAUA,GAAW,CAAC,GACdC,QAAS,EACjBD,EAAQE,QAAYF,EAAQE,QAAqCF,EAAQE,QAAlCC,EAAAA,GACvC,IAAMC,GAAQC,EAAAA,EAAAA,IAAYN,EAAMC,GAEhC,OADAI,EAAME,aAAab,SAAWW,EACvBZ,IAAEY,EAAME,aAChB,EAYAC,KAAI,SAACC,EAAMR,IAUVA,EAAUA,GAAW,CAAC,GACdE,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,SACpB,CAI0BC,CAAWJ,GAAOR,GAE5C,OADAI,EAAME,aAAab,SAAWW,EACvBZ,IAAEY,EAAME,aAChB,EASAO,WAAU,SAACL,GAMV,OALItB,KAAKJ,uBACRI,KAAKJ,sBAAsBY,YAE5BR,KAAKJ,uBAAwBuB,EAAAA,EAAAA,IAAYG,EAAM,CAAEN,QAASC,EAAAA,KAC1DjB,KAAKJ,sBAAsBwB,aAAab,SAAWP,KAAKJ,sBACjDU,IAAEN,KAAKJ,sBAAsBwB,aACrC,EAcAQ,cAAa,SAACN,EAAMR,IACnBA,EAAUA,GAAW,CAAC,GACdE,QAAUF,EAAQE,SAAWa,EAAAA,GACrC,IAAMX,GAAQC,EAAAA,EAAAA,IAAYG,EAAMR,GAEhC,OADAI,EAAME,aAAab,SAAWW,EACvBZ,IAAEY,EAAME,aAChB,EAQAU,SAAQ,WACP,OAAQxB,IAAE,YAAYyB,KAAK,aAAaC,MACzC,GCpJYC,EAA4B9B,EAAAA,GAAAA,UAAW,WACnD+B,EAAAA,cAA2BC,EAAE,OAAQ,6BACtC,GAAG,IAAU,CAAEC,UAAU,ICgGzB,EA3Ga,CACZC,yBAAwB,WAExB,EAQDC,eAAsB,SAASC,IACVA,GAAOjC,IAAE,iBACjBkC,YAAY,aAAanB,OACrCf,IAAE,gBAAgBmC,QAAQ,IAAInC,IAAAA,OAAQ,cACvC,EAQAgC,eAAsB,SAASC,IACVA,GAAOjC,IAAE,iBACjBL,OAAOyC,SAAS,aAC5BpC,IAAE,gBAAgBmC,QAAQ,IAAInC,IAAAA,OAAQ,cACvC,GClBA,SAASK,EAAKgC,EAAQC,EAAU9B,GACf,SAAX6B,GAAgC,WAAXA,IAAwBE,GAAAA,qBAAAA,gCAKlD/B,EAAUA,GAAW,CAAC,EACtBR,IAAAA,KAAO,CACNwC,KAAMH,EAAOI,cACbC,KAAKC,EAAAA,EAAAA,gBAAe,4CAA8CL,EAClEM,KAAMpC,EAAQoC,MAAQ,CAAC,EACvBC,QAASrC,EAAQqC,QACjBzC,MAAOI,EAAQJ,SAVfmC,GAAAA,qBAAAA,4BAAoD1C,EAAEiD,KAAKzC,EAAMX,KAAM2C,EAAQC,EAAU9B,GAY3F,CCpBO,IAAMuC,EAAYC,OAAOC,cAAgB,CAAC,EAMpCC,EAAY,CAIxBC,SAAU,SAASC,EAAKC,EAAKC,EAAc7D,IDyCrC,SAAkB2D,EAAKC,EAAKC,EAAc9C,IAChDA,EAAUA,GAAW,CAAC,GACdoC,KAAO,CACdU,aAAAA,GAGDjD,EAAK,MAAO,IAAM+C,EAAM,IAAMC,EAAK7C,EACpC,CC/CE2C,CAASC,EAAKC,EAAKC,EAAc,CAChCT,QAASpD,GAEX,EAKA8D,SAAU,SAASH,EAAKC,EAAKG,IDkDvB,SAAkBJ,EAAKC,EAAKG,EAAOhD,IACzCA,EAAUA,GAAW,CAAC,GACdoC,KAAO,CACdY,MAAAA,GAGDnD,EAAK,OAAQ,IAAM+C,EAAM,IAAMC,EAAK7C,EACrC,CCxDE+C,CAASH,EAAKC,EAAKG,EACpB,EAKAC,QAAS,SAAShE,IDCZ,SAAiBe,GACvBH,EAAK,MAAO,GAAIG,EACjB,CCFEiD,CAAQ,CACPZ,QAASpD,GAEX,EAKAiE,QAAS,SAASN,EAAK3D,IDGjB,SAAiB2D,EAAK5C,GAC5BH,EAAK,MAAO,IAAM+C,EAAK5C,EACxB,CCJEkD,CAAQN,EAAK,CACZP,QAASpD,GAEX,EAKAkE,UAAW,SAASP,EAAKC,ID0CnB,SAAmBD,EAAKC,EAAK7C,GACnCH,EAAK,SAAU,IAAM+C,EAAM,IAAMC,OC1ChCM,ED2CF,CC3CEA,CAAUP,EAAKC,EAChB,cCpDD,OAFkDvD,IAA5BkD,OAAOY,kBAAkCZ,OAAOY,2DCMhEC,EAAY,CACjBC,OAAQ,OACRC,OAAQ,YACRC,MAAO,YACPC,OAAQ,SACRC,KAAM,YAcP,SAASC,EAAoBC,EAAQC,GACpC,GAAIxE,EAAAA,GAAAA,QAAUuE,GACb,OAAOvE,EAAAA,GAAAA,IAAMuE,GAAQ,SAASE,GAC7B,OAAOH,EAAoBG,EAAWD,EACvC,IAED,IAAIE,EAAQ,CACXC,KAAMJ,EAAOI,MAsBd,OAnBA3E,EAAAA,GAAAA,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,EACtC,CACD,IAEKkB,EAAMM,KAEVN,EAAMM,GAAKC,EAAoBP,EAAMC,OAG/BD,CACR,CAQA,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,CACR,CAEA,SAASgB,EAAgBV,GACxB,OAAOA,GAAU,KAAOA,GAAU,GACnC,CA8CA,SAASW,EAAcC,EAAQ9E,EAAS+E,EAAOC,GAC9C,OAAOF,EAAOG,UACbjF,EAAQkC,IA9CV,SAA+CgD,EAAOrB,GACrD,IACIhB,EADAkB,EAAQ,CAAC,EAEb,IAAKlB,KAAOqC,EAAO,CAClB,IAAIC,EAActB,EAAchB,GAC5BG,EAAQkC,EAAMrC,GACbsC,IACJxF,EAAQyF,KAAK,0CAA4CvC,GACzDsC,EAActC,IAEXxD,EAAAA,GAAAA,UAAY2D,IAAU3D,EAAAA,GAAAA,SAAW2D,MAEpCA,EAAQ,GAAKA,GAEde,EAAMoB,GAAenC,CACtB,CACA,OAAOe,CACR,CA8BEsB,CAAsCN,EAAMO,QAAStF,EAAQ6D,eAC7DmB,GACCO,MAAK,SAAS3B,GACXgB,EAAgBhB,EAAOM,QACtB7E,EAAAA,GAAAA,WAAaW,EAAQqC,UAGxBrC,EAAQqC,QAAQ0C,EAAMS,UAEbnG,EAAAA,GAAAA,WAAaW,EAAQJ,QAC/BI,EAAQJ,MAAMgE,EAEhB,GAED,CA2DO,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,GAAAA,OAAS,CACvB,OAAQ,IACR,yBAA0B,MACxBW,EAAQgG,eAAiB,CAAC,KAE9BlB,EAAOmB,WAAa,WACnB,OAAOjG,EAAQkC,GAChB,EACA,IAAI8C,EAAU3F,EAAAA,GAAAA,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,GAAAA,OAASW,EAAQ6D,gBAAkB,GACnC7D,EAAQoG,MACRpB,GACCO,MAAK,SAASc,GACf,GAAIzB,EAAgByB,EAASnC,SAC5B,GAAI7E,EAAAA,GAAAA,WAAaW,EAAQqC,SAAU,CAClC,IAAIiE,EAAejH,EAAAA,GAAAA,OAASW,EAAQ6D,eAChC0C,EAAU5C,EAAoB0C,EAASG,KAAMF,GAC7CtG,EAAQoG,MAAQ,GAEnBG,EAAQE,QAGTzG,EAAQqC,QAAQkE,EAEjB,OACUlH,EAAAA,GAAAA,WAAaW,EAAQJ,QAC/BI,EAAQJ,MAAMyG,EAEhB,GACD,CA8FSK,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,GAAAA,WAAaW,EAAQJ,QACxBI,EAAQJ,MAAMgE,EAMjB,GACD,CA4DSgD,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,GAAAA,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,EAEjB,CAEA,GAAsB,MAAlBjD,EAAOM,OAAgB,CAC1B,IAAIoC,EAAejH,EAAAA,GAAAA,OAASW,EAAQ6D,eACpC7D,EAAQqC,QAAQsB,EAAoBC,EAAO4C,KAAMF,GAClD,MACCtG,EAAQqC,QAAQuB,EAAO4C,KAEzB,OAzBKnH,EAAAA,GAAAA,WAAaW,EAAQJ,QACxBI,EAAQJ,MAAMgE,EAyBjB,GACD,CAwBSqD,CAAWnC,EAAQ9E,EAAS+E,EAAOC,EAE5C,EC5NCkC,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,GAAAA,OAAS0F,EAAO,QA7O/B,WACC,MAAM,IAAI0C,MAAM,iDACjB,CA2OyCC,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,GAAAA,WAAawE,GAChBsD,EAAOtD,cAAgBA,EAAchE,KAAKkF,GAE1CoC,EAAOtD,cAAgBA,GAIzBsD,EAAOtD,cAAgBxE,EAAAA,GAAAA,OAAS8H,EAAOtD,eAAiB,CAAC,EAAG7D,EAAQ6D,eAEhExE,EAAAA,GAAAA,YAAcW,EAAQoG,SAExBpG,EAAQoG,MADLgB,EACa,EAEA,EAGnB,CAGA,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,EAE/C,EAGA,IAAIjB,EAAM/G,EAAQ+G,IAAMtB,EAASI,QAAQxG,EAAAA,GAAAA,OAAS8H,EAAQnH,GAAU+E,GAEpE,OADAA,EAAMpD,QAAQ,UAAWoD,EAAOgC,EAAK/G,GAC9B+G,CACR,CAAC,CCvSSG,CAAQzB,KAGlB,mBCVA,EAFejD,OAAO0F,YAAc,CAAC,aCY/BC,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,EAE7B,IAOKC,EAAoB1B,EAAAA,WAAAA,OAAkB,CAC3CtC,MAAOoD,IAOFa,EAAmBC,EAAAA,KAAAA,OAAY,CAGpCC,iBAAa5J,EAGb6J,UAAW,GAGXC,QAAS,KAMTR,WAAY,SAAS5I,GACpBd,KAAKgK,YAAclJ,EAAQwH,UAC5B,EAKA6B,OAAQ,WACP,IAAIC,EAAOpK,KAcX,OAbAoK,EAAK7H,IAAI1B,KAAK,IACduJ,EAAKH,UAAY,GAEjBG,EAAKJ,YAAYK,SAAQ,SAASC,GACjC,IAAIC,EAAO,IAAIC,EAAqB,CACnC3E,MAAOyE,IAERC,EAAKJ,SACLC,EAAK7H,IAAIkI,OAAOF,EAAKhI,KACrBgI,EAAKG,GAAG,oBAAqBN,EAAKO,yBAA0BP,GAC5DA,EAAKH,UAAUW,KAAKL,EACrB,IAEOH,CACR,EAQAO,yBAA0B,SAASE,GAClC7K,KAAKiK,UAAUI,SAAQ,SAASS,GAC/BA,EAAKrI,QAAQ,2BAA4BoI,EAC1C,GACD,IAOKL,EAAuBT,EAAAA,KAAAA,OAAY,CAGxCgB,UAAW,UAGXb,QAAS,KAGTc,eAAW5K,EAGX6K,YAAQ7K,EAGR8K,kBAAkB,EAElBC,OAAQ,CACP,mBAAoB,wBAGrBC,gBAAiBC,EAAQ,OAMzBC,SAAU,SAASpI,GAClB,OAAOlD,KAAKoL,gBAAgBlI,EAC7B,EAMAwG,WAAY,SAAS5I,GACpBd,KAAKiL,OAASnK,EAAQ+E,MACtB7F,KAAK0K,GAAG,2BAA4B1K,KAAKuL,yBAA0BvL,KACpE,EAKAmK,OAAQ,WASP,OARAnK,KAAKuC,IAAI1B,KAAKb,KAAKsL,SAAS,CAC3BhB,QAAStK,KAAKiL,OAAO3E,YAEtBtG,KAAKwL,iBAGLxL,KAAKM,EAAE,cAAcmL,iBAAiBzL,KAAKiL,OAAOtB,IAAI,aAE/C3J,IACR,EAQA0L,qBAAsB,WACrB1L,KAAKkL,kBAAoBlL,KAAKkL,iBAC1BlL,KAAKkL,iBACRlL,KAAKM,EAAE,SAASe,OAEhBrB,KAAKM,EAAE,SAASL,OAEjBD,KAAKyC,QAAQ,oBAAqBzC,KAAKuC,IACxC,EAOAgJ,yBAA0B,SAASV,GAC9B7K,KAAKuC,IAAIoJ,GAAGd,KAIhB7K,KAAKkL,kBAAmB,EACxBlL,KAAKM,EAAE,SAASL,OACjB,IAOK2L,EAAmB7B,EAAAA,KAAAA,OAAY,CAGpC8B,sBAAkBzL,EAGlB0L,oBAAgB1L,EAGhB2L,sBAAkB3L,EAGlB4L,uBAAmB5L,EAGnB6L,eAAW7L,EAGX8L,YAAa,GAEbf,OAAQ,CACP,6BAA8B,aAG/BgB,UAAW,CACVC,QAASf,EAAQ,OACjB3K,MAAO2K,EAAQ,OACfgB,KAAMhB,EAAQ,OACdiB,KAAMjB,EAAQ,QAMfkB,UAAWpM,EAAAA,GAAAA,UAAW,SAASqM,GAC9B,IAAIC,EAAazM,KAAKM,EAAE,wBAAwBoM,MAK5CD,IAAezM,KAAKkM,cACvBlM,KAAKyC,QAAQ,SAAUzC,KAAKM,EAAE,wBAAwBoM,OACtD1M,KAAKkM,YAAcO,EAErB,GAAG,KAMHE,gBAAiB,SAASzJ,GACzB,OAAOlD,KAAKmM,UAAUC,QAAQlJ,EAC/B,EAMA0J,cAAe,SAAS1J,GACvB,OAAOlD,KAAKmM,UAAUzL,MACrBP,EAAAA,GAAAA,OAAS,CACR0M,iBAAkB1K,EAAE,OAAQ,iCAC1Be,GAEL,EAMA4J,gBAAiB,SAAS5J,GACzB,OAAOlD,KAAKmM,UAAUE,KACrBlM,EAAAA,GAAAA,OAAS,CACR4M,mBAAoB5K,EAAE,OAAQ,sBAC5Be,GAEL,EAMA8J,iBAAkB,SAAS9J,GAC1B,OAAOlD,KAAKmM,UAAUG,KACrBnM,EAAAA,GAAAA,OAAS,CACR8M,oBAAqB9K,EAAE,OAAQ,qBAC/B+K,oBAAqB/K,EAAE,OAAQ,uBAC/BgL,oBAAqBhL,EAAE,OAAQ,6BAC7Be,GAEL,EAMAwG,WAAY,SAAS5I,GACpBd,KAAKc,QAAUA,CAChB,EAMAsM,YAAa,SAAS9L,GACrBtB,KAAKmK,SACLnK,KAAKiM,eAAY7L,EACjBJ,KAAKM,EAAE,YAAYO,KAAKb,KAAK2M,gBAAgB,CAC5CU,YAAa/L,IAEf,EAKAgM,UAAW,WACVtN,KAAKmK,SACLnK,KAAKiM,eAAY7L,EACjBJ,KAAKM,EAAE,YAAYO,KAAKb,KAAK4M,gBAC9B,EAOAW,aAAc,SAASC,EAAUf,GAChCzM,KAAKiM,UAAYuB,EAASC,SAC1BzN,KAAKmK,OAAO,CACXsD,SAAUD,EAASC,WAGpB,IAAInB,EAAO,IAAIxC,EAAiB,CAC/BxB,WAAYkF,EAASC,WAEtBnB,EAAKnC,SACLnK,KAAKM,EAAE,YAAYO,KAAKb,KAAKgN,iBAAiB,CAC7CS,SAAUD,EAASC,SACnBhB,WAAYA,EACZiB,mBAAoBF,EAASE,mBAC7BC,eAAgB9K,GAAAA,YAAe,kBAC/B+K,cAAe/K,GAAAA,cACfgL,mBAAoBhL,GAAAA,YAAe,qCAEpC7C,KAAKM,EAAE,0BAA0BO,KAAKyL,EAAK/J,IAC5C,EAMA4H,OAAQ,SAASjH,GAChB,IAAI4K,EAAY9N,KAAKM,EAAE,wBAAwBoM,MAM/C,OALA1M,KAAKuC,IAAI1B,KAAKb,KAAK8M,gBAAgB5J,IAGnClD,KAAKM,EAAE,wBAAwBoM,IAAIoB,GACnC9N,KAAKM,EAAE,wBAAwByN,QACxB/N,IACR,IAUKgO,EAAe,SAASlN,GAC7Bd,KAAK0J,WAAW5I,EACjB,EAEAkN,EAAapF,UAAY,CAExBrG,SAAKnC,EAGL6N,WAAO7N,EAGP8N,sBAAkB9N,EAOlBsJ,WAAY,SAAS5I,GACpBd,KAAKuC,IAAMjC,IAAEQ,EAAQqN,IAErBnO,KAAKiO,MAAQ,IAAIrC,EAAiB,CACjCuC,GAAInO,KAAKuC,MAGVvC,KAAKiO,MAAMvD,GAAG,UAAU,SAAS+B,GAChCzM,KAAKoO,aAAa3B,EACnB,GAAGzM,KACJ,EAOAqO,aAAc,SAAS5B,GACtB,IAAIzJ,EAAMH,GAAAA,YAAe,0BACzB,OAAOyL,QAAQC,QAAQjO,IAAAA,KAAO0C,EAAK,CAClCL,OAAQ,OACRO,KAAM,CACLsL,OAAQ/B,KAGX,EAMA2B,aAAc,SAAS3B,GACtB,IAAIrC,EAAOpK,KAaX,OAXKoK,EAAK8D,mBACT9D,EAAK8D,iBAAmB9D,EAAKiE,aAAa5B,IAGvCtM,EAAAA,GAAAA,YAAcsM,IAA8B,KAAfA,EAChCrC,EAAK6D,MAAMb,YAAYjL,EAAE,OAAQ,4BAEjCiI,EAAK6D,MAAMb,YAAYjL,EAAE,OAAQ,uBAAwB,CACxDsM,KAAMhC,KAGDrC,EAAK8D,iBAAiB7H,MAAK,SAASnD,GAE1CA,EAAKuK,SAAW,IAAI5D,EAAkB3G,EAAKuK,UAE3CrD,EAAK6D,MAAMV,aAAarK,EAAMuJ,EAC/B,IAAG,SAASD,GACXpC,EAAK6D,MAAMX,YACX7M,EAAQC,MAAM,2CAA4C8L,EAC3D,IAAGnG,MAAK,kBAGA+D,EAAK8D,gBACb,IAAGQ,MAAMjO,EAAQC,MAAM0C,KAAKpD,MAC7B,GAGD,QC7bM2O,EAASC,SACbC,qBAAqB,QAAQ,GAC7BC,aAAa,aACTC,EAAcH,SAClBC,qBAAqB,QAAQ,GAC7BC,aAAa,yBAEFE,OAAyB5O,IAAXuO,GAAuBA,4xBC9BlD,IC6BA,GAICM,ODX0B,GAK1B,0GAAc,SACbxO,EAAQyF,KAAK,sEACd,KEAYgJ,GAAmB,SAACC,GAChC,MAAmB,UAAfA,EAAMrM,MAGS,YAAfqM,EAAMrM,MAAoC,UAAdqM,EAAMxL,GAIvC,ujBCmBA,IA0iCgB,GCnkCYyL,GAAQC,GAC/BC,GDwBCC,GAAU,CAEfC,eAAgB,GAChBC,WAAY,GAEZC,uBAAwB,EACxBC,qBAAsB,EACtBC,qBAAsB,EACtBC,0BAA2B,EAC3BC,uBAAwB,EAGxBC,eAAgB,EAShBC,MAAO,SAAS1O,EAAM2O,EAAOlQ,EAAUmQ,GACtClQ,KAAKmQ,QACJ7O,EACA2O,EACA,QACAV,GAAQa,UACRrQ,EACAmQ,EAEF,EAQAG,KAAM,SAAS/O,EAAM2O,EAAOlQ,EAAUmQ,GACrClQ,KAAKmQ,QAAQ7O,EAAM2O,EAAO,OAAQV,GAAQa,UAAWrQ,EAAUmQ,EAChE,EAUAI,QAAS,SAAShP,EAAM2O,EAAOlQ,EAAUmQ,GACxC,OAAOlQ,KAAKmQ,QACX7O,EACA2O,EACA,SACAV,GAAQC,eACRzP,EACAmQ,EAEF,EAUAK,mBAAoB,SAASjP,EAAM2O,EAAOO,EAASzQ,EAAUmQ,GAC5D,OAAOlQ,KAAKmQ,QACX7O,EACA2O,EACA,OACAO,EACAzQ,OACUK,IAAV8P,GAA6BA,EAE/B,EASAO,YAAa,SAASnP,EAAM2O,EAAOlQ,EAAUmQ,GAC5C,OAAOlQ,KAAKmQ,QACX7O,EACA2O,EACA,SACAV,GAAQC,eACRzP,EACAmQ,GACA,EAEF,EAWAQ,OAAQ,SAASpP,EAAM2O,EAAOlQ,EAAUmQ,EAAOS,EAAMC,GACpD,OAAOtQ,IAAAA,KAAON,KAAK6Q,uBAAuBxK,MAAK,SAASyK,GACvD,IAAIC,EAAa,aAAexB,GAAQQ,eAAiB,WACrDiB,EAAW,IAAMD,EACjBE,EAAOH,EAAMI,WAAW,CAC3BC,YAAaJ,EACbd,MAAOA,EACPE,QAAS7O,EACTwB,KAAM,WAEHsO,EAAQ9Q,IAAE,YACd8Q,EAAMC,KAAK,OAAQT,EAAW,WAAa,QAAQS,KAAK,KAAMN,EAAa,UAAUM,KAAK,cAAeV,GACzG,IAAIW,EAAQhR,IAAE,YAAY+Q,KAAK,MAAON,EAAa,UAAUzP,KAAKqP,EAAO,MACzEM,EAAKxG,OAAO6G,GACZL,EAAKxG,OAAO2G,QACEhR,IAAV8P,IACHA,GAAQ,GAET5P,IAAE,QAAQmK,OAAOwG,QAKA7Q,IAAbL,IACHA,EAAWI,EAAAA,GAAAA,KAAOJ,IAGnB,IAAIwR,EAAa,CAAC,CACjBjQ,KAAMa,EAAE,OAAQ,MAChBqP,MAAO,gBACWpR,IAAbL,GAEHA,GAAS,EAAOqR,EAAM1E,OAEvBpM,IAAE0Q,GAAUS,SAAS,QACtB,GACE,CACFnQ,KAAMa,EAAE,OAAQ,OAChBqP,MAAO,gBACWpR,IAAbL,GAEHA,GAAS,EAAMqR,EAAM1E,OAEtBpM,IAAE0Q,GAAUS,SAAS,QACtB,EACAC,eAAe,IAGhBpR,IAAE0Q,GAAUS,SAAS,CACpBE,eAAe,EACfzB,MAAOA,EACPM,QAASe,EACTK,MAAO,gBAEWxR,IAAbL,GAEHA,GAAS,EAAOqR,EAAM1E,MAExB,IAED0E,EAAMrD,QACNwB,GAAQQ,gBACT,GACD,EAqBA8B,WAAY,SAAS5B,EAAOlQ,EAAU+R,EAAaC,EAAgB7B,EAAOpN,EAAMkP,EAAMlR,GACrF,IAAIsJ,EAAOpK,KAKX,GAHAA,KAAK6R,WAAWI,UAAY,OAC5BjS,KAAK6R,WAAWK,UAAY,OAExBlS,KAAK6R,WAAWzF,QAApB,MAIahM,IAAT0C,IACHA,EAAO9C,KAAK0P,wBAGb,IAAIyC,EAAYhQ,EAAE,OAAQ,oBACtBiQ,EAAUjQ,EAAE,QAAS,cACrBW,IAAS9C,KAAK4P,sBAAwB9M,IAAS9C,KAAK2P,sBAAwB7M,IAAS9C,KAAK6P,4BAC7FsC,EAAYhQ,EAAE,OAAQ,+BAGvBnC,KAAK6R,WAAWzF,SAAU,EAC1BpM,KAAK6R,WAAWQ,YAAeC,EAAIC,SAAWD,EAAIC,QAAQC,WAAaF,EAAIC,QAAQC,UAAUC,SAAYH,EAAIC,QAAQC,UAAUC,SAASJ,YAAcxP,GAAAA,MAAAA,YAEtJ7C,KAAK0S,SAAW,KAChBV,EAAOA,GAAQ,GACflR,EAAU2F,OAAOC,OAAO,CACvBiM,uBAAuB,GACrB7R,GAEHR,IAAAA,KAAON,KAAK4S,0BAA0BvM,MAAK,SAASyK,GAAO,QAC1D1G,EAAKyH,WAAWzF,SAAU,EAEtBhC,EAAKyI,aACRzI,EAAKyI,YAAYpB,SAAS,SAGvBM,UACHA,EAAiB,IAEc,iBAApBA,IACXA,EAAiB,CAACA,IAGnB3H,EAAKyI,YAAc/B,EAAMI,WAAW,CACnCC,YAbgB,+BAchBlB,MAAOA,EACP6C,UAAWX,EACXY,QAASX,EACTY,QAAS7Q,EAAE,OAAQ,QACnB8Q,QAAS9Q,EAAE,OAAQ,QACnB+Q,YAAa/Q,EAAE,OAAQ,cACrBe,KAAK,OAAQ8O,GAAM9O,KAAK,cAAe4O,GAAa5O,KAAK,WAAY6O,GAAgB7O,KAAK,wBAAyBpC,EAAQ6R,uBAC/F,mBAApB7R,EAAQ0N,QAClBpE,EAAKyI,YAAY3P,KAAK,SAAUpC,EAAQ0N,aAG3BpO,IAAV8P,IACHA,GAAQ,QAEW9P,IAAhB0R,IACHA,GAAc,GAGfxR,IAAiB,QAAhB,EAAQ,QAAR,EAACQ,SAAO,aAAP,EAASqS,cAAM,QAAI,QAAQC,QAAQhJ,EAAKyI,aAE1CzI,EAAKiJ,cAAgB/S,IAAE,8BACvB8J,EAAKiJ,cAAc3I,GAAG,iBAAiB,SAASyE,GAC3CD,GAAiBC,IACpB/E,EAAKkJ,mBAEP,IACAlJ,EAAKmJ,mBAEL,IAAIC,EAAYpJ,EAAKyI,YAAY9Q,KAAK,kCAClCe,IAASsH,EAAKsF,wBAA2B5O,EAAQ6R,uBACpDvI,EAAKyI,YAAY9Q,KAAK,sBAAsB9B,OAE7CuT,EAAU9I,GAAG,SAAS,WACrBN,EAAKyI,YAAYpB,SAAS,oBAAoB,SAAStC,GACtDA,EAAMsE,2BACNtE,EAAMuE,iBACNF,EAAUhC,OACX,GACD,IACAgC,EAAU9I,GAAG,QAAQ,WACpBN,EAAKyI,YAAYpB,SAAS,qBAC3B,IAEA5O,GAAAA,aAAgB2Q,EAAWpJ,EAAKyI,YAAY9Q,KAAK,UAAU,WAC1D4R,EAAOC,QAAQ,QACfD,EAAO5F,QACP3D,EAAKyI,YAAYpB,SAAS,oBAAoB,SAAStC,GACtDA,EAAMsE,2BACNtE,EAAMuE,iBACNtJ,EAAKyI,YAAYgB,QAClB,IACA,IAAIC,EAAUH,EAAOjH,MACjBqH,EAAUD,EAAQE,YAAY,MACjB,IAAbD,IACHA,EAAUD,EAAQ9R,QAEnB2R,EAAOM,YAAY,EAAGF,EACvB,IACA,IAAIG,EAAQ9J,EAAKyI,YAAY9Q,KAAK,iBAC9B4R,EAASO,EAAMnS,KAAK,sBACpBoS,EAAUD,EAAMnS,KAAK,wBACzB4R,EAAOjJ,GAAG,WAAW,SAASyE,GACzBD,GAAiBC,KACpBA,EAAMsE,2BACNtE,EAAMuE,iBACNQ,EAAML,SAER,IACAM,EAAQzJ,GAAG,SAAS,SAASyE,GAC5BA,EAAMsE,2BACNtE,EAAMuE,iBACNQ,EAAML,QACP,IAyDAK,EAAMxJ,GAAG,UAAU,SAASyE,GAI3B,GAHAA,EAAMiF,kBACNjF,EAAMuE,iBA9BU,WAChB,IAAIW,EAAWV,EAAOjH,MACtB,IACC,GAnBoB,SAAUiE,GAC/B,IAAI2D,EAAc3D,EAAK4D,OACvB,GAAoB,MAAhBD,GAAuC,OAAhBA,EAE1B,MAAMnS,EAAE,QAAS,oCAAqC,CAACwO,KAAMA,IACvD,GAA2B,IAAvB2D,EAAYtS,OACtB,MAAMG,EAAE,QAAS,8BACX,IAAkC,IAA9BmS,EAAYhP,QAAQ,KAC9B,MAAMnD,EAAE,QAAS,0CACX,GAAOmS,EAAYE,MAAM3R,GAAAA,OAAAA,uBAC/B,MAAMV,EAAE,QAAS,sCAAuC,CAACwO,KAAMA,IAGhE,OAAO,CACR,CAKO8D,CAAgBJ,GAEd,IAAIjK,EAAKsI,SAAS3Q,MAAK,SAAS2S,GACtC,OAAOA,EAAK/D,OAAS3Q,IACtB,GAAGqU,GACF,MAAMlS,EAAE,QAAS,2BAA4B,CAAE2R,QAASO,QAAYjU,EAAW,CAC9EuU,QAAQ,IAGT,OAAO,CACR,CACD,CAAE,MAAOjU,GACRiT,EAAOtC,KAAK,QAAS3Q,GACrBiT,EAAOC,QAAQ,CACdgB,UAAW,QACXnS,QAAS,SACT,UAAa,mBAEdkR,EAAOC,QAAQ,aACfD,EAAOC,QAAQ,QACfD,EAAOjR,SAAS,QACjB,CACA,OAAO,CACR,CAMKmS,GAAc,CACjB,IAAIC,EAAUnB,EAAOjH,MACrBtC,EAAKyH,WAAWQ,YAAY0C,gBAAgB3K,EAAKyI,YAAY3P,KAAK,QAAU,IAAM4R,GAASE,QAAO,SAAUhQ,GAC3GoF,EAAK6K,gBAAgB7K,EAAKyI,YAAY3P,KAAK,QAAU,IAAM4R,EAAShS,EACrE,IACAD,GAAAA,YACAuH,EAAKyI,YAAYpB,SAAS,sBAC1BrH,EAAKyI,YAAYrB,QACjBmC,EAAOjH,IAAI0F,EACZ,CACD,IACAuB,EAAOjJ,GAAG,SAAS,SAASyE,GAC3BwE,EAAOC,QAAQ,OAChB,IAEAxJ,EAAKyI,YAAYqC,OAAM,WACtB9K,EAAK+K,gBAAkB/K,EAAKyI,YAAY9Q,KAAK,sBAC7CqI,EAAKgL,UAAYhL,EAAKyI,YAAY9Q,KAAK,mBACvCqI,EAAKiL,mBAAqBjL,EAAKyI,YAAY9Q,KAAK,uBAChDqI,EAAKkL,SAAWlL,EAAKyI,YAAY9Q,KAAK,YACtCqI,EAAKkL,SAAS5K,GAAG,gBAAiB,uBAAwBN,GAAM,SAAS+E,GACpED,GAAiBC,IACpB/E,EAAKmL,sBAAsBpG,EAAOrM,EAEpC,IACAsH,EAAKgL,UAAU1K,GAAG,gBAAiB,MAAM,SAASyE,GAC7CD,GAAiBC,IACpB/E,EAAKoL,mBAAmBrG,EAAO7O,IAAEN,MAAO8C,EAE1C,IACAsH,EAAK+K,gBAAgBzK,GAAG,gBAAiB,KAAK,SAASyE,GACtD,GAAID,GAAiBC,GAAQ,CAC5B,IAAIsG,EAAMrL,EAAKyI,YAAY3P,KAAK,QAChCkH,EAAKyH,WAAWI,UAAY3R,IAAE6O,EAAMuG,eAAexS,KAAK,QACxDkH,EAAKyH,WAAWK,UAA0C,QAA9B9H,EAAKyH,WAAWK,UAAsB,OAAS,MAC3E9H,EAAK6K,gBAAgBQ,EAAK3S,EAC3B,CACD,IACAsH,EAAK6K,gBAAgBjD,EAAMlP,EAC5B,IAGA,IAAI6S,EAAiB,SAASC,GAC7B,QAAiBxV,IAAbL,EAAwB,CAC3B,IAAI8V,EACJ,IAAoB,IAAhB/D,EACH+D,EAAW,GACXzL,EAAKgL,UAAUrT,KAAK,kCAAkC1B,MAAK,SAASyV,EAAOC,GAC1EF,EAASjL,KAAKR,EAAKyI,YAAY3P,KAAK,QAAU,IAAM5C,IAAEyV,GAAS7S,KAAK,aACrE,QACM,CACN2S,EAAWzL,EAAKyI,YAAY3P,KAAK,QACjC,IAAI8S,EAAe5L,EAAKgL,UAAUrT,KAAK,kCAAkCmB,KAAK,aAC1E8S,IACHH,GAAY,IAAMG,EAEpB,CACAjW,EAAS8V,EAAUD,GACnBxL,EAAKyI,YAAYpB,SAAS,QAC3B,CACD,EAcIF,EAAa,GACbzO,IAASyM,GAAQG,uBACpB6B,EAAW3G,KAAK,CACftJ,KAAMa,EAAE,OAAQ,UAChBqP,MAhBmB,WACpBmE,EAAepG,GAAQG,uBACxB,EAeEgC,eAAe,IAEN5O,IAASyM,GAAQO,uBAC3BhP,EAAQ0P,QAAQnG,SAAQ,SAAS4L,GAChC1E,EAAW3G,KAAK,CACftJ,KAAM2U,EAAO3U,KACbkQ,MAAO,WACNmE,EAAeM,EAAOnT,KACvB,EACA4O,cAAeuE,EAAOvE,eAExB,KAEI5O,IAASyM,GAAQK,sBAAwB9M,IAASyM,GAAQM,2BAC7D0B,EAAW3G,KAAK,CACftJ,KAAMa,EAAE,OAAQ,QAChBqP,MA7BgB,WAClBmE,EAAepG,GAAQK,qBACxB,EA4BG8B,eAAe,IAGb5O,IAASyM,GAAQI,sBAAwB7M,IAASyM,GAAQM,2BAC7D0B,EAAW3G,KAAK,CACftJ,KAAMa,EAAE,OAAQ,QAChBqP,MAhCgB,WAClBmE,EAAepG,GAAQI,qBACxB,EA+BG+B,eAAe,KAKlBtH,EAAKyI,YAAYpB,SAAS,CACzBE,eAAe,EAEfuE,MAAO,IACPC,OAAQ,IACRjG,MAAOA,EACPM,QAASe,EACT6E,MAAO,CACN5F,QAAS,SAEVoB,MAAO,WACN,IACCtR,IAAEN,MAAMyR,SAAS,WAAW4E,QAC7B,CAAE,MAAO7J,GACT,CACApC,EAAKyI,YAAc,IACpB,IAKD,IACIyD,EADclM,EAAKyI,YAAY0D,QAAQ,cACLxU,KAAK,aACgC,IAAvEqI,EAAKyI,YAAY3P,KAAK,YAAYoC,QAAQ,yBAAkC8E,EAAKyI,YAAY3P,KAAK,yBACrGoT,EAAoBE,KAAK,YAAY,GAErCF,EAAoBE,KAAK,YAAY,EAEvC,IACEC,MAAK,SAASzR,EAAQtE,GAGtB0J,EAAKyH,WAAWzF,SAAU,EACX,IAAXpH,GACHgL,MAAM7N,EAAE,OAAQ,8CAA+C,CAAEzB,MAAOA,IAE1E,GA1TD,CA2TD,EAKAyP,QAAS,SAASuG,EAASzG,EAAO0G,EAAYnG,EAASzQ,EAAUmQ,EAAO0G,GACvE,OAAOtW,IAAAA,KAAON,KAAK6Q,uBAAuBxK,MAAK,SAASyK,GACvD,IAAIC,EAAa,aAAexB,GAAQQ,eAAiB,WACrDiB,EAAW,IAAMD,EACjBE,EAAOH,EAAMI,WAAW,CAC3BC,YAAaJ,EACbd,MAAOA,EACPE,QAASuG,EACT5T,KAAM6T,GACJC,EAAY,CAAEC,eAAgB,IAAO,CAAC,QAC3BzW,IAAV8P,IACHA,GAAQ,GAET5P,IAAE,QAAQmK,OAAOwG,GACjB,IAAIM,EAAa,GACjB,OAAQf,GACR,KAAKjB,GAAQC,eACZ+B,EAAa,CAAC,CACbjQ,KAAMa,EAAE,OAAQ,MAChBqP,MAAO,gBACWpR,IAAbL,GACHA,GAAS,GAEVO,IAAE0Q,GAAUS,SAAS,QACtB,GAED,CACCnQ,KAAMa,EAAE,OAAQ,OAChBqP,MAAO,gBACWpR,IAAbL,GACHA,GAAS,GAEVO,IAAE0Q,GAAUS,SAAS,QACtB,EACAC,eAAe,IAEhB,MACD,KAAKnC,GAAQa,UAOZmB,EAAW,GAAK,CACfjQ,KAAMa,EAAE,OAAQ,MAChBqP,MARoB,WACpBlR,IAAE0Q,GAAUS,SAAS,cACJrR,IAAbL,GACHA,GAEF,EAIC2R,eAAe,GAEhB,MACD,QACyB,WAApB,GAAOlB,IACFA,EAAQ1N,OACVyM,GAAQC,iBACZ+B,EAAa,CAAC,CACbjQ,KAAMkP,EAAQsG,QAAU3U,EAAE,OAAQ,MAClCqP,MAAO,gBACWpR,IAAbL,GACHA,GAAS,GAEVO,IAAE0Q,GAAUS,SAAS,QACtB,GAEA,CACCnQ,KAAMkP,EAAQF,SAAWnO,EAAE,OAAQ,OACnCqP,MAAO,gBACWpR,IAAbL,GACHA,GAAS,GAEVO,IAAE0Q,GAAUS,SAAS,QACtB,EACAC,eAAe,EACfqF,QAASvG,EAAQwG,kBAQvB1W,IAAE0Q,GAAUS,SAAS,CACpBE,eAAe,EACfsF,cAAe,WAAQlX,GAAYA,GAAS,EAAO,EACnDmQ,MAAOA,EACPM,QAASe,IAEVhC,GAAQQ,gBACT,IACE0G,MAAK,SAASzR,EAAQtE,GAGP,IAAXsE,EACHgL,MAAMC,EAAQ,KAAOyG,GAErB1G,MAAM7N,EAAE,OAAQ,0CAA2C,CAAEzB,MAAOA,IAEtE,GACF,EACAwW,kBAAkB,EASlBC,WAAY,SAASjU,EAAMkU,EAAUC,EAAaC,GACjD,IAAIlN,EAAOpK,KACPuX,EAAiB,IAAIjX,IAAAA,UAkErBkX,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,GACtD3U,EAAO8U,EAAI9U,KACXkV,EAAQD,EAAKjV,KACbmV,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,EAAS3V,EAAU,GAF3B0W,EAAK,GAAKD,EAAKN,EAAK3B,KAGpBqB,GAAiBF,EAEb3V,EAAK0W,EAAK,GAAK,MAAOf,EAASA,EAAS3V,EAAK0W,EAAK,GAAK,KAC3DZ,GAAQH,EAAS3V,EAAK0W,GACtBX,GAAQJ,EAAS3V,EAAK0W,EAAK,GAC3BV,GAAQL,EAAS3V,EAAK0W,EAAK,GAC3Bd,GAAWD,EAGd,CAEDT,EAAMQ,GAAMI,EAAOF,EACnBV,EAAMQ,EAAK,GAAKK,EAAOH,EACvBV,EAAMQ,EAAK,GAAKM,EAAOJ,EACvBV,EAAMQ,EAAK,GAAKO,EAAOJ,CACxB,CAEDtB,EAAOQ,WAAW,MAAM8B,UAAU,EAAG,EAAGjC,KAAKkC,IAAItC,EAAGE,GAAKE,KAAKkC,IAAIrC,EAAGE,IACrEJ,EAAOvB,MAAQ0B,EACfH,EAAOtB,OAAS0B,EAChBJ,EAAOQ,WAAW,MAAMgC,aAAa9B,EAAM,EAAG,EAC/C,EAEI+B,EAAc,SAASC,EAAY/C,EAAUC,GAEhD,IAAI+C,EAAYD,EAAWpY,KAAK,aAAasY,QAAQ7X,YAAY,YAAYE,SAAS,YAClF4X,EAAeF,EAAUrY,KAAK,aAC9BwY,EAAkBH,EAAUrY,KAAK,gBAErCqY,EAAUlX,KAAK,OAAQA,GAEvBkX,EAAUrY,KAAK,aAAaT,KAAK8V,EAASzG,MAC1C2J,EAAavY,KAAK,SAAST,KAAKuB,GAAAA,KAAAA,cAAsBuU,EAASoD,OAC/DF,EAAavY,KAAK,UAAUT,KAAKuB,GAAAA,KAAAA,WAAmBuU,EAASqD,QAEzDpD,EAAYmD,MAAQnD,EAAYqD,eACnCH,EAAgBxY,KAAK,SAAST,KAAKuB,GAAAA,KAAAA,cAAsBwU,EAAYmD,OACrED,EAAgBxY,KAAK,UAAUT,KAAKuB,GAAAA,KAAAA,WAAmBwU,EAAYqD,gBAEpE,IAAI1I,EAAOoF,EAASuD,UAAY,IAAMvD,EAASzG,KAC3CiK,EAAU,CACblG,KAAM1C,EACN6I,EAAG,GACHC,EAAG,GACHC,EAAG3D,EAAS4D,KACZC,UAAW,GAERC,EAAcC,MAAMC,mBAAmBR,GAE3CM,EAAcA,EAAYG,QAAQ,KAAM,OACxCf,EAAavY,KAAK,SAASuZ,IAAI,CAAE,mBAAoB,QAAUJ,EAAc,OAvJtD,SAASxG,GAChC,IAAIjV,EAAW,IAAIa,IAAAA,UAEfwC,EAAO4R,EAAK5R,MAAQ4R,EAAK5R,KAAKtB,MAAM,KAAK+F,QAC7C,GAAIjE,OAAOiY,YAAuB,UAATzY,EAAkB,CAC1C,IAAI0Y,EAAS,IAAID,WACjBC,EAAOC,OAAS,SAASjP,GACxB,IAAIkP,EAAO,IAAIC,KAAK,CAACnP,EAAE2G,OAAOzO,SAC9BpB,OAAOsY,IAAMtY,OAAOsY,KAAOtY,OAAOuY,UAClC,IAAIC,EAAcxY,OAAOsY,IAAIG,gBAAgBL,GACzCM,EAAQ,IAAIC,MAChBD,EAAME,IAAMJ,EACZE,EAAMP,OAAS,WACd,IAWgBzD,EAKf6C,EAAOC,EAAON,EAJd/C,EAEAvB,EACAC,EAfGnT,GAWYgV,EAXDgE,EAYdvE,EAAS7I,SAASuN,cAAc,UAEhCjG,EAAQ8B,EAAI9B,MACZC,EAAS6B,EAAI7B,OAIbD,EAAQC,GACX2E,EAAI,EACJD,GAAK3E,EAAQC,GAAU,IAEvB2E,GAAK3E,EAASD,GAAS,EACvB2E,EAAI,GAELL,EAAO1C,KAAKsE,IAAIlG,EAAOC,GAGvBsB,EAAOvB,MAAQsE,EACf/C,EAAOtB,OAASqE,EACN/C,EAAOQ,WAAW,MACxBoE,UAAUrE,EAAK6C,EAAGC,EAAGN,EAAMA,EAAM,EAAG,EAAGA,EAAMA,GAGjDhD,EAAgBC,EAAQ+C,EAAMA,EAtBb,OAwBV/C,EAAO6E,UAAU,YAAa,KApClC7c,EAAS8O,QAAQvL,EAClB,CACD,EACAwY,EAAOe,kBAAkB7H,EAC1B,MACCjV,EAAS+c,SAEV,OAAO/c,CACR,CAkICgd,CAAkBpF,GAAahR,MAC9B,SAAS2L,GACRuI,EAAgBxY,KAAK,SAASuZ,IAAI,mBAAoB,OAAStJ,EAAO,IACvE,IAAG,WACFA,EAAOnP,GAAAA,SAAAA,WAAuBwU,EAAYvU,MAC1CyX,EAAgBxY,KAAK,SAASuZ,IAAI,mBAAoB,OAAStJ,EAAO,IACvE,IAGD,IAAI0K,EAAavC,EAAWpY,KAAK,aAAaC,OAC9CsY,EAAavY,KAAK,kBAAkBsP,KAAK,KAAM,qBAAuBqL,GACtEnC,EAAgBxY,KAAK,kBAAkBsP,KAAK,KAAM,wBAA0BqL,GAE5EvC,EAAW1P,OAAO2P,GAId/C,EAAYqD,aAAetD,EAASqD,MACvCF,EAAgBxY,KAAK,UAAUuZ,IAAI,cAAe,QACxCjE,EAAYqD,aAAetD,EAASqD,OAC9CH,EAAavY,KAAK,UAAUuZ,IAAI,cAAe,QAM5CjE,EAAYmD,MAAQnD,EAAYmD,KAAOpD,EAASoD,KACnDD,EAAgBxY,KAAK,SAASuZ,IAAI,cAAe,QACvCjE,EAAYmD,MAAQnD,EAAYmD,KAAOpD,EAASoD,MAC1DF,EAAavY,KAAK,SAASuZ,IAAI,cAAe,QASvB,aAApBlE,EAASpS,SACZsV,EACE5X,SAAS,YACTX,KAAK,0BACLyU,KAAK,WAAW,GAChBA,KAAK,YAAY,GACnB8D,EAAavY,KAAK,YAChBT,KAAKa,EAAE,OAAQ,cAEnB,EAKI4O,EAAa,+BACbC,EAAW,IAAMD,EACrB,GAAI/Q,KAAKkX,iBAAkB,CAG1B,IAAIiD,EAAa7Z,IAAE0Q,EAAW,eAC9BkJ,EAAYC,EAAY/C,EAAUC,GAElC,IAAIsF,EAAQrc,IAAE0Q,EAAW,cAAchP,OACnCiO,EAAQ2M,EAAE,OACb,wBACA,yBACAD,EACA,CAAEA,MAAOA,IAEVrc,IAAE0Q,GAAU6L,SAASC,SAAS,oBAAoBxb,KAAK2O,GAGvD3P,IAAEgD,QAAQb,QAAQ,UAClB8U,EAAehJ,SAChB,MAECvO,KAAKkX,kBAAmB,EACxB5W,IAAAA,KAAON,KAAK+c,0BAA0B1W,MAAK,SAASyK,GACnD,IAAIb,EAAQ9N,EAAE,OAAQ,qBAClB8O,EAAOH,EAAMI,WAAW,CAC3BC,YAAaJ,EACbd,MAAOA,EACPnN,KAAM,aAENka,YAAa7a,EAAE,OAAQ,aACvB8a,iBAAkB9a,EAAE,OAAQ,0BAE5B+a,IAAK/a,EAAE,OAAQ,oCACfgb,KAAMhb,EAAE,OAAQ,wFAIjB,GAFA7B,IAAE,QAAQmK,OAAOwG,GAEbmG,GAAYC,EAAa,CAC5B,IAAI8C,EAAalJ,EAAKlP,KAAK,cAC3BmY,EAAYC,EAAY/C,EAAUC,EACnC,CAEA,IAAI9F,EAAa,CAAC,CACjBjQ,KAAMa,EAAE,OAAQ,UAChB4U,QAAS,SACTvF,MAAO,gBAC6B,IAAxB8F,EAAW8F,UACrB9F,EAAW8F,SAASla,GAErB5C,IAAE0Q,GAAUS,SAAS,QACtB,GAED,CACCnQ,KAAMa,EAAE,OAAQ,YAChB4U,QAAS,WACTvF,MAAO,gBAC+B,IAA1B8F,EAAW+F,YACrB/F,EAAW+F,WAAW/c,IAAE0Q,EAAW,eAEpC1Q,IAAE0Q,GAAUS,SAAS,QACtB,IAGDnR,IAAE0Q,GAAUS,SAAS,CACpByE,MAAO,IACPvE,eAAe,EACfzB,OAAO,EACPM,QAASe,EACT+L,YAAa,KACb1L,MAAO,WACNxH,EAAK8M,kBAAmB,EACxB,IACC5W,IAAEN,MAAMyR,SAAS,WAAW4E,QAC7B,CAAE,MAAO7J,GACR,CAEF,IAGDlM,IAAE0Q,GAAUsK,IAAI,SAAU,QAE1B,IAAIiC,EAAiBtM,EAAKsF,QAAQ,cAAcxU,KAAK,mBAGrD,SAASyb,IACR,IAAIC,EAAexM,EAAKlP,KAAK,gCAAgCC,OAC7Dub,EAAe/G,KAAK,WAA6B,IAAjBiH,EACjC,CALAF,EAAe/G,KAAK,YAAY,GAQhClW,IAAE0Q,GAAUjP,KAAK,gBAAgB2I,GAAG,SAAS,WAC1BpK,IAAE0Q,GAAUjP,KAAK,iDACvByU,KAAK,UAAWlW,IAAEN,MAAMwW,KAAK,WAC1C,IACAlW,IAAE0Q,GAAUjP,KAAK,qBAAqB2I,GAAG,SAAS,WAC/BpK,IAAE0Q,GAAUjP,KAAK,6DACvByU,KAAK,UAAWlW,IAAEN,MAAMwW,KAAK,WAC1C,IACAlW,IAAE0Q,GAAUjP,KAAK,cAAc2I,GAAG,QAAS,yCAAyC,WACnF,IAAIgT,EAAYpd,IAAEN,MAAM+B,KAAK,0BAC7B2b,EAAUlH,KAAK,WAAYkH,EAAUlH,KAAK,WAC3C,IACAlW,IAAE0Q,GAAUjP,KAAK,cAAc2I,GAAG,QAAS,uFAAuF,WACjI,IAAIgT,EAAYpd,IAAEN,MAClB0d,EAAUlH,KAAK,WAAYkH,EAAUlH,KAAK,WAC3C,IAGAlW,IAAE0Q,GAAUtG,GAAG,QAAS,6BAA6B,WACpD,IAAIiS,EAAQrc,IAAE0Q,GAAUjP,KAAK,yDAAyDC,OAClF2a,IAAUrc,IAAE0Q,EAAW,cAAchP,QACxC1B,IAAE0Q,GAAUjP,KAAK,gBAAgByU,KAAK,WAAW,GACjDlW,IAAE0Q,GAAUjP,KAAK,yBAAyBT,KAAKa,EAAE,OAAQ,oBAC/Cwa,EAAQ,GAClBrc,IAAE0Q,GAAUjP,KAAK,gBAAgByU,KAAK,WAAW,GACjDlW,IAAE0Q,GAAUjP,KAAK,yBAAyBT,KAAKa,EAAE,OAAQ,qBAAsB,CAAEwa,MAAOA,OAExFrc,IAAE0Q,GAAUjP,KAAK,gBAAgByU,KAAK,WAAW,GACjDlW,IAAE0Q,GAAUjP,KAAK,yBAAyBT,KAAK,KAEhDkc,GACD,IACAld,IAAE0Q,GAAUtG,GAAG,QAAS,+BAA+B,WACtD,IAAIiS,EAAQrc,IAAE0Q,GAAUjP,KAAK,sDAAsDC,OAC/E2a,IAAUrc,IAAE0Q,EAAW,cAAchP,QACxC1B,IAAE0Q,GAAUjP,KAAK,qBAAqByU,KAAK,WAAW,GACtDlW,IAAE0Q,GAAUjP,KAAK,8BAA8BT,KAAKa,EAAE,OAAQ,oBACpDwa,EAAQ,GAClBrc,IAAE0Q,GAAUjP,KAAK,qBAAqByU,KAAK,WAAW,GACtDlW,IAAE0Q,GAAUjP,KAAK,8BACfT,KAAKa,EAAE,OAAQ,qBAAsB,CAAEwa,MAAOA,OAEhDrc,IAAE0Q,GAAUjP,KAAK,qBAAqByU,KAAK,WAAW,GACtDlW,IAAE0Q,GAAUjP,KAAK,8BAA8BT,KAAK,KAErDkc,GACD,IAEAjG,EAAehJ,SAChB,IACEkI,MAAK,WACLc,EAAeiF,SACfxM,MAAM7N,EAAE,OAAQ,sCACjB,IAGF,OAAOoV,EAAeoG,SACvB,EAEApK,iBAAkB,WACjB,IAAMnJ,EAAOpK,KACbM,IAAAA,IAAMuC,GAAAA,YAAe,oCAAoC,SAASsE,GACjEiD,EAAKiJ,cACH7Q,YAAY,6CACZE,SAASyE,EAASyW,SAAW,uBAAyB,wBACxDxT,EAAKiJ,cAAchC,KAClB,aACAlK,EAASyW,SAAWzb,EAAE,QAAS,kBAAoBA,EAAE,QAAS,mBAE/D7B,IAAE,mBAAmBud,YAAY,YAAa1W,EAASyW,SACxD,GACD,EACAtK,kBAAmB,WAClB,IAAMwK,EAAa9d,KAAKqT,cAAc0K,SAAS,wBAE3Clb,GAAAA,aACHvC,IAAAA,KAAOuC,GAAAA,YAAe,mCAAoC,CAAExB,MAAOyc,IAEpE9d,KAAKqT,cACH7Q,YAAY,6CACZE,SAASob,EAAa,uBAAyB,wBACjD9d,KAAKqT,cAAchC,KAClB,aACAyM,EAAa3b,EAAE,QAAS,kBAAoBA,EAAE,QAAS,mBAExDnC,KAAK6S,YAAY9Q,KAAK,mBAAmB8b,YAAY,aAAcC,EACpE,EACAlL,uBAAwB,WACvB,IAAIoL,EAAQ1d,IAAAA,WACZ,GAAKN,KAAKie,oBAWTD,EAAMzP,QAAQvO,KAAKie,yBAXW,CAC9B,IAAI7T,EAAOpK,KACXM,IAAAA,IAAMuC,GAAAA,SAAY,OAAQ,YAAa,oBAAoB,SAASqb,GACnE9T,EAAK6T,oBAAsB3d,IAAE4d,GAC7B9T,EAAK+T,UAAY/T,EAAK6T,oBAAoBlc,KAAK,kCAAkCqc,SACjFJ,EAAMzP,QAAQnE,EAAK6T,oBACpB,IACExH,MAAK,SAAS4H,EAAOxV,EAAYC,GACjCkV,EAAMxB,OAAO6B,EAAMrZ,OAAQ8D,EAC5B,GACF,CAGA,OAAOkV,EAAML,SACd,EACA9M,oBAAqB,WACpB,IAAImN,EAAQ1d,IAAAA,WACZ,GAAKN,KAAKse,iBAUTN,EAAMzP,QAAQvO,KAAKse,sBAVQ,CAC3B,IAAIlU,EAAOpK,KACXM,IAAAA,IAAMuC,GAAAA,SAAY,OAAQ,YAAa,iBAAiB,SAASqb,GAChE9T,EAAKkU,iBAAmBhe,IAAE4d,GAC1BF,EAAMzP,QAAQnE,EAAKkU,iBACpB,IACE7H,MAAK,SAAS4H,EAAOxV,EAAYC,GACjCkV,EAAMxB,OAAO6B,EAAMrZ,OAAQ8D,EAC5B,GACF,CAGA,OAAOkV,EAAML,SACd,EACAZ,uBAAwB,WACvB,IAAIiB,EAAQ1d,IAAAA,WACZ,GAAKN,KAAKue,oBAUTP,EAAMzP,QAAQvO,KAAKue,yBAVW,CAC9B,IAAInU,EAAOpK,KACXM,IAAAA,IAAMuC,GAAAA,SAAY,QAAS,YAAa,oBAAoB,SAASqb,GACpE9T,EAAKmU,oBAAsBje,IAAE4d,GAC7BF,EAAMzP,QAAQnE,EAAKmU,oBACpB,IACE9H,MAAK,WACLuH,EAAMxB,QACP,GACF,CAGA,OAAOwB,EAAML,SACd,EAKA1I,iBAAe,+BAAE,WAAeQ,EAAK3S,GAAI,oGAqBnB,OApBjBsH,EAAOpK,KACXA,KAAKoV,UAAUoJ,QACfxe,KAAK6S,YAAY9Q,KAAK,iBAAiB9B,OACvCD,KAAKqV,mBAAmB3S,SAAS,gBACjC1C,KAAK6S,YAAY3P,KAAK,OAAQuS,GAC1BjH,EAASxO,KAAK6S,YAAY3P,KAAK,YAC/Bub,EAAiBze,KAAK6S,YAAY3P,KAAK,UACnB,iBAAZsL,IACXA,EAAS,CAACA,IAEXpE,EAAK+K,gBAAgBpT,KAAK,mBAAmBW,SAAS,UAAUF,YAAY,mBAAmBA,YAAY,mBAC3G4H,EAAK+K,gBAAgBpT,KAAK,cAAgBqI,EAAKyH,WAAWI,UAAY,qBAAqBzP,YAAY,UACrE,QAA9B4H,EAAKyH,WAAWK,UACnB9H,EAAK+K,gBAAgBpT,KAAK,cAAgBqI,EAAKyH,WAAWI,UAAY,qBAAqBvP,SAAS,mBAEpG0H,EAAK+K,gBAAgBpT,KAAK,cAAgBqI,EAAKyH,WAAWI,UAAY,qBAAqBvP,SAAS,mBAKjGgc,EAAiB,6CAAG,WAAejJ,GAAG,yGAClCrL,EAAKyH,WAAWQ,YAAYqM,kBAAkBjJ,GACnDpP,MAAK,SAACrB,EAAQ2Z,GACd,OAAOA,CACR,KAAE,2CACH,gBALoB,0DAQFD,EAAkBjJ,GAAI,QAApCkJ,EAAQ,EAAH,6BAG4D,OAH5D,2BAGTle,GAAQC,MAAM,wDAAuD,UACnDge,EAAkB,KAAI,QAApCC,EAAQ,EAAH,KACT3e,KAAK6S,YAAY3P,KAAK,OAAQ,KAC9BlD,KAAK4e,mBAAmB9b,EAAM,IAAG,QAGlCsH,EAAKsI,SAAWiM,EACZnQ,GAAUA,EAAOxM,OAAS,IAA8B,IAAzBwM,EAAOlJ,QAAQ,OACjDqZ,EAAQA,EAAMnQ,QAAO,SAASkG,GAC7B,MAAqB,QAAdA,EAAK5R,OAAqD,IAAnC0L,EAAOlJ,QAAQoP,EAAKmK,SACnD,KAGGJ,IACHE,EAAQA,EAAMnQ,OAAOiQ,IAMiB,QADjCK,EAAkBlQ,SAASmQ,eAAe,qBACyB,MAA1BD,EAAgBhb,QAE9D6a,EAAQA,EAAMnQ,QAAO,SAASkG,GAC7B,OAAQA,EAAK/D,KAAKqO,WAAW,IAC9B,KAoBGC,GAjBAC,EAAc,CACjBvO,KAAM,SAASwO,EAAWC,GACzB,MAAuB,QAAnBD,EAAUrc,MAAqC,QAAnBsc,EAAUtc,MACjC,EAEc,QAAnBqc,EAAUrc,MAAqC,QAAnBsc,EAAUtc,KAClC,EAEDD,GAAAA,KAAAA,mBAA2Bsc,EAAUxO,KAAMyO,EAAUzO,KAC7D,EACA6J,KAAM,SAAS2E,EAAWC,GACzB,OAAOD,EAAU3E,KAAO4E,EAAU5E,IACnC,EACAC,MAAO,SAAS0E,EAAWC,GAC1B,OAAOD,EAAU1E,MAAQ2E,EAAU3E,KACpC,IAE4BrQ,EAAKyH,WAAWI,YAAciN,EAAYvO,KACvEgO,EAAQA,EAAMU,MAAK,SAASC,EAAOC,GAClC,IAAIC,EAAa,SAASC,GACzB,OAAOA,EAASC,MAAQD,EAASC,KAAKpa,QAAQzC,GAAAA,eAAoB,CACnE,EAEA,OAAI2c,EAAWF,KAAWE,EAAWD,IAC5B,GACGC,EAAWF,IAAUE,EAAWD,GACpC,EAG6B,QAA9BnV,EAAKyH,WAAWK,UAAsB+M,EAAWK,EAAOC,IAAUN,EAAWK,EAAOC,EAC5F,IAEAnV,EAAKuV,YAEgB,IAAjBhB,EAAM3c,QACToI,EAAKyI,YAAY9Q,KAAK,iBAAiBV,OACvC+I,EAAK+K,gBAAgBlV,SAErBmK,EAAKyI,YAAY9Q,KAAK,iBAAiB9B,OACvCmK,EAAK+K,gBAAgB9T,QAGtB+I,EAAKgL,UAAUoJ,QAEfle,IAAAA,KAAOqe,GAAO,SAASiB,EAAKC,GAO3B,IAAIC,EAAYC,EAWhB,GAjBIF,EAAMG,aAAkC,yBAAnBH,EAAMhB,SAC9BgB,EAAMI,KAAOpd,GAAAA,SAAAA,WAAuB,iBAEpCgd,EAAMI,KAAOpd,GAAAA,SAAAA,WAAuBgd,EAAMhB,eAIf,IAAhBgB,EAAMrF,MAAyBqF,EAAMrF,MAAQ,GACxDsF,EAAajd,GAAAA,KAAAA,cAAsBqd,SAASL,EAAMrF,KAAM,KAAK,GAC7DuF,EAAYjI,KAAKC,MAAM,IAAMD,KAAKqI,IAAKN,EAAMrF,KAAO,QAAgB,MAEpEsF,EAAa3d,EAAE,QAAS,WACxB4d,EAAY,IAKTF,EAAMlP,KAAK3O,QAAU,GAExB,IAAIR,EAAQsW,KAAKsE,IAAItE,KAAKwB,MAAMuG,EAAMlP,KAAK3O,OAAS,GAAI,IACpDoe,EAAYP,EAAMlP,KAAKpL,OAAO,EAAGsa,EAAMlP,KAAK3O,OAASR,GACrD6e,EAAYR,EAAMlP,KAAKpL,OAAOsa,EAAMlP,KAAK3O,OAASR,QAElD4e,EAAYP,EAAMlP,KAClB0P,EAAY,GAGjB,IAAIngB,EAAOkK,EAAK+T,UAAUjN,WAAW,CACpCpO,KAAM+c,EAAM/c,KACZ2S,IAAKA,EACLpB,SAAUwL,EAAMlP,KAChByP,UAAWA,EACXC,UAAWA,EACXC,KAAMzd,GAAAA,KAAAA,qBAA6Bgd,EAAMpF,OACzCD,KAAMsF,EACNC,UAAWA,EACXE,KAAMJ,EAAMI,OAEb,GAAmB,SAAfJ,EAAM/c,KAAiB,CAC1B,IAAI8X,EAAU,CACblG,KAAMe,EAAM,IAAMoK,EAAMlP,KACxBkK,EAAG,IACHC,EAAG,KAEA9C,EAAM,IAAIiE,MACVsE,EAAa1d,GAAAA,YAAe,sBAAwBvC,IAAAA,MAAQsa,GAChE5C,EAAIyD,OAAS,WACRzD,EAAI9B,MAAQ,GACfhW,EAAK6B,KAAK,eAAesP,KAAK,QAAS,wBAA0BkP,EAAa,IAEhF,EACAvI,EAAIkE,IAAMqE,CACX,CACAnW,EAAKgL,UAAU3K,OAAOvK,EACvB,IAEAkK,EAAKiL,mBAAmB7S,YAAY,gBAAe,2DACnD,gDAIDmd,UAAW,WACV,IAAIa,EAAYxgB,KAAKsV,SAASvT,KAAK,sBAAsBqc,SACzDpe,KAAKsV,SAASkJ,QACd,IAAIpU,EAAOpK,KAEXoK,EAAKkL,SAAS7K,OAAO+V,GAGrB,IAAIxO,EAAOhS,KAAK6S,YAAY3P,KAAK,QAC7Bud,EAAYngB,IAAE,0DAA0DoC,SAAS,SACrF,GAAIsP,EAAM,CACT,IAAI0O,EAAQ1O,EAAKxQ,MAAM,KACvBlB,IAAAA,KAAOogB,GAAO,SAAS5K,EAAOL,GAE7B,GAAY,MADZA,EAAMiL,EAAMjb,OAEX,OAAO,EAER2E,EAAKkL,SAASlC,QAAQqN,EAAUvP,WAAW,CAC1CuE,IAAKiL,EAAMjf,KAAK,KAAO,IAAMgU,EAC7B9E,KAAM8E,IAER,GACD,CAEAgL,EAAUvP,WAAW,CACpBuE,IAAK,GACL9E,KAAMxO,EAAE,OAAQ,SACd,CAAE0U,eAAgB,OAAQ8J,UAAU3gB,KAAKsV,SAE7C,EAIAC,sBAAuB,SAASpG,EAAOrM,GACtC,IAAIsH,EAAO+E,EAAMjM,KACbuS,EAAMnV,IAAE6O,EAAMgE,QAAQoD,QAAQ,UAAUrT,KAAK,OACjDkH,EAAK6K,gBAAgBQ,EAAK3S,GAC1B,IAAI8d,EAAezR,EAAMgE,OAAQoD,QAAQ,cACrCD,EAAsBhW,IAAE,WAAYsgB,GACxC5gB,KAAK4e,mBAAmB9b,EAAM2S,EAAIjU,MAAM,QAAQiE,QAC2B,IAAvEzF,KAAK6S,YAAY3P,KAAK,YAAYoC,QAAQ,yBAAkCtF,KAAK6S,YAAY3P,KAAK,yBACrGoT,EAAoBE,KAAK,YAAY,GAErCF,EAAoBE,KAAK,YAAY,EAEvC,EAIAhB,mBAAoB,SAASrG,EAAO0R,EAAU/d,GAC7C,IACIwT,EADctW,KAAK6S,YAAY0D,QAAQ,cACLxU,KAAK,YACb,SAA1B8e,EAAS3d,KAAK,UAC4B,IAAzClD,KAAK6S,YAAY3P,KAAK,gBAA4BiM,EAAM2R,SAC3D9gB,KAAKoV,UAAUrT,KAAK,gCAAgCS,YAAY,+BAEjEqe,EAAShD,YAAY,+BACrBvH,EAAoBE,KAAK,YAAY,IACD,QAA1BqK,EAAS3d,KAAK,UACxBlD,KAAKiV,gBAAgBjV,KAAK6S,YAAY3P,KAAK,QAAU,IAAM2d,EAAS3d,KAAK,aAAcJ,GACvF9C,KAAK4e,mBAAmB9b,EAAM+d,EAAS3d,KAAK,eAC+B,IAAvElD,KAAK6S,YAAY3P,KAAK,YAAYoC,QAAQ,yBAAkCtF,KAAK6S,YAAY3P,KAAK,yBACrGoT,EAAoBE,KAAK,YAAY,GAErCF,EAAoBE,KAAK,YAAY,GAGxC,EAQAoI,mBAAoB,SAAS9b,EAAM2S,GAClC,IAAIsL,EAAmB,KAARtL,EAAatT,EAAE,OAAQ,QAAUA,EAAE,OAAQ,mBAAoB,CAAE6e,OAAQvL,IACpFwL,EAAmB,KAARxL,EAAatT,EAAE,OAAQ,QAAUA,EAAE,OAAQ,mBAAoB,CAAE6e,OAAQvL,IACpFjF,EAAUlQ,IAAE,+BAChB,OAAQwC,GACP,KAAK9C,KAAK0P,uBAEV,KAAK1P,KAAK8P,uBACT,MACD,KAAK9P,KAAK4P,qBACTY,EAAQlP,KAAKyf,GACb,MACD,KAAK/gB,KAAK2P,qBACTa,EAAQlP,KAAK2f,GACb,MACD,KAAKjhB,KAAK6P,0BACTW,EAAQ0Q,GAAG,GAAG5f,KAAKyf,GACnBvQ,EAAQ0Q,GAAG,GAAG5f,KAAK2f,GAGtB,GAGD,MCtzCaE,IApBe/R,GAeWR,SAfHS,GAeaA,EAAAA,GAd5CC,GAAQF,GAAOP,qBAAqB,QAAQ,GAAGC,aAAa,qBAEzD,CACNqS,SAAU,kBAAM7R,EAAK,EACrB8R,SAAU,SAAAC,GAGThS,GAAK,oBAAqB,CACzBC,MAHDA,GAAQ+R,GAKT,IASyCF,SCXrCG,GAAgB,SAAhBA,EAAyBpF,EAAKhZ,GACnC,IACIyN,EACA4Q,EAFAC,EAAU,GAMd,GAHAxhB,KAAKyhB,kBAAoB,GACzBzhB,KAAK0hB,QAAS,EACd1hB,KAAK2hB,UAAY,CAAC,EACdze,EACH,IAAKyN,KAAQzN,EACZse,GAAW7Q,EAAO,IAAMiR,mBAAmB1e,EAAKyN,IAAS,IAI3D,GADA6Q,GAAW,gBAAkBI,mBAAmBT,MAC3CnhB,KAAK6hB,aAAsC,oBAAhBC,YAWzB,CACN,IAAIC,EAAW,yBAA2BT,EAAcU,YACxDV,EAAcW,gBAAgBX,EAAcU,aAAehiB,KAC3DA,KAAKkiB,OAAS5hB,IAAE,qBAChBN,KAAKkiB,OAAO7Q,KAAK,KAAM0Q,GACvB/hB,KAAKkiB,OAAOjiB,OAEZshB,EAAW,KACe,IAAtBrF,EAAI5W,QAAQ,OACfic,EAAW,KAEZvhB,KAAKkiB,OAAO7Q,KAAK,MAAO6K,EAAMqF,EAAW,6BAA+BD,EAAcU,YAAc,IAAMR,GAC1GlhB,IAAE,QAAQmK,OAAOzK,KAAKkiB,QACtBliB,KAAK6hB,aAAc,EACnBP,EAAcU,aACf,MAzBCT,EAAW,KACe,IAAtBrF,EAAI5W,QAAQ,OACfic,EAAW,KAEZvhB,KAAKmiB,OAAS,IAAIL,YAAY5F,EAAMqF,EAAWC,GAC/CxhB,KAAKmiB,OAAOC,UAAY,SAAS5V,GAChC,IAAK,IAAImM,EAAI,EAAGA,EAAI3Y,KAAKyhB,kBAAkBzf,OAAQ2W,IAClD3Y,KAAKyhB,kBAAkB9I,GAAGlQ,KAAK4Z,MAAM7V,EAAEtJ,MAEzC,EAAEE,KAAKpD,MAkBRA,KAAKsiB,OAAO,eAAgB,SAASpf,GACvB,UAATA,GACHlD,KAAK4R,OAEP,EAAExO,KAAKpD,MACR,EACAshB,GAAcW,gBAAkB,GAChCX,GAAcU,YAAc,EAC5BV,GAAciB,iBAAmB,SAASpd,EAAIrC,EAAMI,GACnDoe,GAAcW,gBAAgB9c,GAAIod,iBAAiBzf,EAAMI,EAC1D,EACAoe,GAAc1Y,UAAY,CACzB6Y,kBAAmB,GACnBS,OAAQ,KACRP,UAAW,CAAC,EACZE,aAAa,EAWbU,iBAAkB,SAASzf,EAAMI,GAChC,IAAIyV,EAEJ,IAAI3Y,KAAK0hB,OAGT,GAAI5e,GACH,QAAmC,IAAxB9C,KAAK2hB,UAAUa,KACzB,IAAK7J,EAAI,EAAGA,EAAI3Y,KAAK2hB,UAAU7e,GAAMd,OAAQ2W,IAC5C3Y,KAAK2hB,UAAU7e,GAAM6V,GAAGzV,QAI1B,IAAKyV,EAAI,EAAGA,EAAI3Y,KAAKyhB,kBAAkBzf,OAAQ2W,IAC9C3Y,KAAKyhB,kBAAkB9I,GAAGzV,EAG7B,EACAuf,WAAY,EAOZH,OAAQ,SAASxf,EAAM/C,GAClBA,GAAYA,EAASY,OAEpBmC,EACC9C,KAAK6hB,aACH7hB,KAAK2hB,UAAU7e,KACnB9C,KAAK2hB,UAAU7e,GAAQ,IAExB9C,KAAK2hB,UAAU7e,GAAM8H,KAAK7K,IAE1BC,KAAKmiB,OAAOO,iBAAiB5f,GAAM,SAAS0J,QACrB,IAAXA,EAAEtJ,KACZnD,EAAS0I,KAAK4Z,MAAM7V,EAAEtJ,OAEtBnD,EAAS,GAEX,IAAG,GAGJC,KAAKyhB,kBAAkB7W,KAAK7K,GAG/B,EAIA6R,MAAO,WACN5R,KAAK0hB,QAAS,OACa,IAAhB1hB,KAAKmiB,QACfniB,KAAKmiB,OAAOvQ,OAEd,GAGD,kCCxIW+Q,GAAc,KACdC,GAAoB,KAoElBC,GAAY,SAASC,GACjC,GAAIH,GAAa,CAChB,IAAMI,EAAWJ,GACjBA,GAAYlgB,QAAQ,IAAInC,IAAAA,OAAQ,eAChCqiB,GAAYK,QC/EW,ID+EQ,WAC9BD,EAAStgB,QAAQ,IAAInC,IAAAA,OAAQ,cACzBwiB,GACHA,EAASG,MAAMjjB,KAAMkjB,UAEvB,GACD,CAGA5iB,IAAE,eAAe+Q,KAAK,iBAAiB,GACnCuR,IACHA,GAAkBvR,KAAK,iBAAiB,GAGzC/Q,IAAE,eAAekC,YAAY,cAC7BmgB,GAAc,KACdC,GAAoB,IACrB,EEjGMO,KAAY7f,OAAO8f,+CCoFzB,GA/Da,CAYZC,KAAMC,GAAAA,GAUNC,SAAAA,GAAAA,GAMAC,YAAaC,GAAAA,GAgBbC,UAAAA,GAAAA,GAgBAC,gBAAAA,GAAAA,IAKDC,KAAAA,eAA0B,KAAK,SAASlgB,EAAKpC,GAC5C,OAAOoiB,EAAAA,GAAAA,IAAUhgB,EAAKpC,EACvB,IC9EA,QAMCuiB,YAAW,SAACC,GACX9jB,KAAK+jB,YAAYD,EAAU3hB,EAAE,OAAQ,YACtC,EAQA4hB,YAAW,SAACD,EAAU3T,GACrB7P,IAAEwjB,GAAUxiB,KAAK6O,GACf3N,YAAY,WACZA,YAAY,SACZwhB,MAAK,GAAM,GACX3iB,MACH,EAYA4iB,eAAc,SAACH,EAAU3c,GACxBnH,KAAKkkB,eAAeJ,EAAU3c,EAC/B,EAYA+c,eAAc,SAACJ,EAAU3c,GACA,YAApBA,EAASnC,OACZhF,KAAKmkB,gBAAgBL,EAAU3c,EAASjE,KAAKiN,SAE7CnQ,KAAKokB,cAAcN,EAAU3c,EAASjE,KAAKiN,QAE7C,EAQAgU,gBAAe,SAACL,EAAU3T,GACzB7P,IAAEwjB,GAAUxiB,KAAK6O,GACfzN,SAAS,WACTF,YAAY,SACZwhB,MAAK,GAAM,GACXK,MAAM,KACNC,QAAQ,KACRjjB,MACH,EAQA+iB,cAAa,SAACN,EAAU3T,GACvB7P,IAAEwjB,GAAUxiB,KAAK6O,GACfzN,SAAS,SACTF,YAAY,WACZnB,MACH,0BClFD,IACCtB,SAAU,KAEVwkB,aAAc,KAEdC,KAAI,WACHlkB,IAAE,8BAA8BoK,GAAG,QAASvK,EAAAA,GAAAA,KAAOH,KAAKykB,4BAA6BzkB,OACrFA,KAAKukB,aAAeG,KAAAA,KACrB,EAEAC,6BAA4B,WAC3B,IAAMC,EAAiB5kB,KAAKukB,aAAqC,IAArBjhB,OAAOuhB,YAC7CC,EAAiBJ,KAAAA,OAAgBE,EAAwC,IAAtBthB,OAAOyhB,cAGhE,OAAQzhB,OAAO0hB,mCAAqCF,EAAiB,IACtE,EAOAL,4BAA2B,SAAC1kB,EAAUe,EAASmkB,GAC9CnkB,OAA6B,IAAZA,EAA0BA,EAAU,CAAC,EACtD,IAAMqI,EAAW,CAChB8G,MAAO9N,EAAE,OAAQ,2BACjBb,KAAMa,EACL,OACA,qDAEDmO,QAASnO,EAAE,OAAQ,WACnBmP,MAAOnP,EAAE,OAAQ,YACjBzB,MAAO,IAGFwkB,EAAS/kB,EAAAA,GAAAA,OAASgJ,EAAUrI,GAE5BsJ,EAAOpK,KAETA,KAAK2kB,gCACR9hB,GAAAA,QAAAA,OACCqiB,EAAO5jB,KACP4jB,EAAOjV,OACP,SAASvL,EAAQkM,GACZlM,GAAuB,KAAbkM,EACbxG,EAAK+a,iBAAiBvU,EAAUsU,GACtB/kB,EAAAA,GAAAA,WAAa8kB,IACvBA,GAEF,IACA,EACAC,EAAO5T,OACP,GACCjL,MAAK,WACN,IAAM+e,EAAU9kB,IAAE,sBAGlB,GAFA8kB,EAAQrjB,KAAK,YAAYsU,SACzB+O,EAAQ1iB,SAAS,yBACI,KAAjBwiB,EAAOxkB,MAAc,CACxB,IAAM2kB,EAAS/kB,IAAE,WAAWoC,SAAS,eAAepB,KAAK4jB,EAAOxkB,OAChE0kB,EAAQrjB,KAAK,sBAAsB0I,OAAO4a,EAC3C,CACAD,EAAQrjB,KAAK,wBAAwBW,SAAS,SAE9C,IAAM4iB,EAAWF,EAAQrjB,KAAK,UAC9BujB,EAASpE,GAAG,GAAGjhB,OACfqlB,EAASpE,GAAG,GAAG5f,KAAK4jB,EAAO5U,QAC5B,IAGDtQ,KAAKD,SAAWA,CACjB,EAEAolB,iBAAgB,SAACvU,EAAUsU,GAC1B,IAAM9a,EAAOpK,KAEbM,IAAAA,KAAO,CACN0C,KAAKuiB,EAAAA,EAAAA,aAAY,kBACjBriB,KAAM,CACL0N,SAAAA,GAED9N,KAAM,OACNK,QAAO,SAACgE,GACP7D,OAAOyhB,aAAe5d,EAASqe,UAE3BrlB,EAAAA,GAAAA,WAAaiK,EAAKrK,WACrBqK,EAAKrK,UAEP,EACAW,MAAK,WACJwkB,EAAOxkB,MAAQyB,EAAE,OAAQ,qCACzBU,GAAAA,qBAAAA,4BAAoDuH,EAAKrK,SAAUmlB,EACpE,GAEF,GC1GYO,GAAQniB,OAAOoiB,QAAU,CAAC,ECWvC,IAECC,UAAW,GAcXC,WAAU,SAAC3d,EAAQjF,EAAKqY,GACvB,IAAIwK,EAOJ,GALCA,EADuB,iBAAZ5d,EACCA,EAEApF,GAAAA,iBAAoBoF,GAG7B3E,OAAOwiB,QAAQC,UAAW,CAK7B,GAJA/iB,EAAMA,GAAOgjB,SAASC,SAAW,IAAMJ,EAGrBK,UAAUC,UAAUC,cAAc9gB,QAAQ,YAAc,GACzD4a,SAASgG,UAAUC,UAAU3kB,MAAM,KAAKiE,OAAS,GAEjE,IADA,IACsC4gB,EADhCC,EAAW1X,SAAS2X,iBAAiB,+DAClC5N,EAAI,EAAG6N,EAAKF,EAAStkB,OAAiB2W,EAAI6N,EAAI7N,KACtD0N,EAAUC,EAAS3N,IAEXvC,MAAMqQ,KAAOJ,EAAQjQ,MAAMqQ,KAEnCJ,EAAQjQ,MAAMsQ,OAASL,EAAQjQ,MAAMsQ,OACrCL,EAAQM,gBAAgB,UACxBN,EAAQO,aAAa,SAAU,gBAG7BvL,EACH/X,OAAOwiB,QAAQe,aAAa5e,EAAQ,GAAIjF,GAExCM,OAAOwiB,QAAQC,UAAU9d,EAAQ,GAAIjF,EAEvC,MAECM,OAAO0iB,SAASc,KAAO,IAAMjB,EAG7B7lB,KAAK+mB,YAAa,CAEpB,EAWAhB,UAAS,SAAC9d,EAAQjF,GACjBhD,KAAK4lB,WAAW3d,EAAQjF,GAAK,EAC9B,EAaA6jB,aAAY,SAAC5e,EAAQjF,GACpBhD,KAAK4lB,WAAW3d,EAAQjF,GAAK,EAC9B,EAOAgkB,qBAAoB,SAACC,GACpBjnB,KAAK2lB,UAAU/a,KAAKqc,EACrB,EAQAC,gBAAe,WACd,IAAMJ,EAAOxjB,OAAO0iB,SAASc,KACvBK,EAAML,EAAKxhB,QAAQ,KACzB,OAAI6hB,GAAO,EACHL,EAAKvhB,OAAO4hB,EAAM,GAEtBL,EAAK9kB,OAED8kB,EAAKvhB,OAAO,GAEb,EACR,EAEA6hB,aAAY,SAACC,GACZ,OAAOA,EAAMhM,QAAQ,MAAO,IAC7B,EAQAiM,cAAa,WACZ,IACIrf,EADEof,EAAQrnB,KAAKknB,kBAQnB,OALIG,IACHpf,EAASpF,GAAAA,iBAAoB7C,KAAKonB,aAAaC,MAGhDpf,EAAS9H,EAAAA,GAAAA,OAAS8H,GAAU,CAAC,EAAGpF,GAAAA,iBAAoB7C,KAAKonB,aAAapB,SAASuB,YAC9D,CAAC,CACnB,EAEAC,YAAW,SAAChb,GAKX,IAAIvE,EAJJ,GAAIjI,KAAK+mB,WACR/mB,KAAK+mB,YAAa,OAInB,GAAK/mB,KAAK2lB,UAAU3jB,OAApB,CAGAiG,EAAUuE,GAAKA,EAAEib,MACbtnB,EAAAA,GAAAA,SAAW8H,GACdA,EAASpF,GAAAA,iBAAoBoF,GAClBA,IACXA,EAASjI,KAAKsnB,iBAAmB,CAAC,GAEnC,IAAK,IAAI3O,EAAI,EAAGA,EAAI3Y,KAAK2lB,UAAU3jB,OAAQ2W,IAC1C3Y,KAAK2lB,UAAUhN,GAAG1Q,EARnB,CAUD,2BCxJD,SAASyf,GAASvlB,GAQjB,IANA,IAII4Y,EAJE4M,EAAK,GACP9M,EAAI,EACJC,GAAK,EACL8B,EAAI,EAGD/B,EAAI1Y,EAAEH,QAAQ,CACpB+Y,EAAI5Y,EAAEylB,OAAO/M,GAEb,IAAMgN,GAAOjL,GAAW,MAAN7B,GAAeA,GAAK,KAAOA,GAAK,IAC9C8M,IAAMjL,IAGT+K,IADA7M,GACQ,GACR8B,EAAIiL,GAELF,EAAG7M,IAAMC,EACTF,GACD,CACA,OAAO8M,CACR,CAOA,QAECG,QAAAA,GAKAC,cAAAA,GAAAA,GAYAC,iBAAgB,SAACC,GAChB,GAAsB,iBAAXA,EACV,OAAO,KAGR,IAAMC,EAAID,EAAO7B,cAAc7R,OAC3B4T,EAAQ,KAgBNC,EAAUF,EAAE1T,MAAM,mDACxB,OAAgB,OAAZ4T,EAMI,MALPD,EAAQE,WAAWH,GACdI,SAASH,IAMXC,EAAQ,KACXD,GAxBkB,CAClBI,EAAG,EACHC,EAAG,KACHC,GAAI,KACJC,GAAI,QACJb,EAAG,QACHc,GAAI,WACJC,EAAG,WACHC,GAAI,cACJ1mB,EAAG,cACH2mB,GAAI,gBACJC,EAAG,iBAawBX,EAAQ,KAGpCD,EAAQrQ,KAAKC,MAAMoQ,IATV,KAWV,EAOAa,WAAU,SAACC,EAAWC,GAKrB,YAJuB9oB,IAAnBkD,OAAO6lB,SACV1oB,GAAQyF,KAAK,+FAEdgjB,EAASA,GAAU,MACZxE,KAAOuE,GAAWC,OAAOA,EACjC,EAMAE,qBAAoB,SAACH,QACG7oB,IAAnBkD,OAAO6lB,SACV1oB,GAAQyF,KAAK,yGAEd,IAAMmjB,EAAO3E,OAAS2E,KAAK3E,KAAOuE,IAClC,OAAII,GAAQ,GAAKA,EAAO,KAChBlnB,EAAE,OAAQ,eAEXuiB,KAAOuE,GAAWK,SAC1B,EAOAC,kBAAiB,WAChB,GAAIvpB,KAAKwpB,gBACR,OAAOxpB,KAAKwpB,gBAGb,IAAMC,EAAQ7a,SAASuN,cAAc,KACrCsN,EAAMrT,MAAMF,MAAQ,OACpBuT,EAAMrT,MAAMD,OAAS,QAErB,IAAMuT,EAAQ9a,SAASuN,cAAc,OACrCuN,EAAMtT,MAAMuT,SAAW,WACvBD,EAAMtT,MAAMwT,IAAM,MAClBF,EAAMtT,MAAMyT,KAAO,MACnBH,EAAMtT,MAAM0T,WAAa,SACzBJ,EAAMtT,MAAMF,MAAQ,QACpBwT,EAAMtT,MAAMD,OAAS,QACrBuT,EAAMtT,MAAM2T,SAAW,SACvBL,EAAMM,YAAYP,GAElB7a,SAAStH,KAAK0iB,YAAYN,GAC1B,IAAMO,EAAKR,EAAMS,YACjBR,EAAMtT,MAAM2T,SAAW,SACvB,IAAII,EAAKV,EAAMS,YASf,OARID,IAAOE,IACVA,EAAKT,EAAMU,aAGZxb,SAAStH,KAAK+iB,YAAYX,GAE1B1pB,KAAKwpB,gBAAmBS,EAAKE,EAEtBnqB,KAAKwpB,eACb,EAQAc,UAAS,SAAChK,GAGT,OAAO,IAAIiK,KAAKjK,EAAKkK,cAAelK,EAAKmK,WAAYnK,EAAKoK,UAC3D,EAUAC,mBAAkB,SAACC,EAAGrC,GACrB,IAAI1N,EACEgQ,EAAKnD,GAASkD,GACdE,EAAKpD,GAASa,GAEpB,IAAK1N,EAAI,EAAGgQ,EAAGhQ,IAAMiQ,EAAGjQ,GAAIA,IAC3B,GAAIgQ,EAAGhQ,KAAOiQ,EAAGjQ,GAAI,CACpB,IAAMkQ,EAAOC,OAAOH,EAAGhQ,IAAWoQ,EAAOD,OAAOF,EAAGjQ,IAGnD,OAAIkQ,GAAQF,EAAGhQ,IAAMoQ,GAAQH,EAAGjQ,GACxBkQ,EAAOE,EAIPJ,EAAGhQ,GAAGqQ,cAAcJ,EAAGjQ,GAAIhY,GAAAA,cAEpC,CAED,OAAOgoB,EAAG7oB,OAAS8oB,EAAG9oB,MACvB,EAQAmpB,QAAO,SAACprB,EAAUqrB,IACQ,SAAnBC,KACc,IAAftrB,KACHurB,WAAWD,EAAkBD,EAE/B,CAEAC,EACD,EASAE,mBAAkB,SAAC5a,EAAM7M,GAExB,IADA,IAAM0nB,EAAU5c,SAAS6c,OAAOjqB,MAAM,KAC7BmX,EAAI,EAAGA,EAAI6S,EAAQxpB,OAAQ2W,IAAK,CACxC,IAAM8S,EAASD,EAAQ7S,GAAGnX,MAAM,KAChC,GAAIiqB,EAAO,GAAGlX,SAAW5D,GAAQ8a,EAAO,GAAGlX,SAAWzQ,EACrD,OAAO,CAET,CACA,OAAO,CACR,GC5OY4nB,GAFApoB,OAAOqoB,UCAhBC,GAAUtoB,OAAOuoB,YAErB,QAAuB,IAAZD,GAAyB,CAEnC,IAAMzE,IADNyE,GAAU5F,SAASC,UACC3gB,QAAQ,eAE3BsmB,IADY,IAATzE,GACOyE,GAAQrmB,OAAO,EAAG4hB,IAElByE,GAAQrmB,OAAO,EAAGqmB,GAAQ5X,YAAY,KAElD,CAEA,ICXmBjL,GDWnB,kBEgFA,IAIC+iB,SX/FuB,CAAC,GAAI,QAAS,MAAO,cAAe,OAAQ,YWgGnEC,UX/FwB,GWgGxBC,eXzF6B,GW0F7BC,kBX/FgC,EWgGhCC,kBX7FgC,EW8FhCC,gBXlG8B,EWmG9BC,gBXjG8B,EWkG9BC,iBX/F+B,GWgG/BC,kBXlGgC,EWmGhCC,aX/F2B,mBW2G3BC,kBAAmB,SAAA9X,GAAI,QAAOA,EAAKF,MAAMiY,EAAAA,sBAA8B,EAEvEC,U9BpGwB,SAAChpB,EAAKipB,EAAQzX,GAGtC,IAAIzV,EAFJgB,EAAQyF,KAAK,iEAGb,IAAM8L,GAAO4a,EAAAA,EAAAA,kBAAiBlpB,EAAK,KAAMipB,EAAS,OAUlD,OATKjtB,EAAcsS,GAKdkD,GACHA,KALDzV,EAAWa,IAAAA,WACXA,IAAAA,UAAY0R,GAAM,kBAAMvS,EAAS8O,SAAS,IAC1C7O,EAAcsS,GAAQvS,GAMhBC,EAAcsS,EACtB,E8BsFC6a,S9B7EuB,SAACnpB,EAAK0S,GAC7B3V,EAAQyF,KAAK,oEAEb,IAAM8L,GAAO4a,EAAAA,EAAAA,kBAAiBlpB,EAAK,MAAO0S,EAAQ,SACd,IAAhCzW,EAAa2F,QAAQ0M,KACxBrS,EAAaiL,KAAKoH,GACdpD,SAASke,iBACZle,SAASke,iBAAiB9a,IAE1BoE,EAAQ9V,IAAE,gDAAkD0R,EAAO,OACnE1R,IAAE,QAAQmK,OAAO2L,IAGpB,E8BiEC9T,KAAAA,EACAkB,UAAAA,EACAH,UAAAA,EACA0pB,YC3G0B,SAAAC,GAG1B,GAFAvsB,EAAQyF,KAAK,2EAEO,IAAT8mB,QAA8C,IAAfA,EAAKC,MAC9C,KAAM,CACLtc,KAAM,mBACNR,QAAS,kCAGX,IAAItL,EAAQ,CAAEqoB,WAAY,eAAgBC,OAAO,GACjD7sB,IAAAA,OAASuE,EAAOmoB,GAChB,IAAII,EAAW9sB,IAAE,gBACjB,GAAwB,IAApB8sB,EAASprB,OACZ,KAAM,CACL2O,KAAM,oBACNR,QAAS,2EAGX,IAAIkd,EAAQ/sB,IAAE,sBAMd,GALqB,IAAjB+sB,EAAMrrB,SACT1B,IAAE,QAAQ8S,QAAQ,4DAClBia,EAAQ/sB,IAAE,uBACJoC,SAAS0qB,EAASrP,SAAS,YAAc,WAAa,eAEzDsP,EAAM1hB,GAAG,YACZ0hB,EAAMptB,OAAOoW,aACP,CACN,IAAMiX,EAAaF,EAASrP,SAAS,YAAc,KAAO,OAC1Dzd,IAAAA,KAAMssB,EAAAA,EAAAA,kBAAiB/nB,EAAMooB,MAAO,GAAIpoB,EAAMqoB,aAAa,SAAShqB,GACnEmqB,EAAMxsB,KAAKqC,GAAMgS,OAAM,WAKtB,GAJAmY,EAAMja,QAAQ,sBAAwBka,EAAa,gBAAkBnrB,EAAE,OAAQ,YAAc,8BAA8Bd,OAC3HgsB,EAAMtrB,KAAK,UAAUqB,KAAK,SAAS,WAClCiqB,EAAMhX,QACP,SAC4B,IAAjBxR,EAAM0oB,OAAwB,CACxC,IAAIC,EACJ,IAAqB,IAAjB3oB,EAAM0oB,OACTC,EAAa,kBACP,IAA4B,iBAAjB3oB,EAAM0oB,OAGvB,KAAM,CACL5c,KAAM,mBACNR,QAAS,8DAJVqd,EAAa3oB,EAAM0oB,MAMpB,CACI1oB,EAAMsoB,OACT7sB,IAAAA,UAAY,CAAE6sB,OAAO,IAEtB7sB,IAAAA,WAAYssB,EAAAA,EAAAA,kBAAiB/nB,EAAMooB,MAAO,KAAMO,IAC9C/W,MAAK,SAASgX,EAAOL,EAAU5gB,GAC/B,MAAMA,CACP,GACF,CACD,IAAGnL,MACJ,GAAG,OACJ,CACD,EDmDCqsB,aAAAA,EACAnnB,SAAAA,EACAyH,aAAAA,EACAkX,OAAQuH,EAORzd,YAAAA,EACA2e,QAASpe,GACTuS,YAAAA,GAQA8L,enBvI6B,WAC7B,MAAO,CACNC,IAAK7e,EACLD,YAAAA,EAEF,EmBmIC+e,YVzI0B,WAAH,OAAS3K,EAAO,EU0IvC4K,KAAAA,GAOAC,2BAA4B/rB,EAC5BgsB,kB5BnI+B,SAAApmB,IAIZ,IAAfA,EAAI7C,QAAoC,UAAnB6C,EAAIqmB,YAA6C,YAAnBrmB,EAAIqmB,aAA4BrrB,GAAAA,iBAInF1C,EAAAA,GAAAA,SAAW,CAAC,IAAK,IAAK,IAAK,KAAM0H,EAAI7C,SAAWnC,GAAAA,YAEnDyoB,YAAW,WACV,IAAKzoB,GAAAA,wBAA6BA,GAAAA,cAAkB,CACnD,IAAIsrB,EAAQ,EAEN/C,EAAWgD,aAAY,WAC5BlsB,EAAAA,WAAwB0a,EAAE,OAAQ,+CAAgD,gDAFnE,EAE8HuR,IACzIA,GAHW,IAIdE,cAAcjD,GACdvoB,GAAAA,UAEDsrB,GACD,GAAG,KAIHtrB,GAAAA,eAAmB,CACpB,CACD,GAAG,KACsB,IAAfgF,EAAI7C,QAEdsmB,YAAW,WACLzoB,GAAAA,uBAA6BA,GAAAA,eAEjCA,GAAAA,4BAEF,GAAG,KAEL,E4B+FCyrB,8B5BrF4C,SAAAzmB,GAmBxCA,EAAI6a,mBACP7a,EAAI6a,iBAAiB,QAnBD,WACG,IAAnB7a,EAAI0mB,aAIH1mB,EAAI7C,QAAU,KAAO6C,EAAI7C,OAAS,KAAuB,MAAf6C,EAAI7C,QAKnD1E,IAAEsO,UAAUnM,QAAQ,IAAInC,IAAAA,OAAQ,aAAcuH,GAC/C,IASCA,EAAI6a,iBAAiB,SAPA,WAErBpiB,IAAEsO,UAAUnM,QAAQ,IAAInC,IAAAA,OAAQ,aAAcuH,EAC/C,IAOD,E4BqEC2mB,gBEzJ8B,WAE9B,OADA/tB,GAAQyF,KAAK,sGACNuoB,EAAAA,GAAAA,kBACR,EF2JC5L,UAAAA,GACA6L,aZtJ2B,SAASC,EAASC,EAASC,EAAQC,GAC9DF,EAAQlsB,SAAS,QACjB,IAAMqsB,EAAiD,MAA5BJ,EAAQnY,KAAK,YAAkD,WAA5BmY,EAAQnY,KAAK,WAI3EmY,EAAQjkB,GAAGqkB,EAAqB,aAAe,yBAAyB,SAAS5f,GAEhFA,EAAMuE,iBAGFvE,EAAMxL,KAAqB,UAAdwL,EAAMxL,MAInBirB,EAAQjjB,GAAGgX,IACdE,MAEUF,IAGVE,MAGkB,IAAfiM,GACHF,EAAQ/R,SAASna,SAAS,cAI3BisB,EAAQtd,KAAK,iBAAiB,GAE9Bud,EAAQI,YCjDe,GDiDQH,GAC/BlM,GAAciM,EACdhM,GAAoB+L,GACrB,GACD,EYoHCM,SZhEuB,SAACN,EAASC,EAAS9L,GACtC8L,EAAQjjB,GAAGgX,MAGfE,KACAF,GAAciM,EACdhM,GAAoB+L,EACpBC,EAAQnsB,QAAQ,IAAInC,IAAAA,OAAQ,eAC5BsuB,EAAQvtB,OACRutB,EAAQnsB,QAAQ,IAAInC,IAAAA,OAAQ,cAExBH,EAAAA,GAAAA,WAAa2iB,IAChBA,IAEF,EYmDCoM,eZ7G6B,SAACP,EAASC,GAEnCA,EAAQjjB,GAAGgX,KACdE,KAED8L,EAAQQ,IAAI,cAAc3sB,YAAY,cACtCosB,EAAQpsB,YAAY,OACrB,EY8GC4sB,SAAAA,EAAAA,GAIAC,WAAAA,EAAAA,GAIAC,QAAAA,EAAAA,GAIAC,WAAAA,EAAAA,GAIAC,UAAAA,EAAAA,GAKAC,QGxLsB,WAAH,OAASnsB,OAAO0iB,SAAS0J,IAAI,EHyLhDC,YG/K0B,WAAH,OAASrsB,OAAO0iB,SAAS4J,QAAQ,EHgLxDC,QGtKsB,WAAH,OAASvsB,OAAO0iB,SAAS8J,IAAI,EHuKhDC,YG3M0B,WAAH,OAASzsB,OAAO0iB,SAASgK,SAASxuB,MAAM,KAAK,EAAE,EHgNtEyuB,mBAAAA,GAAAA,GAIAC,UAAAA,GAAAA,GAIAC,YAAAA,GAAAA,GAKAC,iBIlKoB,SAAAnoB,GACpB,OAAKA,EAGE3H,IAAAA,IAAM2H,GAAQ,SAASnE,EAAOH,GACpC,IAAIukB,EAAItG,mBAAmBje,GAI3B,OAHIG,UACHokB,GAAK,IAAMtG,mBAAmB9d,IAExBokB,CACR,IAAGzmB,KAAK,KARA,EAST,EJwJC4uB,iBIrNoB,SAAAC,GACpB,IAAInJ,EACAoJ,EAEA5sB,EADEe,EAAS,CAAC,EAEhB,IAAK4rB,EACJ,OAAO,MAERnJ,EAAMmJ,EAAYhrB,QAAQ,OACf,IACVgrB,EAAcA,EAAY/qB,OAAO4hB,EAAM,IAGxC,IADA,IAAM3hB,EAAQ8qB,EAAYjV,QAAQ,MAAO,OAAO7Z,MAAM,KAC7CmX,EAAI,EAAGA,EAAInT,EAAMxD,OAAQ2W,IAAK,CAEtC,IAAM6X,EAAOhrB,EAAMmT,IAGlB4X,GAFDpJ,EAAMqJ,EAAKlrB,QAAQ,OACR,EACG,CACZkrB,EAAKjrB,OAAO,EAAG4hB,GACfqJ,EAAKjrB,OAAO4hB,EAAM,IAIN,CAACqJ,IAECxuB,SAGhB2B,EAAM8sB,mBAAmBF,EAAW,OAMnC7rB,EAAOf,GADJ4sB,EAAWvuB,OAAS,EACTyuB,mBAAmBF,EAAW,IAG9B,KAEhB,CACA,OAAO7rB,CACR,EJ6KCgsB,IAAAA,GACAxuB,aAAAA,EACAyuB,qBAAAA,GACAC,QKnOD,CAKCC,SAAU,CAAC,EAQXtN,SAAQ,SAACuN,EAAYC,GACpB,IAAIC,EAAUhxB,KAAK6wB,SAASC,GACvBE,IACJA,EAAUhxB,KAAK6wB,SAASC,GAAc,IAEvCE,EAAQpmB,KAAKmmB,EACd,EASAE,WAAU,SAACH,GACV,OAAO9wB,KAAK6wB,SAASC,IAAe,EACrC,EASAI,OAAM,SAACJ,EAAYK,EAAcrwB,GAEhC,IADA,IAAMkwB,EAAUhxB,KAAKixB,WAAWH,GACvBnY,EAAI,EAAGA,EAAIqY,EAAQhvB,OAAQ2W,IAC/BqY,EAAQrY,GAAGuY,QACdF,EAAQrY,GAAGuY,OAAOC,EAAcrwB,EAGnC,EASAsd,OAAM,SAAC0S,EAAYK,EAAcrwB,GAEhC,IADA,IAAMkwB,EAAUhxB,KAAKixB,WAAWH,GACvBnY,EAAI,EAAGA,EAAIqY,EAAQhvB,OAAQ2W,IAC/BqY,EAAQrY,GAAGyF,QACd4S,EAAQrY,GAAGyF,OAAO+S,EAAcrwB,EAGnC,GLsKA2kB,MAAAA,GACA2L,KAAAA,GACA1F,MAAAA,GAIA2F,SAAUzE,EAAAA,iBAIVrH,YAAAA,EAAAA,YAIA5b,KDlPkBZ,GCkPTzF,ODlPoB,SAAAqN,GAI7B,IAHA,IAAM2gB,EAAa3gB,EAAKnP,MAAM,KACxB+vB,EAAOD,EAAW7rB,MAEfkT,EAAI,EAAGA,EAAI2Y,EAAWtvB,OAAQ2W,IAEtC,KADA5P,GAAUA,GAAQuoB,EAAW3Y,KAE5B,OAAO,EAGT,OAAO5P,GAAQwoB,EAChB,GC2OC3nB,IDlOkB,SAAAb,GAAO,OAAI,SAAC4H,EAAM7M,GAIpC,IAHA,IAAMwtB,EAAa3gB,EAAKnP,MAAM,KACxB+vB,EAAOD,EAAW7rB,MAEfkT,EAAI,EAAGA,EAAI2Y,EAAWtvB,OAAQ2W,IACjC5P,EAAQuoB,EAAW3Y,MACvB5P,EAAQuoB,EAAW3Y,IAAM,CAAC,GAE3B5P,EAAUA,EAAQuoB,EAAW3Y,IAG9B,OADA5P,EAAQwoB,GAAQztB,EACTA,CACR,CAAC,CCsNK8F,CAAItG,QAITkuB,YAAaC,EAAAA,WAIbC,UAAAA,EAAAA,UACAC,SM/PuB,SAAAC,GAAetuB,OAAO0iB,SAAW4L,CAAU,ENgQlEC,OMzPqB,WAAQvuB,OAAO0iB,SAAS6L,QAAS,EN0PtD7qB,aAAc8qB,KAIdC,OAAAA,EAAAA,OAOAC,UAAW,SAACC,EAASC,GACpB,OAAOjvB,EAAAA,EAAAA,gBAAegvB,EAAS,CAAC,EAAG,CAClCE,WAAYD,GAAW,IACnB,GACN,EAIAE,aAAcC,EAAAA,kBACdC,iBO1Q+B,SAAAL,GAC/B,OAAOM,EAAAA,EAAAA,cAAmB,eAAiBN,CAC5C,EPkRCrG,QAAAA,KAID4G,EAAAA,EAAAA,IAAU,qBAAqB,SAAAhmB,GAC9B3J,GAAGmE,aAAewF,EAAE8C,MAGpB7O,GAAQ4P,KAAK,0BAA2B7D,EAAE8C,MAC3C,IQ/TA,wHCAwL,GCsCxL,CACAqB,KAAAA,cACA4f,WAAAA,CACAkC,oBAAAA,QACAC,SAAAA,MAEA7tB,MAAAA,CACAf,MAAAA,CACAhB,KAAAA,OACA6vB,QAAAA,EAAAA,OAAAA,WAEAC,aAAAA,CACA9vB,KAAAA,OACA6vB,QAAAA,EAAAA,OAAAA,iBAEAvmB,QAAAA,CACAtJ,KAAAA,QACA+vB,UAAAA,GAEAC,eAAAA,CACAhwB,KAAAA,QACA6vB,SAAAA,yJChDI7xB,GAAU,CAAC,EAEfA,GAAQiyB,kBAAoB,KAC5BjyB,GAAQkyB,cAAgB,KAElBlyB,GAAQmyB,OAAS,UAAc,KAAM,QAE3CnyB,GAAQoyB,OAAS,KACjBpyB,GAAQqyB,mBAAqB,KAEhB,KAAI,KAASryB,IAKJ,MAAW,aAAiB,YALlD,gBCFA,IAXgB,QACd,ICTW,WAAkB,IAAIsyB,EAAIpzB,KAAKqzB,EAAGD,EAAIE,MAAMD,GAAG,OAAOA,EAAG,WAAW,CAACrtB,MAAM,CAAC,KAAO,UAAU,cAAc,SAAS,MAAO,GAAM0E,GAAG,CAAC,MAAQ,SAAS6oB,GAAQ,OAAOH,EAAII,MAAM,QAAQ,GAAGC,YAAYL,EAAIM,GAAG,CAAC,CAAC/vB,IAAI,OAAOgwB,GAAG,WAAW,MAAO,CAAEP,EAAIhnB,QAASinB,EAAG,MAAM,CAACO,YAAY,iDAAiDP,EAAG,aAAa,CAACO,YAAY,yBAAyB,EAAEC,OAAM,MAAS,CAACT,EAAIU,GAAG,OAAOV,EAAIW,GAAIX,EAAIhnB,QAAsBgnB,EAAIR,aAAhBQ,EAAItvB,OAA0B,SAC5d,GACsB,IDUpB,EACA,KACA,WACA,MAI8B,QEnBsJ,GCoHtL,CACA6M,KAAAA,YAEA4f,WAAAA,CACAyD,YAAAA,GACAC,gBAAAA,KACAC,YAAAA,KACAC,WAAAA,MAGAtvB,MAAAA,CACAuvB,SAAAA,CACAtxB,KAAAA,OACA6vB,QAAAA,IAEA0B,YAAAA,CACAvxB,KAAAA,CAAAA,OAAAA,SACA6vB,SAAAA,GAEA2B,OAAAA,CACAxxB,KAAAA,MACA6vB,QAAAA,WAAA,WAEA4B,SAAAA,CACAzxB,KAAAA,MACA6vB,QAAAA,WAAA,WAEA6B,cAAAA,CACA1xB,KAAAA,OACA6vB,QAAAA,GAEA8B,oBAAAA,CACA3xB,KAAAA,QACA6vB,SAAAA,GAEA+B,YAAAA,CACA5xB,KAAAA,QACA6vB,SAAAA,IAIAzvB,KAAAA,WAAA,QACA,OACAkJ,SAAAA,EACAuoB,SAAAA,QAAAA,EAAAA,IAAAA,KAAAA,sBAAAA,IAAAA,GAAAA,QAAAA,EAAAA,EAAAA,yBAAAA,IAAAA,OAAAA,EAAAA,EAAAA,SACAC,iBAAAA,IAAAA,MAAAA,oBAAAA,GACAC,SAAAA,EAAAA,OAAAA,0BAAAA,CAAAC,YAAAA,GAAAA,MAAAA,OACAC,KAAAA,GACAnkB,SAAAA,GAEA,EAEAokB,SAAAA,CACAC,QAAAA,WACA,gDACA,sBACA,EACAC,WAAAA,WACA,4BACA,wCAEA,kBACA,0BAEA,uBACA,yIADA,CAIA,EACAC,iBAAAA,WACA,kDACA,EACAC,kBAAAA,WACA,mDACA,EACAC,gBAAAA,WACA,iDACA,EACAC,aAAAA,WACA,8CACA,EACAC,YAAAA,WACA,gDACA,EACAC,eAAAA,WACA,gCACA,GAGAC,QAAAA,WACA,mBACA,sDAEA,wBACA,yDAEA,EAEAC,QAAAA,CACAC,eAAAA,WACA,uCACA,EACA9hB,OAAAA,WACA,gBACA,oBACA,eClNI,GAAU,CAAC,EAEf,GAAQkf,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,ICTW,WAAkB,IAAIC,EAAIpzB,KAAKqzB,EAAGD,EAAIE,MAAMD,GAAG,OAAOA,EAAG,OAAO,CAACuC,IAAI,YAAYhC,YAAY,aAAa5tB,MAAM,CAAC,OAAS,OAAO,KAAO,QAAQ,OAASotB,EAAIoC,gBAAgB9qB,GAAG,CAAC,OAAS0oB,EAAIvf,SAAS,CAACwf,EAAG,WAAW,CAACO,YAAY,uBAAuB5tB,MAAM,CAAC,kBAAkB,KAAK,CAAEotB,EAAI+B,iBAAkB9B,EAAG,aAAa,CAACrtB,MAAM,CAAC,MAAQotB,EAAIjxB,EAAE,OAAQ,sCAAsC,KAAO,YAAY,CAACixB,EAAIU,GAAG,WAAWV,EAAIW,GAAGX,EAAIjxB,EAAE,OAAQ,uCAAuC,YAAYixB,EAAIyC,KAAKzC,EAAIU,GAAG,KAAMV,EAAImB,SAASvyB,OAAS,EAAGqxB,EAAG,aAAaD,EAAI0C,GAAI1C,EAAImB,UAAU,SAASpkB,EAAQ2F,GAAO,OAAOud,EAAG,MAAM,CAAC1vB,IAAImS,GAAO,CAACsd,EAAIU,GAAG,aAAaV,EAAIW,GAAG5jB,IAAUkjB,EAAG,OAAO,IAAG,GAAGD,EAAIyC,KAAKzC,EAAIU,GAAG,KAAMV,EAAIgC,kBAAmB/B,EAAG,aAAa,CAAC0C,MAAM3C,EAAIjxB,EAAE,OAAQ,+BAA+B6D,MAAM,CAAC,KAAO,YAAY,CAACotB,EAAIU,GAAG,WAAWV,EAAIW,GAAGX,EAAIjxB,EAAE,OAAQ,oDAAoD,YAAYixB,EAAIyC,KAAKzC,EAAIU,GAAG,KAAKT,EAAG,MAAM,CAACO,YAAY,SAAS5tB,MAAM,CAAC,GAAK,YAAY,CAACqtB,EAAG,MAAM,CAACO,YAAY,gBAAgB5tB,MAAM,CAAC,IAAM,GAAG,IAAMotB,EAAImC,eAAenC,EAAIU,GAAG,KAAKT,EAAG,OAAO,CAACrtB,MAAM,CAAC,GAAK,iBAAiBotB,EAAIU,GAAG,KAAKT,EAAG,MAAM,CAAC2C,YAAY,CAAC,MAAQ,YAAY5C,EAAIU,GAAG,KAAKT,EAAG,KAAK,CAACO,YAAY,uBAAuB5tB,MAAM,CAAC,2BAA2B,IAAIiwB,SAAS,CAAC,UAAY7C,EAAIW,GAAGX,EAAIyB,aAAazB,EAAIU,GAAG,KAAKT,EAAG,cAAc,CAACuC,IAAI,OAAOG,MAAM,CAACG,MAAO9C,EAAIiC,iBAAiBrvB,MAAM,CAAC,GAAK,OAAO,MAAQotB,EAAIjxB,EAAE,OAAQ,yBAAyB,iBAAgB,EAAK,KAAO,OAAO,MAAQixB,EAAI2B,KAAK,eAAiB,OAAO,eAAgB,EAAM,aAAe3B,EAAIqB,oBAAsB,WAAa,MAAM,SAAW,GAAG,6BAA6B,IAAI/pB,GAAG,CAAC,eAAe,SAAS6oB,GAAQH,EAAI2B,KAAKxB,CAAM,EAAE,OAASH,EAAIuC,kBAAkBvC,EAAIU,GAAG,KAAKT,EAAG,kBAAkB,CAACuC,IAAI,WAAWG,MAAM,CAACG,MAAO9C,EAAIiC,iBAAiBrvB,MAAM,CAAC,GAAK,WAAW,KAAO,WAAW,iBAAgB,EAAK,MAAQotB,EAAIxiB,SAAS,eAAgB,EAAM,eAAiB,OAAO,aAAewiB,EAAIqB,oBAAsB,mBAAqB,MAAM,MAAQrB,EAAIjxB,EAAE,OAAQ,YAAY,cAAcixB,EAAI8B,WAAW,MAAQ9B,EAAI6B,QAAQ,iCAAiC,GAAG,SAAW,IAAIvqB,GAAG,CAAC,eAAe,SAAS6oB,GAAQH,EAAIxiB,SAAS2iB,CAAM,KAAKH,EAAIU,GAAG,KAAKT,EAAG,cAAc,CAACrtB,MAAM,CAAC,yBAAyB,GAAG,QAAUotB,EAAIhnB,WAAWgnB,EAAIU,GAAG,KAAMV,EAAIiB,YAAahB,EAAG,QAAQ,CAACrtB,MAAM,CAAC,KAAO,SAAS,KAAO,gBAAgBiwB,SAAS,CAAC,MAAQ7C,EAAIiB,eAAejB,EAAIyC,KAAKzC,EAAIU,GAAG,KAAKT,EAAG,QAAQ,CAACrtB,MAAM,CAAC,KAAO,SAAS,KAAO,YAAYiwB,SAAS,CAAC,MAAQ7C,EAAIuB,YAAYvB,EAAIU,GAAG,KAAKT,EAAG,QAAQ,CAACrtB,MAAM,CAAC,KAAO,SAAS,KAAO,mBAAmBiwB,SAAS,CAAC,MAAQ7C,EAAIwB,kBAAkBxB,EAAIU,GAAG,KAAKT,EAAG,QAAQ,CAACrtB,MAAM,CAAC,KAAO,SAAS,KAAO,gBAAgBiwB,SAAS,CAAC,MAAQ7C,EAAIvwB,GAAGmE,gBAAgBosB,EAAIU,GAAG,KAAMV,EAAIsB,YAAarB,EAAG,QAAQ,CAACrtB,MAAM,CAAC,KAAO,SAAS,KAAO,SAAS,MAAQ,OAAOotB,EAAIyC,MAAM,IAC51F,GACsB,IDUpB,EACA,KACA,WACA,MAI8B,wsGEkChC,IAEAM,GAAAA,SAAAA,0RAAA,qqBAAAA,CAAA,WCvDkM,GD2DlM,CACAxlB,KAAAA,wBACA4f,WAAAA,CACAyD,YAAAA,GACAoC,gBAAAA,GAAAA,EACAC,aAAAA,GAAAA,GAEAxxB,MAAAA,CACAuvB,SAAAA,CACAtxB,KAAAA,OACA6vB,QAAAA,IAEA0B,YAAAA,CACAvxB,KAAAA,CAAAA,OAAAA,SACA6vB,SAAAA,GAEA8B,oBAAAA,CACA3xB,KAAAA,QACA6vB,SAAAA,GAEA2D,QAAAA,CACAxzB,KAAAA,QACA6vB,SAAAA,GAEA4D,YAAAA,CACAzzB,KAAAA,QACA6vB,SAAAA,GAEA6D,uBAAAA,CACA1zB,KAAAA,QACA6vB,SAAAA,IAGAzvB,KAAAA,WACA,OACA6xB,KAAAA,KAAAA,SACA3oB,SAAAA,EACAqqB,kBAAAA,EAEA,EACAf,QAAAA,CACAgB,aAAAA,WAAA,WACAj2B,GAAAA,MAAAA,gCAEA,sCACA4F,MAAAA,SAAAA,GAEA,OADA5F,GAAAA,MAAAA,GACA,CACA,IACA4F,KAAAA,KAAAA,MACAA,KAAAA,KAAAA,wBACAqI,OAAAA,SAAAA,GACA,gBACA,sBAGAjO,GAAAA,MAAAA,EACA,GACA,EACAk2B,sBAAAA,SAAAA,GACA,IE3FoCC,EAC7B5zB,EF0FP,cAOA,OALAoO,EAAAA,EACAiK,QAAAA,KAAAA,KACAA,QAAAA,KAAAA,MAGA,SACA,MACA,SACA,uGAEAjK,GAAAA,IAAAA,MAAAA,EAAAA,GAAAA,KAAAA,IACA,CAEA,qBACA,EAEA,OE7GoCwlB,EF6GpC,EE5GO5zB,GAAMuiB,EAAAA,EAAAA,aAAY,yBAEjBsR,GAAAA,QAAAA,KAAW7zB,EAAK,CAAE4zB,UAAAA,IACvBvwB,MAAK,SAAAywB,GAAI,OAAIA,EAAK5zB,IAAI,KF0GzBmD,MAAAA,SAAAA,GAIA,GAHA5F,GAAAA,MAAAA,8CACAA,GAAAA,MAAAA,IAEA,2DAEA,MADAA,GAAAA,MAAAA,yBACA,OAaA,OAVAs2B,EAAAA,UAAAA,WAAAA,KAAAA,EAAAA,EAAAA,YAAAA,SAAAA,GAAA,0BACAA,EAAAA,iBAAAA,EAAAA,iBAAAA,KAAAA,SAAAA,GACA,gBACA7zB,GAAAA,CAAAA,EAAAA,CACAiC,GAAAA,WAAAA,KAAAA,EAAAA,EAAAA,KAAAA,SAAAA,GAAA,2BAEA,IAEA1E,GAAAA,MAAAA,+CACAA,GAAAA,MAAAA,GACA,CACA,IACAiO,OAAAA,SAAAA,GAEA,MADAjO,GAAAA,MAAAA,8BACA,CACA,GACA,EACAu2B,KAAAA,SAAAA,GACA,kBACA,2DACA,EAMA,kCAAAD,UAAAA,IACA1wB,MAAAA,SAAAA,GAIA,OAHA5F,GAAAA,MAAAA,GACAA,GAAAA,MAAAA,IAAAA,WAAAA,EAAAA,QACAA,GAAAA,MAAAA,EAAAA,IAAAA,WAAAA,EAAAA,SACA,CACA0E,GAAAA,EAAAA,GACArC,KAAAA,EAAAA,KACAm0B,MAAAA,EAAAA,IAAAA,WAAAA,EAAAA,QACA9vB,SAAAA,CACA+vB,kBAAAA,EAAAA,IAAAA,WAAAA,EAAAA,SAAAA,oBACAC,eAAAA,EAAAA,IAAAA,WAAAA,EAAAA,SAAAA,iBACAC,UAAAA,EAAAA,IAAAA,WAAAA,EAAAA,SAAAA,YACAC,WAAAA,EAAAA,SAAAA,YAjBA,EAiBAA,IAAAA,WAAAA,EAAAA,SAAAA,YAhBA,yCAgBAA,OAjBA,KAoBA,IACAhxB,MAAAA,SAAAA,GAEA,OADA5F,GAAAA,MAAAA,GACA,CACA,IACAiO,OAAAA,SAAAA,GACAjO,GAAAA,MAAAA,iBACAA,GAAAA,MAAAA,EACA,GACA,EACA62B,uBAAAA,SAAAA,GACA72B,GAAAA,MAAAA,oBAEA,IEpKqCyC,EAC9BF,EFmKP,mBAEA,OEtKqCE,EFsKrC,kBErKOF,GAAMuiB,EAAAA,EAAAA,aAAY,0BAEjBsR,GAAAA,QAAAA,KAAW7zB,EAAK,CAAEE,KAAAA,IACvBmD,MAAK,SAAAywB,GAAI,OAAIA,EAAK5zB,IAAI,KFmKzBmD,MAAAA,SAAAA,GAAA,2BACA5F,GAAAA,MAAAA,yBAEA6C,OAAAA,SAAAA,KAAAA,GAAAA,CACA,IACAoL,OAAAA,SAAAA,GACAjO,GAAAA,MAAAA,4CACAA,GAAAA,MAAAA,EACA,GACA,EACAoT,OAAAA,WACA,gBG7MI,GAAU,CAAC,EAEf,GAAQkf,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,WAAkB,IAAIC,EAAIpzB,KAAKqzB,EAAGD,EAAIE,MAAMD,GAAG,OAASD,EAAIkD,SAAWlD,EAAImD,cAAgBnD,EAAIoD,uBAAwBnD,EAAG,OAAO,CAACuC,IAAI,YAAY5vB,MAAM,CAAC,OAAS,OAAO,KAAO,SAAS0E,GAAG,CAAC,OAAS,SAAS6oB,GAAgC,OAAxBA,EAAO7f,iBAAwB0f,EAAIvf,OAAOoP,MAAM,KAAMC,UAAU,IAAI,CAACmQ,EAAG,WAAW,CAACA,EAAG,IAAI,CAACO,YAAY,wBAAwB,CAACP,EAAG,QAAQ,CAACO,YAAY,UAAU5tB,MAAM,CAAC,IAAM,SAAS,CAACotB,EAAIU,GAAGV,EAAIW,GAAGX,EAAIjxB,EAAE,OAAQ,0BAAyBixB,EAAIU,GAAG,KAAKT,EAAG,QAAQ,CAACkE,WAAW,CAAC,CAAC5mB,KAAK,QAAQ6mB,QAAQ,UAAU1zB,MAAOsvB,EAAI2B,KAAM0C,WAAW,SAAS7B,IAAI,OAAO5vB,MAAM,CAAC,GAAK,OAAO,KAAO,OAAO,KAAO,OAAO,aAAeotB,EAAIqB,oBAAsB,KAAO,MAAM,YAAcrB,EAAIjxB,EAAE,OAAQ,qBAAqB,aAAaixB,EAAIjxB,EAAE,OAAQ,qBAAqB,SAAW,IAAI8zB,SAAS,CAAC,MAAS7C,EAAI2B,MAAOrqB,GAAG,CAAC,OAAS,SAAS6oB,GAAQ,OAAOH,EAAII,MAAM,kBAAmBJ,EAAI2B,KAAK,EAAE,MAAQ,SAASxB,GAAWA,EAAOpgB,OAAOukB,YAAiBtE,EAAI2B,KAAKxB,EAAOpgB,OAAOrP,MAAK,OAAOsvB,EAAIU,GAAG,KAAOV,EAAIqD,iBAAmMrD,EAAIyC,KAArLxC,EAAG,MAAM,CAACO,YAAY,iDAAiD,CAACR,EAAIU,GAAG,WAAWV,EAAIW,GAAGX,EAAIjxB,EAAE,OAAQ,sDAAsD,YAAqBixB,EAAIU,GAAG,KAAMV,EAAIqD,iBAAkBpD,EAAG,cAAc,CAACrtB,MAAM,CAAC,QAAUotB,EAAIhnB,SAAS1B,GAAG,CAAC,MAAQ0oB,EAAIsD,gBAAgBtD,EAAIyC,MAAM,KAAOzC,EAAIoD,uBAA6WpD,EAAIkD,SAAYlD,EAAImD,YAA+WnD,EAAIyC,KAAtWxC,EAAG,MAAM,CAACO,YAAY,+BAA+B,CAACP,EAAG,eAAe,CAACrtB,MAAM,CAAC,KAAO,QAAQotB,EAAIU,GAAG,KAAKT,EAAG,KAAK,CAACD,EAAIU,GAAGV,EAAIW,GAAGX,EAAIjxB,EAAE,OAAQ,qCAAqCixB,EAAIU,GAAG,KAAKT,EAAG,IAAI,CAACO,YAAY,aAAa,CAACR,EAAIU,GAAG,SAASV,EAAIW,GAAGX,EAAIjxB,EAAE,OAAQ,4EAA4E,WAAW,GAArtBkxB,EAAG,MAAM,CAACO,YAAY,+BAA+B,CAACP,EAAG,kBAAkB,CAACrtB,MAAM,CAAC,KAAO,QAAQotB,EAAIU,GAAG,KAAKT,EAAG,KAAK,CAACD,EAAIU,GAAGV,EAAIW,GAAGX,EAAIjxB,EAAE,OAAQ,6BAA6BixB,EAAIU,GAAG,KAAKT,EAAG,IAAI,CAACO,YAAY,aAAa,CAACR,EAAIU,GAAG,SAASV,EAAIW,GAAGX,EAAIjxB,EAAE,OAAQ,kEAAkE,WAAW,EACnrD,GACsB,IDUpB,EACA,KACA,WACA,MAIF,GAAe,GAAiB,oBEnB0J,GCiE1L,CACAwO,KAAAA,gBACA4f,WAAAA,CACAyD,YAAAA,GACAG,WAAAA,KACAD,YAAAA,MAEArvB,MAAAA,CACAuvB,SAAAA,CACAtxB,KAAAA,OACA+vB,UAAAA,GAEA8E,kBAAAA,CACA70B,KAAAA,OACA+vB,UAAAA,IAGA3vB,KAAAA,WACA,OACAxC,OAAAA,EACA0L,SAAAA,EACA+D,aAAAA,EACA4kB,KAAAA,KAAAA,SAEA,EACA6C,MAAAA,CACAxD,SAAAA,SAAAA,GACA,WACA,GAEAsB,QAAAA,CACAC,eAAAA,WACA,uCACA,EACA9hB,OAAAA,WAAA,WACA,gBACA,cACA,gBACA,+CAEA,GACAkhB,KAAAA,KAAAA,MAGA,4BACA1uB,MAAAA,SAAAA,GAAA,iBACAA,MAAAA,SAAAA,GACA,wBACA,gDAGA,wBACA,IACAqI,OAAAA,SAAAA,GACAjO,GAAAA,MAAAA,qCAAAA,GAEA,WACA,sBACA,IACA4F,MAAAA,WAAA,eACA,gBClHI,GAAU,CAAC,EAEf,GAAQ0sB,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,WAAkB,IAAIC,EAAIpzB,KAAKqzB,EAAGD,EAAIE,MAAMD,GAAG,OAAOA,EAAG,OAAO,CAACO,YAAY,aAAalpB,GAAG,CAAC,OAAS,SAAS6oB,GAAgC,OAAxBA,EAAO7f,iBAAwB0f,EAAIvf,OAAOoP,MAAM,KAAMC,UAAU,IAAI,CAACmQ,EAAG,WAAW,CAACO,YAAY,wBAAwB,CAACP,EAAG,cAAc,CAACrtB,MAAM,CAAC,GAAK,OAAO,MAAQotB,EAAI2B,KAAK,KAAO,OAAO,eAAiB,MAAM,MAAQ3B,EAAIjxB,EAAE,OAAQ,yBAAyB,iBAAgB,EAAK,SAAW,IAAIuI,GAAG,CAAC,eAAe,SAAS6oB,GAAQH,EAAI2B,KAAKxB,CAAM,EAAE,OAASH,EAAIuC,kBAAkBvC,EAAIU,GAAG,KAAKT,EAAG,cAAc,CAACrtB,MAAM,CAAC,MAAQotB,EAAIjxB,EAAE,OAAQ,qBAAqBixB,EAAIU,GAAG,KAAsB,iBAAhBV,EAAIjjB,QAA4BkjB,EAAG,aAAa,CAACrtB,MAAM,CAAC,KAAO,YAAY,CAACotB,EAAIU,GAAG,WAAWV,EAAIW,GAAGX,EAAIjxB,EAAE,OAAQ,kLAAkL,YAAYkxB,EAAG,MAAMD,EAAIU,GAAG,WAAWV,EAAIW,GAAGX,EAAIjxB,EAAE,OAAQ,qDAAqD,YAA6B,eAAhBixB,EAAIjjB,QAA0BkjB,EAAG,aAAa,CAACrtB,MAAM,CAAC,KAAO,UAAU,CAACotB,EAAIU,GAAG,WAAWV,EAAIW,GAAGX,EAAIjxB,EAAE,OAAQ,kEAAmE,YAA6B,gBAAhBixB,EAAIjjB,QAA2BkjB,EAAG,aAAa,CAACrtB,MAAM,CAAC,KAAO,UAAU,CAACotB,EAAIU,GAAG,WAAWV,EAAIW,GAAGX,EAAIjxB,EAAE,OAAQ,mEAAmE,YAAYixB,EAAIyC,KAAKzC,EAAIU,GAAG,KAAKT,EAAG,IAAI,CAACO,YAAY,mBAAmB5tB,MAAM,CAAC,KAAO,KAAK0E,GAAG,CAAC,MAAQ,SAAS6oB,GAAgC,OAAxBA,EAAO7f,iBAAwB0f,EAAII,MAAM,QAAQ,IAAI,CAACJ,EAAIU,GAAG,WAAWV,EAAIW,GAAGX,EAAIjxB,EAAE,OAAQ,kBAAkB,aAAa,IACtmD,GACsB,IDUpB,EACA,KACA,WACA,MAIF,GAAe,GAAiB,kIE+ChC,QACAwO,KAAAA,iBACA4f,WAAAA,CACAyD,YAAAA,IAEAnvB,MAAAA,CACAuvB,SAAAA,CACAtxB,KAAAA,OACA+vB,UAAAA,GAEAgF,oBAAAA,CACA/0B,KAAAA,OACA+vB,UAAAA,IAGA3vB,KAAAA,WACA,OACAxC,OAAAA,EACA0L,SAAAA,EACA+D,aAAAA,EACA4kB,KAAAA,KAAAA,SACAnkB,SAAAA,GACAknB,WAAAA,EACAC,SAAAA,EAEA,EACAH,MAAAA,CACAxD,SAAAA,SAAAA,GACA,WACA,GAEAsB,QAAAA,CACA7hB,OAAAA,WAAA,oJAGA,OAFA,aACA,WACA,+BAGAgjB,GAAAA,QAAAA,KAAAA,EAAAA,oBAAAA,CACAjmB,SAAAA,EAAAA,SACAmnB,QAAAA,EAAAA,UACA,OAHA,GAGA,WAHA70B,EAAAA,EAAAA,OAIAA,YAAAA,EAAAA,OAAAA,CAAA,gBACA,yBACA,kCACA,4CACAA,IAAAA,EAAAA,WAAAA,CAAA,gBACA,2CACAA,IAAAA,EAAAA,IAAAA,CAAA,sBACA,+BAEA,oEAGA,WACA,uHAEA,OAFA,UAEA,2QAEA,IC7H2L,kBCWvL,GAAU,CAAC,EAEf,GAAQ6vB,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,WAAkB,IAAIC,EAAIpzB,KAAKqzB,EAAGD,EAAIE,MAAMD,GAAG,OAAOA,EAAG,OAAO,CAAC3oB,GAAG,CAAC,OAAS,SAAS6oB,GAAgC,OAAxBA,EAAO7f,iBAAwB0f,EAAIvf,OAAOoP,MAAM,KAAMC,UAAU,IAAI,CAACmQ,EAAG,WAAW,CAACA,EAAG,IAAI,CAACA,EAAG,QAAQ,CAACO,YAAY,UAAU5tB,MAAM,CAAC,IAAM,aAAa,CAACotB,EAAIU,GAAGV,EAAIW,GAAGX,EAAIjxB,EAAE,OAAQ,oBAAoBixB,EAAIU,GAAG,KAAKT,EAAG,QAAQ,CAACkE,WAAW,CAAC,CAAC5mB,KAAK,QAAQ6mB,QAAQ,UAAU1zB,MAAOsvB,EAAIxiB,SAAU6mB,WAAW,aAAazxB,MAAM,CAAC,GAAK,WAAW,KAAO,WAAW,KAAO,WAAW,aAAe,eAAe,eAAiB,OAAO,YAAc,MAAM,SAAW,GAAG,YAAcotB,EAAIjxB,EAAE,OAAQ,iBAAiB8zB,SAAS,CAAC,MAAS7C,EAAIxiB,UAAWlG,GAAG,CAAC,MAAQ,SAAS6oB,GAAWA,EAAOpgB,OAAOukB,YAAiBtE,EAAIxiB,SAAS2iB,EAAOpgB,OAAOrP,MAAK,OAAOsvB,EAAIU,GAAG,KAAMV,EAAI0E,UAAWzE,EAAG,MAAM,CAACO,YAAY,UAAU,CAACP,EAAG,IAAI,CAACD,EAAIU,GAAG,aAAaV,EAAIW,GAAGX,EAAIjxB,EAAE,OAAQ,8NAA8N,cAAcixB,EAAIU,GAAG,KAAKT,EAAG,QAAQ,CAACkE,WAAW,CAAC,CAAC5mB,KAAK,QAAQ6mB,QAAQ,UAAU1zB,MAAOsvB,EAAI2E,QAASN,WAAW,YAAY7D,YAAY,WAAW5tB,MAAM,CAAC,GAAK,qBAAqB,KAAO,YAAYiwB,SAAS,CAAC,QAAU+B,MAAMC,QAAQ7E,EAAI2E,SAAS3E,EAAI8E,GAAG9E,EAAI2E,QAAQ,OAAO,EAAG3E,EAAI2E,SAAUrtB,GAAG,CAAC,OAAS,SAAS6oB,GAAQ,IAAI4E,EAAI/E,EAAI2E,QAAQK,EAAK7E,EAAOpgB,OAAOklB,IAAID,EAAKE,QAAuB,GAAGN,MAAMC,QAAQE,GAAK,CAAC,IAAaI,EAAInF,EAAI8E,GAAGC,EAAhB,MAA4BC,EAAKE,QAASC,EAAI,IAAInF,EAAI2E,QAAQI,EAAIK,OAAO,CAAzE,QAAsFD,GAAK,IAAInF,EAAI2E,QAAQI,EAAIM,MAAM,EAAEF,GAAKC,OAAOL,EAAIM,MAAMF,EAAI,IAAK,MAAMnF,EAAI2E,QAAQM,CAAI,KAAKjF,EAAIU,GAAG,KAAKT,EAAG,QAAQ,CAACrtB,MAAM,CAAC,IAAM,uBAAuB,CAACotB,EAAIU,GAAG,aAAaV,EAAIW,GAAGX,EAAIjxB,EAAE,OAAQ,0BAA2B,gBAAgBixB,EAAIyC,KAAKzC,EAAIU,GAAG,KAAKT,EAAG,cAAc,CAACrtB,MAAM,CAAC,QAAUotB,EAAIhnB,QAAQ,MAAQgnB,EAAIjxB,EAAE,OAAQ,kBAAkB,gBAAgBixB,EAAIjxB,EAAE,OAAQ,yBAAyBixB,EAAIU,GAAG,KAAMV,EAAI1yB,OAAS0yB,EAAIjjB,QAASkjB,EAAG,IAAI,CAAC0C,MAAM,CAAC2C,QAAStF,EAAI1yB,QAAQ,CAAC0yB,EAAIU,GAAG,WAAWV,EAAIW,GAAGX,EAAIjjB,SAAS,YAAYijB,EAAIyC,MAAM,IAC7kE,GACsB,IDUpB,EACA,KACA,WACA,MAIF,GAAe,GAAiB,oBE8GhC,6BACA,GAAoB,MAAhBxO,GAAMsR,MACV,IACAr1B,OAAAA,aAAAA,QACAA,OAAAA,eAAAA,QACA7C,GAAAA,MAAAA,0BACA,UACAA,GAAAA,MAAAA,kCAAAA,EACA,CAGA,IC5I4K,GD4I5K,CACAkQ,KAAAA,QAEA4f,WAAAA,CACAqI,UAAAA,GACAC,sBAAAA,GACAC,cAAAA,GACAC,eAAAA,GACArG,SAAAA,KACAyB,WAAAA,MAGAjxB,KAAAA,WACA,OACAkJ,SAAAA,EACA2oB,MAAAA,EAAAA,GAAAA,GAAAA,OAAAA,gBAAAA,IACAiE,mBAAAA,EACAC,eAAAA,EAGA3E,QAAAA,EAAAA,GAAAA,GAAAA,OAAAA,cAAAA,IACAC,UAAAA,EAAAA,GAAAA,GAAAA,OAAAA,gBAAAA,IACAF,aAAAA,EAAAA,GAAAA,GAAAA,OAAAA,oBAAAA,GACAG,eAAAA,EAAAA,GAAAA,GAAAA,OAAAA,qBAAAA,GACA0E,kBAAAA,EAAAA,GAAAA,GAAAA,OAAAA,yBAAAA,GACAvB,mBAAAA,EAAAA,GAAAA,GAAAA,OAAAA,yBAAAA,IACAlD,qBAAAA,EAAAA,GAAAA,GAAAA,OAAAA,qBAAAA,GACAoD,qBAAAA,EAAAA,GAAAA,GAAAA,OAAAA,sBAAAA,IACAsB,mBAAAA,EAAAA,GAAAA,GAAAA,OAAAA,oBAAAA,IACAzE,YAAAA,MAAAA,GAAAA,OACA0E,iBAAAA,EAAAA,GAAAA,GAAAA,OAAAA,sBAAAA,GACAC,wBAAAA,EAAAA,GAAAA,GAAAA,OAAAA,0BAAAA,GACAC,mBAAAA,EAAAA,GAAAA,GAAAA,OAAAA,oBAAAA,IACAhD,QAAAA,WAAAA,OAAAA,SAAAA,SACAC,YAAAA,cAAAA,OAAAA,SAAAA,SACAC,4BAAAA,IAAAA,OAAAA,oBACA+C,eAAAA,EAAAA,GAAAA,GAAAA,OAAAA,iBAAAA,GAEA,EAEA7D,QAAAA,CACA8D,sBAAAA,WACA,4BACA,mBACA,gBE7KI,GAAU,CAAC,EAEf,GAAQzG,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,I9BTW,WAAkB,IAAIC,EAAIpzB,KAAKqzB,EAAGD,EAAIE,MAAMD,GAAG,OAAOA,EAAG,MAAM,CAACO,YAAY,uBAAuB,EAAGR,EAAImG,eAAiBnG,EAAIsB,YAAarB,EAAG,MAAM,CAACA,EAAG,aAAa,CAACrtB,MAAM,CAAC,KAAO,OAAO,KAAO,WAAW,CAAGotB,EAAI4F,mBAAsB5F,EAAI6F,eAA6C,KAA5B7F,EAAIyE,qBAA8iDzE,EAAIhnB,SAAWgnB,EAAI4F,kBAAmB3F,EAAG,MAAM,CAAC1vB,IAAI,QAAQiwB,YAAY,oBAAoB,CAACP,EAAG,wBAAwB,CAACrtB,MAAM,CAAC,SAAWotB,EAAI2B,KAAK,eAAe3B,EAAIiB,YAAY,wBAAwBjB,EAAIqB,oBAAoB,WAAWrB,EAAIkD,QAAQ,eAAelD,EAAImD,YAAY,4BAA4BnD,EAAIoD,wBAAwB9rB,GAAG,CAAC,kBAAkB,SAAS6oB,GAAQH,EAAI2B,KAAKxB,CAAM,EAAE,OAAS,SAASA,GAAQH,EAAIhnB,SAAU,CAAI,KAAKgnB,EAAIU,GAAG,KAAKT,EAAG,IAAI,CAACO,YAAY,kBAAkB5tB,MAAM,CAAC,KAAO,KAAK0E,GAAG,CAAC,MAAQ,SAAS6oB,GAAQA,EAAO7f,iBAAiB0f,EAAI4F,mBAAoB,CAAK,IAAI,CAAC5F,EAAIU,GAAG,eAAeV,EAAIW,GAAGX,EAAIjxB,EAAE,OAAQ,SAAS,iBAAiB,IAAKixB,EAAIhnB,SAAWgnB,EAAI8F,iBAAkB7F,EAAG,MAAM,CAAC1vB,IAAI,QAAQiwB,YAAY,oBAAoB,CAACP,EAAG,MAAM,CAACO,YAAY,2BAA2B,CAAER,EAAI6F,cAAe5F,EAAG,gBAAgB,CAACrtB,MAAM,CAAC,SAAWotB,EAAI2B,KAAK,sBAAsB3B,EAAIuE,mBAAmBjtB,GAAG,CAAC,kBAAkB,SAAS6oB,GAAQH,EAAI2B,KAAKxB,CAAM,EAAE,MAAQ,SAASA,GAAQH,EAAI6F,eAAgB,CAAK,KAAK7F,EAAIyC,MAAM,KAAkC,KAA5BzC,EAAIyE,oBAA4BxE,EAAG,MAAM,CAACA,EAAG,iBAAiB,CAACrtB,MAAM,CAAC,SAAWotB,EAAI2B,KAAK,wBAAwB3B,EAAIyE,qBAAqBntB,GAAG,CAAC,kBAAkB,SAAS6oB,GAAQH,EAAI2B,KAAKxB,CAAM,EAAE,KAAOH,EAAIoG,0BAA0B,GAAGpG,EAAIyC,KAA9xFxC,EAAG,MAAM,CAACA,EAAG,YAAY,CAACrtB,MAAM,CAAC,SAAWotB,EAAI2B,KAAK,eAAe3B,EAAIiB,YAAY,eAAejB,EAAIsB,YAAY,SAAWtB,EAAImB,SAAS,OAASnB,EAAIkB,OAAO,iBAAiBlB,EAAIoB,cAAc,wBAAwBpB,EAAIqB,qBAAqB/pB,GAAG,CAAC,kBAAkB,SAAS6oB,GAAQH,EAAI2B,KAAKxB,CAAM,EAAE,OAAS,SAASA,GAAQH,EAAIhnB,SAAU,CAAI,KAAKgnB,EAAIU,GAAG,KAAMV,EAAI8F,kBAA8C,KAA1B9F,EAAIuE,kBAA0BtE,EAAG,IAAI,CAACO,YAAY,kBAAkB5tB,MAAM,CAAC,GAAK,gBAAgB,KAAOotB,EAAIuE,oBAAoB,CAACvE,EAAIU,GAAG,eAAeV,EAAIW,GAAGX,EAAIjxB,EAAE,OAAQ,qBAAqB,gBAAiBixB,EAAI8F,mBAAqB9F,EAAI6F,cAAe5F,EAAG,IAAI,CAACO,YAAY,kBAAkB5tB,MAAM,CAAC,GAAK,gBAAgB,KAAOotB,EAAIuE,mBAAmBjtB,GAAG,CAAC,MAAQ,SAAS6oB,GAAQA,EAAO7f,iBAAiB0f,EAAI6F,eAAgB,CAAI,IAAI,CAAC7F,EAAIU,GAAG,eAAeV,EAAIW,GAAGX,EAAIjxB,EAAE,OAAQ,qBAAqB,gBAAgBixB,EAAIyC,KAAKzC,EAAIU,GAAG,KAAMV,EAAIgG,gBAAiB,CAAEhG,EAAIiG,uBAAwBhG,EAAG,MAAM,CAACO,YAAY,sBAAsB,CAAER,EAAIgG,gBAAiB/F,EAAG,IAAI,CAACO,YAAY,SAASmC,MAAM,CAAE,0BAA2B3C,EAAIiG,wBAAyBrzB,MAAM,CAAC,KAAO,KAAK0E,GAAG,CAAC,MAAQ,SAAS6oB,GAAQA,EAAO7f,iBAAiB0f,EAAI4F,mBAAoB,CAAI,IAAI,CAAC5F,EAAIU,GAAG,mBAAmBV,EAAIW,GAAGX,EAAIjxB,EAAE,OAAQ,yBAAyB,oBAAoBixB,EAAIyC,OAAOxC,EAAG,IAAI,CAACrtB,MAAM,CAAC,KAAO,KAAK0E,GAAG,CAAC,MAAQ,SAAS6oB,GAAQA,EAAO7f,iBAAiB0f,EAAI4F,mBAAoB,CAAI,IAAI,CAAC5F,EAAIU,GAAG,iBAAiBV,EAAIW,GAAGX,EAAIjxB,EAAE,OAAQ,yBAAyB,mBAAmBixB,EAAIyC,MAAM,MAAyxC,GAAGxC,EAAG,MAAM,CAACA,EAAG,aAAa,CAACrtB,MAAM,CAAC,KAAO,OAAO,KAAO,WAAW,CAACqtB,EAAG,aAAa,CAACrtB,MAAM,CAAC,KAAO,UAAU,MAAQotB,EAAIjxB,EAAE,OAAQ,6BAA6B,CAACixB,EAAIU,GAAG,aAAaV,EAAIW,GAAGX,EAAIjxB,EAAE,OAAQ,uCAAuC,eAAe,IAAI,GAAGixB,EAAIU,GAAG,KAAKT,EAAG,MAAM,CAACO,YAAY,qBAAqB5tB,MAAM,CAAC,GAAK,uBAAuBotB,EAAI0C,GAAI1C,EAAIkG,mBAAmB,SAASG,EAAiB3jB,GAAO,OAAOud,EAAG,WAAW,CAAC1vB,IAAImS,EAAMigB,MAAM,CAAC0D,EAAiB1D,OAAO/vB,MAAM,CAAC,KAAO,YAAY,MAAO,EAAK,KAAO,OAAO,KAAOyzB,EAAiB30B,OAAO,CAACsuB,EAAIU,GAAG,WAAWV,EAAIW,GAAG0F,EAAiB9oB,MAAM,WAAW,IAAG,IACvsH,GACsB,I8BUpB,EACA,KACA,KACA,MAI8B,QCMhC,IACCzN,KAAI,WACH,MAAO,CACNL,GAAAA,GAEF,EACA6yB,QAAS,CACRvzB,EAAGu3B,GAAAA,UAAAA,KAAoBA,IACvB9c,EAAG8c,GAAAA,gBAAAA,KAA0BA,MCD/BC,EAAAA,GAAAA,MAAUC,KAGV,IADaD,EAAAA,GAAAA,OAAWE,MACbC,OAAO,iFChCdC,QAA0B,GAA4B,KAE1DA,EAAwBnvB,KAAK,CAACovB,EAAO70B,GAAI,iDAAkD,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,yDAAyD,MAAQ,GAAG,SAAW,mBAAmB,eAAiB,CAAC,8CAA8C,WAAa,MAErS,4ECJI40B,QAA0B,GAA4B,KAE1DA,EAAwBnvB,KAAK,CAACovB,EAAO70B,GAAI,uNAAwN,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,uDAAuD,MAAQ,GAAG,SAAW,4FAA4F,eAAiB,CAAC,8NAA8N,WAAa,MAElsB,6ECJI40B,QAA0B,GAA4B,KAE1DA,EAAwBnvB,KAAK,CAACovB,EAAO70B,GAAI,sJAAuJ,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,mEAAmE,MAAQ,GAAG,SAAW,4CAA4C,eAAiB,CAAC,iIAAiI,WAAa,MAEhgB,6ECJI40B,QAA0B,GAA4B,KAE1DA,EAAwBnvB,KAAK,CAACovB,EAAO70B,GAAI,kWAAmW,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,2DAA2D,MAAQ,GAAG,SAAW,4JAA4J,eAAiB,CAAC,mZAAmZ,WAAa,MAEtkC,6ECJI40B,QAA0B,GAA4B,KAE1DA,EAAwBnvB,KAAK,CAACovB,EAAO70B,GAAI,2ZAA4Z,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,wCAAwC,MAAQ,GAAG,SAAW,mLAAmL,eAAiB,CAAC,wjBAAwjB,WAAa,MAExyC,6ECJI40B,QAA0B,GAA4B,KAE1DA,EAAwBnvB,KAAK,CAACovB,EAAO70B,GAAI,2HAA4H,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,4DAA4D,MAAQ,GAAG,SAAW,8CAA8C,eAAiB,CAAC,i3HAA02H,WAAa,MAEzsI,6BCPA,IAAIye,EAAa,EAAQ,OAEzBoW,EAAOC,SAAWrW,EAAoB,SAAKA,GAAYtY,SAAS,CAAC,EAAI,SAAS4uB,EAAUC,EAAOC,EAAQC,EAASn3B,GAC5G,IAAIo3B,EAAQC,EAAiBL,EAAUK,gBAAkB,SAAS1d,EAAQ2d,GACtE,GAAI/zB,OAAOmC,UAAU6xB,eAAe95B,KAAKkc,EAAQ2d,GAC/C,OAAO3d,EAAO2d,EAGpB,EAEF,OAAoa,OAA3ZF,EAASC,EAAeH,EAAQ,MAAMz5B,KAAe,MAAVw5B,EAAiBA,EAAUD,EAAUQ,aAAe,CAAC,EAA+E,OAA1EJ,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,cAAgBA,EAAQ,CAAC,KAAO,KAAK,KAAO,CAAC,EAAE,GAAKJ,EAAUS,QAAQ,EAAGz3B,EAAM,GAAG,QAAUg3B,EAAUS,QAAQ,EAAGz3B,EAAM,GAAG,KAAOA,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,EAAE,OAAS,GAAG,IAAM,CAAC,KAAO,GAAG,OAAS,OAAiBo3B,EAAS,EACtb,EAAE,EAAI,SAASJ,EAAUC,EAAOC,EAAQC,EAASn3B,GAC7C,IAAIo3B,EAAQC,EAAiBL,EAAUK,gBAAkB,SAAS1d,EAAQ2d,GACtE,GAAI/zB,OAAOmC,UAAU6xB,eAAe95B,KAAKkc,EAAQ2d,GAC/C,OAAO3d,EAAO2d,EAGpB,EAEF,OAAsZ,OAA7YF,EAASC,EAAeH,EAAQ,MAAMz5B,KAAe,MAAVw5B,EAAiBA,EAAUD,EAAUQ,aAAe,CAAC,EAA+E,OAA1EJ,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,gBAAkBA,EAAQ,CAAC,KAAO,KAAK,KAAO,CAAC,EAAE,GAAKJ,EAAUS,QAAQ,EAAGz3B,EAAM,GAAG,QAAUg3B,EAAUU,KAAK,KAAO13B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,EAAE,OAAS,GAAG,IAAM,CAAC,KAAO,EAAE,OAAS,OAAiBo3B,EAAS,EACxa,EAAE,EAAI,SAASJ,EAAUC,EAAOC,EAAQC,EAASn3B,GAC7C,IAAIo3B,EAAQO,EAAOX,EAAUY,OAAQC,EAAOb,EAAUc,iBAAkBT,EAAiBL,EAAUK,gBAAkB,SAAS1d,EAAQ2d,GAClI,GAAI/zB,OAAOmC,UAAU6xB,eAAe95B,KAAKkc,EAAQ2d,GAC/C,OAAO3d,EAAO2d,EAGpB,EAEF,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,qCACN,EAAE,EAAI,SAASD,EAAUC,EAAOC,EAAQC,EAASn3B,GAC7C,IAAIo3B,EAAQO,EAAOX,EAAUY,OAAQC,EAAOb,EAAUc,iBAAkBT,EAAiBL,EAAUK,gBAAkB,SAAS1d,EAAQ2d,GAClI,GAAI/zB,OAAOmC,UAAU6xB,eAAe95B,KAAKkc,EAAQ2d,GAC/C,OAAO3d,EAAO2d,EAGpB,EAEF,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,yBACN,EAAE,EAAI,SAASD,EAAUC,EAAOC,EAAQC,EAASn3B,GAC7C,IAAIo3B,EAAQC,EAAiBL,EAAUK,gBAAkB,SAAS1d,EAAQ2d,GACtE,GAAI/zB,OAAOmC,UAAU6xB,eAAe95B,KAAKkc,EAAQ2d,GAC/C,OAAO3d,EAAO2d,EAGpB,EAEF,OAAsa,OAA7ZF,EAASC,EAAeH,EAAQ,MAAMz5B,KAAe,MAAVw5B,EAAiBA,EAAUD,EAAUQ,aAAe,CAAC,EAA+E,OAA1EJ,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,cAAgBA,EAAQ,CAAC,KAAO,KAAK,KAAO,CAAC,EAAE,GAAKJ,EAAUS,QAAQ,EAAGz3B,EAAM,GAAG,QAAUg3B,EAAUS,QAAQ,GAAIz3B,EAAM,GAAG,KAAOA,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,GAAG,IAAM,CAAC,KAAO,GAAG,OAAS,OAAiBo3B,EAAS,EACxb,EAAE,EAAI,SAASJ,EAAUC,EAAOC,EAAQC,EAASn3B,GAC7C,IAAIo3B,EAAQC,EAAiBL,EAAUK,gBAAkB,SAAS1d,EAAQ2d,GACtE,GAAI/zB,OAAOmC,UAAU6xB,eAAe95B,KAAKkc,EAAQ2d,GAC/C,OAAO3d,EAAO2d,EAGpB,EAEF,OAAwZ,OAA/YF,EAASC,EAAeH,EAAQ,MAAMz5B,KAAe,MAAVw5B,EAAiBA,EAAUD,EAAUQ,aAAe,CAAC,EAA+E,OAA1EJ,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,gBAAkBA,EAAQ,CAAC,KAAO,KAAK,KAAO,CAAC,EAAE,GAAKJ,EAAUS,QAAQ,EAAGz3B,EAAM,GAAG,QAAUg3B,EAAUU,KAAK,KAAO13B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,GAAG,IAAM,CAAC,KAAO,GAAG,OAAS,OAAiBo3B,EAAS,EAC1a,EAAE,EAAI,SAASJ,EAAUC,EAAOC,EAAQC,EAASn3B,GAC7C,IAAIo3B,EAAQC,EAAiBL,EAAUK,gBAAkB,SAAS1d,EAAQ2d,GACtE,GAAI/zB,OAAOmC,UAAU6xB,eAAe95B,KAAKkc,EAAQ2d,GAC/C,OAAO3d,EAAO2d,EAGpB,EAEF,MAAO,+CACHN,EAAUc,iBAAiBd,EAAUY,OAAmF,OAA1ER,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,cAAgBA,EAASH,IAC9K,sDACN,EAAE,GAAK,SAASD,EAAUC,EAAOC,EAAQC,EAASn3B,GAC9C,MAAO,kCACX,EAAE,GAAK,SAASg3B,EAAUC,EAAOC,EAAQC,EAASn3B,GAC9C,IAAIo3B,EAAQO,EAAiB,MAAVV,EAAiBA,EAAUD,EAAUQ,aAAe,CAAC,EAAIH,EAAiBL,EAAUK,gBAAkB,SAAS1d,EAAQ2d,GACtI,GAAI/zB,OAAOmC,UAAU6xB,eAAe95B,KAAKkc,EAAQ2d,GAC/C,OAAO3d,EAAO2d,EAGpB,EAEF,OAAwW,OAA/VF,EAASC,EAAeH,EAAQ,MAAMz5B,KAAKk6B,EAAmF,OAA1EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,gBAAkBA,EAAQ,CAAC,KAAO,KAAK,KAAO,CAAC,EAAE,GAAKJ,EAAUS,QAAQ,GAAIz3B,EAAM,GAAG,QAAUg3B,EAAUU,KAAK,KAAO13B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,GAAG,IAAM,CAAC,KAAO,GAAG,OAAS,OAAiBo3B,EAAS,KACtB,OAA5VA,EAASC,EAAeH,EAAQ,MAAMz5B,KAAKk6B,EAAmF,OAA1EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,aAAeA,EAAQ,CAAC,KAAO,KAAK,KAAO,CAAC,EAAE,GAAKJ,EAAUS,QAAQ,GAAIz3B,EAAM,GAAG,QAAUg3B,EAAUU,KAAK,KAAO13B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,GAAG,IAAM,CAAC,KAAO,GAAG,OAAS,OAAiBo3B,EAAS,GACpX,EAAE,GAAK,SAASJ,EAAUC,EAAOC,EAAQC,EAASn3B,GAC9C,IAAIo3B,EAAQO,EAAOX,EAAUY,OAAQC,EAAOb,EAAUc,iBAAkBT,EAAiBL,EAAUK,gBAAkB,SAAS1d,EAAQ2d,GAClI,GAAI/zB,OAAOmC,UAAU6xB,eAAe95B,KAAKkc,EAAQ2d,GAC/C,OAAO3d,EAAO2d,EAGpB,EAEF,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,oBACN,EAAE,GAAK,SAASD,EAAUC,EAAOC,EAAQC,EAASn3B,GAC9C,IAAIo3B,EAAQO,EAAOX,EAAUY,OAAQC,EAAOb,EAAUc,iBAAkBT,EAAiBL,EAAUK,gBAAkB,SAAS1d,EAAQ2d,GAClI,GAAI/zB,OAAOmC,UAAU6xB,eAAe95B,KAAKkc,EAAQ2d,GAC/C,OAAO3d,EAAO2d,EAGpB,EAEF,MAAO,mCACHO,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,iBACAY,EAAOF,EAAsJ,OAA7IP,EAAqF,OAA1EA,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,aAAeA,GAAmBC,EAAeD,EAAO,SAAWA,EAASH,IAC9M,uBACAY,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,gBACN,EAAE,GAAK,SAASD,EAAUC,EAAOC,EAAQC,EAASn3B,GAC9C,IAAIo3B,EAAQC,EAAiBL,EAAUK,gBAAkB,SAAS1d,EAAQ2d,GACtE,GAAI/zB,OAAOmC,UAAU6xB,eAAe95B,KAAKkc,EAAQ2d,GAC/C,OAAO3d,EAAO2d,EAGpB,EAEF,OAAsa,OAA7ZF,EAASC,EAAeH,EAAQ,MAAMz5B,KAAe,MAAVw5B,EAAiBA,EAAUD,EAAUQ,aAAe,CAAC,EAA+E,OAA1EJ,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,aAAeA,EAAQ,CAAC,KAAO,KAAK,KAAO,CAAC,EAAE,GAAKJ,EAAUS,QAAQ,GAAIz3B,EAAM,GAAG,QAAUg3B,EAAUS,QAAQ,GAAIz3B,EAAM,GAAG,KAAOA,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,GAAG,IAAM,CAAC,KAAO,GAAG,OAAS,OAAiBo3B,EAAS,EACxb,EAAE,GAAK,SAASJ,EAAUC,EAAOC,EAAQC,EAASn3B,GAC9C,IAAIo3B,EAAQO,EAAOX,EAAUY,OAAQC,EAAOb,EAAUc,iBAAkBT,EAAiBL,EAAUK,gBAAkB,SAAS1d,EAAQ2d,GAClI,GAAI/zB,OAAOmC,UAAU6xB,eAAe95B,KAAKkc,EAAQ2d,GAC/C,OAAO3d,EAAO2d,EAGpB,EAEF,MAAO,2BACHO,EAAOF,EAAsJ,OAA7IP,EAAqF,OAA1EA,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,aAAeA,GAAmBC,EAAeD,EAAO,aAAeA,EAASH,IAClN,kCACAY,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,mDACAY,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,uBACAY,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,cACN,EAAE,GAAK,SAASD,EAAUC,EAAOC,EAAQC,EAASn3B,GAC9C,IAAIo3B,EAAQO,EAAOX,EAAUY,OAAQC,EAAOb,EAAUc,iBAAkBT,EAAiBL,EAAUK,gBAAkB,SAAS1d,EAAQ2d,GAClI,GAAI/zB,OAAOmC,UAAU6xB,eAAe95B,KAAKkc,EAAQ2d,GAC/C,OAAO3d,EAAO2d,EAGpB,EAEF,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,oBACN,EAAE,GAAK,SAASD,EAAUC,EAAOC,EAAQC,EAASn3B,GAC9C,IAAIo3B,EAAQO,EAAOX,EAAUY,OAAQC,EAAOb,EAAUc,iBAAkBT,EAAiBL,EAAUK,gBAAkB,SAAS1d,EAAQ2d,GAClI,GAAI/zB,OAAOmC,UAAU6xB,eAAe95B,KAAKkc,EAAQ2d,GAC/C,OAAO3d,EAAO2d,EAGpB,EAEF,MAAO,kCACHO,EAAOF,EAAyJ,OAAhJP,EAAqF,OAA1EA,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,gBAAkBA,GAAmBC,EAAeD,EAAO,aAAeA,EAASH,IACrN,iBACAY,EAAOF,EAAyJ,OAAhJP,EAAqF,OAA1EA,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,gBAAkBA,GAAmBC,EAAeD,EAAO,SAAWA,EAASH,IACjN,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,YACN,EAAE,GAAK,SAASD,EAAUC,EAAOC,EAAQC,EAASn3B,GAC9C,IAAIo3B,EAAQC,EAAiBL,EAAUK,gBAAkB,SAAS1d,EAAQ2d,GACtE,GAAI/zB,OAAOmC,UAAU6xB,eAAe95B,KAAKkc,EAAQ2d,GAC/C,OAAO3d,EAAO2d,EAGpB,EAEF,MAAO,qGAC+Y,OAAhZF,EAASC,EAAeH,EAAQ,QAAQz5B,KAAe,MAAVw5B,EAAiBA,EAAUD,EAAUQ,aAAe,CAAC,EAA+E,OAA1EJ,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,WAAaA,EAAQ,CAAC,KAAO,OAAO,KAAO,CAAC,EAAE,GAAKJ,EAAUS,QAAQ,GAAIz3B,EAAM,GAAG,QAAUg3B,EAAUU,KAAK,KAAO13B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,GAAG,IAAM,CAAC,KAAO,GAAG,OAAS,QAAkBo3B,EAAS,IACla,uBACN,EAAE,GAAK,SAASJ,EAAUC,EAAOC,EAAQC,EAASn3B,GAC9C,IAAI+3B,EAAQJ,EAAiB,MAAVV,EAAiBA,EAAUD,EAAUQ,aAAe,CAAC,EAAIK,EAAOb,EAAUgB,MAAMC,cAAeC,EAAO,WAAYC,EAAOnB,EAAUc,iBAAkBT,EAAiBL,EAAUK,gBAAkB,SAAS1d,EAAQ2d,GAClO,GAAI/zB,OAAOmC,UAAU6xB,eAAe95B,KAAKkc,EAAQ2d,GAC/C,OAAO3d,EAAO2d,EAGpB,EAEF,MAAO,gCACHa,SAASJ,EAA6H,OAAnHA,EAASV,EAAeH,EAAQ,eAA2B,MAAVD,EAAiBI,EAAeJ,EAAO,aAAeA,IAAmBc,EAASF,KAA2BK,EAASH,EAAOt6B,KAAKk6B,EAAO,CAAC,KAAO,YAAY,KAAO,CAAC,EAAE,KAAO33B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,IAAI,IAAM,CAAC,KAAO,GAAG,OAAS,OAAS+3B,GACjU,2BACAI,SAASJ,EAAmH,OAAzGA,EAASV,EAAeH,EAAQ,UAAsB,MAAVD,EAAiBI,EAAeJ,EAAO,QAAUA,IAAmBc,EAASF,KAA2BK,EAASH,EAAOt6B,KAAKk6B,EAAO,CAAC,KAAO,OAAO,KAAO,CAAC,EAAE,KAAO33B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,IAAI,IAAM,CAAC,KAAO,GAAG,OAAS,OAAS+3B,GAClT,8BACAI,SAASJ,EAAqH,OAA3GA,EAASV,EAAeH,EAAQ,WAAuB,MAAVD,EAAiBI,EAAeJ,EAAO,SAAWA,IAAmBc,EAASF,KAA2BK,EAASH,EAAOt6B,KAAKk6B,EAAO,CAAC,KAAO,QAAQ,KAAO,CAAC,EAAE,KAAO33B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,IAAI,IAAM,CAAC,KAAO,GAAG,OAAS,OAAS+3B,GACrT,sCACN,EAAE,SAAW,CAAC,EAAE,YAAY,KAAO,SAASf,EAAUC,EAAOC,EAAQC,EAASn3B,GAC1E,IAAIo3B,EAAQO,EAAiB,MAAVV,EAAiBA,EAAUD,EAAUQ,aAAe,CAAC,EAAIH,EAAiBL,EAAUK,gBAAkB,SAAS1d,EAAQ2d,GACtI,GAAI/zB,OAAOmC,UAAU6xB,eAAe95B,KAAKkc,EAAQ2d,GAC/C,OAAO3d,EAAO2d,EAGpB,EAEF,OAA+W,OAAtWF,EAASC,EAAeH,EAAQ,MAAMz5B,KAAKk6B,EAAmF,OAA1EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,UAAYA,EAAQ,CAAC,KAAO,KAAK,KAAO,CAAC,EAAE,GAAKJ,EAAUS,QAAQ,EAAGz3B,EAAM,GAAG,QAAUg3B,EAAUS,QAAQ,EAAGz3B,EAAM,GAAG,KAAOA,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,EAAE,OAAS,GAAG,IAAM,CAAC,KAAO,GAAG,OAAS,OAAiBo3B,EAAS,KACZ,OAA7WA,EAASC,EAAeH,EAAQ,MAAMz5B,KAAKk6B,EAAmF,OAA1EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,cAAgBA,EAAQ,CAAC,KAAO,KAAK,KAAO,CAAC,EAAE,GAAKJ,EAAUS,QAAQ,GAAIz3B,EAAM,GAAG,QAAUg3B,EAAUS,QAAQ,GAAIz3B,EAAM,GAAG,KAAOA,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,GAAG,IAAM,CAAC,KAAO,GAAG,OAAS,OAAiBo3B,EAAS,KAC7B,OAAhWA,EAASC,EAAeH,EAAQ,MAAMz5B,KAAKk6B,EAAmF,OAA1EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,iBAAmBA,EAAQ,CAAC,KAAO,KAAK,KAAO,CAAC,EAAE,GAAKJ,EAAUS,QAAQ,GAAIz3B,EAAM,GAAG,QAAUg3B,EAAUU,KAAK,KAAO13B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,GAAG,IAAM,CAAC,KAAO,GAAG,OAAS,OAAiBo3B,EAAS,KACf,OAAjWA,EAASC,EAAeH,EAAQ,MAAMz5B,KAAKk6B,EAAmF,OAA1EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,WAAaA,GAAmBI,EAAeD,EAAO,kBAAoBA,EAAQ,CAAC,KAAO,KAAK,KAAO,CAAC,EAAE,GAAKJ,EAAUS,QAAQ,GAAIz3B,EAAM,GAAG,QAAUg3B,EAAUU,KAAK,KAAO13B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,GAAG,IAAM,CAAC,KAAO,GAAG,OAAS,OAAiBo3B,EAAS,GACzX,EAAE,SAAU,2BC/OZ,IAAI1W,EAAa,EAAQ,OAEzBoW,EAAOC,SAAWrW,EAAoB,SAAKA,GAAYtY,SAAS,CAAC,SAAW,CAAC,EAAE,YAAY,KAAO,SAAS4uB,EAAUC,EAAOC,EAAQC,EAASn3B,GACzI,IAAI+3B,EAAQV,EAAiBL,EAAUK,gBAAkB,SAAS1d,EAAQ2d,GACtE,GAAI/zB,OAAOmC,UAAU6xB,eAAe95B,KAAKkc,EAAQ2d,GAC/C,OAAO3d,EAAO2d,EAGpB,EAEF,MAAO,wEACHN,EAAUc,iBAAgO,mBAA7MC,EAA2I,OAAjIA,EAASV,EAAeH,EAAQ,sBAAkC,MAAVD,EAAiBI,EAAeJ,EAAO,oBAAsBA,IAAmBc,EAASf,EAAUgB,MAAMC,eAA+CF,EAAOt6B,KAAe,MAAVw5B,EAAiBA,EAAUD,EAAUQ,aAAe,CAAC,EAAG,CAAC,KAAO,mBAAmB,KAAO,CAAC,EAAE,KAAOx3B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,EAAE,OAAS,GAAG,IAAM,CAAC,KAAO,EAAE,OAAS,OAAS+3B,GACnb,iBACN,EAAE,SAAU,2BCbZ,IAAIrX,EAAa,EAAQ,OAEzBoW,EAAOC,SAAWrW,EAAoB,SAAKA,GAAYtY,SAAS,CAAC,EAAI,SAAS4uB,EAAUC,EAAOC,EAAQC,EAASn3B,GAC5G,IAAI+3B,EAAQV,EAAiBL,EAAUK,gBAAkB,SAAS1d,EAAQ2d,GACtE,GAAI/zB,OAAOmC,UAAU6xB,eAAe95B,KAAKkc,EAAQ2d,GAC/C,OAAO3d,EAAO2d,EAGpB,EAEF,MAAO,wEACHN,EAAUc,iBAAsO,mBAAnNC,EAAiJ,OAAvIA,EAASV,EAAeH,EAAQ,yBAAqC,MAAVD,EAAiBI,EAAeJ,EAAO,uBAAyBA,IAAmBc,EAASf,EAAUgB,MAAMC,eAA+CF,EAAOt6B,KAAe,MAAVw5B,EAAiBA,EAAUD,EAAUQ,aAAe,CAAC,EAAG,CAAC,KAAO,sBAAsB,KAAO,CAAC,EAAE,KAAOx3B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,EAAE,OAAS,GAAG,IAAM,CAAC,KAAO,EAAE,OAAS,OAAS+3B,GAC5b,iBACN,EAAE,EAAI,SAASf,EAAUC,EAAOC,EAAQC,EAASn3B,GAC7C,IAAI+3B,EAAQJ,EAAiB,MAAVV,EAAiBA,EAAUD,EAAUQ,aAAe,CAAC,EAAIK,EAAOb,EAAUgB,MAAMC,cAAeC,EAAO,WAAYC,EAAOnB,EAAUc,iBAAkBT,EAAiBL,EAAUK,gBAAkB,SAAS1d,EAAQ2d,GAClO,GAAI/zB,OAAOmC,UAAU6xB,eAAe95B,KAAKkc,EAAQ2d,GAC/C,OAAO3d,EAAO2d,EAGpB,EAEF,MAAO,gCACHa,SAASJ,EAAuI,OAA7HA,EAASV,EAAeH,EAAQ,oBAAgC,MAAVD,EAAiBI,EAAeJ,EAAO,kBAAoBA,IAAmBc,EAASF,KAA2BK,EAASH,EAAOt6B,KAAKk6B,EAAO,CAAC,KAAO,iBAAiB,KAAO,CAAC,EAAE,KAAO33B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,EAAE,OAAS,IAAI,IAAM,CAAC,KAAO,EAAE,OAAS,OAAS+3B,GAC9U,KACAI,SAASJ,EAAiJ,OAAvIA,EAASV,EAAeH,EAAQ,yBAAqC,MAAVD,EAAiBI,EAAeJ,EAAO,uBAAyBA,IAAmBc,EAASF,KAA2BK,EAASH,EAAOt6B,KAAKk6B,EAAO,CAAC,KAAO,sBAAsB,KAAO,CAAC,EAAE,KAAO33B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,EAAE,OAAS,IAAI,IAAM,CAAC,KAAO,EAAE,OAAS,OAAS+3B,GAC7V,cACN,EAAE,EAAI,SAASf,EAAUC,EAAOC,EAAQC,EAASn3B,GAC7C,IAAIo3B,EAAQC,EAAiBL,EAAUK,gBAAkB,SAAS1d,EAAQ2d,GACtE,GAAI/zB,OAAOmC,UAAU6xB,eAAe95B,KAAKkc,EAAQ2d,GAC/C,OAAO3d,EAAO2d,EAGpB,EAEF,OAAwV,OAA/UF,EAASC,EAAeH,EAAQ,MAAMz5B,KAAe,MAAVw5B,EAAiBA,EAAUD,EAAUQ,aAAe,CAAC,EAAc,MAAVP,EAAiBI,EAAeJ,EAAO,iBAAmBA,EAAQ,CAAC,KAAO,KAAK,KAAO,CAAC,EAAE,GAAKD,EAAUS,QAAQ,EAAGz3B,EAAM,GAAG,QAAUg3B,EAAUU,KAAK,KAAO13B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,GAAG,IAAM,CAAC,KAAO,GAAG,OAAS,OAAiBo3B,EAAS,EAC1W,EAAE,EAAI,SAASJ,EAAUC,EAAOC,EAAQC,EAASn3B,GAC7C,IAAI+3B,EAAQJ,EAAiB,MAAVV,EAAiBA,EAAUD,EAAUQ,aAAe,CAAC,EAAIK,EAAOb,EAAUgB,MAAMC,cAAeC,EAAO,WAAYC,EAAOnB,EAAUc,iBAAkBT,EAAiBL,EAAUK,gBAAkB,SAAS1d,EAAQ2d,GAClO,GAAI/zB,OAAOmC,UAAU6xB,eAAe95B,KAAKkc,EAAQ2d,GAC/C,OAAO3d,EAAO2d,EAGpB,EAEF,MAAO,gCACHa,SAASJ,EAA+I,OAArIA,EAASV,EAAeH,EAAQ,wBAAoC,MAAVD,EAAiBI,EAAeJ,EAAO,sBAAwBA,IAAmBc,EAASF,KAA2BK,EAASH,EAAOt6B,KAAKk6B,EAAO,CAAC,KAAO,qBAAqB,KAAO,CAAC,EAAE,KAAO33B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,IAAI,IAAM,CAAC,KAAO,GAAG,OAAS,OAAS+3B,GAC5V,KACAI,SAASJ,EAAiJ,OAAvIA,EAASV,EAAeH,EAAQ,yBAAqC,MAAVD,EAAiBI,EAAeJ,EAAO,uBAAyBA,IAAmBc,EAASF,KAA2BK,EAASH,EAAOt6B,KAAKk6B,EAAO,CAAC,KAAO,sBAAsB,KAAO,CAAC,EAAE,KAAO33B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,GAAG,OAAS,IAAI,IAAM,CAAC,KAAO,GAAG,OAAS,OAAS+3B,GAC/V,cACN,EAAE,SAAW,CAAC,EAAE,YAAY,KAAO,SAASf,EAAUC,EAAOC,EAAQC,EAASn3B,GAC1E,IAAIo3B,EAAQO,EAAiB,MAAVV,EAAiBA,EAAUD,EAAUQ,aAAe,CAAC,EAAIH,EAAiBL,EAAUK,gBAAkB,SAAS1d,EAAQ2d,GACtI,GAAI/zB,OAAOmC,UAAU6xB,eAAe95B,KAAKkc,EAAQ2d,GAC/C,OAAO3d,EAAO2d,EAGpB,EAEF,OAAyW,OAAhWF,EAASC,EAAeH,EAAQ,UAAUz5B,KAAKk6B,EAAoF,OAA3EP,EAAoB,MAAVH,EAAiBI,EAAeJ,EAAO,YAAcA,GAAmBI,EAAeD,EAAO,UAAYA,EAAQ,CAAC,KAAO,SAAS,KAAO,CAAC,EAAE,GAAKJ,EAAUS,QAAQ,EAAGz3B,EAAM,GAAG,QAAUg3B,EAAUU,KAAK,KAAO13B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,EAAE,OAAS,GAAG,IAAM,CAAC,KAAO,EAAE,OAAS,QAAkBo3B,EAAS,IACrX,4CACmT,OAAjTA,EAASC,EAAeH,EAAQ,MAAMz5B,KAAKk6B,EAAkB,MAAVV,EAAiBI,EAAeJ,EAAO,sBAAwBA,EAAQ,CAAC,KAAO,KAAK,KAAO,CAAC,EAAE,GAAKD,EAAUS,QAAQ,EAAGz3B,EAAM,GAAG,QAAUg3B,EAAUS,QAAQ,EAAGz3B,EAAM,GAAG,KAAOA,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,EAAE,OAAS,GAAG,IAAM,CAAC,KAAO,GAAG,OAAS,OAAiBo3B,EAAS,GACzU,EAAE,SAAU,2BC3DZ,IAAI1W,EAAa,EAAQ,OAEzBoW,EAAOC,SAAWrW,EAAoB,SAAKA,GAAYtY,SAAS,CAAC,SAAW,CAAC,EAAE,YAAY,KAAO,SAAS4uB,EAAUC,EAAOC,EAAQC,EAASn3B,GACzI,IAAI+3B,EAAQV,EAAiBL,EAAUK,gBAAkB,SAAS1d,EAAQ2d,GACtE,GAAI/zB,OAAOmC,UAAU6xB,eAAe95B,KAAKkc,EAAQ2d,GAC/C,OAAO3d,EAAO2d,EAGpB,EAEF,MAAO,yEACHN,EAAUc,iBAAsN,mBAAnMC,EAAiI,OAAvHA,EAASV,EAAeH,EAAQ,iBAA6B,MAAVD,EAAiBI,EAAeJ,EAAO,eAAiBA,IAAmBc,EAASf,EAAUgB,MAAMC,eAA+CF,EAAOt6B,KAAe,MAAVw5B,EAAiBA,EAAUD,EAAUQ,aAAe,CAAC,EAAG,CAAC,KAAO,cAAc,KAAO,CAAC,EAAE,KAAOx3B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,EAAE,OAAS,GAAG,IAAM,CAAC,KAAO,EAAE,OAAS,OAAS+3B,GACpa,iBACN,EAAE,SAAU,2BCbZ,IAAIrX,EAAa,EAAQ,OAEzBoW,EAAOC,SAAWrW,EAAoB,SAAKA,GAAYtY,SAAS,CAAC,SAAW,CAAC,EAAE,YAAY,KAAO,SAAS4uB,EAAUC,EAAOC,EAAQC,EAASn3B,GACzI,IAAI+3B,EAAQJ,EAAiB,MAAVV,EAAiBA,EAAUD,EAAUQ,aAAe,CAAC,EAAIK,EAAOb,EAAUgB,MAAMC,cAAeC,EAAO,WAAYC,EAAOnB,EAAUc,iBAAkBT,EAAiBL,EAAUK,gBAAkB,SAAS1d,EAAQ2d,GAClO,GAAI/zB,OAAOmC,UAAU6xB,eAAe95B,KAAKkc,EAAQ2d,GAC/C,OAAO3d,EAAO2d,EAGpB,EAEF,MAAO,4DACHa,SAASJ,EAA+I,OAArIA,EAASV,EAAeH,EAAQ,wBAAoC,MAAVD,EAAiBI,EAAeJ,EAAO,sBAAwBA,IAAmBc,EAASF,KAA2BK,EAASH,EAAOt6B,KAAKk6B,EAAO,CAAC,KAAO,qBAAqB,KAAO,CAAC,EAAE,KAAO33B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,EAAE,OAAS,IAAI,IAAM,CAAC,KAAO,EAAE,OAAS,OAAS+3B,GAC1V,wEACAI,SAASJ,EAA+I,OAArIA,EAASV,EAAeH,EAAQ,wBAAoC,MAAVD,EAAiBI,EAAeJ,EAAO,sBAAwBA,IAAmBc,EAASF,KAA2BK,EAASH,EAAOt6B,KAAKk6B,EAAO,CAAC,KAAO,qBAAqB,KAAO,CAAC,EAAE,KAAO33B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,EAAE,OAAS,IAAI,IAAM,CAAC,KAAO,EAAE,OAAS,OAAS+3B,GAC1V,YACAI,SAASJ,EAA+H,OAArHA,EAASV,EAAeH,EAAQ,gBAA4B,MAAVD,EAAiBI,EAAeJ,EAAO,cAAgBA,IAAmBc,EAASF,KAA2BK,EAASH,EAAOt6B,KAAKk6B,EAAO,CAAC,KAAO,aAAa,KAAO,CAAC,EAAE,KAAO33B,EAAK,IAAM,CAAC,MAAQ,CAAC,KAAO,EAAE,OAAS,IAAI,IAAM,CAAC,KAAO,EAAE,OAAS,QAAU+3B,GACnU,qCACN,EAAE,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,IAAIr2B,EAAKs2B,EAAsBD,GAC/B,OAAOE,EAAoBv2B,EAC5B,CACA,SAASs2B,EAAsBD,GAC9B,IAAIE,EAAoBC,EAAEL,EAAKE,GAAM,CACpC,IAAIhvB,EAAI,IAAIjE,MAAM,uBAAyBizB,EAAM,KAEjD,MADAhvB,EAAEovB,KAAO,mBACHpvB,CACP,CACA,OAAO8uB,EAAIE,EACZ,CACAD,EAAeM,KAAO,WACrB,OAAOp1B,OAAOo1B,KAAKP,EACpB,EACAC,EAAehtB,QAAUktB,EACzBzB,EAAOC,QAAUsB,EACjBA,EAAep2B,GAAK,QClShB22B,EAA2B,CAAC,EAGhC,SAASJ,EAAoBK,GAE5B,IAAIC,EAAeF,EAAyBC,GAC5C,QAAqB37B,IAAjB47B,EACH,OAAOA,EAAa/B,QAGrB,IAAID,EAAS8B,EAAyBC,GAAY,CACjD52B,GAAI42B,EACJE,QAAQ,EACRhC,QAAS,CAAC,GAUX,OANAiC,EAAoBH,GAAUp7B,KAAKq5B,EAAOC,QAASD,EAAQA,EAAOC,QAASyB,GAG3E1B,EAAOiC,QAAS,EAGTjC,EAAOC,OACf,CAGAyB,EAAoB7T,EAAIqU,EpF5BpBz8B,EAAW,GACfi8B,EAAoBS,EAAI,SAASz3B,EAAQ03B,EAAUzI,EAAI0I,GACtD,IAAGD,EAAH,CAMA,IAAIE,EAAeC,IACnB,IAAS5jB,EAAI,EAAGA,EAAIlZ,EAASuC,OAAQ2W,IAAK,CACrCyjB,EAAW38B,EAASkZ,GAAG,GACvBgb,EAAKl0B,EAASkZ,GAAG,GACjB0jB,EAAW58B,EAASkZ,GAAG,GAE3B,IAJA,IAGI6jB,GAAY,EACP9jB,EAAI,EAAGA,EAAI0jB,EAASp6B,OAAQ0W,MACpB,EAAX2jB,GAAsBC,GAAgBD,IAAa51B,OAAOo1B,KAAKH,EAAoBS,GAAGM,OAAM,SAAS94B,GAAO,OAAO+3B,EAAoBS,EAAEx4B,GAAKy4B,EAAS1jB,GAAK,IAChK0jB,EAASM,OAAOhkB,IAAK,IAErB8jB,GAAY,EACTH,EAAWC,IAAcA,EAAeD,IAG7C,GAAGG,EAAW,CACb/8B,EAASi9B,OAAO/jB,IAAK,GACrB,IAAIgkB,EAAIhJ,SACEvzB,IAANu8B,IAAiBj4B,EAASi4B,EAC/B,CACD,CACA,OAAOj4B,CArBP,CAJC23B,EAAWA,GAAY,EACvB,IAAI,IAAI1jB,EAAIlZ,EAASuC,OAAQ2W,EAAI,GAAKlZ,EAASkZ,EAAI,GAAG,GAAK0jB,EAAU1jB,IAAKlZ,EAASkZ,GAAKlZ,EAASkZ,EAAI,GACrGlZ,EAASkZ,GAAK,CAACyjB,EAAUzI,EAAI0I,EAwB/B,EqF5BAX,EAAoB9e,EAAI,SAASod,GAChC,IAAI4C,EAAS5C,GAAUA,EAAO6C,WAC7B,WAAa,OAAO7C,EAAgB,OAAG,EACvC,WAAa,OAAOA,CAAQ,EAE7B,OADA0B,EAAoBoB,EAAEF,EAAQ,CAAEhS,EAAGgS,IAC5BA,CACR,ECNAlB,EAAoBoB,EAAI,SAAS7C,EAAS8C,GACzC,IAAI,IAAIp5B,KAAOo5B,EACXrB,EAAoBC,EAAEoB,EAAYp5B,KAAS+3B,EAAoBC,EAAE1B,EAASt2B,IAC5E8C,OAAOu2B,eAAe/C,EAASt2B,EAAK,CAAEs5B,YAAY,EAAMtzB,IAAKozB,EAAWp5B,IAG3E,ECPA+3B,EAAoB9S,EAAI,WACvB,GAA0B,iBAAfsU,WAAyB,OAAOA,WAC3C,IACC,OAAOl9B,MAAQ,IAAIm9B,SAAS,cAAb,EAChB,CAAE,MAAO3wB,GACR,GAAsB,iBAAXlJ,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBo4B,EAAoBC,EAAI,SAASyB,EAAK5mB,GAAQ,OAAO/P,OAAOmC,UAAU6xB,eAAe95B,KAAKy8B,EAAK5mB,EAAO,ECCtGklB,EAAoBiB,EAAI,SAAS1C,GACX,oBAAXoD,QAA0BA,OAAOC,aAC1C72B,OAAOu2B,eAAe/C,EAASoD,OAAOC,YAAa,CAAEx5B,MAAO,WAE7D2C,OAAOu2B,eAAe/C,EAAS,aAAc,CAAEn2B,OAAO,GACvD,ECNA43B,EAAoB6B,IAAM,SAASvD,GAGlC,OAFAA,EAAOtZ,MAAQ,GACVsZ,EAAOld,WAAUkd,EAAOld,SAAW,IACjCkd,CACR,ECJA0B,EAAoBhjB,EAAI,gBCAxBgjB,EAAoBnT,EAAI3Z,SAAS4uB,SAAWpzB,KAAK4b,SAASlhB,KAK1D,IAAI24B,EAAkB,CACrB,KAAM,GAaP/B,EAAoBS,EAAEzjB,EAAI,SAASglB,GAAW,OAAoC,IAA7BD,EAAgBC,EAAgB,EAGrF,IAAIC,EAAuB,SAASC,EAA4B16B,GAC/D,IAKI64B,EAAU2B,EALVtB,EAAWl5B,EAAK,GAChB26B,EAAc36B,EAAK,GACnB46B,EAAU56B,EAAK,GAGIyV,EAAI,EAC3B,GAAGyjB,EAAS2B,MAAK,SAAS54B,GAAM,OAA+B,IAAxBs4B,EAAgBt4B,EAAW,IAAI,CACrE,IAAI42B,KAAY8B,EACZnC,EAAoBC,EAAEkC,EAAa9B,KACrCL,EAAoB7T,EAAEkU,GAAY8B,EAAY9B,IAGhD,GAAG+B,EAAS,IAAIp5B,EAASo5B,EAAQpC,EAClC,CAEA,IADGkC,GAA4BA,EAA2B16B,GACrDyV,EAAIyjB,EAASp6B,OAAQ2W,IACzB+kB,EAAUtB,EAASzjB,GAChB+iB,EAAoBC,EAAE8B,EAAiBC,IAAYD,EAAgBC,IACrED,EAAgBC,GAAS,KAE1BD,EAAgBC,GAAW,EAE5B,OAAOhC,EAAoBS,EAAEz3B,EAC9B,EAEIs5B,EAAqB5zB,KAA4B,sBAAIA,KAA4B,uBAAK,GAC1F4zB,EAAmB3zB,QAAQszB,EAAqBv6B,KAAK,KAAM,IAC3D46B,EAAmBpzB,KAAO+yB,EAAqBv6B,KAAK,KAAM46B,EAAmBpzB,KAAKxH,KAAK46B,OClDvFtC,EAAoBuC,QAAK79B,ECGzB,IAAI89B,EAAsBxC,EAAoBS,OAAE/7B,EAAW,CAAC,OAAO,WAAa,OAAOs7B,EAAoB,MAAQ,IACnHwC,EAAsBxC,EAAoBS,EAAE+B","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/core/src/OC/legacy-loader.js","webpack:///nextcloud/core/src/OC/notification.js","webpack:///nextcloud/core/src/OC/xhr-error.js","webpack:///nextcloud/core/src/OC/apps.js","webpack:///nextcloud/core/src/OCP/appconfig.js","webpack:///nextcloud/core/src/OC/appconfig.js","webpack:///nextcloud/core/src/OC/appswebroots.js","webpack:///nextcloud/core/src/OC/backbone-webdav.js","webpack:///nextcloud/core/src/OC/backbone.js","webpack:///nextcloud/core/src/OC/config.js","webpack:///nextcloud/core/src/OC/contactsmenu.js","webpack:///nextcloud/core/src/OC/currentuser.js","webpack:///nextcloud/core/src/OCA/search.js","webpack:///nextcloud/core/src/OCA/index.js","webpack:///nextcloud/core/src/Util/a11y.js","webpack:///nextcloud/core/src/OC/dialogs.js","webpack:///nextcloud/core/src/OC/requesttoken.js","webpack:///nextcloud/core/src/OC/eventsource.js","webpack:///nextcloud/core/src/OC/menu.js","webpack:///nextcloud/core/src/OC/constants.js","webpack:///nextcloud/core/src/OC/admin.js","webpack:///nextcloud/core/src/OC/l10n.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?ae59","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?3136","webpack://nextcloud/./core/src/components/login/LoginButton.vue?14f0","webpack://nextcloud/./core/src/components/login/LoginButton.vue?82aa","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?a91a","webpack://nextcloud/./core/src/components/login/LoginForm.vue?a678","webpack://nextcloud/./core/src/components/login/LoginForm.vue?4366","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?1a33","webpack://nextcloud/./core/src/components/login/PasswordLessLoginForm.vue?09eb","webpack://nextcloud/./core/src/components/login/PasswordLessLoginForm.vue?16ec","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?703c","webpack://nextcloud/./core/src/components/login/ResetPassword.vue?9d75","webpack://nextcloud/./core/src/components/login/ResetPassword.vue?7cf3","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?4361","webpack://nextcloud/./core/src/components/login/UpdatePassword.vue?30ca","webpack://nextcloud/./core/src/components/login/UpdatePassword.vue?1c8f","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?0fcd","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/LoginButton.vue?vue&type=style&index=0&id=756414a8&prod&lang=scss&scoped=true&","webpack:///nextcloud/core/src/components/login/LoginForm.vue?vue&type=style&index=0&id=5bd351bc&prod&lang=scss&scoped=true&","webpack:///nextcloud/core/src/components/login/PasswordLessLoginForm.vue?vue&type=style&index=0&id=20256748&prod&lang=scss&scoped=true&","webpack:///nextcloud/core/src/components/login/ResetPassword.vue?vue&type=style&index=0&id=27cabc60&prod&lang=scss&scoped=true&","webpack:///nextcloud/core/src/views/Login.vue?vue&type=style&index=0&id=7b955242&prod&lang=scss&","webpack:///nextcloud/core/src/components/login/UpdatePassword.vue?vue&type=style&index=0&id=4dc21d74&prod&scoped=true&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/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/** @typedef {import('jquery')} jQuery */\nimport $ from 'jquery'\nimport { generateFilePath } from '@nextcloud/router'\n\nconst loadedScripts = {}\nconst loadedStyles = []\n\n/**\n * Load a script for the server and load it. If the script is already loaded,\n * the event handler will be called directly\n *\n * @param {string} app the app id to which the script belongs\n * @param {string} script the filename of the script\n * @param {Function} ready event handler to be called when the script is loaded\n * @return {jQuery.Deferred}\n * @deprecated 16.0.0 Use OCP.Loader.loadScript\n */\nexport const addScript = (app, script, ready) => {\n\tconsole.warn('OC.addScript is deprecated, use OCP.Loader.loadScript instead')\n\n\tlet deferred\n\tconst path = generateFilePath(app, 'js', script + '.js')\n\tif (!loadedScripts[path]) {\n\t\tdeferred = $.Deferred()\n\t\t$.getScript(path, () => deferred.resolve())\n\t\tloadedScripts[path] = deferred\n\t} else {\n\t\tif (ready) {\n\t\t\tready()\n\t\t}\n\t}\n\treturn loadedScripts[path]\n}\n\n/**\n * Loads a CSS file\n *\n * @param {string} app the app id to which the css style belongs\n * @param {string} style the filename of the css file\n * @deprecated 16.0.0 Use OCP.Loader.loadStylesheet\n */\nexport const addStyle = (app, style) => {\n\tconsole.warn('OC.addStyle is deprecated, use OCP.Loader.loadStylesheet instead')\n\n\tconst path = generateFilePath(app, 'css', style + '.css')\n\tif (loadedStyles.indexOf(path) === -1) {\n\t\tloadedStyles.push(path)\n\t\tif (document.createStyleSheet) {\n\t\t\tdocument.createStyleSheet(path)\n\t\t} else {\n\t\t\tstyle = $('<link rel=\"stylesheet\" type=\"text/css\" href=\"' + path + '\"/>')\n\t\t\t$('head').append(style)\n\t\t}\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author npmbuildbot[bot] \"npmbuildbot[bot]@users.noreply.github.com\"\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\n/** @typedef {import('jquery')} jQuery */\nimport $ from 'jquery'\nimport { showMessage, TOAST_DEFAULT_TIMEOUT, TOAST_PERMANENT_TIMEOUT } from '@nextcloud/dialogs'\n\n/**\n * @todo Write documentation\n * @deprecated 17.0.0 use the `@nextcloud/dialogs` package instead\n * @namespace OC.Notification\n */\nexport default {\n\n\tupdatableNotification: null,\n\n\tgetDefaultNotificationFunction: null,\n\n\t/**\n\t * @param {Function} callback callback function\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tsetDefault(callback) {\n\t\tthis.getDefaultNotificationFunction = callback\n\t},\n\n\t/**\n\t * Hides a notification.\n\t *\n\t * If a row is given, only hide that one.\n\t * If no row is given, hide all notifications.\n\t *\n\t * @param {jQuery} [$row] notification row\n\t * @param {Function} [callback] callback\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\thide($row, callback) {\n\t\tif (_.isFunction($row)) {\n\t\t\t// first arg is the callback\n\t\t\tcallback = $row\n\t\t\t$row = undefined\n\t\t}\n\n\t\tif (!$row) {\n\t\t\tconsole.error('Missing argument $row in OC.Notification.hide() call, caller needs to be adjusted to only dismiss its own notification')\n\t\t\treturn\n\t\t}\n\n\t\t// remove the row directly\n\t\t$row.each(function() {\n\t\t\tif ($(this)[0].toastify) {\n\t\t\t\t$(this)[0].toastify.hideToast()\n\t\t\t} else {\n\t\t\t\tconsole.error('cannot hide toast because object is not set')\n\t\t\t}\n\t\t\tif (this === this.updatableNotification) {\n\t\t\t\tthis.updatableNotification = null\n\t\t\t}\n\t\t})\n\t\tif (callback) {\n\t\t\tcallback.call()\n\t\t}\n\t\tif (this.getDefaultNotificationFunction) {\n\t\t\tthis.getDefaultNotificationFunction()\n\t\t}\n\t},\n\n\t/**\n\t * Shows a notification as HTML without being sanitized before.\n\t * If you pass unsanitized user input this may lead to a XSS vulnerability.\n\t * Consider using show() instead of showHTML()\n\t *\n\t * @param {string} html Message to display\n\t * @param {object} [options] options\n\t * @param {string} [options.type] notification type\n\t * @param {number} [options.timeout=0] timeout value, defaults to 0 (permanent)\n\t * @return {jQuery} jQuery element for notification row\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshowHtml(html, options) {\n\t\toptions = options || {}\n\t\toptions.isHTML = true\n\t\toptions.timeout = (!options.timeout) ? TOAST_PERMANENT_TIMEOUT : options.timeout\n\t\tconst toast = showMessage(html, options)\n\t\ttoast.toastElement.toastify = toast\n\t\treturn $(toast.toastElement)\n\t},\n\n\t/**\n\t * Shows a sanitized notification\n\t *\n\t * @param {string} text Message to display\n\t * @param {object} [options] options\n\t * @param {string} [options.type] notification type\n\t * @param {number} [options.timeout=0] timeout value, defaults to 0 (permanent)\n\t * @return {jQuery} jQuery element for notification row\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshow(text, options) {\n\t\tconst escapeHTML = function(text) {\n\t\t\treturn text.toString()\n\t\t\t\t.split('&').join('&')\n\t\t\t\t.split('<').join('<')\n\t\t\t\t.split('>').join('>')\n\t\t\t\t.split('\"').join('"')\n\t\t\t\t.split('\\'').join(''')\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/** @type {string} */\n\ttagName: 'ul',\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 {string} */\n\ttagName: 'li',\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\treturn this\n\t},\n\n\t/**\n\t * Toggle the visibility of the action popover menu\n\t *\n\t * @private\n\t * @returns {undefined}\n\t */\n\t_onToggleActionsMenu: function() {\n\t\tthis._actionMenuShown = !this._actionMenuShown\n\t\tif (this._actionMenuShown) {\n\t\t\tthis.$('.menu').show()\n\t\t} else {\n\t\t\tthis.$('.menu').hide()\n\t\t}\n\t\tthis.trigger('toggle:actionmenu', this.$el)\n\t},\n\n\t/**\n\t * @private\n\t * @argument {jQuery} $src\n\t * @returns {undefined}\n\t */\n\t_onOtherActionMenuOpened: function($src) {\n\t\tif (this.$el.is($src)) {\n\t\t\t// Ignore\n\t\t\treturn\n\t\t}\n\t\tthis._actionMenuShown = false\n\t\tthis.$('.menu').hide()\n\t}\n})\n\n/**\n * @class ContactsMenuView\n * @private\n */\nconst ContactsMenuView = View.extend({\n\n\t/** @type {undefined|function} */\n\t_loadingTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_errorTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_contentTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_contactsTemplate: undefined,\n\n\t/** @type {undefined|ContactCollection} */\n\t_contacts: undefined,\n\n\t/** @type {string} */\n\t_searchTerm: '',\n\n\tevents: {\n\t\t'input #contactsmenu-search': '_onSearch'\n\t},\n\n\ttemplates: {\n\t\tloading: require('./contactsmenu/loading.handlebars'),\n\t\terror: require('./contactsmenu/error.handlebars'),\n\t\tmenu: require('./contactsmenu/menu.handlebars'),\n\t\tlist: require('./contactsmenu/list.handlebars')\n\t},\n\n\t/**\n\t * @returns {undefined}\n\t */\n\t_onSearch: _.debounce(function(e) {\n\t\tvar searchTerm = this.$('#contactsmenu-search').val()\n\t\t// IE11 triggers an 'input' event after the view has been rendered\n\t\t// resulting in an endless loading loop. To prevent this, we remember\n\t\t// the last search term to savely ignore some events\n\t\t// See https://github.com/nextcloud/server/issues/5281\n\t\tif (searchTerm !== this._searchTerm) {\n\t\t\tthis.trigger('search', this.$('#contactsmenu-search').val())\n\t\t\tthis._searchTerm = searchTerm\n\t\t}\n\t}, 700),\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tloadingTemplate: function(data) {\n\t\treturn this.templates.loading(data)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\terrorTemplate: function(data) {\n\t\treturn this.templates.error(\n\t\t\t_.extend({\n\t\t\t\tcouldNotLoadText: t('core', 'Could not load your contacts')\n\t\t\t}, data)\n\t\t)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tcontentTemplate: function(data) {\n\t\treturn this.templates.menu(\n\t\t\t_.extend({\n\t\t\t\tsearchContactsText: t('core', 'Search contacts …')\n\t\t\t}, data)\n\t\t)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tcontactsTemplate: function(data) {\n\t\treturn this.templates.list(\n\t\t\t_.extend({\n\t\t\t\tnoContactsFoundText: t('core', 'No contacts found'),\n\t\t\t\tshowAllContactsText: t('core', 'Show all contacts …'),\n\t\t\t\tcontactsAppMgmtText: t('core', 'Install the Contacts app')\n\t\t\t}, data)\n\t\t)\n\t},\n\n\t/**\n\t * @param {object} options\n\t * @returns {undefined}\n\t */\n\tinitialize: function(options) {\n\t\tthis.options = options\n\t},\n\n\t/**\n\t * @param {string} text\n\t * @returns {undefined}\n\t */\n\tshowLoading: function(text) {\n\t\tthis.render()\n\t\tthis._contacts = undefined\n\t\tthis.$('.content').html(this.loadingTemplate({\n\t\t\tloadingText: text\n\t\t}))\n\t},\n\n\t/**\n\t * @returns {undefined}\n\t */\n\tshowError: function() {\n\t\tthis.render()\n\t\tthis._contacts = undefined\n\t\tthis.$('.content').html(this.errorTemplate())\n\t},\n\n\t/**\n\t * @param {object} viewData\n\t * @param {string} searchTerm\n\t * @returns {undefined}\n\t */\n\tshowContacts: function(viewData, searchTerm) {\n\t\tthis._contacts = viewData.contacts\n\t\tthis.render({\n\t\t\tcontacts: viewData.contacts\n\t\t})\n\n\t\tvar list = new ContactsListView({\n\t\t\tcollection: viewData.contacts\n\t\t})\n\t\tlist.render()\n\t\tthis.$('.content').html(this.contactsTemplate({\n\t\t\tcontacts: viewData.contacts,\n\t\t\tsearchTerm: searchTerm,\n\t\t\tcontactsAppEnabled: viewData.contactsAppEnabled,\n\t\t\tcontactsAppURL: OC.generateUrl('/apps/contacts'),\n\t\t\tcanInstallApp: OC.isUserAdmin(),\n\t\t\tcontactsAppMgmtURL: OC.generateUrl('/settings/apps/social/contacts')\n\t\t}))\n\t\tthis.$('#contactsmenu-contacts').html(list.$el)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {self}\n\t */\n\trender: function(data) {\n\t\tvar searchVal = this.$('#contactsmenu-search').val()\n\t\tthis.$el.html(this.contentTemplate(data))\n\n\t\t// Focus search\n\t\tthis.$('#contactsmenu-search').val(searchVal)\n\t\tthis.$('#contactsmenu-search').focus()\n\t\treturn this\n\t}\n\n})\n\n/**\n * @param {Object} options\n * @param {string} options.el\n * @class ContactsMenu\n * @memberOf OC\n */\nconst ContactsMenu = function(options) {\n\tthis.initialize(options)\n}\n\nContactsMenu.prototype = {\n\t/** @type {string} */\n\t$el: undefined,\n\n\t/** @type {ContactsMenuView} */\n\t_view: undefined,\n\n\t/** @type {Promise} */\n\t_contactsPromise: undefined,\n\n\t/**\n\t * @param {Object} options\n\t * @param {string} options.el - the selector of the element to render the menu in\n\t * @returns {undefined}\n\t */\n\tinitialize: function(options) {\n\t\tthis.$el = $(options.el)\n\n\t\tthis._view = new ContactsMenuView({\n\t\t\tel: this.$el,\n\t\t})\n\n\t\tthis._view.on('search', function(searchTerm) {\n\t\t\tthis.loadContacts(searchTerm)\n\t\t}, this)\n\t},\n\n\t/**\n\t * @private\n\t * @param {string|undefined} searchTerm\n\t * @returns {Promise}\n\t */\n\t_getContacts: function(searchTerm) {\n\t\tvar url = OC.generateUrl('/contactsmenu/contacts')\n\t\treturn Promise.resolve($.ajax(url, {\n\t\t\tmethod: 'POST',\n\t\t\tdata: {\n\t\t\t\tfilter: searchTerm\n\t\t\t}\n\t\t}))\n\t},\n\n\t/**\n\t * @param {string|undefined} searchTerm\n\t * @returns {undefined}\n\t */\n\tloadContacts: function(searchTerm) {\n\t\tvar self = this\n\n\t\tif (!self._contactsPromise) {\n\t\t\tself._contactsPromise = self._getContacts(searchTerm)\n\t\t}\n\n\t\tif (_.isUndefined(searchTerm) || searchTerm === '') {\n\t\t\tself._view.showLoading(t('core', 'Loading your contacts …'))\n\t\t} else {\n\t\t\tself._view.showLoading(t('core', 'Looking for {term} …', {\n\t\t\t\tterm: searchTerm\n\t\t\t}))\n\t\t}\n\t\treturn self._contactsPromise.then(function(data) {\n\t\t\t// Convert contact entries to Backbone collection\n\t\t\tdata.contacts = new ContactCollection(data.contacts)\n\n\t\t\tself._view.showContacts(data, searchTerm)\n\t\t}, function(e) {\n\t\t\tself._view.showError()\n\t\t\tconsole.error('There was an error loading your contacts', e)\n\t\t}).then(function() {\n\t\t\t// Delete promise, so that contacts are fetched again when the\n\t\t\t// menu is opened the next time.\n\t\t\tdelete self._contactsPromise\n\t\t}).catch(console.error.bind(this))\n\t}\n}\n\nexport default ContactsMenu\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Joas Schilling <coding@schilljs.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst rawUid = document\n\t.getElementsByTagName('head')[0]\n\t.getAttribute('data-user')\nconst displayName = document\n\t.getElementsByTagName('head')[0]\n\t.getAttribute('data-user-displayname')\n\nexport const currentUser = rawUid !== undefined ? rawUid : false\n\nexport const getCurrentUser = () => {\n\treturn {\n\t\tuid: currentUser,\n\t\tdisplayName,\n\t}\n}\n","/**\n * @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class Search {\n\n\t/**\n\t * @deprecated 20.0.0, will be removed in Nextcloud 22\n\t */\n\tconstructor() {\n\t\tconsole.warn('OCA.Search is deprecated. Please use the unified search API instead')\n\t}\n\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Search from './search'\n\n/**\n * Namespace for apps\n *\n * @namespace OCA\n */\nexport default {\n\t/**\n\t * @deprecated 20.0.0, will be removed in Nextcloud 22\n\t */\n\tSearch,\n}\n","/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/**\n * Return whether the DOM event is an accessible mouse or keyboard element activation\n *\n * @param {Event} event DOM event\n *\n * @return {boolean}\n */\nexport const isA11yActivation = (event) => {\n\tif (event.type === 'click') {\n\t\treturn true\n\t}\n\tif (event.type === 'keydown' && event.key === 'Enter') {\n\t\treturn true\n\t}\n\treturn false\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author Bartek Przybylski <bart.p.pl@gmail.com>\n * @author Christopher Schäpers <kondou@ts.unde.re>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author Daniel Kesselberg <mail@danielkesselberg.de>\n * @author Florian Schunk <florian.schunk@rwth-aachen.de>\n * @author Gary Kim <gary@garykim.dev>\n * @author Hendrik Leppelsack <hendrik@leppelsack.de>\n * @author Jan-Christoph Borchardt <hey@jancborchardt.net>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Jörn Friedrich Dreyer <jfd@butonic.de>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Loïc Hermann <loic.hermann@sciam.fr>\n * @author Morris Jobke <hey@morrisjobke.de>\n * @author Olivier Paroz <github@oparoz.com>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Sujith Haridasan <Sujith_Haridasan@mentor.com>\n * @author Thomas Citharel <nextcloud@tcit.fr>\n * @author Thomas Müller <thomas.mueller@tmit.eu>\n * @author Thomas Tanghus <thomas@tanghus.net>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport _ from 'underscore'\nimport $ from 'jquery'\n\nimport OC from './index'\nimport OCA from '../OCA/index'\nimport { isA11yActivation } from '../Util/a11y'\n\n/**\n * this class to ease the usage of jquery dialogs\n */\nconst Dialogs = {\n\t// dialog button types\n\tYES_NO_BUTTONS: 70,\n\tOK_BUTTONS: 71,\n\n\tFILEPICKER_TYPE_CHOOSE: 1,\n\tFILEPICKER_TYPE_MOVE: 2,\n\tFILEPICKER_TYPE_COPY: 3,\n\tFILEPICKER_TYPE_COPY_MOVE: 4,\n\tFILEPICKER_TYPE_CUSTOM: 5,\n\n\t// used to name each dialog\n\tdialogsCounter: 0,\n\n\t/**\n\t * displays alert dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK\n\t * @param {boolean} [modal] make the dialog modal\n\t */\n\talert: function(text, title, callback, modal) {\n\t\tthis.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'alert',\n\t\t\tDialogs.OK_BUTTON,\n\t\t\tcallback,\n\t\t\tmodal\n\t\t)\n\t},\n\t/**\n\t * displays info dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK\n\t * @param {boolean} [modal] make the dialog modal\n\t */\n\tinfo: function(text, title, callback, modal) {\n\t\tthis.message(text, title, 'info', Dialogs.OK_BUTTON, callback, modal)\n\t},\n\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirm: function(text, title, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'notice',\n\t\t\tDialogs.YES_NO_BUTTONS,\n\t\t\tcallback,\n\t\t\tmodal\n\t\t)\n\t},\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {(number|{type: number, confirm: string, cancel: string, confirmClasses: string})} buttons text content of buttons\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirmDestructive: function(text, title, buttons, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'none',\n\t\t\tbuttons,\n\t\t\tcallback,\n\t\t\tmodal === undefined ? true : modal\n\t\t)\n\t},\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirmHtml: function(text, title, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'notice',\n\t\t\tDialogs.YES_NO_BUTTONS,\n\t\t\tcallback,\n\t\t\tmodal,\n\t\t\ttrue\n\t\t)\n\t},\n\t/**\n\t * displays prompt dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @param {string} name name of the input field\n\t * @param {boolean} password whether the input should be a password input\n\t * @returns {Promise}\n\t */\n\tprompt: function(text, title, callback, modal, name, password) {\n\t\treturn $.when(this._getMessageTemplate()).then(function($tmpl) {\n\t\t\tvar dialogName = 'oc-dialog-' + Dialogs.dialogsCounter + '-content'\n\t\t\tvar dialogId = '#' + dialogName\n\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\tmessage: text,\n\t\t\t\ttype: 'notice'\n\t\t\t})\n\t\t\tvar input = $('<input/>')\n\t\t\tinput.attr('type', password ? 'password' : 'text').attr('id', dialogName + '-input').attr('placeholder', name)\n\t\t\tvar label = $('<label/>').attr('for', dialogName + '-input').text(name + ': ')\n\t\t\t$dlg.append(label)\n\t\t\t$dlg.append(input)\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false\n\t\t\t}\n\t\t\t$('body').append($dlg)\n\n\t\t\t// wrap callback in _.once():\n\t\t\t// only call callback once and not twice (button handler and close\n\t\t\t// event) but call it for the close event, if ESC or the x is hit\n\t\t\tif (callback !== undefined) {\n\t\t\t\tcallback = _.once(callback)\n\t\t\t}\n\n\t\t\tvar buttonlist = [{\n\t\t\t\ttext: t('core', 'No'),\n\t\t\t\tclick: function() {\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(false, input.val())\n\t\t\t\t\t}\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\ttext: t('core', 'Yes'),\n\t\t\t\tclick: function() {\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(true, input.val())\n\t\t\t\t\t}\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t},\n\t\t\t\tdefaultButton: true\n\t\t\t}]\n\n\t\t\t$(dialogId).ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist,\n\t\t\t\tclose: function() {\n\t\t\t\t\t// callback is already fired if Yes/No is clicked directly\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(false, input.val())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\tinput.focus()\n\t\t\tDialogs.dialogsCounter++\n\t\t})\n\t},\n\t/**\n\t * show a file picker to pick a file from\n\t *\n\t * In order to pick several types of mime types they need to be passed as an\n\t * array of strings.\n\t *\n\t * When no mime type filter is given only files can be selected. In order to\n\t * be able to select both files and folders \"['*', 'httpd/unix-directory']\"\n\t * should be used instead.\n\t *\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses Choose\n\t * @param {boolean} [multiselect] whether it should be possible to select multiple files\n\t * @param {string[]} [mimetypeFilter] mimetype to filter by - directories will always be included\n\t * @param {boolean} [modal] make the dialog modal\n\t * @param {string} [type] Type of file picker : Choose, copy, move, copy and move\n\t * @param {string} [path] path to the folder that the the file can be picket from\n\t * @param {Object} [options] additonal options that need to be set\n\t * @param {Function} [options.filter] filter function for advanced filtering\n\t */\n\tfilepicker: function(title, callback, multiselect, mimetypeFilter, modal, type, path, options) {\n\t\tvar self = this\n\n\t\tthis.filepicker.sortField = 'name'\n\t\tthis.filepicker.sortOrder = 'asc'\n\t\t// avoid opening the picker twice\n\t\tif (this.filepicker.loading) {\n\t\t\treturn\n\t\t}\n\n\t\tif (type === undefined) {\n\t\t\ttype = this.FILEPICKER_TYPE_CHOOSE\n\t\t}\n\n\t\tvar emptyText = t('core', 'No files in here')\n\t\tvar newText = t('files', 'New folder')\n\t\tif (type === this.FILEPICKER_TYPE_COPY || type === this.FILEPICKER_TYPE_MOVE || type === this.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\temptyText = t('core', 'No more subfolders in here')\n\t\t}\n\n\t\tthis.filepicker.loading = true\n\t\tthis.filepicker.filesClient = (OCA.Sharing && OCA.Sharing.PublicApp && OCA.Sharing.PublicApp.fileList) ? OCA.Sharing.PublicApp.fileList.filesClient : OC.Files.getClient()\n\n\t\tthis.filelist = null\n\t\tpath = path || ''\n\t\toptions = Object.assign({\n\t\t\tallowDirectoryChooser: false\n\t\t}, options)\n\n\t\t$.when(this._getFilePickerTemplate()).then(function($tmpl) {\n\t\t\tself.filepicker.loading = false\n\t\t\tvar dialogName = 'oc-dialog-filepicker-content'\n\t\t\tif (self.$filePicker) {\n\t\t\t\tself.$filePicker.ocdialog('close')\n\t\t\t}\n\n\t\t\tif (mimetypeFilter === undefined || mimetypeFilter === null) {\n\t\t\t\tmimetypeFilter = []\n\t\t\t}\n\t\t\tif (typeof (mimetypeFilter) === 'string') {\n\t\t\t\tmimetypeFilter = [mimetypeFilter]\n\t\t\t}\n\n\t\t\tself.$filePicker = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\temptytext: emptyText,\n\t\t\t\tnewtext: newText,\n\t\t\t\tnameCol: t('core', 'Name'),\n\t\t\t\tsizeCol: t('core', 'Size'),\n\t\t\t\tmodifiedCol: t('core', 'Modified')\n\t\t\t}).data('path', path).data('multiselect', multiselect).data('mimetype', mimetypeFilter).data('allowDirectoryChooser', options.allowDirectoryChooser)\n\t\t\tif (typeof(options.filter) === 'function') {\n\t\t\t\tself.$filePicker.data('filter', options.filter)\n\t\t\t}\n\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false\n\t\t\t}\n\t\t\tif (multiselect === undefined) {\n\t\t\t\tmultiselect = false\n\t\t\t}\n\n\t\t\t$(options?.target ?? 'body').prepend(self.$filePicker)\n\n\t\t\tself.$showGridView = $('button#picker-showgridview')\n\t\t\tself.$showGridView.on('click keydown', function(event) {\n\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\tself._onGridviewChange()\n\t\t\t\t}\n\t\t\t})\n\t\t\tself._getGridSettings()\n\n\t\t\tvar newButton = self.$filePicker.find('.actions.creatable .button-add')\n\t\t\tif (type === self.FILEPICKER_TYPE_CHOOSE && !options.allowDirectoryChooser) {\n\t\t\t\tself.$filePicker.find('.actions.creatable').hide()\n\t\t\t}\n\t\t\tnewButton.on('focus', function() {\n\t\t\t\tself.$filePicker.ocdialog('setEnterCallback', function(event) {\n\t\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tnewButton.click()\n\t\t\t\t})\n\t\t\t})\n\t\t\tnewButton.on('blur', function() {\n\t\t\t\tself.$filePicker.ocdialog('unsetEnterCallback')\n\t\t\t})\n\n\t\t\tOC.registerMenu(newButton, self.$filePicker.find('.menu'), function() {\n\t\t\t\t$input.tooltip('hide')\n\t\t\t\t$input.focus()\n\t\t\t\tself.$filePicker.ocdialog('setEnterCallback', function(event) {\n\t\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tself.$filePicker.submit()\n\t\t\t\t})\n\t\t\t\tvar newName = $input.val()\n\t\t\t\tvar lastPos = newName.lastIndexOf('.')\n\t\t\t\tif (lastPos === -1) {\n\t\t\t\t\tlastPos = newName.length\n\t\t\t\t}\n\t\t\t\t$input.selectRange(0, lastPos)\n\t\t\t})\n\t\t\tvar $form = self.$filePicker.find('.filenameform')\n\t\t\tvar $input = $form.find('input[type=\\'text\\']')\n\t\t\tvar $submit = $form.find('input[type=\\'submit\\']')\n\t\t\t$input.on('keydown', function(event) {\n\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t$form.submit()\n\t\t\t\t}\n\t\t\t})\n\t\t\t$submit.on('click', function(event) {\n\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\tevent.preventDefault()\n\t\t\t\t$form.submit()\n\t\t\t})\n\n\t\t\t/**\n\t\t\t * Checks whether the given file name is valid.\n\t\t\t *\n\t\t\t * @param name file name to check\n\t\t\t * @return true if the file name is valid.\n\t\t\t * @throws a string exception with an error message if\n\t\t\t * the file name is not valid\n\t\t\t *\n\t\t\t * NOTE: This function is duplicated in the files app:\n\t\t\t * https://github.com/nextcloud/server/blob/b9bc2417e7a8dc81feb0abe20359bedaf864f790/apps/files/js/files.js#L127-L148\n\t\t\t */\n\t\t\tvar isFileNameValid = function (name) {\n\t\t\t\tvar trimmedName = name.trim();\n\t\t\t\tif (trimmedName === '.' || trimmedName === '..')\n\t\t\t\t{\n\t\t\t\t\tthrow t('files', '\"{name}\" is an invalid file name.', {name: name})\n\t\t\t\t} else if (trimmedName.length === 0) {\n\t\t\t\t\tthrow t('files', 'File name cannot be empty.')\n\t\t\t\t} else if (trimmedName.indexOf('/') !== -1) {\n\t\t\t\t\tthrow t('files', '\"/\" is not allowed inside a file name.')\n\t\t\t\t} else if (!!(trimmedName.match(OC.config.blacklist_files_regex))) {\n\t\t\t\t\tthrow t('files', '\"{name}\" is not an allowed filetype', {name: name})\n\t\t\t\t}\n\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\tvar checkInput = function() {\n\t\t\t\tvar filename = $input.val()\n\t\t\t\ttry {\n\t\t\t\t\tif (!isFileNameValid(filename)) {\n\t\t\t\t\t\t// isFileNameValid(filename) throws an exception itself\n\t\t\t\t\t} else if (self.filelist.find(function(file) {\n\t\t\t\t\t\treturn file.name === this\n\t\t\t\t\t}, filename)) {\n\t\t\t\t\t\tthrow t('files', '{newName} already exists', { newName: filename }, undefined, {\n\t\t\t\t\t\t\tescape: false\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn true\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\t$input.attr('title', error)\n\t\t\t\t\t$input.tooltip({\n\t\t\t\t\t\tplacement: 'right',\n\t\t\t\t\t\ttrigger: 'manual',\n\t\t\t\t\t\t'container': '.newFolderMenu'\n\t\t\t\t\t})\n\t\t\t\t\t$input.tooltip('_fixTitle')\n\t\t\t\t\t$input.tooltip('show')\n\t\t\t\t\t$input.addClass('error')\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\t$form.on('submit', function(event) {\n\t\t\t\tevent.stopPropagation()\n\t\t\t\tevent.preventDefault()\n\n\t\t\t\tif (checkInput()) {\n\t\t\t\t\tvar newname = $input.val()\n\t\t\t\t\tself.filepicker.filesClient.createDirectory(self.$filePicker.data('path') + \"/\" + newname).always(function (status) {\n\t\t\t\t\t\tself._fillFilePicker(self.$filePicker.data('path') + \"/\" + newname, type)\n\t\t\t\t\t})\n\t\t\t\t\tOC.hideMenus()\n\t\t\t\t\tself.$filePicker.ocdialog('unsetEnterCallback')\n\t\t\t\t\tself.$filePicker.click()\n\t\t\t\t\t$input.val(newText)\n\t\t\t\t}\n\t\t\t})\n\t\t\t$input.on('input', function(event) {\n\t\t\t\t$input.tooltip('hide')\n\t\t\t})\n\n\t\t\tself.$filePicker.ready(function() {\n\t\t\t\tself.$fileListHeader = self.$filePicker.find('.filelist thead tr')\n\t\t\t\tself.$filelist = self.$filePicker.find('.filelist tbody')\n\t\t\t\tself.$filelistContainer = self.$filePicker.find('.filelist-container')\n\t\t\t\tself.$dirTree = self.$filePicker.find('.dirtree')\n\t\t\t\tself.$dirTree.on('click keydown', 'div:not(:last-child)', self, function(event) {\n\t\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\t\tself._handleTreeListSelect(event, type)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tself.$filelist.on('click keydown', 'tr', function(event) {\n\t\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\t\tself._handlePickerClick(event, $(this), type)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tself.$fileListHeader.on('click keydown', 'a', function(event) {\n\t\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\t\tvar dir = self.$filePicker.data('path')\n\t\t\t\t\t\tself.filepicker.sortField = $(event.currentTarget).data('sort')\n\t\t\t\t\t\tself.filepicker.sortOrder = self.filepicker.sortOrder === 'asc' ? 'desc' : 'asc'\n\t\t\t\t\t\tself._fillFilePicker(dir, type)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tself._fillFilePicker(path, type)\n\t\t\t})\n\n\t\t\t// build buttons\n\t\t\tvar functionToCall = function(returnType) {\n\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\tvar datapath\n\t\t\t\t\tif (multiselect === true) {\n\t\t\t\t\t\tdatapath = []\n\t\t\t\t\t\tself.$filelist.find('tr.filepicker_element_selected').each(function(index, element) {\n\t\t\t\t\t\t\tdatapath.push(self.$filePicker.data('path') + '/' + $(element).data('entryname'))\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdatapath = self.$filePicker.data('path')\n\t\t\t\t\t\tvar selectedName = self.$filelist.find('tr.filepicker_element_selected').data('entryname')\n\t\t\t\t\t\tif (selectedName) {\n\t\t\t\t\t\t\tdatapath += '/' + selectedName\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcallback(datapath, returnType)\n\t\t\t\t\tself.$filePicker.ocdialog('close')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar chooseCallback = function() {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_CHOOSE)\n\t\t\t}\n\n\t\t\tvar copyCallback = function() {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_COPY)\n\t\t\t}\n\n\t\t\tvar moveCallback = function() {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_MOVE)\n\t\t\t}\n\n\t\t\tvar buttonlist = []\n\t\t\tif (type === Dialogs.FILEPICKER_TYPE_CHOOSE) {\n\t\t\t\tbuttonlist.push({\n\t\t\t\t\ttext: t('core', 'Choose'),\n\t\t\t\t\tclick: chooseCallback,\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t})\n\t\t\t} else if (type === Dialogs.FILEPICKER_TYPE_CUSTOM) {\n\t\t\t\toptions.buttons.forEach(function(button) {\n\t\t\t\t\tbuttonlist.push({\n\t\t\t\t\t\ttext: button.text,\n\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\tfunctionToCall(button.type)\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdefaultButton: button.defaultButton\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tif (type === Dialogs.FILEPICKER_TYPE_COPY || type === Dialogs.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\t\t\tbuttonlist.push({\n\t\t\t\t\t\ttext: t('core', 'Copy'),\n\t\t\t\t\t\tclick: copyCallback,\n\t\t\t\t\t\tdefaultButton: false\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (type === Dialogs.FILEPICKER_TYPE_MOVE || type === Dialogs.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\t\t\tbuttonlist.push({\n\t\t\t\t\t\ttext: t('core', 'Move'),\n\t\t\t\t\t\tclick: moveCallback,\n\t\t\t\t\t\tdefaultButton: true\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tself.$filePicker.ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\t// max-width of 600\n\t\t\t\twidth: 600,\n\t\t\t\theight: 500,\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist,\n\t\t\t\tstyle: {\n\t\t\t\t\tbuttons: 'aside'\n\t\t\t\t},\n\t\t\t\tclose: function() {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t$(this).ocdialog('destroy').remove()\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t}\n\t\t\t\t\tself.$filePicker = null\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// We can access primary class only from oc-dialog.\n\t\t\t// Hence this is one of the approach to get the choose button.\n\t\t\tvar getOcDialog = self.$filePicker.closest('.oc-dialog')\n\t\t\tvar buttonEnableDisable = getOcDialog.find('.primary')\n\t\t\tif (self.$filePicker.data('mimetype').indexOf('httpd/unix-directory') !== -1 || self.$filePicker.data('allowDirectoryChooser')) {\n\t\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t\t} else {\n\t\t\t\tbuttonEnableDisable.prop('disabled', true)\n\t\t\t}\n\t\t})\n\t\t\t.fail(function(status, error) {\n\t\t\t\t// If the method is called while navigating away\n\t\t\t\t// from the page, it is probably not needed ;)\n\t\t\t\tself.filepicker.loading = false\n\t\t\t\tif (status !== 0) {\n\t\t\t\t\talert(t('core', 'Error loading file picker template: {error}', { error: error }))\n\t\t\t\t}\n\t\t\t})\n\t},\n\t/**\n\t * Displays raw dialog\n\t * You better use a wrapper instead ...\n\t */\n\tmessage: function(content, title, dialogType, buttons, callback, modal, allowHtml) {\n\t\treturn $.when(this._getMessageTemplate()).then(function($tmpl) {\n\t\t\tvar dialogName = 'oc-dialog-' + Dialogs.dialogsCounter + '-content'\n\t\t\tvar dialogId = '#' + dialogName\n\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\tmessage: content,\n\t\t\t\ttype: dialogType\n\t\t\t}, allowHtml ? { escapeFunction: '' } : {})\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false\n\t\t\t}\n\t\t\t$('body').append($dlg)\n\t\t\tvar buttonlist = []\n\t\t\tswitch (buttons) {\n\t\t\tcase Dialogs.YES_NO_BUTTONS:\n\t\t\t\tbuttonlist = [{\n\t\t\t\t\ttext: t('core', 'No'),\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\tcallback(false)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttext: t('core', 'Yes'),\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\tcallback(true)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t},\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t}]\n\t\t\t\tbreak\n\t\t\tcase Dialogs.OK_BUTTON:\n\t\t\t\tvar functionToCall = function() {\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\tcallback()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbuttonlist[0] = {\n\t\t\t\t\ttext: t('core', 'OK'),\n\t\t\t\t\tclick: functionToCall,\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tif (typeof(buttons) === 'object') {\n\t\t\t\t\tswitch (buttons.type) {\n\t\t\t\t\t\tcase Dialogs.YES_NO_BUTTONS:\n\t\t\t\t\t\t\tbuttonlist = [{\n\t\t\t\t\t\t\t\ttext: buttons.cancel || t('core', 'No'),\n\t\t\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\t\t\t\tcallback(false)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttext: buttons.confirm || t('core', 'Yes'),\n\t\t\t\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\t\t\t\t\tcallback(true)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdefaultButton: true,\n\t\t\t\t\t\t\t\t\tclasses: buttons.confirmClasses\n\t\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t$(dialogId).ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\tcloseCallback: () => { callback && callback(false) },\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist\n\t\t\t})\n\t\t\tDialogs.dialogsCounter++\n\t\t})\n\t\t\t.fail(function(status, error) {\n\t\t\t\t// If the method is called while navigating away from\n\t\t\t\t// the page, we still want to deliver the message.\n\t\t\t\tif (status === 0) {\n\t\t\t\t\talert(title + ': ' + content)\n\t\t\t\t} else {\n\t\t\t\t\talert(t('core', 'Error loading message template: {error}', { error: error }))\n\t\t\t\t}\n\t\t\t})\n\t},\n\t_fileexistsshown: false,\n\t/**\n\t * Displays file exists dialog\n\t * @param {object} data upload object\n\t * @param {object} original file with name, size and mtime\n\t * @param {object} replacement file with name, size and mtime\n\t * @param {object} controller with onCancel, onSkip, onReplace and onRename methods\n\t * @returns {Promise} jquery promise that resolves after the dialog template was loaded\n\t */\n\tfileexists: function(data, original, replacement, controller) {\n\t\tvar self = this\n\t\tvar dialogDeferred = new $.Deferred()\n\n\t\tvar getCroppedPreview = function(file) {\n\t\t\tvar deferred = new $.Deferred()\n\t\t\t// Only process image files.\n\t\t\tvar type = file.type && file.type.split('/').shift()\n\t\t\tif (window.FileReader && type === 'image') {\n\t\t\t\tvar reader = new FileReader()\n\t\t\t\treader.onload = function(e) {\n\t\t\t\t\tvar blob = new Blob([e.target.result])\n\t\t\t\t\twindow.URL = window.URL || window.webkitURL\n\t\t\t\t\tvar originalUrl = window.URL.createObjectURL(blob)\n\t\t\t\t\tvar image = new Image()\n\t\t\t\t\timage.src = originalUrl\n\t\t\t\t\timage.onload = function() {\n\t\t\t\t\t\tvar url = crop(image)\n\t\t\t\t\t\tdeferred.resolve(url)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treader.readAsArrayBuffer(file)\n\t\t\t} else {\n\t\t\t\tdeferred.reject()\n\t\t\t}\n\t\t\treturn deferred\n\t\t}\n\n\t\tvar crop = function(img) {\n\t\t\tvar canvas = document.createElement('canvas')\n\t\t\tvar targetSize = 96\n\t\t\tvar width = img.width\n\t\t\tvar height = img.height\n\t\t\tvar x; var y; var size\n\n\t\t\t// Calculate the width and height, constraining the proportions\n\t\t\tif (width > height) {\n\t\t\t\ty = 0\n\t\t\t\tx = (width - height) / 2\n\t\t\t} else {\n\t\t\t\ty = (height - width) / 2\n\t\t\t\tx = 0\n\t\t\t}\n\t\t\tsize = Math.min(width, height)\n\n\t\t\t// Set canvas size to the cropped area\n\t\t\tcanvas.width = size\n\t\t\tcanvas.height = size\n\t\t\tvar ctx = canvas.getContext('2d')\n\t\t\tctx.drawImage(img, x, y, size, size, 0, 0, size, size)\n\n\t\t\t// Resize the canvas to match the destination (right size uses 96px)\n\t\t\tresampleHermite(canvas, size, size, targetSize, targetSize)\n\n\t\t\treturn canvas.toDataURL('image/png', 0.7)\n\t\t}\n\n\t\t/**\n\t\t * Fast image resize/resample using Hermite filter with JavaScript.\n\t\t *\n\t\t * @author: ViliusL\n\t\t *\n\t\t * @param {*} canvas\n\t\t * @param {number} W\n\t\t * @param {number} H\n\t\t * @param {number} W2\n\t\t * @param {number} H2\n\t\t */\n\t\tvar resampleHermite = function(canvas, W, H, W2, H2) {\n\t\t\tW2 = Math.round(W2)\n\t\t\tH2 = Math.round(H2)\n\t\t\tvar img = canvas.getContext('2d').getImageData(0, 0, W, H)\n\t\t\tvar img2 = canvas.getContext('2d').getImageData(0, 0, W2, H2)\n\t\t\tvar data = img.data\n\t\t\tvar data2 = img2.data\n\t\t\tvar ratio_w = W / W2\n\t\t\tvar ratio_h = H / H2\n\t\t\tvar ratio_w_half = Math.ceil(ratio_w / 2)\n\t\t\tvar ratio_h_half = Math.ceil(ratio_h / 2)\n\n\t\t\tfor (var j = 0; j < H2; j++) {\n\t\t\t\tfor (var i = 0; i < W2; i++) {\n\t\t\t\t\tvar x2 = (i + j * W2) * 4\n\t\t\t\t\tvar weight = 0\n\t\t\t\t\tvar weights = 0\n\t\t\t\t\tvar weights_alpha = 0\n\t\t\t\t\tvar gx_r = 0\n\t\t\t\t\tvar gx_g = 0\n\t\t\t\t\tvar gx_b = 0\n\t\t\t\t\tvar gx_a = 0\n\t\t\t\t\tvar center_y = (j + 0.5) * ratio_h\n\t\t\t\t\tfor (var yy = Math.floor(j * ratio_h); yy < (j + 1) * ratio_h; yy++) {\n\t\t\t\t\t\tvar dy = Math.abs(center_y - (yy + 0.5)) / ratio_h_half\n\t\t\t\t\t\tvar center_x = (i + 0.5) * ratio_w\n\t\t\t\t\t\tvar w0 = dy * dy // pre-calc part of w\n\t\t\t\t\t\tfor (var xx = Math.floor(i * ratio_w); xx < (i + 1) * ratio_w; xx++) {\n\t\t\t\t\t\t\tvar dx = Math.abs(center_x - (xx + 0.5)) / ratio_w_half\n\t\t\t\t\t\t\tvar w = Math.sqrt(w0 + dx * dx)\n\t\t\t\t\t\t\tif (w >= -1 && w <= 1) {\n\t\t\t\t\t\t\t\t// hermite filter\n\t\t\t\t\t\t\t\tweight = 2 * w * w * w - 3 * w * w + 1\n\t\t\t\t\t\t\t\tif (weight > 0) {\n\t\t\t\t\t\t\t\t\tdx = 4 * (xx + yy * W)\n\t\t\t\t\t\t\t\t\t// alpha\n\t\t\t\t\t\t\t\t\tgx_a += weight * data[dx + 3]\n\t\t\t\t\t\t\t\t\tweights_alpha += weight\n\t\t\t\t\t\t\t\t\t// colors\n\t\t\t\t\t\t\t\t\tif (data[dx + 3] < 255) { weight = weight * data[dx + 3] / 250 }\n\t\t\t\t\t\t\t\t\tgx_r += weight * data[dx]\n\t\t\t\t\t\t\t\t\tgx_g += weight * data[dx + 1]\n\t\t\t\t\t\t\t\t\tgx_b += weight * data[dx + 2]\n\t\t\t\t\t\t\t\t\tweights += weight\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdata2[x2] = gx_r / weights\n\t\t\t\t\tdata2[x2 + 1] = gx_g / weights\n\t\t\t\t\tdata2[x2 + 2] = gx_b / weights\n\t\t\t\t\tdata2[x2 + 3] = gx_a / weights_alpha\n\t\t\t\t}\n\t\t\t}\n\t\t\tcanvas.getContext('2d').clearRect(0, 0, Math.max(W, W2), Math.max(H, H2))\n\t\t\tcanvas.width = W2\n\t\t\tcanvas.height = H2\n\t\t\tcanvas.getContext('2d').putImageData(img2, 0, 0)\n\t\t}\n\n\t\tvar addConflict = function($conflicts, original, replacement) {\n\n\t\t\tvar $conflict = $conflicts.find('.template').clone().removeClass('template').addClass('conflict')\n\t\t\tvar $originalDiv = $conflict.find('.original')\n\t\t\tvar $replacementDiv = $conflict.find('.replacement')\n\n\t\t\t$conflict.data('data', data)\n\n\t\t\t$conflict.find('.filename').text(original.name)\n\t\t\t$originalDiv.find('.size').text(OC.Util.humanFileSize(original.size))\n\t\t\t$originalDiv.find('.mtime').text(OC.Util.formatDate(original.mtime))\n\t\t\t// ie sucks\n\t\t\tif (replacement.size && replacement.lastModified) {\n\t\t\t\t$replacementDiv.find('.size').text(OC.Util.humanFileSize(replacement.size))\n\t\t\t\t$replacementDiv.find('.mtime').text(OC.Util.formatDate(replacement.lastModified))\n\t\t\t}\n\t\t\tvar path = original.directory + '/' + original.name\n\t\t\tvar urlSpec = {\n\t\t\t\tfile: path,\n\t\t\t\tx: 96,\n\t\t\t\ty: 96,\n\t\t\t\tc: original.etag,\n\t\t\t\tforceIcon: 0\n\t\t\t}\n\t\t\tvar previewpath = Files.generatePreviewUrl(urlSpec)\n\t\t\t// Escaping single quotes\n\t\t\tpreviewpath = previewpath.replace(/'/g, '%27')\n\t\t\t$originalDiv.find('.icon').css({ 'background-image': \"url('\" + previewpath + \"')\" })\n\t\t\tgetCroppedPreview(replacement).then(\n\t\t\t\tfunction(path) {\n\t\t\t\t\t$replacementDiv.find('.icon').css('background-image', 'url(' + path + ')')\n\t\t\t\t}, function() {\n\t\t\t\t\tpath = OC.MimeType.getIconUrl(replacement.type)\n\t\t\t\t\t$replacementDiv.find('.icon').css('background-image', 'url(' + path + ')')\n\t\t\t\t}\n\t\t\t)\n\t\t\t// connect checkboxes with labels\n\t\t\tvar checkboxId = $conflicts.find('.conflict').length\n\t\t\t$originalDiv.find('input:checkbox').attr('id', 'checkbox_original_' + checkboxId)\n\t\t\t$replacementDiv.find('input:checkbox').attr('id', 'checkbox_replacement_' + checkboxId)\n\n\t\t\t$conflicts.append($conflict)\n\n\t\t\t// set more recent mtime bold\n\t\t\t// ie sucks\n\t\t\tif (replacement.lastModified > original.mtime) {\n\t\t\t\t$replacementDiv.find('.mtime').css('font-weight', 'bold')\n\t\t\t} else if (replacement.lastModified < original.mtime) {\n\t\t\t\t$originalDiv.find('.mtime').css('font-weight', 'bold')\n\t\t\t} else {\n\t\t\t\t// TODO add to same mtime collection?\n\t\t\t}\n\n\t\t\t// set bigger size bold\n\t\t\tif (replacement.size && replacement.size > original.size) {\n\t\t\t\t$replacementDiv.find('.size').css('font-weight', 'bold')\n\t\t\t} else if (replacement.size && replacement.size < original.size) {\n\t\t\t\t$originalDiv.find('.size').css('font-weight', 'bold')\n\t\t\t} else {\n\t\t\t\t// TODO add to same size collection?\n\t\t\t}\n\n\t\t\t// TODO show skip action for files with same size and mtime in bottom row\n\n\t\t\t// always keep readonly files\n\n\t\t\tif (original.status === 'readonly') {\n\t\t\t\t$originalDiv\n\t\t\t\t\t.addClass('readonly')\n\t\t\t\t\t.find('input[type=\"checkbox\"]')\n\t\t\t\t\t.prop('checked', true)\n\t\t\t\t\t.prop('disabled', true)\n\t\t\t\t$originalDiv.find('.message')\n\t\t\t\t\t.text(t('core', 'read-only'))\n\t\t\t}\n\t\t}\n\t\t// var selection = controller.getSelection(data.originalFiles);\n\t\t// if (selection.defaultAction) {\n\t\t//\tcontroller[selection.defaultAction](data);\n\t\t// } else {\n\t\tvar dialogName = 'oc-dialog-fileexists-content'\n\t\tvar dialogId = '#' + dialogName\n\t\tif (this._fileexistsshown) {\n\t\t\t// add conflict\n\n\t\t\tvar $conflicts = $(dialogId + ' .conflicts')\n\t\t\taddConflict($conflicts, original, replacement)\n\n\t\t\tvar count = $(dialogId + ' .conflict').length\n\t\t\tvar title = n('core',\n\t\t\t\t'{count} file conflict',\n\t\t\t\t'{count} file conflicts',\n\t\t\t\tcount,\n\t\t\t\t{ count: count }\n\t\t\t)\n\t\t\t$(dialogId).parent().children('.oc-dialog-title').text(title)\n\n\t\t\t// recalculate dimensions\n\t\t\t$(window).trigger('resize')\n\t\t\tdialogDeferred.resolve()\n\t\t} else {\n\t\t\t// create dialog\n\t\t\tthis._fileexistsshown = true\n\t\t\t$.when(this._getFileExistsTemplate()).then(function($tmpl) {\n\t\t\t\tvar title = t('core', 'One file conflict')\n\t\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\t\tdialog_name: dialogName,\n\t\t\t\t\ttitle: title,\n\t\t\t\t\ttype: 'fileexists',\n\n\t\t\t\t\tallnewfiles: t('core', 'New Files'),\n\t\t\t\t\tallexistingfiles: t('core', 'Already existing files'),\n\n\t\t\t\t\twhy: t('core', 'Which files do you want to keep?'),\n\t\t\t\t\twhat: t('core', 'If you select both versions, the copied file will have a number added to its name.')\n\t\t\t\t})\n\t\t\t\t$('body').append($dlg)\n\n\t\t\t\tif (original && replacement) {\n\t\t\t\t\tvar $conflicts = $dlg.find('.conflicts')\n\t\t\t\t\taddConflict($conflicts, original, replacement)\n\t\t\t\t}\n\n\t\t\t\tvar buttonlist = [{\n\t\t\t\t\ttext: t('core', 'Cancel'),\n\t\t\t\t\tclasses: 'cancel',\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (typeof controller.onCancel !== 'undefined') {\n\t\t\t\t\t\t\tcontroller.onCancel(data)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttext: t('core', 'Continue'),\n\t\t\t\t\tclasses: 'continue',\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (typeof controller.onContinue !== 'undefined') {\n\t\t\t\t\t\t\tcontroller.onContinue($(dialogId + ' .conflict'))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t}]\n\n\t\t\t\t$(dialogId).ocdialog({\n\t\t\t\t\twidth: 500,\n\t\t\t\t\tcloseOnEscape: true,\n\t\t\t\t\tmodal: true,\n\t\t\t\t\tbuttons: buttonlist,\n\t\t\t\t\tcloseButton: null,\n\t\t\t\t\tclose: function() {\n\t\t\t\t\t\tself._fileexistsshown = false\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t$(this).ocdialog('destroy').remove()\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// ignore\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\t$(dialogId).css('height', 'auto')\n\n\t\t\t\tvar $primaryButton = $dlg.closest('.oc-dialog').find('button.continue')\n\t\t\t\t$primaryButton.prop('disabled', true)\n\n\t\t\t\tfunction updatePrimaryButton() {\n\t\t\t\t\tvar checkedCount = $dlg.find('.conflicts .checkbox:checked').length\n\t\t\t\t\t$primaryButton.prop('disabled', checkedCount === 0)\n\t\t\t\t}\n\n\t\t\t\t// add checkbox toggling actions\n\t\t\t\t$(dialogId).find('.allnewfiles').on('click', function() {\n\t\t\t\t\tvar $checkboxes = $(dialogId).find('.conflict .replacement input[type=\"checkbox\"]')\n\t\t\t\t\t$checkboxes.prop('checked', $(this).prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.allexistingfiles').on('click', function() {\n\t\t\t\t\tvar $checkboxes = $(dialogId).find('.conflict .original:not(.readonly) input[type=\"checkbox\"]')\n\t\t\t\t\t$checkboxes.prop('checked', $(this).prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.conflicts').on('click', '.replacement,.original:not(.readonly)', function() {\n\t\t\t\t\tvar $checkbox = $(this).find('input[type=\"checkbox\"]')\n\t\t\t\t\t$checkbox.prop('checked', !$checkbox.prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.conflicts').on('click', '.replacement input[type=\"checkbox\"],.original:not(.readonly) input[type=\"checkbox\"]', function() {\n\t\t\t\t\tvar $checkbox = $(this)\n\t\t\t\t\t$checkbox.prop('checked', !$checkbox.prop('checked'))\n\t\t\t\t})\n\n\t\t\t\t// update counters\n\t\t\t\t$(dialogId).on('click', '.replacement,.allnewfiles', function() {\n\t\t\t\t\tvar count = $(dialogId).find('.conflict .replacement input[type=\"checkbox\"]:checked').length\n\t\t\t\t\tif (count === $(dialogId + ' .conflict').length) {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', true)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text(t('core', '(all selected)'))\n\t\t\t\t\t} else if (count > 0) {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text(t('core', '({count} selected)', { count: count }))\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text('')\n\t\t\t\t\t}\n\t\t\t\t\tupdatePrimaryButton()\n\t\t\t\t})\n\t\t\t\t$(dialogId).on('click', '.original,.allexistingfiles', function() {\n\t\t\t\t\tvar count = $(dialogId).find('.conflict .original input[type=\"checkbox\"]:checked').length\n\t\t\t\t\tif (count === $(dialogId + ' .conflict').length) {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', true)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count').text(t('core', '(all selected)'))\n\t\t\t\t\t} else if (count > 0) {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count')\n\t\t\t\t\t\t\t.text(t('core', '({count} selected)', { count: count }))\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count').text('')\n\t\t\t\t\t}\n\t\t\t\t\tupdatePrimaryButton()\n\t\t\t\t})\n\n\t\t\t\tdialogDeferred.resolve()\n\t\t\t})\n\t\t\t\t.fail(function() {\n\t\t\t\t\tdialogDeferred.reject()\n\t\t\t\t\talert(t('core', 'Error loading file exists template'))\n\t\t\t\t})\n\t\t}\n\t\t// }\n\t\treturn dialogDeferred.promise()\n\t},\n\t// get the gridview setting and set the input accordingly\n\t_getGridSettings: function() {\n\t\tconst self = this\n\t\t$.get(OC.generateUrl('/apps/files/api/v1/showgridview'), function(response) {\n\t\t\tself.$showGridView\n\t\t\t\t.removeClass('icon-toggle-filelist icon-toggle-pictures')\n\t\t\t\t.addClass(response.gridview ? 'icon-toggle-filelist' : 'icon-toggle-pictures')\n\t\t\tself.$showGridView.attr(\n\t\t\t\t'aria-label',\n\t\t\t\tresponse.gridview ? t('files', 'Show list view') : t('files', 'Show grid view'),\n\t\t\t)\n\t\t\t$('.list-container').toggleClass('view-grid', response.gridview)\n\t\t})\n\t},\n\t_onGridviewChange: function() {\n\t\tconst isGridView = this.$showGridView.hasClass('icon-toggle-filelist')\n\t\t// only save state if user is logged in\n\t\tif (OC.currentUser) {\n\t\t\t$.post(OC.generateUrl('/apps/files/api/v1/showgridview'), { show: !isGridView })\n\t\t}\n\t\tthis.$showGridView\n\t\t\t.removeClass('icon-toggle-filelist icon-toggle-pictures')\n\t\t\t.addClass(isGridView ? 'icon-toggle-pictures' : 'icon-toggle-filelist')\n\t\tthis.$showGridView.attr(\n\t\t\t'aria-label',\n\t\t\tisGridView ? t('files', 'Show grid view') : t('files', 'Show list view'),\n\t\t)\n\t\tthis.$filePicker.find('.list-container').toggleClass('view-grid', !isGridView)\n\t},\n\t_getFilePickerTemplate: function() {\n\t\tvar defer = $.Deferred()\n\t\tif (!this.$filePickerTemplate) {\n\t\t\tvar self = this\n\t\t\t$.get(OC.filePath('core', 'templates', 'filepicker.html'), function(tmpl) {\n\t\t\t\tself.$filePickerTemplate = $(tmpl)\n\t\t\t\tself.$listTmpl = self.$filePickerTemplate.find('.filelist tbody tr:first-child').detach()\n\t\t\t\tdefer.resolve(self.$filePickerTemplate)\n\t\t\t})\n\t\t\t\t.fail(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\tdefer.reject(jqXHR.status, errorThrown)\n\t\t\t\t})\n\t\t} else {\n\t\t\tdefer.resolve(this.$filePickerTemplate)\n\t\t}\n\t\treturn defer.promise()\n\t},\n\t_getMessageTemplate: function() {\n\t\tvar defer = $.Deferred()\n\t\tif (!this.$messageTemplate) {\n\t\t\tvar self = this\n\t\t\t$.get(OC.filePath('core', 'templates', 'message.html'), function(tmpl) {\n\t\t\t\tself.$messageTemplate = $(tmpl)\n\t\t\t\tdefer.resolve(self.$messageTemplate)\n\t\t\t})\n\t\t\t\t.fail(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\tdefer.reject(jqXHR.status, errorThrown)\n\t\t\t\t})\n\t\t} else {\n\t\t\tdefer.resolve(this.$messageTemplate)\n\t\t}\n\t\treturn defer.promise()\n\t},\n\t_getFileExistsTemplate: function() {\n\t\tvar defer = $.Deferred()\n\t\tif (!this.$fileexistsTemplate) {\n\t\t\tvar self = this\n\t\t\t$.get(OC.filePath('files', 'templates', 'fileexists.html'), function(tmpl) {\n\t\t\t\tself.$fileexistsTemplate = $(tmpl)\n\t\t\t\tdefer.resolve(self.$fileexistsTemplate)\n\t\t\t})\n\t\t\t\t.fail(function() {\n\t\t\t\t\tdefer.reject()\n\t\t\t\t})\n\t\t} else {\n\t\t\tdefer.resolve(this.$fileexistsTemplate)\n\t\t}\n\t\treturn defer.promise()\n\t},\n\n\t/**\n\t * fills the filepicker with files\n\t */\n\t_fillFilePicker: async function(dir, type) {\n\t\tvar self = this\n\t\tthis.$filelist.empty()\n\t\tthis.$filePicker.find('.emptycontent').hide()\n\t\tthis.$filelistContainer.addClass('icon-loading')\n\t\tthis.$filePicker.data('path', dir)\n\t\tvar filter = this.$filePicker.data('mimetype')\n\t\tvar advancedFilter = this.$filePicker.data('filter')\n\t\tif (typeof (filter) === 'string') {\n\t\t\tfilter = [filter]\n\t\t}\n\t\tself.$fileListHeader.find('.sort-indicator').addClass('hidden').removeClass('icon-triangle-n').removeClass('icon-triangle-s')\n\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').removeClass('hidden')\n\t\tif (self.filepicker.sortOrder === 'asc') {\n\t\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').addClass('icon-triangle-n')\n\t\t} else {\n\t\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').addClass('icon-triangle-s')\n\t\t}\n\n\t\t// Wrap within a method because a promise cannot return multiple values\n\t\t// But the client impleemntation still does it...\n\t\tvar getFolderContents = async function(dir) {\n\t\t\treturn self.filepicker.filesClient.getFolderContents(dir)\n\t\t\t\t.then((status, files) => {\n\t\t\t\t\treturn files\n\t\t\t\t})\n\t\t}\n\n\t\ttry {\n\t\t\tvar files = await getFolderContents(dir)\n\t\t} catch (error) {\n\t\t\t// fallback to root if requested dir is non-existent\n\t\t\tconsole.error('Requested path does not exists, falling back to root')\n\t\t\tvar files = await getFolderContents('/')\n\t\t\tthis.$filePicker.data('path', '/')\n\t\t\tthis._changeButtonsText(type, '')\n\t\t}\n\n\t\tself.filelist = files\n\t\tif (filter && filter.length > 0 && filter.indexOf('*') === -1) {\n\t\t\tfiles = files.filter(function(file) {\n\t\t\t\treturn file.type === 'dir' || filter.indexOf(file.mimetype) !== -1\n\t\t\t})\n\t\t}\n\n\t\tif (advancedFilter) {\n\t\t\tfiles = files.filter(advancedFilter)\n\t\t}\n\n\t\t// Check if the showHidden input field exist and if it exist follow it\n\t\t// Otherwise just show the hidden files\n\t\tconst showHiddenInput = document.getElementById('showHiddenFiles')\n\t\tconst showHidden = showHiddenInput === null || showHiddenInput.value === \"1\"\n\t\tif (!showHidden) {\n\t\t\tfiles = files.filter(function(file) {\n\t\t\t\treturn !file.name.startsWith('.')\n\t\t\t})\n\t\t}\n\n\t\tvar Comparators = {\n\t\t\tname: function(fileInfo1, fileInfo2) {\n\t\t\t\tif (fileInfo1.type === 'dir' && fileInfo2.type !== 'dir') {\n\t\t\t\t\treturn -1\n\t\t\t\t}\n\t\t\t\tif (fileInfo1.type !== 'dir' && fileInfo2.type === 'dir') {\n\t\t\t\t\treturn 1\n\t\t\t\t}\n\t\t\t\treturn OC.Util.naturalSortCompare(fileInfo1.name, fileInfo2.name)\n\t\t\t},\n\t\t\tsize: function(fileInfo1, fileInfo2) {\n\t\t\t\treturn fileInfo1.size - fileInfo2.size\n\t\t\t},\n\t\t\tmtime: function(fileInfo1, fileInfo2) {\n\t\t\t\treturn fileInfo1.mtime - fileInfo2.mtime\n\t\t\t}\n\t\t}\n\t\tvar comparator = Comparators[self.filepicker.sortField] || Comparators.name\n\t\tfiles = files.sort(function(file1, file2) {\n\t\t\tvar isFavorite = function(fileInfo) {\n\t\t\t\treturn fileInfo.tags && fileInfo.tags.indexOf(OC.TAG_FAVORITE) >= 0\n\t\t\t}\n\n\t\t\tif (isFavorite(file1) && !isFavorite(file2)) {\n\t\t\t\treturn -1\n\t\t\t} else if (!isFavorite(file1) && isFavorite(file2)) {\n\t\t\t\treturn 1\n\t\t\t}\n\n\t\t\treturn self.filepicker.sortOrder === 'asc' ? comparator(file1, file2) : -comparator(file1, file2)\n\t\t})\n\n\t\tself._fillSlug()\n\n\t\tif (files.length === 0) {\n\t\t\tself.$filePicker.find('.emptycontent').show()\n\t\t\tself.$fileListHeader.hide()\n\t\t} else {\n\t\t\tself.$filePicker.find('.emptycontent').hide()\n\t\t\tself.$fileListHeader.show()\n\t\t}\n\n\t\tself.$filelist.empty();\n\n\t\t$.each(files, function(idx, entry) {\n\t\t\tif (entry.isEncrypted && entry.mimetype === 'httpd/unix-directory') {\n\t\t\t\tentry.icon = OC.MimeType.getIconUrl('dir-encrypted')\n\t\t\t} else {\n\t\t\t\tentry.icon = OC.MimeType.getIconUrl(entry.mimetype)\n\t\t\t}\n\n\t\t\tvar simpleSize, sizeColor\n\t\t\tif (typeof (entry.size) !== 'undefined' && entry.size >= 0) {\n\t\t\t\tsimpleSize = OC.Util.humanFileSize(parseInt(entry.size, 10), true)\n\t\t\t\tsizeColor = Math.round(160 - Math.pow((entry.size / (1024 * 1024)), 2))\n\t\t\t} else {\n\t\t\t\tsimpleSize = t('files', 'Pending')\n\t\t\t\tsizeColor = 80\n\t\t\t}\n\n\t\t\t// split the filename in half if the size is bigger than 20 char\n\t\t\t// for ellipsis\n\t\t\tif (entry.name.length >= 10) {\n\t\t\t\t// leave maximum 10 letters\n\t\t\t\tvar split = Math.min(Math.floor(entry.name.length / 2), 10)\n\t\t\t\tvar filename1 = entry.name.substr(0, entry.name.length - split)\n\t\t\t\tvar filename2 = entry.name.substr(entry.name.length - split)\n\t\t\t} else {\n\t\t\t\tvar filename1 = entry.name\n\t\t\t\tvar filename2 = ''\n\t\t\t}\n\n\t\t\tvar $row = self.$listTmpl.octemplate({\n\t\t\t\ttype: entry.type,\n\t\t\t\tdir: dir,\n\t\t\t\tfilename: entry.name,\n\t\t\t\tfilename1: filename1,\n\t\t\t\tfilename2: filename2,\n\t\t\t\tdate: OC.Util.relativeModifiedDate(entry.mtime),\n\t\t\t\tsize: simpleSize,\n\t\t\t\tsizeColor: sizeColor,\n\t\t\t\ticon: entry.icon\n\t\t\t})\n\t\t\tif (entry.type === 'file') {\n\t\t\t\tvar urlSpec = {\n\t\t\t\t\tfile: dir + '/' + entry.name,\n\t\t\t\t\tx: 100,\n\t\t\t\t\ty: 100\n\t\t\t\t}\n\t\t\t\tvar img = new Image()\n\t\t\t\tvar previewUrl = OC.generateUrl('/core/preview.png?') + $.param(urlSpec)\n\t\t\t\timg.onload = function() {\n\t\t\t\t\tif (img.width > 5) {\n\t\t\t\t\t\t$row.find('td.filename').attr('style', 'background-image:url(' + previewUrl + ')')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\timg.src = previewUrl\n\t\t\t}\n\t\t\tself.$filelist.append($row)\n\t\t})\n\n\t\tself.$filelistContainer.removeClass('icon-loading')\n\t},\n\t/**\n\t * fills the tree list with directories\n\t */\n\t_fillSlug: function() {\n\t\tvar addButton = this.$dirTree.find('.actions.creatable').detach()\n\t\tthis.$dirTree.empty()\n\t\tvar self = this\n\n\t\tself.$dirTree.append(addButton)\n\n\t\tvar dir\n\t\tvar path = this.$filePicker.data('path')\n\t\tvar $template = $('<div data-dir=\"{dir}\" tabindex=\"0\"><a>{name}</a></div>').addClass('crumb')\n\t\tif (path) {\n\t\t\tvar paths = path.split('/')\n\t\t\t$.each(paths, function(index, dir) {\n\t\t\t\tdir = paths.pop()\n\t\t\t\tif (dir === '') {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tself.$dirTree.prepend($template.octemplate({\n\t\t\t\t\tdir: paths.join('/') + '/' + dir,\n\t\t\t\t\tname: dir\n\t\t\t\t}))\n\t\t\t})\n\t\t}\n\n\t\t$template.octemplate({\n\t\t\tdir: '',\n\t\t\tname: t('core', 'Home'),\n\t\t}, { escapeFunction: null }).prependTo(this.$dirTree)\n\n\t},\n\t/**\n\t * handle selection made in the tree list\n\t */\n\t_handleTreeListSelect: function(event, type) {\n\t\tvar self = event.data\n\t\tvar dir = $(event.target).closest('.crumb').data('dir')\n\t\tself._fillFilePicker(dir, type)\n\t\tvar getOcDialog = (event.target).closest('.oc-dialog')\n\t\tvar buttonEnableDisable = $('.primary', getOcDialog)\n\t\tthis._changeButtonsText(type, dir.split(/[/]+/).pop())\n\t\tif (this.$filePicker.data('mimetype').indexOf('httpd/unix-directory') !== -1 || this.$filePicker.data('allowDirectoryChooser')) {\n\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t} else {\n\t\t\tbuttonEnableDisable.prop('disabled', true)\n\t\t}\n\t},\n\t/**\n\t * handle clicks made in the filepicker\n\t */\n\t_handlePickerClick: function(event, $element, type) {\n\t\tvar getOcDialog = this.$filePicker.closest('.oc-dialog')\n\t\tvar buttonEnableDisable = getOcDialog.find('.primary')\n\t\tif ($element.data('type') === 'file') {\n\t\t\tif (this.$filePicker.data('multiselect') !== true || !event.ctrlKey) {\n\t\t\t\tthis.$filelist.find('.filepicker_element_selected').removeClass('filepicker_element_selected')\n\t\t\t}\n\t\t\t$element.toggleClass('filepicker_element_selected')\n\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t} else if ($element.data('type') === 'dir') {\n\t\t\tthis._fillFilePicker(this.$filePicker.data('path') + '/' + $element.data('entryname'), type)\n\t\t\tthis._changeButtonsText(type, $element.data('entryname'))\n\t\t\tif (this.$filePicker.data('mimetype').indexOf('httpd/unix-directory') !== -1 || this.$filePicker.data('allowDirectoryChooser')) {\n\t\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t\t} else {\n\t\t\t\tbuttonEnableDisable.prop('disabled', true)\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Handle\n\t * @param type of action\n\t * @param dir on which to change buttons text\n\t * @private\n\t */\n\t_changeButtonsText: function(type, dir) {\n\t\tvar copyText = dir === '' ? t('core', 'Copy') : t('core', 'Copy to {folder}', { folder: dir })\n\t\tvar moveText = dir === '' ? t('core', 'Move') : t('core', 'Move to {folder}', { folder: dir })\n\t\tvar buttons = $('.oc-dialog-buttonrow button')\n\t\tswitch (type) {\n\t\t\tcase this.FILEPICKER_TYPE_CHOOSE:\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_CUSTOM:\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_COPY:\n\t\t\t\tbuttons.text(copyText)\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_MOVE:\n\t\t\t\tbuttons.text(moveText)\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_COPY_MOVE:\n\t\t\t\tbuttons.eq(0).text(copyText)\n\t\t\t\tbuttons.eq(1).text(moveText)\n\t\t\t\tbreak\n\t\t}\n\t}\n}\n\nexport default Dialogs\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { emit } from '@nextcloud/event-bus'\n\n/**\n * @private\n * @param {Document} global the document to read the initial value from\n * @param {Function} emit the function to invoke for every new token\n * @return {object}\n */\nexport const manageToken = (global, emit) => {\n\tlet token = global.getElementsByTagName('head')[0].getAttribute('data-requesttoken')\n\n\treturn {\n\t\tgetToken: () => token,\n\t\tsetToken: newToken => {\n\t\t\ttoken = newToken\n\n\t\t\temit('csrf-token-update', {\n\t\t\t\ttoken,\n\t\t\t})\n\t\t},\n\t}\n}\n\nconst manageFromDocument = manageToken(document, emit)\n\n/**\n * @return {string}\n */\nexport const getToken = manageFromDocument.getToken\n\n/**\n * @param {string} newToken new token\n */\nexport const setToken = manageFromDocument.setToken\n","/**\n * @copyright 2012 Robin Appelman icewind1991@gmail.com\n *\n * @author Arthur Schiwon <blizzz@arthur-schiwon.de>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Lukas Reschke <lukas@statuscode.ch>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Thomas Müller <thomas.mueller@tmit.eu>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport $ from 'jquery'\n\nimport { getToken } from './requesttoken'\n\n/**\n * Create a new event source\n * @param {string} src\n * @param {object} [data] to be send as GET\n *\n * @constructs OCEventSource\n */\nconst OCEventSource = function(src, data) {\n\tvar dataStr = ''\n\tvar name\n\tvar joinChar\n\tthis.typelessListeners = []\n\tthis.closed = false\n\tthis.listeners = {}\n\tif (data) {\n\t\tfor (name in data) {\n\t\t\tdataStr += name + '=' + encodeURIComponent(data[name]) + '&'\n\t\t}\n\t}\n\tdataStr += 'requesttoken=' + encodeURIComponent(getToken())\n\tif (!this.useFallBack && typeof EventSource !== 'undefined') {\n\t\tjoinChar = '&'\n\t\tif (src.indexOf('?') === -1) {\n\t\t\tjoinChar = '?'\n\t\t}\n\t\tthis.source = new EventSource(src + joinChar + dataStr)\n\t\tthis.source.onmessage = function(e) {\n\t\t\tfor (var i = 0; i < this.typelessListeners.length; i++) {\n\t\t\t\tthis.typelessListeners[i](JSON.parse(e.data))\n\t\t\t}\n\t\t}.bind(this)\n\t} else {\n\t\tvar iframeId = 'oc_eventsource_iframe_' + OCEventSource.iframeCount\n\t\tOCEventSource.fallBackSources[OCEventSource.iframeCount] = this\n\t\tthis.iframe = $('<iframe></iframe>')\n\t\tthis.iframe.attr('id', iframeId)\n\t\tthis.iframe.hide()\n\n\t\tjoinChar = '&'\n\t\tif (src.indexOf('?') === -1) {\n\t\t\tjoinChar = '?'\n\t\t}\n\t\tthis.iframe.attr('src', src + joinChar + 'fallback=true&fallback_id=' + OCEventSource.iframeCount + '&' + dataStr)\n\t\t$('body').append(this.iframe)\n\t\tthis.useFallBack = true\n\t\tOCEventSource.iframeCount++\n\t}\n\t// add close listener\n\tthis.listen('__internal__', function(data) {\n\t\tif (data === 'close') {\n\t\t\tthis.close()\n\t\t}\n\t}.bind(this))\n}\nOCEventSource.fallBackSources = []\nOCEventSource.iframeCount = 0// number of fallback iframes\nOCEventSource.fallBackCallBack = function(id, type, data) {\n\tOCEventSource.fallBackSources[id].fallBackCallBack(type, data)\n}\nOCEventSource.prototype = {\n\ttypelessListeners: [],\n\tiframe: null,\n\tlisteners: {}, // only for fallback\n\tuseFallBack: false,\n\t/**\n\t * Fallback callback for browsers that don't have the\n\t * native EventSource object.\n\t *\n\t * Calls the registered listeners.\n\t *\n\t * @private\n\t * @param {String} type event type\n\t * @param {Object} data received data\n\t */\n\tfallBackCallBack: function(type, data) {\n\t\tvar i\n\t\t// ignore messages that might appear after closing\n\t\tif (this.closed) {\n\t\t\treturn\n\t\t}\n\t\tif (type) {\n\t\t\tif (typeof this.listeners.done !== 'undefined') {\n\t\t\t\tfor (i = 0; i < this.listeners[type].length; i++) {\n\t\t\t\t\tthis.listeners[type][i](data)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor (i = 0; i < this.typelessListeners.length; i++) {\n\t\t\t\tthis.typelessListeners[i](data)\n\t\t\t}\n\t\t}\n\t},\n\tlastLength: 0, // for fallback\n\t/**\n\t * Listen to a given type of events.\n\t *\n\t * @param {String} type event type\n\t * @param {Function} callback event callback\n\t */\n\tlisten: function(type, callback) {\n\t\tif (callback && callback.call) {\n\n\t\t\tif (type) {\n\t\t\t\tif (this.useFallBack) {\n\t\t\t\t\tif (!this.listeners[type]) {\n\t\t\t\t\t\tthis.listeners[type] = []\n\t\t\t\t\t}\n\t\t\t\t\tthis.listeners[type].push(callback)\n\t\t\t\t} else {\n\t\t\t\t\tthis.source.addEventListener(type, function(e) {\n\t\t\t\t\t\tif (typeof e.data !== 'undefined') {\n\t\t\t\t\t\t\tcallback(JSON.parse(e.data))\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcallback('')\n\t\t\t\t\t\t}\n\t\t\t\t\t}, false)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.typelessListeners.push(callback)\n\t\t\t}\n\t\t}\n\t},\n\t/**\n\t * Closes this event source.\n\t */\n\tclose: function() {\n\t\tthis.closed = true\n\t\tif (typeof this.source !== 'undefined') {\n\t\t\tthis.source.close()\n\t\t}\n\t}\n}\n\nexport default OCEventSource\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\n/** @typedef {import('jquery')} jQuery */\nimport $ from 'jquery'\n\nimport { menuSpeed } from './constants'\n\nexport let currentMenu = null\nexport let currentMenuToggle = null\n\n/**\n * For menu toggling\n *\n * @param {jQuery} $toggle the toggle element\n * @param {jQuery} $menuEl the menu container element\n * @param {Function | undefined} toggle callback invoked everytime the menu is opened\n * @param {boolean} headerMenu is this a top right header menu?\n * @return {void}\n */\nexport const registerMenu = function($toggle, $menuEl, toggle, headerMenu) {\n\t$menuEl.addClass('menu')\n\tconst isClickableElement = $toggle.prop('tagName') === 'A' || $toggle.prop('tagName') === 'BUTTON'\n\n\t// On link and button, the enter key trigger a click event\n\t// Only use the click to avoid two fired events\n\t$toggle.on(isClickableElement ? 'click.menu' : 'click.menu keyup.menu', function(event) {\n\t\t// prevent the link event (append anchor to URL)\n\t\tevent.preventDefault()\n\n\t\t// allow enter key as a trigger\n\t\tif (event.key && event.key !== 'Enter') {\n\t\t\treturn\n\t\t}\n\n\t\tif ($menuEl.is(currentMenu)) {\n\t\t\thideMenus()\n\t\t\treturn\n\t\t} else if (currentMenu) {\n\t\t\t// another menu was open?\n\t\t\t// close it\n\t\t\thideMenus()\n\t\t}\n\n\t\tif (headerMenu === true) {\n\t\t\t$menuEl.parent().addClass('openedMenu')\n\t\t}\n\n\t\t// Set menu to expanded\n\t\t$toggle.attr('aria-expanded', true)\n\n\t\t$menuEl.slideToggle(menuSpeed, toggle)\n\t\tcurrentMenu = $menuEl\n\t\tcurrentMenuToggle = $toggle\n\t})\n}\n\n/**\n * Unregister a previously registered menu\n *\n * @param {jQuery} $toggle the toggle element\n * @param {jQuery} $menuEl the menu container element\n */\nexport const unregisterMenu = ($toggle, $menuEl) => {\n\t// close menu if opened\n\tif ($menuEl.is(currentMenu)) {\n\t\thideMenus()\n\t}\n\t$toggle.off('click.menu').removeClass('menutoggle')\n\t$menuEl.removeClass('menu')\n}\n\n/**\n * Hides any open menus\n *\n * @param {Function} complete callback when the hiding animation is done\n */\nexport const hideMenus = function(complete) {\n\tif (currentMenu) {\n\t\tconst lastMenu = currentMenu\n\t\tcurrentMenu.trigger(new $.Event('beforeHide'))\n\t\tcurrentMenu.slideUp(menuSpeed, function() {\n\t\t\tlastMenu.trigger(new $.Event('afterHide'))\n\t\t\tif (complete) {\n\t\t\t\tcomplete.apply(this, arguments)\n\t\t\t}\n\t\t})\n\t}\n\n\t// Set menu to closed\n\t$('.menutoggle').attr('aria-expanded', false)\n\tif (currentMenuToggle) {\n\t\tcurrentMenuToggle.attr('aria-expanded', false)\n\t}\n\n\t$('.openedMenu').removeClass('openedMenu')\n\tcurrentMenu = null\n\tcurrentMenuToggle = null\n}\n\n/**\n * Shows a given element as menu\n *\n * @param {object} [$toggle=null] menu toggle\n * @param {object} $menuEl menu element\n * @param {Function} complete callback when the showing animation is done\n */\nexport const showMenu = ($toggle, $menuEl, complete) => {\n\tif ($menuEl.is(currentMenu)) {\n\t\treturn\n\t}\n\thideMenus()\n\tcurrentMenu = $menuEl\n\tcurrentMenuToggle = $toggle\n\t$menuEl.trigger(new $.Event('beforeShow'))\n\t$menuEl.show()\n\t$menuEl.trigger(new $.Event('afterShow'))\n\t// no animation\n\tif (_.isFunction(complete)) {\n\t\tcomplete()\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const coreApps = ['', 'admin', 'log', 'core/search', 'core', '3rdparty']\nexport const menuSpeed = 50\nexport const PERMISSION_NONE = 0\nexport const PERMISSION_CREATE = 4\nexport const PERMISSION_READ = 1\nexport const PERMISSION_UPDATE = 2\nexport const PERMISSION_DELETE = 8\nexport const PERMISSION_SHARE = 16\nexport const PERMISSION_ALL = 31\nexport const TAG_FAVORITE = '_$!<Favorite>!$_'\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst isAdmin = !!window._oc_isadmin\n\n/**\n * Returns whether the current user is an administrator\n *\n * @return {boolean} true if the user is an admin, false otherwise\n * @since 9.0.0\n */\nexport const isUserAdmin = () => isAdmin\n","/**\n * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.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 Handlebars from 'handlebars'\nimport {\n\tloadTranslations,\n\ttranslate,\n\ttranslatePlural,\n\tregister,\n\tunregister,\n} from '@nextcloud/l10n'\n\n/**\n * L10N namespace with localization functions.\n *\n * @namespace OC.L10n\n * @deprecated 26.0.0 use https://www.npmjs.com/package/@nextcloud/l10n\n */\nconst L10n = {\n\n\t/**\n\t * Load an app's translation bundle if not loaded already.\n\t *\n\t * @deprecated 26.0.0 use `loadTranslations` from https://www.npmjs.com/package/@nextcloud/l10n\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: loadTranslations,\n\n\t/**\n\t * Register an app's translation bundle.\n\t *\n\t * @deprecated 26.0.0 use `register` from https://www.npmjs.com/package/@nextcloud/l10\n\t *\n\t * @param {string} appName name of the app\n\t * @param {Object<string, string>} bundle bundle\n\t */\n\tregister,\n\n\t/**\n\t * @private\n\t * @deprecated 26.0.0 use `unregister` from https://www.npmjs.com/package/@nextcloud/l10n\n\t */\n\t_unregister: unregister,\n\n\t/**\n\t * Translate a string\n\t *\n\t * @deprecated 26.0.0 use `translate` from https://www.npmjs.com/package/@nextcloud/l10n\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,\n\n\t/**\n\t * Translate a plural string\n\t *\n\t * @deprecated 26.0.0 use `translatePlural` from https://www.npmjs.com/package/@nextcloud/l10n\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,\n}\n\nexport default L10n\n\nHandlebars.registerHelper('t', function(app, text) {\n\treturn 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/functions/formatFileSize.html\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 from './l10n'\nimport {\n\tgetCanonicalLocale,\n\tgetLanguage,\n\tgetLocale,\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\t/**\n\t * @deprecated 26.0.0 use `getLocale` from https://www.npmjs.com/package/@nextcloud/l10n\n\t */\n\tgetLocale,\n\t/**\n\t * @deprecated 26.0.0 use `getLanguage` from https://www.npmjs.com/package/@nextcloud/l10n\n\t */\n\tgetLanguage,\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¶m2=abcde¶m3=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 render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"guest-box login-box\"},[(!_vm.hideLoginForm || _vm.directLogin)?_c('div',[_c('transition',{attrs:{\"name\":\"fade\",\"mode\":\"out-in\"}},[(!_vm.passwordlessLogin && !_vm.resetPassword && _vm.resetPasswordTarget === '')?_c('div',[_c('LoginForm',{attrs:{\"username\":_vm.user,\"redirect-url\":_vm.redirectUrl,\"direct-login\":_vm.directLogin,\"messages\":_vm.messages,\"errors\":_vm.errors,\"throttle-delay\":_vm.throttleDelay,\"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',{staticClass:\"login-box__link\",attrs:{\"id\":\"lost-password\",\"href\":_vm.resetPasswordLink}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Forgot password?'))+\"\\n\\t\\t\\t\\t\")]):(_vm.canResetPassword && !_vm.resetPassword)?_c('a',{staticClass:\"login-box__link\",attrs:{\"id\":\"lost-password\",\"href\":_vm.resetPasswordLink},on:{\"click\":function($event){$event.preventDefault();_vm.resetPassword = true}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Forgot password?'))+\"\\n\\t\\t\\t\\t\")]):_vm._e(),_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\\t\"+_vm._s(_vm.t('core', 'Log in with a device'))+\"\\n\\t\\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\\t\"+_vm._s(_vm.t('core', 'Log in with a device'))+\"\\n\\t\\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,\"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',{staticClass:\"login-box__link\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.passwordlessLogin = false}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Back'))+\"\\n\\t\\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},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},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('NcNoteCard',{attrs:{\"type\":\"warning\",\"title\":_vm.t('core', 'Login form is disabled.')}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Please contact your administrator.'))+\"\\n\\t\\t\\t\")])],1)],1),_vm._v(\" \"),_c('div',{staticClass:\"alternative-logins\",attrs:{\"id\":\"alternative-logins\"}},_vm._l((_vm.alternativeLogins),function(alternativeLogin,index){return _c('NcButton',{key:index,class:[alternativeLogin.class],attrs:{\"type\":\"secondary\",\"wide\":true,\"role\":\"link\",\"href\":alternativeLogin.href}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(alternativeLogin.name)+\"\\n\\t\\t\")])}),1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./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<NcButton type=\"primary\"\n\t\tnative-type=\"submit\"\n\t\t:wide=\"true\"\n\t\t@click=\"$emit('click')\">\n\t\t{{ !loading ? value : valueLoading }}\n\t\t<template #icon>\n\t\t\t<div v-if=\"loading\" class=\"submit-wrapper__icon icon-loading-small-dark\" />\n\t\t\t<ArrowRight v-else class=\"submit-wrapper__icon\" />\n\t\t</template>\n\t</NcButton>\n</template>\n\n<script>\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton'\nimport ArrowRight from 'vue-material-design-icons/ArrowRight.vue'\n\nexport default {\n\tname: 'LoginButton',\n\tcomponents: {\n\t\tArrowRight,\n\t\tNcButton,\n\t},\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: t('core', 'Log in'),\n\t\t},\n\t\tvalueLoading: {\n\t\t\ttype: String,\n\t\t\tdefault: t('core', 'Logging in …'),\n\t\t},\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 lang=\"scss\" scoped>\n.button-vue {\n\tmargin-top: .5rem;\n}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginButton.vue?vue&type=style&index=0&id=756414a8&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginButton.vue?vue&type=style&index=0&id=756414a8&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./LoginButton.vue?vue&type=template&id=756414a8&scoped=true&\"\nimport script from \"./LoginButton.vue?vue&type=script&lang=js&\"\nexport * from \"./LoginButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LoginButton.vue?vue&type=style&index=0&id=756414a8&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"756414a8\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcButton',{attrs:{\"type\":\"primary\",\"native-type\":\"submit\",\"wide\":true},on:{\"click\":function($event){return _vm.$emit('click')}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.loading)?_c('div',{staticClass:\"submit-wrapper__icon icon-loading-small-dark\"}):_c('ArrowRight',{staticClass:\"submit-wrapper__icon\"})]},proxy:true}])},[_vm._v(\"\\n\\t\"+_vm._s(!_vm.loading ? _vm.value : _vm.valueLoading)+\"\\n\\t\")])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./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\tclass=\"login-form\"\n\t\tmethod=\"post\"\n\t\tname=\"login\"\n\t\t:action=\"loginActionUrl\"\n\t\t@submit=\"submit\">\n\t\t<fieldset class=\"login-form__fieldset\" data-login-form>\n\t\t\t<NcNoteCard v-if=\"apacheAuthFailed\"\n\t\t\t\t:title=\"t('core', 'Server side authentication failed!')\"\n\t\t\t\ttype=\"warning\">\n\t\t\t\t{{ t('core', 'Please contact your administrator.') }}\n\t\t\t</NcNoteCard>\n\t\t\t<NcNoteCard v-if=\"messages.length > 0\">\n\t\t\t\t<div v-for=\"(message, index) in messages\"\n\t\t\t\t\t:key=\"index\">\n\t\t\t\t\t{{ message }}<br>\n\t\t\t\t</div>\n\t\t\t</NcNoteCard>\n\t\t\t<NcNoteCard v-if=\"internalException\"\n\t\t\t\t:class=\"t('core', 'An internal error occurred.')\"\n\t\t\t\ttype=\"warning\">\n\t\t\t\t{{ t('core', 'Please try again or contact your administrator.') }}\n\t\t\t</NcNoteCard>\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<h2 class=\"login-form__headline\" data-login-form-headline v-html=\"headline\" />\n\t\t\t<NcTextField id=\"user\"\n\t\t\t\tref=\"user\"\n\t\t\t\t:label=\"t('core', 'Account name or email')\"\n\t\t\t\t:label-visible=\"true\"\n\t\t\t\tname=\"user\"\n\t\t\t\t:value.sync=\"user\"\n\t\t\t\t:class=\"{shake: invalidPassword}\"\n\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t:spellchecking=\"false\"\n\t\t\t\t:autocomplete=\"autoCompleteAllowed ? 'username' : 'off'\"\n\t\t\t\trequired\n\t\t\t\tdata-login-form-input-user\n\t\t\t\t@change=\"updateUsername\" />\n\n\t\t\t<NcPasswordField id=\"password\"\n\t\t\t\tref=\"password\"\n\t\t\t\tname=\"password\"\n\t\t\t\t:label-visible=\"true\"\n\t\t\t\t:class=\"{shake: invalidPassword}\"\n\t\t\t\t:value.sync=\"password\"\n\t\t\t\t:spellchecking=\"false\"\n\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t:autocomplete=\"autoCompleteAllowed ? 'current-password' : 'off'\"\n\t\t\t\t:label=\"t('core', 'Password')\"\n\t\t\t\t:helper-text=\"errorLabel\"\n\t\t\t\t:error=\"isError\"\n\t\t\t\tdata-login-form-input-password\n\t\t\t\trequired />\n\n\t\t\t<LoginButton data-login-form-submit :loading=\"loading\" />\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 { generateUrl, imagePath } from '@nextcloud/router'\n\nimport NcPasswordField from '@nextcloud/vue/dist/Components/NcPasswordField.js'\nimport NcTextField from '@nextcloud/vue/dist/Components/NcTextField.js'\nimport NcNoteCard from '@nextcloud/vue/dist/Components/NcNoteCard.js'\n\nimport LoginButton from './LoginButton.vue'\n\nexport default {\n\tname: 'LoginForm',\n\n\tcomponents: {\n\t\tLoginButton,\n\t\tNcPasswordField,\n\t\tNcTextField,\n\t\tNcNoteCard,\n\t},\n\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\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\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t\ttimezone: (new Intl.DateTimeFormat())?.resolvedOptions()?.timeZone,\n\t\t\ttimezoneOffset: (-new Date().getTimezoneOffset() / 60),\n\t\t\theadline: t('core', 'Log in to {productName}', { productName: OC.theme.name }),\n\t\t\tuser: '',\n\t\t\tpassword: '',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tisError() {\n\t\t\treturn this.invalidPassword || this.userDisabled\n\t\t\t\t|| this.throttleDelay > 5000\n\t\t},\n\t\terrorLabel() {\n\t\t\tif (this.invalidPassword) {\n\t\t\t\treturn t('core', 'Wrong username or password.')\n\t\t\t}\n\t\t\tif (this.userDisabled) {\n\t\t\t\treturn t('core', 'User disabled')\n\t\t\t}\n\t\t\tif (this.throttleDelay > 5000) {\n\t\t\t\treturn 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}\n\t\t\treturn undefined\n\t\t},\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\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\n\tmounted() {\n\t\tif (this.username === '') {\n\t\t\tthis.$refs.user.$refs.inputField.$refs.input.focus()\n\t\t} else {\n\t\t\tthis.user = this.username\n\t\t\tthis.$refs.password.$refs.inputField.$refs.input.focus()\n\t\t}\n\t},\n\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.$emit('submit')\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.login-form {\n\ttext-align: left;\n\tfont-size: 1rem;\n\n\t&__fieldset {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: .5rem;\n\t}\n\n\t&__headline {\n\t\ttext-align: center;\n\t}\n}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginForm.vue?vue&type=style&index=0&id=5bd351bc&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginForm.vue?vue&type=style&index=0&id=5bd351bc&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./LoginForm.vue?vue&type=template&id=5bd351bc&scoped=true&\"\nimport script from \"./LoginForm.vue?vue&type=script&lang=js&\"\nexport * from \"./LoginForm.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LoginForm.vue?vue&type=style&index=0&id=5bd351bc&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5bd351bc\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('form',{ref:\"loginForm\",staticClass:\"login-form\",attrs:{\"method\":\"post\",\"name\":\"login\",\"action\":_vm.loginActionUrl},on:{\"submit\":_vm.submit}},[_c('fieldset',{staticClass:\"login-form__fieldset\",attrs:{\"data-login-form\":\"\"}},[(_vm.apacheAuthFailed)?_c('NcNoteCard',{attrs:{\"title\":_vm.t('core', 'Server side authentication failed!'),\"type\":\"warning\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Please contact your administrator.'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.messages.length > 0)?_c('NcNoteCard',_vm._l((_vm.messages),function(message,index){return _c('div',{key:index},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(message)),_c('br')])}),0):_vm._e(),_vm._v(\" \"),(_vm.internalException)?_c('NcNoteCard',{class:_vm.t('core', 'An internal error occurred.'),attrs:{\"type\":\"warning\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Please try again or contact your administrator.'))+\"\\n\\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('h2',{staticClass:\"login-form__headline\",attrs:{\"data-login-form-headline\":\"\"},domProps:{\"innerHTML\":_vm._s(_vm.headline)}}),_vm._v(\" \"),_c('NcTextField',{ref:\"user\",class:{shake: _vm.invalidPassword},attrs:{\"id\":\"user\",\"label\":_vm.t('core', 'Account name or email'),\"label-visible\":true,\"name\":\"user\",\"value\":_vm.user,\"autocapitalize\":\"none\",\"spellchecking\":false,\"autocomplete\":_vm.autoCompleteAllowed ? 'username' : 'off',\"required\":\"\",\"data-login-form-input-user\":\"\"},on:{\"update:value\":function($event){_vm.user=$event},\"change\":_vm.updateUsername}}),_vm._v(\" \"),_c('NcPasswordField',{ref:\"password\",class:{shake: _vm.invalidPassword},attrs:{\"id\":\"password\",\"name\":\"password\",\"label-visible\":true,\"value\":_vm.password,\"spellchecking\":false,\"autocapitalize\":\"none\",\"autocomplete\":_vm.autoCompleteAllowed ? 'current-password' : 'off',\"label\":_vm.t('core', 'Password'),\"helper-text\":_vm.errorLabel,\"error\":_vm.isError,\"data-login-form-input-password\":\"\",\"required\":\"\"},on:{\"update:value\":function($event){_vm.password=$event}}}),_vm._v(\" \"),_c('LoginButton',{attrs:{\"data-login-form-submit\":\"\",\"loading\":_vm.loading}}),_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()],1)])\n}\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@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\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 redirectUrl = this.redirectUrl\n\n\t\t\treturn finishAuthentication(JSON.stringify(challenge))\n\t\t\t\t.then(({ defaultRedirectUrl }) => {\n\t\t\t\t\tconsole.debug('Logged in redirecting')\n\t\t\t\t\t// Redirect url might be false so || should be used instead of ??.\n\t\t\t\t\twindow.location.href = redirectUrl || defaultRedirectUrl\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=20256748&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PasswordLessLoginForm.vue?vue&type=style&index=0&id=20256748&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./PasswordLessLoginForm.vue?vue&type=template&id=20256748&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=20256748&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"20256748\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;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},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()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./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 class=\"login-form\" @submit.prevent=\"submit\">\n\t\t<fieldset class=\"login-form__fieldset\">\n\t\t\t<NcTextField id=\"user\"\n\t\t\t\t:value.sync=\"user\"\n\t\t\t\tname=\"user\"\n\t\t\t\tautocapitalize=\"off\"\n\t\t\t\t:label=\"t('core', 'Account name or email')\"\n\t\t\t\t:label-visible=\"true\"\n\t\t\t\trequired\n\t\t\t\t@change=\"updateUsername\" />\n\t\t\t<LoginButton :value=\"t('core', 'Reset password')\" />\n\n\t\t\t<NcNoteCard v-if=\"message === 'send-success'\"\n\t\t\t\ttype=\"success\">\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</NcNoteCard>\n\t\t\t<NcNoteCard v-else-if=\"message === 'send-error'\"\n\t\t\t\ttype=\"error\">\n\t\t\t\t{{ t('core', 'Couldn\\'t send reset email. Please contact your administrator.') }}\n\t\t\t</NcNoteCard>\n\t\t\t<NcNoteCard v-else-if=\"message === 'reset-error'\"\n\t\t\t\ttype=\"error\">\n\t\t\t\t{{ t('core', 'Password cannot be changed. Please contact your administrator.') }}\n\t\t\t</NcNoteCard>\n\n\t\t\t<a class=\"login-form__link\"\n\t\t\t\thref=\"#\"\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'\nimport { generateUrl } from '@nextcloud/router'\nimport LoginButton from './LoginButton.vue'\nimport NcTextField from '@nextcloud/vue/dist/Components/NcTextField.js'\nimport NcNoteCard from '@nextcloud/vue/dist/Components/NcNoteCard.js'\n\nexport default {\n\tname: 'ResetPassword',\n\tcomponents: {\n\t\tLoginButton,\n\t\tNcNoteCard,\n\t\tNcTextField,\n\t},\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},\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 lang=\"scss\" scoped>\n.login-form {\n\ttext-align: left;\n\tfont-size: 1rem;\n\n\t&__fieldset {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: .5rem;\n\t}\n\n\t&__link {\n\t\tdisplay: block;\n\t\tfont-weight: normal !important;\n\t\tpadding-bottom: 1rem;\n\t\tcursor: pointer;\n\t\tfont-size: var(--default-font-size);\n\t\ttext-align: center;\n\t\tpadding: .5rem 1rem 1rem 1rem;\n\t}\n}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResetPassword.vue?vue&type=style&index=0&id=27cabc60&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResetPassword.vue?vue&type=style&index=0&id=27cabc60&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ResetPassword.vue?vue&type=template&id=27cabc60&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=27cabc60&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"27cabc60\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('form',{staticClass:\"login-form\",on:{\"submit\":function($event){$event.preventDefault();return _vm.submit.apply(null, arguments)}}},[_c('fieldset',{staticClass:\"login-form__fieldset\"},[_c('NcTextField',{attrs:{\"id\":\"user\",\"value\":_vm.user,\"name\":\"user\",\"autocapitalize\":\"off\",\"label\":_vm.t('core', 'Account name or email'),\"label-visible\":true,\"required\":\"\"},on:{\"update:value\":function($event){_vm.user=$event},\"change\":_vm.updateUsername}}),_vm._v(\" \"),_c('LoginButton',{attrs:{\"value\":_vm.t('core', 'Reset password')}}),_vm._v(\" \"),(_vm.message === 'send-success')?_c('NcNoteCard',{attrs:{\"type\":\"success\"}},[_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('NcNoteCard',{attrs:{\"type\":\"error\"}},[_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('NcNoteCard',{attrs:{\"type\":\"error\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Password cannot be changed. Please contact your administrator.'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('a',{staticClass:\"login-form__link\",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\")])],1)])\n}\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<LoginButton :loading=\"loading\"\n\t\t\t\t:value=\"t('core', 'Reset password')\"\n\t\t\t\t:value-loading=\"t('core', 'Resetting password')\" />\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'\nimport LoginButton from './LoginButton.vue'\n\nexport default {\n\tname: 'UpdatePassword',\n\tcomponents: {\n\t\tLoginButton,\n\t},\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},\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=4dc21d74&prod&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=4dc21d74&prod&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UpdatePassword.vue?vue&type=template&id=4dc21d74&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=4dc21d74&prod&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 \"4dc21d74\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;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('LoginButton',{attrs:{\"loading\":_vm.loading,\"value\":_vm.t('core', 'Reset password'),\"value-loading\":_vm.t('core', 'Resetting password')}}),_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()],1)])\n}\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 class=\"guest-box login-box\">\n\t\t<div v-if=\"!hideLoginForm || directLogin\">\n\t\t\t<transition name=\"fade\" mode=\"out-in\">\n\t\t\t\t<div v-if=\"!passwordlessLogin && !resetPassword && resetPasswordTarget === ''\">\n\t\t\t\t\t<LoginForm :username.sync=\"user\"\n\t\t\t\t\t\t:redirect-url=\"redirectUrl\"\n\t\t\t\t\t\t:direct-login=\"directLogin\"\n\t\t\t\t\t\t:messages=\"messages\"\n\t\t\t\t\t\t:errors=\"errors\"\n\t\t\t\t\t\t:throttle-delay=\"throttleDelay\"\n\t\t\t\t\t\t:auto-complete-allowed=\"autoCompleteAllowed\"\n\t\t\t\t\t\t@submit=\"loading = true\" />\n\t\t\t\t\t<a v-if=\"canResetPassword && resetPasswordLink !== ''\"\n\t\t\t\t\t\tid=\"lost-password\"\n\t\t\t\t\t\tclass=\"login-box__link\"\n\t\t\t\t\t\t:href=\"resetPasswordLink\">\n\t\t\t\t\t\t{{ t('core', 'Forgot password?') }}\n\t\t\t\t\t</a>\n\t\t\t\t\t<a v-else-if=\"canResetPassword && !resetPassword\"\n\t\t\t\t\t\tid=\"lost-password\"\n\t\t\t\t\t\tclass=\"login-box__link\"\n\t\t\t\t\t\t:href=\"resetPasswordLink\"\n\t\t\t\t\t\t@click.prevent=\"resetPassword = true\">\n\t\t\t\t\t\t{{ t('core', 'Forgot password?') }}\n\t\t\t\t\t</a>\n\t\t\t\t\t<template v-if=\"hasPasswordless\">\n\t\t\t\t\t\t<div v-if=\"countAlternativeLogins\"\n\t\t\t\t\t\t\tclass=\"alternative-logins\">\n\t\t\t\t\t\t\t<a v-if=\"hasPasswordless\"\n\t\t\t\t\t\t\t\tclass=\"button\"\n\t\t\t\t\t\t\t\t:class=\"{ 'single-alt-login-option': countAlternativeLogins }\"\n\t\t\t\t\t\t\t\thref=\"#\"\n\t\t\t\t\t\t\t\t@click.prevent=\"passwordlessLogin = true\">\n\t\t\t\t\t\t\t\t{{ t('core', 'Log in with a device') }}\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<a v-else\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</template>\n\t\t\t\t</div>\n\t\t\t\t<div v-else-if=\"!loading && passwordlessLogin\"\n\t\t\t\t\tkey=\"reset\"\n\t\t\t\t\tclass=\"login-additional\">\n\t\t\t\t\t<PasswordLessLoginForm :username.sync=\"user\"\n\t\t\t\t\t\t:redirect-url=\"redirectUrl\"\n\t\t\t\t\t\t:auto-complete-allowed=\"autoCompleteAllowed\"\n\t\t\t\t\t\t:is-https=\"isHttps\"\n\t\t\t\t\t\t:is-localhost=\"isLocalhost\"\n\t\t\t\t\t\t:has-public-key-credential=\"hasPublicKeyCredential\"\n\t\t\t\t\t\t@submit=\"loading = true\" />\n\t\t\t\t\t<a href=\"#\" class=\"login-box__link\" @click.prevent=\"passwordlessLogin = false\">\n\t\t\t\t\t\t{{ t('core', 'Back') }}\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t\t<div v-else-if=\"!loading && canResetPassword\"\n\t\t\t\t\tkey=\"reset\"\n\t\t\t\t\tclass=\"login-additional\">\n\t\t\t\t\t<div class=\"lost-password-container\">\n\t\t\t\t\t\t<ResetPassword v-if=\"resetPassword\"\n\t\t\t\t\t\t\t:username.sync=\"user\"\n\t\t\t\t\t\t\t:reset-password-link=\"resetPasswordLink\"\n\t\t\t\t\t\t\t@abort=\"resetPassword = false\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div v-else-if=\"resetPasswordTarget !== ''\">\n\t\t\t\t\t<UpdatePassword :username.sync=\"user\"\n\t\t\t\t\t\t:reset-password-target=\"resetPasswordTarget\"\n\t\t\t\t\t\t@done=\"passwordResetFinished\" />\n\t\t\t\t</div>\n\t\t\t</transition>\n\t\t</div>\n\t\t<div v-else>\n\t\t\t<transition name=\"fade\" mode=\"out-in\">\n\t\t\t\t<NcNoteCard type=\"warning\" :title=\"t('core', 'Login form is disabled.')\">\n\t\t\t\t\t{{ t('core', 'Please contact your administrator.') }}\n\t\t\t\t</NcNoteCard>\n\t\t\t</transition>\n\t\t</div>\n\n\t\t<div id=\"alternative-logins\" class=\"alternative-logins\">\n\t\t\t<NcButton v-for=\"(alternativeLogin, index) in alternativeLogins\"\n\t\t\t\t:key=\"index\"\n\t\t\t\ttype=\"secondary\"\n\t\t\t\t:wide=\"true\"\n\t\t\t\t:class=\"[alternativeLogin.class]\"\n\t\t\t\trole=\"link\"\n\t\t\t\t:href=\"alternativeLogin.href\">\n\t\t\t\t{{ alternativeLogin.name }}\n\t\t\t</NcButton>\n\t\t</div>\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'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport NcNoteCard from '@nextcloud/vue/dist/Components/NcNoteCard.js'\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\tNcButton,\n\t\tNcNoteCard,\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\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\talternativeLogins: loadState('core', 'alternativeLogins', []),\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\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 lang=\"scss\">\nbody {\n\tfont-size: var(--default-font-size);\n}\n\n.login-box {\n\twidth: 300px;\n\n\t&__link {\n\t\tdisplay: block;\n\t\tpadding: 1rem;\n\t\tfont-size: var(--default-font-size);\n\t\ttext-align: center;\n\t\tfont-weight: normal !important;\n\t}\n}\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\n.alternative-logins {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 0.75rem;\n\n\t.button-vue {\n\t\tbox-sizing: border-box;\n\t}\n}\n</style>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./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/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=style&index=0&id=7b955242&prod&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=style&index=0&id=7b955242&prod&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Login.vue?vue&type=template&id=7b955242&\"\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&id=7b955242&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n 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, \".button-vue[data-v-756414a8]{margin-top:.5rem}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/login/LoginButton.vue\"],\"names\":[],\"mappings\":\"AACA,6BACC,gBAAA\",\"sourcesContent\":[\"\\n.button-vue {\\n\\tmargin-top: .5rem;\\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, \".login-form[data-v-5bd351bc]{text-align:left;font-size:1rem}.login-form__fieldset[data-v-5bd351bc]{width:100%;display:flex;flex-direction:column;gap:.5rem}.login-form__headline[data-v-5bd351bc]{text-align:center}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/login/LoginForm.vue\"],\"names\":[],\"mappings\":\"AACA,6BACC,eAAA,CACA,cAAA,CAEA,uCACC,UAAA,CACA,YAAA,CACA,qBAAA,CACA,SAAA,CAGD,uCACC,iBAAA\",\"sourcesContent\":[\"\\n.login-form {\\n\\ttext-align: left;\\n\\tfont-size: 1rem;\\n\\n\\t&__fieldset {\\n\\t\\twidth: 100%;\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\tgap: .5rem;\\n\\t}\\n\\n\\t&__headline {\\n\\t\\ttext-align: center;\\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, \".body-login-container.update[data-v-20256748]{margin:15px 0}.body-login-container.update.form__message-box[data-v-20256748]{width:240px;margin:5px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/login/PasswordLessLoginForm.vue\"],\"names\":[],\"mappings\":\"AACA,8CACC,aAAA,CAEA,gEACC,WAAA,CACA,UAAA\",\"sourcesContent\":[\"\\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, \".login-form[data-v-27cabc60]{text-align:left;font-size:1rem}.login-form__fieldset[data-v-27cabc60]{width:100%;display:flex;flex-direction:column;gap:.5rem}.login-form__link[data-v-27cabc60]{display:block;font-weight:normal !important;padding-bottom:1rem;cursor:pointer;font-size:var(--default-font-size);text-align:center;padding:.5rem 1rem 1rem 1rem}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/login/ResetPassword.vue\"],\"names\":[],\"mappings\":\"AACA,6BACC,eAAA,CACA,cAAA,CAEA,uCACC,UAAA,CACA,YAAA,CACA,qBAAA,CACA,SAAA,CAGD,mCACC,aAAA,CACA,6BAAA,CACA,mBAAA,CACA,cAAA,CACA,kCAAA,CACA,iBAAA,CACA,4BAAA\",\"sourcesContent\":[\"\\n.login-form {\\n\\ttext-align: left;\\n\\tfont-size: 1rem;\\n\\n\\t&__fieldset {\\n\\t\\twidth: 100%;\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\tgap: .5rem;\\n\\t}\\n\\n\\t&__link {\\n\\t\\tdisplay: block;\\n\\t\\tfont-weight: normal !important;\\n\\t\\tpadding-bottom: 1rem;\\n\\t\\tcursor: pointer;\\n\\t\\tfont-size: var(--default-font-size);\\n\\t\\ttext-align: center;\\n\\t\\tpadding: .5rem 1rem 1rem 1rem;\\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, \"body{font-size:var(--default-font-size)}.login-box{width:300px}.login-box__link{display:block;padding:1rem;font-size:var(--default-font-size);text-align:center;font-weight:normal !important}.fade-enter-active,.fade-leave-active{transition:opacity .3s}.fade-enter,.fade-leave-to{opacity:0}.alternative-logins{display:flex;flex-direction:column;gap:.75rem}.alternative-logins .button-vue{box-sizing:border-box}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/views/Login.vue\"],\"names\":[],\"mappings\":\"AACA,KACC,kCAAA,CAGD,WACC,WAAA,CAEA,iBACC,aAAA,CACA,YAAA,CACA,kCAAA,CACA,iBAAA,CACA,6BAAA,CAGF,sCACC,sBAAA,CAED,2BACC,SAAA,CAGD,oBACC,YAAA,CACA,qBAAA,CACA,UAAA,CAEA,gCACC,qBAAA\",\"sourcesContent\":[\"\\nbody {\\n\\tfont-size: var(--default-font-size);\\n}\\n\\n.login-box {\\n\\twidth: 300px;\\n\\n\\t&__link {\\n\\t\\tdisplay: block;\\n\\t\\tpadding: 1rem;\\n\\t\\tfont-size: var(--default-font-size);\\n\\t\\ttext-align: center;\\n\\t\\tfont-weight: normal !important;\\n\\t}\\n}\\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\\n.alternative-logins {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: 0.75rem;\\n\\n\\t.button-vue {\\n\\t\\tbox-sizing: border-box;\\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, \"\\nfieldset[data-v-4dc21d74] {\\n\\ttext-align: center;\\n}\\ninput[type=submit][data-v-4dc21d74] {\\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<LoginButton :loading=\\\"loading\\\"\\n\\t\\t\\t\\t:value=\\\"t('core', 'Reset password')\\\"\\n\\t\\t\\t\\t:value-loading=\\\"t('core', 'Resetting password')\\\" />\\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'\\nimport LoginButton from './LoginButton.vue'\\n\\nexport default {\\n\\tname: 'UpdatePassword',\\n\\tcomponents: {\\n\\t\\tLoginButton,\\n\\t},\\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},\\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","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.program(5, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":1},\"end\":{\"line\":10,\"column\":8}}})) != null ? stack1 : \"\");\n},\"2\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileTitle\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":2},\"end\":{\"line\":7,\"column\":9}}})) != null ? stack1 : \"\");\n},\"3\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t\t<a class=\\\"profile-link--avatar\\\" href=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1), depth0))\n + \"\\\">\\n\t\t\t\t<img src=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32\\\" class=\\\"avatar\\\" srcset=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32 1x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=64 2x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=128 4x\\\" alt=\\\"\\\">\\n\t\t\t</a>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t<img src=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32\\\" class=\\\"avatar\\\" srcset=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32 1x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=64 2x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=128 4x\\\" alt=\\\"\\\">\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.program(11, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":12,\"column\":1},\"end\":{\"line\":20,\"column\":8}}})) != null ? stack1 : \"\");\n},\"8\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileTitle\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":13,\"column\":2},\"end\":{\"line\":17,\"column\":9}}})) != null ? stack1 : \"\");\n},\"9\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t\t<a class=\\\"profile-link--avatar\\\" href=\\\"\"\n + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1), depth0))\n + \"\\\">\\n\t\t\t\t<div class=\\\"avatar\\\"></div>\\n\t\t\t</a>\\n\";\n},\"11\":function(container,depth0,helpers,partials,data) {\n return \"\t\t<div class=\\\"avatar\\\"></div>\\n\";\n},\"13\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileTitle\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(14, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":23,\"column\":1},\"end\":{\"line\":29,\"column\":8}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(16, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":30,\"column\":1},\"end\":{\"line\":34,\"column\":8}}})) != null ? stack1 : \"\");\n},\"14\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t<a class=\\\"body profile-link--full-name\\\" href=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1), depth0))\n + \"\\\">\\n\t\t\t<div class=\\\"full-name\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"fullName\") : stack1), depth0))\n + \"</div>\\n\t\t\t<div class=\\\"last-message\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"lastMessage\") : stack1), depth0))\n + \"</div>\\n\t\t\t<div class=\\\"email-address\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"emailAddresses\") : stack1), depth0))\n + \"</div>\\n\t\t</a>\\n\";\n},\"16\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t<a class=\\\"top-action\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"hyperlink\") : stack1), depth0))\n + \"\\\" title=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\" aria-label=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n\t\t\t<img src=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"icon\") : stack1), depth0))\n + \"\\\" alt=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n\t\t</a>\\n\";\n},\"18\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(19, data, 0),\"inverse\":container.program(21, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":35,\"column\":0},\"end\":{\"line\":50,\"column\":0}}})) != null ? stack1 : \"\");\n},\"19\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t<a class=\\\"body\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"hyperlink\") : stack1), depth0))\n + \"\\\">\\n\t\t<div class=\\\"full-name\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"fullName\") : stack1), depth0))\n + \"</div>\\n\t\t<div class=\\\"last-message\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"lastMessage\") : stack1), depth0))\n + \"</div>\\n\t\t<div class=\\\"email-address\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"emailAddresses\") : stack1), depth0))\n + \"</div>\\n\t</a>\\n \t<a class=\\\"top-action\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"hyperlink\") : stack1), depth0))\n + \"\\\" title=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n \t\t<img src=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"icon\") : stack1), depth0))\n + \"\\\" alt=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n\t</a>\\n\";\n},\"21\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t<div class=\\\"body\\\">\\n\t\t<div class=\\\"full-name\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"fullName\") : stack1), depth0))\n + \"</div>\\n\t\t<div class=\\\"last-message\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"lastMessage\") : stack1), depth0))\n + \"</div>\\n\t\t<div class=\\\"email-address\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"emailAddresses\") : stack1), depth0))\n + \"</div>\\n\t</div>\\n\";\n},\"23\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<a class=\\\"second-action\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"hyperlink\") : stack1), depth0))\n + \"\\\" aria-label=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\" title=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n\t<img src=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"icon\") : stack1), depth0))\n + \"\\\" alt=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n</a>\\n\";\n},\"25\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t<button class=\\\"other-actions icon-more\\\"></button>\\n\t<div class=\\\"menu popovermenu\\\">\\n\t\t<ul>\\n\"\n + ((stack1 = lookupProperty(helpers,\"each\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"actions\") : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(26, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":60,\"column\":3},\"end\":{\"line\":67,\"column\":12}}})) != null ? stack1 : \"\")\n + \"\t\t</ul>\\n\t</div>\\n\";\n},\"26\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t\t<li>\\n\t\t\t\t<a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"hyperlink\") || (depth0 != null ? lookupProperty(depth0,\"hyperlink\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"hyperlink\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":62,\"column\":13},\"end\":{\"line\":62,\"column\":26}}}) : helper)))\n + \"\\\">\\n\t\t\t\t\t<img src=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"icon\") || (depth0 != null ? lookupProperty(depth0,\"icon\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"icon\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":63,\"column\":15},\"end\":{\"line\":63,\"column\":23}}}) : helper)))\n + \"\\\" alt=\\\"\\\">\\n\t\t\t\t\t<span>\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"title\") || (depth0 != null ? lookupProperty(depth0,\"title\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"title\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":64,\"column\":11},\"end\":{\"line\":64,\"column\":20}}}) : helper)))\n + \"</span>\\n\t\t\t\t</a>\\n\t\t\t</li>\\n\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(7, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":21,\"column\":7}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(13, data, 0),\"inverse\":container.program(18, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":22,\"column\":0},\"end\":{\"line\":50,\"column\":7}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"hasTwoActions\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(23, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":51,\"column\":0},\"end\":{\"line\":55,\"column\":7}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"hasManyActions\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(25, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":56,\"column\":0},\"end\":{\"line\":70,\"column\":7}}})) != null ? stack1 : \"\");\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-search\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"couldNotLoadText\") || (depth0 != null ? lookupProperty(depth0,\"couldNotLoadText\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"couldNotLoadText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":5},\"end\":{\"line\":3,\"column\":25}}}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-search\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"noContactsFoundText\") || (depth0 != null ? lookupProperty(depth0,\"noContactsFoundText\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"noContactsFoundText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":5},\"end\":{\"line\":4,\"column\":28}}}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"footer\\\"><a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"contactsAppURL\") || (depth0 != null ? lookupProperty(depth0,\"contactsAppURL\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppURL\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":29},\"end\":{\"line\":9,\"column\":47}}}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"showAllContactsText\") || (depth0 != null ? lookupProperty(depth0,\"showAllContactsText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"showAllContactsText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":49},\"end\":{\"line\":9,\"column\":72}}}) : helper)))\n + \"</a></div>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"canInstallApp\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":10,\"column\":0},\"end\":{\"line\":12,\"column\":0}}})) != null ? stack1 : \"\");\n},\"6\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"footer\\\"><a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"contactsAppMgmtURL\") || (depth0 != null ? lookupProperty(depth0,\"contactsAppMgmtURL\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppMgmtURL\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":29},\"end\":{\"line\":11,\"column\":51}}}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"contactsAppMgmtText\") || (depth0 != null ? lookupProperty(depth0,\"contactsAppMgmtText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppMgmtText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":53},\"end\":{\"line\":11,\"column\":76}}}) : helper)))\n + \"</a></div>\\n\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contacts\") : depth0)) != null ? lookupProperty(stack1,\"length\") : stack1),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":6,\"column\":11}}})) != null ? stack1 : \"\")\n + \"<div id=\\\"contactsmenu-contacts\\\"></div>\\n\"\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"contactsAppEnabled\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.program(5, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":8,\"column\":0},\"end\":{\"line\":12,\"column\":7}}})) != null ? stack1 : \"\");\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-loading\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"loadingText\") || (depth0 != null ? lookupProperty(depth0,\"loadingText\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"loadingText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":5},\"end\":{\"line\":3,\"column\":20}}}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<label class=\\\"hidden-visually\\\" for=\\\"contactsmenu-search\\\">\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"searchContactsText\") || (depth0 != null ? lookupProperty(depth0,\"searchContactsText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchContactsText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":57},\"end\":{\"line\":1,\"column\":79}}}) : helper)))\n + \"</label>\\n<input id=\\\"contactsmenu-search\\\" type=\\\"search\\\" placeholder=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"searchContactsText\") || (depth0 != null ? lookupProperty(depth0,\"searchContactsText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchContactsText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":59},\"end\":{\"line\":2,\"column\":81}}}) : helper)))\n + \"\\\" value=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"searchTerm\") || (depth0 != null ? lookupProperty(depth0,\"searchTerm\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchTerm\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":90},\"end\":{\"line\":2,\"column\":104}}}) : helper)))\n + \"\\\">\\n<div class=\\\"content\\\">\\n</div>\\n\";\n},\"useData\":true});","var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 76225,\n\t\"./bn-bd.js\": 76225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-il\": 47207,\n\t\"./en-il.js\": 47207,\n\t\"./en-in\": 44175,\n\t\"./en-in.js\": 44175,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./en-sg\": 31662,\n\t\"./en-sg.js\": 31662,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-mx\": 96112,\n\t\"./es-mx.js\": 96112,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fil\": 42549,\n\t\"./fil.js\": 42549,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 94470,\n\t\"./fr-ca\": 63049,\n\t\"./fr-ca.js\": 63049,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 94470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 29295,\n\t\"./ga.js\": 29295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-deva\": 27884,\n\t\"./gom-deva.js\": 27884,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 30094,\n\t\"./hi.js\": 30094,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it-ch\": 10150,\n\t\"./it-ch.js\": 10150,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ku\": 1408,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./oc-lnc\": 92135,\n\t\"./oc-lnc.js\": 92135,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./tg\": 27321,\n\t\"./tg.js\": 27321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 19005,\n\t\"./tk.js\": 19005,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-mo\": 99807,\n\t\"./zh-mo.js\": 99807,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 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));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], function() { return __webpack_require__(39977); })\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","tagName","render","self","forEach","contact","item","ContactsListItemView","append","on","_onChildActionMenuToggle","push","$src","view","className","_template","_model","_actionMenuShown","events","contactTemplate","require","template","_onOtherActionMenuOpened","delegateEvents","imageplaceholder","_onToggleActionsMenu","is","ContactsMenuView","_loadingTemplate","_errorTemplate","_contentTemplate","_contactsTemplate","_contacts","_searchTerm","templates","loading","menu","list","_onSearch","e","searchTerm","val","loadingTemplate","errorTemplate","couldNotLoadText","contentTemplate","searchContactsText","contactsTemplate","noContactsFoundText","showAllContactsText","contactsAppMgmtText","showLoading","loadingText","showError","showContacts","viewData","contacts","contactsAppEnabled","contactsAppURL","canInstallApp","contactsAppMgmtURL","searchVal","focus","ContactsMenu","_view","_contactsPromise","el","loadContacts","_getContacts","Promise","resolve","filter","term","catch","rawUid","document","getElementsByTagName","getAttribute","displayName","currentUser","Search","isA11yActivation","event","global","emit","token","Dialogs","YES_NO_BUTTONS","OK_BUTTONS","FILEPICKER_TYPE_CHOOSE","FILEPICKER_TYPE_MOVE","FILEPICKER_TYPE_COPY","FILEPICKER_TYPE_COPY_MOVE","FILEPICKER_TYPE_CUSTOM","dialogsCounter","alert","title","modal","message","OK_BUTTON","info","confirm","confirmDestructive","buttons","confirmHtml","prompt","name","password","_getMessageTemplate","$tmpl","dialogName","dialogId","$dlg","octemplate","dialog_name","input","attr","label","buttonlist","click","ocdialog","defaultButton","closeOnEscape","close","filepicker","multiselect","mimetypeFilter","path","sortField","sortOrder","emptyText","newText","filesClient","OCA","Sharing","PublicApp","fileList","filelist","allowDirectoryChooser","_getFilePickerTemplate","$filePicker","emptytext","newtext","nameCol","sizeCol","modifiedCol","target","prepend","$showGridView","_onGridviewChange","_getGridSettings","newButton","stopImmediatePropagation","preventDefault","$input","tooltip","submit","newName","lastPos","lastIndexOf","selectRange","$form","$submit","stopPropagation","filename","trimmedName","trim","match","isFileNameValid","file","escape","placement","checkInput","newname","createDirectory","always","_fillFilePicker","ready","$fileListHeader","$filelist","$filelistContainer","$dirTree","_handleTreeListSelect","_handlePickerClick","dir","currentTarget","functionToCall","returnType","datapath","index","element","selectedName","button","width","height","style","remove","buttonEnableDisable","closest","prop","fail","content","dialogType","allowHtml","escapeFunction","cancel","classes","confirmClasses","closeCallback","_fileexistsshown","fileexists","original","replacement","controller","dialogDeferred","resampleHermite","canvas","W","H","W2","H2","Math","round","img","getContext","getImageData","img2","data2","ratio_w","ratio_h","ratio_w_half","ceil","ratio_h_half","j","i","x2","weight","weights","weights_alpha","gx_r","gx_g","gx_b","gx_a","center_y","yy","floor","dy","abs","center_x","w0","xx","dx","w","sqrt","clearRect","max","putImageData","addConflict","$conflicts","$conflict","clone","$originalDiv","$replacementDiv","size","mtime","lastModified","directory","urlSpec","x","y","c","etag","forceIcon","previewpath","Files","generatePreviewUrl","replace","css","FileReader","reader","onload","blob","Blob","URL","webkitURL","originalUrl","createObjectURL","image","Image","src","createElement","min","drawImage","toDataURL","readAsArrayBuffer","reject","getCroppedPreview","checkboxId","count","n","parent","children","_getFileExistsTemplate","allnewfiles","allexistingfiles","why","what","onCancel","onContinue","closeButton","$primaryButton","updatePrimaryButton","checkedCount","$checkbox","promise","gridview","toggleClass","isGridView","hasClass","defer","$filePickerTemplate","tmpl","$listTmpl","detach","jqXHR","$messageTemplate","$fileexistsTemplate","empty","advancedFilter","getFolderContents","files","_changeButtonsText","mimetype","showHiddenInput","getElementById","startsWith","comparator","Comparators","fileInfo1","fileInfo2","sort","file1","file2","isFavorite","fileInfo","tags","_fillSlug","idx","entry","simpleSize","sizeColor","isEncrypted","icon","parseInt","pow","filename1","filename2","date","previewUrl","addButton","$template","paths","prependTo","getOcDialog","$element","ctrlKey","copyText","folder","moveText","eq","getToken","setToken","newToken","OCEventSource","joinChar","dataStr","typelessListeners","closed","listeners","encodeURIComponent","useFallBack","EventSource","iframeId","iframeCount","fallBackSources","iframe","source","onmessage","parse","listen","fallBackCallBack","done","lastLength","addEventListener","currentMenu","currentMenuToggle","hideMenus","complete","lastMenu","slideUp","apply","arguments","isAdmin","_oc_isadmin","load","loadTranslations","register","_unregister","unregister","translate","translatePlural","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","b","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","a","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","generateFilePath","addStyle","createStyleSheet","appSettings","args","appid","scriptName","cache","settings","popup","arrowclass","loadJS","scriptname","jqxhr","appswebroots","dialogs","getCurrentUser","uid","isUserAdmin","L10N","_ajaxConnectionLostHandler","_processAjaxError","statusText","timer","setInterval","clearInterval","registerXHRForErrorProcessing","readyState","getCapabilities","realGetCapabilities","registerMenu","$toggle","$menuEl","toggle","headerMenu","isClickableElement","slideToggle","showMenu","unregisterMenu","off","basename","encodePath","dirname","isSamePath","joinPaths","getHost","host","getHostName","hostname","getPort","port","getProtocol","protocol","getCanonicalLocale","getLocale","getLanguage","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","ArrowRight","NcButton","default","valueLoading","required","invertedColors","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","_c","_self","$event","$emit","scopedSlots","_u","fn","staticClass","proxy","_v","_s","LoginButton","NcPasswordField","NcTextField","NcNoteCard","username","redirectUrl","errors","messages","throttleDelay","autoCompleteAllowed","directLogin","timezone","timezoneOffset","headline","productName","user","computed","isError","errorLabel","apacheAuthFailed","internalException","invalidPassword","userDisabled","loadingIcon","loginActionUrl","mounted","methods","updateUsername","ref","_e","_l","class","staticStyle","domProps","shake","NoValidCredentials","InformationIcon","LockOpenIcon","isHttps","isLocalhost","hasPublicKeyCredential","validCredentials","authenticate","getAuthenticationData","loginName","Axios","resp","publicKey","sign","rawId","authenticatorData","clientDataJSON","signature","userHandle","completeAuthentication","directives","rawName","expression","composing","resetPasswordLink","watch","resetPasswordTarget","encrypted","proceed","Array","isArray","_i","$$a","$$el","$$c","checked","$$i","concat","slice","warning","clear","LoginForm","PasswordLessLoginForm","ResetPassword","UpdatePassword","passwordlessLogin","resetPassword","canResetPassword","resetPasswordUser","hasPasswordless","countAlternativeLogins","alternativeLogins","hideLoginForm","passwordResetFinished","alternativeLogin","L10n","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__","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","every","splice","r","getter","__esModule","d","definition","defineProperty","enumerable","globalThis","Function","obj","Symbol","toStringTag","nmd","baseURI","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","nc","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file +{"version":3,"file":"core-login.js?v=b9a6004583ef314d39b5","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/core/src/OC/legacy-loader.js","webpack:///nextcloud/core/src/OC/notification.js","webpack:///nextcloud/core/src/OC/xhr-error.js","webpack:///nextcloud/core/src/OC/apps.js","webpack:///nextcloud/core/src/OCP/appconfig.js","webpack:///nextcloud/core/src/OC/appconfig.js","webpack:///nextcloud/core/src/OC/appswebroots.js","webpack:///nextcloud/core/src/OC/backbone-webdav.js","webpack:///nextcloud/core/src/OC/backbone.js","webpack:///nextcloud/core/src/OC/config.js","webpack:///nextcloud/core/src/OC/contactsmenu.js","webpack:///nextcloud/core/src/OC/currentuser.js","webpack:///nextcloud/core/src/OCA/search.js","webpack:///nextcloud/core/src/OCA/index.js","webpack:///nextcloud/core/src/Util/a11y.js","webpack:///nextcloud/core/src/OC/dialogs.js","webpack:///nextcloud/core/src/OC/requesttoken.js","webpack:///nextcloud/core/src/OC/eventsource.js","webpack:///nextcloud/core/src/OC/menu.js","webpack:///nextcloud/core/src/OC/constants.js","webpack:///nextcloud/core/src/OC/admin.js","webpack:///nextcloud/core/src/OC/l10n.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?ae59","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?3136","webpack://nextcloud/./core/src/components/login/LoginButton.vue?14f0","webpack://nextcloud/./core/src/components/login/LoginButton.vue?82aa","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?a91a","webpack://nextcloud/./core/src/components/login/LoginForm.vue?a678","webpack://nextcloud/./core/src/components/login/LoginForm.vue?4366","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?1a33","webpack://nextcloud/./core/src/components/login/PasswordLessLoginForm.vue?09eb","webpack://nextcloud/./core/src/components/login/PasswordLessLoginForm.vue?16ec","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?703c","webpack://nextcloud/./core/src/components/login/ResetPassword.vue?9d75","webpack://nextcloud/./core/src/components/login/ResetPassword.vue?7cf3","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?4361","webpack://nextcloud/./core/src/components/login/UpdatePassword.vue?30ca","webpack://nextcloud/./core/src/components/login/UpdatePassword.vue?1c8f","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?0fcd","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/LoginButton.vue?vue&type=style&index=0&id=756414a8&prod&lang=scss&scoped=true&","webpack:///nextcloud/core/src/components/login/LoginForm.vue?vue&type=style&index=0&id=5bd351bc&prod&lang=scss&scoped=true&","webpack:///nextcloud/core/src/components/login/PasswordLessLoginForm.vue?vue&type=style&index=0&id=20256748&prod&lang=scss&scoped=true&","webpack:///nextcloud/core/src/components/login/ResetPassword.vue?vue&type=style&index=0&id=27cabc60&prod&lang=scss&scoped=true&","webpack:///nextcloud/core/src/views/Login.vue?vue&type=style&index=0&id=7b955242&prod&lang=scss&","webpack:///nextcloud/core/src/components/login/UpdatePassword.vue?vue&type=style&index=0&id=4dc21d74&prod&scoped=true&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/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/** @typedef {import('jquery')} jQuery */\nimport $ from 'jquery'\nimport { generateFilePath } from '@nextcloud/router'\n\nconst loadedScripts = {}\nconst loadedStyles = []\n\n/**\n * Load a script for the server and load it. If the script is already loaded,\n * the event handler will be called directly\n *\n * @param {string} app the app id to which the script belongs\n * @param {string} script the filename of the script\n * @param {Function} ready event handler to be called when the script is loaded\n * @return {jQuery.Deferred}\n * @deprecated 16.0.0 Use OCP.Loader.loadScript\n */\nexport const addScript = (app, script, ready) => {\n\tconsole.warn('OC.addScript is deprecated, use OCP.Loader.loadScript instead')\n\n\tlet deferred\n\tconst path = generateFilePath(app, 'js', script + '.js')\n\tif (!loadedScripts[path]) {\n\t\tdeferred = $.Deferred()\n\t\t$.getScript(path, () => deferred.resolve())\n\t\tloadedScripts[path] = deferred\n\t} else {\n\t\tif (ready) {\n\t\t\tready()\n\t\t}\n\t}\n\treturn loadedScripts[path]\n}\n\n/**\n * Loads a CSS file\n *\n * @param {string} app the app id to which the css style belongs\n * @param {string} style the filename of the css file\n * @deprecated 16.0.0 Use OCP.Loader.loadStylesheet\n */\nexport const addStyle = (app, style) => {\n\tconsole.warn('OC.addStyle is deprecated, use OCP.Loader.loadStylesheet instead')\n\n\tconst path = generateFilePath(app, 'css', style + '.css')\n\tif (loadedStyles.indexOf(path) === -1) {\n\t\tloadedStyles.push(path)\n\t\tif (document.createStyleSheet) {\n\t\t\tdocument.createStyleSheet(path)\n\t\t} else {\n\t\t\tstyle = $('<link rel=\"stylesheet\" type=\"text/css\" href=\"' + path + '\"/>')\n\t\t\t$('head').append(style)\n\t\t}\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author npmbuildbot[bot] \"npmbuildbot[bot]@users.noreply.github.com\"\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\n/** @typedef {import('jquery')} jQuery */\nimport $ from 'jquery'\nimport { showMessage, TOAST_DEFAULT_TIMEOUT, TOAST_PERMANENT_TIMEOUT } from '@nextcloud/dialogs'\n\n/**\n * @todo Write documentation\n * @deprecated 17.0.0 use the `@nextcloud/dialogs` package instead\n * @namespace OC.Notification\n */\nexport default {\n\n\tupdatableNotification: null,\n\n\tgetDefaultNotificationFunction: null,\n\n\t/**\n\t * @param {Function} callback callback function\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tsetDefault(callback) {\n\t\tthis.getDefaultNotificationFunction = callback\n\t},\n\n\t/**\n\t * Hides a notification.\n\t *\n\t * If a row is given, only hide that one.\n\t * If no row is given, hide all notifications.\n\t *\n\t * @param {jQuery} [$row] notification row\n\t * @param {Function} [callback] callback\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\thide($row, callback) {\n\t\tif (_.isFunction($row)) {\n\t\t\t// first arg is the callback\n\t\t\tcallback = $row\n\t\t\t$row = undefined\n\t\t}\n\n\t\tif (!$row) {\n\t\t\tconsole.error('Missing argument $row in OC.Notification.hide() call, caller needs to be adjusted to only dismiss its own notification')\n\t\t\treturn\n\t\t}\n\n\t\t// remove the row directly\n\t\t$row.each(function() {\n\t\t\tif ($(this)[0].toastify) {\n\t\t\t\t$(this)[0].toastify.hideToast()\n\t\t\t} else {\n\t\t\t\tconsole.error('cannot hide toast because object is not set')\n\t\t\t}\n\t\t\tif (this === this.updatableNotification) {\n\t\t\t\tthis.updatableNotification = null\n\t\t\t}\n\t\t})\n\t\tif (callback) {\n\t\t\tcallback.call()\n\t\t}\n\t\tif (this.getDefaultNotificationFunction) {\n\t\t\tthis.getDefaultNotificationFunction()\n\t\t}\n\t},\n\n\t/**\n\t * Shows a notification as HTML without being sanitized before.\n\t * If you pass unsanitized user input this may lead to a XSS vulnerability.\n\t * Consider using show() instead of showHTML()\n\t *\n\t * @param {string} html Message to display\n\t * @param {object} [options] options\n\t * @param {string} [options.type] notification type\n\t * @param {number} [options.timeout=0] timeout value, defaults to 0 (permanent)\n\t * @return {jQuery} jQuery element for notification row\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshowHtml(html, options) {\n\t\toptions = options || {}\n\t\toptions.isHTML = true\n\t\toptions.timeout = (!options.timeout) ? TOAST_PERMANENT_TIMEOUT : options.timeout\n\t\tconst toast = showMessage(html, options)\n\t\ttoast.toastElement.toastify = toast\n\t\treturn $(toast.toastElement)\n\t},\n\n\t/**\n\t * Shows a sanitized notification\n\t *\n\t * @param {string} text Message to display\n\t * @param {object} [options] options\n\t * @param {string} [options.type] notification type\n\t * @param {number} [options.timeout=0] timeout value, defaults to 0 (permanent)\n\t * @return {jQuery} jQuery element for notification row\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshow(text, options) {\n\t\tconst escapeHTML = function(text) {\n\t\t\treturn text.toString()\n\t\t\t\t.split('&').join('&')\n\t\t\t\t.split('<').join('<')\n\t\t\t\t.split('>').join('>')\n\t\t\t\t.split('\"').join('"')\n\t\t\t\t.split('\\'').join(''')\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/** @type {string} */\n\ttagName: 'ul',\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 {string} */\n\ttagName: 'li',\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\treturn this\n\t},\n\n\t/**\n\t * Toggle the visibility of the action popover menu\n\t *\n\t * @private\n\t * @returns {undefined}\n\t */\n\t_onToggleActionsMenu: function() {\n\t\tthis._actionMenuShown = !this._actionMenuShown\n\t\tif (this._actionMenuShown) {\n\t\t\tthis.$('.menu').show()\n\t\t} else {\n\t\t\tthis.$('.menu').hide()\n\t\t}\n\t\tthis.trigger('toggle:actionmenu', this.$el)\n\t},\n\n\t/**\n\t * @private\n\t * @argument {jQuery} $src\n\t * @returns {undefined}\n\t */\n\t_onOtherActionMenuOpened: function($src) {\n\t\tif (this.$el.is($src)) {\n\t\t\t// Ignore\n\t\t\treturn\n\t\t}\n\t\tthis._actionMenuShown = false\n\t\tthis.$('.menu').hide()\n\t}\n})\n\n/**\n * @class ContactsMenuView\n * @private\n */\nconst ContactsMenuView = View.extend({\n\n\t/** @type {undefined|function} */\n\t_loadingTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_errorTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_contentTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_contactsTemplate: undefined,\n\n\t/** @type {undefined|ContactCollection} */\n\t_contacts: undefined,\n\n\t/** @type {string} */\n\t_searchTerm: '',\n\n\tevents: {\n\t\t'input #contactsmenu-search': '_onSearch'\n\t},\n\n\ttemplates: {\n\t\tloading: require('./contactsmenu/loading.handlebars'),\n\t\terror: require('./contactsmenu/error.handlebars'),\n\t\tmenu: require('./contactsmenu/menu.handlebars'),\n\t\tlist: require('./contactsmenu/list.handlebars')\n\t},\n\n\t/**\n\t * @returns {undefined}\n\t */\n\t_onSearch: _.debounce(function(e) {\n\t\tvar searchTerm = this.$('#contactsmenu-search').val()\n\t\t// IE11 triggers an 'input' event after the view has been rendered\n\t\t// resulting in an endless loading loop. To prevent this, we remember\n\t\t// the last search term to savely ignore some events\n\t\t// See https://github.com/nextcloud/server/issues/5281\n\t\tif (searchTerm !== this._searchTerm) {\n\t\t\tthis.trigger('search', this.$('#contactsmenu-search').val())\n\t\t\tthis._searchTerm = searchTerm\n\t\t}\n\t}, 700),\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tloadingTemplate: function(data) {\n\t\treturn this.templates.loading(data)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\terrorTemplate: function(data) {\n\t\treturn this.templates.error(\n\t\t\t_.extend({\n\t\t\t\tcouldNotLoadText: t('core', 'Could not load your contacts')\n\t\t\t}, data)\n\t\t)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tcontentTemplate: function(data) {\n\t\treturn this.templates.menu(\n\t\t\t_.extend({\n\t\t\t\tsearchContactsText: t('core', 'Search contacts …')\n\t\t\t}, data)\n\t\t)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tcontactsTemplate: function(data) {\n\t\treturn this.templates.list(\n\t\t\t_.extend({\n\t\t\t\tnoContactsFoundText: t('core', 'No contacts found'),\n\t\t\t\tshowAllContactsText: t('core', 'Show all contacts …'),\n\t\t\t\tcontactsAppMgmtText: t('core', 'Install the Contacts app')\n\t\t\t}, data)\n\t\t)\n\t},\n\n\t/**\n\t * @param {object} options\n\t * @returns {undefined}\n\t */\n\tinitialize: function(options) {\n\t\tthis.options = options\n\t},\n\n\t/**\n\t * @param {string} text\n\t * @returns {undefined}\n\t */\n\tshowLoading: function(text) {\n\t\tthis.render()\n\t\tthis._contacts = undefined\n\t\tthis.$('.content').html(this.loadingTemplate({\n\t\t\tloadingText: text\n\t\t}))\n\t},\n\n\t/**\n\t * @returns {undefined}\n\t */\n\tshowError: function() {\n\t\tthis.render()\n\t\tthis._contacts = undefined\n\t\tthis.$('.content').html(this.errorTemplate())\n\t},\n\n\t/**\n\t * @param {object} viewData\n\t * @param {string} searchTerm\n\t * @returns {undefined}\n\t */\n\tshowContacts: function(viewData, searchTerm) {\n\t\tthis._contacts = viewData.contacts\n\t\tthis.render({\n\t\t\tcontacts: viewData.contacts\n\t\t})\n\n\t\tvar list = new ContactsListView({\n\t\t\tcollection: viewData.contacts\n\t\t})\n\t\tlist.render()\n\t\tthis.$('.content').html(this.contactsTemplate({\n\t\t\tcontacts: viewData.contacts,\n\t\t\tsearchTerm: searchTerm,\n\t\t\tcontactsAppEnabled: viewData.contactsAppEnabled,\n\t\t\tcontactsAppURL: OC.generateUrl('/apps/contacts'),\n\t\t\tcanInstallApp: OC.isUserAdmin(),\n\t\t\tcontactsAppMgmtURL: OC.generateUrl('/settings/apps/social/contacts')\n\t\t}))\n\t\tthis.$('#contactsmenu-contacts').html(list.$el)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {self}\n\t */\n\trender: function(data) {\n\t\tvar searchVal = this.$('#contactsmenu-search').val()\n\t\tthis.$el.html(this.contentTemplate(data))\n\n\t\t// Focus search\n\t\tthis.$('#contactsmenu-search').val(searchVal)\n\t\tthis.$('#contactsmenu-search').focus()\n\t\treturn this\n\t}\n\n})\n\n/**\n * @param {Object} options\n * @param {string} options.el\n * @class ContactsMenu\n * @memberOf OC\n */\nconst ContactsMenu = function(options) {\n\tthis.initialize(options)\n}\n\nContactsMenu.prototype = {\n\t/** @type {string} */\n\t$el: undefined,\n\n\t/** @type {ContactsMenuView} */\n\t_view: undefined,\n\n\t/** @type {Promise} */\n\t_contactsPromise: undefined,\n\n\t/**\n\t * @param {Object} options\n\t * @param {string} options.el - the selector of the element to render the menu in\n\t * @returns {undefined}\n\t */\n\tinitialize: function(options) {\n\t\tthis.$el = $(options.el)\n\n\t\tthis._view = new ContactsMenuView({\n\t\t\tel: this.$el,\n\t\t})\n\n\t\tthis._view.on('search', function(searchTerm) {\n\t\t\tthis.loadContacts(searchTerm)\n\t\t}, this)\n\t},\n\n\t/**\n\t * @private\n\t * @param {string|undefined} searchTerm\n\t * @returns {Promise}\n\t */\n\t_getContacts: function(searchTerm) {\n\t\tvar url = OC.generateUrl('/contactsmenu/contacts')\n\t\treturn Promise.resolve($.ajax(url, {\n\t\t\tmethod: 'POST',\n\t\t\tdata: {\n\t\t\t\tfilter: searchTerm\n\t\t\t}\n\t\t}))\n\t},\n\n\t/**\n\t * @param {string|undefined} searchTerm\n\t * @returns {undefined}\n\t */\n\tloadContacts: function(searchTerm) {\n\t\tvar self = this\n\n\t\tif (!self._contactsPromise) {\n\t\t\tself._contactsPromise = self._getContacts(searchTerm)\n\t\t}\n\n\t\tif (_.isUndefined(searchTerm) || searchTerm === '') {\n\t\t\tself._view.showLoading(t('core', 'Loading your contacts …'))\n\t\t} else {\n\t\t\tself._view.showLoading(t('core', 'Looking for {term} …', {\n\t\t\t\tterm: searchTerm\n\t\t\t}))\n\t\t}\n\t\treturn self._contactsPromise.then(function(data) {\n\t\t\t// Convert contact entries to Backbone collection\n\t\t\tdata.contacts = new ContactCollection(data.contacts)\n\n\t\t\tself._view.showContacts(data, searchTerm)\n\t\t}, function(e) {\n\t\t\tself._view.showError()\n\t\t\tconsole.error('There was an error loading your contacts', e)\n\t\t}).then(function() {\n\t\t\t// Delete promise, so that contacts are fetched again when the\n\t\t\t// menu is opened the next time.\n\t\t\tdelete self._contactsPromise\n\t\t}).catch(console.error.bind(this))\n\t}\n}\n\nexport default ContactsMenu\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Joas Schilling <coding@schilljs.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst rawUid = document\n\t.getElementsByTagName('head')[0]\n\t.getAttribute('data-user')\nconst displayName = document\n\t.getElementsByTagName('head')[0]\n\t.getAttribute('data-user-displayname')\n\nexport const currentUser = rawUid !== undefined ? rawUid : false\n\nexport const getCurrentUser = () => {\n\treturn {\n\t\tuid: currentUser,\n\t\tdisplayName,\n\t}\n}\n","/**\n * @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class Search {\n\n\t/**\n\t * @deprecated 20.0.0, will be removed in Nextcloud 22\n\t */\n\tconstructor() {\n\t\tconsole.warn('OCA.Search is deprecated. Please use the unified search API instead')\n\t}\n\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Search from './search'\n\n/**\n * Namespace for apps\n *\n * @namespace OCA\n */\nexport default {\n\t/**\n\t * @deprecated 20.0.0, will be removed in Nextcloud 22\n\t */\n\tSearch,\n}\n","/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/**\n * Return whether the DOM event is an accessible mouse or keyboard element activation\n *\n * @param {Event} event DOM event\n *\n * @return {boolean}\n */\nexport const isA11yActivation = (event) => {\n\tif (event.type === 'click') {\n\t\treturn true\n\t}\n\tif (event.type === 'keydown' && event.key === 'Enter') {\n\t\treturn true\n\t}\n\treturn false\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author Bartek Przybylski <bart.p.pl@gmail.com>\n * @author Christopher Schäpers <kondou@ts.unde.re>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author Daniel Kesselberg <mail@danielkesselberg.de>\n * @author Florian Schunk <florian.schunk@rwth-aachen.de>\n * @author Gary Kim <gary@garykim.dev>\n * @author Hendrik Leppelsack <hendrik@leppelsack.de>\n * @author Jan-Christoph Borchardt <hey@jancborchardt.net>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Jörn Friedrich Dreyer <jfd@butonic.de>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Loïc Hermann <loic.hermann@sciam.fr>\n * @author Morris Jobke <hey@morrisjobke.de>\n * @author Olivier Paroz <github@oparoz.com>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Sujith Haridasan <Sujith_Haridasan@mentor.com>\n * @author Thomas Citharel <nextcloud@tcit.fr>\n * @author Thomas Müller <thomas.mueller@tmit.eu>\n * @author Thomas Tanghus <thomas@tanghus.net>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport _ from 'underscore'\nimport $ from 'jquery'\n\nimport OC from './index'\nimport OCA from '../OCA/index'\nimport { isA11yActivation } from '../Util/a11y'\n\n/**\n * this class to ease the usage of jquery dialogs\n */\nconst Dialogs = {\n\t// dialog button types\n\tYES_NO_BUTTONS: 70,\n\tOK_BUTTONS: 71,\n\n\tFILEPICKER_TYPE_CHOOSE: 1,\n\tFILEPICKER_TYPE_MOVE: 2,\n\tFILEPICKER_TYPE_COPY: 3,\n\tFILEPICKER_TYPE_COPY_MOVE: 4,\n\tFILEPICKER_TYPE_CUSTOM: 5,\n\n\t// used to name each dialog\n\tdialogsCounter: 0,\n\n\t/**\n\t * displays alert dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK\n\t * @param {boolean} [modal] make the dialog modal\n\t */\n\talert: function(text, title, callback, modal) {\n\t\tthis.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'alert',\n\t\t\tDialogs.OK_BUTTON,\n\t\t\tcallback,\n\t\t\tmodal\n\t\t)\n\t},\n\t/**\n\t * displays info dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK\n\t * @param {boolean} [modal] make the dialog modal\n\t */\n\tinfo: function(text, title, callback, modal) {\n\t\tthis.message(text, title, 'info', Dialogs.OK_BUTTON, callback, modal)\n\t},\n\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirm: function(text, title, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'notice',\n\t\t\tDialogs.YES_NO_BUTTONS,\n\t\t\tcallback,\n\t\t\tmodal\n\t\t)\n\t},\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {(number|{type: number, confirm: string, cancel: string, confirmClasses: string})} buttons text content of buttons\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirmDestructive: function(text, title, buttons, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'none',\n\t\t\tbuttons,\n\t\t\tcallback,\n\t\t\tmodal === undefined ? true : modal\n\t\t)\n\t},\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirmHtml: function(text, title, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'notice',\n\t\t\tDialogs.YES_NO_BUTTONS,\n\t\t\tcallback,\n\t\t\tmodal,\n\t\t\ttrue\n\t\t)\n\t},\n\t/**\n\t * displays prompt dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @param {string} name name of the input field\n\t * @param {boolean} password whether the input should be a password input\n\t * @returns {Promise}\n\t */\n\tprompt: function(text, title, callback, modal, name, password) {\n\t\treturn $.when(this._getMessageTemplate()).then(function($tmpl) {\n\t\t\tvar dialogName = 'oc-dialog-' + Dialogs.dialogsCounter + '-content'\n\t\t\tvar dialogId = '#' + dialogName\n\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\tmessage: text,\n\t\t\t\ttype: 'notice'\n\t\t\t})\n\t\t\tvar input = $('<input/>')\n\t\t\tinput.attr('type', password ? 'password' : 'text').attr('id', dialogName + '-input').attr('placeholder', name)\n\t\t\tvar label = $('<label/>').attr('for', dialogName + '-input').text(name + ': ')\n\t\t\t$dlg.append(label)\n\t\t\t$dlg.append(input)\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false\n\t\t\t}\n\t\t\t$('body').append($dlg)\n\n\t\t\t// wrap callback in _.once():\n\t\t\t// only call callback once and not twice (button handler and close\n\t\t\t// event) but call it for the close event, if ESC or the x is hit\n\t\t\tif (callback !== undefined) {\n\t\t\t\tcallback = _.once(callback)\n\t\t\t}\n\n\t\t\tvar buttonlist = [{\n\t\t\t\ttext: t('core', 'No'),\n\t\t\t\tclick: function() {\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(false, input.val())\n\t\t\t\t\t}\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\ttext: t('core', 'Yes'),\n\t\t\t\tclick: function() {\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(true, input.val())\n\t\t\t\t\t}\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t},\n\t\t\t\tdefaultButton: true\n\t\t\t}]\n\n\t\t\t$(dialogId).ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist,\n\t\t\t\tclose: function() {\n\t\t\t\t\t// callback is already fired if Yes/No is clicked directly\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(false, input.val())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\tinput.focus()\n\t\t\tDialogs.dialogsCounter++\n\t\t})\n\t},\n\t/**\n\t * show a file picker to pick a file from\n\t *\n\t * In order to pick several types of mime types they need to be passed as an\n\t * array of strings.\n\t *\n\t * When no mime type filter is given only files can be selected. In order to\n\t * be able to select both files and folders \"['*', 'httpd/unix-directory']\"\n\t * should be used instead.\n\t *\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses Choose\n\t * @param {boolean} [multiselect] whether it should be possible to select multiple files\n\t * @param {string[]} [mimetypeFilter] mimetype to filter by - directories will always be included\n\t * @param {boolean} [modal] make the dialog modal\n\t * @param {string} [type] Type of file picker : Choose, copy, move, copy and move\n\t * @param {string} [path] path to the folder that the the file can be picket from\n\t * @param {Object} [options] additonal options that need to be set\n\t * @param {Function} [options.filter] filter function for advanced filtering\n\t */\n\tfilepicker: function(title, callback, multiselect, mimetypeFilter, modal, type, path, options) {\n\t\tvar self = this\n\n\t\tthis.filepicker.sortField = 'name'\n\t\tthis.filepicker.sortOrder = 'asc'\n\t\t// avoid opening the picker twice\n\t\tif (this.filepicker.loading) {\n\t\t\treturn\n\t\t}\n\n\t\tif (type === undefined) {\n\t\t\ttype = this.FILEPICKER_TYPE_CHOOSE\n\t\t}\n\n\t\tvar emptyText = t('core', 'No files in here')\n\t\tvar newText = t('files', 'New folder')\n\t\tif (type === this.FILEPICKER_TYPE_COPY || type === this.FILEPICKER_TYPE_MOVE || type === this.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\temptyText = t('core', 'No more subfolders in here')\n\t\t}\n\n\t\tthis.filepicker.loading = true\n\t\tthis.filepicker.filesClient = (OCA.Sharing && OCA.Sharing.PublicApp && OCA.Sharing.PublicApp.fileList) ? OCA.Sharing.PublicApp.fileList.filesClient : OC.Files.getClient()\n\n\t\tthis.filelist = null\n\t\tpath = path || ''\n\t\toptions = Object.assign({\n\t\t\tallowDirectoryChooser: false\n\t\t}, options)\n\n\t\t$.when(this._getFilePickerTemplate()).then(function($tmpl) {\n\t\t\tself.filepicker.loading = false\n\t\t\tvar dialogName = 'oc-dialog-filepicker-content'\n\t\t\tif (self.$filePicker) {\n\t\t\t\tself.$filePicker.ocdialog('close')\n\t\t\t}\n\n\t\t\tif (mimetypeFilter === undefined || mimetypeFilter === null) {\n\t\t\t\tmimetypeFilter = []\n\t\t\t}\n\t\t\tif (typeof (mimetypeFilter) === 'string') {\n\t\t\t\tmimetypeFilter = [mimetypeFilter]\n\t\t\t}\n\n\t\t\tself.$filePicker = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\temptytext: emptyText,\n\t\t\t\tnewtext: newText,\n\t\t\t\tnameCol: t('core', 'Name'),\n\t\t\t\tsizeCol: t('core', 'Size'),\n\t\t\t\tmodifiedCol: t('core', 'Modified')\n\t\t\t}).data('path', path).data('multiselect', multiselect).data('mimetype', mimetypeFilter).data('allowDirectoryChooser', options.allowDirectoryChooser)\n\t\t\tif (typeof(options.filter) === 'function') {\n\t\t\t\tself.$filePicker.data('filter', options.filter)\n\t\t\t}\n\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false\n\t\t\t}\n\t\t\tif (multiselect === undefined) {\n\t\t\t\tmultiselect = false\n\t\t\t}\n\n\t\t\t$(options?.target ?? 'body').prepend(self.$filePicker)\n\n\t\t\tself.$showGridView = $('button#picker-showgridview')\n\t\t\tself.$showGridView.on('click keydown', function(event) {\n\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\tself._onGridviewChange()\n\t\t\t\t}\n\t\t\t})\n\t\t\tself._getGridSettings()\n\n\t\t\tvar newButton = self.$filePicker.find('.actions.creatable .button-add')\n\t\t\tif (type === self.FILEPICKER_TYPE_CHOOSE && !options.allowDirectoryChooser) {\n\t\t\t\tself.$filePicker.find('.actions.creatable').hide()\n\t\t\t}\n\t\t\tnewButton.on('focus', function() {\n\t\t\t\tself.$filePicker.ocdialog('setEnterCallback', function(event) {\n\t\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tnewButton.click()\n\t\t\t\t})\n\t\t\t})\n\t\t\tnewButton.on('blur', function() {\n\t\t\t\tself.$filePicker.ocdialog('unsetEnterCallback')\n\t\t\t})\n\n\t\t\tOC.registerMenu(newButton, self.$filePicker.find('.menu'), function() {\n\t\t\t\t$input.tooltip('hide')\n\t\t\t\t$input.focus()\n\t\t\t\tself.$filePicker.ocdialog('setEnterCallback', function(event) {\n\t\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tself.$filePicker.submit()\n\t\t\t\t})\n\t\t\t\tvar newName = $input.val()\n\t\t\t\tvar lastPos = newName.lastIndexOf('.')\n\t\t\t\tif (lastPos === -1) {\n\t\t\t\t\tlastPos = newName.length\n\t\t\t\t}\n\t\t\t\t$input.selectRange(0, lastPos)\n\t\t\t})\n\t\t\tvar $form = self.$filePicker.find('.filenameform')\n\t\t\tvar $input = $form.find('input[type=\\'text\\']')\n\t\t\tvar $submit = $form.find('input[type=\\'submit\\']')\n\t\t\t$input.on('keydown', function(event) {\n\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t$form.submit()\n\t\t\t\t}\n\t\t\t})\n\t\t\t$submit.on('click', function(event) {\n\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\tevent.preventDefault()\n\t\t\t\t$form.submit()\n\t\t\t})\n\n\t\t\t/**\n\t\t\t * Checks whether the given file name is valid.\n\t\t\t *\n\t\t\t * @param name file name to check\n\t\t\t * @return true if the file name is valid.\n\t\t\t * @throws a string exception with an error message if\n\t\t\t * the file name is not valid\n\t\t\t *\n\t\t\t * NOTE: This function is duplicated in the files app:\n\t\t\t * https://github.com/nextcloud/server/blob/b9bc2417e7a8dc81feb0abe20359bedaf864f790/apps/files/js/files.js#L127-L148\n\t\t\t */\n\t\t\tvar isFileNameValid = function (name) {\n\t\t\t\tvar trimmedName = name.trim();\n\t\t\t\tif (trimmedName === '.' || trimmedName === '..')\n\t\t\t\t{\n\t\t\t\t\tthrow t('files', '\"{name}\" is an invalid file name.', {name: name})\n\t\t\t\t} else if (trimmedName.length === 0) {\n\t\t\t\t\tthrow t('files', 'File name cannot be empty.')\n\t\t\t\t} else if (trimmedName.indexOf('/') !== -1) {\n\t\t\t\t\tthrow t('files', '\"/\" is not allowed inside a file name.')\n\t\t\t\t} else if (!!(trimmedName.match(OC.config.blacklist_files_regex))) {\n\t\t\t\t\tthrow t('files', '\"{name}\" is not an allowed filetype', {name: name})\n\t\t\t\t}\n\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\tvar checkInput = function() {\n\t\t\t\tvar filename = $input.val()\n\t\t\t\ttry {\n\t\t\t\t\tif (!isFileNameValid(filename)) {\n\t\t\t\t\t\t// isFileNameValid(filename) throws an exception itself\n\t\t\t\t\t} else if (self.filelist.find(function(file) {\n\t\t\t\t\t\treturn file.name === this\n\t\t\t\t\t}, filename)) {\n\t\t\t\t\t\tthrow t('files', '{newName} already exists', { newName: filename }, undefined, {\n\t\t\t\t\t\t\tescape: false\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn true\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\t$input.attr('title', error)\n\t\t\t\t\t$input.tooltip({\n\t\t\t\t\t\tplacement: 'right',\n\t\t\t\t\t\ttrigger: 'manual',\n\t\t\t\t\t\t'container': '.newFolderMenu'\n\t\t\t\t\t})\n\t\t\t\t\t$input.tooltip('_fixTitle')\n\t\t\t\t\t$input.tooltip('show')\n\t\t\t\t\t$input.addClass('error')\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\t$form.on('submit', function(event) {\n\t\t\t\tevent.stopPropagation()\n\t\t\t\tevent.preventDefault()\n\n\t\t\t\tif (checkInput()) {\n\t\t\t\t\tvar newname = $input.val()\n\t\t\t\t\tself.filepicker.filesClient.createDirectory(self.$filePicker.data('path') + \"/\" + newname).always(function (status) {\n\t\t\t\t\t\tself._fillFilePicker(self.$filePicker.data('path') + \"/\" + newname, type)\n\t\t\t\t\t})\n\t\t\t\t\tOC.hideMenus()\n\t\t\t\t\tself.$filePicker.ocdialog('unsetEnterCallback')\n\t\t\t\t\tself.$filePicker.click()\n\t\t\t\t\t$input.val(newText)\n\t\t\t\t}\n\t\t\t})\n\t\t\t$input.on('input', function(event) {\n\t\t\t\t$input.tooltip('hide')\n\t\t\t})\n\n\t\t\tself.$filePicker.ready(function() {\n\t\t\t\tself.$fileListHeader = self.$filePicker.find('.filelist thead tr')\n\t\t\t\tself.$filelist = self.$filePicker.find('.filelist tbody')\n\t\t\t\tself.$filelistContainer = self.$filePicker.find('.filelist-container')\n\t\t\t\tself.$dirTree = self.$filePicker.find('.dirtree')\n\t\t\t\tself.$dirTree.on('click keydown', 'div:not(:last-child)', self, function(event) {\n\t\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\t\tself._handleTreeListSelect(event, type)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tself.$filelist.on('click keydown', 'tr', function(event) {\n\t\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\t\tself._handlePickerClick(event, $(this), type)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tself.$fileListHeader.on('click keydown', 'a', function(event) {\n\t\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\t\tvar dir = self.$filePicker.data('path')\n\t\t\t\t\t\tself.filepicker.sortField = $(event.currentTarget).data('sort')\n\t\t\t\t\t\tself.filepicker.sortOrder = self.filepicker.sortOrder === 'asc' ? 'desc' : 'asc'\n\t\t\t\t\t\tself._fillFilePicker(dir, type)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tself._fillFilePicker(path, type)\n\t\t\t})\n\n\t\t\t// build buttons\n\t\t\tvar functionToCall = function(returnType) {\n\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\tvar datapath\n\t\t\t\t\tif (multiselect === true) {\n\t\t\t\t\t\tdatapath = []\n\t\t\t\t\t\tself.$filelist.find('tr.filepicker_element_selected').each(function(index, element) {\n\t\t\t\t\t\t\tdatapath.push(self.$filePicker.data('path') + '/' + $(element).data('entryname'))\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdatapath = self.$filePicker.data('path')\n\t\t\t\t\t\tvar selectedName = self.$filelist.find('tr.filepicker_element_selected').data('entryname')\n\t\t\t\t\t\tif (selectedName) {\n\t\t\t\t\t\t\tdatapath += '/' + selectedName\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcallback(datapath, returnType)\n\t\t\t\t\tself.$filePicker.ocdialog('close')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar chooseCallback = function() {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_CHOOSE)\n\t\t\t}\n\n\t\t\tvar copyCallback = function() {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_COPY)\n\t\t\t}\n\n\t\t\tvar moveCallback = function() {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_MOVE)\n\t\t\t}\n\n\t\t\tvar buttonlist = []\n\t\t\tif (type === Dialogs.FILEPICKER_TYPE_CHOOSE) {\n\t\t\t\tbuttonlist.push({\n\t\t\t\t\ttext: t('core', 'Choose'),\n\t\t\t\t\tclick: chooseCallback,\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t})\n\t\t\t} else if (type === Dialogs.FILEPICKER_TYPE_CUSTOM) {\n\t\t\t\toptions.buttons.forEach(function(button) {\n\t\t\t\t\tbuttonlist.push({\n\t\t\t\t\t\ttext: button.text,\n\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\tfunctionToCall(button.type)\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdefaultButton: button.defaultButton\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tif (type === Dialogs.FILEPICKER_TYPE_COPY || type === Dialogs.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\t\t\tbuttonlist.push({\n\t\t\t\t\t\ttext: t('core', 'Copy'),\n\t\t\t\t\t\tclick: copyCallback,\n\t\t\t\t\t\tdefaultButton: false\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (type === Dialogs.FILEPICKER_TYPE_MOVE || type === Dialogs.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\t\t\tbuttonlist.push({\n\t\t\t\t\t\ttext: t('core', 'Move'),\n\t\t\t\t\t\tclick: moveCallback,\n\t\t\t\t\t\tdefaultButton: true\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tself.$filePicker.ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\t// max-width of 600\n\t\t\t\twidth: 600,\n\t\t\t\theight: 500,\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist,\n\t\t\t\tstyle: {\n\t\t\t\t\tbuttons: 'aside'\n\t\t\t\t},\n\t\t\t\tclose: function() {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t$(this).ocdialog('destroy').remove()\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t}\n\t\t\t\t\tself.$filePicker = null\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// We can access primary class only from oc-dialog.\n\t\t\t// Hence this is one of the approach to get the choose button.\n\t\t\tvar getOcDialog = self.$filePicker.closest('.oc-dialog')\n\t\t\tvar buttonEnableDisable = getOcDialog.find('.primary')\n\t\t\tif (self.$filePicker.data('mimetype').indexOf('httpd/unix-directory') !== -1 || self.$filePicker.data('allowDirectoryChooser')) {\n\t\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t\t} else {\n\t\t\t\tbuttonEnableDisable.prop('disabled', true)\n\t\t\t}\n\t\t})\n\t\t\t.fail(function(status, error) {\n\t\t\t\t// If the method is called while navigating away\n\t\t\t\t// from the page, it is probably not needed ;)\n\t\t\t\tself.filepicker.loading = false\n\t\t\t\tif (status !== 0) {\n\t\t\t\t\talert(t('core', 'Error loading file picker template: {error}', { error: error }))\n\t\t\t\t}\n\t\t\t})\n\t},\n\t/**\n\t * Displays raw dialog\n\t * You better use a wrapper instead ...\n\t */\n\tmessage: function(content, title, dialogType, buttons, callback, modal, allowHtml) {\n\t\treturn $.when(this._getMessageTemplate()).then(function($tmpl) {\n\t\t\tvar dialogName = 'oc-dialog-' + Dialogs.dialogsCounter + '-content'\n\t\t\tvar dialogId = '#' + dialogName\n\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\tmessage: content,\n\t\t\t\ttype: dialogType\n\t\t\t}, allowHtml ? { escapeFunction: '' } : {})\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false\n\t\t\t}\n\t\t\t$('body').append($dlg)\n\t\t\tvar buttonlist = []\n\t\t\tswitch (buttons) {\n\t\t\tcase Dialogs.YES_NO_BUTTONS:\n\t\t\t\tbuttonlist = [{\n\t\t\t\t\ttext: t('core', 'No'),\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\tcallback(false)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttext: t('core', 'Yes'),\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\tcallback(true)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t},\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t}]\n\t\t\t\tbreak\n\t\t\tcase Dialogs.OK_BUTTON:\n\t\t\t\tvar functionToCall = function() {\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\tcallback()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbuttonlist[0] = {\n\t\t\t\t\ttext: t('core', 'OK'),\n\t\t\t\t\tclick: functionToCall,\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tif (typeof(buttons) === 'object') {\n\t\t\t\t\tswitch (buttons.type) {\n\t\t\t\t\t\tcase Dialogs.YES_NO_BUTTONS:\n\t\t\t\t\t\t\tbuttonlist = [{\n\t\t\t\t\t\t\t\ttext: buttons.cancel || t('core', 'No'),\n\t\t\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\t\t\t\tcallback(false)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttext: buttons.confirm || t('core', 'Yes'),\n\t\t\t\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\t\t\t\t\tcallback(true)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdefaultButton: true,\n\t\t\t\t\t\t\t\t\tclasses: buttons.confirmClasses\n\t\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t$(dialogId).ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\tcloseCallback: () => { callback && callback(false) },\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist\n\t\t\t})\n\t\t\tDialogs.dialogsCounter++\n\t\t})\n\t\t\t.fail(function(status, error) {\n\t\t\t\t// If the method is called while navigating away from\n\t\t\t\t// the page, we still want to deliver the message.\n\t\t\t\tif (status === 0) {\n\t\t\t\t\talert(title + ': ' + content)\n\t\t\t\t} else {\n\t\t\t\t\talert(t('core', 'Error loading message template: {error}', { error: error }))\n\t\t\t\t}\n\t\t\t})\n\t},\n\t_fileexistsshown: false,\n\t/**\n\t * Displays file exists dialog\n\t * @param {object} data upload object\n\t * @param {object} original file with name, size and mtime\n\t * @param {object} replacement file with name, size and mtime\n\t * @param {object} controller with onCancel, onSkip, onReplace and onRename methods\n\t * @returns {Promise} jquery promise that resolves after the dialog template was loaded\n\t */\n\tfileexists: function(data, original, replacement, controller) {\n\t\tvar self = this\n\t\tvar dialogDeferred = new $.Deferred()\n\n\t\tvar getCroppedPreview = function(file) {\n\t\t\tvar deferred = new $.Deferred()\n\t\t\t// Only process image files.\n\t\t\tvar type = file.type && file.type.split('/').shift()\n\t\t\tif (window.FileReader && type === 'image') {\n\t\t\t\tvar reader = new FileReader()\n\t\t\t\treader.onload = function(e) {\n\t\t\t\t\tvar blob = new Blob([e.target.result])\n\t\t\t\t\twindow.URL = window.URL || window.webkitURL\n\t\t\t\t\tvar originalUrl = window.URL.createObjectURL(blob)\n\t\t\t\t\tvar image = new Image()\n\t\t\t\t\timage.src = originalUrl\n\t\t\t\t\timage.onload = function() {\n\t\t\t\t\t\tvar url = crop(image)\n\t\t\t\t\t\tdeferred.resolve(url)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treader.readAsArrayBuffer(file)\n\t\t\t} else {\n\t\t\t\tdeferred.reject()\n\t\t\t}\n\t\t\treturn deferred\n\t\t}\n\n\t\tvar crop = function(img) {\n\t\t\tvar canvas = document.createElement('canvas')\n\t\t\tvar targetSize = 96\n\t\t\tvar width = img.width\n\t\t\tvar height = img.height\n\t\t\tvar x; var y; var size\n\n\t\t\t// Calculate the width and height, constraining the proportions\n\t\t\tif (width > height) {\n\t\t\t\ty = 0\n\t\t\t\tx = (width - height) / 2\n\t\t\t} else {\n\t\t\t\ty = (height - width) / 2\n\t\t\t\tx = 0\n\t\t\t}\n\t\t\tsize = Math.min(width, height)\n\n\t\t\t// Set canvas size to the cropped area\n\t\t\tcanvas.width = size\n\t\t\tcanvas.height = size\n\t\t\tvar ctx = canvas.getContext('2d')\n\t\t\tctx.drawImage(img, x, y, size, size, 0, 0, size, size)\n\n\t\t\t// Resize the canvas to match the destination (right size uses 96px)\n\t\t\tresampleHermite(canvas, size, size, targetSize, targetSize)\n\n\t\t\treturn canvas.toDataURL('image/png', 0.7)\n\t\t}\n\n\t\t/**\n\t\t * Fast image resize/resample using Hermite filter with JavaScript.\n\t\t *\n\t\t * @author: ViliusL\n\t\t *\n\t\t * @param {*} canvas\n\t\t * @param {number} W\n\t\t * @param {number} H\n\t\t * @param {number} W2\n\t\t * @param {number} H2\n\t\t */\n\t\tvar resampleHermite = function(canvas, W, H, W2, H2) {\n\t\t\tW2 = Math.round(W2)\n\t\t\tH2 = Math.round(H2)\n\t\t\tvar img = canvas.getContext('2d').getImageData(0, 0, W, H)\n\t\t\tvar img2 = canvas.getContext('2d').getImageData(0, 0, W2, H2)\n\t\t\tvar data = img.data\n\t\t\tvar data2 = img2.data\n\t\t\tvar ratio_w = W / W2\n\t\t\tvar ratio_h = H / H2\n\t\t\tvar ratio_w_half = Math.ceil(ratio_w / 2)\n\t\t\tvar ratio_h_half = Math.ceil(ratio_h / 2)\n\n\t\t\tfor (var j = 0; j < H2; j++) {\n\t\t\t\tfor (var i = 0; i < W2; i++) {\n\t\t\t\t\tvar x2 = (i + j * W2) * 4\n\t\t\t\t\tvar weight = 0\n\t\t\t\t\tvar weights = 0\n\t\t\t\t\tvar weights_alpha = 0\n\t\t\t\t\tvar gx_r = 0\n\t\t\t\t\tvar gx_g = 0\n\t\t\t\t\tvar gx_b = 0\n\t\t\t\t\tvar gx_a = 0\n\t\t\t\t\tvar center_y = (j + 0.5) * ratio_h\n\t\t\t\t\tfor (var yy = Math.floor(j * ratio_h); yy < (j + 1) * ratio_h; yy++) {\n\t\t\t\t\t\tvar dy = Math.abs(center_y - (yy + 0.5)) / ratio_h_half\n\t\t\t\t\t\tvar center_x = (i + 0.5) * ratio_w\n\t\t\t\t\t\tvar w0 = dy * dy // pre-calc part of w\n\t\t\t\t\t\tfor (var xx = Math.floor(i * ratio_w); xx < (i + 1) * ratio_w; xx++) {\n\t\t\t\t\t\t\tvar dx = Math.abs(center_x - (xx + 0.5)) / ratio_w_half\n\t\t\t\t\t\t\tvar w = Math.sqrt(w0 + dx * dx)\n\t\t\t\t\t\t\tif (w >= -1 && w <= 1) {\n\t\t\t\t\t\t\t\t// hermite filter\n\t\t\t\t\t\t\t\tweight = 2 * w * w * w - 3 * w * w + 1\n\t\t\t\t\t\t\t\tif (weight > 0) {\n\t\t\t\t\t\t\t\t\tdx = 4 * (xx + yy * W)\n\t\t\t\t\t\t\t\t\t// alpha\n\t\t\t\t\t\t\t\t\tgx_a += weight * data[dx + 3]\n\t\t\t\t\t\t\t\t\tweights_alpha += weight\n\t\t\t\t\t\t\t\t\t// colors\n\t\t\t\t\t\t\t\t\tif (data[dx + 3] < 255) { weight = weight * data[dx + 3] / 250 }\n\t\t\t\t\t\t\t\t\tgx_r += weight * data[dx]\n\t\t\t\t\t\t\t\t\tgx_g += weight * data[dx + 1]\n\t\t\t\t\t\t\t\t\tgx_b += weight * data[dx + 2]\n\t\t\t\t\t\t\t\t\tweights += weight\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdata2[x2] = gx_r / weights\n\t\t\t\t\tdata2[x2 + 1] = gx_g / weights\n\t\t\t\t\tdata2[x2 + 2] = gx_b / weights\n\t\t\t\t\tdata2[x2 + 3] = gx_a / weights_alpha\n\t\t\t\t}\n\t\t\t}\n\t\t\tcanvas.getContext('2d').clearRect(0, 0, Math.max(W, W2), Math.max(H, H2))\n\t\t\tcanvas.width = W2\n\t\t\tcanvas.height = H2\n\t\t\tcanvas.getContext('2d').putImageData(img2, 0, 0)\n\t\t}\n\n\t\tvar addConflict = function($conflicts, original, replacement) {\n\n\t\t\tvar $conflict = $conflicts.find('.template').clone().removeClass('template').addClass('conflict')\n\t\t\tvar $originalDiv = $conflict.find('.original')\n\t\t\tvar $replacementDiv = $conflict.find('.replacement')\n\n\t\t\t$conflict.data('data', data)\n\n\t\t\t$conflict.find('.filename').text(original.name)\n\t\t\t$originalDiv.find('.size').text(OC.Util.humanFileSize(original.size))\n\t\t\t$originalDiv.find('.mtime').text(OC.Util.formatDate(original.mtime))\n\t\t\t// ie sucks\n\t\t\tif (replacement.size && replacement.lastModified) {\n\t\t\t\t$replacementDiv.find('.size').text(OC.Util.humanFileSize(replacement.size))\n\t\t\t\t$replacementDiv.find('.mtime').text(OC.Util.formatDate(replacement.lastModified))\n\t\t\t}\n\t\t\tvar path = original.directory + '/' + original.name\n\t\t\tvar urlSpec = {\n\t\t\t\tfile: path,\n\t\t\t\tx: 96,\n\t\t\t\ty: 96,\n\t\t\t\tc: original.etag,\n\t\t\t\tforceIcon: 0\n\t\t\t}\n\t\t\tvar previewpath = Files.generatePreviewUrl(urlSpec)\n\t\t\t// Escaping single quotes\n\t\t\tpreviewpath = previewpath.replace(/'/g, '%27')\n\t\t\t$originalDiv.find('.icon').css({ 'background-image': \"url('\" + previewpath + \"')\" })\n\t\t\tgetCroppedPreview(replacement).then(\n\t\t\t\tfunction(path) {\n\t\t\t\t\t$replacementDiv.find('.icon').css('background-image', 'url(' + path + ')')\n\t\t\t\t}, function() {\n\t\t\t\t\tpath = OC.MimeType.getIconUrl(replacement.type)\n\t\t\t\t\t$replacementDiv.find('.icon').css('background-image', 'url(' + path + ')')\n\t\t\t\t}\n\t\t\t)\n\t\t\t// connect checkboxes with labels\n\t\t\tvar checkboxId = $conflicts.find('.conflict').length\n\t\t\t$originalDiv.find('input:checkbox').attr('id', 'checkbox_original_' + checkboxId)\n\t\t\t$replacementDiv.find('input:checkbox').attr('id', 'checkbox_replacement_' + checkboxId)\n\n\t\t\t$conflicts.append($conflict)\n\n\t\t\t// set more recent mtime bold\n\t\t\t// ie sucks\n\t\t\tif (replacement.lastModified > original.mtime) {\n\t\t\t\t$replacementDiv.find('.mtime').css('font-weight', 'bold')\n\t\t\t} else if (replacement.lastModified < original.mtime) {\n\t\t\t\t$originalDiv.find('.mtime').css('font-weight', 'bold')\n\t\t\t} else {\n\t\t\t\t// TODO add to same mtime collection?\n\t\t\t}\n\n\t\t\t// set bigger size bold\n\t\t\tif (replacement.size && replacement.size > original.size) {\n\t\t\t\t$replacementDiv.find('.size').css('font-weight', 'bold')\n\t\t\t} else if (replacement.size && replacement.size < original.size) {\n\t\t\t\t$originalDiv.find('.size').css('font-weight', 'bold')\n\t\t\t} else {\n\t\t\t\t// TODO add to same size collection?\n\t\t\t}\n\n\t\t\t// TODO show skip action for files with same size and mtime in bottom row\n\n\t\t\t// always keep readonly files\n\n\t\t\tif (original.status === 'readonly') {\n\t\t\t\t$originalDiv\n\t\t\t\t\t.addClass('readonly')\n\t\t\t\t\t.find('input[type=\"checkbox\"]')\n\t\t\t\t\t.prop('checked', true)\n\t\t\t\t\t.prop('disabled', true)\n\t\t\t\t$originalDiv.find('.message')\n\t\t\t\t\t.text(t('core', 'read-only'))\n\t\t\t}\n\t\t}\n\t\t// var selection = controller.getSelection(data.originalFiles);\n\t\t// if (selection.defaultAction) {\n\t\t//\tcontroller[selection.defaultAction](data);\n\t\t// } else {\n\t\tvar dialogName = 'oc-dialog-fileexists-content'\n\t\tvar dialogId = '#' + dialogName\n\t\tif (this._fileexistsshown) {\n\t\t\t// add conflict\n\n\t\t\tvar $conflicts = $(dialogId + ' .conflicts')\n\t\t\taddConflict($conflicts, original, replacement)\n\n\t\t\tvar count = $(dialogId + ' .conflict').length\n\t\t\tvar title = n('core',\n\t\t\t\t'{count} file conflict',\n\t\t\t\t'{count} file conflicts',\n\t\t\t\tcount,\n\t\t\t\t{ count: count }\n\t\t\t)\n\t\t\t$(dialogId).parent().children('.oc-dialog-title').text(title)\n\n\t\t\t// recalculate dimensions\n\t\t\t$(window).trigger('resize')\n\t\t\tdialogDeferred.resolve()\n\t\t} else {\n\t\t\t// create dialog\n\t\t\tthis._fileexistsshown = true\n\t\t\t$.when(this._getFileExistsTemplate()).then(function($tmpl) {\n\t\t\t\tvar title = t('core', 'One file conflict')\n\t\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\t\tdialog_name: dialogName,\n\t\t\t\t\ttitle: title,\n\t\t\t\t\ttype: 'fileexists',\n\n\t\t\t\t\tallnewfiles: t('core', 'New Files'),\n\t\t\t\t\tallexistingfiles: t('core', 'Already existing files'),\n\n\t\t\t\t\twhy: t('core', 'Which files do you want to keep?'),\n\t\t\t\t\twhat: t('core', 'If you select both versions, the copied file will have a number added to its name.')\n\t\t\t\t})\n\t\t\t\t$('body').append($dlg)\n\n\t\t\t\tif (original && replacement) {\n\t\t\t\t\tvar $conflicts = $dlg.find('.conflicts')\n\t\t\t\t\taddConflict($conflicts, original, replacement)\n\t\t\t\t}\n\n\t\t\t\tvar buttonlist = [{\n\t\t\t\t\ttext: t('core', 'Cancel'),\n\t\t\t\t\tclasses: 'cancel',\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (typeof controller.onCancel !== 'undefined') {\n\t\t\t\t\t\t\tcontroller.onCancel(data)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttext: t('core', 'Continue'),\n\t\t\t\t\tclasses: 'continue',\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (typeof controller.onContinue !== 'undefined') {\n\t\t\t\t\t\t\tcontroller.onContinue($(dialogId + ' .conflict'))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t}]\n\n\t\t\t\t$(dialogId).ocdialog({\n\t\t\t\t\twidth: 500,\n\t\t\t\t\tcloseOnEscape: true,\n\t\t\t\t\tmodal: true,\n\t\t\t\t\tbuttons: buttonlist,\n\t\t\t\t\tcloseButton: null,\n\t\t\t\t\tclose: function() {\n\t\t\t\t\t\tself._fileexistsshown = false\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t$(this).ocdialog('destroy').remove()\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// ignore\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\t$(dialogId).css('height', 'auto')\n\n\t\t\t\tvar $primaryButton = $dlg.closest('.oc-dialog').find('button.continue')\n\t\t\t\t$primaryButton.prop('disabled', true)\n\n\t\t\t\tfunction updatePrimaryButton() {\n\t\t\t\t\tvar checkedCount = $dlg.find('.conflicts .checkbox:checked').length\n\t\t\t\t\t$primaryButton.prop('disabled', checkedCount === 0)\n\t\t\t\t}\n\n\t\t\t\t// add checkbox toggling actions\n\t\t\t\t$(dialogId).find('.allnewfiles').on('click', function() {\n\t\t\t\t\tvar $checkboxes = $(dialogId).find('.conflict .replacement input[type=\"checkbox\"]')\n\t\t\t\t\t$checkboxes.prop('checked', $(this).prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.allexistingfiles').on('click', function() {\n\t\t\t\t\tvar $checkboxes = $(dialogId).find('.conflict .original:not(.readonly) input[type=\"checkbox\"]')\n\t\t\t\t\t$checkboxes.prop('checked', $(this).prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.conflicts').on('click', '.replacement,.original:not(.readonly)', function() {\n\t\t\t\t\tvar $checkbox = $(this).find('input[type=\"checkbox\"]')\n\t\t\t\t\t$checkbox.prop('checked', !$checkbox.prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.conflicts').on('click', '.replacement input[type=\"checkbox\"],.original:not(.readonly) input[type=\"checkbox\"]', function() {\n\t\t\t\t\tvar $checkbox = $(this)\n\t\t\t\t\t$checkbox.prop('checked', !$checkbox.prop('checked'))\n\t\t\t\t})\n\n\t\t\t\t// update counters\n\t\t\t\t$(dialogId).on('click', '.replacement,.allnewfiles', function() {\n\t\t\t\t\tvar count = $(dialogId).find('.conflict .replacement input[type=\"checkbox\"]:checked').length\n\t\t\t\t\tif (count === $(dialogId + ' .conflict').length) {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', true)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text(t('core', '(all selected)'))\n\t\t\t\t\t} else if (count > 0) {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text(t('core', '({count} selected)', { count: count }))\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text('')\n\t\t\t\t\t}\n\t\t\t\t\tupdatePrimaryButton()\n\t\t\t\t})\n\t\t\t\t$(dialogId).on('click', '.original,.allexistingfiles', function() {\n\t\t\t\t\tvar count = $(dialogId).find('.conflict .original input[type=\"checkbox\"]:checked').length\n\t\t\t\t\tif (count === $(dialogId + ' .conflict').length) {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', true)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count').text(t('core', '(all selected)'))\n\t\t\t\t\t} else if (count > 0) {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count')\n\t\t\t\t\t\t\t.text(t('core', '({count} selected)', { count: count }))\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count').text('')\n\t\t\t\t\t}\n\t\t\t\t\tupdatePrimaryButton()\n\t\t\t\t})\n\n\t\t\t\tdialogDeferred.resolve()\n\t\t\t})\n\t\t\t\t.fail(function() {\n\t\t\t\t\tdialogDeferred.reject()\n\t\t\t\t\talert(t('core', 'Error loading file exists template'))\n\t\t\t\t})\n\t\t}\n\t\t// }\n\t\treturn dialogDeferred.promise()\n\t},\n\t// get the gridview setting and set the input accordingly\n\t_getGridSettings: function() {\n\t\tconst self = this\n\t\t$.get(OC.generateUrl('/apps/files/api/v1/showgridview'), function(response) {\n\t\t\tself.$showGridView\n\t\t\t\t.removeClass('icon-toggle-filelist icon-toggle-pictures')\n\t\t\t\t.addClass(response.gridview ? 'icon-toggle-filelist' : 'icon-toggle-pictures')\n\t\t\tself.$showGridView.attr(\n\t\t\t\t'aria-label',\n\t\t\t\tresponse.gridview ? t('files', 'Show list view') : t('files', 'Show grid view'),\n\t\t\t)\n\t\t\t$('.list-container').toggleClass('view-grid', response.gridview)\n\t\t})\n\t},\n\t_onGridviewChange: function() {\n\t\tconst isGridView = this.$showGridView.hasClass('icon-toggle-filelist')\n\t\t// only save state if user is logged in\n\t\tif (OC.currentUser) {\n\t\t\t$.post(OC.generateUrl('/apps/files/api/v1/showgridview'), { show: !isGridView })\n\t\t}\n\t\tthis.$showGridView\n\t\t\t.removeClass('icon-toggle-filelist icon-toggle-pictures')\n\t\t\t.addClass(isGridView ? 'icon-toggle-pictures' : 'icon-toggle-filelist')\n\t\tthis.$showGridView.attr(\n\t\t\t'aria-label',\n\t\t\tisGridView ? t('files', 'Show grid view') : t('files', 'Show list view'),\n\t\t)\n\t\tthis.$filePicker.find('.list-container').toggleClass('view-grid', !isGridView)\n\t},\n\t_getFilePickerTemplate: function() {\n\t\tvar defer = $.Deferred()\n\t\tif (!this.$filePickerTemplate) {\n\t\t\tvar self = this\n\t\t\t$.get(OC.filePath('core', 'templates', 'filepicker.html'), function(tmpl) {\n\t\t\t\tself.$filePickerTemplate = $(tmpl)\n\t\t\t\tself.$listTmpl = self.$filePickerTemplate.find('.filelist tbody tr:first-child').detach()\n\t\t\t\tdefer.resolve(self.$filePickerTemplate)\n\t\t\t})\n\t\t\t\t.fail(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\tdefer.reject(jqXHR.status, errorThrown)\n\t\t\t\t})\n\t\t} else {\n\t\t\tdefer.resolve(this.$filePickerTemplate)\n\t\t}\n\t\treturn defer.promise()\n\t},\n\t_getMessageTemplate: function() {\n\t\tvar defer = $.Deferred()\n\t\tif (!this.$messageTemplate) {\n\t\t\tvar self = this\n\t\t\t$.get(OC.filePath('core', 'templates', 'message.html'), function(tmpl) {\n\t\t\t\tself.$messageTemplate = $(tmpl)\n\t\t\t\tdefer.resolve(self.$messageTemplate)\n\t\t\t})\n\t\t\t\t.fail(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\tdefer.reject(jqXHR.status, errorThrown)\n\t\t\t\t})\n\t\t} else {\n\t\t\tdefer.resolve(this.$messageTemplate)\n\t\t}\n\t\treturn defer.promise()\n\t},\n\t_getFileExistsTemplate: function() {\n\t\tvar defer = $.Deferred()\n\t\tif (!this.$fileexistsTemplate) {\n\t\t\tvar self = this\n\t\t\t$.get(OC.filePath('files', 'templates', 'fileexists.html'), function(tmpl) {\n\t\t\t\tself.$fileexistsTemplate = $(tmpl)\n\t\t\t\tdefer.resolve(self.$fileexistsTemplate)\n\t\t\t})\n\t\t\t\t.fail(function() {\n\t\t\t\t\tdefer.reject()\n\t\t\t\t})\n\t\t} else {\n\t\t\tdefer.resolve(this.$fileexistsTemplate)\n\t\t}\n\t\treturn defer.promise()\n\t},\n\n\t/**\n\t * fills the filepicker with files\n\t */\n\t_fillFilePicker: async function(dir, type) {\n\t\tvar self = this\n\t\tthis.$filelist.empty()\n\t\tthis.$filePicker.find('.emptycontent').hide()\n\t\tthis.$filelistContainer.addClass('icon-loading')\n\t\tthis.$filePicker.data('path', dir)\n\t\tvar filter = this.$filePicker.data('mimetype')\n\t\tvar advancedFilter = this.$filePicker.data('filter')\n\t\tif (typeof (filter) === 'string') {\n\t\t\tfilter = [filter]\n\t\t}\n\t\tself.$fileListHeader.find('.sort-indicator').addClass('hidden').removeClass('icon-triangle-n').removeClass('icon-triangle-s')\n\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').removeClass('hidden')\n\t\tif (self.filepicker.sortOrder === 'asc') {\n\t\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').addClass('icon-triangle-n')\n\t\t} else {\n\t\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').addClass('icon-triangle-s')\n\t\t}\n\n\t\t// Wrap within a method because a promise cannot return multiple values\n\t\t// But the client impleemntation still does it...\n\t\tvar getFolderContents = async function(dir) {\n\t\t\treturn self.filepicker.filesClient.getFolderContents(dir)\n\t\t\t\t.then((status, files) => {\n\t\t\t\t\treturn files\n\t\t\t\t})\n\t\t}\n\n\t\ttry {\n\t\t\tvar files = await getFolderContents(dir)\n\t\t} catch (error) {\n\t\t\t// fallback to root if requested dir is non-existent\n\t\t\tconsole.error('Requested path does not exists, falling back to root')\n\t\t\tvar files = await getFolderContents('/')\n\t\t\tthis.$filePicker.data('path', '/')\n\t\t\tthis._changeButtonsText(type, '')\n\t\t}\n\n\t\tself.filelist = files\n\t\tif (filter && filter.length > 0 && filter.indexOf('*') === -1) {\n\t\t\tfiles = files.filter(function(file) {\n\t\t\t\treturn file.type === 'dir' || filter.indexOf(file.mimetype) !== -1\n\t\t\t})\n\t\t}\n\n\t\tif (advancedFilter) {\n\t\t\tfiles = files.filter(advancedFilter)\n\t\t}\n\n\t\t// Check if the showHidden input field exist and if it exist follow it\n\t\t// Otherwise just show the hidden files\n\t\tconst showHiddenInput = document.getElementById('showHiddenFiles')\n\t\tconst showHidden = showHiddenInput === null || showHiddenInput.value === \"1\"\n\t\tif (!showHidden) {\n\t\t\tfiles = files.filter(function(file) {\n\t\t\t\treturn !file.name.startsWith('.')\n\t\t\t})\n\t\t}\n\n\t\tvar Comparators = {\n\t\t\tname: function(fileInfo1, fileInfo2) {\n\t\t\t\tif (fileInfo1.type === 'dir' && fileInfo2.type !== 'dir') {\n\t\t\t\t\treturn -1\n\t\t\t\t}\n\t\t\t\tif (fileInfo1.type !== 'dir' && fileInfo2.type === 'dir') {\n\t\t\t\t\treturn 1\n\t\t\t\t}\n\t\t\t\treturn OC.Util.naturalSortCompare(fileInfo1.name, fileInfo2.name)\n\t\t\t},\n\t\t\tsize: function(fileInfo1, fileInfo2) {\n\t\t\t\treturn fileInfo1.size - fileInfo2.size\n\t\t\t},\n\t\t\tmtime: function(fileInfo1, fileInfo2) {\n\t\t\t\treturn fileInfo1.mtime - fileInfo2.mtime\n\t\t\t}\n\t\t}\n\t\tvar comparator = Comparators[self.filepicker.sortField] || Comparators.name\n\t\tfiles = files.sort(function(file1, file2) {\n\t\t\tvar isFavorite = function(fileInfo) {\n\t\t\t\treturn fileInfo.tags && fileInfo.tags.indexOf(OC.TAG_FAVORITE) >= 0\n\t\t\t}\n\n\t\t\tif (isFavorite(file1) && !isFavorite(file2)) {\n\t\t\t\treturn -1\n\t\t\t} else if (!isFavorite(file1) && isFavorite(file2)) {\n\t\t\t\treturn 1\n\t\t\t}\n\n\t\t\treturn self.filepicker.sortOrder === 'asc' ? comparator(file1, file2) : -comparator(file1, file2)\n\t\t})\n\n\t\tself._fillSlug()\n\n\t\tif (files.length === 0) {\n\t\t\tself.$filePicker.find('.emptycontent').show()\n\t\t\tself.$fileListHeader.hide()\n\t\t} else {\n\t\t\tself.$filePicker.find('.emptycontent').hide()\n\t\t\tself.$fileListHeader.show()\n\t\t}\n\n\t\tself.$filelist.empty();\n\n\t\t$.each(files, function(idx, entry) {\n\t\t\tif (entry.isEncrypted && entry.mimetype === 'httpd/unix-directory') {\n\t\t\t\tentry.icon = OC.MimeType.getIconUrl('dir-encrypted')\n\t\t\t} else {\n\t\t\t\tentry.icon = OC.MimeType.getIconUrl(entry.mimetype)\n\t\t\t}\n\n\t\t\tvar simpleSize, sizeColor\n\t\t\tif (typeof (entry.size) !== 'undefined' && entry.size >= 0) {\n\t\t\t\tsimpleSize = OC.Util.humanFileSize(parseInt(entry.size, 10), true)\n\t\t\t\tsizeColor = Math.round(160 - Math.pow((entry.size / (1024 * 1024)), 2))\n\t\t\t} else {\n\t\t\t\tsimpleSize = t('files', 'Pending')\n\t\t\t\tsizeColor = 80\n\t\t\t}\n\n\t\t\t// split the filename in half if the size is bigger than 20 char\n\t\t\t// for ellipsis\n\t\t\tif (entry.name.length >= 10) {\n\t\t\t\t// leave maximum 10 letters\n\t\t\t\tvar split = Math.min(Math.floor(entry.name.length / 2), 10)\n\t\t\t\tvar filename1 = entry.name.substr(0, entry.name.length - split)\n\t\t\t\tvar filename2 = entry.name.substr(entry.name.length - split)\n\t\t\t} else {\n\t\t\t\tvar filename1 = entry.name\n\t\t\t\tvar filename2 = ''\n\t\t\t}\n\n\t\t\tvar $row = self.$listTmpl.octemplate({\n\t\t\t\ttype: entry.type,\n\t\t\t\tdir: dir,\n\t\t\t\tfilename: entry.name,\n\t\t\t\tfilename1: filename1,\n\t\t\t\tfilename2: filename2,\n\t\t\t\tdate: OC.Util.relativeModifiedDate(entry.mtime),\n\t\t\t\tsize: simpleSize,\n\t\t\t\tsizeColor: sizeColor,\n\t\t\t\ticon: entry.icon\n\t\t\t})\n\t\t\tif (entry.type === 'file') {\n\t\t\t\tvar urlSpec = {\n\t\t\t\t\tfile: dir + '/' + entry.name,\n\t\t\t\t\tx: 100,\n\t\t\t\t\ty: 100\n\t\t\t\t}\n\t\t\t\tvar img = new Image()\n\t\t\t\tvar previewUrl = OC.generateUrl('/core/preview.png?') + $.param(urlSpec)\n\t\t\t\timg.onload = function() {\n\t\t\t\t\tif (img.width > 5) {\n\t\t\t\t\t\t$row.find('td.filename').attr('style', 'background-image:url(' + previewUrl + ')')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\timg.src = previewUrl\n\t\t\t}\n\t\t\tself.$filelist.append($row)\n\t\t})\n\n\t\tself.$filelistContainer.removeClass('icon-loading')\n\t},\n\t/**\n\t * fills the tree list with directories\n\t */\n\t_fillSlug: function() {\n\t\tvar addButton = this.$dirTree.find('.actions.creatable').detach()\n\t\tthis.$dirTree.empty()\n\t\tvar self = this\n\n\t\tself.$dirTree.append(addButton)\n\n\t\tvar dir\n\t\tvar path = this.$filePicker.data('path')\n\t\tvar $template = $('<div data-dir=\"{dir}\" tabindex=\"0\"><a>{name}</a></div>').addClass('crumb')\n\t\tif (path) {\n\t\t\tvar paths = path.split('/')\n\t\t\t$.each(paths, function(index, dir) {\n\t\t\t\tdir = paths.pop()\n\t\t\t\tif (dir === '') {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tself.$dirTree.prepend($template.octemplate({\n\t\t\t\t\tdir: paths.join('/') + '/' + dir,\n\t\t\t\t\tname: dir\n\t\t\t\t}))\n\t\t\t})\n\t\t}\n\n\t\t$template.octemplate({\n\t\t\tdir: '',\n\t\t\tname: t('core', 'Home'),\n\t\t}, { escapeFunction: null }).prependTo(this.$dirTree)\n\n\t},\n\t/**\n\t * handle selection made in the tree list\n\t */\n\t_handleTreeListSelect: function(event, type) {\n\t\tvar self = event.data\n\t\tvar dir = $(event.target).closest('.crumb').data('dir')\n\t\tself._fillFilePicker(dir, type)\n\t\tvar getOcDialog = (event.target).closest('.oc-dialog')\n\t\tvar buttonEnableDisable = $('.primary', getOcDialog)\n\t\tthis._changeButtonsText(type, dir.split(/[/]+/).pop())\n\t\tif (this.$filePicker.data('mimetype').indexOf('httpd/unix-directory') !== -1 || this.$filePicker.data('allowDirectoryChooser')) {\n\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t} else {\n\t\t\tbuttonEnableDisable.prop('disabled', true)\n\t\t}\n\t},\n\t/**\n\t * handle clicks made in the filepicker\n\t */\n\t_handlePickerClick: function(event, $element, type) {\n\t\tvar getOcDialog = this.$filePicker.closest('.oc-dialog')\n\t\tvar buttonEnableDisable = getOcDialog.find('.primary')\n\t\tif ($element.data('type') === 'file') {\n\t\t\tif (this.$filePicker.data('multiselect') !== true || !event.ctrlKey) {\n\t\t\t\tthis.$filelist.find('.filepicker_element_selected').removeClass('filepicker_element_selected')\n\t\t\t}\n\t\t\t$element.toggleClass('filepicker_element_selected')\n\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t} else if ($element.data('type') === 'dir') {\n\t\t\tthis._fillFilePicker(this.$filePicker.data('path') + '/' + $element.data('entryname'), type)\n\t\t\tthis._changeButtonsText(type, $element.data('entryname'))\n\t\t\tif (this.$filePicker.data('mimetype').indexOf('httpd/unix-directory') !== -1 || this.$filePicker.data('allowDirectoryChooser')) {\n\t\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t\t} else {\n\t\t\t\tbuttonEnableDisable.prop('disabled', true)\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Handle\n\t * @param type of action\n\t * @param dir on which to change buttons text\n\t * @private\n\t */\n\t_changeButtonsText: function(type, dir) {\n\t\tvar copyText = dir === '' ? t('core', 'Copy') : t('core', 'Copy to {folder}', { folder: dir })\n\t\tvar moveText = dir === '' ? t('core', 'Move') : t('core', 'Move to {folder}', { folder: dir })\n\t\tvar buttons = $('.oc-dialog-buttonrow button')\n\t\tswitch (type) {\n\t\t\tcase this.FILEPICKER_TYPE_CHOOSE:\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_CUSTOM:\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_COPY:\n\t\t\t\tbuttons.text(copyText)\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_MOVE:\n\t\t\t\tbuttons.text(moveText)\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_COPY_MOVE:\n\t\t\t\tbuttons.eq(0).text(copyText)\n\t\t\t\tbuttons.eq(1).text(moveText)\n\t\t\t\tbreak\n\t\t}\n\t}\n}\n\nexport default Dialogs\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { emit } from '@nextcloud/event-bus'\n\n/**\n * @private\n * @param {Document} global the document to read the initial value from\n * @param {Function} emit the function to invoke for every new token\n * @return {object}\n */\nexport const manageToken = (global, emit) => {\n\tlet token = global.getElementsByTagName('head')[0].getAttribute('data-requesttoken')\n\n\treturn {\n\t\tgetToken: () => token,\n\t\tsetToken: newToken => {\n\t\t\ttoken = newToken\n\n\t\t\temit('csrf-token-update', {\n\t\t\t\ttoken,\n\t\t\t})\n\t\t},\n\t}\n}\n\nconst manageFromDocument = manageToken(document, emit)\n\n/**\n * @return {string}\n */\nexport const getToken = manageFromDocument.getToken\n\n/**\n * @param {string} newToken new token\n */\nexport const setToken = manageFromDocument.setToken\n","/**\n * @copyright 2012 Robin Appelman icewind1991@gmail.com\n *\n * @author Arthur Schiwon <blizzz@arthur-schiwon.de>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Lukas Reschke <lukas@statuscode.ch>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Thomas Müller <thomas.mueller@tmit.eu>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport $ from 'jquery'\n\nimport { getToken } from './requesttoken'\n\n/**\n * Create a new event source\n * @param {string} src\n * @param {object} [data] to be send as GET\n *\n * @constructs OCEventSource\n */\nconst OCEventSource = function(src, data) {\n\tvar dataStr = ''\n\tvar name\n\tvar joinChar\n\tthis.typelessListeners = []\n\tthis.closed = false\n\tthis.listeners = {}\n\tif (data) {\n\t\tfor (name in data) {\n\t\t\tdataStr += name + '=' + encodeURIComponent(data[name]) + '&'\n\t\t}\n\t}\n\tdataStr += 'requesttoken=' + encodeURIComponent(getToken())\n\tif (!this.useFallBack && typeof EventSource !== 'undefined') {\n\t\tjoinChar = '&'\n\t\tif (src.indexOf('?') === -1) {\n\t\t\tjoinChar = '?'\n\t\t}\n\t\tthis.source = new EventSource(src + joinChar + dataStr)\n\t\tthis.source.onmessage = function(e) {\n\t\t\tfor (var i = 0; i < this.typelessListeners.length; i++) {\n\t\t\t\tthis.typelessListeners[i](JSON.parse(e.data))\n\t\t\t}\n\t\t}.bind(this)\n\t} else {\n\t\tvar iframeId = 'oc_eventsource_iframe_' + OCEventSource.iframeCount\n\t\tOCEventSource.fallBackSources[OCEventSource.iframeCount] = this\n\t\tthis.iframe = $('<iframe></iframe>')\n\t\tthis.iframe.attr('id', iframeId)\n\t\tthis.iframe.hide()\n\n\t\tjoinChar = '&'\n\t\tif (src.indexOf('?') === -1) {\n\t\t\tjoinChar = '?'\n\t\t}\n\t\tthis.iframe.attr('src', src + joinChar + 'fallback=true&fallback_id=' + OCEventSource.iframeCount + '&' + dataStr)\n\t\t$('body').append(this.iframe)\n\t\tthis.useFallBack = true\n\t\tOCEventSource.iframeCount++\n\t}\n\t// add close listener\n\tthis.listen('__internal__', function(data) {\n\t\tif (data === 'close') {\n\t\t\tthis.close()\n\t\t}\n\t}.bind(this))\n}\nOCEventSource.fallBackSources = []\nOCEventSource.iframeCount = 0// number of fallback iframes\nOCEventSource.fallBackCallBack = function(id, type, data) {\n\tOCEventSource.fallBackSources[id].fallBackCallBack(type, data)\n}\nOCEventSource.prototype = {\n\ttypelessListeners: [],\n\tiframe: null,\n\tlisteners: {}, // only for fallback\n\tuseFallBack: false,\n\t/**\n\t * Fallback callback for browsers that don't have the\n\t * native EventSource object.\n\t *\n\t * Calls the registered listeners.\n\t *\n\t * @private\n\t * @param {String} type event type\n\t * @param {Object} data received data\n\t */\n\tfallBackCallBack: function(type, data) {\n\t\tvar i\n\t\t// ignore messages that might appear after closing\n\t\tif (this.closed) {\n\t\t\treturn\n\t\t}\n\t\tif (type) {\n\t\t\tif (typeof this.listeners.done !== 'undefined') {\n\t\t\t\tfor (i = 0; i < this.listeners[type].length; i++) {\n\t\t\t\t\tthis.listeners[type][i](data)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor (i = 0; i < this.typelessListeners.length; i++) {\n\t\t\t\tthis.typelessListeners[i](data)\n\t\t\t}\n\t\t}\n\t},\n\tlastLength: 0, // for fallback\n\t/**\n\t * Listen to a given type of events.\n\t *\n\t * @param {String} type event type\n\t * @param {Function} callback event callback\n\t */\n\tlisten: function(type, callback) {\n\t\tif (callback && callback.call) {\n\n\t\t\tif (type) {\n\t\t\t\tif (this.useFallBack) {\n\t\t\t\t\tif (!this.listeners[type]) {\n\t\t\t\t\t\tthis.listeners[type] = []\n\t\t\t\t\t}\n\t\t\t\t\tthis.listeners[type].push(callback)\n\t\t\t\t} else {\n\t\t\t\t\tthis.source.addEventListener(type, function(e) {\n\t\t\t\t\t\tif (typeof e.data !== 'undefined') {\n\t\t\t\t\t\t\tcallback(JSON.parse(e.data))\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcallback('')\n\t\t\t\t\t\t}\n\t\t\t\t\t}, false)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.typelessListeners.push(callback)\n\t\t\t}\n\t\t}\n\t},\n\t/**\n\t * Closes this event source.\n\t */\n\tclose: function() {\n\t\tthis.closed = true\n\t\tif (typeof this.source !== 'undefined') {\n\t\t\tthis.source.close()\n\t\t}\n\t}\n}\n\nexport default OCEventSource\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\n/** @typedef {import('jquery')} jQuery */\nimport $ from 'jquery'\n\nimport { menuSpeed } from './constants'\n\nexport let currentMenu = null\nexport let currentMenuToggle = null\n\n/**\n * For menu toggling\n *\n * @param {jQuery} $toggle the toggle element\n * @param {jQuery} $menuEl the menu container element\n * @param {Function | undefined} toggle callback invoked everytime the menu is opened\n * @param {boolean} headerMenu is this a top right header menu?\n * @return {void}\n */\nexport const registerMenu = function($toggle, $menuEl, toggle, headerMenu) {\n\t$menuEl.addClass('menu')\n\tconst isClickableElement = $toggle.prop('tagName') === 'A' || $toggle.prop('tagName') === 'BUTTON'\n\n\t// On link and button, the enter key trigger a click event\n\t// Only use the click to avoid two fired events\n\t$toggle.on(isClickableElement ? 'click.menu' : 'click.menu keyup.menu', function(event) {\n\t\t// prevent the link event (append anchor to URL)\n\t\tevent.preventDefault()\n\n\t\t// allow enter key as a trigger\n\t\tif (event.key && event.key !== 'Enter') {\n\t\t\treturn\n\t\t}\n\n\t\tif ($menuEl.is(currentMenu)) {\n\t\t\thideMenus()\n\t\t\treturn\n\t\t} else if (currentMenu) {\n\t\t\t// another menu was open?\n\t\t\t// close it\n\t\t\thideMenus()\n\t\t}\n\n\t\tif (headerMenu === true) {\n\t\t\t$menuEl.parent().addClass('openedMenu')\n\t\t}\n\n\t\t// Set menu to expanded\n\t\t$toggle.attr('aria-expanded', true)\n\n\t\t$menuEl.slideToggle(menuSpeed, toggle)\n\t\tcurrentMenu = $menuEl\n\t\tcurrentMenuToggle = $toggle\n\t})\n}\n\n/**\n * Unregister a previously registered menu\n *\n * @param {jQuery} $toggle the toggle element\n * @param {jQuery} $menuEl the menu container element\n */\nexport const unregisterMenu = ($toggle, $menuEl) => {\n\t// close menu if opened\n\tif ($menuEl.is(currentMenu)) {\n\t\thideMenus()\n\t}\n\t$toggle.off('click.menu').removeClass('menutoggle')\n\t$menuEl.removeClass('menu')\n}\n\n/**\n * Hides any open menus\n *\n * @param {Function} complete callback when the hiding animation is done\n */\nexport const hideMenus = function(complete) {\n\tif (currentMenu) {\n\t\tconst lastMenu = currentMenu\n\t\tcurrentMenu.trigger(new $.Event('beforeHide'))\n\t\tcurrentMenu.slideUp(menuSpeed, function() {\n\t\t\tlastMenu.trigger(new $.Event('afterHide'))\n\t\t\tif (complete) {\n\t\t\t\tcomplete.apply(this, arguments)\n\t\t\t}\n\t\t})\n\t}\n\n\t// Set menu to closed\n\t$('.menutoggle').attr('aria-expanded', false)\n\tif (currentMenuToggle) {\n\t\tcurrentMenuToggle.attr('aria-expanded', false)\n\t}\n\n\t$('.openedMenu').removeClass('openedMenu')\n\tcurrentMenu = null\n\tcurrentMenuToggle = null\n}\n\n/**\n * Shows a given element as menu\n *\n * @param {object} [$toggle=null] menu toggle\n * @param {object} $menuEl menu element\n * @param {Function} complete callback when the showing animation is done\n */\nexport const showMenu = ($toggle, $menuEl, complete) => {\n\tif ($menuEl.is(currentMenu)) {\n\t\treturn\n\t}\n\thideMenus()\n\tcurrentMenu = $menuEl\n\tcurrentMenuToggle = $toggle\n\t$menuEl.trigger(new $.Event('beforeShow'))\n\t$menuEl.show()\n\t$menuEl.trigger(new $.Event('afterShow'))\n\t// no animation\n\tif (_.isFunction(complete)) {\n\t\tcomplete()\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const coreApps = ['', 'admin', 'log', 'core/search', 'core', '3rdparty']\nexport const menuSpeed = 50\nexport const PERMISSION_NONE = 0\nexport const PERMISSION_CREATE = 4\nexport const PERMISSION_READ = 1\nexport const PERMISSION_UPDATE = 2\nexport const PERMISSION_DELETE = 8\nexport const PERMISSION_SHARE = 16\nexport const PERMISSION_ALL = 31\nexport const TAG_FAVORITE = '_$!<Favorite>!$_'\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst isAdmin = !!window._oc_isadmin\n\n/**\n * Returns whether the current user is an administrator\n *\n * @return {boolean} true if the user is an admin, false otherwise\n * @since 9.0.0\n */\nexport const isUserAdmin = () => isAdmin\n","/**\n * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.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 Handlebars from 'handlebars'\nimport {\n\tloadTranslations,\n\ttranslate,\n\ttranslatePlural,\n\tregister,\n\tunregister,\n} from '@nextcloud/l10n'\n\n/**\n * L10N namespace with localization functions.\n *\n * @namespace OC.L10n\n * @deprecated 26.0.0 use https://www.npmjs.com/package/@nextcloud/l10n\n */\nconst L10n = {\n\n\t/**\n\t * Load an app's translation bundle if not loaded already.\n\t *\n\t * @deprecated 26.0.0 use `loadTranslations` from https://www.npmjs.com/package/@nextcloud/l10n\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: loadTranslations,\n\n\t/**\n\t * Register an app's translation bundle.\n\t *\n\t * @deprecated 26.0.0 use `register` from https://www.npmjs.com/package/@nextcloud/l10\n\t *\n\t * @param {string} appName name of the app\n\t * @param {Object<string, string>} bundle bundle\n\t */\n\tregister,\n\n\t/**\n\t * @private\n\t * @deprecated 26.0.0 use `unregister` from https://www.npmjs.com/package/@nextcloud/l10n\n\t */\n\t_unregister: unregister,\n\n\t/**\n\t * Translate a string\n\t *\n\t * @deprecated 26.0.0 use `translate` from https://www.npmjs.com/package/@nextcloud/l10n\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,\n\n\t/**\n\t * Translate a plural string\n\t *\n\t * @deprecated 26.0.0 use `translatePlural` from https://www.npmjs.com/package/@nextcloud/l10n\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,\n}\n\nexport default L10n\n\nHandlebars.registerHelper('t', function(app, text) {\n\treturn 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\tconst $buttonrow = $dialog.find('.oc-dialog-buttonrow')\n\t\t\t\t$buttonrow.addClass('aside')\n\n\t\t\t\tconst $buttons = $buttonrow.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/functions/formatFileSize.html\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 from './l10n'\nimport {\n\tgetCanonicalLocale,\n\tgetLanguage,\n\tgetLocale,\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\t/**\n\t * @deprecated 26.0.0 use `getLocale` from https://www.npmjs.com/package/@nextcloud/l10n\n\t */\n\tgetLocale,\n\t/**\n\t * @deprecated 26.0.0 use `getLanguage` from https://www.npmjs.com/package/@nextcloud/l10n\n\t */\n\tgetLanguage,\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¶m2=abcde¶m3=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 render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"guest-box login-box\"},[(!_vm.hideLoginForm || _vm.directLogin)?_c('div',[_c('transition',{attrs:{\"name\":\"fade\",\"mode\":\"out-in\"}},[(!_vm.passwordlessLogin && !_vm.resetPassword && _vm.resetPasswordTarget === '')?_c('div',[_c('LoginForm',{attrs:{\"username\":_vm.user,\"redirect-url\":_vm.redirectUrl,\"direct-login\":_vm.directLogin,\"messages\":_vm.messages,\"errors\":_vm.errors,\"throttle-delay\":_vm.throttleDelay,\"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',{staticClass:\"login-box__link\",attrs:{\"id\":\"lost-password\",\"href\":_vm.resetPasswordLink}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Forgot password?'))+\"\\n\\t\\t\\t\\t\")]):(_vm.canResetPassword && !_vm.resetPassword)?_c('a',{staticClass:\"login-box__link\",attrs:{\"id\":\"lost-password\",\"href\":_vm.resetPasswordLink},on:{\"click\":function($event){$event.preventDefault();_vm.resetPassword = true}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Forgot password?'))+\"\\n\\t\\t\\t\\t\")]):_vm._e(),_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\\t\"+_vm._s(_vm.t('core', 'Log in with a device'))+\"\\n\\t\\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\\t\"+_vm._s(_vm.t('core', 'Log in with a device'))+\"\\n\\t\\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,\"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',{staticClass:\"login-box__link\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.passwordlessLogin = false}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Back'))+\"\\n\\t\\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},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},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('NcNoteCard',{attrs:{\"type\":\"warning\",\"title\":_vm.t('core', 'Login form is disabled.')}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Please contact your administrator.'))+\"\\n\\t\\t\\t\")])],1)],1),_vm._v(\" \"),_c('div',{staticClass:\"alternative-logins\",attrs:{\"id\":\"alternative-logins\"}},_vm._l((_vm.alternativeLogins),function(alternativeLogin,index){return _c('NcButton',{key:index,class:[alternativeLogin.class],attrs:{\"type\":\"secondary\",\"wide\":true,\"role\":\"link\",\"href\":alternativeLogin.href}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(alternativeLogin.name)+\"\\n\\t\\t\")])}),1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./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<NcButton type=\"primary\"\n\t\tnative-type=\"submit\"\n\t\t:wide=\"true\"\n\t\t@click=\"$emit('click')\">\n\t\t{{ !loading ? value : valueLoading }}\n\t\t<template #icon>\n\t\t\t<div v-if=\"loading\" class=\"submit-wrapper__icon icon-loading-small-dark\" />\n\t\t\t<ArrowRight v-else class=\"submit-wrapper__icon\" />\n\t\t</template>\n\t</NcButton>\n</template>\n\n<script>\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton'\nimport ArrowRight from 'vue-material-design-icons/ArrowRight.vue'\n\nexport default {\n\tname: 'LoginButton',\n\tcomponents: {\n\t\tArrowRight,\n\t\tNcButton,\n\t},\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: t('core', 'Log in'),\n\t\t},\n\t\tvalueLoading: {\n\t\t\ttype: String,\n\t\t\tdefault: t('core', 'Logging in …'),\n\t\t},\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 lang=\"scss\" scoped>\n.button-vue {\n\tmargin-top: .5rem;\n}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginButton.vue?vue&type=style&index=0&id=756414a8&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginButton.vue?vue&type=style&index=0&id=756414a8&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./LoginButton.vue?vue&type=template&id=756414a8&scoped=true&\"\nimport script from \"./LoginButton.vue?vue&type=script&lang=js&\"\nexport * from \"./LoginButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LoginButton.vue?vue&type=style&index=0&id=756414a8&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"756414a8\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcButton',{attrs:{\"type\":\"primary\",\"native-type\":\"submit\",\"wide\":true},on:{\"click\":function($event){return _vm.$emit('click')}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.loading)?_c('div',{staticClass:\"submit-wrapper__icon icon-loading-small-dark\"}):_c('ArrowRight',{staticClass:\"submit-wrapper__icon\"})]},proxy:true}])},[_vm._v(\"\\n\\t\"+_vm._s(!_vm.loading ? _vm.value : _vm.valueLoading)+\"\\n\\t\")])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./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\tclass=\"login-form\"\n\t\tmethod=\"post\"\n\t\tname=\"login\"\n\t\t:action=\"loginActionUrl\"\n\t\t@submit=\"submit\">\n\t\t<fieldset class=\"login-form__fieldset\" data-login-form>\n\t\t\t<NcNoteCard v-if=\"apacheAuthFailed\"\n\t\t\t\t:title=\"t('core', 'Server side authentication failed!')\"\n\t\t\t\ttype=\"warning\">\n\t\t\t\t{{ t('core', 'Please contact your administrator.') }}\n\t\t\t</NcNoteCard>\n\t\t\t<NcNoteCard v-if=\"messages.length > 0\">\n\t\t\t\t<div v-for=\"(message, index) in messages\"\n\t\t\t\t\t:key=\"index\">\n\t\t\t\t\t{{ message }}<br>\n\t\t\t\t</div>\n\t\t\t</NcNoteCard>\n\t\t\t<NcNoteCard v-if=\"internalException\"\n\t\t\t\t:class=\"t('core', 'An internal error occurred.')\"\n\t\t\t\ttype=\"warning\">\n\t\t\t\t{{ t('core', 'Please try again or contact your administrator.') }}\n\t\t\t</NcNoteCard>\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<h2 class=\"login-form__headline\" data-login-form-headline v-html=\"headline\" />\n\t\t\t<NcTextField id=\"user\"\n\t\t\t\tref=\"user\"\n\t\t\t\t:label=\"t('core', 'Account name or email')\"\n\t\t\t\t:label-visible=\"true\"\n\t\t\t\tname=\"user\"\n\t\t\t\t:value.sync=\"user\"\n\t\t\t\t:class=\"{shake: invalidPassword}\"\n\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t:spellchecking=\"false\"\n\t\t\t\t:autocomplete=\"autoCompleteAllowed ? 'username' : 'off'\"\n\t\t\t\trequired\n\t\t\t\tdata-login-form-input-user\n\t\t\t\t@change=\"updateUsername\" />\n\n\t\t\t<NcPasswordField id=\"password\"\n\t\t\t\tref=\"password\"\n\t\t\t\tname=\"password\"\n\t\t\t\t:label-visible=\"true\"\n\t\t\t\t:class=\"{shake: invalidPassword}\"\n\t\t\t\t:value.sync=\"password\"\n\t\t\t\t:spellchecking=\"false\"\n\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t:autocomplete=\"autoCompleteAllowed ? 'current-password' : 'off'\"\n\t\t\t\t:label=\"t('core', 'Password')\"\n\t\t\t\t:helper-text=\"errorLabel\"\n\t\t\t\t:error=\"isError\"\n\t\t\t\tdata-login-form-input-password\n\t\t\t\trequired />\n\n\t\t\t<LoginButton data-login-form-submit :loading=\"loading\" />\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 { generateUrl, imagePath } from '@nextcloud/router'\n\nimport NcPasswordField from '@nextcloud/vue/dist/Components/NcPasswordField.js'\nimport NcTextField from '@nextcloud/vue/dist/Components/NcTextField.js'\nimport NcNoteCard from '@nextcloud/vue/dist/Components/NcNoteCard.js'\n\nimport LoginButton from './LoginButton.vue'\n\nexport default {\n\tname: 'LoginForm',\n\n\tcomponents: {\n\t\tLoginButton,\n\t\tNcPasswordField,\n\t\tNcTextField,\n\t\tNcNoteCard,\n\t},\n\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\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\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t\ttimezone: (new Intl.DateTimeFormat())?.resolvedOptions()?.timeZone,\n\t\t\ttimezoneOffset: (-new Date().getTimezoneOffset() / 60),\n\t\t\theadline: t('core', 'Log in to {productName}', { productName: OC.theme.name }),\n\t\t\tuser: '',\n\t\t\tpassword: '',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tisError() {\n\t\t\treturn this.invalidPassword || this.userDisabled\n\t\t\t\t|| this.throttleDelay > 5000\n\t\t},\n\t\terrorLabel() {\n\t\t\tif (this.invalidPassword) {\n\t\t\t\treturn t('core', 'Wrong username or password.')\n\t\t\t}\n\t\t\tif (this.userDisabled) {\n\t\t\t\treturn t('core', 'User disabled')\n\t\t\t}\n\t\t\tif (this.throttleDelay > 5000) {\n\t\t\t\treturn 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}\n\t\t\treturn undefined\n\t\t},\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\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\n\tmounted() {\n\t\tif (this.username === '') {\n\t\t\tthis.$refs.user.$refs.inputField.$refs.input.focus()\n\t\t} else {\n\t\t\tthis.user = this.username\n\t\t\tthis.$refs.password.$refs.inputField.$refs.input.focus()\n\t\t}\n\t},\n\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.$emit('submit')\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.login-form {\n\ttext-align: left;\n\tfont-size: 1rem;\n\n\t&__fieldset {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: .5rem;\n\t}\n\n\t&__headline {\n\t\ttext-align: center;\n\t}\n}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginForm.vue?vue&type=style&index=0&id=5bd351bc&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginForm.vue?vue&type=style&index=0&id=5bd351bc&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./LoginForm.vue?vue&type=template&id=5bd351bc&scoped=true&\"\nimport script from \"./LoginForm.vue?vue&type=script&lang=js&\"\nexport * from \"./LoginForm.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LoginForm.vue?vue&type=style&index=0&id=5bd351bc&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5bd351bc\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('form',{ref:\"loginForm\",staticClass:\"login-form\",attrs:{\"method\":\"post\",\"name\":\"login\",\"action\":_vm.loginActionUrl},on:{\"submit\":_vm.submit}},[_c('fieldset',{staticClass:\"login-form__fieldset\",attrs:{\"data-login-form\":\"\"}},[(_vm.apacheAuthFailed)?_c('NcNoteCard',{attrs:{\"title\":_vm.t('core', 'Server side authentication failed!'),\"type\":\"warning\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Please contact your administrator.'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.messages.length > 0)?_c('NcNoteCard',_vm._l((_vm.messages),function(message,index){return _c('div',{key:index},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(message)),_c('br')])}),0):_vm._e(),_vm._v(\" \"),(_vm.internalException)?_c('NcNoteCard',{class:_vm.t('core', 'An internal error occurred.'),attrs:{\"type\":\"warning\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Please try again or contact your administrator.'))+\"\\n\\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('h2',{staticClass:\"login-form__headline\",attrs:{\"data-login-form-headline\":\"\"},domProps:{\"innerHTML\":_vm._s(_vm.headline)}}),_vm._v(\" \"),_c('NcTextField',{ref:\"user\",class:{shake: _vm.invalidPassword},attrs:{\"id\":\"user\",\"label\":_vm.t('core', 'Account name or email'),\"label-visible\":true,\"name\":\"user\",\"value\":_vm.user,\"autocapitalize\":\"none\",\"spellchecking\":false,\"autocomplete\":_vm.autoCompleteAllowed ? 'username' : 'off',\"required\":\"\",\"data-login-form-input-user\":\"\"},on:{\"update:value\":function($event){_vm.user=$event},\"change\":_vm.updateUsername}}),_vm._v(\" \"),_c('NcPasswordField',{ref:\"password\",class:{shake: _vm.invalidPassword},attrs:{\"id\":\"password\",\"name\":\"password\",\"label-visible\":true,\"value\":_vm.password,\"spellchecking\":false,\"autocapitalize\":\"none\",\"autocomplete\":_vm.autoCompleteAllowed ? 'current-password' : 'off',\"label\":_vm.t('core', 'Password'),\"helper-text\":_vm.errorLabel,\"error\":_vm.isError,\"data-login-form-input-password\":\"\",\"required\":\"\"},on:{\"update:value\":function($event){_vm.password=$event}}}),_vm._v(\" \"),_c('LoginButton',{attrs:{\"data-login-form-submit\":\"\",\"loading\":_vm.loading}}),_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()],1)])\n}\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@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\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 redirectUrl = this.redirectUrl\n\n\t\t\treturn finishAuthentication(JSON.stringify(challenge))\n\t\t\t\t.then(({ defaultRedirectUrl }) => {\n\t\t\t\t\tconsole.debug('Logged in redirecting')\n\t\t\t\t\t// Redirect url might be false so || should be used instead of ??.\n\t\t\t\t\twindow.location.href = redirectUrl || defaultRedirectUrl\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=20256748&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PasswordLessLoginForm.vue?vue&type=style&index=0&id=20256748&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./PasswordLessLoginForm.vue?vue&type=template&id=20256748&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=20256748&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"20256748\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;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},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()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./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 class=\"login-form\" @submit.prevent=\"submit\">\n\t\t<fieldset class=\"login-form__fieldset\">\n\t\t\t<NcTextField id=\"user\"\n\t\t\t\t:value.sync=\"user\"\n\t\t\t\tname=\"user\"\n\t\t\t\tautocapitalize=\"off\"\n\t\t\t\t:label=\"t('core', 'Account name or email')\"\n\t\t\t\t:label-visible=\"true\"\n\t\t\t\trequired\n\t\t\t\t@change=\"updateUsername\" />\n\t\t\t<LoginButton :value=\"t('core', 'Reset password')\" />\n\n\t\t\t<NcNoteCard v-if=\"message === 'send-success'\"\n\t\t\t\ttype=\"success\">\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</NcNoteCard>\n\t\t\t<NcNoteCard v-else-if=\"message === 'send-error'\"\n\t\t\t\ttype=\"error\">\n\t\t\t\t{{ t('core', 'Couldn\\'t send reset email. Please contact your administrator.') }}\n\t\t\t</NcNoteCard>\n\t\t\t<NcNoteCard v-else-if=\"message === 'reset-error'\"\n\t\t\t\ttype=\"error\">\n\t\t\t\t{{ t('core', 'Password cannot be changed. Please contact your administrator.') }}\n\t\t\t</NcNoteCard>\n\n\t\t\t<a class=\"login-form__link\"\n\t\t\t\thref=\"#\"\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'\nimport { generateUrl } from '@nextcloud/router'\nimport LoginButton from './LoginButton.vue'\nimport NcTextField from '@nextcloud/vue/dist/Components/NcTextField.js'\nimport NcNoteCard from '@nextcloud/vue/dist/Components/NcNoteCard.js'\n\nexport default {\n\tname: 'ResetPassword',\n\tcomponents: {\n\t\tLoginButton,\n\t\tNcNoteCard,\n\t\tNcTextField,\n\t},\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},\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 lang=\"scss\" scoped>\n.login-form {\n\ttext-align: left;\n\tfont-size: 1rem;\n\n\t&__fieldset {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: .5rem;\n\t}\n\n\t&__link {\n\t\tdisplay: block;\n\t\tfont-weight: normal !important;\n\t\tpadding-bottom: 1rem;\n\t\tcursor: pointer;\n\t\tfont-size: var(--default-font-size);\n\t\ttext-align: center;\n\t\tpadding: .5rem 1rem 1rem 1rem;\n\t}\n}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResetPassword.vue?vue&type=style&index=0&id=27cabc60&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResetPassword.vue?vue&type=style&index=0&id=27cabc60&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ResetPassword.vue?vue&type=template&id=27cabc60&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=27cabc60&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"27cabc60\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('form',{staticClass:\"login-form\",on:{\"submit\":function($event){$event.preventDefault();return _vm.submit.apply(null, arguments)}}},[_c('fieldset',{staticClass:\"login-form__fieldset\"},[_c('NcTextField',{attrs:{\"id\":\"user\",\"value\":_vm.user,\"name\":\"user\",\"autocapitalize\":\"off\",\"label\":_vm.t('core', 'Account name or email'),\"label-visible\":true,\"required\":\"\"},on:{\"update:value\":function($event){_vm.user=$event},\"change\":_vm.updateUsername}}),_vm._v(\" \"),_c('LoginButton',{attrs:{\"value\":_vm.t('core', 'Reset password')}}),_vm._v(\" \"),(_vm.message === 'send-success')?_c('NcNoteCard',{attrs:{\"type\":\"success\"}},[_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('NcNoteCard',{attrs:{\"type\":\"error\"}},[_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('NcNoteCard',{attrs:{\"type\":\"error\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Password cannot be changed. Please contact your administrator.'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('a',{staticClass:\"login-form__link\",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\")])],1)])\n}\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<LoginButton :loading=\"loading\"\n\t\t\t\t:value=\"t('core', 'Reset password')\"\n\t\t\t\t:value-loading=\"t('core', 'Resetting password')\" />\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'\nimport LoginButton from './LoginButton.vue'\n\nexport default {\n\tname: 'UpdatePassword',\n\tcomponents: {\n\t\tLoginButton,\n\t},\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},\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=4dc21d74&prod&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=4dc21d74&prod&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UpdatePassword.vue?vue&type=template&id=4dc21d74&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=4dc21d74&prod&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 \"4dc21d74\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;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('LoginButton',{attrs:{\"loading\":_vm.loading,\"value\":_vm.t('core', 'Reset password'),\"value-loading\":_vm.t('core', 'Resetting password')}}),_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()],1)])\n}\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 class=\"guest-box login-box\">\n\t\t<div v-if=\"!hideLoginForm || directLogin\">\n\t\t\t<transition name=\"fade\" mode=\"out-in\">\n\t\t\t\t<div v-if=\"!passwordlessLogin && !resetPassword && resetPasswordTarget === ''\">\n\t\t\t\t\t<LoginForm :username.sync=\"user\"\n\t\t\t\t\t\t:redirect-url=\"redirectUrl\"\n\t\t\t\t\t\t:direct-login=\"directLogin\"\n\t\t\t\t\t\t:messages=\"messages\"\n\t\t\t\t\t\t:errors=\"errors\"\n\t\t\t\t\t\t:throttle-delay=\"throttleDelay\"\n\t\t\t\t\t\t:auto-complete-allowed=\"autoCompleteAllowed\"\n\t\t\t\t\t\t@submit=\"loading = true\" />\n\t\t\t\t\t<a v-if=\"canResetPassword && resetPasswordLink !== ''\"\n\t\t\t\t\t\tid=\"lost-password\"\n\t\t\t\t\t\tclass=\"login-box__link\"\n\t\t\t\t\t\t:href=\"resetPasswordLink\">\n\t\t\t\t\t\t{{ t('core', 'Forgot password?') }}\n\t\t\t\t\t</a>\n\t\t\t\t\t<a v-else-if=\"canResetPassword && !resetPassword\"\n\t\t\t\t\t\tid=\"lost-password\"\n\t\t\t\t\t\tclass=\"login-box__link\"\n\t\t\t\t\t\t:href=\"resetPasswordLink\"\n\t\t\t\t\t\t@click.prevent=\"resetPassword = true\">\n\t\t\t\t\t\t{{ t('core', 'Forgot password?') }}\n\t\t\t\t\t</a>\n\t\t\t\t\t<template v-if=\"hasPasswordless\">\n\t\t\t\t\t\t<div v-if=\"countAlternativeLogins\"\n\t\t\t\t\t\t\tclass=\"alternative-logins\">\n\t\t\t\t\t\t\t<a v-if=\"hasPasswordless\"\n\t\t\t\t\t\t\t\tclass=\"button\"\n\t\t\t\t\t\t\t\t:class=\"{ 'single-alt-login-option': countAlternativeLogins }\"\n\t\t\t\t\t\t\t\thref=\"#\"\n\t\t\t\t\t\t\t\t@click.prevent=\"passwordlessLogin = true\">\n\t\t\t\t\t\t\t\t{{ t('core', 'Log in with a device') }}\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<a v-else\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</template>\n\t\t\t\t</div>\n\t\t\t\t<div v-else-if=\"!loading && passwordlessLogin\"\n\t\t\t\t\tkey=\"reset\"\n\t\t\t\t\tclass=\"login-additional\">\n\t\t\t\t\t<PasswordLessLoginForm :username.sync=\"user\"\n\t\t\t\t\t\t:redirect-url=\"redirectUrl\"\n\t\t\t\t\t\t:auto-complete-allowed=\"autoCompleteAllowed\"\n\t\t\t\t\t\t:is-https=\"isHttps\"\n\t\t\t\t\t\t:is-localhost=\"isLocalhost\"\n\t\t\t\t\t\t:has-public-key-credential=\"hasPublicKeyCredential\"\n\t\t\t\t\t\t@submit=\"loading = true\" />\n\t\t\t\t\t<a href=\"#\" class=\"login-box__link\" @click.prevent=\"passwordlessLogin = false\">\n\t\t\t\t\t\t{{ t('core', 'Back') }}\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t\t<div v-else-if=\"!loading && canResetPassword\"\n\t\t\t\t\tkey=\"reset\"\n\t\t\t\t\tclass=\"login-additional\">\n\t\t\t\t\t<div class=\"lost-password-container\">\n\t\t\t\t\t\t<ResetPassword v-if=\"resetPassword\"\n\t\t\t\t\t\t\t:username.sync=\"user\"\n\t\t\t\t\t\t\t:reset-password-link=\"resetPasswordLink\"\n\t\t\t\t\t\t\t@abort=\"resetPassword = false\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div v-else-if=\"resetPasswordTarget !== ''\">\n\t\t\t\t\t<UpdatePassword :username.sync=\"user\"\n\t\t\t\t\t\t:reset-password-target=\"resetPasswordTarget\"\n\t\t\t\t\t\t@done=\"passwordResetFinished\" />\n\t\t\t\t</div>\n\t\t\t</transition>\n\t\t</div>\n\t\t<div v-else>\n\t\t\t<transition name=\"fade\" mode=\"out-in\">\n\t\t\t\t<NcNoteCard type=\"warning\" :title=\"t('core', 'Login form is disabled.')\">\n\t\t\t\t\t{{ t('core', 'Please contact your administrator.') }}\n\t\t\t\t</NcNoteCard>\n\t\t\t</transition>\n\t\t</div>\n\n\t\t<div id=\"alternative-logins\" class=\"alternative-logins\">\n\t\t\t<NcButton v-for=\"(alternativeLogin, index) in alternativeLogins\"\n\t\t\t\t:key=\"index\"\n\t\t\t\ttype=\"secondary\"\n\t\t\t\t:wide=\"true\"\n\t\t\t\t:class=\"[alternativeLogin.class]\"\n\t\t\t\trole=\"link\"\n\t\t\t\t:href=\"alternativeLogin.href\">\n\t\t\t\t{{ alternativeLogin.name }}\n\t\t\t</NcButton>\n\t\t</div>\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'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport NcNoteCard from '@nextcloud/vue/dist/Components/NcNoteCard.js'\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\tNcButton,\n\t\tNcNoteCard,\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\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\talternativeLogins: loadState('core', 'alternativeLogins', []),\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\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 lang=\"scss\">\nbody {\n\tfont-size: var(--default-font-size);\n}\n\n.login-box {\n\twidth: 300px;\n\n\t&__link {\n\t\tdisplay: block;\n\t\tpadding: 1rem;\n\t\tfont-size: var(--default-font-size);\n\t\ttext-align: center;\n\t\tfont-weight: normal !important;\n\t}\n}\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\n.alternative-logins {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 0.75rem;\n\n\t.button-vue {\n\t\tbox-sizing: border-box;\n\t}\n}\n</style>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./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/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=style&index=0&id=7b955242&prod&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=style&index=0&id=7b955242&prod&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Login.vue?vue&type=template&id=7b955242&\"\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&id=7b955242&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n 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, \".button-vue[data-v-756414a8]{margin-top:.5rem}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/login/LoginButton.vue\"],\"names\":[],\"mappings\":\"AACA,6BACC,gBAAA\",\"sourcesContent\":[\"\\n.button-vue {\\n\\tmargin-top: .5rem;\\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, \".login-form[data-v-5bd351bc]{text-align:left;font-size:1rem}.login-form__fieldset[data-v-5bd351bc]{width:100%;display:flex;flex-direction:column;gap:.5rem}.login-form__headline[data-v-5bd351bc]{text-align:center}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/login/LoginForm.vue\"],\"names\":[],\"mappings\":\"AACA,6BACC,eAAA,CACA,cAAA,CAEA,uCACC,UAAA,CACA,YAAA,CACA,qBAAA,CACA,SAAA,CAGD,uCACC,iBAAA\",\"sourcesContent\":[\"\\n.login-form {\\n\\ttext-align: left;\\n\\tfont-size: 1rem;\\n\\n\\t&__fieldset {\\n\\t\\twidth: 100%;\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\tgap: .5rem;\\n\\t}\\n\\n\\t&__headline {\\n\\t\\ttext-align: center;\\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, \".body-login-container.update[data-v-20256748]{margin:15px 0}.body-login-container.update.form__message-box[data-v-20256748]{width:240px;margin:5px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/login/PasswordLessLoginForm.vue\"],\"names\":[],\"mappings\":\"AACA,8CACC,aAAA,CAEA,gEACC,WAAA,CACA,UAAA\",\"sourcesContent\":[\"\\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, \".login-form[data-v-27cabc60]{text-align:left;font-size:1rem}.login-form__fieldset[data-v-27cabc60]{width:100%;display:flex;flex-direction:column;gap:.5rem}.login-form__link[data-v-27cabc60]{display:block;font-weight:normal !important;padding-bottom:1rem;cursor:pointer;font-size:var(--default-font-size);text-align:center;padding:.5rem 1rem 1rem 1rem}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/login/ResetPassword.vue\"],\"names\":[],\"mappings\":\"AACA,6BACC,eAAA,CACA,cAAA,CAEA,uCACC,UAAA,CACA,YAAA,CACA,qBAAA,CACA,SAAA,CAGD,mCACC,aAAA,CACA,6BAAA,CACA,mBAAA,CACA,cAAA,CACA,kCAAA,CACA,iBAAA,CACA,4BAAA\",\"sourcesContent\":[\"\\n.login-form {\\n\\ttext-align: left;\\n\\tfont-size: 1rem;\\n\\n\\t&__fieldset {\\n\\t\\twidth: 100%;\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\tgap: .5rem;\\n\\t}\\n\\n\\t&__link {\\n\\t\\tdisplay: block;\\n\\t\\tfont-weight: normal !important;\\n\\t\\tpadding-bottom: 1rem;\\n\\t\\tcursor: pointer;\\n\\t\\tfont-size: var(--default-font-size);\\n\\t\\ttext-align: center;\\n\\t\\tpadding: .5rem 1rem 1rem 1rem;\\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, \"body{font-size:var(--default-font-size)}.login-box{width:300px}.login-box__link{display:block;padding:1rem;font-size:var(--default-font-size);text-align:center;font-weight:normal !important}.fade-enter-active,.fade-leave-active{transition:opacity .3s}.fade-enter,.fade-leave-to{opacity:0}.alternative-logins{display:flex;flex-direction:column;gap:.75rem}.alternative-logins .button-vue{box-sizing:border-box}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/views/Login.vue\"],\"names\":[],\"mappings\":\"AACA,KACC,kCAAA,CAGD,WACC,WAAA,CAEA,iBACC,aAAA,CACA,YAAA,CACA,kCAAA,CACA,iBAAA,CACA,6BAAA,CAGF,sCACC,sBAAA,CAED,2BACC,SAAA,CAGD,oBACC,YAAA,CACA,qBAAA,CACA,UAAA,CAEA,gCACC,qBAAA\",\"sourcesContent\":[\"\\nbody {\\n\\tfont-size: var(--default-font-size);\\n}\\n\\n.login-box {\\n\\twidth: 300px;\\n\\n\\t&__link {\\n\\t\\tdisplay: block;\\n\\t\\tpadding: 1rem;\\n\\t\\tfont-size: var(--default-font-size);\\n\\t\\ttext-align: center;\\n\\t\\tfont-weight: normal !important;\\n\\t}\\n}\\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\\n.alternative-logins {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: 0.75rem;\\n\\n\\t.button-vue {\\n\\t\\tbox-sizing: border-box;\\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, \"\\nfieldset[data-v-4dc21d74] {\\n\\ttext-align: center;\\n}\\ninput[type=submit][data-v-4dc21d74] {\\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<LoginButton :loading=\\\"loading\\\"\\n\\t\\t\\t\\t:value=\\\"t('core', 'Reset password')\\\"\\n\\t\\t\\t\\t:value-loading=\\\"t('core', 'Resetting password')\\\" />\\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'\\nimport LoginButton from './LoginButton.vue'\\n\\nexport default {\\n\\tname: 'UpdatePassword',\\n\\tcomponents: {\\n\\t\\tLoginButton,\\n\\t},\\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},\\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","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.program(5, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":1},\"end\":{\"line\":10,\"column\":8}}})) != null ? stack1 : \"\");\n},\"2\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileTitle\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":2},\"end\":{\"line\":7,\"column\":9}}})) != null ? stack1 : \"\");\n},\"3\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t\t<a class=\\\"profile-link--avatar\\\" href=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1), depth0))\n + \"\\\">\\n\t\t\t\t<img src=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32\\\" class=\\\"avatar\\\" srcset=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32 1x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=64 2x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=128 4x\\\" alt=\\\"\\\">\\n\t\t\t</a>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t<img src=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32\\\" class=\\\"avatar\\\" srcset=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32 1x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=64 2x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=128 4x\\\" alt=\\\"\\\">\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.program(11, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":12,\"column\":1},\"end\":{\"line\":20,\"column\":8}}})) != null ? stack1 : \"\");\n},\"8\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileTitle\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":13,\"column\":2},\"end\":{\"line\":17,\"column\":9}}})) != null ? stack1 : \"\");\n},\"9\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t\t<a class=\\\"profile-link--avatar\\\" href=\\\"\"\n + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1), depth0))\n + \"\\\">\\n\t\t\t\t<div class=\\\"avatar\\\"></div>\\n\t\t\t</a>\\n\";\n},\"11\":function(container,depth0,helpers,partials,data) {\n return \"\t\t<div class=\\\"avatar\\\"></div>\\n\";\n},\"13\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileTitle\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(14, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":23,\"column\":1},\"end\":{\"line\":29,\"column\":8}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(16, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":30,\"column\":1},\"end\":{\"line\":34,\"column\":8}}})) != null ? stack1 : \"\");\n},\"14\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t<a class=\\\"body profile-link--full-name\\\" href=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1), depth0))\n + \"\\\">\\n\t\t\t<div class=\\\"full-name\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"fullName\") : stack1), depth0))\n + \"</div>\\n\t\t\t<div class=\\\"last-message\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"lastMessage\") : stack1), depth0))\n + \"</div>\\n\t\t\t<div class=\\\"email-address\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"emailAddresses\") : stack1), depth0))\n + \"</div>\\n\t\t</a>\\n\";\n},\"16\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t<a class=\\\"top-action\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"hyperlink\") : stack1), depth0))\n + \"\\\" title=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\" aria-label=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n\t\t\t<img src=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"icon\") : stack1), depth0))\n + \"\\\" alt=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n\t\t</a>\\n\";\n},\"18\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(19, data, 0),\"inverse\":container.program(21, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":35,\"column\":0},\"end\":{\"line\":50,\"column\":0}}})) != null ? stack1 : \"\");\n},\"19\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t<a class=\\\"body\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"hyperlink\") : stack1), depth0))\n + \"\\\">\\n\t\t<div class=\\\"full-name\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"fullName\") : stack1), depth0))\n + \"</div>\\n\t\t<div class=\\\"last-message\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"lastMessage\") : stack1), depth0))\n + \"</div>\\n\t\t<div class=\\\"email-address\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"emailAddresses\") : stack1), depth0))\n + \"</div>\\n\t</a>\\n \t<a class=\\\"top-action\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"hyperlink\") : stack1), depth0))\n + \"\\\" title=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n \t\t<img src=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"icon\") : stack1), depth0))\n + \"\\\" alt=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n\t</a>\\n\";\n},\"21\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t<div class=\\\"body\\\">\\n\t\t<div class=\\\"full-name\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"fullName\") : stack1), depth0))\n + \"</div>\\n\t\t<div class=\\\"last-message\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"lastMessage\") : stack1), depth0))\n + \"</div>\\n\t\t<div class=\\\"email-address\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"emailAddresses\") : stack1), depth0))\n + \"</div>\\n\t</div>\\n\";\n},\"23\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<a class=\\\"second-action\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"hyperlink\") : stack1), depth0))\n + \"\\\" aria-label=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\" title=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n\t<img src=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"icon\") : stack1), depth0))\n + \"\\\" alt=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n</a>\\n\";\n},\"25\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t<button class=\\\"other-actions icon-more\\\"></button>\\n\t<div class=\\\"menu popovermenu\\\">\\n\t\t<ul>\\n\"\n + ((stack1 = lookupProperty(helpers,\"each\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"actions\") : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(26, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":60,\"column\":3},\"end\":{\"line\":67,\"column\":12}}})) != null ? stack1 : \"\")\n + \"\t\t</ul>\\n\t</div>\\n\";\n},\"26\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t\t<li>\\n\t\t\t\t<a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"hyperlink\") || (depth0 != null ? lookupProperty(depth0,\"hyperlink\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"hyperlink\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":62,\"column\":13},\"end\":{\"line\":62,\"column\":26}}}) : helper)))\n + \"\\\">\\n\t\t\t\t\t<img src=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"icon\") || (depth0 != null ? lookupProperty(depth0,\"icon\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"icon\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":63,\"column\":15},\"end\":{\"line\":63,\"column\":23}}}) : helper)))\n + \"\\\" alt=\\\"\\\">\\n\t\t\t\t\t<span>\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"title\") || (depth0 != null ? lookupProperty(depth0,\"title\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"title\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":64,\"column\":11},\"end\":{\"line\":64,\"column\":20}}}) : helper)))\n + \"</span>\\n\t\t\t\t</a>\\n\t\t\t</li>\\n\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(7, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":21,\"column\":7}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(13, data, 0),\"inverse\":container.program(18, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":22,\"column\":0},\"end\":{\"line\":50,\"column\":7}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"hasTwoActions\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(23, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":51,\"column\":0},\"end\":{\"line\":55,\"column\":7}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"hasManyActions\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(25, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":56,\"column\":0},\"end\":{\"line\":70,\"column\":7}}})) != null ? stack1 : \"\");\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-search\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"couldNotLoadText\") || (depth0 != null ? lookupProperty(depth0,\"couldNotLoadText\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"couldNotLoadText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":5},\"end\":{\"line\":3,\"column\":25}}}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-search\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"noContactsFoundText\") || (depth0 != null ? lookupProperty(depth0,\"noContactsFoundText\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"noContactsFoundText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":5},\"end\":{\"line\":4,\"column\":28}}}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"footer\\\"><a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"contactsAppURL\") || (depth0 != null ? lookupProperty(depth0,\"contactsAppURL\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppURL\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":29},\"end\":{\"line\":9,\"column\":47}}}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"showAllContactsText\") || (depth0 != null ? lookupProperty(depth0,\"showAllContactsText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"showAllContactsText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":49},\"end\":{\"line\":9,\"column\":72}}}) : helper)))\n + \"</a></div>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"canInstallApp\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":10,\"column\":0},\"end\":{\"line\":12,\"column\":0}}})) != null ? stack1 : \"\");\n},\"6\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"footer\\\"><a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"contactsAppMgmtURL\") || (depth0 != null ? lookupProperty(depth0,\"contactsAppMgmtURL\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppMgmtURL\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":29},\"end\":{\"line\":11,\"column\":51}}}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"contactsAppMgmtText\") || (depth0 != null ? lookupProperty(depth0,\"contactsAppMgmtText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppMgmtText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":53},\"end\":{\"line\":11,\"column\":76}}}) : helper)))\n + \"</a></div>\\n\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contacts\") : depth0)) != null ? lookupProperty(stack1,\"length\") : stack1),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":6,\"column\":11}}})) != null ? stack1 : \"\")\n + \"<div id=\\\"contactsmenu-contacts\\\"></div>\\n\"\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"contactsAppEnabled\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.program(5, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":8,\"column\":0},\"end\":{\"line\":12,\"column\":7}}})) != null ? stack1 : \"\");\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-loading\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"loadingText\") || (depth0 != null ? lookupProperty(depth0,\"loadingText\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"loadingText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":5},\"end\":{\"line\":3,\"column\":20}}}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<label class=\\\"hidden-visually\\\" for=\\\"contactsmenu-search\\\">\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"searchContactsText\") || (depth0 != null ? lookupProperty(depth0,\"searchContactsText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchContactsText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":57},\"end\":{\"line\":1,\"column\":79}}}) : helper)))\n + \"</label>\\n<input id=\\\"contactsmenu-search\\\" type=\\\"search\\\" placeholder=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"searchContactsText\") || (depth0 != null ? lookupProperty(depth0,\"searchContactsText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchContactsText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":59},\"end\":{\"line\":2,\"column\":81}}}) : helper)))\n + \"\\\" value=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"searchTerm\") || (depth0 != null ? lookupProperty(depth0,\"searchTerm\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchTerm\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":90},\"end\":{\"line\":2,\"column\":104}}}) : helper)))\n + \"\\\">\\n<div class=\\\"content\\\">\\n</div>\\n\";\n},\"useData\":true});","var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 76225,\n\t\"./bn-bd.js\": 76225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-il\": 47207,\n\t\"./en-il.js\": 47207,\n\t\"./en-in\": 44175,\n\t\"./en-in.js\": 44175,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./en-sg\": 31662,\n\t\"./en-sg.js\": 31662,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-mx\": 96112,\n\t\"./es-mx.js\": 96112,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fil\": 42549,\n\t\"./fil.js\": 42549,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 94470,\n\t\"./fr-ca\": 63049,\n\t\"./fr-ca.js\": 63049,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 94470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 29295,\n\t\"./ga.js\": 29295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-deva\": 27884,\n\t\"./gom-deva.js\": 27884,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 30094,\n\t\"./hi.js\": 30094,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it-ch\": 10150,\n\t\"./it-ch.js\": 10150,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ku\": 1408,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./oc-lnc\": 92135,\n\t\"./oc-lnc.js\": 92135,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./tg\": 27321,\n\t\"./tg.js\": 27321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 19005,\n\t\"./tk.js\": 19005,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-mo\": 99807,\n\t\"./zh-mo.js\": 99807,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 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));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], function() { return __webpack_require__(39977); })\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","tagName","render","self","forEach","contact","item","ContactsListItemView","append","on","_onChildActionMenuToggle","push","$src","view","className","_template","_model","_actionMenuShown","events","contactTemplate","require","template","_onOtherActionMenuOpened","delegateEvents","imageplaceholder","_onToggleActionsMenu","is","ContactsMenuView","_loadingTemplate","_errorTemplate","_contentTemplate","_contactsTemplate","_contacts","_searchTerm","templates","loading","menu","list","_onSearch","e","searchTerm","val","loadingTemplate","errorTemplate","couldNotLoadText","contentTemplate","searchContactsText","contactsTemplate","noContactsFoundText","showAllContactsText","contactsAppMgmtText","showLoading","loadingText","showError","showContacts","viewData","contacts","contactsAppEnabled","contactsAppURL","canInstallApp","contactsAppMgmtURL","searchVal","focus","ContactsMenu","_view","_contactsPromise","el","loadContacts","_getContacts","Promise","resolve","filter","term","catch","rawUid","document","getElementsByTagName","getAttribute","displayName","currentUser","Search","isA11yActivation","event","global","emit","token","Dialogs","YES_NO_BUTTONS","OK_BUTTONS","FILEPICKER_TYPE_CHOOSE","FILEPICKER_TYPE_MOVE","FILEPICKER_TYPE_COPY","FILEPICKER_TYPE_COPY_MOVE","FILEPICKER_TYPE_CUSTOM","dialogsCounter","alert","title","modal","message","OK_BUTTON","info","confirm","confirmDestructive","buttons","confirmHtml","prompt","name","password","_getMessageTemplate","$tmpl","dialogName","dialogId","$dlg","octemplate","dialog_name","input","attr","label","buttonlist","click","ocdialog","defaultButton","closeOnEscape","close","filepicker","multiselect","mimetypeFilter","path","sortField","sortOrder","emptyText","newText","filesClient","OCA","Sharing","PublicApp","fileList","filelist","allowDirectoryChooser","_getFilePickerTemplate","$filePicker","emptytext","newtext","nameCol","sizeCol","modifiedCol","target","prepend","$showGridView","_onGridviewChange","_getGridSettings","newButton","stopImmediatePropagation","preventDefault","$input","tooltip","submit","newName","lastPos","lastIndexOf","selectRange","$form","$submit","stopPropagation","filename","trimmedName","trim","match","isFileNameValid","file","escape","placement","checkInput","newname","createDirectory","always","_fillFilePicker","ready","$fileListHeader","$filelist","$filelistContainer","$dirTree","_handleTreeListSelect","_handlePickerClick","dir","currentTarget","functionToCall","returnType","datapath","index","element","selectedName","button","width","height","style","remove","buttonEnableDisable","closest","prop","fail","content","dialogType","allowHtml","escapeFunction","cancel","classes","confirmClasses","closeCallback","_fileexistsshown","fileexists","original","replacement","controller","dialogDeferred","resampleHermite","canvas","W","H","W2","H2","Math","round","img","getContext","getImageData","img2","data2","ratio_w","ratio_h","ratio_w_half","ceil","ratio_h_half","j","i","x2","weight","weights","weights_alpha","gx_r","gx_g","gx_b","gx_a","center_y","yy","floor","dy","abs","center_x","w0","xx","dx","w","sqrt","clearRect","max","putImageData","addConflict","$conflicts","$conflict","clone","$originalDiv","$replacementDiv","size","mtime","lastModified","directory","urlSpec","x","y","c","etag","forceIcon","previewpath","Files","generatePreviewUrl","replace","css","FileReader","reader","onload","blob","Blob","URL","webkitURL","originalUrl","createObjectURL","image","Image","src","createElement","min","drawImage","toDataURL","readAsArrayBuffer","reject","getCroppedPreview","checkboxId","count","n","parent","children","_getFileExistsTemplate","allnewfiles","allexistingfiles","why","what","onCancel","onContinue","closeButton","$primaryButton","updatePrimaryButton","checkedCount","$checkbox","promise","gridview","toggleClass","isGridView","hasClass","defer","$filePickerTemplate","tmpl","$listTmpl","detach","jqXHR","$messageTemplate","$fileexistsTemplate","empty","advancedFilter","getFolderContents","files","_changeButtonsText","mimetype","showHiddenInput","getElementById","startsWith","comparator","Comparators","fileInfo1","fileInfo2","sort","file1","file2","isFavorite","fileInfo","tags","_fillSlug","idx","entry","simpleSize","sizeColor","isEncrypted","icon","parseInt","pow","filename1","filename2","date","previewUrl","addButton","$template","paths","prependTo","getOcDialog","$element","ctrlKey","copyText","folder","moveText","eq","getToken","setToken","newToken","OCEventSource","joinChar","dataStr","typelessListeners","closed","listeners","encodeURIComponent","useFallBack","EventSource","iframeId","iframeCount","fallBackSources","iframe","source","onmessage","parse","listen","fallBackCallBack","done","lastLength","addEventListener","currentMenu","currentMenuToggle","hideMenus","complete","lastMenu","slideUp","apply","arguments","isAdmin","_oc_isadmin","load","loadTranslations","register","_unregister","unregister","translate","translatePlural","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","$buttonrow","$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","b","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","a","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","generateFilePath","addStyle","createStyleSheet","appSettings","args","appid","scriptName","cache","settings","popup","arrowclass","loadJS","scriptname","jqxhr","appswebroots","dialogs","getCurrentUser","uid","isUserAdmin","L10N","_ajaxConnectionLostHandler","_processAjaxError","statusText","timer","setInterval","clearInterval","registerXHRForErrorProcessing","readyState","getCapabilities","realGetCapabilities","registerMenu","$toggle","$menuEl","toggle","headerMenu","isClickableElement","slideToggle","showMenu","unregisterMenu","off","basename","encodePath","dirname","isSamePath","joinPaths","getHost","host","getHostName","hostname","getPort","port","getProtocol","protocol","getCanonicalLocale","getLocale","getLanguage","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","ArrowRight","NcButton","default","valueLoading","required","invertedColors","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","_c","_self","$event","$emit","scopedSlots","_u","fn","staticClass","proxy","_v","_s","LoginButton","NcPasswordField","NcTextField","NcNoteCard","username","redirectUrl","errors","messages","throttleDelay","autoCompleteAllowed","directLogin","timezone","timezoneOffset","headline","productName","user","computed","isError","errorLabel","apacheAuthFailed","internalException","invalidPassword","userDisabled","loadingIcon","loginActionUrl","mounted","methods","updateUsername","ref","_e","_l","class","staticStyle","domProps","shake","NoValidCredentials","InformationIcon","LockOpenIcon","isHttps","isLocalhost","hasPublicKeyCredential","validCredentials","authenticate","getAuthenticationData","loginName","Axios","resp","publicKey","sign","rawId","authenticatorData","clientDataJSON","signature","userHandle","completeAuthentication","directives","rawName","expression","composing","resetPasswordLink","watch","resetPasswordTarget","encrypted","proceed","Array","isArray","_i","$$a","$$el","$$c","checked","$$i","concat","slice","warning","clear","LoginForm","PasswordLessLoginForm","ResetPassword","UpdatePassword","passwordlessLogin","resetPassword","canResetPassword","resetPasswordUser","hasPasswordless","countAlternativeLogins","alternativeLogins","hideLoginForm","passwordResetFinished","alternativeLogin","L10n","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__","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","every","splice","r","getter","__esModule","d","definition","defineProperty","enumerable","globalThis","Function","obj","Symbol","toStringTag","nmd","baseURI","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","nc","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file diff --git a/dist/core-main.js b/dist/core-main.js index 9d2d6c25c8b..2dc737b2df2 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={30300:function(e,i,o){"use strict";var a={};o.r(a),o.d(a,{deleteKey:function(){return B},getApps:function(){return x},getKeys:function(){return k},getValue:function(){return P},setValue:function(){return E}});var r={};o.r(r),o.d(r,{formatLinksPlain:function(){return dn},formatLinksRich:function(){return un},plainToRich:function(){return ln},richToPlain:function(){return cn}});var s={};o.r(s),o.d(s,{dismiss:function(){return fn},query:function(){return pn}});var l=o(19755),c=o.n(l),u=(o(28594),o(35666),o(35202),o(78595)),d=o(79753),A=o(25108),p={},f=[],h=o(18181),m=o(64024),g=o(25108),v={updatableNotification:null,getDefaultNotificationFunction:null,setDefault:function(t){this.getDefaultNotificationFunction=t},hide:function(t,e){h.ZP.isFunction(t)&&(e=t,t=void 0),t?(t.each((function(){c()(this)[0].toastify?c()(this)[0].toastify.hideToast():g.error("cannot hide toast because object is not set"),this===this.updatableNotification&&(this.updatableNotification=null)})),e&&e.call(),this.getDefaultNotificationFunction&&this.getDefaultNotificationFunction()):g.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:m.Rl;var n=(0,m.PV)(t,e);return n.toastElement.toastify=n,c()(n.toastElement)},show:function(t,e){(e=e||{}).timeout=e.timeout?e.timeout:m.Rl;var n=(0,m.PV)(function(t){return t.toString().split("&").join("&").split("<").join("<").split(">").join(">").split('"').join(""").split("'").join("'")}(t),e);return n.toastElement.toastify=n,c()(n.toastElement)},showUpdate:function(t){return this.updatableNotification&&this.updatableNotification.hideToast(),this.updatableNotification=(0,m.PV)(t,{timeout:m.Rl}),this.updatableNotification.toastElement.toastify=this.updatableNotification,c()(this.updatableNotification.toastElement)},showTemporary:function(t,e){(e=e||{}).timeout=e.timeout||m.TN;var n=(0,m.PV)(t,e);return n.toastElement.toastify=n,c()(n.toastElement)},isHidden:function(){return!c()("#content").find(".toastify").length}},C=h.ZP.throttle((function(){v.showTemporary(t("core","Connection to server lost"))}),7e3,{trailing:!1}),b=!1,w={enableDynamicSlideToggle:function(){b=!0},showAppSidebar:function(t){(t||c()("#app-sidebar")).removeClass("disappear").show(),c()("#app-content").trigger(new(c().Event)("appresized"))},hideAppSidebar:function(t){(t||c()("#app-sidebar")).hide().addClass("disappear"),c()("#app-content").trigger(new(c().Event)("appresized"))}};function y(t,e,n){"post"!==t&&"delete"!==t||!Jt.PasswordConfirmation.requiresPasswordConfirmation()?(n=n||{},c().ajax({type:t.toUpperCase(),url:(0,d.generateOcsUrl)("apps/provisioning_api/api/v1/config/apps")+e,data:n.data||{},success:n.success,error:n.error})):Jt.PasswordConfirmation.requirePasswordConfirmation(_.bind(y,this,t,e,n))}function x(t){y("get","",t)}function k(t,e){y("get","/"+t,e)}function P(t,e,n,i){(i=i||{}).data={defaultValue:n},y("get","/"+t+"/"+e,i)}function E(t,e,n,i){(i=i||{}).data={value:n},y("post","/"+t+"/"+e,i)}function B(t,e,n){y("delete","/"+t+"/"+e,n)}var O=window.oc_appconfig||{},T={getValue:function(t,e,n,i){P(t,e,n,{success:i})},setValue:function(t,e,n){E(t,e,n)},getApps:function(t){x({success:t})},getKeys:function(t,e){k(t,{success:e})},deleteKey:function(t,e){B(t,e)}},D=o(25108),I=void 0!==window._oc_appswebroots&&window._oc_appswebroots,j=o(72316),z=o.n(j),S=o(76591),N=o(25108),U={create:"POST",update:"PROPPATCH",patch:"PROPPATCH",delete:"DELETE",read:"PROPFIND"};function M(t,e){if(h.ZP.isArray(t))return h.ZP.map(t,(function(t){return M(t,e)}));var n={href:t.href};return h.ZP.each(t.propStat,(function(t){if("HTTP/1.1 200 OK"===t.status)for(var i in t.properties){var o=i;i in e&&(o=e[i]),n[o]=t.properties[i]}})),n.id||(n.id=L(n.href)),n}function L(t){var e=t.indexOf("?");e>0&&(t=t.substr(0,e));var n,i=t.split("/");do{n=i[i.length-1],i.pop()}while(!n&&i.length>0);return n}function F(t){return t>=200&&t<=299}function R(t,e,n,i){return t.propPatch(e.url,function(t,e){var n,i={};for(n in t){var o=e[n],a=t[n];o||(N.warn('No matching DAV property for property "'+n),o=n),(h.ZP.isBoolean(a)||h.ZP.isNumber(a))&&(a=""+a),i[o]=a}return i}(n.changed,e.davProperties),i).then((function(t){F(t.status)?h.ZP.isFunction(e.success)&&e.success(n.toJSON()):h.ZP.isFunction(e.error)&&e.error(t)}))}var Q=z().noConflict();Object.assign(Q,{davCall:function(t,e){var n=new S.dav.Client({baseUrl:t.url,xmlNamespaces:h.ZP.extend({"DAV:":"d","http://owncloud.org/ns":"oc"},t.xmlNamespaces||{})});n.resolveUrl=function(){return t.url};var i=h.ZP.extend({"X-Requested-With":"XMLHttpRequest",requesttoken:OC.requestToken},t.headers);return"PROPFIND"===t.type?function(t,e,n,i){return t.propFind(e.url,h.ZP.values(e.davProperties)||[],e.depth,i).then((function(t){if(F(t.status)){if(h.ZP.isFunction(e.success)){var n=h.ZP.invert(e.davProperties),i=M(t.body,n);e.depth>0&&i.shift(),e.success(i)}}else h.ZP.isFunction(e.error)&&e.error(t)}))}(n,t,0,i):"PROPPATCH"===t.type?R(n,t,e,i):"MKCOL"===t.type?function(t,e,n,i){return t.request(e.type,e.url,i,null).then((function(o){F(o.status)?R(t,e,n,i):h.ZP.isFunction(e.error)&&e.error(o)}))}(n,t,e,i):function(t,e,n,i){return i["Content-Type"]="application/json",t.request(e.type,e.url,i,e.data).then((function(t){if(F(t.status)){if(h.ZP.isFunction(e.success)){if("PUT"===e.type||"POST"===e.type||"MKCOL"===e.type){var i=t.body||n.toJSON(),o=t.xhr.getResponseHeader("Content-Location");return"POST"===e.type&&o&&(i.id=L(o)),void e.success(i)}if(207===t.status){var a=h.ZP.invert(e.davProperties);e.success(M(t.body,a))}else e.success(t.body)}}else h.ZP.isFunction(e.error)&&e.error(t)}))}(n,t,e,i)},davSync:function(t){return function(e,n,i){var o={type:U[e]||e},a=n instanceof t.Collection;if("update"===e&&(n.hasInnerCollection?o.type="MKCOL":(n.usePUT||n.collection&&n.collection.usePUT)&&(o.type="PUT")),i.url||(o.url=h.ZP.result(n,"url")||function(){throw new Error('A "url" property or function must be specified')}()),null!=i.data||!n||"create"!==e&&"update"!==e&&"patch"!==e||(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.ZP.isFunction(r)?o.davProperties=r.call(n):o.davProperties=r),o.davProperties=h.ZP.extend(o.davProperties||{},i.davProperties),h.ZP.isUndefined(i.depth)&&(i.depth=a?1:0)}var s=i.error;i.error=function(t,e,n){i.textStatus=e,i.errorThrown=n,s&&s.call(i.context,t,e,n)};var l=i.xhr=t.davCall(h.ZP.extend(o,i),n);return n.trigger("request",n,l,i),l}}(Q)});var G=Q,H=o(65358),K=window._oc_config||{},Z=o(25108),Y=j.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)}}),q=j.Collection.extend({model:Y}),W=j.View.extend({_collection:void 0,_subViews:[],tagName:"ul",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 J({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)}))}}),J=j.View.extend({className:"contact",tagName:"li",_template:void 0,_model:void 0,_actionMenuShown:!1,events:{"click .icon-more":"_onToggleActionsMenu"},contactTemplate:o(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},_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())}}),V=j.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.ZP.debounce((function(t){var e=this.$("#contactsmenu-search").val();e!==this._searchTerm&&(this.trigger("search",this.$("#contactsmenu-search").val()),this._searchTerm=e)}),700),loadingTemplate:function(t){return this.templates.loading(t)},errorTemplate:function(e){return this.templates.error(h.ZP.extend({couldNotLoadText:t("core","Could not load your contacts")},e))},contentTemplate:function(e){return this.templates.menu(h.ZP.extend({searchContactsText:t("core","Search contacts …")},e))},contactsTemplate:function(e){return this.templates.list(h.ZP.extend({noContactsFoundText:t("core","No contacts found"),showAllContactsText:t("core","Show all contacts …"),contactsAppMgmtText:t("core","Install the Contacts app")},e))},initialize:function(t){this.options=t},showLoading:function(t){this.render(),this._contacts=void 0,this.$(".content").html(this.loadingTemplate({loadingText:t}))},showError:function(){this.render(),this._contacts=void 0,this.$(".content").html(this.errorTemplate())},showContacts:function(t,e){this._contacts=t.contacts,this.render({contacts:t.contacts});var n=new W({collection:t.contacts});n.render(),this.$(".content").html(this.contactsTemplate({contacts:t.contacts,searchTerm:e,contactsAppEnabled:t.contactsAppEnabled,contactsAppURL:Jt.generateUrl("/apps/contacts"),canInstallApp:Jt.isUserAdmin(),contactsAppMgmtURL:Jt.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}}),X=function(t){this.initialize(t)};X.prototype={$el:void 0,_view:void 0,_contactsPromise:void 0,initialize:function(t){this.$el=c()(t.el),this._view=new V({el:this.$el}),this._view.on("search",(function(t){this.loadContacts(t)}),this)},_getContacts:function(t){var e=Jt.generateUrl("/contactsmenu/contacts");return Promise.resolve(c().ajax(e,{method:"POST",data:{filter:t}}))},loadContacts:function(e){var n=this;return n._contactsPromise||(n._contactsPromise=n._getContacts(e)),h.ZP.isUndefined(e)||""===e?n._view.showLoading(t("core","Loading your contacts …")):n._view.showLoading(t("core","Looking for {term} …",{term:e})),n._contactsPromise.then((function(t){t.contacts=new q(t.contacts),n._view.showContacts(t,e)}),(function(t){n._view.showError(),Z.error("There was an error loading your contacts",t)})).then((function(){delete n._contactsPromise})).catch(Z.error.bind(this))}};var $=X,tt=document.getElementsByTagName("head")[0].getAttribute("data-user"),et=document.getElementsByTagName("head")[0].getAttribute("data-user-displayname"),nt=void 0!==tt&&tt,it=o(25108);function ot(t){return ot="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ot(t)}function at(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,(void 0,o=function(t,e){if("object"!==ot(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,"string");if("object"!==ot(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(i.key),"symbol"===ot(o)?o:String(o)),i)}var o}function rt(t,e,n){return e&&at(t.prototype,e),n&&at(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}var st={Search:rt((function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),it.warn("OCA.Search is deprecated. Please use the unified search API instead")}))},lt=function(t){return"click"===t.type||"keydown"===t.type&&"Enter"===t.key},ct=o(25108);function ut(t,e,n,i,o,a,r){try{var s=t[a](r),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,o)}function dt(t){return function(){var e=this,n=arguments;return new Promise((function(i,o){var a=t.apply(e,n);function r(t){ut(a,i,o,r,s,"next",t)}function s(t){ut(a,i,o,r,s,"throw",t)}r(void 0)}))}}function At(t){return At="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},At(t)}var pt,ft,ht,mt,gt={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,i){this.message(t,e,"alert",gt.OK_BUTTON,n,i)},info:function(t,e,n,i){this.message(t,e,"info",gt.OK_BUTTON,n,i)},confirm:function(t,e,n,i){return this.message(t,e,"notice",gt.YES_NO_BUTTONS,n,i)},confirmDestructive:function(t,e,n,i,o){return this.message(t,e,"none",n,i,void 0===o||o)},confirmHtml:function(t,e,n,i){return this.message(t,e,"notice",gt.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-"+gt.dialogsCounter+"-content",u="#"+l,d=s.octemplate({dialog_name:l,title:n,message:e,type:"notice"}),A=c()("<input/>");A.attr("type",r?"password":"text").attr("id",l+"-input").attr("placeholder",a);var p=c()("<label/>").attr("for",l+"-input").text(a+": ");d.append(p),d.append(A),void 0===o&&(o=!1),c()("body").append(d),void 0!==i&&(i=h.ZP.once(i));var f=[{text:t("core","No"),click:function(){void 0!==i&&i(!1,A.val()),c()(u).ocdialog("close")}},{text:t("core","Yes"),click:function(){void 0!==i&&i(!0,A.val()),c()(u).ocdialog("close")},defaultButton:!0}];c()(u).ocdialog({closeOnEscape:!0,modal:o,buttons:f,close:function(){void 0!==i&&i(!1,A.val())}}),A.focus(),gt.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"),A=t("files","New folder");r!==this.FILEPICKER_TYPE_COPY&&r!==this.FILEPICKER_TYPE_MOVE&&r!==this.FILEPICKER_TYPE_COPY_MOVE||(d=t("core","No more subfolders in here")),this.filepicker.loading=!0,this.filepicker.filesClient=st.Sharing&&st.Sharing.PublicApp&&st.Sharing.PublicApp.fileList?st.Sharing.PublicApp.fileList.filesClient:Jt.Files.getClient(),this.filelist=null,s=s||"",l=Object.assign({allowDirectoryChooser:!1},l),c().when(this._getFilePickerTemplate()).then((function(p){var f,h;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:A,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),"function"==typeof l.filter&&u.$filePicker.data("filter",l.filter),void 0===a&&(a=!1),void 0===i&&(i=!1),c()(null!==(f=null===(h=l)||void 0===h?void 0:h.target)&&void 0!==f?f:"body").prepend(u.$filePicker),u.$showGridView=c()("button#picker-showgridview"),u.$showGridView.on("click keydown",(function(t){lt(t)&&u._onGridviewChange()})),u._getGridSettings();var m=u.$filePicker.find(".actions.creatable .button-add");r!==u.FILEPICKER_TYPE_CHOOSE||l.allowDirectoryChooser||u.$filePicker.find(".actions.creatable").hide(),m.on("focus",(function(){u.$filePicker.ocdialog("setEnterCallback",(function(t){t.stopImmediatePropagation(),t.preventDefault(),m.click()}))})),m.on("blur",(function(){u.$filePicker.ocdialog("unsetEnterCallback")})),Jt.registerMenu(m,u.$filePicker.find(".menu"),(function(){v.tooltip("hide"),v.focus(),u.$filePicker.ocdialog("setEnterCallback",(function(t){t.stopImmediatePropagation(),t.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']"),C=g.find("input[type='submit']");v.on("keydown",(function(t){lt(t)&&(t.stopImmediatePropagation(),t.preventDefault(),g.submit())})),C.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(Jt.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,r)})),Jt.hideMenus(),u.$filePicker.ocdialog("unsetEnterCallback"),u.$filePicker.click(),v.val(A)}})),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 keydown","div:not(:last-child)",u,(function(t){lt(t)&&u._handleTreeListSelect(t,r)})),u.$filelist.on("click keydown","tr",(function(t){lt(t)&&u._handlePickerClick(t,c()(this),r)})),u.$fileListHeader.on("click keydown","a",(function(t){if(lt(t)){var e=u.$filePicker.data("path");u.filepicker.sortField=c()(t.currentTarget).data("sort"),u.filepicker.sortOrder="asc"===u.filepicker.sortOrder?"desc":"asc",u._fillFilePicker(e,r)}})),u._fillFilePicker(s,r)}));var b=function(t){if(void 0!==n){var e;if(!0===i)e=[],u.$filelist.find("tr.filepicker_element_selected").each((function(t,n){e.push(u.$filePicker.data("path")+"/"+c()(n).data("entryname"))}));else{e=u.$filePicker.data("path");var o=u.$filelist.find("tr.filepicker_element_selected").data("entryname");o&&(e+="/"+o)}n(e,t),u.$filePicker.ocdialog("close")}},w=[];r===gt.FILEPICKER_TYPE_CHOOSE?w.push({text:t("core","Choose"),click:function(){b(gt.FILEPICKER_TYPE_CHOOSE)},defaultButton:!0}):r===gt.FILEPICKER_TYPE_CUSTOM?l.buttons.forEach((function(t){w.push({text:t.text,click:function(){b(t.type)},defaultButton:t.defaultButton})})):(r!==gt.FILEPICKER_TYPE_COPY&&r!==gt.FILEPICKER_TYPE_COPY_MOVE||w.push({text:t("core","Copy"),click:function(){b(gt.FILEPICKER_TYPE_COPY)},defaultButton:!1}),r!==gt.FILEPICKER_TYPE_MOVE&&r!==gt.FILEPICKER_TYPE_COPY_MOVE||w.push({text:t("core","Move"),click:function(){b(gt.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(t){}u.$filePicker=null}});var y=u.$filePicker.closest(".oc-dialog").find(".primary");-1!==u.$filePicker.data("mimetype").indexOf("httpd/unix-directory")||u.$filePicker.data("allowDirectoryChooser")?y.prop("disabled",!1):y.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-"+gt.dialogsCounter+"-content",d="#"+u,A=l.octemplate({dialog_name:u,title:n,message:e,type:i},s?{escapeFunction:""}:{});void 0===r&&(r=!1),c()("body").append(A);var p=[];switch(o){case gt.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 gt.OK_BUTTON:p[0]={text:t("core","OK"),click:function(){c()(d).ocdialog("close"),void 0!==a&&a()},defaultButton:!0};break;default:"object"===At(o)&&o.type===gt.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}),gt.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(t,e,n,i,o){i=Math.round(i),o=Math.round(o);for(var a=t.getContext("2d").getImageData(0,0,e,n),r=t.getContext("2d").getImageData(0,0,i,o),s=a.data,l=r.data,c=e/i,u=n/o,d=Math.ceil(c/2),A=Math.ceil(u/2),p=0;p<o;p++)for(var f=0;f<i;f++){for(var h=4*(f+p*i),m=0,g=0,v=0,C=0,b=0,w=0,y=0,x=(p+.5)*u,k=Math.floor(p*u);k<(p+1)*u;k++)for(var P=Math.abs(x-(k+.5))/A,E=(f+.5)*c,B=P*P,O=Math.floor(f*c);O<(f+1)*c;O++){var T=Math.abs(E-(O+.5))/d,D=Math.sqrt(B+T*T);D>=-1&&D<=1&&(m=2*D*D*D-3*D*D+1)>0&&(y+=m*s[3+(T=4*(O+k*e))],v+=m,s[T+3]<255&&(m=m*s[T+3]/250),C+=m*s[T],b+=m*s[T+1],w+=m*s[T+2],g+=m)}l[h]=C/g,l[h+1]=b/g,l[h+2]=w/g,l[h+3]=y/v}t.getContext("2d").clearRect(0,0,Math.max(e,i),Math.max(n,o)),t.width=i,t.height=o,t.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(Jt.Util.humanFileSize(i.size)),r.find(".mtime").text(Jt.Util.formatDate(i.mtime)),o.size&&o.lastModified&&(s.find(".size").text(Jt.Util.humanFileSize(o.size)),s.find(".mtime").text(Jt.Util.formatDate(o.lastModified)));var u=i.directory+"/"+i.name,d={file:u,x:96,y:96,c:i.etag,forceIcon:0},A=Files.generatePreviewUrl(d);A=A.replace(/'/g,"%27"),r.find(".icon").css({"background-image":"url('"+A+"')"}),function(t){var e=new(c().Deferred),n=t.type&&t.type.split("/").shift();if(window.FileReader&&"image"===n){var i=new FileReader;i.onload=function(t){var n=new Blob([t.target.result]);window.URL=window.URL||window.webkitURL;var i=window.URL.createObjectURL(n),o=new Image;o.src=i,o.onload=function(){var t,n,i,a,r,s,c,u=(t=o,r=document.createElement("canvas"),s=t.width,c=t.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(t,n,i,a,a,0,0,a,a),l(r,a,a,96,96),r.toDataURL("image/png",.7));e.resolve(u)}},i.readAsArrayBuffer(t)}else e.reject();return e}(o).then((function(t){s.find(".icon").css("background-image","url("+t+")")}),(function(){u=Jt.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",A="#"+d;if(this._fileexistsshown){var p=c()(A+" .conflicts");u(p,i,o);var f=c()(A+" .conflict").length,h=n("core","{count} file conflict","{count} file conflicts",f,{count:f});c()(A).parent().children(".oc-dialog-title").text(h),c()(window).trigger("resize"),s.resolve()}else this._fileexistsshown=!0,c().when(this._getFileExistsTemplate()).then((function(n){var l=t("core","One file conflict"),p=n.octemplate({dialog_name:d,title:l,type:"fileexists",allnewfiles:t("core","New Files"),allexistingfiles:t("core","Already existing files"),why:t("core","Which files do you want to keep?"),what:t("core","If you select both versions, the copied file will have a number added to its name.")});if(c()("body").append(p),i&&o){var f=p.find(".conflicts");u(f,i,o)}var h=[{text:t("core","Cancel"),classes:"cancel",click:function(){void 0!==a.onCancel&&a.onCancel(e),c()(A).ocdialog("close")}},{text:t("core","Continue"),classes:"continue",click:function(){void 0!==a.onContinue&&a.onContinue(c()(A+" .conflict")),c()(A).ocdialog("close")}}];c()(A).ocdialog({width:500,closeOnEscape:!0,modal:!0,buttons:h,closeButton:null,close:function(){r._fileexistsshown=!1;try{c()(this).ocdialog("destroy").remove()}catch(t){}}}),c()(A).css("height","auto");var m=p.closest(".oc-dialog").find("button.continue");function g(){var t=p.find(".conflicts .checkbox:checked").length;m.prop("disabled",0===t)}m.prop("disabled",!0),c()(A).find(".allnewfiles").on("click",(function(){c()(A).find('.conflict .replacement input[type="checkbox"]').prop("checked",c()(this).prop("checked"))})),c()(A).find(".allexistingfiles").on("click",(function(){c()(A).find('.conflict .original:not(.readonly) input[type="checkbox"]').prop("checked",c()(this).prop("checked"))})),c()(A).find(".conflicts").on("click",".replacement,.original:not(.readonly)",(function(){var t=c()(this).find('input[type="checkbox"]');t.prop("checked",!t.prop("checked"))})),c()(A).find(".conflicts").on("click",'.replacement input[type="checkbox"],.original:not(.readonly) input[type="checkbox"]',(function(){var t=c()(this);t.prop("checked",!t.prop("checked"))})),c()(A).on("click",".replacement,.allnewfiles",(function(){var e=c()(A).find('.conflict .replacement input[type="checkbox"]:checked').length;e===c()(A+" .conflict").length?(c()(A).find(".allnewfiles").prop("checked",!0),c()(A).find(".allnewfiles + .count").text(t("core","(all selected)"))):e>0?(c()(A).find(".allnewfiles").prop("checked",!1),c()(A).find(".allnewfiles + .count").text(t("core","({count} selected)",{count:e}))):(c()(A).find(".allnewfiles").prop("checked",!1),c()(A).find(".allnewfiles + .count").text("")),g()})),c()(A).on("click",".original,.allexistingfiles",(function(){var e=c()(A).find('.conflict .original input[type="checkbox"]:checked').length;e===c()(A+" .conflict").length?(c()(A).find(".allexistingfiles").prop("checked",!0),c()(A).find(".allexistingfiles + .count").text(t("core","(all selected)"))):e>0?(c()(A).find(".allexistingfiles").prop("checked",!1),c()(A).find(".allexistingfiles + .count").text(t("core","({count} selected)",{count:e}))):(c()(A).find(".allexistingfiles").prop("checked",!1),c()(A).find(".allexistingfiles + .count").text("")),g()})),s.resolve()})).fail((function(){s.reject(),alert(t("core","Error loading file exists template"))}));return s.promise()},_getGridSettings:function(){var e=this;c().get(Jt.generateUrl("/apps/files/api/v1/showgridview"),(function(n){e.$showGridView.removeClass("icon-toggle-filelist icon-toggle-pictures").addClass(n.gridview?"icon-toggle-filelist":"icon-toggle-pictures"),e.$showGridView.attr("aria-label",n.gridview?t("files","Show list view"):t("files","Show grid view")),c()(".list-container").toggleClass("view-grid",n.gridview)}))},_onGridviewChange:function(){var e=this.$showGridView.hasClass("icon-toggle-filelist");Jt.currentUser&&c().post(Jt.generateUrl("/apps/files/api/v1/showgridview"),{show:!e}),this.$showGridView.removeClass("icon-toggle-filelist icon-toggle-pictures").addClass(e?"icon-toggle-pictures":"icon-toggle-filelist"),this.$showGridView.attr("aria-label",e?t("files","Show grid view"):t("files","Show list view")),this.$filePicker.find(".list-container").toggleClass("view-grid",!e)},_getFilePickerTemplate:function(){var t=c().Deferred();if(this.$filePickerTemplate)t.resolve(this.$filePickerTemplate);else{var e=this;c().get(Jt.filePath("core","templates","filepicker.html"),(function(n){e.$filePickerTemplate=c()(n),e.$listTmpl=e.$filePickerTemplate.find(".filelist tbody tr:first-child").detach(),t.resolve(e.$filePickerTemplate)})).fail((function(e,n,i){t.reject(e.status,i)}))}return t.promise()},_getMessageTemplate:function(){var t=c().Deferred();if(this.$messageTemplate)t.resolve(this.$messageTemplate);else{var e=this;c().get(Jt.filePath("core","templates","message.html"),(function(n){e.$messageTemplate=c()(n),t.resolve(e.$messageTemplate)})).fail((function(e,n,i){t.reject(e.status,i)}))}return t.promise()},_getFileExistsTemplate:function(){var t=c().Deferred();if(this.$fileexistsTemplate)t.resolve(this.$fileexistsTemplate);else{var e=this;c().get(Jt.filePath("files","templates","fileexists.html"),(function(n){e.$fileexistsTemplate=c()(n),t.resolve(e.$fileexistsTemplate)})).fail((function(){t.reject()}))}return t.promise()},_fillFilePicker:(pt=dt(regeneratorRuntime.mark((function e(n,i){var o,a,r,s,l,u,d,A;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=this,this.$filelist.empty(),this.$filePicker.find(".emptycontent").hide(),this.$filelistContainer.addClass("icon-loading"),this.$filePicker.data("path",n),a=this.$filePicker.data("mimetype"),r=this.$filePicker.data("filter"),"string"==typeof a&&(a=[a]),o.$fileListHeader.find(".sort-indicator").addClass("hidden").removeClass("icon-triangle-n").removeClass("icon-triangle-s"),o.$fileListHeader.find("[data-sort="+o.filepicker.sortField+"] .sort-indicator").removeClass("hidden"),"asc"===o.filepicker.sortOrder?o.$fileListHeader.find("[data-sort="+o.filepicker.sortField+"] .sort-indicator").addClass("icon-triangle-n"):o.$fileListHeader.find("[data-sort="+o.filepicker.sortField+"] .sort-indicator").addClass("icon-triangle-s"),s=function(){var t=dt(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",o.filepicker.filesClient.getFolderContents(e).then((function(t,e){return e})));case 1:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),e.prev=12,e.next=15,s(n);case 15:l=e.sent,e.next=26;break;case 18:return e.prev=18,e.t0=e.catch(12),ct.error("Requested path does not exists, falling back to root"),e.next=23,s("/");case 23:l=e.sent,this.$filePicker.data("path","/"),this._changeButtonsText(i,"");case 26:o.filelist=l,a&&a.length>0&&-1===a.indexOf("*")&&(l=l.filter((function(t){return"dir"===t.type||-1!==a.indexOf(t.mimetype)}))),r&&(l=l.filter(r)),null===(u=document.getElementById("showHiddenFiles"))||"1"===u.value||(l=l.filter((function(t){return!t.name.startsWith(".")}))),A=(d={name:function(t,e){return"dir"===t.type&&"dir"!==e.type?-1:"dir"!==t.type&&"dir"===e.type?1:Jt.Util.naturalSortCompare(t.name,e.name)},size:function(t,e){return t.size-e.size},mtime:function(t,e){return t.mtime-e.mtime}})[o.filepicker.sortField]||d.name,l=l.sort((function(t,e){var n=function(t){return t.tags&&t.tags.indexOf(Jt.TAG_FAVORITE)>=0};return n(t)&&!n(e)?-1:!n(t)&&n(e)?1:"asc"===o.filepicker.sortOrder?A(t,e):-A(t,e)})),o._fillSlug(),0===l.length?(o.$filePicker.find(".emptycontent").show(),o.$fileListHeader.hide()):(o.$filePicker.find(".emptycontent").hide(),o.$fileListHeader.show()),o.$filelist.empty(),c().each(l,(function(e,i){var a,r;if(i.isEncrypted&&"httpd/unix-directory"===i.mimetype?i.icon=Jt.MimeType.getIconUrl("dir-encrypted"):i.icon=Jt.MimeType.getIconUrl(i.mimetype),void 0!==i.size&&i.size>=0?(a=Jt.Util.humanFileSize(parseInt(i.size,10),!0),r=Math.round(160-Math.pow(i.size/1048576,2))):(a=t("files","Pending"),r=80),i.name.length>=10)var s=Math.min(Math.floor(i.name.length/2),10),l=i.name.substr(0,i.name.length-s),u=i.name.substr(i.name.length-s);else l=i.name,u="";var d=o.$listTmpl.octemplate({type:i.type,dir:n,filename:i.name,filename1:l,filename2:u,date:Jt.Util.relativeModifiedDate(i.mtime),size:a,sizeColor:r,icon:i.icon});if("file"===i.type){var A={file:n+"/"+i.name,x:100,y:100},p=new Image,f=Jt.generateUrl("/core/preview.png?")+c().param(A);p.onload=function(){p.width>5&&d.find("td.filename").attr("style","background-image:url("+f+")")},p.src=f}o.$filelist.append(d)})),o.$filelistContainer.removeClass("icon-loading");case 40:case"end":return e.stop()}}),e,this,[[12,18]])}))),function(t,e){return pt.apply(this,arguments)}),_fillSlug:function(){var e=this.$dirTree.find(".actions.creatable").detach();this.$dirTree.empty();var n=this;n.$dirTree.append(e);var i=this.$filePicker.data("path"),o=c()('<div data-dir="{dir}" tabindex="0"><a>{name}</a></div>').addClass("crumb");if(i){var a=i.split("/");c().each(a,(function(t,e){if(""===(e=a.pop()))return!1;n.$dirTree.prepend(o.octemplate({dir:a.join("/")+"/"+e,name:e}))}))}o.octemplate({dir:"",name:t("core","Home")},{escapeFunction:null}).prependTo(this.$dirTree)},_handleTreeListSelect:function(t,e){var n=t.data,i=c()(t.target).closest(".crumb").data("dir");n._fillFilePicker(i,e);var o=t.target.closest(".oc-dialog"),a=c()(".primary",o);this._changeButtonsText(e,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(t,e,n){var i=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"),i.prop("disabled",!1)):"dir"===e.data("type")&&(this._fillFilePicker(this.$filePicker.data("path")+"/"+e.data("entryname"),n),this._changeButtonsText(n,e.data("entryname")),-1!==this.$filePicker.data("mimetype").indexOf("httpd/unix-directory")||this.$filePicker.data("allowDirectoryChooser")?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)}}},vt=gt,Ct=(ft=document,ht=u.j8,mt=ft.getElementsByTagName("head")[0].getAttribute("data-requesttoken"),{getToken:function(){return mt},setToken:function(t){ht("csrf-token-update",{token:mt=t})}}),bt=Ct.getToken,wt=Ct.setToken,yt=function t(e,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(bt()),this.useFallBack||"undefined"==typeof EventSource){var r="oc_eventsource_iframe_"+t.iframeCount;t.fallBackSources[t.iframeCount]=this,this.iframe=c()("<iframe></iframe>"),this.iframe.attr("id",r),this.iframe.hide(),o="&",-1===e.indexOf("?")&&(o="?"),this.iframe.attr("src",e+o+"fallback=true&fallback_id="+t.iframeCount+"&"+a),c()("body").append(this.iframe),this.useFallBack=!0,t.iframeCount++}else o="&",-1===e.indexOf("?")&&(o="?"),this.source=new EventSource(e+o+a),this.source.onmessage=function(t){for(var e=0;e<this.typelessListeners.length;e++)this.typelessListeners[e](JSON.parse(t.data))}.bind(this);this.listen("__internal__",function(t){"close"===t&&this.close()}.bind(this))};yt.fallBackSources=[],yt.iframeCount=0,yt.fallBackCallBack=function(t,e,n){yt.fallBackSources[t].fallBackCallBack(e,n)},yt.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 xt=yt,kt=o(42515),Pt=o(25108),Et=null,Bt=null,Ot=function(t){if(Et){var e=Et;Et.trigger(new(c().Event)("beforeHide")),Et.slideUp(50,(function(){e.trigger(new(c().Event)("afterHide")),t&&t.apply(this,arguments)}))}c()(".menutoggle").attr("aria-expanded",!1),Bt&&Bt.attr("aria-expanded",!1),c()(".openedMenu").removeClass("openedMenu"),Et=null,Bt=null},Tt=!!window._oc_isadmin,Dt=o(86834),It=o.n(Dt),jt=o(31352),_t={load:jt.XJ,register:jt.z2,_unregister:jt.ET,translate:jt.Iu,translatePlural:jt.uN};It().registerHelper("t",(function(t,e){return(0,jt.Iu)(t,e)}));var zt={startSaving:function(e){this.startAction(e,t("core","Saving …"))},startAction:function(t,e){c()(t).text(e).removeClass("success").removeClass("error").stop(!0,!0).show()},finishedSaving:function(t,e){this.finishedAction(t,e)},finishedAction:function(t,e){"success"===e.status?this.finishedSuccess(t,e.data.message):this.finishedError(t,e.data.message)},finishedSuccess:function(t,e){c()(t).text(e).addClass("success").removeClass("error").stop(!0,!0).delay(3e3).fadeOut(900).show()},finishedError:function(t,e){c()(t).text(e).addClass("error").removeClass("success").show()}},St=o(30381),Nt=o.n(St),Ut={callback:null,pageLoadTime:null,init:function(){c()(".password-confirm-required").on("click",h.ZP.bind(this.requirePasswordConfirmation,this)),this.pageLoadTime=Nt().now()},requiresPasswordConfirmation:function(){var t=this.pageLoadTime-1e3*window.nc_pageLoad,e=Nt().now()-(t+1e3*window.nc_lastLogin);return window.backendAllowsPasswordConfirmation&&e>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.ZP.extend(o,n),r=this;this.requiresPasswordConfirmation()&&Jt.dialogs.prompt(a.text,a.title,(function(t,e){t&&""!==e?r._confirmPassword(e,a):h.ZP.isFunction(i)&&i()}),!0,a.label,!0).then((function(){var t=c()(".oc-dialog:visible");if(t.find(".ui-icon").remove(),t.addClass("password-confirmation"),""!==a.error){var e=c()("<p></p>").addClass("msg warning").text(a.error);t.find(".oc-dialog-content").append(e)}t.find(".oc-dialog-buttonrow").addClass("aside");var n=t.find("button");n.eq(0).hide(),n.eq(1).text(a.confirm)})),this.callback=e},_confirmPassword:function(e,n){var i=this;c().ajax({url:(0,d.generateUrl)("/login/confirm"),data:{password:e},type:"POST",success:function(t){window.nc_lastLogin=t.lastLogin,h.ZP.isFunction(i.callback)&&i.callback()},error:function(){n.error=t("core","Failed to authenticate, try again"),Jt.PasswordConfirmation.requirePasswordConfirmation(i.callback,n)}})}},Mt=window._theme||{},Lt={_handlers:[],_pushState:function(t,e,n){var i;if(i="string"==typeof t?t:Jt.buildQueryString(t),window.history.pushState){if(e=e||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(t,"",e):window.history.pushState(t,"",e)}else window.location.hash="?"+i,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=Jt.parseQueryString(this._decodeQuery(e))),(t=h.ZP.extend(t||{},Jt.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,h.ZP.isString(e)?e=Jt.parseQueryString(e):e||(e=this.parseUrlQuery()||{});for(var n=0;n<this._handlers.length;n++)this._handlers[n](e)}}},Ft=o(91770),Rt=o(25108);function Qt(t){for(var e,n=[],i=0,o=-1,a=0;i<t.length;){e=t.charAt(i);var r=!a&&"."===e||e>="0"&&e<="9";r!==a&&(n[++o]="",a=r),n[o]+=e,i++}return n}var Gt={History:Lt,humanFileSize:Ft.sS,computerFileSize:function(t){if("string"!=typeof t)return null;var e=t.toLowerCase().trim(),n=null,i=e.match(/^[\s+]?([0-9]*)(\.([0-9]+))?( +)?([kmgtp]?b?)$/i);return null===i?null:(n=parseFloat(e),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(t,e){return void 0===window.TESTING&&Rt.warn("OC.Util.formatDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment"),e=e||"LLL",Nt()(t).format(e)},relativeModifiedDate:function(e){void 0===window.TESTING&&Rt.warn("OC.Util.relativeModifiedDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment");var n=Nt()().diff(Nt()(e));return n>=0&&n<45e3?t("core","seconds ago"):Nt()(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 i=t.offsetWidth;return n===i&&(i=e.clientWidth),document.body.removeChild(e),this._scrollBarWidth=n-i,this._scrollBarWidth},stripTime:function(t){return new Date(t.getFullYear(),t.getMonth(),t.getDate())},naturalSortCompare:function(t,e){var n,i=Qt(t),o=Qt(e);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],Jt.getLanguage())}return i.length-o.length},waitFor:function(t,e){!function n(){!0!==t()&&setTimeout(n,e)}()},isCookieSetToValue:function(t,e){for(var n=document.cookie.split(";"),i=0;i<n.length;i++){var o=n[i].split("=");if(o[0].trim()===t&&o[1].trim()===e)return!0}return!1}},Ht=window._oc_debug,Kt=window._oc_webroot;if(void 0===Kt){var Zt=(Kt=location.pathname).indexOf("/index.php/");Kt=-1!==Zt?Kt.substr(0,Zt):Kt.substr(0,Kt.lastIndexOf("/"))}var Yt,qt=Kt,Wt=o(25108),Jt={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(K.blacklist_files_regex)},addScript:function(t,e,n){var i;A.warn("OC.addScript is deprecated, use OCP.Loader.loadScript instead");var o=(0,d.generateFilePath)(t,"js",e+".js");return p[o]?n&&n():(i=c().Deferred(),c().getScript(o,(function(){return i.resolve()})),p[o]=i),p[o]},addStyle:function(t,e){A.warn("OC.addStyle is deprecated, use OCP.Loader.loadStylesheet instead");var n=(0,d.generateFilePath)(t,"css",e+".css");-1===f.indexOf(n)&&(f.push(n),document.createStyleSheet?document.createStyleSheet(n):(e=c()('<link rel="stylesheet" type="text/css" href="'+n+'"/>'),c()("head").append(e)))},Apps:w,AppConfig:T,appConfig:O,appSettings:function(e){if(D.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(t,e,n){throw n}))}})).show()}),"html")}},appswebroots:I,Backbone:G,ContactsMenu:$,config:K,currentUser:nt,dialogs:vt,EventSource:xt,getCurrentUser:function(){return{uid:nt,displayName:et}},isUserAdmin:function(){return Tt},L10N:_t,_ajaxConnectionLostHandler:C,_processAjaxError:function(t){(0!==t.status||"abort"!==t.statusText&&"timeout"!==t.statusText&&!Jt._reloadCalled)&&(h.ZP.contains([302,303,307,401],t.status)&&Jt.currentUser?setTimeout((function(){if(!Jt._userIsNavigatingAway&&!Jt._reloadCalled){var t=0,e=setInterval((function(){v.showUpdate(n("core","Problem loading page, reloading in %n second","Problem loading page, reloading in %n seconds",5-t)),t>=5&&(clearInterval(e),Jt.reload()),t++}),1e3);Jt._reloadCalled=!0}}),100):0===t.status&&setTimeout((function(){Jt._userIsNavigatingAway||Jt._reloadCalled||Jt._ajaxConnectionLostHandler()}),100))},registerXHRForErrorProcessing:function(t){t.addEventListener&&(t.addEventListener("load",(function(){4===t.readyState&&(t.status>=200&&t.status<300||304===t.status||c()(document).trigger(new(c().Event)("ajaxError"),t))})),t.addEventListener("error",(function(){c()(document).trigger(new(c().Event)("ajaxError"),t)})))},getCapabilities:function(){return Pt.warn("OC.getCapabilities is deprecated and will be removed in Nextcloud 21. See @nextcloud/capabilities"),(0,kt.getCapabilities)()},hideMenus:Ot,registerMenu:function(t,e,n,i){e.addClass("menu");var o="A"===t.prop("tagName")||"BUTTON"===t.prop("tagName");t.on(o?"click.menu":"click.menu keyup.menu",(function(o){o.preventDefault(),o.key&&"Enter"!==o.key||(e.is(Et)?Ot():(Et&&Ot(),!0===i&&e.parent().addClass("openedMenu"),t.attr("aria-expanded",!0),e.slideToggle(50,n),Et=e,Bt=t))}))},showMenu:function(t,e,n){e.is(Et)||(Ot(),Et=e,Bt=t,e.trigger(new(c().Event)("beforeShow")),e.show(),e.trigger(new(c().Event)("afterShow")),h.ZP.isFunction(n)&&n())},unregisterMenu:function(t,e){e.is(Et)&&Ot(),t.off("click.menu").removeClass("menutoggle"),e.removeClass("menu")},basename:H.EZ,encodePath:H.Ec,dirname:H.XX,isSamePath:H.Mg,joinPaths:H.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:jt.aj,getLocale:jt.Kd,getLanguage:jt.G3,buildQueryString:function(t){return t?c().map(t,(function(t,e){var n=encodeURIComponent(e);return null!=t&&(n+="="+encodeURIComponent(t)),n})).join("&"):""},parseQueryString:function(t){var e,n,i,o={};if(!t)return null;(e=t.indexOf("?"))>=0&&(t=t.substr(e+1));for(var a=t.replace(/\+/g,"%20").split("&"),r=0;r<a.length;r++){var s=a[r];(n=(e=s.indexOf("="))>=0?[s.substr(0,e),s.substr(e+1)]:[s]).length&&(i=decodeURIComponent(n[0]))&&(o[i]=n.length>1?decodeURIComponent(n[1]):null)}return o},msg:zt,Notification:v,PasswordConfirmation:Ut,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 i=this.getPlugins(t),o=0;o<i.length;o++)i[o].attach&&i[o].attach(e,n)},detach:function(t,e,n){for(var i=this.getPlugins(t),o=0;o<i.length;o++)i[o].detach&&i[o].detach(e,n)}},theme:Mt,Util:Gt,debug:Ht,filePath:d.generateFilePath,generateUrl:d.generateUrl,get:(Yt=window,function(t){for(var e=t.split("."),n=e.pop(),i=0;i<e.length;i++)if(!(Yt=Yt[e[i]]))return!1;return Yt[n]}),set:function(t){return function(e,n){for(var i=e.split("."),o=i.pop(),a=0;a<i.length;a++)t[i[a]]||(t[i[a]]={}),t=t[i[a]];return t[o]=n,n}}(window),getRootPath:d.getRootUrl,imagePath:d.imagePath,redirect:function(t){window.location=t},reload:function(){window.location.reload()},requestToken:bt(),linkTo:d.linkTo,linkToOCS:function(t,e){return(0,d.generateOcsUrl)(t,{},{ocsVersion:e||1})+"/"},linkToRemote:d.generateRemoteUrl,linkToRemoteBase:function(t){return(0,d.getRootUrl)()+"/remote.php/"+t},webroot:qt};(0,u.Ld)("csrf-token-update",(function(t){OC.requestToken=t.token,Wt.info("OC.requestToken changed",t.token)}));var Vt=o(79954),Xt=o(45994),$t=o(25108);function te(t,e,n,i,o,a,r){try{var s=t[a](r),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,o)}function ee(t){return function(){var e=this,n=arguments;return new Promise((function(i,o){var a=t.apply(e,n);function r(t){te(a,i,o,r,s,"next",t)}function s(t){te(a,i,o,r,s,"throw",t)}r(void 0)}))}}var ne=null,ie=function(){var t=ee(regeneratorRuntime.mark((function t(){var e,n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=(0,d.generateUrl)("/csrftoken"),t.next=3,c().get(e);case 3:return n=t.sent,t.abrupt("return",n.token);case 5:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),oe=function(){var t=ee(regeneratorRuntime.mark((function t(){var e;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,ie();case 3:e=t.sent,wt(e),t.next=10;break;case 7:t.prev=7,t.t0=t.catch(0),$t.error("session heartbeat failed",t.t0);case 10:case"end":return t.stop()}}),t,null,[[0,7]])})));return function(){return t.apply(this,arguments)}}(),ae=function(){var t=setInterval(oe,1e3*function(){var t=NaN;return ne.session_lifetime&&(t=Math.floor(ne.session_lifetime/2)),Math.min(86400,Math.max(60,isNaN(t)?900:t))}());return $t.info("session heartbeat polling started"),t},re=o(20144),se=o(85750),le=o.n(se),ce={name:"ContactsMenu",components:{Contacts:o(12050).Z,NcHeaderMenu:le()},data:function(){return{contactsMenu:null}},mounted:function(){this.contactsMenu=new Jt.ContactsMenu({el:"#contactsmenu-menu"})},methods:{handleOpen:function(){var t;null===(t=this.contactsMenu)||void 0===t||t.loadContacts()}}},ue=o(93379),de=o.n(ue),Ae=o(7795),pe=o.n(Ae),fe=o(90569),he=o.n(fe),me=o(3565),ge=o.n(me),ve=o(19216),Ce=o.n(ve),be=o(44589),we=o.n(be),ye=o(50893),xe={};xe.styleTagTransform=we(),xe.setAttributes=ge(),xe.insert=he().bind(null,"head"),xe.domAPI=pe(),xe.insertStyleElement=Ce(),de()(ye.Z,xe),ye.Z&&ye.Z.locals&&ye.Z.locals;var ke=o(51900),Pe=(0,ke.Z)(ce,(function(){var t=this,e=t._self._c;return e("NcHeaderMenu",{attrs:{id:"contactsmenu","aria-label":t.t("core","Search contacts")},on:{open:t.handleOpen},scopedSlots:t._u([{key:"trigger",fn:function(){return[e("Contacts",{attrs:{size:20}})]},proxy:!0}])},[t._v(" "),e("div",{attrs:{id:"contactsmenu-menu"}})])}),[],!1,null,"1563c388",null).exports,Ee=o(12945),Be=o.n(Ee),Oe=o(76212),Te=o.n(Oe),De={name:"AppMenu",components:{NcActions:Be(),NcActionLink:Te()},data:function(){return{apps:(0,Vt.j)("core","apps",{}),appLimit:0,observer:null}},computed:{appList:function(){return Object.values(this.apps)},mainAppList:function(){return this.appList.slice(0,this.appLimit)},popoverAppList:function(){return this.appList.slice(this.appLimit)},appLabel:function(){return function(e){return e.name+(e.active?" ("+t("core","Currently open")+")":"")+(e.unread>0?" ("+n("core","{count} notification","{count} notifications",e.unread,{count:e.unread})+")":"")}}},mounted:function(){this.observer=new ResizeObserver(this.resize),this.observer.observe(this.$el),this.resize(),(0,u.Ld)("nextcloud:app-menu.refresh",this.setApps)},beforeDestroy:function(){this.observer.disconnect(),(0,u.r1)("nextcloud:app-menu.refresh",this.setApps)},methods:{setNavigationCounter:function(t,e){this.$set(this.apps[t],"unread",e)},setApps:function(t){var e=t.apps;this.apps=e},resize:function(){var t=this.$el.offsetWidth,e=Math.floor(t/50)-1;1==this.appList.length-e&&e--,e<1&&(e=0),this.appLimit=e}}},Ie=De,je=o(58626),_e={};_e.styleTagTransform=we(),_e.setAttributes=ge(),_e.insert=he().bind(null,"head"),_e.domAPI=pe(),_e.insertStyleElement=Ce(),de()(je.Z,_e),je.Z&&je.Z.locals&&je.Z.locals;var ze=(0,ke.Z)(Ie,(function(){var t=this,e=t._self._c;return e("nav",{staticClass:"app-menu"},[e("ul",{staticClass:"app-menu-main"},t._l(t.mainAppList,(function(n){return e("li",{key:n.id,staticClass:"app-menu-entry",class:{"app-menu-entry__active":n.active},attrs:{"data-app-id":n.id}},[e("a",{class:{"has-unread":n.unread>0},attrs:{href:n.href,"aria-label":t.appLabel(n),title:n.name,"aria-current":!!n.active&&"page",target:n.target?"_blank":void 0,rel:n.target?"noopener noreferrer":void 0}},[e("img",{attrs:{src:n.icon,alt:""}}),t._v(" "),e("div",{staticClass:"app-menu-entry--label"},[t._v("\n\t\t\t\t\t"+t._s(n.name)+"\n\t\t\t\t\t"),n.unread>0?e("span",{staticClass:"hidden-visually unread-counter"},[t._v(t._s(n.unread))]):t._e()])])])})),0),t._v(" "),e("NcActions",{staticClass:"app-menu-more",attrs:{"aria-label":t.t("core","More apps")}},t._l(t.popoverAppList,(function(n){return e("NcActionLink",{key:n.id,staticClass:"app-menu-popover-entry",attrs:{"aria-label":t.appLabel(n),"aria-current":!!n.active&&"page",href:n.href},scopedSlots:t._u([{key:"icon",fn:function(){return[e("div",{staticClass:"app-icon",class:{"has-unread":n.unread>0}},[e("img",{attrs:{src:n.icon,alt:""}})])]},proxy:!0}],null,!0)},[t._v("\n\t\t\t"+t._s(n.name)+"\n\t\t\t"),n.unread>0?e("span",{staticClass:"hidden-visually unread-counter"},[t._v(t._s(n.unread))]):t._e()])})),1)],1)}),[],!1,null,"b778f520",null).exports,Se=o(75925),Ne=o.n(Se),Ue=o(64192),Me=o.n(Ue),Le=(0,Vt.j)("core","versionHash",""),Fe={name:"UserMenuEntry",components:{NcLoadingIcon:Me()},props:{id:{type:String,required:!0},name:{type:String,required:!0},href:{type:String,required:!0},active:{type:Boolean,required:!0},icon:{type:String,required:!0}},data:function(){return{loading:!1}},computed:{cachedIcon:function(){return"".concat(this.icon,"?v=").concat(Le)}},methods:{handleClick:function(){this.loading=!0}}},Re=o(88951),Qe={};Qe.styleTagTransform=we(),Qe.setAttributes=ge(),Qe.insert=he().bind(null,"head"),Qe.domAPI=pe(),Qe.insertStyleElement=Ce(),de()(Re.Z,Qe),Re.Z&&Re.Z.locals&&Re.Z.locals;var Ge=(0,ke.Z)(Fe,(function(){var t=this,e=t._self._c;return e("li",{staticClass:"menu-entry",attrs:{id:t.id}},[t.href?e("a",{class:{active:t.active},attrs:{href:t.href},on:{click:function(e){return e.ctrlKey||e.shiftKey||e.altKey||e.metaKey?null:t.handleClick.apply(null,arguments)}}},[t.loading?e("NcLoadingIcon",{staticClass:"menu-entry__loading-icon",attrs:{size:18}}):e("img",{attrs:{src:t.cachedIcon,alt:""}}),t._v("\n\t\t"+t._s(t.name)+"\n\t")],1):e("button",[e("img",{attrs:{src:t.cachedIcon,alt:""}}),t._v("\n\t\t"+t._s(t.name)+"\n\t")])])}),[],!1,null,"6e59d13c",null),He=Ge.exports,Ke=(0,Vt.j)("core","settingsNavEntries",[]),Ze={name:"UserMenu",components:{NcAvatar:Ne(),NcHeaderMenu:le(),UserMenuEntry:He},data:function(){var t;return{settingsNavEntries:Ke,userId:null===(t=(0,Xt.ts)())||void 0===t?void 0:t.uid}},mounted:function(){(0,u.j8)("core:user-menu:mounted")}},Ye=o(71445),qe={};qe.styleTagTransform=we(),qe.setAttributes=ge(),qe.insert=he().bind(null,"head"),qe.domAPI=pe(),qe.insertStyleElement=Ce(),de()(Ye.Z,qe),Ye.Z&&Ye.Z.locals&&Ye.Z.locals;var We=(0,ke.Z)(Ze,(function(){var t=this,e=t._self._c;return e("NcHeaderMenu",{staticClass:"user-menu",attrs:{id:"user-menu","aria-label":t.t("core","Open settings menu")},scopedSlots:t._u([{key:"trigger",fn:function(){return[e("NcAvatar",{staticClass:"user-menu__avatar",attrs:{"disable-menu":!0,"disable-tooltip":!0,user:t.userId}})]},proxy:!0}])},[t._v(" "),e("nav",{staticClass:"user-menu__nav",attrs:{"aria-label":t.t("core","Settings menu")}},[e("ul",t._l(t.settingsNavEntries,(function(n){return e("UserMenuEntry",t._b({key:n.id},"UserMenuEntry",n,!1))})),1)])])}),[],!1,null,"6a818bbc",null).exports,Je={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"},Ve=Jt.getLocale();Object.prototype.hasOwnProperty.call(Je,Ve)&&(Ve=Je[Ve]),Nt().locale(Ve);var Xe,$e=function(){var t;if(c()(window).on("unload.main",(function(){Jt._unloadCalled=!0})),c()(window).on("beforeunload.main",(function(){setTimeout((function(){Jt._userIsNavigatingAway=!0,setTimeout((function(){Jt._unloadCalled||(Jt._userIsNavigatingAway=!1)}),1e4)}),1)})),c()(document).on("ajaxError.main",(function(t,e,n){n&&n.allowAuthErrors||Jt._processAjaxError(e)})),function(){if(function(){try{ne=(0,Vt.j)("core","config")}catch(t){ne=Jt.config}}(),function(){if(ne.auto_logout&&(0,Xt.ts)()){var t=Date.now();window.addEventListener("mousemove",(function(e){t=Date.now(),localStorage.setItem("lastActive",t)})),window.addEventListener("touchstart",(function(e){t=Date.now(),localStorage.setItem("lastActive",t)})),window.addEventListener("storage",(function(e){"lastActive"===e.key&&(t=e.newValue)})),setInterval((function(){var e=Date.now()-1e3*ne.session_lifetime;if(t<e){$t.info("Inactivity timout reached, logging out");var n=(0,d.generateUrl)("/logout")+"?requesttoken="+encodeURIComponent(bt());window.location=n}}),1e3)}}(),void 0===ne.session_keepalive||ne.session_keepalive){var t=ae();window.addEventListener("online",ee(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return $t.info("browser is online again, resuming heartbeat"),t=ae(),e.prev=2,e.next=5,oe();case 5:$t.info("session token successfully updated after resuming network"),(0,u.j8)("networkOnline",{success:!0}),e.next=13;break;case 9:e.prev=9,e.t0=e.catch(2),$t.error("could not update session token after resuming network",e.t0),(0,u.j8)("networkOnline",{success:!1});case 13:case"end":return e.stop()}}),e,null,[[2,9]])})))),window.addEventListener("offline",(function(){$t.info("browser is offline, stopping heartbeat"),(0,u.j8)("networkOffline",{}),clearInterval(t),$t.info("session heartbeat polling stopped")}))}else $t.info("session heartbeat disabled")}(),Jt.registerMenu(c()("#expand"),c()("#expanddiv"),!1,!0),c()(document).on("mouseup.closemenus",(function(t){var e=c()(t.target);if(e.closest(".menu").length||e.closest(".menutoggle").length)return!1;Jt.hideMenus()})),function(){re.ZP.mixin({methods:{t:jt.Iu,n:jt.uN}});var t=document.getElementById("header-left__appmenu");if(t){var e=new(re.ZP.extend(ze))({}).$mount(t);Object.assign(OC,{setNavigationCounter:function(t,n){e.setNavigationCounter(t,n)}})}}(),(t=document.getElementById("user-menu"))&&new re.ZP({el:t,render:function(t){return t(We)}}),function(){var t=document.getElementById("contactsmenu");t&&new re.ZP({el:t,render:function(t){return t(Pe)}})}(),c()("#app-navigation").length&&!c()("html").hasClass("lte9")&&!c()("#app-content").hasClass("no-snapper")){var e=new Snap({element:document.getElementById("app-content"),disable:"right",maxPosition:300,minDragDistance:100});c()("#app-content").prepend('<div id="app-navigation-toggle" class="icon-menu" style="display:none" tabindex="0"></div>');var n=!1;e.on("animating",(function(){n=!0})),e.on("animated",(function(){n=!1})),e.on("start",(function(){n=!0})),e.on("end",(function(){n=!1}));var i=e.open,o=e.close,a=function(){n||"closed"!==e.state().state||i("left")},r=function(){n||"closed"===e.state().state||o()};window.TESTING||(e.open=function(){h.ZP.defer(a)},e.close=function(){h.ZP.defer(r)}),c()("#app-navigation-toggle").click((function(t){"left"!==e.state().state&&e.open()})),c()("#app-navigation-toggle").keypress((function(t){"left"===e.state().state?e.close():e.open()})),c()("#app-navigation").delegate("a, :button","click",(function(t){var n=c()(t.target);n.is(".app-navigation-noclose")||n.closest(".app-navigation-noclose").length||n.is(".app-navigation-entry-utils-menu-button")||n.closest(".app-navigation-entry-utils-menu-button").length||n.is(".add-new")||n.closest(".add-new").length||n.is("#app-settings")||n.closest("#app-settings").length||e.close()}));var s=!1,l=!0,A=!1;Jt.allowNavigationBarSlideGesture=function(){l=!0,A&&(e.enable(),s=!0,A=!1)},Jt.disallowNavigationBarSlideGesture=function(){l=!1,s&&(e.disable(!0),s=!1,A=!0)};var p=function(){c()(window).width()>1024?(e.close(),e.disable(),s=!1,A=!1):l?(e.enable(),s=!0,A=!1):A=!0};c()(window).resize(h.ZP.debounce(p,250)),p()}setInterval((function(){c()(".live-relative-timestamp").each((function(){var t=parseInt(c()(this).attr("data-timestamp"),10);c()(this).text(Nt()(t).fromNow())}))}),3e4),Ut.init()},tn=(o(49226),o(41704),o(78312),o(22634),o(3682)),en=o(25108);c().prototype.tooltip=(Xe=c().prototype.tooltip,function(t){try{return Xe.call(this,t)}catch(e){if(e instanceof TypeError&&"destroy"===t)return void 0===window.TESTING&&en.error("Deprecated call $.tooltip('destroy') has been deprecated and should be removed"),Xe.call(this,"dispose");if(e instanceof TypeError&&"fixTitle"===t)return void 0===window.TESTING&&en.error("Deprecated call $.tooltip('fixTitle') has been deprecated and should be removed"),Xe.call(this,"_fixTitle")}});var nn=o(42152),on=o.n(nn),an=o(99560),rn=o.n(an),sn=(o(18553),o(34140),o(75693),o(99205),o(38554),/(\s|^)(https?:\/\/)((?:[-A-Z0-9+_]+\.)+[-A-Z]+(?:\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*)(\s|$)/gi);function ln(t){return this.formatLinksRich(t)}function cn(t){return this.formatLinksPlain(t)}function un(t){return t.replace(sn,(function(t,e,n,i,o){var a=i;return n?"http://"===n&&(a=n+i):n="https://",e+'<a class="external" target="_blank" rel="noopener noreferrer" href="'+n+i+'">'+a+"</a>"+o}))}function dn(t){var e=c()("<div></div>").html(t);return e.find("a").each((function(){var t=c()(this);t.html(t.attr("href"))})),e.html()}var An=o(25108);function pn(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(An.debug("querying Whats New data was successful: "+n),An.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(){fn(e.ocs.data.version,o)},r.appendChild(l),a.appendChild(r),u.appendChild(a),e.ocs.data.whatsNew.regular){var A=e.ocs.data.whatsNew.regular[d];a=document.createElement("li"),(r=document.createElement("span")).className="menuitem",(l=document.createElement("span")).className="icon-checkmark",r.appendChild(l),(s=document.createElement("p")).innerHTML=h.ZP.escape(A),r.appendChild(s),a.appendChild(r),u.appendChild(a)}h.ZP.isUndefined(e.ocs.data.changelogURL)||(a=document.createElement("li"),(r=document.createElement("a")).href=e.ocs.data.changelogURL,r.rel="noreferrer noopener",r.target="_blank",(l=document.createElement("span")).className="icon-link",r.appendChild(l),(s=document.createElement("span")).innerText=t("core","View changelog"),r.appendChild(s),a.appendChild(r),u.appendChild(a)),c.appendChild(u),document.body.appendChild(c)}}(e,i,o,n)},error:e.error||hn})}function fn(t,e){e=e||{},c().ajax({type:"POST",url:e.url||(0,d.generateOcsUrl)("core/whatsnew"),data:{version:encodeURIComponent(t)},success:e.success||mn,error:e.error||gn}),c()(".whatsNewPopover").remove()}function hn(t,e,n){An.debug("querying Whats New Data resulted in an error: "+e+n),An.debug(t)}function mn(t){}function gn(t){An.debug("dismissing Whats New data resulted in an error: "+t)}var vn,Cn,bn,wn={disableKeyboardShortcuts:function(){return(0,Vt.j)("theming","shortcutsDisabled",!1)},setPageHeading:function(t){var e=document.getElementById("page-heading-level-1");e&&(e.textContent=t)}},yn=o(95573),xn=o.n(yn),kn={},Pn={},En={},Bn={loadScript:function(t,e){var n=t+e;return Object.prototype.hasOwnProperty.call(Pn,n)?Promise.resolve():(Pn[n]=!0,new Promise((function(n,i){var o=OC.filePath(t,"js",e),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(t,e){var n=t+e;return Object.prototype.hasOwnProperty.call(En,n)?Promise.resolve():(En[n]=!0,new Promise((function(n,i){var o=OC.filePath(t,"css",e),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)})))}},On={success:function(t,e){return(0,m.s$)(t,e)},warning:function(t,e){return(0,m.K2)(t,e)},error:function(t,e){return(0,m.x2)(t,e)},info:function(t,e){return(0,m.JQ)(t,e)},message:function(t,e){return(0,m.PV)(t,e)}},Tn={Accessibility:wn,AppConfig:a,Collaboration:{registerType:function(t,e){kn[t]=e},trigger:function(t){return kn[t].action()},getTypes:function(){return Object.keys(kn)},getIcon:function(t){return kn[t].typeIconClass||""},getLabel:function(t){return xn()(kn[t].typeString||t)},getLink:function(t,e){return void 0!==kn[t]?kn[t].link(e):""}},Comments:r,InitialState:{loadState:Vt.j},Loader:Bn,Toast:On,WhatsNew:s},Dn=o(25108),In=function(){void 0===window.TESTING&&Dn.warn.apply(Dn,arguments)},jn=function(t,e,n){(Array.isArray(t)?t:[t]).forEach((function(t){void 0!==window[t]&&delete window[t],Object.defineProperty(window,t,{get:function(){return In(n?"".concat(t," is deprecated: ").concat(n):"".concat(t," is deprecated")),e()}})}))};window._=h.ZP,jn(["$","jQuery"],(function(){return c()}),"The global jQuery is deprecated. It will be removed in a later versions without another warning. Please ship your own."),jn("autosize",(function(){return tn.Z}),"please ship your own, this will be removed in Nextcloud 20"),jn("Backbone",(function(){return z()}),"please ship your own, this will be removed in Nextcloud 20"),jn(["Clipboard","ClipboardJS"],(function(){return on()}),"please ship your own, this will be removed in Nextcloud 20"),window.dav=S.dav,jn("Handlebars",(function(){return It()}),"please ship your own, this will be removed in Nextcloud 20"),jn("md5",(function(){return rn()}),"please ship your own, this will be removed in Nextcloud 20"),jn("moment",(function(){return Nt()}),"please ship your own, this will be removed in Nextcloud 20"),window.OC=Jt,jn("initCore",(function(){return $e}),"this is an internal function"),jn("oc_appswebroots",(function(){return Jt.appswebroots}),"use OC.appswebroots instead, this will be removed in Nextcloud 20"),jn("oc_config",(function(){return Jt.config}),"use OC.config instead, this will be removed in Nextcloud 20"),jn("oc_current_user",(function(){return Jt.getCurrentUser().uid}),"use OC.getCurrentUser().uid instead, this will be removed in Nextcloud 20"),jn("oc_debug",(function(){return Jt.debug}),"use OC.debug instead, this will be removed in Nextcloud 20"),jn("oc_defaults",(function(){return Jt.theme}),"use OC.theme instead, this will be removed in Nextcloud 20"),jn("oc_isadmin",Jt.isUserAdmin,"use OC.isUserAdmin() instead, this will be removed in Nextcloud 20"),jn("oc_requesttoken",(function(){return bt()}),"use OC.requestToken instead, this will be removed in Nextcloud 20"),jn("oc_webroot",(function(){return Jt.webroot}),"use OC.getRootPath() instead, this will be removed in Nextcloud 20"),jn("OCDialogs",(function(){return Jt.dialogs}),"use OC.dialogs instead, this will be removed in Nextcloud 20"),window.OCP=Tn,window.OCA=st,c().fn.select2=(vn=c().fn.select2,"select2",19,Cn=vn,bn=function(){return In("The ".concat("select2"," library is deprecated! It will be removed in nextcloud ").concat(19,".")),Cn.apply(this,arguments)},Object.assign(bn,Cn),bn),window.t=h.ZP.bind(Jt.L10N.translate,Jt.L10N),window.n=h.ZP.bind(Jt.L10N.translatePlural,Jt.L10N),c().fn.avatar=function(t,e,n,i,o,a){var r=function(t){t.imageplaceholder("?"),t.css("background-color","#b9b9b9")};if(void 0!==t&&(t=String(t)),void 0!==a&&(a=String(a)),void 0===e&&(e=this.height()>0?this.height():this.data("size")>0?this.data("size"):64),this.height(e),this.width(e),void 0===t){if(void 0===this.data("user"))return void r(this);t=this.data("user")}t=String(t).replace(/\//g,"");var s,l=this;s=t===Jt.getCurrentUser().uid?Jt.generateUrl("/avatar/{user}/{size}?v={version}",{user:t,size:Math.ceil(e*window.devicePixelRatio),version:oc_userconfig.avatar.version}):Jt.generateUrl("/avatar/{user}/{size}",{user:t,size:Math.ceil(e*window.devicePixelRatio)});var c=new Image;c.onload=function(){l.clearimageplaceholder(),l.append(c),"function"==typeof o&&o()},c.onerror=function(){l.clearimageplaceholder(),void 0!==a?l.imageplaceholder(t,a):r(l),"function"==typeof o&&o()},e<32?l.addClass("icon-loading-small"):l.addClass("icon-loading"),c.width=e,c.height=e,c.src=s,c.alt=""};var _n=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.on("click keydown",(function(i){if(lt(i)){if(!a.hasClass("hidden"))return a.addClass("hidden"),void a.hide();a.removeClass("hidden"),a.show(),a.hasClass("loaded")||(a.addClass("loaded"),c().ajax(Jt.generateUrl("/contactsmenu/findOne"),{method:"POST",data:{shareType:n,shareWith:e}}).then((function(e){a.find("ul").find("li").addClass("hidden"),(e.topAction?[e.topAction].concat(e.actions):[{hyperlink:"#",title:t("core","No action available")}]).forEach((function(t){a.find("ul").append(_n(t))})),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(_n({hyperlink:"#",title:n})),o.trigger("loaderror",e)})))}})),c()(document).click((function(t){var e=a.has(t.target).length>0,n=o.has(t.target).length>0;o.each((function(){c()(this).is(t.target)&&(n=!0)})),e||n||(a.addClass("hidden"),a.hide())}))}},c().fn.exists=function(){return this.length>0},c().fn.filterAttr=function(t,e){return this.filter((function(){return c()(this).attr(t)===e}))};var zn=o(15303);c().widget("oc.ocdialog",{options:{width:"auto",height:"auto",closeButton:!0,closeOnEscape:!0,closeCallback:null,modal:!1},_create:function(){var t=this;this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,height:this.element[0].style.height},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this.$dialog=c()('<div class="oc-dialog"></div>').attr({tabIndex:-1,role:"dialog"}).insertBefore(this.element),this.$dialog.append(this.element.detach()),this.element.removeAttr("title").addClass("oc-dialog-content").appendTo(this.$dialog),1===t.element.find("input").length&&t.element.find("input").on("keydown",(function(e){if(lt(e)&&t.$buttonrow){var n=t.$buttonrow.find("button.primary");n&&!n.prop("disabled")&&n.click()}})),this.$dialog.css({display:"inline-block",position:"fixed"}),this.enterCallback=null,c()(document).on("keydown keyup",(function(e){if(e.target===t.$dialog.get(0)||0!==t.$dialog.find(c()(e.target)).length)return 27===e.keyCode&&"keydown"===e.type&&t.options.closeOnEscape?(e.stopImmediatePropagation(),t.close(),!1):13===e.keyCode?(e.stopImmediatePropagation(),null!==t.enterCallback?(t.enterCallback(),e.preventDefault(),!1):"keyup"===e.type&&(e.preventDefault(),!1)):void 0})),this._setOptions(this.options),this._createOverlay(),this._useFocusTrap()},_init:function(){this._trigger("open")},_setOption:function(e,n){var i=this;switch(e){case"title":if(this.$title)this.$title.text(n);else{var o=c()('<h2 class="oc-dialog-title">'+n+"</h2>");this.$title=o.prependTo(this.$dialog)}this._setSizes();break;case"buttons":if(this.$buttonrow)this.$buttonrow.empty();else{var a=c()('<div class="oc-dialog-buttonrow"></div>');this.$buttonrow=a.appendTo(this.$dialog)}1===n.length?this.$buttonrow.addClass("onebutton"):2===n.length?this.$buttonrow.addClass("twobuttons"):3===n.length&&this.$buttonrow.addClass("threebuttons"),c().each(n,(function(t,e){var n=c()("<button>").text(e.text);e.classes&&n.addClass(e.classes),e.defaultButton&&(n.addClass("primary"),i.$defaultButton=n),i.$buttonrow.append(n),n.on("click keydown",(function(t){lt(t)&&e.click.apply(i.element[0],arguments)}))})),this.$buttonrow.find("button").on("focus",(function(t){i.$buttonrow.find("button").removeClass("primary"),c()(this).addClass("primary")})),this._setSizes();break;case"style":void 0!==n.buttons&&this.$buttonrow.addClass(n.buttons);break;case"closeButton":if(n){var r=c()('<button class="oc-dialog-close"></button>');r.attr("aria-label",t("core",'Close "{dialogTitle}" dialog',{dialogTitle:this.$title||this.options.title})),this.$dialog.prepend(r),r.on("click keydown",(function(t){lt(t)&&(i.options.closeCallback&&i.options.closeCallback(),i.close())}))}else this.$dialog.find(".oc-dialog-close").remove();break;case"width":this.$dialog.css("width",n);break;case"height":this.$dialog.css("height",n);break;case"close":this.closeCB=n}c().Widget.prototype._setOption.apply(this,arguments)},_setOptions:function(t){c().Widget.prototype._setOptions.apply(this,arguments)},_setSizes:function(){var t=0;this.$title&&(t+=this.$title.outerHeight(!0)),this.$buttonrow&&(t+=this.$buttonrow.outerHeight(!0)),this.element.css({height:"calc(100% - "+t+"px)"})},_createOverlay:function(){if(this.options.modal){var t=this,e=c()("#content");0===e.length&&(e=c()(".content")),this.overlay=c()("<div>").addClass("oc-dialog-dim").appendTo(e),this.overlay.on("click keydown keyup",(function(e){e.target!==t.$dialog.get(0)&&0===t.$dialog.find(c()(e.target)).length&&(e.preventDefault(),e.stopPropagation())}))}},_destroyOverlay:function(){this.options.modal&&this.overlay&&(this.overlay.off("click keydown keyup"),this.overlay.remove(),this.overlay=null)},_useFocusTrap:function(){Object.assign(window,{_nc_focus_trap:window._nc_focus_trap||[]});var t=this.$dialog[0];this.focusTrap=(0,zn.createFocusTrap)(t,{allowOutsideClick:!0,trapStack:window._nc_focus_trap,fallbackFocus:t}),this.focusTrap.activate()},_clearFocusTrap:function(){var t;null===(t=this.focusTrap)||void 0===t||t.deactivate(),this.focusTrap=null},widget:function(){return this.$dialog},setEnterCallback:function(t){this.enterCallback=t},unsetEnterCallback:function(){this.enterCallback=null},close:function(){this._clearFocusTrap(),this._destroyOverlay();var t=this;setTimeout((function(){t._trigger("close",t)}),200),t.$dialog.remove(),this.destroy()},destroy:function(){this.$title&&this.$title.remove(),this.$buttonrow&&this.$buttonrow.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),this.element.removeClass("oc-dialog-content").css(this.originalCss).detach().insertBefore(this.$dialog),this.$dialog.remove()}});var Sn=o(25108),Nn={init:function(t,e,n){if(this.vars=t,this.options=c().extend({},this.options,e),this.elem=n,"function"==typeof this.options.escapeFunction)for(var 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(t){var e="text/template"===this.elem.attr("type")?this.elem.html():this.elem.get(0).outerHTML;try{return e.replace(/{([^{}]*)}/g,(function(e,n){var i=t[n];return"string"==typeof i||"number"==typeof i?i:e}))}catch(t){Sn.error(t,"data:",e)}},options:{escapeFunction:xn()}};c().fn.octemplate=function(t,e){if(t=t||{},this.length)return Object.create(Nn).init(t,e,this)};var Un=o(25108),Mn=function(t){var e=t.toLowerCase();function n(t,e,n){this.r=t,this.g=e,this.b=n}function i(t,e,i){var o=[];o.push(e);for(var a=function(t,e){var n=new Array(3);return n[0]=(e[1].r-e[0].r)/t,n[1]=(e[1].g-e[0].g)/t,n[2]=(e[1].b-e[0].b)/t,n}(t,[e,i]),r=1;r<t;r++){var s=parseInt(e.r+a[0]*r),l=parseInt(e.g+a[1]*r),c=parseInt(e.b+a[2]*r);o.push(new n(s,l,c))}return o}null===e.match(/^([0-9a-f]{4}-?){8}$/)&&(e=rn()(e)),e=e.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(t,e){for(var n=0,i=[],o=0;o<t.length;o++)i.push(parseInt(t.charAt(o),16)%16);for(var a in i)n+=i[a];return parseInt(parseInt(n)%18)}(e)]};String.prototype.toRgb=function(){return Un.warn("String.prototype.toRgb is deprecated! It will be removed in Nextcloud 22."),Mn(this)},c().fn.imageplaceholder=function(t,e,n){e=e||t;var i=Mn(t);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!==t&&t.length){var a=e.replace(/\s+/g," ").trim().split(" ",2).map((function(t){return t[0].toUpperCase()})).join("");this.html(a)}},c().fn.clearimageplaceholder=function(){this.css("background-color",""),this.css("color",""),this.css("font-weight",""),this.css("text-align",""),this.css("line-height",""),this.css("font-size",""),this.html(""),this.removeClass("icon-loading"),this.removeClass("icon-loading-small")},c()(document).on("ajaxSend",(function(t,e,n){!1===n.crossDomain&&(e.setRequestHeader("requesttoken",bt()),e.setRequestHeader("OCS-APIREQUEST","true"))})),c().fn.selectRange=function(t,e){return this.each((function(){if(this.setSelectionRange)this.focus(),this.setSelectionRange(t,e);else if(this.createTextRange){var n=this.createTextRange();n.collapse(!0),n.moveEnd("character",e),n.moveStart("character",t),n.select()}}))},c().fn.extend({showPassword:function(t){var e={fn:null,args:{}};e.fn=t;var n=function(t,e){e.val(t.val())},i=function(t,e,i){t.is(":checked")?(n(e,i),i.show(),e.hide()):(n(i,e),i.hide(),e.show())};return this.each((function(){var t=c()(this),o=c()(t.data("typetoggle")),a=function(t){var e=c()(t),n=c()("<input />");return n.attr({type:"text",class:e.attr("class"),style:e.attr("style"),size:e.attr("size"),name:e.attr("name")+"-clone",tabindex:e.attr("tabindex"),autocomplete:"off"}),void 0!==e.attr("placeholder")&&n.attr("placeholder",e.attr("placeholder")),n}(t);a.insertAfter(t),e.fn&&(e.args.input=t,e.args.checkbox=o,e.args.clone=a),o.bind("click",(function(){i(o,t,a)})),t.bind("keyup",(function(){n(t,a)})),a.bind("keyup",(function(){n(a,t),t.trigger("keyup")})),a.bind("blur",(function(){t.trigger("focusout")})),i(o,t,a),a.closest("form").submit((function(t){a.prop("type","password")})),e.fn&&e.fn(e.args)}))}}),c().ui.autocomplete.prototype._resizeMenu=function(){this.menu.element.outerWidth(this.element.outerWidth())};var Ln=o(12448),Fn={};Fn.styleTagTransform=we(),Fn.setAttributes=ge(),Fn.insert=he().bind(null,"head"),Fn.domAPI=pe(),Fn.insertStyleElement=Ce(),de()(Ln.Z,Fn),Ln.Z&&Ln.Z.locals&&Ln.Z.locals;var Rn=o(72417),Qn={};Qn.styleTagTransform=we(),Qn.setAttributes=ge(),Qn.insert=he().bind(null,"head"),Qn.domAPI=pe(),Qn.insertStyleElement=Ce(),de()(Rn.Z,Qn),Rn.Z&&Rn.Z.locals&&Rn.Z.locals,c().ajaxSetup({contents:{script:!1}}),c().globalEval=function(){},window.addEventListener("DOMContentLoaded",(function(){var t;$e(),0===(t=c()("[data-apps-slide-toggle]")).length&&c()("#app-navigation").addClass("without-app-settings"),c()(document).click((function(e){b&&(t=c()("[data-apps-slide-toggle]")),t.each((function(t,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()(e.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 t=c()(i+" [autofocus]");1===t.length&&t.focus()}();else{var r=c()(e.target).closest(i);o.is(":visible")&&r[0]!==o[0]&&a()}}))})),window.history.pushState?window.onpopstate=_.bind(Jt.Util.History._onPopState,Jt.Util.History):c()(window).on("hashchange",_.bind(Jt.Util.History._onPopState,Jt.Util.History))}))},12448:function(t,e,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),A=new URL(n(12081),n.b),p=new URL(n(47868),n.b),f=r()(o()),h=l()(c),m=l()(u),g=l()(d),v=l()(A),C=l()(p);f.push([t.id,".ui-widget-content{border:1px solid var(--color-border);background:var(--color-main-background) none;color:var(--color-main-text)}.ui-widget-content a{color:var(--color-main-text)}.ui-widget-header{border:none;color:var(--color-main-text);background-image:none}.ui-widget-header a{color:var(--color-main-text)}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid var(--color-border);background:var(--color-main-background) none;font-weight:bold;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #ddd;background:var(--color-main-background) none;font-weight:bold;color:var(--color-main-text)}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:var(--color-main-text)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid var(--color-primary);background:var(--color-main-background) none;font-weight:bold;color:var(--color-main-text)}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:var(--color-main-text)}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid var(--color-main-background);background:var(--color-main-background) none;color:var(--color-text-light);font-weight:600}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:var(--color-text-lighter)}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:var(--color-error);background:var(--color-error) none;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-state-default .ui-icon{background-image:url("+h+")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("+h+")}.ui-state-active .ui-icon{background-image:url("+h+")}.ui-state-highlight .ui-icon{background-image:url("+m+")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("+g+")}.ui-icon.ui-icon-none{display:none}.ui-widget-overlay{background:#666 url("+v+") 50% 50% repeat;opacity:.5}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url("+C+") 50% 50% repeat-x;opacity:.2;border-radius:5px}.ui-tabs{border:none}.ui-tabs .ui-tabs-nav.ui-corner-all{border-bottom-left-radius:0;border-bottom-right-radius:0}.ui-tabs .ui-tabs-nav{background:none;margin-bottom:15px}.ui-tabs .ui-tabs-nav .ui-state-default{border:none;border-bottom:1px solid rgba(0,0,0,0);font-weight:normal;margin:0 !important;padding:0 !important}.ui-tabs .ui-tabs-nav .ui-state-hover,.ui-tabs .ui-tabs-nav .ui-state-active{border:none;border-bottom:1px solid var(--color-main-text);color:var(--color-main-text)}.ui-tabs .ui-tabs-nav .ui-state-hover a,.ui-tabs .ui-tabs-nav .ui-state-hover a:link,.ui-tabs .ui-tabs-nav .ui-state-hover a:hover,.ui-tabs .ui-tabs-nav .ui-state-hover a:visited,.ui-tabs .ui-tabs-nav .ui-state-active a,.ui-tabs .ui-tabs-nav .ui-state-active a:link,.ui-tabs .ui-tabs-nav .ui-state-active a:hover,.ui-tabs .ui-tabs-nav .ui-state-active a:visited{color:var(--color-main-text)}.ui-tabs .ui-tabs-nav .ui-state-active{font-weight:bold}.ui-autocomplete.ui-menu{padding:0}.ui-autocomplete.ui-menu.item-count-1,.ui-autocomplete.ui-menu.item-count-2{overflow-y:hidden}.ui-autocomplete.ui-menu .ui-menu-item a{color:var(--color-text-lighter);display:block;padding:4px 4px 4px 14px}.ui-autocomplete.ui-menu .ui-menu-item a.ui-state-focus,.ui-autocomplete.ui-menu .ui-menu-item a.ui-state-active{box-shadow:inset 4px 0 var(--color-primary-element);color:var(--color-main-text)}.ui-autocomplete.ui-widget-content{background:var(--color-main-background);border-top:none}.ui-autocomplete.ui-corner-all{border-radius:0;border-bottom-left-radius:var(--border-radius);border-bottom-right-radius:var(--border-radius)}.ui-autocomplete .ui-state-hover,.ui-autocomplete .ui-widget-content .ui-state-hover,.ui-autocomplete .ui-widget-header .ui-state-hover,.ui-autocomplete .ui-state-focus,.ui-autocomplete .ui-widget-content .ui-state-focus,.ui-autocomplete .ui-widget-header .ui-state-focus{border:1px solid rgba(0,0,0,0);background:inherit;color:var(--color-primary-element)}.ui-autocomplete .ui-menu-item a{border-radius:0 !important}.ui-button.primary{background-color:var(--color-primary);color:var(--color-primary-text);border:1px solid var(--color-primary-text)}.ui-button:hover{font-weight:bold !important}.ui-draggable-handle,.ui-selectable{touch-action:pan-y}","",{version:3,sources:["webpack://./core/src/jquery/css/jquery-ui-fixes.scss"],names:[],mappings:"AAEA,mBACC,oCAAA,CACA,4CAAA,CACA,4BAAA,CAED,qBACC,4BAAA,CAED,kBACC,WAAA,CACA,4BAAA,CACA,qBAAA,CAED,oBACC,4BAAA,CAKD,2FAGC,oCAAA,CACA,4CAAA,CACA,gBAAA,CACA,UAAA,CAED,yEAGC,UAAA,CAED,0KAMC,qBAAA,CACA,4CAAA,CACA,gBAAA,CACA,4BAAA,CAED,2FAIC,4BAAA,CAED,wFAGC,qCAAA,CACA,4CAAA,CACA,gBAAA,CACA,4BAAA,CAED,sEAGC,4BAAA,CAKD,iGAGC,6CAAA,CACA,4CAAA,CACA,6BAAA,CACA,eAAA,CAED,uGAGC,+BAAA,CAED,qFAGC,yBAAA,CACA,kCAAA,CACA,UAAA,CAED,2FAGC,UAAA,CAED,oGAGC,UAAA,CAKD,2BACC,wDAAA,CAED,kDAEC,wDAAA,CAED,0BACC,wDAAA,CAED,6BACC,wDAAA,CAED,uDAEC,wDAAA,CAED,sBACC,YAAA,CAMD,mBACC,sEAAA,CACA,UAAA,CAED,kBACC,oBAAA,CACA,WAAA,CACA,wEAAA,CACA,UAAA,CACA,iBAAA,CAID,SACC,WAAA,CAEA,oCACC,2BAAA,CACA,4BAAA,CAGD,sBACC,eAAA,CACA,kBAAA,CAEA,wCACC,WAAA,CACA,qCAAA,CACA,kBAAA,CACA,mBAAA,CACA,oBAAA,CAGD,6EAEC,WAAA,CACA,8CAAA,CACA,4BAAA,CACA,0WACC,4BAAA,CAGF,uCACC,gBAAA,CAOF,yBACC,SAAA,CAIA,4EAEC,iBAAA,CAGD,yCACC,+BAAA,CACA,aAAA,CACA,wBAAA,CAEA,iHACC,mDAAA,CACA,4BAAA,CAKH,mCACC,uCAAA,CACA,eAAA,CAGD,+BACC,eAAA,CACA,8CAAA,CACA,+CAAA,CAGD,gRAKC,8BAAA,CACA,kBAAA,CACA,kCAAA,CAIA,iCACC,0BAAA,CAKH,mBACC,qCAAA,CACA,+BAAA,CACA,0CAAA,CAID,iBACI,2BAAA,CAKJ,oCAEC,kBAAA",sourcesContent:["/* Component containers\n----------------------------------*/\n.ui-widget-content {\n\tborder: 1px solid var(--color-border);\n\tbackground: var(--color-main-background) none;\n\tcolor: var(--color-main-text);\n}\n.ui-widget-content a {\n\tcolor: var(--color-main-text);\n}\n.ui-widget-header {\n\tborder: none;\n\tcolor: var(--color-main-text);\n\tbackground-image: none;\n}\n.ui-widget-header a {\n\tcolor: var(--color-main-text);\n}\n\n/* Interaction states\n----------------------------------*/\n.ui-state-default,\n.ui-widget-content .ui-state-default,\n.ui-widget-header .ui-state-default {\n\tborder: 1px solid var(--color-border);\n\tbackground: var(--color-main-background) none;\n\tfont-weight: bold;\n\tcolor: #555;\n}\n.ui-state-default a,\n.ui-state-default a:link,\n.ui-state-default a:visited {\n\tcolor: #555;\n}\n.ui-state-hover,\n.ui-widget-content .ui-state-hover,\n.ui-widget-header .ui-state-hover,\n.ui-state-focus,\n.ui-widget-content .ui-state-focus,\n.ui-widget-header .ui-state-focus {\n\tborder: 1px solid #ddd;\n\tbackground: var(--color-main-background) none;\n\tfont-weight: bold;\n\tcolor: var(--color-main-text);\n}\n.ui-state-hover a,\n.ui-state-hover a:hover,\n.ui-state-hover a:link,\n.ui-state-hover a:visited {\n\tcolor: var(--color-main-text);\n}\n.ui-state-active,\n.ui-widget-content .ui-state-active,\n.ui-widget-header .ui-state-active {\n\tborder: 1px solid var(--color-primary);\n\tbackground: var(--color-main-background) none;\n\tfont-weight: bold;\n\tcolor: var(--color-main-text);\n}\n.ui-state-active a,\n.ui-state-active a:link,\n.ui-state-active a:visited {\n\tcolor: var(--color-main-text);\n}\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-highlight,\n.ui-widget-content .ui-state-highlight,\n.ui-widget-header .ui-state-highlight {\n\tborder: 1px solid var(--color-main-background);\n\tbackground: var(--color-main-background) none;\n\tcolor: var(--color-text-light);\n\tfont-weight: 600;\n}\n.ui-state-highlight a,\n.ui-widget-content .ui-state-highlight a,\n.ui-widget-header .ui-state-highlight a {\n\tcolor: var(--color-text-lighter);\n}\n.ui-state-error,\n.ui-widget-content .ui-state-error,\n.ui-widget-header .ui-state-error {\n\tborder: var(--color-error);\n\tbackground: var(--color-error) none;\n\tcolor: #ffffff;\n}\n.ui-state-error a,\n.ui-widget-content .ui-state-error a,\n.ui-widget-header .ui-state-error a {\n\tcolor: #ffffff;\n}\n.ui-state-error-text,\n.ui-widget-content .ui-state-error-text,\n.ui-widget-header .ui-state-error-text {\n\tcolor: #ffffff;\n}\n\n/* Icons\n----------------------------------*/\n.ui-state-default .ui-icon {\n\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\n}\n.ui-state-hover .ui-icon,\n.ui-state-focus .ui-icon {\n\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\n}\n.ui-state-active .ui-icon {\n\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\n}\n.ui-state-highlight .ui-icon {\n\tbackground-image: url('images/ui-icons_ffffff_256x240.png');\n}\n.ui-state-error .ui-icon,\n.ui-state-error-text .ui-icon {\n\tbackground-image: url('images/ui-icons_ffd27a_256x240.png');\n}\n.ui-icon.ui-icon-none {\n\tdisplay: none;\n}\n\n/* Misc visuals\n----------------------------------*/\n/* Overlays */\n.ui-widget-overlay {\n\tbackground: #666666 url('images/ui-bg_diagonals-thick_20_666666_40x40.png') 50% 50% repeat;\n\topacity: .5;\n}\n.ui-widget-shadow {\n\tmargin: -5px 0 0 -5px;\n\tpadding: 5px;\n\tbackground: #000000 url('images/ui-bg_flat_10_000000_40x100.png') 50% 50% repeat-x;\n\topacity: .2;\n\tborder-radius: 5px;\n}\n\n/* Tabs customizations */\n.ui-tabs {\n\tborder: none;\n\n\t.ui-tabs-nav.ui-corner-all {\n\t\tborder-bottom-left-radius: 0;\n\t\tborder-bottom-right-radius: 0;\n\t}\n\n\t.ui-tabs-nav {\n\t\tbackground: none;\n\t\tmargin-bottom: 15px;\n\n\t\t.ui-state-default {\n\t\t\tborder: none;\n\t\t\tborder-bottom: 1px solid transparent;\n\t\t\tfont-weight: normal;\n\t\t\tmargin: 0 !important;\n\t\t\tpadding: 0 !important;\n\t\t}\n\n\t\t.ui-state-hover,\n\t\t.ui-state-active {\n\t\t\tborder: none;\n\t\t\tborder-bottom: 1px solid var(--color-main-text);\n\t\t\tcolor: var(--color-main-text);\n\t\t\ta, a:link, a:hover, a:visited {\n\t\t\t\tcolor: var(--color-main-text);\n\t\t\t}\n\t\t}\n\t\t.ui-state-active {\n\t\t\tfont-weight: bold;\n\t\t}\n\t}\n}\n\n/* Select menus */\n.ui-autocomplete {\n\t&.ui-menu {\n\t\tpadding: 0;\n\n\t\t/* scrolling starts from three items,\n\t\t * so hide overflow and scrollbars for a clean layout */\n\t\t&.item-count-1,\n\t\t&.item-count-2 {\n\t\t\toverflow-y: hidden;\n\t\t}\n\n\t\t.ui-menu-item a {\n\t\t\tcolor: var(--color-text-lighter);\n\t\t\tdisplay: block;\n\t\t\tpadding: 4px 4px 4px 14px;\n\n\t\t\t&.ui-state-focus, &.ui-state-active {\n\t\t\t\tbox-shadow: inset 4px 0 var(--color-primary-element);\n\t\t\t\tcolor: var(--color-main-text);\n\t\t\t}\n\t\t}\n\t}\n\n\t&.ui-widget-content {\n\t\tbackground: var(--color-main-background);\n\t\tborder-top: none;\n\t}\n\n\t&.ui-corner-all {\n\t\tborder-radius: 0;\n\t\tborder-bottom-left-radius: var(--border-radius);\n\t\tborder-bottom-right-radius: var(--border-radius);\n\t}\n\n\t.ui-state-hover, .ui-widget-content .ui-state-hover,\n\t.ui-widget-header .ui-state-hover,\n\t.ui-state-focus,\n\t.ui-widget-content .ui-state-focus,\n\t.ui-widget-header .ui-state-focus {\n\t\tborder: 1px solid transparent;\n\t\tbackground: inherit;\n\t\tcolor: var(--color-primary-element);\n\t}\n\n\t.ui-menu-item {\n\t\ta {\n\t\t\tborder-radius: 0 !important;\n\t\t}\n\t}\n}\n\n.ui-button.primary {\n\tbackground-color: var(--color-primary);\n\tcolor: var(--color-primary-text);\n\tborder: 1px solid var(--color-primary-text);\n}\n\n// fix ui-buttons on hover\n.ui-button:hover {\n font-weight:bold !important;\n}\n\n\n/* DRAGGABLE */\n.ui-draggable-handle,\n.ui-selectable {\n\ttouch-action: pan-y;\n}\n"],sourceRoot:""}]),e.Z=f},72417:function(t,e,n){"use strict";var i=n(87537),o=n.n(i),a=n(23645),r=n.n(a)()(o());r.push([t.id,".oc-dialog{background:var(--color-main-background);color:var(--color-text-light);border-radius:var(--border-radius-large);box-shadow:0 0 30px var(--color-box-shadow);padding:24px;z-index:10000;font-size:100%;box-sizing:border-box;min-width:200px;top:50%;left:50%;transform:translate(-50%, -50%);max-height:calc(100% - 20px);max-width:calc(100% - 20px);overflow:auto}.oc-dialog-title{background:var(--color-main-background)}.oc-dialog-buttonrow{position:relative;display:flex;background:rgba(0,0,0,0);right:0;bottom:0;padding:0;padding-top:10px;box-sizing:border-box;width:100%;background-image:linear-gradient(rgba(255, 255, 255, 0), var(--color-main-background))}.oc-dialog-buttonrow.twobuttons{justify-content:space-between}.oc-dialog-buttonrow.onebutton,.oc-dialog-buttonrow.twobuttons.aside{justify-content:flex-end}.oc-dialog-buttonrow button{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:44px;min-width:44px}.oc-dialog-close{position:absolute;width:44px !important;height:44px !important;top:4px;right:4px;padding:25px;background:var(--icon-close-dark) no-repeat center;opacity:.5;border-radius:var(--border-radius-pill)}.oc-dialog-close:hover,.oc-dialog-close:focus,.oc-dialog-close:active{opacity:1}.oc-dialog-dim{background-color:#000;opacity:.2;z-index:9999;position:fixed;top:0;left:0;width:100%;height:100%}body.theme--dark .oc-dialog-dim{opacity:.8}.oc-dialog-content{width:100%;max-width:550px}.oc-dialog.password-confirmation .oc-dialog-content{width:auto}.oc-dialog.password-confirmation .oc-dialog-content input[type=password]{width:100%}.oc-dialog.password-confirmation .oc-dialog-content label{display:none}","",{version:3,sources:["webpack://./core/src/jquery/css/jquery.ocdialog.scss"],names:[],mappings:"AAAA,WACC,uCAAA,CACA,6BAAA,CACA,wCAAA,CACA,2CAAA,CACA,YAAA,CACA,aAAA,CACA,cAAA,CACA,qBAAA,CACA,eAAA,CACA,OAAA,CACA,QAAA,CACA,+BAAA,CACA,4BAAA,CACA,2BAAA,CACA,aAAA,CAED,iBACC,uCAAA,CAED,qBACC,iBAAA,CACA,YAAA,CACA,wBAAA,CACA,OAAA,CACA,QAAA,CACA,SAAA,CACA,gBAAA,CACA,qBAAA,CACA,UAAA,CACA,sFAAA,CAEA,gCACO,6BAAA,CAGP,qEAEC,wBAAA,CAGD,4BACI,kBAAA,CACA,eAAA,CACH,sBAAA,CACA,WAAA,CACA,cAAA,CAIF,iBACC,iBAAA,CACA,qBAAA,CACA,sBAAA,CACA,OAAA,CACA,SAAA,CACA,YAAA,CACA,kDAAA,CACA,UAAA,CACA,uCAAA,CAEA,sEAGC,SAAA,CAIF,eACC,qBAAA,CACA,UAAA,CACA,YAAA,CACA,cAAA,CACA,KAAA,CACA,MAAA,CACA,UAAA,CACA,WAAA,CAGD,gCACC,UAAA,CAGD,mBACC,UAAA,CACA,eAAA,CAIA,oDACC,UAAA,CAEA,yEACC,UAAA,CAED,0DACC,YAAA",sourcesContent:[".oc-dialog {\n\tbackground: var(--color-main-background);\n\tcolor: var(--color-text-light);\n\tborder-radius: var(--border-radius-large);\n\tbox-shadow: 0 0 30px var(--color-box-shadow);\n\tpadding: 24px;\n\tz-index: 10000;\n\tfont-size: 100%;\n\tbox-sizing: border-box;\n\tmin-width: 200px;\n\ttop: 50%;\n\tleft: 50%;\n\ttransform: translate(-50%, -50%);\n\tmax-height: calc(100% - 20px);\n\tmax-width: calc(100% - 20px);\n\toverflow: auto;\n}\n.oc-dialog-title {\n\tbackground: var(--color-main-background);\n}\n.oc-dialog-buttonrow {\n\tposition: relative;\n\tdisplay: flex;\n\tbackground: transparent;\n\tright: 0;\n\tbottom: 0;\n\tpadding: 0;\n\tpadding-top: 10px;\n\tbox-sizing: border-box;\n\twidth: 100%;\n\tbackground-image: linear-gradient(rgba(255, 255, 255, 0.0), var(--color-main-background));\n\n\t&.twobuttons {\n justify-content: space-between;\n }\n\n\t&.onebutton,\n\t&.twobuttons.aside {\n\t\tjustify-content: flex-end;\n\t}\n\n\tbutton {\n\t white-space: nowrap;\n\t overflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\theight: 44px;\n\t\tmin-width: 44px;\n\t}\n}\n\n.oc-dialog-close {\n\tposition: absolute;\n\twidth: 44px !important;\n\theight: 44px !important;\n\ttop: 4px;\n\tright: 4px;\n\tpadding: 25px;\n\tbackground: var(--icon-close-dark) no-repeat center;\n\topacity: .5;\n\tborder-radius: var(--border-radius-pill);\n\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\topacity: 1;\n\t}\n}\n\n.oc-dialog-dim {\n\tbackground-color: #000;\n\topacity: .2;\n\tz-index: 9999;\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n}\n\nbody.theme--dark .oc-dialog-dim {\n\topacity: .8;\n}\n\n.oc-dialog-content {\n\twidth: 100%;\n\tmax-width: 550px;\n}\n\n.oc-dialog.password-confirmation {\n\t.oc-dialog-content {\n\t\twidth: auto;\n\n\t\tinput[type=password] {\n\t\t\twidth: 100%;\n\t\t}\n\t\tlabel {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),e.Z=r},58626:function(t,e,n){"use strict";var i=n(87537),o=n.n(i),a=n(23645),r=n.n(a)()(o());r.push([t.id,'.app-menu[data-v-b778f520]{width:100%;display:flex;flex-shrink:1;flex-wrap:wrap}.app-menu-main[data-v-b778f520]{display:flex;flex-wrap:nowrap}.app-menu-main .app-menu-entry[data-v-b778f520]{width:50px;height:50px;position:relative;display:flex;opacity:.7}.app-menu-main .app-menu-entry.app-menu-entry__active[data-v-b778f520]{opacity:1}.app-menu-main .app-menu-entry.app-menu-entry__active[data-v-b778f520]::before{content:" ";position:absolute;pointer-events:none;border-bottom-color:var(--color-main-background);transform:translateX(-50%);width:12px;height:5px;border-radius:3px;background-color:var(--color-primary-text);left:50%;bottom:6px;display:block;transition:all .1s ease-in-out;opacity:1}.app-menu-main .app-menu-entry.app-menu-entry__active .app-menu-entry--label[data-v-b778f520]{font-weight:bold}.app-menu-main .app-menu-entry a[data-v-b778f520]{width:calc(100% - 4px);height:calc(100% - 4px);margin:2px;color:var(--color-primary-text);position:relative}.app-menu-main .app-menu-entry img[data-v-b778f520]{transition:margin .1s ease-in-out;width:20px;height:20px;padding:calc((100% - 20px)/2);box-sizing:content-box;filter:var(--background-image-invert-if-bright)}.app-menu-main .app-menu-entry .app-menu-entry--label[data-v-b778f520]{opacity:0;position:absolute;font-size:12px;color:var(--color-primary-text);text-align:center;left:50%;top:45%;display:block;min-width:100%;transform:translateX(-50%);transition:all .1s ease-in-out;width:100%;text-overflow:ellipsis;overflow:hidden;letter-spacing:-0.5px}.app-menu-main .app-menu-entry[data-v-b778f520]:hover,.app-menu-main .app-menu-entry[data-v-b778f520]:focus-within{opacity:1}.app-menu-main .app-menu-entry:hover .app-menu-entry--label[data-v-b778f520],.app-menu-main .app-menu-entry:focus-within .app-menu-entry--label[data-v-b778f520]{opacity:1;font-weight:bolder;bottom:0;width:100%;text-overflow:ellipsis;overflow:hidden}.app-menu-main[data-v-b778f520]:hover,.app-menu-main[data-v-b778f520]:focus-within,.app-menu-main .app-menu-entry[data-v-b778f520]:hover,.app-menu-main .app-menu-entry[data-v-b778f520]:focus{opacity:1}.app-menu-main:hover img[data-v-b778f520],.app-menu-main:focus-within img[data-v-b778f520],.app-menu-main .app-menu-entry:hover img[data-v-b778f520],.app-menu-main .app-menu-entry:focus img[data-v-b778f520]{margin-top:-8px}.app-menu-main:hover .app-menu-entry--label[data-v-b778f520],.app-menu-main:focus-within .app-menu-entry--label[data-v-b778f520],.app-menu-main .app-menu-entry:hover .app-menu-entry--label[data-v-b778f520],.app-menu-main .app-menu-entry:focus .app-menu-entry--label[data-v-b778f520]{opacity:1;bottom:0}.app-menu-main[data-v-b778f520]:hover::before,.app-menu-main:hover .app-menu-entry[data-v-b778f520]::before,.app-menu-main[data-v-b778f520]:focus-within::before,.app-menu-main:focus-within .app-menu-entry[data-v-b778f520]::before,.app-menu-main .app-menu-entry[data-v-b778f520]:hover::before,.app-menu-main .app-menu-entry:hover .app-menu-entry[data-v-b778f520]::before,.app-menu-main .app-menu-entry[data-v-b778f520]:focus::before,.app-menu-main .app-menu-entry:focus .app-menu-entry[data-v-b778f520]::before{opacity:0}[data-v-b778f520] .app-menu-more .button-vue--vue-tertiary{opacity:.7;margin:3px;filter:var(--background-image-invert-if-bright)}[data-v-b778f520] .app-menu-more .button-vue--vue-tertiary:not([aria-expanded=true]){color:var(--color-primary-text)}[data-v-b778f520] .app-menu-more .button-vue--vue-tertiary:not([aria-expanded=true]):hover{opacity:1;background-color:rgba(0,0,0,0) !important}[data-v-b778f520] .app-menu-more .button-vue--vue-tertiary:focus-visible{opacity:1;outline:none !important}.app-menu-popover-entry .app-icon[data-v-b778f520]{position:relative;height:44px;filter:var(--background-invert-if-bright)}.app-menu-popover-entry .app-icon.has-unread[data-v-b778f520]::after{background-color:var(--color-main-text)}.app-menu-popover-entry .app-icon img[data-v-b778f520]{width:20px;height:20px;padding:15px}.has-unread[data-v-b778f520]::after{content:"";width:8px;height:8px;background-color:var(--color-primary-text);border-radius:50%;position:absolute;display:block;top:10px;right:10px}.unread-counter[data-v-b778f520]{display:none}',"",{version:3,sources:["webpack://./core/src/components/AppMenu.vue"],names:[],mappings:"AAGA,2BACC,UAAA,CACA,YAAA,CACA,aAAA,CACA,cAAA,CAED,gCACC,YAAA,CACA,gBAAA,CAEA,gDACC,UAAA,CACA,WAAA,CACA,iBAAA,CACA,YAAA,CACA,UAAA,CAEA,uEACC,SAAA,CAEA,+EACC,WAAA,CACA,iBAAA,CACA,mBAAA,CACA,gDAAA,CACA,0BAAA,CACA,UAAA,CACA,UAAA,CACA,iBAAA,CACA,0CAAA,CACA,QAAA,CACA,UAAA,CACA,aAAA,CACA,8BAAA,CACA,SAAA,CAGD,8FACC,gBAAA,CAIF,kDACC,sBAAA,CACA,uBAAA,CACA,UAAA,CACA,+BAAA,CACA,iBAAA,CAGD,oDACC,iCAAA,CACA,UAtDgB,CAuDhB,WAvDgB,CAwDhB,6BAAA,CACA,sBAAA,CACA,+CAAA,CAGD,uEACC,SAAA,CACA,iBAAA,CACA,cAAA,CACA,+BAAA,CACA,iBAAA,CACA,QAAA,CACA,OAAA,CACA,aAAA,CACA,cAAA,CACA,0BAAA,CACA,8BAAA,CACA,UAAA,CACA,sBAAA,CACA,eAAA,CACA,qBAAA,CAGD,mHAEC,SAAA,CACA,iKACC,SAAA,CACA,kBAAA,CACA,QAAA,CACA,UAAA,CACA,sBAAA,CACA,eAAA,CAOH,+LAIC,SAAA,CAEA,+MACC,eAAA,CAGD,2RACC,SAAA,CACA,QAAA,CAGD,8fACC,SAAA,CAKH,2DACC,UAAA,CACA,UAAA,CACA,+CAAA,CAGA,qFACC,+BAAA,CAEA,2FACC,SAAA,CACA,yCAAA,CAIF,yEACC,SAAA,CACA,uBAAA,CAKD,mDACC,iBAAA,CACA,WAAA,CAEA,yCAAA,CAEA,qEACC,uCAAA,CAGD,uDACC,UArJgB,CAsJhB,WAtJgB,CAuJhB,YAAA,CAKH,oCACC,UAAA,CACA,SAAA,CACA,UAAA,CACA,0CAAA,CACA,iBAAA,CACA,iBAAA,CACA,aAAA,CACA,QAAA,CACA,UAAA,CAGD,iCACC,YAAA",sourcesContent:['\n$header-icon-size: 20px;\n\n.app-menu {\n\twidth: 100%;\n\tdisplay: flex;\n\tflex-shrink: 1;\n\tflex-wrap: wrap;\n}\n.app-menu-main {\n\tdisplay: flex;\n\tflex-wrap: nowrap;\n\n\t.app-menu-entry {\n\t\twidth: 50px;\n\t\theight: 50px;\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t\topacity: .7;\n\n\t\t&.app-menu-entry__active {\n\t\t\topacity: 1;\n\n\t\t\t&::before {\n\t\t\t\tcontent: " ";\n\t\t\t\tposition: absolute;\n\t\t\t\tpointer-events: none;\n\t\t\t\tborder-bottom-color: var(--color-main-background);\n\t\t\t\ttransform: translateX(-50%);\n\t\t\t\twidth: 12px;\n\t\t\t\theight: 5px;\n\t\t\t\tborder-radius: 3px;\n\t\t\t\tbackground-color: var(--color-primary-text);\n\t\t\t\tleft: 50%;\n\t\t\t\tbottom: 6px;\n\t\t\t\tdisplay: block;\n\t\t\t\ttransition: all 0.1s ease-in-out;\n\t\t\t\topacity: 1;\n\t\t\t}\n\n\t\t\t.app-menu-entry--label {\n\t\t\t\tfont-weight: bold;\n\t\t\t}\n\t\t}\n\n\t\ta {\n\t\t\twidth: calc(100% - 4px);\n\t\t\theight: calc(100% - 4px);\n\t\t\tmargin: 2px;\n\t\t\tcolor: var(--color-primary-text);\n\t\t\tposition: relative;\n\t\t}\n\n\t\timg {\n\t\t\ttransition: margin 0.1s ease-in-out;\n\t\t\twidth: $header-icon-size;\n\t\t\theight: $header-icon-size;\n\t\t\tpadding: calc((100% - $header-icon-size) / 2);\n\t\t\tbox-sizing: content-box;\n\t\t\tfilter: var(--background-image-invert-if-bright);\n\t\t}\n\n\t\t.app-menu-entry--label {\n\t\t\topacity: 0;\n\t\t\tposition: absolute;\n\t\t\tfont-size: 12px;\n\t\t\tcolor: var(--color-primary-text);\n\t\t\ttext-align: center;\n\t\t\tleft: 50%;\n\t\t\ttop: 45%;\n\t\t\tdisplay: block;\n\t\t\tmin-width: 100%;\n\t\t\ttransform: translateX(-50%);\n\t\t\ttransition: all 0.1s ease-in-out;\n\t\t\twidth: 100%;\n\t\t\ttext-overflow: ellipsis;\n\t\t\toverflow: hidden;\n\t\t\tletter-spacing: -0.5px;\n\t\t}\n\n\t\t&:hover,\n\t\t&:focus-within {\n\t\t\topacity: 1;\n\t\t\t.app-menu-entry--label {\n\t\t\t\topacity: 1;\n\t\t\t\tfont-weight: bolder;\n\t\t\t\tbottom: 0;\n\t\t\t\twidth: 100%;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t}\n\n\t}\n\n\t// Show labels\n\t&:hover,\n\t&:focus-within,\n\t.app-menu-entry:hover,\n\t.app-menu-entry:focus {\n\t\topacity: 1;\n\n\t\timg {\n\t\t\tmargin-top: -8px;\n\t\t}\n\n\t\t.app-menu-entry--label {\n\t\t\topacity: 1;\n\t\t\tbottom: 0;\n\t\t}\n\n\t\t&::before, .app-menu-entry::before {\n\t\t\topacity: 0;\n\t\t}\n\t}\n}\n\n::v-deep .app-menu-more .button-vue--vue-tertiary {\n\topacity: .7;\n\tmargin: 3px;\n\tfilter: var(--background-image-invert-if-bright);\n\n\t/* Remove all background and align text color if not expanded */\n\t&:not([aria-expanded="true"]) {\n\t\tcolor: var(--color-primary-text);\n\n\t\t&:hover {\n\t\t\topacity: 1;\n\t\t\tbackground-color: transparent !important;\n\t\t}\n\t}\n\n\t&:focus-visible {\n\t\topacity: 1;\n\t\toutline: none !important;\n\t}\n}\n\n.app-menu-popover-entry {\n\t.app-icon {\n\t\tposition: relative;\n\t\theight: 44px;\n\t\t/* Icons are bright so invert them if bright color theme == bright background is used */\n\t\tfilter: var(--background-invert-if-bright);\n\n\t\t&.has-unread::after {\n\t\t\tbackground-color: var(--color-main-text);\n\t\t}\n\n\t\timg {\n\t\t\twidth: $header-icon-size;\n\t\t\theight: $header-icon-size;\n\t\t\tpadding: calc((50px - $header-icon-size) / 2);\n\t\t}\n\t}\n}\n\n.has-unread::after {\n\tcontent: "";\n\twidth: 8px;\n\theight: 8px;\n\tbackground-color: var(--color-primary-text);\n\tborder-radius: 50%;\n\tposition: absolute;\n\tdisplay: block;\n\ttop: 10px;\n\tright: 10px;\n}\n\n.unread-counter {\n\tdisplay: none;\n}\n'],sourceRoot:""}]),e.Z=r},88951:function(t,e,n){"use strict";var i=n(87537),o=n.n(i),a=n(23645),r=n.n(a)()(o());r.push([t.id,".menu-entry__loading-icon[data-v-6e59d13c]{margin-right:8px}","",{version:3,sources:["webpack://./core/src/components/UserMenu/UserMenuEntry.vue"],names:[],mappings:"AAEC,2CACC,gBAAA",sourcesContent:["\n.menu-entry {\n\t&__loading-icon {\n\t\tmargin-right: 8px;\n\t}\n}\n"],sourceRoot:""}]),e.Z=r},50893:function(t,e,n){"use strict";var i=n(87537),o=n.n(i),a=n(23645),r=n.n(a)()(o());r.push([t.id,"#contactsmenu-menu[data-v-1563c388]{height:calc(100vh - 150px);max-height:302px;min-height:175px;width:350px}#contactsmenu-menu[data-v-1563c388] .emptycontent{margin-top:5vh !important;margin-bottom:1.5vh}#contactsmenu-menu[data-v-1563c388] .emptycontent .icon-loading,#contactsmenu-menu[data-v-1563c388] .emptycontent .icon-search{display:inline-block}#contactsmenu-menu[data-v-1563c388] #contactsmenu-search{width:calc(100% - 16px);margin:8px;height:34px}#contactsmenu-menu[data-v-1563c388] .content{height:calc(100vh - 150px - 50px);max-height:250px;min-height:125px;overflow-y:auto}#contactsmenu-menu[data-v-1563c388] .content .footer{text-align:center}#contactsmenu-menu[data-v-1563c388] .content .footer a{display:block;width:100%;padding:12px 0;opacity:.5}#contactsmenu-menu[data-v-1563c388] a{padding:2px}#contactsmenu-menu[data-v-1563c388] a:focus-visible{box-shadow:inset 0 0 0 2px var(--color-main-text) !important}#contactsmenu-menu[data-v-1563c388] .contact{display:flex;position:relative;align-items:center;padding:3px 3px 3px 10px}#contactsmenu-menu[data-v-1563c388] .contact .avatar{height:32px;width:32px;display:inline-block}#contactsmenu-menu[data-v-1563c388] .contact .body{flex-grow:1;padding-left:8px;min-width:0}#contactsmenu-menu[data-v-1563c388] .contact .body div{position:relative;width:100%;overflow-x:hidden;text-overflow:ellipsis}#contactsmenu-menu[data-v-1563c388] .contact .body .last-message,#contactsmenu-menu[data-v-1563c388] .contact .body .email-address{color:var(--color-text-maxcontrast)}#contactsmenu-menu[data-v-1563c388] .contact .top-action,#contactsmenu-menu[data-v-1563c388] .contact .second-action,#contactsmenu-menu[data-v-1563c388] .contact .other-actions{width:16px;height:16px;opacity:.5;cursor:pointer}#contactsmenu-menu[data-v-1563c388] .contact .top-action:not(button),#contactsmenu-menu[data-v-1563c388] .contact .second-action:not(button),#contactsmenu-menu[data-v-1563c388] .contact .other-actions:not(button){padding:14px}#contactsmenu-menu[data-v-1563c388] .contact .top-action img,#contactsmenu-menu[data-v-1563c388] .contact .second-action img,#contactsmenu-menu[data-v-1563c388] .contact .other-actions img{filter:var(--background-invert-if-dark)}#contactsmenu-menu[data-v-1563c388] .contact .top-action:hover,#contactsmenu-menu[data-v-1563c388] .contact .top-action:active,#contactsmenu-menu[data-v-1563c388] .contact .top-action:focus,#contactsmenu-menu[data-v-1563c388] .contact .second-action:hover,#contactsmenu-menu[data-v-1563c388] .contact .second-action:active,#contactsmenu-menu[data-v-1563c388] .contact .second-action:focus,#contactsmenu-menu[data-v-1563c388] .contact .other-actions:hover,#contactsmenu-menu[data-v-1563c388] .contact .other-actions:active,#contactsmenu-menu[data-v-1563c388] .contact .other-actions:focus{opacity:1}#contactsmenu-menu[data-v-1563c388] .contact button.other-actions{width:44px}#contactsmenu-menu[data-v-1563c388] .contact button.other-actions:focus{border-color:rgba(0,0,0,0);box-shadow:0 0 0 2px var(--color-main-text)}#contactsmenu-menu[data-v-1563c388] .contact button.other-actions:focus-visible{border-radius:var(--border-radius-pill)}#contactsmenu-menu[data-v-1563c388] .contact .menu{top:47px;margin-right:13px}#contactsmenu-menu[data-v-1563c388] .contact .popovermenu::after{right:2px}","",{version:3,sources:["webpack://./core/src/views/ContactsMenu.vue"],names:[],mappings:"AACA,oCAEC,0BAAA,CACA,gBAAA,CACA,gBAAA,CACA,WAAA,CAGC,kDACC,yBAAA,CACA,mBAAA,CACA,+HAEC,oBAAA,CAIF,yDACC,uBAAA,CACA,UAAA,CACA,WAAA,CAGD,6CAEC,iCAAA,CACA,gBAAA,CACA,gBAAA,CACA,eAAA,CAEA,qDACC,iBAAA,CAEA,uDACC,aAAA,CACA,UAAA,CACA,cAAA,CACA,UAAA,CAKH,sCACC,WAAA,CAEA,oDACC,4DAAA,CAIF,6CACC,YAAA,CACA,iBAAA,CACA,kBAAA,CACA,wBAAA,CAEA,qDACC,WAAA,CACA,UAAA,CACA,oBAAA,CAGD,mDACC,WAAA,CACA,gBAAA,CACA,WAAA,CAEA,uDACC,iBAAA,CACA,UAAA,CACA,iBAAA,CACA,sBAAA,CAGD,mIACC,mCAAA,CAIF,iLACC,UAAA,CACA,WAAA,CACA,UAAA,CACA,cAAA,CAEA,qNACC,YAAA,CAED,6LACC,uCAAA,CAGD,4kBAGC,SAAA,CAIF,kEACC,UAAA,CAEA,wEACC,0BAAA,CACA,2CAAA,CAGD,gFACC,uCAAA,CAKF,mDACC,QAAA,CACA,iBAAA,CAED,iEACC,SAAA",sourcesContent:["\n#contactsmenu-menu {\n\t/* show 2.5 to 4.5 entries depending on the screen height */\n\theight: calc(100vh - 50px * 3);\n\tmax-height: calc(50px * 6 + 2px);\n\tmin-height: calc(50px * 3.5);\n\twidth: 350px;\n\n\t&:deep {\n\t\t.emptycontent {\n\t\t\tmargin-top: 5vh !important;\n\t\t\tmargin-bottom: 1.5vh;\n\t\t\t.icon-loading,\n\t\t\t.icon-search {\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\t\t}\n\n\t\t#contactsmenu-search {\n\t\t\twidth: calc(100% - 16px);\n\t\t\tmargin: 8px;\n\t\t\theight: 34px;\n\t\t}\n\n\t\t.content {\n\t\t\t/* fixed max height of the parent container without the search input */\n\t\t\theight: calc(100vh - 50px * 3 - 50px);\n\t\t\tmax-height: calc(50px * 5);\n\t\t\tmin-height: calc(50px * 3.5 - 50px);\n\t\t\toverflow-y: auto;\n\n\t\t\t.footer {\n\t\t\t\ttext-align: center;\n\n\t\t\t\ta {\n\t\t\t\t\tdisplay: block;\n\t\t\t\t\twidth: 100%;\n\t\t\t\t\tpadding: 12px 0;\n\t\t\t\t\topacity: .5;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ta {\n\t\t\tpadding: 2px;\n\n\t\t\t&:focus-visible {\n\t\t\t\tbox-shadow: inset 0 0 0 2px var(--color-main-text) !important; // override rule in core/css/headers.scss #header a:focus-visible\n\t\t\t}\n\t\t}\n\n\t\t.contact {\n\t\t\tdisplay: flex;\n\t\t\tposition: relative;\n\t\t\talign-items: center;\n\t\t\tpadding: 3px 3px 3px 10px;\n\n\t\t\t.avatar {\n\t\t\t\theight: 32px;\n\t\t\t\twidth: 32px;\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\n\t\t\t.body {\n\t\t\t\tflex-grow: 1;\n\t\t\t\tpadding-left: 8px;\n\t\t\t\tmin-width: 0;\n\n\t\t\t\tdiv {\n\t\t\t\t\tposition: relative;\n\t\t\t\t\twidth: 100%;\n\t\t\t\t\toverflow-x: hidden;\n\t\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\t}\n\n\t\t\t\t.last-message, .email-address {\n\t\t\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.top-action, .second-action, .other-actions {\n\t\t\t\twidth: 16px;\n\t\t\t\theight: 16px;\n\t\t\t\topacity: .5;\n\t\t\t\tcursor: pointer;\n\n\t\t\t\t&:not(button) {\n\t\t\t\t\tpadding: 14px;\n\t\t\t\t}\n\t\t\t\timg {\n\t\t\t\t\tfilter: var(--background-invert-if-dark);\n\t\t\t\t}\n\n\t\t\t\t&:hover,\n\t\t\t\t&:active,\n\t\t\t\t&:focus {\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbutton.other-actions {\n\t\t\t\twidth: 44px;\n\n\t\t\t\t&:focus {\n\t\t\t\t\tborder-color: transparent;\n\t\t\t\t\tbox-shadow: 0 0 0 2px var(--color-main-text);\n\t\t\t\t}\n\n\t\t\t\t&:focus-visible {\n\t\t\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/* actions menu */\n\t\t\t.menu {\n\t\t\t\ttop: 47px;\n\t\t\t\tmargin-right: 13px;\n\t\t\t}\n\t\t\t.popovermenu::after {\n\t\t\t\tright: 2px;\n\t\t\t}\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),e.Z=r},71445:function(t,e,n){"use strict";var i=n(87537),o=n.n(i),a=n(23645),r=n.n(a)()(o());r.push([t.id,".user-menu[data-v-6a818bbc]{margin-right:12px}.user-menu[data-v-6a818bbc] .header-menu__trigger{opacity:1 !important}.user-menu[data-v-6a818bbc] .header-menu__trigger:focus-visible .user-menu__avatar{border:2px solid var(--color-primary-text)}.user-menu[data-v-6a818bbc] .header-menu__carret{display:none !important}.user-menu[data-v-6a818bbc] .header-menu__content{width:fit-content !important}.user-menu__avatar[data-v-6a818bbc]:active,.user-menu__avatar[data-v-6a818bbc]:focus,.user-menu__avatar[data-v-6a818bbc]:hover{border:2px solid var(--color-primary-text)}.user-menu__nav[data-v-6a818bbc]{display:flex;width:100%}.user-menu__nav ul[data-v-6a818bbc]{display:flex;flex-direction:column;gap:2px}.user-menu__nav ul[data-v-6a818bbc] li a,.user-menu__nav ul[data-v-6a818bbc] li button{border-radius:6px;display:inline-flex;align-items:center;height:var(--header-menu-item-height);color:var(--color-main-text);padding:10px 8px;box-sizing:border-box;white-space:nowrap;position:relative;width:100%}.user-menu__nav ul[data-v-6a818bbc] li a:hover,.user-menu__nav ul[data-v-6a818bbc] li button:hover{background-color:var(--color-background-hover)}.user-menu__nav ul[data-v-6a818bbc] li a:focus-visible,.user-menu__nav ul[data-v-6a818bbc] li button:focus-visible{background-color:var(--color-background-hover) !important;box-shadow:inset 0 0 0 2px var(--color-primary) !important;outline:none !important}.user-menu__nav ul[data-v-6a818bbc] li a:active,.user-menu__nav ul[data-v-6a818bbc] li a.active,.user-menu__nav ul[data-v-6a818bbc] li button:active,.user-menu__nav ul[data-v-6a818bbc] li button.active{background-color:var(--color-primary-light)}.user-menu__nav ul[data-v-6a818bbc] li a span,.user-menu__nav ul[data-v-6a818bbc] li button span{padding-bottom:0;color:var(--color-main-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:110px}.user-menu__nav ul[data-v-6a818bbc] li a img,.user-menu__nav ul[data-v-6a818bbc] li button img{width:16px;height:16px;margin-right:10px}.user-menu__nav ul[data-v-6a818bbc] li a img,.user-menu__nav ul[data-v-6a818bbc] li a svg,.user-menu__nav ul[data-v-6a818bbc] li button img,.user-menu__nav ul[data-v-6a818bbc] li button svg{opacity:.7;filter:var(--background-invert-if-dark)}.user-menu__nav ul[data-v-6a818bbc] li button{background-color:rgba(0,0,0,0);border:none;font-weight:normal;margin:0}","",{version:3,sources:["webpack://./core/src/views/UserMenu.vue"],names:[],mappings:"AACA,4BACC,iBAAA,CAIE,kDACC,oBAAA,CAEC,mFACC,0CAAA,CAKH,iDACC,uBAAA,CAGD,kDACC,4BAAA,CAMF,+HAGC,0CAAA,CAIF,iCACC,YAAA,CACA,UAAA,CAEA,oCACC,YAAA,CACA,qBAAA,CACA,OAAA,CAIE,uFAEC,iBAAA,CACA,mBAAA,CACA,kBAAA,CACA,qCAAA,CACA,4BAAA,CACA,gBAAA,CACA,qBAAA,CACA,kBAAA,CACA,iBAAA,CACA,UAAA,CAEA,mGACC,8CAAA,CAGD,mHACC,yDAAA,CACA,0DAAA,CACA,uBAAA,CAGD,0MAEC,2CAAA,CAGD,iGACC,gBAAA,CACA,4BAAA,CACA,kBAAA,CACA,eAAA,CACA,sBAAA,CACA,eAAA,CAGD,+FACC,UAAA,CACA,WAAA,CACA,iBAAA,CAGD,8LAEC,UAAA,CACA,uCAAA,CAKF,8CACC,8BAAA,CACA,WAAA,CACA,kBAAA,CACA,QAAA",sourcesContent:["\n.user-menu {\n\tmargin-right: 12px;\n\n\t&:deep {\n\t\t.header-menu {\n\t\t\t&__trigger {\n\t\t\t\topacity: 1 !important;\n\t\t\t\t&:focus-visible {\n\t\t\t\t\t.user-menu__avatar {\n\t\t\t\t\t\tborder: 2px solid var(--color-primary-text);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&__carret {\n\t\t\t\tdisplay: none !important;\n\t\t\t}\n\n\t\t\t&__content {\n\t\t\t\twidth: fit-content !important;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__avatar {\n\t\t&:active,\n\t\t&:focus,\n\t\t&:hover {\n\t\t\tborder: 2px solid var(--color-primary-text);\n\t\t}\n\t}\n\n\t&__nav {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\n\t\tul {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tgap: 2px;\n\n\t\t\t&:deep {\n\t\t\t\tli {\n\t\t\t\t\ta,\n\t\t\t\t\tbutton {\n\t\t\t\t\t\tborder-radius: 6px;\n\t\t\t\t\t\tdisplay: inline-flex;\n\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\theight: var(--header-menu-item-height);\n\t\t\t\t\t\tcolor: var(--color-main-text);\n\t\t\t\t\t\tpadding: 10px 8px;\n\t\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\twidth: 100%;\n\n\t\t\t\t\t\t&:hover {\n\t\t\t\t\t\t\tbackground-color: var(--color-background-hover);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t&:focus-visible {\n\t\t\t\t\t\t\tbackground-color: var(--color-background-hover) !important;\n\t\t\t\t\t\t\tbox-shadow: inset 0 0 0 2px var(--color-primary) !important;\n\t\t\t\t\t\t\toutline: none !important;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t&:active,\n\t\t\t\t\t\t&.active {\n\t\t\t\t\t\t\tbackground-color: var(--color-primary-light);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tspan {\n\t\t\t\t\t\t\tpadding-bottom: 0;\n\t\t\t\t\t\t\tcolor: var(--color-main-text);\n\t\t\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\t\t\t\tmax-width: 110px;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\timg {\n\t\t\t\t\t\t\twidth: 16px;\n\t\t\t\t\t\t\theight: 16px;\n\t\t\t\t\t\t\tmargin-right: 10px;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\timg,\n\t\t\t\t\t\tsvg {\n\t\t\t\t\t\t\topacity: .7;\n\t\t\t\t\t\t\tfilter: var(--background-invert-if-dark);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override global button styles\n\t\t\t\t\tbutton {\n\t\t\t\t\t\tbackground-color: transparent;\n\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\tmargin: 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),e.Z=r},10944:function(t,e,n){var i=n(40202);t.exports=(i.default||i).template({1:function(t,e,n,i,o){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(a=r(n,"if").call(null!=e?e:t.nullContext||{},null!=(a=null!=e?r(e,"contact"):e)?r(a,"profileUrl"):a,{name:"if",hash:{},fn:t.program(2,o,0),inverse:t.program(5,o,0),data:o,loc:{start:{line:2,column:1},end:{line:10,column:8}}}))?a:""},2:function(t,e,n,i,o){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(a=r(n,"if").call(null!=e?e:t.nullContext||{},null!=(a=null!=e?r(e,"contact"):e)?r(a,"profileTitle"):a,{name:"if",hash:{},fn:t.program(3,o,0),inverse:t.noop,data:o,loc:{start:{line:3,column:2},end:{line:7,column:9}}}))?a:""},3:function(t,e,n,i,o){var a,r=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t\t\t<a class="profile-link--avatar" href="'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"profileUrl"):a,e))+'">\n\t\t\t\t<img src="'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+'&size=32" class="avatar" srcset="'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+"&size=32 1x, "+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+"&size=64 2x, "+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+'&size=128 4x" alt="">\n\t\t\t</a>\n'},5:function(t,e,n,i,o){var a,r=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t\t<img src="'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+'&size=32" class="avatar" srcset="'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+"&size=32 1x, "+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+"&size=64 2x, "+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+'&size=128 4x" alt="">\n'},7:function(t,e,n,i,o){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(a=r(n,"if").call(null!=e?e:t.nullContext||{},null!=(a=null!=e?r(e,"contact"):e)?r(a,"profileUrl"):a,{name:"if",hash:{},fn:t.program(8,o,0),inverse:t.program(11,o,0),data:o,loc:{start:{line:12,column:1},end:{line:20,column:8}}}))?a:""},8:function(t,e,n,i,o){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(a=r(n,"if").call(null!=e?e:t.nullContext||{},null!=(a=null!=e?r(e,"contact"):e)?r(a,"profileTitle"):a,{name:"if",hash:{},fn:t.program(9,o,0),inverse:t.noop,data:o,loc:{start:{line:13,column:2},end:{line:17,column:9}}}))?a:""},9:function(t,e,n,i,o){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t\t\t<a class="profile-link--avatar" href="'+t.escapeExpression(t.lambda(null!=(a=null!=e?r(e,"contact"):e)?r(a,"profileUrl"):a,e))+'">\n\t\t\t\t<div class="avatar"></div>\n\t\t\t</a>\n'},11:function(t,e,n,i,o){return'\t\t<div class="avatar"></div>\n'},13:function(t,e,n,i,o){var a,r=null!=e?e:t.nullContext||{},s=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return(null!=(a=s(n,"if").call(r,null!=(a=null!=e?s(e,"contact"):e)?s(a,"profileTitle"):a,{name:"if",hash:{},fn:t.program(14,o,0),inverse:t.noop,data:o,loc:{start:{line:23,column:1},end:{line:29,column:8}}}))?a:"")+(null!=(a=s(n,"if").call(r,null!=(a=null!=e?s(e,"contact"):e)?s(a,"topAction"):a,{name:"if",hash:{},fn:t.program(16,o,0),inverse:t.noop,data:o,loc:{start:{line:30,column:1},end:{line:34,column:8}}}))?a:"")},14:function(t,e,n,i,o){var a,r=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t\t<a class="body profile-link--full-name" href="'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"profileUrl"):a,e))+'">\n\t\t\t<div class="full-name">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"fullName"):a,e))+'</div>\n\t\t\t<div class="last-message">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"lastMessage"):a,e))+'</div>\n\t\t\t<div class="email-address">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"emailAddresses"):a,e))+"</div>\n\t\t</a>\n"},16:function(t,e,n,i,o){var a,r=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t\t<a class="top-action" href="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"hyperlink"):a,e))+'" title="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"title"):a,e))+'" aria-label="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"title"):a,e))+'">\n\t\t\t<img src="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"icon"):a,e))+'" alt="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"title"):a,e))+'">\n\t\t</a>\n'},18:function(t,e,n,i,o){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(a=r(n,"if").call(null!=e?e:t.nullContext||{},null!=(a=null!=e?r(e,"contact"):e)?r(a,"topAction"):a,{name:"if",hash:{},fn:t.program(19,o,0),inverse:t.program(21,o,0),data:o,loc:{start:{line:35,column:0},end:{line:50,column:0}}}))?a:""},19:function(t,e,n,i,o){var a,r=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t<a class="body" href="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"hyperlink"):a,e))+'">\n\t\t<div class="full-name">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"fullName"):a,e))+'</div>\n\t\t<div class="last-message">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"lastMessage"):a,e))+'</div>\n\t\t<div class="email-address">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"emailAddresses"):a,e))+'</div>\n\t</a>\n \t<a class="top-action" href="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"hyperlink"):a,e))+'" title="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"title"):a,e))+'">\n \t\t<img src="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"icon"):a,e))+'" alt="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"title"):a,e))+'">\n\t</a>\n'},21:function(t,e,n,i,o){var a,r=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t<div class="body">\n\t\t<div class="full-name">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"fullName"):a,e))+'</div>\n\t\t<div class="last-message">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"lastMessage"):a,e))+'</div>\n\t\t<div class="email-address">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"emailAddresses"):a,e))+"</div>\n\t</div>\n"},23:function(t,e,n,i,o){var a,r=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<a class="second-action" href="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"secondAction"):a)?l(a,"hyperlink"):a,e))+'" aria-label="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"secondAction"):a)?l(a,"title"):a,e))+'" title="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"secondAction"):a)?l(a,"title"):a,e))+'">\n\t<img src="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"secondAction"):a)?l(a,"icon"):a,e))+'" alt="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"secondAction"):a)?l(a,"title"):a,e))+'">\n</a>\n'},25:function(t,e,n,i,o){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t<button class="other-actions icon-more"></button>\n\t<div class="menu popovermenu">\n\t\t<ul>\n'+(null!=(a=r(n,"each").call(null!=e?e:t.nullContext||{},null!=(a=null!=e?r(e,"contact"):e)?r(a,"actions"):a,{name:"each",hash:{},fn:t.program(26,o,0),inverse:t.noop,data:o,loc:{start:{line:60,column:3},end:{line:67,column:12}}}))?a:"")+"\t\t</ul>\n\t</div>\n"},26:function(t,e,n,i,o){var a,r=null!=e?e:t.nullContext||{},s=t.hooks.helperMissing,l="function",c=t.escapeExpression,u=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t\t\t<li>\n\t\t\t\t<a href="'+c(typeof(a=null!=(a=u(n,"hyperlink")||(null!=e?u(e,"hyperlink"):e))?a:s)===l?a.call(r,{name:"hyperlink",hash:{},data:o,loc:{start:{line:62,column:13},end:{line:62,column:26}}}):a)+'">\n\t\t\t\t\t<img src="'+c(typeof(a=null!=(a=u(n,"icon")||(null!=e?u(e,"icon"):e))?a:s)===l?a.call(r,{name:"icon",hash:{},data:o,loc:{start:{line:63,column:15},end:{line:63,column:23}}}):a)+'" alt="">\n\t\t\t\t\t<span>'+c(typeof(a=null!=(a=u(n,"title")||(null!=e?u(e,"title"):e))?a:s)===l?a.call(r,{name:"title",hash:{},data:o,loc:{start:{line:64,column:11},end:{line:64,column:20}}}):a)+"</span>\n\t\t\t\t</a>\n\t\t\t</li>\n"},compiler:[8,">= 4.3.0"],main:function(t,e,n,i,o){var a,r=null!=e?e:t.nullContext||{},s=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return(null!=(a=s(n,"if").call(r,null!=(a=null!=e?s(e,"contact"):e)?s(a,"avatar"):a,{name:"if",hash:{},fn:t.program(1,o,0),inverse:t.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!=e?s(e,"contact"):e)?s(a,"profileUrl"):a,{name:"if",hash:{},fn:t.program(13,o,0),inverse:t.program(18,o,0),data:o,loc:{start:{line:22,column:0},end:{line:50,column:7}}}))?a:"")+(null!=(a=s(n,"if").call(r,null!=(a=null!=e?s(e,"contact"):e)?s(a,"hasTwoActions"):a,{name:"if",hash:{},fn:t.program(23,o,0),inverse:t.noop,data:o,loc:{start:{line:51,column:0},end:{line:55,column:7}}}))?a:"")+(null!=(a=s(n,"if").call(r,null!=(a=null!=e?s(e,"contact"):e)?s(a,"hasManyActions"):a,{name:"if",hash:{},fn:t.program(25,o,0),inverse:t.noop,data:o,loc:{start:{line:56,column:0},end:{line:70,column:7}}}))?a:"")},useData:!0})},20421:function(t,e,n){var i=n(40202);t.exports=(i.default||i).template({compiler:[8,">= 4.3.0"],main:function(t,e,n,i,o){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<div class="emptycontent">\n\t<div class="icon-search"></div>\n\t<h2>'+t.escapeExpression("function"==typeof(a=null!=(a=r(n,"couldNotLoadText")||(null!=e?r(e,"couldNotLoadText"):e))?a:t.hooks.helperMissing)?a.call(null!=e?e:t.nullContext||{},{name:"couldNotLoadText",hash:{},data:o,loc:{start:{line:3,column:5},end:{line:3,column:25}}}):a)+"</h2>\n</div>\n"},useData:!0})},34083:function(t,e,n){var i=n(40202);t.exports=(i.default||i).template({1:function(t,e,n,i,o){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<div class="emptycontent">\n\t<div class="icon-search"></div>\n\t<h2>'+t.escapeExpression("function"==typeof(a=null!=(a=r(n,"noContactsFoundText")||(null!=e?r(e,"noContactsFoundText"):e))?a:t.hooks.helperMissing)?a.call(null!=e?e:t.nullContext||{},{name:"noContactsFoundText",hash:{},data:o,loc:{start:{line:4,column:5},end:{line:4,column:28}}}):a)+"</h2>\n</div>\n"},3:function(t,e,n,i,o){var a,r=null!=e?e:t.nullContext||{},s=t.hooks.helperMissing,l="function",c=t.escapeExpression,u=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<div class="footer"><a href="'+c(typeof(a=null!=(a=u(n,"contactsAppURL")||(null!=e?u(e,"contactsAppURL"):e))?a:s)===l?a.call(r,{name:"contactsAppURL",hash:{},data:o,loc:{start:{line:9,column:29},end:{line:9,column:47}}}):a)+'">'+c(typeof(a=null!=(a=u(n,"showAllContactsText")||(null!=e?u(e,"showAllContactsText"):e))?a:s)===l?a.call(r,{name:"showAllContactsText",hash:{},data:o,loc:{start:{line:9,column:49},end:{line:9,column:72}}}):a)+"</a></div>\n"},5:function(t,e,n,i,o){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(a=r(n,"if").call(null!=e?e:t.nullContext||{},null!=e?r(e,"canInstallApp"):e,{name:"if",hash:{},fn:t.program(6,o,0),inverse:t.noop,data:o,loc:{start:{line:10,column:0},end:{line:12,column:0}}}))?a:""},6:function(t,e,n,i,o){var a,r=null!=e?e:t.nullContext||{},s=t.hooks.helperMissing,l="function",c=t.escapeExpression,u=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<div class="footer"><a href="'+c(typeof(a=null!=(a=u(n,"contactsAppMgmtURL")||(null!=e?u(e,"contactsAppMgmtURL"):e))?a:s)===l?a.call(r,{name:"contactsAppMgmtURL",hash:{},data:o,loc:{start:{line:11,column:29},end:{line:11,column:51}}}):a)+'">'+c(typeof(a=null!=(a=u(n,"contactsAppMgmtText")||(null!=e?u(e,"contactsAppMgmtText"):e))?a:s)===l?a.call(r,{name:"contactsAppMgmtText",hash:{},data:o,loc:{start:{line:11,column:53},end:{line:11,column:76}}}):a)+"</a></div>\n"},compiler:[8,">= 4.3.0"],main:function(t,e,n,i,o){var a,r=null!=e?e:t.nullContext||{},s=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return(null!=(a=s(n,"unless").call(r,null!=(a=null!=e?s(e,"contacts"):e)?s(a,"length"):a,{name:"unless",hash:{},fn:t.program(1,o,0),inverse:t.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!=e?s(e,"contactsAppEnabled"):e,{name:"if",hash:{},fn:t.program(3,o,0),inverse:t.program(5,o,0),data:o,loc:{start:{line:8,column:0},end:{line:12,column:7}}}))?a:"")},useData:!0})},95386:function(t,e,n){var i=n(40202);t.exports=(i.default||i).template({compiler:[8,">= 4.3.0"],main:function(t,e,n,i,o){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<div class="emptycontent">\n\t<div class="icon-loading"></div>\n\t<h2>'+t.escapeExpression("function"==typeof(a=null!=(a=r(n,"loadingText")||(null!=e?r(e,"loadingText"):e))?a:t.hooks.helperMissing)?a.call(null!=e?e:t.nullContext||{},{name:"loadingText",hash:{},data:o,loc:{start:{line:3,column:5},end:{line:3,column:20}}}):a)+"</h2>\n</div>\n"},useData:!0})},66115:function(t,e,n){var i=n(40202);t.exports=(i.default||i).template({compiler:[8,">= 4.3.0"],main:function(t,e,n,i,o){var a,r=null!=e?e:t.nullContext||{},s=t.hooks.helperMissing,l="function",c=t.escapeExpression,u=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<label class="hidden-visually" for="contactsmenu-search">'+c(typeof(a=null!=(a=u(n,"searchContactsText")||(null!=e?u(e,"searchContactsText"):e))?a:s)===l?a.call(r,{name:"searchContactsText",hash:{},data: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!=e?u(e,"searchContactsText"):e))?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!=e?u(e,"searchTerm"):e))?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(t,e,n){var i=n(40202);t.exports=(i.default||i).template({1:function(t,e,n,i,o){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<img src="'+t.escapeExpression("function"==typeof(a=null!=(a=r(n,"icon")||(null!=e?r(e,"icon"):e))?a:t.hooks.helperMissing)?a.call(null!=e?e:t.nullContext||{},{name:"icon",hash:{},data:o,loc:{start:{line:3,column:24},end:{line:3,column:32}}}):a)+'">'},compiler:[8,">= 4.3.0"],main:function(t,e,n,i,o){var a,r,s=null!=e?e:t.nullContext||{},l=t.hooks.helperMissing,c="function",u=t.escapeExpression,d=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<li>\n\t<a href="'+u(typeof(r=null!=(r=d(n,"hyperlink")||(null!=e?d(e,"hyperlink"):e))?r:l)===c?r.call(s,{name:"hyperlink",hash:{},data:o,loc:{start:{line:2,column:10},end:{line:2,column:23}}}):r)+'">\n\t\t'+(null!=(a=d(n,"if").call(s,null!=e?d(e,"icon"):e,{name:"if",hash:{},fn:t.program(1,o,0),inverse:t.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!=e?d(e,"title"):e))?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(t,e,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(t){var e=a(t);return n(e)}function a(t){if(!n.o(i,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return i[t]}o.keys=function(){return Object.keys(i)},o.resolve=a,t.exports=o,o.id=46700},12081:function(t){"use strict";t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoAQMAAAC2MCouAAAABlBMVEVmZmZ1dXVT6N0BAAAAUklEQVQIW8XNsQ3AIAwF0bMoKBmBURgNj8YojEBJEcXwu2yQ+p507BTeWDnozPISjPpY4O0W6CqEisUtiG/EF+IT8YG4fznihnhCPCNeEK/89D1Gd22TNOyXVAAAAABJRU5ErkJggg=="},47868:function(t){"use strict";t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAABkAQMAAADOquA5AAAAA1BMVEUAAACnej3aAAAADklEQVQYGWMYBaOABgAAAlgAARbiVEcAAAAASUVORK5CYII="},58188:function(t){"use strict";t.exports="data:image/png;base64,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"},33178:function(t){"use strict";t.exports="data:image/png;base64,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"},40337:function(t){"use strict";t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAAb1BMVEUAAAD8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vz8/vwLtayQAAAAJHRSTlMAGBAyPwhgIS5RZkqgwEQnYo/NlWydDDAWLB2tgXCZhe+2ft+AEhBBAAANEklEQVR42uyaQW7rMAwFzbvM/c/4AW0C+6FDFG71BZQDZBGTEslnWracXMMwnEBR11+m4HAFqNclqpGCujlvFCQ7EOCecJwgeFgLwvqhIALE+Jvz1pYooFSAeuYDcgZDgKJROJ1rgwKZv5Yg9gJKRjezh/Mn4hagIpx2AADtNaQdIAlEB2zDU2w72BwKGnmhbs6H3RZ++C7gi9ByPqv+L5gHoWEYhmEY/gA/8CR49HNQUf4sDyUFwUL08vcBBdRj9g2SWAIhQDo83amv9SpSgNLN447NUObvGYu5gBK9VM8EWJ9dALnBt4wr3bPgEsGW9ZwOkFXrl94HrNkOWgPmLjAMwzAMw/D/4P3D/Kv52VCAAfgBN/bwvfgAMgEeoB8BPMyky304abMAkYBYJb7MgCVAo1hWkOF4GAmjdlAMII0eX7fLpABiZuEV2HBNIAtkcXfg4b6QDmol8haGTt+sGB/uCfQRuvLimztAHBB7PyPQNrQE7NeAtJ51F/jl8QBcwzAMwzAMyfu/pcLrBHS/6DYWnl8T/nsJSIDw0go8gfvPStTN5FC2gWZNqQJmFI8fh6IAnRvsjUTBOlJhk3/zlwpQEa5vM1UAtH669oIczl2fzxgu7yAWsT/O7XDG9wTCKrtjyP182GN8mlOAhRQYAoRAvQCRQPiHQ28G3T9Lg3wuAQlx2SVQUO0l4C8dM74sYmQBQZ6yMMUiaOdIFsGAWJagX+fLz5GbrwS9hi/DOyDh+PcB/9g51x2nYSAK+5I7WpAqVBbE5c/3/s9I61DG9pDJFgoE4S+bdieuG5+TiRO3Sf1fvyCm0Wg0Go0Dg/udeOwDM7oG8FB9cI8DwGP1o5eAN/UXrnH3JsP6vhotGFT54yDh1ZJCS1W+JxawXoASnC0A2xDk8YEGGPd3p6KiHPY+z0iTEmDmB1VdVPXfZYAHLYqiPGFnAEqOUS6BxCiF5otxPLgTrA1QDmxvcSwDdA3SpOobBuhywD0WTzby1aMz8KqLtK9AqMC+nGDPEKP8QWDf0YK/Z/SKpd9Ilw2HDj6aP/x5TqPRaDQav5fwjx/IKALQ4zkdwq/oP9ZPJdXq5EkkmgYAEFwBZniwH8uiDFgfM3sCgcwg8koBF8hi2L3lgEN9W8X6Z12uHwgOiUsDSCaU49kqLPR6jmUANyyDQhFrA/SAVQWin4PtAvsZoF+fKA3SGaCvV5D4YDfI233A5uaVmOAIqg+Q8sPu/+ZRwOrynRB+LIgNx/zBxFvnAS+H4F6MP6ABd6P1NxqNRqPxQyJAdC+nv+D+FDPwNDuDjztnbnwGS2Ksi+OeHxNM6g2yGiMwOhUXgTB/o6ggkvjUdTOyYAaY1anusn039RBJDIVeiCrO37BujbS6n+h7pt74+nylbFAVCLDoNcrohK7rwkplyFNhQOYA/RUkAwoDwPkLDtaYWwawYQD9CjcD6EOI5AacTif7DgwHeWAbMBYGEi6QuBniw0rWwNLw85WtDGBGni5w6wOQBpYtPgNwFgPCOHaFAc/Pzw6dgTrWC7QBI/A6NwAoDPCByqJEtsLnK5sZ4Geu+r18DhAhOjEgkGZ5uxVkF3j1Kt8FTtde8fJ4g5imuw0Q/fOr19sGiH5uihLZCsdxhM0M8H6G2ecGOJcbEIEo9fkA8OEDbiWsnWBQ+7xhQJr1AjFgcBKyDDPQbRlQr5Axka3wzZs30G9mQPTz7KMYsMbbBrxZYQ39xDhN75h8YUB0UmFOU663rw3oKwMoMmBJ+g0DSsPfJ6qU6/utDIg+EdmImUlzvk9OE4xrOMHKVGWAYcDuLgDF+pJ+ZUAs11edB/DROA+45zAIC2l2ApFRZTwv7fQGWb1eoA1wo+h/CDEOieh+Ghgf+8NJNiOdazQajcZ/w5cvziRAMIohzTaRuDF+n4F8jL2wslTDs3E/FkVVe7rOGZzh7EqGYcj1xygOPPXAx2nOBjsLLJ8xr9qMQP5v5gAsV8AYz0/TtB9X22T4rp4AgU425+KWfJs+wVOlHxhG0Q/iAL5qH3XseHuZPpHrd3MmGBxsCsad0pQJnBxuKmJXxuf+PFG0fxh0AyVcJF5QGedmhiCnjkSAyKYBISGxi1/ZOxfGNGEoCl/DG8Ep3camdWu38/9/4zBUbpJbwpyO+sinrR4TwHt6uTwMdrvaLreFET8KiuhvDajx2t1qM0AAuaO/mzqhxGhPoeEM1qj3l/fzKI06UGOfIlW9+BFBE/0YM6DPOENjj1/4CTN+RPTXBtCOXqniU0qfhgxgTbbmDOD402ENAPRS4veXt4FmwyUl48k1QMRHpz4DOAPSrLvJ+DWAezyuDknEetffeMTEsI6zjlhzu7H+dmQjBijYGUHvHTt5qjySwjxekgZE7LCMn5fnGGDo7eu3+tvrJ3B8mmxSc/xkopyAlZB1zfqQ+6h9BpADiJTi1wVc8G2DItMAIrlKDPI7MdOaOH5RBNkBNagVSqISq8GAfQrlmV4EWooiCqsbhyr2A8Rpb6HFWKFJnXL8YjPIDiijuaCOIiYzgzzkdIP4d4TkPlAgEAgEPpICiLmEo+MTeQDof5KjIz/j+n4/ChURVVDWkAN2YIWiyDJ2IAf2ZNAuEUVYtiPjLQq8UbCWL7CUnyvkqIvixXIAOMeAFDnlSI2JK6rcvfFs0Eicj9urAjml7sENtzsf1TpPoDTcB4Soc3DoiL4h5wlrogovuJgBAFKeQseuf+wEYAPcQApCnAIpjRlg7WpCn4wC2ADao8883lUvS8AwYLvoMBdYda6PGDA5nh6iPYe9TlWAFb8CpAEZyDh8rTl+mSH29EgA3YUzACgoYwNIG2A4nLdtnuesiy5+Klj3CA1Hjxkgd7crJ/4IZg3YIevAxtivtabH1zEDWCpADfoZQIFseEEcvW63i23LH3biBRVRfb4B/gyo7fg5wLzSZIN2EgZKdQNSLAOsVSfr2HZ32P5UozWgbbsVwCqCL0VRI//fNaDmM3CxIoPWPueLao9noDKLm1n2ItgGfP/e3x0DMFoDiqhtW7QQm8H/txWoqQYwyJhsqrLcsELc3RU7AOOBn2aE9zeDyI6M1AAUB9gA5iIGSPrzLzUUnz5wQIdVMV4UKWMdW0cLgmWAER8lEaLuntDUfsD1XrOinp4UMen+oBQpu8jIMy6BQCBwGYqCmGWFjmpJj8MO2A3iM974TI/CEh1LUxDxSwcaNGTwm3dmmJguRYMDDc3GDkoNKfCFDfgy/d1XTIxYHAtZL3g0mugQt5j/TCz7gJe9goFrAKMAN34gnhi4yXqVrAbNy/woA3aAUsDOWLj7HkqUbvw1x87xjw3dTVUKsF4R0crq0HygATHeiIUBMr/5HSujjeMfMUBZKaMHmifg7o4BEZqmQUQzwQFLAwQckukfx39WBsxeBDkBlBpS4IkNeDIzwD8Dbj+7BrCcA1n0VixXo0XQlJz/Z28FGNBsNNBw0q2Pci22ccIA2XoPXzAYb9CxOSmouzIgEAgEAoF5iSHkjKCOvVdIXJ4fP9z4IeSMAGyBNEC3KbNDXKvDL9j+lYMu+07jh7cxEJOtISRimguALXAMYHuAeHh7Ojy7g2WA3S4NsCU0UoLmAj2lNIDt0Y9vkqgG4HSwDKhlTDJiv4TfgJvOAGiuKwPmqgHMVdWAmbcC0FzRVuAKiGHLhzMgEAgEAh8IHvo6KrUn/NoqGgDw/EDfk6tQdwbE4JDzeAPk5ADx/Qen6iulwqYzgFBZrtTCAbiP0Wn6Wgc2KjREv2JqOAWAKqP6oBlwIMnXpLsPw7fx9TienTVsnRxuyZXu3kZ4pgPP/BfKUyBT2I8YsHgDRw2hITQW1/qV4joDOhoouy5UsMOH++130Wn6WlcBqvU2MEXN4YIKZIVtwP0WwRxonhsgt08HxDGs8O/4A9t8B2B3k1fNBwKBQOBM+PqAaS0HUZ2ueX7zaD/y+gC/lsPoTtc8vzn0NEsMLKe0GEh5ohbzm0H7kdcHaK1hvSaA1p3mobQ48DRouJrebef5O8sjV8Pb3hCR1W5rDWk9iRwcjSOsidZr/WSyP7f7NYjG2lmylo8gMnVZlqw1RC3wtwZYT6TWa+/aecMET38SAYn+HkOn3w8B8OlWx39BA1Ki1GOAfPQF5NfTBk1nQEt9/LjcKpCm3jfk1wzrKQMBTGSIR6OlFlpPIq8PkEWNi+DTaJGCq2mkfaRIkqvhadfKp4GWtZe5N2NifjPoKebfkeH5zaP9zL8ry/O7tL6m6x0CgUAgELgZ0HOuvup/ru0FyQFM6Ps2AH4D9I01QH4DCHRbBgAcoNDSIOhfHg0KGXBjBjx4DXj0rUAgEAgEAoFLc61jYyXToyARITo9/gXdCgtanG3AArcb/1kZwPHebvx2BmBxvI0YgCN2vCBb328NiI5w++AX65vKgXMzoO9/u/H/awbcTfznbgVk/PddA6a3/zeXA5wBFwCL/ueG4v+zUTByAQBgAGlfOv28YwAAAABJRU5ErkJggg=="},98811:function(t){"use strict";t.exports="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"},27373:function(t){"use strict";t.exports="data:image/gif;base64,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"}},o={};function a(t){var e=o[t];if(void 0!==e)return e.exports;var n=o[t]={id:t,loaded:!1,exports:{}};return i[t].call(n.exports,n,n.exports,a),n.loaded=!0,n.exports}a.m=i,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(t){return a.O[t](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(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,{a:e}),e},a.d=function(t,e){for(var n in e)a.o(e,n)&&!a.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},a.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},a.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},a.j=2943,function(){a.b=document.baseURI||self.location.href;var t={2943:0};a.O.j=function(e){return 0===t[e]};var e=function(e,n){var i,o,r=n[0],s=n[1],l=n[2],c=0;if(r.some((function(e){return 0!==t[e]}))){for(i in s)a.o(s,i)&&(a.m[i]=s[i]);if(l)var u=l(a)}for(e&&e(n);c<r.length;c++)o=r[c],a.o(t,o)&&t[o]&&t[o][0](),t[o]=0;return a.O(u)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))}(),a.nc=void 0;var r=a.O(void 0,[7874],(function(){return a(30300)}));r=a.O(r)}(); -//# sourceMappingURL=core-main.js.map?v=579c1e950f8166c7368e
\ No newline at end of file +!function(){var e,i={30300:function(e,i,o){"use strict";var a={};o.r(a),o.d(a,{deleteKey:function(){return B},getApps:function(){return x},getKeys:function(){return k},getValue:function(){return P},setValue:function(){return E}});var r={};o.r(r),o.d(r,{formatLinksPlain:function(){return dn},formatLinksRich:function(){return un},plainToRich:function(){return ln},richToPlain:function(){return cn}});var s={};o.r(s),o.d(s,{dismiss:function(){return fn},query:function(){return pn}});var l=o(19755),c=o.n(l),u=(o(28594),o(35666),o(35202),o(78595)),d=o(79753),A=o(25108),p={},f=[],h=o(18181),m=o(64024),g=o(25108),v={updatableNotification:null,getDefaultNotificationFunction:null,setDefault:function(t){this.getDefaultNotificationFunction=t},hide:function(t,e){h.ZP.isFunction(t)&&(e=t,t=void 0),t?(t.each((function(){c()(this)[0].toastify?c()(this)[0].toastify.hideToast():g.error("cannot hide toast because object is not set"),this===this.updatableNotification&&(this.updatableNotification=null)})),e&&e.call(),this.getDefaultNotificationFunction&&this.getDefaultNotificationFunction()):g.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:m.Rl;var n=(0,m.PV)(t,e);return n.toastElement.toastify=n,c()(n.toastElement)},show:function(t,e){(e=e||{}).timeout=e.timeout?e.timeout:m.Rl;var n=(0,m.PV)(function(t){return t.toString().split("&").join("&").split("<").join("<").split(">").join(">").split('"').join(""").split("'").join("'")}(t),e);return n.toastElement.toastify=n,c()(n.toastElement)},showUpdate:function(t){return this.updatableNotification&&this.updatableNotification.hideToast(),this.updatableNotification=(0,m.PV)(t,{timeout:m.Rl}),this.updatableNotification.toastElement.toastify=this.updatableNotification,c()(this.updatableNotification.toastElement)},showTemporary:function(t,e){(e=e||{}).timeout=e.timeout||m.TN;var n=(0,m.PV)(t,e);return n.toastElement.toastify=n,c()(n.toastElement)},isHidden:function(){return!c()("#content").find(".toastify").length}},C=h.ZP.throttle((function(){v.showTemporary(t("core","Connection to server lost"))}),7e3,{trailing:!1}),b=!1,w={enableDynamicSlideToggle:function(){b=!0},showAppSidebar:function(t){(t||c()("#app-sidebar")).removeClass("disappear").show(),c()("#app-content").trigger(new(c().Event)("appresized"))},hideAppSidebar:function(t){(t||c()("#app-sidebar")).hide().addClass("disappear"),c()("#app-content").trigger(new(c().Event)("appresized"))}};function y(t,e,n){"post"!==t&&"delete"!==t||!Jt.PasswordConfirmation.requiresPasswordConfirmation()?(n=n||{},c().ajax({type:t.toUpperCase(),url:(0,d.generateOcsUrl)("apps/provisioning_api/api/v1/config/apps")+e,data:n.data||{},success:n.success,error:n.error})):Jt.PasswordConfirmation.requirePasswordConfirmation(_.bind(y,this,t,e,n))}function x(t){y("get","",t)}function k(t,e){y("get","/"+t,e)}function P(t,e,n,i){(i=i||{}).data={defaultValue:n},y("get","/"+t+"/"+e,i)}function E(t,e,n,i){(i=i||{}).data={value:n},y("post","/"+t+"/"+e,i)}function B(t,e,n){y("delete","/"+t+"/"+e,n)}var O=window.oc_appconfig||{},T={getValue:function(t,e,n,i){P(t,e,n,{success:i})},setValue:function(t,e,n){E(t,e,n)},getApps:function(t){x({success:t})},getKeys:function(t,e){k(t,{success:e})},deleteKey:function(t,e){B(t,e)}},D=o(25108),I=void 0!==window._oc_appswebroots&&window._oc_appswebroots,j=o(72316),z=o.n(j),S=o(76591),N=o(25108),U={create:"POST",update:"PROPPATCH",patch:"PROPPATCH",delete:"DELETE",read:"PROPFIND"};function M(t,e){if(h.ZP.isArray(t))return h.ZP.map(t,(function(t){return M(t,e)}));var n={href:t.href};return h.ZP.each(t.propStat,(function(t){if("HTTP/1.1 200 OK"===t.status)for(var i in t.properties){var o=i;i in e&&(o=e[i]),n[o]=t.properties[i]}})),n.id||(n.id=L(n.href)),n}function L(t){var e=t.indexOf("?");e>0&&(t=t.substr(0,e));var n,i=t.split("/");do{n=i[i.length-1],i.pop()}while(!n&&i.length>0);return n}function F(t){return t>=200&&t<=299}function R(t,e,n,i){return t.propPatch(e.url,function(t,e){var n,i={};for(n in t){var o=e[n],a=t[n];o||(N.warn('No matching DAV property for property "'+n),o=n),(h.ZP.isBoolean(a)||h.ZP.isNumber(a))&&(a=""+a),i[o]=a}return i}(n.changed,e.davProperties),i).then((function(t){F(t.status)?h.ZP.isFunction(e.success)&&e.success(n.toJSON()):h.ZP.isFunction(e.error)&&e.error(t)}))}var Q=z().noConflict();Object.assign(Q,{davCall:function(t,e){var n=new S.dav.Client({baseUrl:t.url,xmlNamespaces:h.ZP.extend({"DAV:":"d","http://owncloud.org/ns":"oc"},t.xmlNamespaces||{})});n.resolveUrl=function(){return t.url};var i=h.ZP.extend({"X-Requested-With":"XMLHttpRequest",requesttoken:OC.requestToken},t.headers);return"PROPFIND"===t.type?function(t,e,n,i){return t.propFind(e.url,h.ZP.values(e.davProperties)||[],e.depth,i).then((function(t){if(F(t.status)){if(h.ZP.isFunction(e.success)){var n=h.ZP.invert(e.davProperties),i=M(t.body,n);e.depth>0&&i.shift(),e.success(i)}}else h.ZP.isFunction(e.error)&&e.error(t)}))}(n,t,0,i):"PROPPATCH"===t.type?R(n,t,e,i):"MKCOL"===t.type?function(t,e,n,i){return t.request(e.type,e.url,i,null).then((function(o){F(o.status)?R(t,e,n,i):h.ZP.isFunction(e.error)&&e.error(o)}))}(n,t,e,i):function(t,e,n,i){return i["Content-Type"]="application/json",t.request(e.type,e.url,i,e.data).then((function(t){if(F(t.status)){if(h.ZP.isFunction(e.success)){if("PUT"===e.type||"POST"===e.type||"MKCOL"===e.type){var i=t.body||n.toJSON(),o=t.xhr.getResponseHeader("Content-Location");return"POST"===e.type&&o&&(i.id=L(o)),void e.success(i)}if(207===t.status){var a=h.ZP.invert(e.davProperties);e.success(M(t.body,a))}else e.success(t.body)}}else h.ZP.isFunction(e.error)&&e.error(t)}))}(n,t,e,i)},davSync:function(t){return function(e,n,i){var o={type:U[e]||e},a=n instanceof t.Collection;if("update"===e&&(n.hasInnerCollection?o.type="MKCOL":(n.usePUT||n.collection&&n.collection.usePUT)&&(o.type="PUT")),i.url||(o.url=h.ZP.result(n,"url")||function(){throw new Error('A "url" property or function must be specified')}()),null!=i.data||!n||"create"!==e&&"update"!==e&&"patch"!==e||(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.ZP.isFunction(r)?o.davProperties=r.call(n):o.davProperties=r),o.davProperties=h.ZP.extend(o.davProperties||{},i.davProperties),h.ZP.isUndefined(i.depth)&&(i.depth=a?1:0)}var s=i.error;i.error=function(t,e,n){i.textStatus=e,i.errorThrown=n,s&&s.call(i.context,t,e,n)};var l=i.xhr=t.davCall(h.ZP.extend(o,i),n);return n.trigger("request",n,l,i),l}}(Q)});var G=Q,H=o(65358),K=window._oc_config||{},Z=o(25108),Y=j.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)}}),q=j.Collection.extend({model:Y}),W=j.View.extend({_collection:void 0,_subViews:[],tagName:"ul",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 J({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)}))}}),J=j.View.extend({className:"contact",tagName:"li",_template:void 0,_model:void 0,_actionMenuShown:!1,events:{"click .icon-more":"_onToggleActionsMenu"},contactTemplate:o(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},_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())}}),V=j.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.ZP.debounce((function(t){var e=this.$("#contactsmenu-search").val();e!==this._searchTerm&&(this.trigger("search",this.$("#contactsmenu-search").val()),this._searchTerm=e)}),700),loadingTemplate:function(t){return this.templates.loading(t)},errorTemplate:function(e){return this.templates.error(h.ZP.extend({couldNotLoadText:t("core","Could not load your contacts")},e))},contentTemplate:function(e){return this.templates.menu(h.ZP.extend({searchContactsText:t("core","Search contacts …")},e))},contactsTemplate:function(e){return this.templates.list(h.ZP.extend({noContactsFoundText:t("core","No contacts found"),showAllContactsText:t("core","Show all contacts …"),contactsAppMgmtText:t("core","Install the Contacts app")},e))},initialize:function(t){this.options=t},showLoading:function(t){this.render(),this._contacts=void 0,this.$(".content").html(this.loadingTemplate({loadingText:t}))},showError:function(){this.render(),this._contacts=void 0,this.$(".content").html(this.errorTemplate())},showContacts:function(t,e){this._contacts=t.contacts,this.render({contacts:t.contacts});var n=new W({collection:t.contacts});n.render(),this.$(".content").html(this.contactsTemplate({contacts:t.contacts,searchTerm:e,contactsAppEnabled:t.contactsAppEnabled,contactsAppURL:Jt.generateUrl("/apps/contacts"),canInstallApp:Jt.isUserAdmin(),contactsAppMgmtURL:Jt.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}}),X=function(t){this.initialize(t)};X.prototype={$el:void 0,_view:void 0,_contactsPromise:void 0,initialize:function(t){this.$el=c()(t.el),this._view=new V({el:this.$el}),this._view.on("search",(function(t){this.loadContacts(t)}),this)},_getContacts:function(t){var e=Jt.generateUrl("/contactsmenu/contacts");return Promise.resolve(c().ajax(e,{method:"POST",data:{filter:t}}))},loadContacts:function(e){var n=this;return n._contactsPromise||(n._contactsPromise=n._getContacts(e)),h.ZP.isUndefined(e)||""===e?n._view.showLoading(t("core","Loading your contacts …")):n._view.showLoading(t("core","Looking for {term} …",{term:e})),n._contactsPromise.then((function(t){t.contacts=new q(t.contacts),n._view.showContacts(t,e)}),(function(t){n._view.showError(),Z.error("There was an error loading your contacts",t)})).then((function(){delete n._contactsPromise})).catch(Z.error.bind(this))}};var $=X,tt=document.getElementsByTagName("head")[0].getAttribute("data-user"),et=document.getElementsByTagName("head")[0].getAttribute("data-user-displayname"),nt=void 0!==tt&&tt,it=o(25108);function ot(t){return ot="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ot(t)}function at(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,(void 0,o=function(t,e){if("object"!==ot(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,"string");if("object"!==ot(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(i.key),"symbol"===ot(o)?o:String(o)),i)}var o}function rt(t,e,n){return e&&at(t.prototype,e),n&&at(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}var st={Search:rt((function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),it.warn("OCA.Search is deprecated. Please use the unified search API instead")}))},lt=function(t){return"click"===t.type||"keydown"===t.type&&"Enter"===t.key},ct=o(25108);function ut(t,e,n,i,o,a,r){try{var s=t[a](r),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,o)}function dt(t){return function(){var e=this,n=arguments;return new Promise((function(i,o){var a=t.apply(e,n);function r(t){ut(a,i,o,r,s,"next",t)}function s(t){ut(a,i,o,r,s,"throw",t)}r(void 0)}))}}function At(t){return At="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},At(t)}var pt,ft,ht,mt,gt={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,i){this.message(t,e,"alert",gt.OK_BUTTON,n,i)},info:function(t,e,n,i){this.message(t,e,"info",gt.OK_BUTTON,n,i)},confirm:function(t,e,n,i){return this.message(t,e,"notice",gt.YES_NO_BUTTONS,n,i)},confirmDestructive:function(t,e,n,i,o){return this.message(t,e,"none",n,i,void 0===o||o)},confirmHtml:function(t,e,n,i){return this.message(t,e,"notice",gt.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-"+gt.dialogsCounter+"-content",u="#"+l,d=s.octemplate({dialog_name:l,title:n,message:e,type:"notice"}),A=c()("<input/>");A.attr("type",r?"password":"text").attr("id",l+"-input").attr("placeholder",a);var p=c()("<label/>").attr("for",l+"-input").text(a+": ");d.append(p),d.append(A),void 0===o&&(o=!1),c()("body").append(d),void 0!==i&&(i=h.ZP.once(i));var f=[{text:t("core","No"),click:function(){void 0!==i&&i(!1,A.val()),c()(u).ocdialog("close")}},{text:t("core","Yes"),click:function(){void 0!==i&&i(!0,A.val()),c()(u).ocdialog("close")},defaultButton:!0}];c()(u).ocdialog({closeOnEscape:!0,modal:o,buttons:f,close:function(){void 0!==i&&i(!1,A.val())}}),A.focus(),gt.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"),A=t("files","New folder");r!==this.FILEPICKER_TYPE_COPY&&r!==this.FILEPICKER_TYPE_MOVE&&r!==this.FILEPICKER_TYPE_COPY_MOVE||(d=t("core","No more subfolders in here")),this.filepicker.loading=!0,this.filepicker.filesClient=st.Sharing&&st.Sharing.PublicApp&&st.Sharing.PublicApp.fileList?st.Sharing.PublicApp.fileList.filesClient:Jt.Files.getClient(),this.filelist=null,s=s||"",l=Object.assign({allowDirectoryChooser:!1},l),c().when(this._getFilePickerTemplate()).then((function(p){var f,h;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:A,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),"function"==typeof l.filter&&u.$filePicker.data("filter",l.filter),void 0===a&&(a=!1),void 0===i&&(i=!1),c()(null!==(f=null===(h=l)||void 0===h?void 0:h.target)&&void 0!==f?f:"body").prepend(u.$filePicker),u.$showGridView=c()("button#picker-showgridview"),u.$showGridView.on("click keydown",(function(t){lt(t)&&u._onGridviewChange()})),u._getGridSettings();var m=u.$filePicker.find(".actions.creatable .button-add");r!==u.FILEPICKER_TYPE_CHOOSE||l.allowDirectoryChooser||u.$filePicker.find(".actions.creatable").hide(),m.on("focus",(function(){u.$filePicker.ocdialog("setEnterCallback",(function(t){t.stopImmediatePropagation(),t.preventDefault(),m.click()}))})),m.on("blur",(function(){u.$filePicker.ocdialog("unsetEnterCallback")})),Jt.registerMenu(m,u.$filePicker.find(".menu"),(function(){v.tooltip("hide"),v.focus(),u.$filePicker.ocdialog("setEnterCallback",(function(t){t.stopImmediatePropagation(),t.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']"),C=g.find("input[type='submit']");v.on("keydown",(function(t){lt(t)&&(t.stopImmediatePropagation(),t.preventDefault(),g.submit())})),C.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(Jt.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,r)})),Jt.hideMenus(),u.$filePicker.ocdialog("unsetEnterCallback"),u.$filePicker.click(),v.val(A)}})),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 keydown","div:not(:last-child)",u,(function(t){lt(t)&&u._handleTreeListSelect(t,r)})),u.$filelist.on("click keydown","tr",(function(t){lt(t)&&u._handlePickerClick(t,c()(this),r)})),u.$fileListHeader.on("click keydown","a",(function(t){if(lt(t)){var e=u.$filePicker.data("path");u.filepicker.sortField=c()(t.currentTarget).data("sort"),u.filepicker.sortOrder="asc"===u.filepicker.sortOrder?"desc":"asc",u._fillFilePicker(e,r)}})),u._fillFilePicker(s,r)}));var b=function(t){if(void 0!==n){var e;if(!0===i)e=[],u.$filelist.find("tr.filepicker_element_selected").each((function(t,n){e.push(u.$filePicker.data("path")+"/"+c()(n).data("entryname"))}));else{e=u.$filePicker.data("path");var o=u.$filelist.find("tr.filepicker_element_selected").data("entryname");o&&(e+="/"+o)}n(e,t),u.$filePicker.ocdialog("close")}},w=[];r===gt.FILEPICKER_TYPE_CHOOSE?w.push({text:t("core","Choose"),click:function(){b(gt.FILEPICKER_TYPE_CHOOSE)},defaultButton:!0}):r===gt.FILEPICKER_TYPE_CUSTOM?l.buttons.forEach((function(t){w.push({text:t.text,click:function(){b(t.type)},defaultButton:t.defaultButton})})):(r!==gt.FILEPICKER_TYPE_COPY&&r!==gt.FILEPICKER_TYPE_COPY_MOVE||w.push({text:t("core","Copy"),click:function(){b(gt.FILEPICKER_TYPE_COPY)},defaultButton:!1}),r!==gt.FILEPICKER_TYPE_MOVE&&r!==gt.FILEPICKER_TYPE_COPY_MOVE||w.push({text:t("core","Move"),click:function(){b(gt.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(t){}u.$filePicker=null}});var y=u.$filePicker.closest(".oc-dialog").find(".primary");-1!==u.$filePicker.data("mimetype").indexOf("httpd/unix-directory")||u.$filePicker.data("allowDirectoryChooser")?y.prop("disabled",!1):y.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-"+gt.dialogsCounter+"-content",d="#"+u,A=l.octemplate({dialog_name:u,title:n,message:e,type:i},s?{escapeFunction:""}:{});void 0===r&&(r=!1),c()("body").append(A);var p=[];switch(o){case gt.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 gt.OK_BUTTON:p[0]={text:t("core","OK"),click:function(){c()(d).ocdialog("close"),void 0!==a&&a()},defaultButton:!0};break;default:"object"===At(o)&&o.type===gt.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}),gt.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(t,e,n,i,o){i=Math.round(i),o=Math.round(o);for(var a=t.getContext("2d").getImageData(0,0,e,n),r=t.getContext("2d").getImageData(0,0,i,o),s=a.data,l=r.data,c=e/i,u=n/o,d=Math.ceil(c/2),A=Math.ceil(u/2),p=0;p<o;p++)for(var f=0;f<i;f++){for(var h=4*(f+p*i),m=0,g=0,v=0,C=0,b=0,w=0,y=0,x=(p+.5)*u,k=Math.floor(p*u);k<(p+1)*u;k++)for(var P=Math.abs(x-(k+.5))/A,E=(f+.5)*c,B=P*P,O=Math.floor(f*c);O<(f+1)*c;O++){var T=Math.abs(E-(O+.5))/d,D=Math.sqrt(B+T*T);D>=-1&&D<=1&&(m=2*D*D*D-3*D*D+1)>0&&(y+=m*s[3+(T=4*(O+k*e))],v+=m,s[T+3]<255&&(m=m*s[T+3]/250),C+=m*s[T],b+=m*s[T+1],w+=m*s[T+2],g+=m)}l[h]=C/g,l[h+1]=b/g,l[h+2]=w/g,l[h+3]=y/v}t.getContext("2d").clearRect(0,0,Math.max(e,i),Math.max(n,o)),t.width=i,t.height=o,t.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(Jt.Util.humanFileSize(i.size)),r.find(".mtime").text(Jt.Util.formatDate(i.mtime)),o.size&&o.lastModified&&(s.find(".size").text(Jt.Util.humanFileSize(o.size)),s.find(".mtime").text(Jt.Util.formatDate(o.lastModified)));var u=i.directory+"/"+i.name,d={file:u,x:96,y:96,c:i.etag,forceIcon:0},A=Files.generatePreviewUrl(d);A=A.replace(/'/g,"%27"),r.find(".icon").css({"background-image":"url('"+A+"')"}),function(t){var e=new(c().Deferred),n=t.type&&t.type.split("/").shift();if(window.FileReader&&"image"===n){var i=new FileReader;i.onload=function(t){var n=new Blob([t.target.result]);window.URL=window.URL||window.webkitURL;var i=window.URL.createObjectURL(n),o=new Image;o.src=i,o.onload=function(){var t,n,i,a,r,s,c,u=(t=o,r=document.createElement("canvas"),s=t.width,c=t.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(t,n,i,a,a,0,0,a,a),l(r,a,a,96,96),r.toDataURL("image/png",.7));e.resolve(u)}},i.readAsArrayBuffer(t)}else e.reject();return e}(o).then((function(t){s.find(".icon").css("background-image","url("+t+")")}),(function(){u=Jt.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",A="#"+d;if(this._fileexistsshown){var p=c()(A+" .conflicts");u(p,i,o);var f=c()(A+" .conflict").length,h=n("core","{count} file conflict","{count} file conflicts",f,{count:f});c()(A).parent().children(".oc-dialog-title").text(h),c()(window).trigger("resize"),s.resolve()}else this._fileexistsshown=!0,c().when(this._getFileExistsTemplate()).then((function(n){var l=t("core","One file conflict"),p=n.octemplate({dialog_name:d,title:l,type:"fileexists",allnewfiles:t("core","New Files"),allexistingfiles:t("core","Already existing files"),why:t("core","Which files do you want to keep?"),what:t("core","If you select both versions, the copied file will have a number added to its name.")});if(c()("body").append(p),i&&o){var f=p.find(".conflicts");u(f,i,o)}var h=[{text:t("core","Cancel"),classes:"cancel",click:function(){void 0!==a.onCancel&&a.onCancel(e),c()(A).ocdialog("close")}},{text:t("core","Continue"),classes:"continue",click:function(){void 0!==a.onContinue&&a.onContinue(c()(A+" .conflict")),c()(A).ocdialog("close")}}];c()(A).ocdialog({width:500,closeOnEscape:!0,modal:!0,buttons:h,closeButton:null,close:function(){r._fileexistsshown=!1;try{c()(this).ocdialog("destroy").remove()}catch(t){}}}),c()(A).css("height","auto");var m=p.closest(".oc-dialog").find("button.continue");function g(){var t=p.find(".conflicts .checkbox:checked").length;m.prop("disabled",0===t)}m.prop("disabled",!0),c()(A).find(".allnewfiles").on("click",(function(){c()(A).find('.conflict .replacement input[type="checkbox"]').prop("checked",c()(this).prop("checked"))})),c()(A).find(".allexistingfiles").on("click",(function(){c()(A).find('.conflict .original:not(.readonly) input[type="checkbox"]').prop("checked",c()(this).prop("checked"))})),c()(A).find(".conflicts").on("click",".replacement,.original:not(.readonly)",(function(){var t=c()(this).find('input[type="checkbox"]');t.prop("checked",!t.prop("checked"))})),c()(A).find(".conflicts").on("click",'.replacement input[type="checkbox"],.original:not(.readonly) input[type="checkbox"]',(function(){var t=c()(this);t.prop("checked",!t.prop("checked"))})),c()(A).on("click",".replacement,.allnewfiles",(function(){var e=c()(A).find('.conflict .replacement input[type="checkbox"]:checked').length;e===c()(A+" .conflict").length?(c()(A).find(".allnewfiles").prop("checked",!0),c()(A).find(".allnewfiles + .count").text(t("core","(all selected)"))):e>0?(c()(A).find(".allnewfiles").prop("checked",!1),c()(A).find(".allnewfiles + .count").text(t("core","({count} selected)",{count:e}))):(c()(A).find(".allnewfiles").prop("checked",!1),c()(A).find(".allnewfiles + .count").text("")),g()})),c()(A).on("click",".original,.allexistingfiles",(function(){var e=c()(A).find('.conflict .original input[type="checkbox"]:checked').length;e===c()(A+" .conflict").length?(c()(A).find(".allexistingfiles").prop("checked",!0),c()(A).find(".allexistingfiles + .count").text(t("core","(all selected)"))):e>0?(c()(A).find(".allexistingfiles").prop("checked",!1),c()(A).find(".allexistingfiles + .count").text(t("core","({count} selected)",{count:e}))):(c()(A).find(".allexistingfiles").prop("checked",!1),c()(A).find(".allexistingfiles + .count").text("")),g()})),s.resolve()})).fail((function(){s.reject(),alert(t("core","Error loading file exists template"))}));return s.promise()},_getGridSettings:function(){var e=this;c().get(Jt.generateUrl("/apps/files/api/v1/showgridview"),(function(n){e.$showGridView.removeClass("icon-toggle-filelist icon-toggle-pictures").addClass(n.gridview?"icon-toggle-filelist":"icon-toggle-pictures"),e.$showGridView.attr("aria-label",n.gridview?t("files","Show list view"):t("files","Show grid view")),c()(".list-container").toggleClass("view-grid",n.gridview)}))},_onGridviewChange:function(){var e=this.$showGridView.hasClass("icon-toggle-filelist");Jt.currentUser&&c().post(Jt.generateUrl("/apps/files/api/v1/showgridview"),{show:!e}),this.$showGridView.removeClass("icon-toggle-filelist icon-toggle-pictures").addClass(e?"icon-toggle-pictures":"icon-toggle-filelist"),this.$showGridView.attr("aria-label",e?t("files","Show grid view"):t("files","Show list view")),this.$filePicker.find(".list-container").toggleClass("view-grid",!e)},_getFilePickerTemplate:function(){var t=c().Deferred();if(this.$filePickerTemplate)t.resolve(this.$filePickerTemplate);else{var e=this;c().get(Jt.filePath("core","templates","filepicker.html"),(function(n){e.$filePickerTemplate=c()(n),e.$listTmpl=e.$filePickerTemplate.find(".filelist tbody tr:first-child").detach(),t.resolve(e.$filePickerTemplate)})).fail((function(e,n,i){t.reject(e.status,i)}))}return t.promise()},_getMessageTemplate:function(){var t=c().Deferred();if(this.$messageTemplate)t.resolve(this.$messageTemplate);else{var e=this;c().get(Jt.filePath("core","templates","message.html"),(function(n){e.$messageTemplate=c()(n),t.resolve(e.$messageTemplate)})).fail((function(e,n,i){t.reject(e.status,i)}))}return t.promise()},_getFileExistsTemplate:function(){var t=c().Deferred();if(this.$fileexistsTemplate)t.resolve(this.$fileexistsTemplate);else{var e=this;c().get(Jt.filePath("files","templates","fileexists.html"),(function(n){e.$fileexistsTemplate=c()(n),t.resolve(e.$fileexistsTemplate)})).fail((function(){t.reject()}))}return t.promise()},_fillFilePicker:(pt=dt(regeneratorRuntime.mark((function e(n,i){var o,a,r,s,l,u,d,A;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=this,this.$filelist.empty(),this.$filePicker.find(".emptycontent").hide(),this.$filelistContainer.addClass("icon-loading"),this.$filePicker.data("path",n),a=this.$filePicker.data("mimetype"),r=this.$filePicker.data("filter"),"string"==typeof a&&(a=[a]),o.$fileListHeader.find(".sort-indicator").addClass("hidden").removeClass("icon-triangle-n").removeClass("icon-triangle-s"),o.$fileListHeader.find("[data-sort="+o.filepicker.sortField+"] .sort-indicator").removeClass("hidden"),"asc"===o.filepicker.sortOrder?o.$fileListHeader.find("[data-sort="+o.filepicker.sortField+"] .sort-indicator").addClass("icon-triangle-n"):o.$fileListHeader.find("[data-sort="+o.filepicker.sortField+"] .sort-indicator").addClass("icon-triangle-s"),s=function(){var t=dt(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",o.filepicker.filesClient.getFolderContents(e).then((function(t,e){return e})));case 1:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),e.prev=12,e.next=15,s(n);case 15:l=e.sent,e.next=26;break;case 18:return e.prev=18,e.t0=e.catch(12),ct.error("Requested path does not exists, falling back to root"),e.next=23,s("/");case 23:l=e.sent,this.$filePicker.data("path","/"),this._changeButtonsText(i,"");case 26:o.filelist=l,a&&a.length>0&&-1===a.indexOf("*")&&(l=l.filter((function(t){return"dir"===t.type||-1!==a.indexOf(t.mimetype)}))),r&&(l=l.filter(r)),null===(u=document.getElementById("showHiddenFiles"))||"1"===u.value||(l=l.filter((function(t){return!t.name.startsWith(".")}))),A=(d={name:function(t,e){return"dir"===t.type&&"dir"!==e.type?-1:"dir"!==t.type&&"dir"===e.type?1:Jt.Util.naturalSortCompare(t.name,e.name)},size:function(t,e){return t.size-e.size},mtime:function(t,e){return t.mtime-e.mtime}})[o.filepicker.sortField]||d.name,l=l.sort((function(t,e){var n=function(t){return t.tags&&t.tags.indexOf(Jt.TAG_FAVORITE)>=0};return n(t)&&!n(e)?-1:!n(t)&&n(e)?1:"asc"===o.filepicker.sortOrder?A(t,e):-A(t,e)})),o._fillSlug(),0===l.length?(o.$filePicker.find(".emptycontent").show(),o.$fileListHeader.hide()):(o.$filePicker.find(".emptycontent").hide(),o.$fileListHeader.show()),o.$filelist.empty(),c().each(l,(function(e,i){var a,r;if(i.isEncrypted&&"httpd/unix-directory"===i.mimetype?i.icon=Jt.MimeType.getIconUrl("dir-encrypted"):i.icon=Jt.MimeType.getIconUrl(i.mimetype),void 0!==i.size&&i.size>=0?(a=Jt.Util.humanFileSize(parseInt(i.size,10),!0),r=Math.round(160-Math.pow(i.size/1048576,2))):(a=t("files","Pending"),r=80),i.name.length>=10)var s=Math.min(Math.floor(i.name.length/2),10),l=i.name.substr(0,i.name.length-s),u=i.name.substr(i.name.length-s);else l=i.name,u="";var d=o.$listTmpl.octemplate({type:i.type,dir:n,filename:i.name,filename1:l,filename2:u,date:Jt.Util.relativeModifiedDate(i.mtime),size:a,sizeColor:r,icon:i.icon});if("file"===i.type){var A={file:n+"/"+i.name,x:100,y:100},p=new Image,f=Jt.generateUrl("/core/preview.png?")+c().param(A);p.onload=function(){p.width>5&&d.find("td.filename").attr("style","background-image:url("+f+")")},p.src=f}o.$filelist.append(d)})),o.$filelistContainer.removeClass("icon-loading");case 40:case"end":return e.stop()}}),e,this,[[12,18]])}))),function(t,e){return pt.apply(this,arguments)}),_fillSlug:function(){var e=this.$dirTree.find(".actions.creatable").detach();this.$dirTree.empty();var n=this;n.$dirTree.append(e);var i=this.$filePicker.data("path"),o=c()('<div data-dir="{dir}" tabindex="0"><a>{name}</a></div>').addClass("crumb");if(i){var a=i.split("/");c().each(a,(function(t,e){if(""===(e=a.pop()))return!1;n.$dirTree.prepend(o.octemplate({dir:a.join("/")+"/"+e,name:e}))}))}o.octemplate({dir:"",name:t("core","Home")},{escapeFunction:null}).prependTo(this.$dirTree)},_handleTreeListSelect:function(t,e){var n=t.data,i=c()(t.target).closest(".crumb").data("dir");n._fillFilePicker(i,e);var o=t.target.closest(".oc-dialog"),a=c()(".primary",o);this._changeButtonsText(e,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(t,e,n){var i=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"),i.prop("disabled",!1)):"dir"===e.data("type")&&(this._fillFilePicker(this.$filePicker.data("path")+"/"+e.data("entryname"),n),this._changeButtonsText(n,e.data("entryname")),-1!==this.$filePicker.data("mimetype").indexOf("httpd/unix-directory")||this.$filePicker.data("allowDirectoryChooser")?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)}}},vt=gt,Ct=(ft=document,ht=u.j8,mt=ft.getElementsByTagName("head")[0].getAttribute("data-requesttoken"),{getToken:function(){return mt},setToken:function(t){ht("csrf-token-update",{token:mt=t})}}),bt=Ct.getToken,wt=Ct.setToken,yt=function t(e,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(bt()),this.useFallBack||"undefined"==typeof EventSource){var r="oc_eventsource_iframe_"+t.iframeCount;t.fallBackSources[t.iframeCount]=this,this.iframe=c()("<iframe></iframe>"),this.iframe.attr("id",r),this.iframe.hide(),o="&",-1===e.indexOf("?")&&(o="?"),this.iframe.attr("src",e+o+"fallback=true&fallback_id="+t.iframeCount+"&"+a),c()("body").append(this.iframe),this.useFallBack=!0,t.iframeCount++}else o="&",-1===e.indexOf("?")&&(o="?"),this.source=new EventSource(e+o+a),this.source.onmessage=function(t){for(var e=0;e<this.typelessListeners.length;e++)this.typelessListeners[e](JSON.parse(t.data))}.bind(this);this.listen("__internal__",function(t){"close"===t&&this.close()}.bind(this))};yt.fallBackSources=[],yt.iframeCount=0,yt.fallBackCallBack=function(t,e,n){yt.fallBackSources[t].fallBackCallBack(e,n)},yt.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 xt=yt,kt=o(42515),Pt=o(25108),Et=null,Bt=null,Ot=function(t){if(Et){var e=Et;Et.trigger(new(c().Event)("beforeHide")),Et.slideUp(50,(function(){e.trigger(new(c().Event)("afterHide")),t&&t.apply(this,arguments)}))}c()(".menutoggle").attr("aria-expanded",!1),Bt&&Bt.attr("aria-expanded",!1),c()(".openedMenu").removeClass("openedMenu"),Et=null,Bt=null},Tt=!!window._oc_isadmin,Dt=o(86834),It=o.n(Dt),jt=o(31352),_t={load:jt.XJ,register:jt.z2,_unregister:jt.ET,translate:jt.Iu,translatePlural:jt.uN};It().registerHelper("t",(function(t,e){return(0,jt.Iu)(t,e)}));var zt={startSaving:function(e){this.startAction(e,t("core","Saving …"))},startAction:function(t,e){c()(t).text(e).removeClass("success").removeClass("error").stop(!0,!0).show()},finishedSaving:function(t,e){this.finishedAction(t,e)},finishedAction:function(t,e){"success"===e.status?this.finishedSuccess(t,e.data.message):this.finishedError(t,e.data.message)},finishedSuccess:function(t,e){c()(t).text(e).addClass("success").removeClass("error").stop(!0,!0).delay(3e3).fadeOut(900).show()},finishedError:function(t,e){c()(t).text(e).addClass("error").removeClass("success").show()}},St=o(30381),Nt=o.n(St),Ut={callback:null,pageLoadTime:null,init:function(){c()(".password-confirm-required").on("click",h.ZP.bind(this.requirePasswordConfirmation,this)),this.pageLoadTime=Nt().now()},requiresPasswordConfirmation:function(){var t=this.pageLoadTime-1e3*window.nc_pageLoad,e=Nt().now()-(t+1e3*window.nc_lastLogin);return window.backendAllowsPasswordConfirmation&&e>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.ZP.extend(o,n),r=this;this.requiresPasswordConfirmation()&&Jt.dialogs.prompt(a.text,a.title,(function(t,e){t&&""!==e?r._confirmPassword(e,a):h.ZP.isFunction(i)&&i()}),!0,a.label,!0).then((function(){var t=c()(".oc-dialog:visible");if(t.find(".ui-icon").remove(),t.addClass("password-confirmation"),""!==a.error){var e=c()("<p></p>").addClass("msg warning").text(a.error);t.find(".oc-dialog-content").append(e)}var n=t.find(".oc-dialog-buttonrow");n.addClass("aside");var i=n.find("button");i.eq(0).hide(),i.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(t){window.nc_lastLogin=t.lastLogin,h.ZP.isFunction(i.callback)&&i.callback()},error:function(){n.error=t("core","Failed to authenticate, try again"),Jt.PasswordConfirmation.requirePasswordConfirmation(i.callback,n)}})}},Mt=window._theme||{},Lt={_handlers:[],_pushState:function(t,e,n){var i;if(i="string"==typeof t?t:Jt.buildQueryString(t),window.history.pushState){if(e=e||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(t,"",e):window.history.pushState(t,"",e)}else window.location.hash="?"+i,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=Jt.parseQueryString(this._decodeQuery(e))),(t=h.ZP.extend(t||{},Jt.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,h.ZP.isString(e)?e=Jt.parseQueryString(e):e||(e=this.parseUrlQuery()||{});for(var n=0;n<this._handlers.length;n++)this._handlers[n](e)}}},Ft=o(91770),Rt=o(25108);function Qt(t){for(var e,n=[],i=0,o=-1,a=0;i<t.length;){e=t.charAt(i);var r=!a&&"."===e||e>="0"&&e<="9";r!==a&&(n[++o]="",a=r),n[o]+=e,i++}return n}var Gt={History:Lt,humanFileSize:Ft.sS,computerFileSize:function(t){if("string"!=typeof t)return null;var e=t.toLowerCase().trim(),n=null,i=e.match(/^[\s+]?([0-9]*)(\.([0-9]+))?( +)?([kmgtp]?b?)$/i);return null===i?null:(n=parseFloat(e),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(t,e){return void 0===window.TESTING&&Rt.warn("OC.Util.formatDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment"),e=e||"LLL",Nt()(t).format(e)},relativeModifiedDate:function(e){void 0===window.TESTING&&Rt.warn("OC.Util.relativeModifiedDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment");var n=Nt()().diff(Nt()(e));return n>=0&&n<45e3?t("core","seconds ago"):Nt()(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 i=t.offsetWidth;return n===i&&(i=e.clientWidth),document.body.removeChild(e),this._scrollBarWidth=n-i,this._scrollBarWidth},stripTime:function(t){return new Date(t.getFullYear(),t.getMonth(),t.getDate())},naturalSortCompare:function(t,e){var n,i=Qt(t),o=Qt(e);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],Jt.getLanguage())}return i.length-o.length},waitFor:function(t,e){!function n(){!0!==t()&&setTimeout(n,e)}()},isCookieSetToValue:function(t,e){for(var n=document.cookie.split(";"),i=0;i<n.length;i++){var o=n[i].split("=");if(o[0].trim()===t&&o[1].trim()===e)return!0}return!1}},Ht=window._oc_debug,Kt=window._oc_webroot;if(void 0===Kt){var Zt=(Kt=location.pathname).indexOf("/index.php/");Kt=-1!==Zt?Kt.substr(0,Zt):Kt.substr(0,Kt.lastIndexOf("/"))}var Yt,qt=Kt,Wt=o(25108),Jt={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(K.blacklist_files_regex)},addScript:function(t,e,n){var i;A.warn("OC.addScript is deprecated, use OCP.Loader.loadScript instead");var o=(0,d.generateFilePath)(t,"js",e+".js");return p[o]?n&&n():(i=c().Deferred(),c().getScript(o,(function(){return i.resolve()})),p[o]=i),p[o]},addStyle:function(t,e){A.warn("OC.addStyle is deprecated, use OCP.Loader.loadStylesheet instead");var n=(0,d.generateFilePath)(t,"css",e+".css");-1===f.indexOf(n)&&(f.push(n),document.createStyleSheet?document.createStyleSheet(n):(e=c()('<link rel="stylesheet" type="text/css" href="'+n+'"/>'),c()("head").append(e)))},Apps:w,AppConfig:T,appConfig:O,appSettings:function(e){if(D.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(t,e,n){throw n}))}})).show()}),"html")}},appswebroots:I,Backbone:G,ContactsMenu:$,config:K,currentUser:nt,dialogs:vt,EventSource:xt,getCurrentUser:function(){return{uid:nt,displayName:et}},isUserAdmin:function(){return Tt},L10N:_t,_ajaxConnectionLostHandler:C,_processAjaxError:function(t){(0!==t.status||"abort"!==t.statusText&&"timeout"!==t.statusText&&!Jt._reloadCalled)&&(h.ZP.contains([302,303,307,401],t.status)&&Jt.currentUser?setTimeout((function(){if(!Jt._userIsNavigatingAway&&!Jt._reloadCalled){var t=0,e=setInterval((function(){v.showUpdate(n("core","Problem loading page, reloading in %n second","Problem loading page, reloading in %n seconds",5-t)),t>=5&&(clearInterval(e),Jt.reload()),t++}),1e3);Jt._reloadCalled=!0}}),100):0===t.status&&setTimeout((function(){Jt._userIsNavigatingAway||Jt._reloadCalled||Jt._ajaxConnectionLostHandler()}),100))},registerXHRForErrorProcessing:function(t){t.addEventListener&&(t.addEventListener("load",(function(){4===t.readyState&&(t.status>=200&&t.status<300||304===t.status||c()(document).trigger(new(c().Event)("ajaxError"),t))})),t.addEventListener("error",(function(){c()(document).trigger(new(c().Event)("ajaxError"),t)})))},getCapabilities:function(){return Pt.warn("OC.getCapabilities is deprecated and will be removed in Nextcloud 21. See @nextcloud/capabilities"),(0,kt.getCapabilities)()},hideMenus:Ot,registerMenu:function(t,e,n,i){e.addClass("menu");var o="A"===t.prop("tagName")||"BUTTON"===t.prop("tagName");t.on(o?"click.menu":"click.menu keyup.menu",(function(o){o.preventDefault(),o.key&&"Enter"!==o.key||(e.is(Et)?Ot():(Et&&Ot(),!0===i&&e.parent().addClass("openedMenu"),t.attr("aria-expanded",!0),e.slideToggle(50,n),Et=e,Bt=t))}))},showMenu:function(t,e,n){e.is(Et)||(Ot(),Et=e,Bt=t,e.trigger(new(c().Event)("beforeShow")),e.show(),e.trigger(new(c().Event)("afterShow")),h.ZP.isFunction(n)&&n())},unregisterMenu:function(t,e){e.is(Et)&&Ot(),t.off("click.menu").removeClass("menutoggle"),e.removeClass("menu")},basename:H.EZ,encodePath:H.Ec,dirname:H.XX,isSamePath:H.Mg,joinPaths:H.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:jt.aj,getLocale:jt.Kd,getLanguage:jt.G3,buildQueryString:function(t){return t?c().map(t,(function(t,e){var n=encodeURIComponent(e);return null!=t&&(n+="="+encodeURIComponent(t)),n})).join("&"):""},parseQueryString:function(t){var e,n,i,o={};if(!t)return null;(e=t.indexOf("?"))>=0&&(t=t.substr(e+1));for(var a=t.replace(/\+/g,"%20").split("&"),r=0;r<a.length;r++){var s=a[r];(n=(e=s.indexOf("="))>=0?[s.substr(0,e),s.substr(e+1)]:[s]).length&&(i=decodeURIComponent(n[0]))&&(o[i]=n.length>1?decodeURIComponent(n[1]):null)}return o},msg:zt,Notification:v,PasswordConfirmation:Ut,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 i=this.getPlugins(t),o=0;o<i.length;o++)i[o].attach&&i[o].attach(e,n)},detach:function(t,e,n){for(var i=this.getPlugins(t),o=0;o<i.length;o++)i[o].detach&&i[o].detach(e,n)}},theme:Mt,Util:Gt,debug:Ht,filePath:d.generateFilePath,generateUrl:d.generateUrl,get:(Yt=window,function(t){for(var e=t.split("."),n=e.pop(),i=0;i<e.length;i++)if(!(Yt=Yt[e[i]]))return!1;return Yt[n]}),set:function(t){return function(e,n){for(var i=e.split("."),o=i.pop(),a=0;a<i.length;a++)t[i[a]]||(t[i[a]]={}),t=t[i[a]];return t[o]=n,n}}(window),getRootPath:d.getRootUrl,imagePath:d.imagePath,redirect:function(t){window.location=t},reload:function(){window.location.reload()},requestToken:bt(),linkTo:d.linkTo,linkToOCS:function(t,e){return(0,d.generateOcsUrl)(t,{},{ocsVersion:e||1})+"/"},linkToRemote:d.generateRemoteUrl,linkToRemoteBase:function(t){return(0,d.getRootUrl)()+"/remote.php/"+t},webroot:qt};(0,u.Ld)("csrf-token-update",(function(t){OC.requestToken=t.token,Wt.info("OC.requestToken changed",t.token)}));var Vt=o(79954),Xt=o(45994),$t=o(25108);function te(t,e,n,i,o,a,r){try{var s=t[a](r),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,o)}function ee(t){return function(){var e=this,n=arguments;return new Promise((function(i,o){var a=t.apply(e,n);function r(t){te(a,i,o,r,s,"next",t)}function s(t){te(a,i,o,r,s,"throw",t)}r(void 0)}))}}var ne=null,ie=function(){var t=ee(regeneratorRuntime.mark((function t(){var e,n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=(0,d.generateUrl)("/csrftoken"),t.next=3,c().get(e);case 3:return n=t.sent,t.abrupt("return",n.token);case 5:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),oe=function(){var t=ee(regeneratorRuntime.mark((function t(){var e;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,ie();case 3:e=t.sent,wt(e),t.next=10;break;case 7:t.prev=7,t.t0=t.catch(0),$t.error("session heartbeat failed",t.t0);case 10:case"end":return t.stop()}}),t,null,[[0,7]])})));return function(){return t.apply(this,arguments)}}(),ae=function(){var t=setInterval(oe,1e3*function(){var t=NaN;return ne.session_lifetime&&(t=Math.floor(ne.session_lifetime/2)),Math.min(86400,Math.max(60,isNaN(t)?900:t))}());return $t.info("session heartbeat polling started"),t},re=o(20144),se=o(85750),le=o.n(se),ce={name:"ContactsMenu",components:{Contacts:o(12050).Z,NcHeaderMenu:le()},data:function(){return{contactsMenu:null}},mounted:function(){this.contactsMenu=new Jt.ContactsMenu({el:"#contactsmenu-menu"})},methods:{handleOpen:function(){var t;null===(t=this.contactsMenu)||void 0===t||t.loadContacts()}}},ue=o(93379),de=o.n(ue),Ae=o(7795),pe=o.n(Ae),fe=o(90569),he=o.n(fe),me=o(3565),ge=o.n(me),ve=o(19216),Ce=o.n(ve),be=o(44589),we=o.n(be),ye=o(50893),xe={};xe.styleTagTransform=we(),xe.setAttributes=ge(),xe.insert=he().bind(null,"head"),xe.domAPI=pe(),xe.insertStyleElement=Ce(),de()(ye.Z,xe),ye.Z&&ye.Z.locals&&ye.Z.locals;var ke=o(51900),Pe=(0,ke.Z)(ce,(function(){var t=this,e=t._self._c;return e("NcHeaderMenu",{attrs:{id:"contactsmenu","aria-label":t.t("core","Search contacts")},on:{open:t.handleOpen},scopedSlots:t._u([{key:"trigger",fn:function(){return[e("Contacts",{attrs:{size:20}})]},proxy:!0}])},[t._v(" "),e("div",{attrs:{id:"contactsmenu-menu"}})])}),[],!1,null,"1563c388",null).exports,Ee=o(12945),Be=o.n(Ee),Oe=o(76212),Te=o.n(Oe),De={name:"AppMenu",components:{NcActions:Be(),NcActionLink:Te()},data:function(){return{apps:(0,Vt.j)("core","apps",{}),appLimit:0,observer:null}},computed:{appList:function(){return Object.values(this.apps)},mainAppList:function(){return this.appList.slice(0,this.appLimit)},popoverAppList:function(){return this.appList.slice(this.appLimit)},appLabel:function(){return function(e){return e.name+(e.active?" ("+t("core","Currently open")+")":"")+(e.unread>0?" ("+n("core","{count} notification","{count} notifications",e.unread,{count:e.unread})+")":"")}}},mounted:function(){this.observer=new ResizeObserver(this.resize),this.observer.observe(this.$el),this.resize(),(0,u.Ld)("nextcloud:app-menu.refresh",this.setApps)},beforeDestroy:function(){this.observer.disconnect(),(0,u.r1)("nextcloud:app-menu.refresh",this.setApps)},methods:{setNavigationCounter:function(t,e){this.$set(this.apps[t],"unread",e)},setApps:function(t){var e=t.apps;this.apps=e},resize:function(){var t=this.$el.offsetWidth,e=Math.floor(t/50)-1;1==this.appList.length-e&&e--,e<1&&(e=0),this.appLimit=e}}},Ie=De,je=o(58626),_e={};_e.styleTagTransform=we(),_e.setAttributes=ge(),_e.insert=he().bind(null,"head"),_e.domAPI=pe(),_e.insertStyleElement=Ce(),de()(je.Z,_e),je.Z&&je.Z.locals&&je.Z.locals;var ze=(0,ke.Z)(Ie,(function(){var t=this,e=t._self._c;return e("nav",{staticClass:"app-menu"},[e("ul",{staticClass:"app-menu-main"},t._l(t.mainAppList,(function(n){return e("li",{key:n.id,staticClass:"app-menu-entry",class:{"app-menu-entry__active":n.active},attrs:{"data-app-id":n.id}},[e("a",{class:{"has-unread":n.unread>0},attrs:{href:n.href,"aria-label":t.appLabel(n),title:n.name,"aria-current":!!n.active&&"page",target:n.target?"_blank":void 0,rel:n.target?"noopener noreferrer":void 0}},[e("img",{attrs:{src:n.icon,alt:""}}),t._v(" "),e("div",{staticClass:"app-menu-entry--label"},[t._v("\n\t\t\t\t\t"+t._s(n.name)+"\n\t\t\t\t\t"),n.unread>0?e("span",{staticClass:"hidden-visually unread-counter"},[t._v(t._s(n.unread))]):t._e()])])])})),0),t._v(" "),e("NcActions",{staticClass:"app-menu-more",attrs:{"aria-label":t.t("core","More apps")}},t._l(t.popoverAppList,(function(n){return e("NcActionLink",{key:n.id,staticClass:"app-menu-popover-entry",attrs:{"aria-label":t.appLabel(n),"aria-current":!!n.active&&"page",href:n.href},scopedSlots:t._u([{key:"icon",fn:function(){return[e("div",{staticClass:"app-icon",class:{"has-unread":n.unread>0}},[e("img",{attrs:{src:n.icon,alt:""}})])]},proxy:!0}],null,!0)},[t._v("\n\t\t\t"+t._s(n.name)+"\n\t\t\t"),n.unread>0?e("span",{staticClass:"hidden-visually unread-counter"},[t._v(t._s(n.unread))]):t._e()])})),1)],1)}),[],!1,null,"b778f520",null).exports,Se=o(75925),Ne=o.n(Se),Ue=o(64192),Me=o.n(Ue),Le=(0,Vt.j)("core","versionHash",""),Fe={name:"UserMenuEntry",components:{NcLoadingIcon:Me()},props:{id:{type:String,required:!0},name:{type:String,required:!0},href:{type:String,required:!0},active:{type:Boolean,required:!0},icon:{type:String,required:!0}},data:function(){return{loading:!1}},computed:{cachedIcon:function(){return"".concat(this.icon,"?v=").concat(Le)}},methods:{handleClick:function(){this.loading=!0}}},Re=o(88951),Qe={};Qe.styleTagTransform=we(),Qe.setAttributes=ge(),Qe.insert=he().bind(null,"head"),Qe.domAPI=pe(),Qe.insertStyleElement=Ce(),de()(Re.Z,Qe),Re.Z&&Re.Z.locals&&Re.Z.locals;var Ge=(0,ke.Z)(Fe,(function(){var t=this,e=t._self._c;return e("li",{staticClass:"menu-entry",attrs:{id:t.id}},[t.href?e("a",{class:{active:t.active},attrs:{href:t.href},on:{click:function(e){return e.ctrlKey||e.shiftKey||e.altKey||e.metaKey?null:t.handleClick.apply(null,arguments)}}},[t.loading?e("NcLoadingIcon",{staticClass:"menu-entry__loading-icon",attrs:{size:18}}):e("img",{attrs:{src:t.cachedIcon,alt:""}}),t._v("\n\t\t"+t._s(t.name)+"\n\t")],1):e("button",[e("img",{attrs:{src:t.cachedIcon,alt:""}}),t._v("\n\t\t"+t._s(t.name)+"\n\t")])])}),[],!1,null,"6e59d13c",null),He=Ge.exports,Ke=(0,Vt.j)("core","settingsNavEntries",[]),Ze={name:"UserMenu",components:{NcAvatar:Ne(),NcHeaderMenu:le(),UserMenuEntry:He},data:function(){var t;return{settingsNavEntries:Ke,userId:null===(t=(0,Xt.ts)())||void 0===t?void 0:t.uid}},mounted:function(){(0,u.j8)("core:user-menu:mounted")}},Ye=o(71445),qe={};qe.styleTagTransform=we(),qe.setAttributes=ge(),qe.insert=he().bind(null,"head"),qe.domAPI=pe(),qe.insertStyleElement=Ce(),de()(Ye.Z,qe),Ye.Z&&Ye.Z.locals&&Ye.Z.locals;var We=(0,ke.Z)(Ze,(function(){var t=this,e=t._self._c;return e("NcHeaderMenu",{staticClass:"user-menu",attrs:{id:"user-menu","aria-label":t.t("core","Open settings menu")},scopedSlots:t._u([{key:"trigger",fn:function(){return[e("NcAvatar",{staticClass:"user-menu__avatar",attrs:{"disable-menu":!0,"disable-tooltip":!0,user:t.userId}})]},proxy:!0}])},[t._v(" "),e("nav",{staticClass:"user-menu__nav",attrs:{"aria-label":t.t("core","Settings menu")}},[e("ul",t._l(t.settingsNavEntries,(function(n){return e("UserMenuEntry",t._b({key:n.id},"UserMenuEntry",n,!1))})),1)])])}),[],!1,null,"6a818bbc",null).exports,Je={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"},Ve=Jt.getLocale();Object.prototype.hasOwnProperty.call(Je,Ve)&&(Ve=Je[Ve]),Nt().locale(Ve);var Xe,$e=function(){var t;if(c()(window).on("unload.main",(function(){Jt._unloadCalled=!0})),c()(window).on("beforeunload.main",(function(){setTimeout((function(){Jt._userIsNavigatingAway=!0,setTimeout((function(){Jt._unloadCalled||(Jt._userIsNavigatingAway=!1)}),1e4)}),1)})),c()(document).on("ajaxError.main",(function(t,e,n){n&&n.allowAuthErrors||Jt._processAjaxError(e)})),function(){if(function(){try{ne=(0,Vt.j)("core","config")}catch(t){ne=Jt.config}}(),function(){if(ne.auto_logout&&(0,Xt.ts)()){var t=Date.now();window.addEventListener("mousemove",(function(e){t=Date.now(),localStorage.setItem("lastActive",t)})),window.addEventListener("touchstart",(function(e){t=Date.now(),localStorage.setItem("lastActive",t)})),window.addEventListener("storage",(function(e){"lastActive"===e.key&&(t=e.newValue)})),setInterval((function(){var e=Date.now()-1e3*ne.session_lifetime;if(t<e){$t.info("Inactivity timout reached, logging out");var n=(0,d.generateUrl)("/logout")+"?requesttoken="+encodeURIComponent(bt());window.location=n}}),1e3)}}(),void 0===ne.session_keepalive||ne.session_keepalive){var t=ae();window.addEventListener("online",ee(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return $t.info("browser is online again, resuming heartbeat"),t=ae(),e.prev=2,e.next=5,oe();case 5:$t.info("session token successfully updated after resuming network"),(0,u.j8)("networkOnline",{success:!0}),e.next=13;break;case 9:e.prev=9,e.t0=e.catch(2),$t.error("could not update session token after resuming network",e.t0),(0,u.j8)("networkOnline",{success:!1});case 13:case"end":return e.stop()}}),e,null,[[2,9]])})))),window.addEventListener("offline",(function(){$t.info("browser is offline, stopping heartbeat"),(0,u.j8)("networkOffline",{}),clearInterval(t),$t.info("session heartbeat polling stopped")}))}else $t.info("session heartbeat disabled")}(),Jt.registerMenu(c()("#expand"),c()("#expanddiv"),!1,!0),c()(document).on("mouseup.closemenus",(function(t){var e=c()(t.target);if(e.closest(".menu").length||e.closest(".menutoggle").length)return!1;Jt.hideMenus()})),function(){re.ZP.mixin({methods:{t:jt.Iu,n:jt.uN}});var t=document.getElementById("header-left__appmenu");if(t){var e=new(re.ZP.extend(ze))({}).$mount(t);Object.assign(OC,{setNavigationCounter:function(t,n){e.setNavigationCounter(t,n)}})}}(),(t=document.getElementById("user-menu"))&&new re.ZP({el:t,render:function(t){return t(We)}}),function(){var t=document.getElementById("contactsmenu");t&&new re.ZP({el:t,render:function(t){return t(Pe)}})}(),c()("#app-navigation").length&&!c()("html").hasClass("lte9")&&!c()("#app-content").hasClass("no-snapper")){var e=new Snap({element:document.getElementById("app-content"),disable:"right",maxPosition:300,minDragDistance:100});c()("#app-content").prepend('<div id="app-navigation-toggle" class="icon-menu" style="display:none" tabindex="0"></div>');var n=!1;e.on("animating",(function(){n=!0})),e.on("animated",(function(){n=!1})),e.on("start",(function(){n=!0})),e.on("end",(function(){n=!1}));var i=e.open,o=e.close,a=function(){n||"closed"!==e.state().state||i("left")},r=function(){n||"closed"===e.state().state||o()};window.TESTING||(e.open=function(){h.ZP.defer(a)},e.close=function(){h.ZP.defer(r)}),c()("#app-navigation-toggle").click((function(t){"left"!==e.state().state&&e.open()})),c()("#app-navigation-toggle").keypress((function(t){"left"===e.state().state?e.close():e.open()})),c()("#app-navigation").delegate("a, :button","click",(function(t){var n=c()(t.target);n.is(".app-navigation-noclose")||n.closest(".app-navigation-noclose").length||n.is(".app-navigation-entry-utils-menu-button")||n.closest(".app-navigation-entry-utils-menu-button").length||n.is(".add-new")||n.closest(".add-new").length||n.is("#app-settings")||n.closest("#app-settings").length||e.close()}));var s=!1,l=!0,A=!1;Jt.allowNavigationBarSlideGesture=function(){l=!0,A&&(e.enable(),s=!0,A=!1)},Jt.disallowNavigationBarSlideGesture=function(){l=!1,s&&(e.disable(!0),s=!1,A=!0)};var p=function(){c()(window).width()>1024?(e.close(),e.disable(),s=!1,A=!1):l?(e.enable(),s=!0,A=!1):A=!0};c()(window).resize(h.ZP.debounce(p,250)),p()}setInterval((function(){c()(".live-relative-timestamp").each((function(){var t=parseInt(c()(this).attr("data-timestamp"),10);c()(this).text(Nt()(t).fromNow())}))}),3e4),Ut.init()},tn=(o(49226),o(41704),o(78312),o(22634),o(3682)),en=o(25108);c().prototype.tooltip=(Xe=c().prototype.tooltip,function(t){try{return Xe.call(this,t)}catch(e){if(e instanceof TypeError&&"destroy"===t)return void 0===window.TESTING&&en.error("Deprecated call $.tooltip('destroy') has been deprecated and should be removed"),Xe.call(this,"dispose");if(e instanceof TypeError&&"fixTitle"===t)return void 0===window.TESTING&&en.error("Deprecated call $.tooltip('fixTitle') has been deprecated and should be removed"),Xe.call(this,"_fixTitle")}});var nn=o(42152),on=o.n(nn),an=o(99560),rn=o.n(an),sn=(o(18553),o(34140),o(75693),o(99205),o(38554),/(\s|^)(https?:\/\/)((?:[-A-Z0-9+_]+\.)+[-A-Z]+(?:\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*)(\s|$)/gi);function ln(t){return this.formatLinksRich(t)}function cn(t){return this.formatLinksPlain(t)}function un(t){return t.replace(sn,(function(t,e,n,i,o){var a=i;return n?"http://"===n&&(a=n+i):n="https://",e+'<a class="external" target="_blank" rel="noopener noreferrer" href="'+n+i+'">'+a+"</a>"+o}))}function dn(t){var e=c()("<div></div>").html(t);return e.find("a").each((function(){var t=c()(this);t.html(t.attr("href"))})),e.html()}var An=o(25108);function pn(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(An.debug("querying Whats New data was successful: "+n),An.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(){fn(e.ocs.data.version,o)},r.appendChild(l),a.appendChild(r),u.appendChild(a),e.ocs.data.whatsNew.regular){var A=e.ocs.data.whatsNew.regular[d];a=document.createElement("li"),(r=document.createElement("span")).className="menuitem",(l=document.createElement("span")).className="icon-checkmark",r.appendChild(l),(s=document.createElement("p")).innerHTML=h.ZP.escape(A),r.appendChild(s),a.appendChild(r),u.appendChild(a)}h.ZP.isUndefined(e.ocs.data.changelogURL)||(a=document.createElement("li"),(r=document.createElement("a")).href=e.ocs.data.changelogURL,r.rel="noreferrer noopener",r.target="_blank",(l=document.createElement("span")).className="icon-link",r.appendChild(l),(s=document.createElement("span")).innerText=t("core","View changelog"),r.appendChild(s),a.appendChild(r),u.appendChild(a)),c.appendChild(u),document.body.appendChild(c)}}(e,i,o,n)},error:e.error||hn})}function fn(t,e){e=e||{},c().ajax({type:"POST",url:e.url||(0,d.generateOcsUrl)("core/whatsnew"),data:{version:encodeURIComponent(t)},success:e.success||mn,error:e.error||gn}),c()(".whatsNewPopover").remove()}function hn(t,e,n){An.debug("querying Whats New Data resulted in an error: "+e+n),An.debug(t)}function mn(t){}function gn(t){An.debug("dismissing Whats New data resulted in an error: "+t)}var vn,Cn,bn,wn={disableKeyboardShortcuts:function(){return(0,Vt.j)("theming","shortcutsDisabled",!1)},setPageHeading:function(t){var e=document.getElementById("page-heading-level-1");e&&(e.textContent=t)}},yn=o(95573),xn=o.n(yn),kn={},Pn={},En={},Bn={loadScript:function(t,e){var n=t+e;return Object.prototype.hasOwnProperty.call(Pn,n)?Promise.resolve():(Pn[n]=!0,new Promise((function(n,i){var o=OC.filePath(t,"js",e),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(t,e){var n=t+e;return Object.prototype.hasOwnProperty.call(En,n)?Promise.resolve():(En[n]=!0,new Promise((function(n,i){var o=OC.filePath(t,"css",e),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)})))}},On={success:function(t,e){return(0,m.s$)(t,e)},warning:function(t,e){return(0,m.K2)(t,e)},error:function(t,e){return(0,m.x2)(t,e)},info:function(t,e){return(0,m.JQ)(t,e)},message:function(t,e){return(0,m.PV)(t,e)}},Tn={Accessibility:wn,AppConfig:a,Collaboration:{registerType:function(t,e){kn[t]=e},trigger:function(t){return kn[t].action()},getTypes:function(){return Object.keys(kn)},getIcon:function(t){return kn[t].typeIconClass||""},getLabel:function(t){return xn()(kn[t].typeString||t)},getLink:function(t,e){return void 0!==kn[t]?kn[t].link(e):""}},Comments:r,InitialState:{loadState:Vt.j},Loader:Bn,Toast:On,WhatsNew:s},Dn=o(25108),In=function(){void 0===window.TESTING&&Dn.warn.apply(Dn,arguments)},jn=function(t,e,n){(Array.isArray(t)?t:[t]).forEach((function(t){void 0!==window[t]&&delete window[t],Object.defineProperty(window,t,{get:function(){return In(n?"".concat(t," is deprecated: ").concat(n):"".concat(t," is deprecated")),e()}})}))};window._=h.ZP,jn(["$","jQuery"],(function(){return c()}),"The global jQuery is deprecated. It will be removed in a later versions without another warning. Please ship your own."),jn("autosize",(function(){return tn.Z}),"please ship your own, this will be removed in Nextcloud 20"),jn("Backbone",(function(){return z()}),"please ship your own, this will be removed in Nextcloud 20"),jn(["Clipboard","ClipboardJS"],(function(){return on()}),"please ship your own, this will be removed in Nextcloud 20"),window.dav=S.dav,jn("Handlebars",(function(){return It()}),"please ship your own, this will be removed in Nextcloud 20"),jn("md5",(function(){return rn()}),"please ship your own, this will be removed in Nextcloud 20"),jn("moment",(function(){return Nt()}),"please ship your own, this will be removed in Nextcloud 20"),window.OC=Jt,jn("initCore",(function(){return $e}),"this is an internal function"),jn("oc_appswebroots",(function(){return Jt.appswebroots}),"use OC.appswebroots instead, this will be removed in Nextcloud 20"),jn("oc_config",(function(){return Jt.config}),"use OC.config instead, this will be removed in Nextcloud 20"),jn("oc_current_user",(function(){return Jt.getCurrentUser().uid}),"use OC.getCurrentUser().uid instead, this will be removed in Nextcloud 20"),jn("oc_debug",(function(){return Jt.debug}),"use OC.debug instead, this will be removed in Nextcloud 20"),jn("oc_defaults",(function(){return Jt.theme}),"use OC.theme instead, this will be removed in Nextcloud 20"),jn("oc_isadmin",Jt.isUserAdmin,"use OC.isUserAdmin() instead, this will be removed in Nextcloud 20"),jn("oc_requesttoken",(function(){return bt()}),"use OC.requestToken instead, this will be removed in Nextcloud 20"),jn("oc_webroot",(function(){return Jt.webroot}),"use OC.getRootPath() instead, this will be removed in Nextcloud 20"),jn("OCDialogs",(function(){return Jt.dialogs}),"use OC.dialogs instead, this will be removed in Nextcloud 20"),window.OCP=Tn,window.OCA=st,c().fn.select2=(vn=c().fn.select2,"select2",19,Cn=vn,bn=function(){return In("The ".concat("select2"," library is deprecated! It will be removed in nextcloud ").concat(19,".")),Cn.apply(this,arguments)},Object.assign(bn,Cn),bn),window.t=h.ZP.bind(Jt.L10N.translate,Jt.L10N),window.n=h.ZP.bind(Jt.L10N.translatePlural,Jt.L10N),c().fn.avatar=function(t,e,n,i,o,a){var r=function(t){t.imageplaceholder("?"),t.css("background-color","#b9b9b9")};if(void 0!==t&&(t=String(t)),void 0!==a&&(a=String(a)),void 0===e&&(e=this.height()>0?this.height():this.data("size")>0?this.data("size"):64),this.height(e),this.width(e),void 0===t){if(void 0===this.data("user"))return void r(this);t=this.data("user")}t=String(t).replace(/\//g,"");var s,l=this;s=t===Jt.getCurrentUser().uid?Jt.generateUrl("/avatar/{user}/{size}?v={version}",{user:t,size:Math.ceil(e*window.devicePixelRatio),version:oc_userconfig.avatar.version}):Jt.generateUrl("/avatar/{user}/{size}",{user:t,size:Math.ceil(e*window.devicePixelRatio)});var c=new Image;c.onload=function(){l.clearimageplaceholder(),l.append(c),"function"==typeof o&&o()},c.onerror=function(){l.clearimageplaceholder(),void 0!==a?l.imageplaceholder(t,a):r(l),"function"==typeof o&&o()},e<32?l.addClass("icon-loading-small"):l.addClass("icon-loading"),c.width=e,c.height=e,c.src=s,c.alt=""};var _n=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.on("click keydown",(function(i){if(lt(i)){if(!a.hasClass("hidden"))return a.addClass("hidden"),void a.hide();a.removeClass("hidden"),a.show(),a.hasClass("loaded")||(a.addClass("loaded"),c().ajax(Jt.generateUrl("/contactsmenu/findOne"),{method:"POST",data:{shareType:n,shareWith:e}}).then((function(e){a.find("ul").find("li").addClass("hidden"),(e.topAction?[e.topAction].concat(e.actions):[{hyperlink:"#",title:t("core","No action available")}]).forEach((function(t){a.find("ul").append(_n(t))})),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(_n({hyperlink:"#",title:n})),o.trigger("loaderror",e)})))}})),c()(document).click((function(t){var e=a.has(t.target).length>0,n=o.has(t.target).length>0;o.each((function(){c()(this).is(t.target)&&(n=!0)})),e||n||(a.addClass("hidden"),a.hide())}))}},c().fn.exists=function(){return this.length>0},c().fn.filterAttr=function(t,e){return this.filter((function(){return c()(this).attr(t)===e}))};var zn=o(15303);c().widget("oc.ocdialog",{options:{width:"auto",height:"auto",closeButton:!0,closeOnEscape:!0,closeCallback:null,modal:!1},_create:function(){var t=this;this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,height:this.element[0].style.height},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this.$dialog=c()('<div class="oc-dialog"></div>').attr({tabIndex:-1,role:"dialog"}).insertBefore(this.element),this.$dialog.append(this.element.detach()),this.element.removeAttr("title").addClass("oc-dialog-content").appendTo(this.$dialog),1===t.element.find("input").length&&t.element.find("input").on("keydown",(function(e){if(lt(e)&&t.$buttonrow){var n=t.$buttonrow.find("button.primary");n&&!n.prop("disabled")&&n.click()}})),this.$dialog.css({display:"inline-block",position:"fixed"}),this.enterCallback=null,c()(document).on("keydown keyup",(function(e){if(e.target===t.$dialog.get(0)||0!==t.$dialog.find(c()(e.target)).length)return 27===e.keyCode&&"keydown"===e.type&&t.options.closeOnEscape?(e.stopImmediatePropagation(),t.close(),!1):13===e.keyCode?(e.stopImmediatePropagation(),null!==t.enterCallback?(t.enterCallback(),e.preventDefault(),!1):"keyup"===e.type&&(e.preventDefault(),!1)):void 0})),this._setOptions(this.options),this._createOverlay(),this._useFocusTrap()},_init:function(){this._trigger("open")},_setOption:function(e,n){var i=this;switch(e){case"title":if(this.$title)this.$title.text(n);else{var o=c()('<h2 class="oc-dialog-title">'+n+"</h2>");this.$title=o.prependTo(this.$dialog)}this._setSizes();break;case"buttons":if(this.$buttonrow)this.$buttonrow.empty();else{var a=c()('<div class="oc-dialog-buttonrow"></div>');this.$buttonrow=a.appendTo(this.$dialog)}1===n.length?this.$buttonrow.addClass("onebutton"):2===n.length?this.$buttonrow.addClass("twobuttons"):3===n.length&&this.$buttonrow.addClass("threebuttons"),c().each(n,(function(t,e){var n=c()("<button>").text(e.text);e.classes&&n.addClass(e.classes),e.defaultButton&&(n.addClass("primary"),i.$defaultButton=n),i.$buttonrow.append(n),n.on("click keydown",(function(t){lt(t)&&e.click.apply(i.element[0],arguments)}))})),this.$buttonrow.find("button").on("focus",(function(t){i.$buttonrow.find("button").removeClass("primary"),c()(this).addClass("primary")})),this._setSizes();break;case"style":void 0!==n.buttons&&this.$buttonrow.addClass(n.buttons);break;case"closeButton":if(n){var r=c()('<button class="oc-dialog-close"></button>');r.attr("aria-label",t("core",'Close "{dialogTitle}" dialog',{dialogTitle:this.$title||this.options.title})),this.$dialog.prepend(r),r.on("click keydown",(function(t){lt(t)&&(i.options.closeCallback&&i.options.closeCallback(),i.close())}))}else this.$dialog.find(".oc-dialog-close").remove();break;case"width":this.$dialog.css("width",n);break;case"height":this.$dialog.css("height",n);break;case"close":this.closeCB=n}c().Widget.prototype._setOption.apply(this,arguments)},_setOptions:function(t){c().Widget.prototype._setOptions.apply(this,arguments)},_setSizes:function(){var t=0;this.$title&&(t+=this.$title.outerHeight(!0)),this.$buttonrow&&(t+=this.$buttonrow.outerHeight(!0)),this.element.css({height:"calc(100% - "+t+"px)"})},_createOverlay:function(){if(this.options.modal){var t=this,e=c()("#content");0===e.length&&(e=c()(".content")),this.overlay=c()("<div>").addClass("oc-dialog-dim").appendTo(e),this.overlay.on("click keydown keyup",(function(e){e.target!==t.$dialog.get(0)&&0===t.$dialog.find(c()(e.target)).length&&(e.preventDefault(),e.stopPropagation())}))}},_destroyOverlay:function(){this.options.modal&&this.overlay&&(this.overlay.off("click keydown keyup"),this.overlay.remove(),this.overlay=null)},_useFocusTrap:function(){Object.assign(window,{_nc_focus_trap:window._nc_focus_trap||[]});var t=this.$dialog[0];this.focusTrap=(0,zn.createFocusTrap)(t,{allowOutsideClick:!0,trapStack:window._nc_focus_trap,fallbackFocus:t}),this.focusTrap.activate()},_clearFocusTrap:function(){var t;null===(t=this.focusTrap)||void 0===t||t.deactivate(),this.focusTrap=null},widget:function(){return this.$dialog},setEnterCallback:function(t){this.enterCallback=t},unsetEnterCallback:function(){this.enterCallback=null},close:function(){this._clearFocusTrap(),this._destroyOverlay();var t=this;setTimeout((function(){t._trigger("close",t)}),200),t.$dialog.remove(),this.destroy()},destroy:function(){this.$title&&this.$title.remove(),this.$buttonrow&&this.$buttonrow.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),this.element.removeClass("oc-dialog-content").css(this.originalCss).detach().insertBefore(this.$dialog),this.$dialog.remove()}});var Sn=o(25108),Nn={init:function(t,e,n){if(this.vars=t,this.options=c().extend({},this.options,e),this.elem=n,"function"==typeof this.options.escapeFunction)for(var 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(t){var e="text/template"===this.elem.attr("type")?this.elem.html():this.elem.get(0).outerHTML;try{return e.replace(/{([^{}]*)}/g,(function(e,n){var i=t[n];return"string"==typeof i||"number"==typeof i?i:e}))}catch(t){Sn.error(t,"data:",e)}},options:{escapeFunction:xn()}};c().fn.octemplate=function(t,e){if(t=t||{},this.length)return Object.create(Nn).init(t,e,this)};var Un=o(25108),Mn=function(t){var e=t.toLowerCase();function n(t,e,n){this.r=t,this.g=e,this.b=n}function i(t,e,i){var o=[];o.push(e);for(var a=function(t,e){var n=new Array(3);return n[0]=(e[1].r-e[0].r)/t,n[1]=(e[1].g-e[0].g)/t,n[2]=(e[1].b-e[0].b)/t,n}(t,[e,i]),r=1;r<t;r++){var s=parseInt(e.r+a[0]*r),l=parseInt(e.g+a[1]*r),c=parseInt(e.b+a[2]*r);o.push(new n(s,l,c))}return o}null===e.match(/^([0-9a-f]{4}-?){8}$/)&&(e=rn()(e)),e=e.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(t,e){for(var n=0,i=[],o=0;o<t.length;o++)i.push(parseInt(t.charAt(o),16)%16);for(var a in i)n+=i[a];return parseInt(parseInt(n)%18)}(e)]};String.prototype.toRgb=function(){return Un.warn("String.prototype.toRgb is deprecated! It will be removed in Nextcloud 22."),Mn(this)},c().fn.imageplaceholder=function(t,e,n){e=e||t;var i=Mn(t);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!==t&&t.length){var a=e.replace(/\s+/g," ").trim().split(" ",2).map((function(t){return t[0].toUpperCase()})).join("");this.html(a)}},c().fn.clearimageplaceholder=function(){this.css("background-color",""),this.css("color",""),this.css("font-weight",""),this.css("text-align",""),this.css("line-height",""),this.css("font-size",""),this.html(""),this.removeClass("icon-loading"),this.removeClass("icon-loading-small")},c()(document).on("ajaxSend",(function(t,e,n){!1===n.crossDomain&&(e.setRequestHeader("requesttoken",bt()),e.setRequestHeader("OCS-APIREQUEST","true"))})),c().fn.selectRange=function(t,e){return this.each((function(){if(this.setSelectionRange)this.focus(),this.setSelectionRange(t,e);else if(this.createTextRange){var n=this.createTextRange();n.collapse(!0),n.moveEnd("character",e),n.moveStart("character",t),n.select()}}))},c().fn.extend({showPassword:function(t){var e={fn:null,args:{}};e.fn=t;var n=function(t,e){e.val(t.val())},i=function(t,e,i){t.is(":checked")?(n(e,i),i.show(),e.hide()):(n(i,e),i.hide(),e.show())};return this.each((function(){var t=c()(this),o=c()(t.data("typetoggle")),a=function(t){var e=c()(t),n=c()("<input />");return n.attr({type:"text",class:e.attr("class"),style:e.attr("style"),size:e.attr("size"),name:e.attr("name")+"-clone",tabindex:e.attr("tabindex"),autocomplete:"off"}),void 0!==e.attr("placeholder")&&n.attr("placeholder",e.attr("placeholder")),n}(t);a.insertAfter(t),e.fn&&(e.args.input=t,e.args.checkbox=o,e.args.clone=a),o.bind("click",(function(){i(o,t,a)})),t.bind("keyup",(function(){n(t,a)})),a.bind("keyup",(function(){n(a,t),t.trigger("keyup")})),a.bind("blur",(function(){t.trigger("focusout")})),i(o,t,a),a.closest("form").submit((function(t){a.prop("type","password")})),e.fn&&e.fn(e.args)}))}}),c().ui.autocomplete.prototype._resizeMenu=function(){this.menu.element.outerWidth(this.element.outerWidth())};var Ln=o(12448),Fn={};Fn.styleTagTransform=we(),Fn.setAttributes=ge(),Fn.insert=he().bind(null,"head"),Fn.domAPI=pe(),Fn.insertStyleElement=Ce(),de()(Ln.Z,Fn),Ln.Z&&Ln.Z.locals&&Ln.Z.locals;var Rn=o(72417),Qn={};Qn.styleTagTransform=we(),Qn.setAttributes=ge(),Qn.insert=he().bind(null,"head"),Qn.domAPI=pe(),Qn.insertStyleElement=Ce(),de()(Rn.Z,Qn),Rn.Z&&Rn.Z.locals&&Rn.Z.locals,c().ajaxSetup({contents:{script:!1}}),c().globalEval=function(){},window.addEventListener("DOMContentLoaded",(function(){var t;$e(),0===(t=c()("[data-apps-slide-toggle]")).length&&c()("#app-navigation").addClass("without-app-settings"),c()(document).click((function(e){b&&(t=c()("[data-apps-slide-toggle]")),t.each((function(t,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()(e.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 t=c()(i+" [autofocus]");1===t.length&&t.focus()}();else{var r=c()(e.target).closest(i);o.is(":visible")&&r[0]!==o[0]&&a()}}))})),window.history.pushState?window.onpopstate=_.bind(Jt.Util.History._onPopState,Jt.Util.History):c()(window).on("hashchange",_.bind(Jt.Util.History._onPopState,Jt.Util.History))}))},12448:function(t,e,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),A=new URL(n(12081),n.b),p=new URL(n(47868),n.b),f=r()(o()),h=l()(c),m=l()(u),g=l()(d),v=l()(A),C=l()(p);f.push([t.id,".ui-widget-content{border:1px solid var(--color-border);background:var(--color-main-background) none;color:var(--color-main-text)}.ui-widget-content a{color:var(--color-main-text)}.ui-widget-header{border:none;color:var(--color-main-text);background-image:none}.ui-widget-header a{color:var(--color-main-text)}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid var(--color-border);background:var(--color-main-background) none;font-weight:bold;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #ddd;background:var(--color-main-background) none;font-weight:bold;color:var(--color-main-text)}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:var(--color-main-text)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid var(--color-primary);background:var(--color-main-background) none;font-weight:bold;color:var(--color-main-text)}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:var(--color-main-text)}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid var(--color-main-background);background:var(--color-main-background) none;color:var(--color-text-light);font-weight:600}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:var(--color-text-lighter)}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:var(--color-error);background:var(--color-error) none;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-state-default .ui-icon{background-image:url("+h+")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("+h+")}.ui-state-active .ui-icon{background-image:url("+h+")}.ui-state-highlight .ui-icon{background-image:url("+m+")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("+g+")}.ui-icon.ui-icon-none{display:none}.ui-widget-overlay{background:#666 url("+v+") 50% 50% repeat;opacity:.5}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url("+C+") 50% 50% repeat-x;opacity:.2;border-radius:5px}.ui-tabs{border:none}.ui-tabs .ui-tabs-nav.ui-corner-all{border-bottom-left-radius:0;border-bottom-right-radius:0}.ui-tabs .ui-tabs-nav{background:none;margin-bottom:15px}.ui-tabs .ui-tabs-nav .ui-state-default{border:none;border-bottom:1px solid rgba(0,0,0,0);font-weight:normal;margin:0 !important;padding:0 !important}.ui-tabs .ui-tabs-nav .ui-state-hover,.ui-tabs .ui-tabs-nav .ui-state-active{border:none;border-bottom:1px solid var(--color-main-text);color:var(--color-main-text)}.ui-tabs .ui-tabs-nav .ui-state-hover a,.ui-tabs .ui-tabs-nav .ui-state-hover a:link,.ui-tabs .ui-tabs-nav .ui-state-hover a:hover,.ui-tabs .ui-tabs-nav .ui-state-hover a:visited,.ui-tabs .ui-tabs-nav .ui-state-active a,.ui-tabs .ui-tabs-nav .ui-state-active a:link,.ui-tabs .ui-tabs-nav .ui-state-active a:hover,.ui-tabs .ui-tabs-nav .ui-state-active a:visited{color:var(--color-main-text)}.ui-tabs .ui-tabs-nav .ui-state-active{font-weight:bold}.ui-autocomplete.ui-menu{padding:0}.ui-autocomplete.ui-menu.item-count-1,.ui-autocomplete.ui-menu.item-count-2{overflow-y:hidden}.ui-autocomplete.ui-menu .ui-menu-item a{color:var(--color-text-lighter);display:block;padding:4px 4px 4px 14px}.ui-autocomplete.ui-menu .ui-menu-item a.ui-state-focus,.ui-autocomplete.ui-menu .ui-menu-item a.ui-state-active{box-shadow:inset 4px 0 var(--color-primary-element);color:var(--color-main-text)}.ui-autocomplete.ui-widget-content{background:var(--color-main-background);border-top:none}.ui-autocomplete.ui-corner-all{border-radius:0;border-bottom-left-radius:var(--border-radius);border-bottom-right-radius:var(--border-radius)}.ui-autocomplete .ui-state-hover,.ui-autocomplete .ui-widget-content .ui-state-hover,.ui-autocomplete .ui-widget-header .ui-state-hover,.ui-autocomplete .ui-state-focus,.ui-autocomplete .ui-widget-content .ui-state-focus,.ui-autocomplete .ui-widget-header .ui-state-focus{border:1px solid rgba(0,0,0,0);background:inherit;color:var(--color-primary-element)}.ui-autocomplete .ui-menu-item a{border-radius:0 !important}.ui-button.primary{background-color:var(--color-primary);color:var(--color-primary-text);border:1px solid var(--color-primary-text)}.ui-button:hover{font-weight:bold !important}.ui-draggable-handle,.ui-selectable{touch-action:pan-y}","",{version:3,sources:["webpack://./core/src/jquery/css/jquery-ui-fixes.scss"],names:[],mappings:"AAEA,mBACC,oCAAA,CACA,4CAAA,CACA,4BAAA,CAED,qBACC,4BAAA,CAED,kBACC,WAAA,CACA,4BAAA,CACA,qBAAA,CAED,oBACC,4BAAA,CAKD,2FAGC,oCAAA,CACA,4CAAA,CACA,gBAAA,CACA,UAAA,CAED,yEAGC,UAAA,CAED,0KAMC,qBAAA,CACA,4CAAA,CACA,gBAAA,CACA,4BAAA,CAED,2FAIC,4BAAA,CAED,wFAGC,qCAAA,CACA,4CAAA,CACA,gBAAA,CACA,4BAAA,CAED,sEAGC,4BAAA,CAKD,iGAGC,6CAAA,CACA,4CAAA,CACA,6BAAA,CACA,eAAA,CAED,uGAGC,+BAAA,CAED,qFAGC,yBAAA,CACA,kCAAA,CACA,UAAA,CAED,2FAGC,UAAA,CAED,oGAGC,UAAA,CAKD,2BACC,wDAAA,CAED,kDAEC,wDAAA,CAED,0BACC,wDAAA,CAED,6BACC,wDAAA,CAED,uDAEC,wDAAA,CAED,sBACC,YAAA,CAMD,mBACC,sEAAA,CACA,UAAA,CAED,kBACC,oBAAA,CACA,WAAA,CACA,wEAAA,CACA,UAAA,CACA,iBAAA,CAID,SACC,WAAA,CAEA,oCACC,2BAAA,CACA,4BAAA,CAGD,sBACC,eAAA,CACA,kBAAA,CAEA,wCACC,WAAA,CACA,qCAAA,CACA,kBAAA,CACA,mBAAA,CACA,oBAAA,CAGD,6EAEC,WAAA,CACA,8CAAA,CACA,4BAAA,CACA,0WACC,4BAAA,CAGF,uCACC,gBAAA,CAOF,yBACC,SAAA,CAIA,4EAEC,iBAAA,CAGD,yCACC,+BAAA,CACA,aAAA,CACA,wBAAA,CAEA,iHACC,mDAAA,CACA,4BAAA,CAKH,mCACC,uCAAA,CACA,eAAA,CAGD,+BACC,eAAA,CACA,8CAAA,CACA,+CAAA,CAGD,gRAKC,8BAAA,CACA,kBAAA,CACA,kCAAA,CAIA,iCACC,0BAAA,CAKH,mBACC,qCAAA,CACA,+BAAA,CACA,0CAAA,CAID,iBACI,2BAAA,CAKJ,oCAEC,kBAAA",sourcesContent:["/* Component containers\n----------------------------------*/\n.ui-widget-content {\n\tborder: 1px solid var(--color-border);\n\tbackground: var(--color-main-background) none;\n\tcolor: var(--color-main-text);\n}\n.ui-widget-content a {\n\tcolor: var(--color-main-text);\n}\n.ui-widget-header {\n\tborder: none;\n\tcolor: var(--color-main-text);\n\tbackground-image: none;\n}\n.ui-widget-header a {\n\tcolor: var(--color-main-text);\n}\n\n/* Interaction states\n----------------------------------*/\n.ui-state-default,\n.ui-widget-content .ui-state-default,\n.ui-widget-header .ui-state-default {\n\tborder: 1px solid var(--color-border);\n\tbackground: var(--color-main-background) none;\n\tfont-weight: bold;\n\tcolor: #555;\n}\n.ui-state-default a,\n.ui-state-default a:link,\n.ui-state-default a:visited {\n\tcolor: #555;\n}\n.ui-state-hover,\n.ui-widget-content .ui-state-hover,\n.ui-widget-header .ui-state-hover,\n.ui-state-focus,\n.ui-widget-content .ui-state-focus,\n.ui-widget-header .ui-state-focus {\n\tborder: 1px solid #ddd;\n\tbackground: var(--color-main-background) none;\n\tfont-weight: bold;\n\tcolor: var(--color-main-text);\n}\n.ui-state-hover a,\n.ui-state-hover a:hover,\n.ui-state-hover a:link,\n.ui-state-hover a:visited {\n\tcolor: var(--color-main-text);\n}\n.ui-state-active,\n.ui-widget-content .ui-state-active,\n.ui-widget-header .ui-state-active {\n\tborder: 1px solid var(--color-primary);\n\tbackground: var(--color-main-background) none;\n\tfont-weight: bold;\n\tcolor: var(--color-main-text);\n}\n.ui-state-active a,\n.ui-state-active a:link,\n.ui-state-active a:visited {\n\tcolor: var(--color-main-text);\n}\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-highlight,\n.ui-widget-content .ui-state-highlight,\n.ui-widget-header .ui-state-highlight {\n\tborder: 1px solid var(--color-main-background);\n\tbackground: var(--color-main-background) none;\n\tcolor: var(--color-text-light);\n\tfont-weight: 600;\n}\n.ui-state-highlight a,\n.ui-widget-content .ui-state-highlight a,\n.ui-widget-header .ui-state-highlight a {\n\tcolor: var(--color-text-lighter);\n}\n.ui-state-error,\n.ui-widget-content .ui-state-error,\n.ui-widget-header .ui-state-error {\n\tborder: var(--color-error);\n\tbackground: var(--color-error) none;\n\tcolor: #ffffff;\n}\n.ui-state-error a,\n.ui-widget-content .ui-state-error a,\n.ui-widget-header .ui-state-error a {\n\tcolor: #ffffff;\n}\n.ui-state-error-text,\n.ui-widget-content .ui-state-error-text,\n.ui-widget-header .ui-state-error-text {\n\tcolor: #ffffff;\n}\n\n/* Icons\n----------------------------------*/\n.ui-state-default .ui-icon {\n\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\n}\n.ui-state-hover .ui-icon,\n.ui-state-focus .ui-icon {\n\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\n}\n.ui-state-active .ui-icon {\n\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\n}\n.ui-state-highlight .ui-icon {\n\tbackground-image: url('images/ui-icons_ffffff_256x240.png');\n}\n.ui-state-error .ui-icon,\n.ui-state-error-text .ui-icon {\n\tbackground-image: url('images/ui-icons_ffd27a_256x240.png');\n}\n.ui-icon.ui-icon-none {\n\tdisplay: none;\n}\n\n/* Misc visuals\n----------------------------------*/\n/* Overlays */\n.ui-widget-overlay {\n\tbackground: #666666 url('images/ui-bg_diagonals-thick_20_666666_40x40.png') 50% 50% repeat;\n\topacity: .5;\n}\n.ui-widget-shadow {\n\tmargin: -5px 0 0 -5px;\n\tpadding: 5px;\n\tbackground: #000000 url('images/ui-bg_flat_10_000000_40x100.png') 50% 50% repeat-x;\n\topacity: .2;\n\tborder-radius: 5px;\n}\n\n/* Tabs customizations */\n.ui-tabs {\n\tborder: none;\n\n\t.ui-tabs-nav.ui-corner-all {\n\t\tborder-bottom-left-radius: 0;\n\t\tborder-bottom-right-radius: 0;\n\t}\n\n\t.ui-tabs-nav {\n\t\tbackground: none;\n\t\tmargin-bottom: 15px;\n\n\t\t.ui-state-default {\n\t\t\tborder: none;\n\t\t\tborder-bottom: 1px solid transparent;\n\t\t\tfont-weight: normal;\n\t\t\tmargin: 0 !important;\n\t\t\tpadding: 0 !important;\n\t\t}\n\n\t\t.ui-state-hover,\n\t\t.ui-state-active {\n\t\t\tborder: none;\n\t\t\tborder-bottom: 1px solid var(--color-main-text);\n\t\t\tcolor: var(--color-main-text);\n\t\t\ta, a:link, a:hover, a:visited {\n\t\t\t\tcolor: var(--color-main-text);\n\t\t\t}\n\t\t}\n\t\t.ui-state-active {\n\t\t\tfont-weight: bold;\n\t\t}\n\t}\n}\n\n/* Select menus */\n.ui-autocomplete {\n\t&.ui-menu {\n\t\tpadding: 0;\n\n\t\t/* scrolling starts from three items,\n\t\t * so hide overflow and scrollbars for a clean layout */\n\t\t&.item-count-1,\n\t\t&.item-count-2 {\n\t\t\toverflow-y: hidden;\n\t\t}\n\n\t\t.ui-menu-item a {\n\t\t\tcolor: var(--color-text-lighter);\n\t\t\tdisplay: block;\n\t\t\tpadding: 4px 4px 4px 14px;\n\n\t\t\t&.ui-state-focus, &.ui-state-active {\n\t\t\t\tbox-shadow: inset 4px 0 var(--color-primary-element);\n\t\t\t\tcolor: var(--color-main-text);\n\t\t\t}\n\t\t}\n\t}\n\n\t&.ui-widget-content {\n\t\tbackground: var(--color-main-background);\n\t\tborder-top: none;\n\t}\n\n\t&.ui-corner-all {\n\t\tborder-radius: 0;\n\t\tborder-bottom-left-radius: var(--border-radius);\n\t\tborder-bottom-right-radius: var(--border-radius);\n\t}\n\n\t.ui-state-hover, .ui-widget-content .ui-state-hover,\n\t.ui-widget-header .ui-state-hover,\n\t.ui-state-focus,\n\t.ui-widget-content .ui-state-focus,\n\t.ui-widget-header .ui-state-focus {\n\t\tborder: 1px solid transparent;\n\t\tbackground: inherit;\n\t\tcolor: var(--color-primary-element);\n\t}\n\n\t.ui-menu-item {\n\t\ta {\n\t\t\tborder-radius: 0 !important;\n\t\t}\n\t}\n}\n\n.ui-button.primary {\n\tbackground-color: var(--color-primary);\n\tcolor: var(--color-primary-text);\n\tborder: 1px solid var(--color-primary-text);\n}\n\n// fix ui-buttons on hover\n.ui-button:hover {\n font-weight:bold !important;\n}\n\n\n/* DRAGGABLE */\n.ui-draggable-handle,\n.ui-selectable {\n\ttouch-action: pan-y;\n}\n"],sourceRoot:""}]),e.Z=f},72417:function(t,e,n){"use strict";var i=n(87537),o=n.n(i),a=n(23645),r=n.n(a)()(o());r.push([t.id,".oc-dialog{background:var(--color-main-background);color:var(--color-text-light);border-radius:var(--border-radius-large);box-shadow:0 0 30px var(--color-box-shadow);padding:24px;z-index:10000;font-size:100%;box-sizing:border-box;min-width:200px;top:50%;left:50%;transform:translate(-50%, -50%);max-height:calc(100% - 20px);max-width:calc(100% - 20px);overflow:auto}.oc-dialog-title{background:var(--color-main-background)}.oc-dialog-buttonrow{position:relative;display:flex;background:rgba(0,0,0,0);right:0;bottom:0;padding:0;padding-top:10px;box-sizing:border-box;width:100%;background-image:linear-gradient(rgba(255, 255, 255, 0), var(--color-main-background))}.oc-dialog-buttonrow.twobuttons{justify-content:space-between}.oc-dialog-buttonrow.onebutton,.oc-dialog-buttonrow.twobuttons.aside{justify-content:flex-end}.oc-dialog-buttonrow button{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:44px;min-width:44px}.oc-dialog-close{position:absolute;width:44px !important;height:44px !important;top:4px;right:4px;padding:25px;background:var(--icon-close-dark) no-repeat center;opacity:.5;border-radius:var(--border-radius-pill)}.oc-dialog-close:hover,.oc-dialog-close:focus,.oc-dialog-close:active{opacity:1}.oc-dialog-dim{background-color:#000;opacity:.2;z-index:9999;position:fixed;top:0;left:0;width:100%;height:100%}body.theme--dark .oc-dialog-dim{opacity:.8}.oc-dialog-content{width:100%;max-width:550px}.oc-dialog.password-confirmation .oc-dialog-content{width:auto}.oc-dialog.password-confirmation .oc-dialog-content input[type=password]{width:100%}.oc-dialog.password-confirmation .oc-dialog-content label{display:none}","",{version:3,sources:["webpack://./core/src/jquery/css/jquery.ocdialog.scss"],names:[],mappings:"AAAA,WACC,uCAAA,CACA,6BAAA,CACA,wCAAA,CACA,2CAAA,CACA,YAAA,CACA,aAAA,CACA,cAAA,CACA,qBAAA,CACA,eAAA,CACA,OAAA,CACA,QAAA,CACA,+BAAA,CACA,4BAAA,CACA,2BAAA,CACA,aAAA,CAED,iBACC,uCAAA,CAED,qBACC,iBAAA,CACA,YAAA,CACA,wBAAA,CACA,OAAA,CACA,QAAA,CACA,SAAA,CACA,gBAAA,CACA,qBAAA,CACA,UAAA,CACA,sFAAA,CAEA,gCACO,6BAAA,CAGP,qEAEC,wBAAA,CAGD,4BACI,kBAAA,CACA,eAAA,CACH,sBAAA,CACA,WAAA,CACA,cAAA,CAIF,iBACC,iBAAA,CACA,qBAAA,CACA,sBAAA,CACA,OAAA,CACA,SAAA,CACA,YAAA,CACA,kDAAA,CACA,UAAA,CACA,uCAAA,CAEA,sEAGC,SAAA,CAIF,eACC,qBAAA,CACA,UAAA,CACA,YAAA,CACA,cAAA,CACA,KAAA,CACA,MAAA,CACA,UAAA,CACA,WAAA,CAGD,gCACC,UAAA,CAGD,mBACC,UAAA,CACA,eAAA,CAIA,oDACC,UAAA,CAEA,yEACC,UAAA,CAED,0DACC,YAAA",sourcesContent:[".oc-dialog {\n\tbackground: var(--color-main-background);\n\tcolor: var(--color-text-light);\n\tborder-radius: var(--border-radius-large);\n\tbox-shadow: 0 0 30px var(--color-box-shadow);\n\tpadding: 24px;\n\tz-index: 10000;\n\tfont-size: 100%;\n\tbox-sizing: border-box;\n\tmin-width: 200px;\n\ttop: 50%;\n\tleft: 50%;\n\ttransform: translate(-50%, -50%);\n\tmax-height: calc(100% - 20px);\n\tmax-width: calc(100% - 20px);\n\toverflow: auto;\n}\n.oc-dialog-title {\n\tbackground: var(--color-main-background);\n}\n.oc-dialog-buttonrow {\n\tposition: relative;\n\tdisplay: flex;\n\tbackground: transparent;\n\tright: 0;\n\tbottom: 0;\n\tpadding: 0;\n\tpadding-top: 10px;\n\tbox-sizing: border-box;\n\twidth: 100%;\n\tbackground-image: linear-gradient(rgba(255, 255, 255, 0.0), var(--color-main-background));\n\n\t&.twobuttons {\n justify-content: space-between;\n }\n\n\t&.onebutton,\n\t&.twobuttons.aside {\n\t\tjustify-content: flex-end;\n\t}\n\n\tbutton {\n\t white-space: nowrap;\n\t overflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\theight: 44px;\n\t\tmin-width: 44px;\n\t}\n}\n\n.oc-dialog-close {\n\tposition: absolute;\n\twidth: 44px !important;\n\theight: 44px !important;\n\ttop: 4px;\n\tright: 4px;\n\tpadding: 25px;\n\tbackground: var(--icon-close-dark) no-repeat center;\n\topacity: .5;\n\tborder-radius: var(--border-radius-pill);\n\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\topacity: 1;\n\t}\n}\n\n.oc-dialog-dim {\n\tbackground-color: #000;\n\topacity: .2;\n\tz-index: 9999;\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n}\n\nbody.theme--dark .oc-dialog-dim {\n\topacity: .8;\n}\n\n.oc-dialog-content {\n\twidth: 100%;\n\tmax-width: 550px;\n}\n\n.oc-dialog.password-confirmation {\n\t.oc-dialog-content {\n\t\twidth: auto;\n\n\t\tinput[type=password] {\n\t\t\twidth: 100%;\n\t\t}\n\t\tlabel {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),e.Z=r},58626:function(t,e,n){"use strict";var i=n(87537),o=n.n(i),a=n(23645),r=n.n(a)()(o());r.push([t.id,'.app-menu[data-v-b778f520]{width:100%;display:flex;flex-shrink:1;flex-wrap:wrap}.app-menu-main[data-v-b778f520]{display:flex;flex-wrap:nowrap}.app-menu-main .app-menu-entry[data-v-b778f520]{width:50px;height:50px;position:relative;display:flex;opacity:.7}.app-menu-main .app-menu-entry.app-menu-entry__active[data-v-b778f520]{opacity:1}.app-menu-main .app-menu-entry.app-menu-entry__active[data-v-b778f520]::before{content:" ";position:absolute;pointer-events:none;border-bottom-color:var(--color-main-background);transform:translateX(-50%);width:12px;height:5px;border-radius:3px;background-color:var(--color-primary-text);left:50%;bottom:6px;display:block;transition:all .1s ease-in-out;opacity:1}.app-menu-main .app-menu-entry.app-menu-entry__active .app-menu-entry--label[data-v-b778f520]{font-weight:bold}.app-menu-main .app-menu-entry a[data-v-b778f520]{width:calc(100% - 4px);height:calc(100% - 4px);margin:2px;color:var(--color-primary-text);position:relative}.app-menu-main .app-menu-entry img[data-v-b778f520]{transition:margin .1s ease-in-out;width:20px;height:20px;padding:calc((100% - 20px)/2);box-sizing:content-box;filter:var(--background-image-invert-if-bright)}.app-menu-main .app-menu-entry .app-menu-entry--label[data-v-b778f520]{opacity:0;position:absolute;font-size:12px;color:var(--color-primary-text);text-align:center;left:50%;top:45%;display:block;min-width:100%;transform:translateX(-50%);transition:all .1s ease-in-out;width:100%;text-overflow:ellipsis;overflow:hidden;letter-spacing:-0.5px}.app-menu-main .app-menu-entry[data-v-b778f520]:hover,.app-menu-main .app-menu-entry[data-v-b778f520]:focus-within{opacity:1}.app-menu-main .app-menu-entry:hover .app-menu-entry--label[data-v-b778f520],.app-menu-main .app-menu-entry:focus-within .app-menu-entry--label[data-v-b778f520]{opacity:1;font-weight:bolder;bottom:0;width:100%;text-overflow:ellipsis;overflow:hidden}.app-menu-main[data-v-b778f520]:hover,.app-menu-main[data-v-b778f520]:focus-within,.app-menu-main .app-menu-entry[data-v-b778f520]:hover,.app-menu-main .app-menu-entry[data-v-b778f520]:focus{opacity:1}.app-menu-main:hover img[data-v-b778f520],.app-menu-main:focus-within img[data-v-b778f520],.app-menu-main .app-menu-entry:hover img[data-v-b778f520],.app-menu-main .app-menu-entry:focus img[data-v-b778f520]{margin-top:-8px}.app-menu-main:hover .app-menu-entry--label[data-v-b778f520],.app-menu-main:focus-within .app-menu-entry--label[data-v-b778f520],.app-menu-main .app-menu-entry:hover .app-menu-entry--label[data-v-b778f520],.app-menu-main .app-menu-entry:focus .app-menu-entry--label[data-v-b778f520]{opacity:1;bottom:0}.app-menu-main[data-v-b778f520]:hover::before,.app-menu-main:hover .app-menu-entry[data-v-b778f520]::before,.app-menu-main[data-v-b778f520]:focus-within::before,.app-menu-main:focus-within .app-menu-entry[data-v-b778f520]::before,.app-menu-main .app-menu-entry[data-v-b778f520]:hover::before,.app-menu-main .app-menu-entry:hover .app-menu-entry[data-v-b778f520]::before,.app-menu-main .app-menu-entry[data-v-b778f520]:focus::before,.app-menu-main .app-menu-entry:focus .app-menu-entry[data-v-b778f520]::before{opacity:0}[data-v-b778f520] .app-menu-more .button-vue--vue-tertiary{opacity:.7;margin:3px;filter:var(--background-image-invert-if-bright)}[data-v-b778f520] .app-menu-more .button-vue--vue-tertiary:not([aria-expanded=true]){color:var(--color-primary-text)}[data-v-b778f520] .app-menu-more .button-vue--vue-tertiary:not([aria-expanded=true]):hover{opacity:1;background-color:rgba(0,0,0,0) !important}[data-v-b778f520] .app-menu-more .button-vue--vue-tertiary:focus-visible{opacity:1;outline:none !important}.app-menu-popover-entry .app-icon[data-v-b778f520]{position:relative;height:44px;filter:var(--background-invert-if-bright)}.app-menu-popover-entry .app-icon.has-unread[data-v-b778f520]::after{background-color:var(--color-main-text)}.app-menu-popover-entry .app-icon img[data-v-b778f520]{width:20px;height:20px;padding:15px}.has-unread[data-v-b778f520]::after{content:"";width:8px;height:8px;background-color:var(--color-primary-text);border-radius:50%;position:absolute;display:block;top:10px;right:10px}.unread-counter[data-v-b778f520]{display:none}',"",{version:3,sources:["webpack://./core/src/components/AppMenu.vue"],names:[],mappings:"AAGA,2BACC,UAAA,CACA,YAAA,CACA,aAAA,CACA,cAAA,CAED,gCACC,YAAA,CACA,gBAAA,CAEA,gDACC,UAAA,CACA,WAAA,CACA,iBAAA,CACA,YAAA,CACA,UAAA,CAEA,uEACC,SAAA,CAEA,+EACC,WAAA,CACA,iBAAA,CACA,mBAAA,CACA,gDAAA,CACA,0BAAA,CACA,UAAA,CACA,UAAA,CACA,iBAAA,CACA,0CAAA,CACA,QAAA,CACA,UAAA,CACA,aAAA,CACA,8BAAA,CACA,SAAA,CAGD,8FACC,gBAAA,CAIF,kDACC,sBAAA,CACA,uBAAA,CACA,UAAA,CACA,+BAAA,CACA,iBAAA,CAGD,oDACC,iCAAA,CACA,UAtDgB,CAuDhB,WAvDgB,CAwDhB,6BAAA,CACA,sBAAA,CACA,+CAAA,CAGD,uEACC,SAAA,CACA,iBAAA,CACA,cAAA,CACA,+BAAA,CACA,iBAAA,CACA,QAAA,CACA,OAAA,CACA,aAAA,CACA,cAAA,CACA,0BAAA,CACA,8BAAA,CACA,UAAA,CACA,sBAAA,CACA,eAAA,CACA,qBAAA,CAGD,mHAEC,SAAA,CACA,iKACC,SAAA,CACA,kBAAA,CACA,QAAA,CACA,UAAA,CACA,sBAAA,CACA,eAAA,CAOH,+LAIC,SAAA,CAEA,+MACC,eAAA,CAGD,2RACC,SAAA,CACA,QAAA,CAGD,8fACC,SAAA,CAKH,2DACC,UAAA,CACA,UAAA,CACA,+CAAA,CAGA,qFACC,+BAAA,CAEA,2FACC,SAAA,CACA,yCAAA,CAIF,yEACC,SAAA,CACA,uBAAA,CAKD,mDACC,iBAAA,CACA,WAAA,CAEA,yCAAA,CAEA,qEACC,uCAAA,CAGD,uDACC,UArJgB,CAsJhB,WAtJgB,CAuJhB,YAAA,CAKH,oCACC,UAAA,CACA,SAAA,CACA,UAAA,CACA,0CAAA,CACA,iBAAA,CACA,iBAAA,CACA,aAAA,CACA,QAAA,CACA,UAAA,CAGD,iCACC,YAAA",sourcesContent:['\n$header-icon-size: 20px;\n\n.app-menu {\n\twidth: 100%;\n\tdisplay: flex;\n\tflex-shrink: 1;\n\tflex-wrap: wrap;\n}\n.app-menu-main {\n\tdisplay: flex;\n\tflex-wrap: nowrap;\n\n\t.app-menu-entry {\n\t\twidth: 50px;\n\t\theight: 50px;\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t\topacity: .7;\n\n\t\t&.app-menu-entry__active {\n\t\t\topacity: 1;\n\n\t\t\t&::before {\n\t\t\t\tcontent: " ";\n\t\t\t\tposition: absolute;\n\t\t\t\tpointer-events: none;\n\t\t\t\tborder-bottom-color: var(--color-main-background);\n\t\t\t\ttransform: translateX(-50%);\n\t\t\t\twidth: 12px;\n\t\t\t\theight: 5px;\n\t\t\t\tborder-radius: 3px;\n\t\t\t\tbackground-color: var(--color-primary-text);\n\t\t\t\tleft: 50%;\n\t\t\t\tbottom: 6px;\n\t\t\t\tdisplay: block;\n\t\t\t\ttransition: all 0.1s ease-in-out;\n\t\t\t\topacity: 1;\n\t\t\t}\n\n\t\t\t.app-menu-entry--label {\n\t\t\t\tfont-weight: bold;\n\t\t\t}\n\t\t}\n\n\t\ta {\n\t\t\twidth: calc(100% - 4px);\n\t\t\theight: calc(100% - 4px);\n\t\t\tmargin: 2px;\n\t\t\tcolor: var(--color-primary-text);\n\t\t\tposition: relative;\n\t\t}\n\n\t\timg {\n\t\t\ttransition: margin 0.1s ease-in-out;\n\t\t\twidth: $header-icon-size;\n\t\t\theight: $header-icon-size;\n\t\t\tpadding: calc((100% - $header-icon-size) / 2);\n\t\t\tbox-sizing: content-box;\n\t\t\tfilter: var(--background-image-invert-if-bright);\n\t\t}\n\n\t\t.app-menu-entry--label {\n\t\t\topacity: 0;\n\t\t\tposition: absolute;\n\t\t\tfont-size: 12px;\n\t\t\tcolor: var(--color-primary-text);\n\t\t\ttext-align: center;\n\t\t\tleft: 50%;\n\t\t\ttop: 45%;\n\t\t\tdisplay: block;\n\t\t\tmin-width: 100%;\n\t\t\ttransform: translateX(-50%);\n\t\t\ttransition: all 0.1s ease-in-out;\n\t\t\twidth: 100%;\n\t\t\ttext-overflow: ellipsis;\n\t\t\toverflow: hidden;\n\t\t\tletter-spacing: -0.5px;\n\t\t}\n\n\t\t&:hover,\n\t\t&:focus-within {\n\t\t\topacity: 1;\n\t\t\t.app-menu-entry--label {\n\t\t\t\topacity: 1;\n\t\t\t\tfont-weight: bolder;\n\t\t\t\tbottom: 0;\n\t\t\t\twidth: 100%;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t}\n\n\t}\n\n\t// Show labels\n\t&:hover,\n\t&:focus-within,\n\t.app-menu-entry:hover,\n\t.app-menu-entry:focus {\n\t\topacity: 1;\n\n\t\timg {\n\t\t\tmargin-top: -8px;\n\t\t}\n\n\t\t.app-menu-entry--label {\n\t\t\topacity: 1;\n\t\t\tbottom: 0;\n\t\t}\n\n\t\t&::before, .app-menu-entry::before {\n\t\t\topacity: 0;\n\t\t}\n\t}\n}\n\n::v-deep .app-menu-more .button-vue--vue-tertiary {\n\topacity: .7;\n\tmargin: 3px;\n\tfilter: var(--background-image-invert-if-bright);\n\n\t/* Remove all background and align text color if not expanded */\n\t&:not([aria-expanded="true"]) {\n\t\tcolor: var(--color-primary-text);\n\n\t\t&:hover {\n\t\t\topacity: 1;\n\t\t\tbackground-color: transparent !important;\n\t\t}\n\t}\n\n\t&:focus-visible {\n\t\topacity: 1;\n\t\toutline: none !important;\n\t}\n}\n\n.app-menu-popover-entry {\n\t.app-icon {\n\t\tposition: relative;\n\t\theight: 44px;\n\t\t/* Icons are bright so invert them if bright color theme == bright background is used */\n\t\tfilter: var(--background-invert-if-bright);\n\n\t\t&.has-unread::after {\n\t\t\tbackground-color: var(--color-main-text);\n\t\t}\n\n\t\timg {\n\t\t\twidth: $header-icon-size;\n\t\t\theight: $header-icon-size;\n\t\t\tpadding: calc((50px - $header-icon-size) / 2);\n\t\t}\n\t}\n}\n\n.has-unread::after {\n\tcontent: "";\n\twidth: 8px;\n\theight: 8px;\n\tbackground-color: var(--color-primary-text);\n\tborder-radius: 50%;\n\tposition: absolute;\n\tdisplay: block;\n\ttop: 10px;\n\tright: 10px;\n}\n\n.unread-counter {\n\tdisplay: none;\n}\n'],sourceRoot:""}]),e.Z=r},88951:function(t,e,n){"use strict";var i=n(87537),o=n.n(i),a=n(23645),r=n.n(a)()(o());r.push([t.id,".menu-entry__loading-icon[data-v-6e59d13c]{margin-right:8px}","",{version:3,sources:["webpack://./core/src/components/UserMenu/UserMenuEntry.vue"],names:[],mappings:"AAEC,2CACC,gBAAA",sourcesContent:["\n.menu-entry {\n\t&__loading-icon {\n\t\tmargin-right: 8px;\n\t}\n}\n"],sourceRoot:""}]),e.Z=r},50893:function(t,e,n){"use strict";var i=n(87537),o=n.n(i),a=n(23645),r=n.n(a)()(o());r.push([t.id,"#contactsmenu-menu[data-v-1563c388]{height:calc(100vh - 150px);max-height:302px;min-height:175px;width:350px}#contactsmenu-menu[data-v-1563c388] .emptycontent{margin-top:5vh !important;margin-bottom:1.5vh}#contactsmenu-menu[data-v-1563c388] .emptycontent .icon-loading,#contactsmenu-menu[data-v-1563c388] .emptycontent .icon-search{display:inline-block}#contactsmenu-menu[data-v-1563c388] #contactsmenu-search{width:calc(100% - 16px);margin:8px;height:34px}#contactsmenu-menu[data-v-1563c388] .content{height:calc(100vh - 150px - 50px);max-height:250px;min-height:125px;overflow-y:auto}#contactsmenu-menu[data-v-1563c388] .content .footer{text-align:center}#contactsmenu-menu[data-v-1563c388] .content .footer a{display:block;width:100%;padding:12px 0;opacity:.5}#contactsmenu-menu[data-v-1563c388] a{padding:2px}#contactsmenu-menu[data-v-1563c388] a:focus-visible{box-shadow:inset 0 0 0 2px var(--color-main-text) !important}#contactsmenu-menu[data-v-1563c388] .contact{display:flex;position:relative;align-items:center;padding:3px 3px 3px 10px}#contactsmenu-menu[data-v-1563c388] .contact .avatar{height:32px;width:32px;display:inline-block}#contactsmenu-menu[data-v-1563c388] .contact .body{flex-grow:1;padding-left:8px;min-width:0}#contactsmenu-menu[data-v-1563c388] .contact .body div{position:relative;width:100%;overflow-x:hidden;text-overflow:ellipsis}#contactsmenu-menu[data-v-1563c388] .contact .body .last-message,#contactsmenu-menu[data-v-1563c388] .contact .body .email-address{color:var(--color-text-maxcontrast)}#contactsmenu-menu[data-v-1563c388] .contact .top-action,#contactsmenu-menu[data-v-1563c388] .contact .second-action,#contactsmenu-menu[data-v-1563c388] .contact .other-actions{width:16px;height:16px;opacity:.5;cursor:pointer}#contactsmenu-menu[data-v-1563c388] .contact .top-action:not(button),#contactsmenu-menu[data-v-1563c388] .contact .second-action:not(button),#contactsmenu-menu[data-v-1563c388] .contact .other-actions:not(button){padding:14px}#contactsmenu-menu[data-v-1563c388] .contact .top-action img,#contactsmenu-menu[data-v-1563c388] .contact .second-action img,#contactsmenu-menu[data-v-1563c388] .contact .other-actions img{filter:var(--background-invert-if-dark)}#contactsmenu-menu[data-v-1563c388] .contact .top-action:hover,#contactsmenu-menu[data-v-1563c388] .contact .top-action:active,#contactsmenu-menu[data-v-1563c388] .contact .top-action:focus,#contactsmenu-menu[data-v-1563c388] .contact .second-action:hover,#contactsmenu-menu[data-v-1563c388] .contact .second-action:active,#contactsmenu-menu[data-v-1563c388] .contact .second-action:focus,#contactsmenu-menu[data-v-1563c388] .contact .other-actions:hover,#contactsmenu-menu[data-v-1563c388] .contact .other-actions:active,#contactsmenu-menu[data-v-1563c388] .contact .other-actions:focus{opacity:1}#contactsmenu-menu[data-v-1563c388] .contact button.other-actions{width:44px}#contactsmenu-menu[data-v-1563c388] .contact button.other-actions:focus{border-color:rgba(0,0,0,0);box-shadow:0 0 0 2px var(--color-main-text)}#contactsmenu-menu[data-v-1563c388] .contact button.other-actions:focus-visible{border-radius:var(--border-radius-pill)}#contactsmenu-menu[data-v-1563c388] .contact .menu{top:47px;margin-right:13px}#contactsmenu-menu[data-v-1563c388] .contact .popovermenu::after{right:2px}","",{version:3,sources:["webpack://./core/src/views/ContactsMenu.vue"],names:[],mappings:"AACA,oCAEC,0BAAA,CACA,gBAAA,CACA,gBAAA,CACA,WAAA,CAGC,kDACC,yBAAA,CACA,mBAAA,CACA,+HAEC,oBAAA,CAIF,yDACC,uBAAA,CACA,UAAA,CACA,WAAA,CAGD,6CAEC,iCAAA,CACA,gBAAA,CACA,gBAAA,CACA,eAAA,CAEA,qDACC,iBAAA,CAEA,uDACC,aAAA,CACA,UAAA,CACA,cAAA,CACA,UAAA,CAKH,sCACC,WAAA,CAEA,oDACC,4DAAA,CAIF,6CACC,YAAA,CACA,iBAAA,CACA,kBAAA,CACA,wBAAA,CAEA,qDACC,WAAA,CACA,UAAA,CACA,oBAAA,CAGD,mDACC,WAAA,CACA,gBAAA,CACA,WAAA,CAEA,uDACC,iBAAA,CACA,UAAA,CACA,iBAAA,CACA,sBAAA,CAGD,mIACC,mCAAA,CAIF,iLACC,UAAA,CACA,WAAA,CACA,UAAA,CACA,cAAA,CAEA,qNACC,YAAA,CAED,6LACC,uCAAA,CAGD,4kBAGC,SAAA,CAIF,kEACC,UAAA,CAEA,wEACC,0BAAA,CACA,2CAAA,CAGD,gFACC,uCAAA,CAKF,mDACC,QAAA,CACA,iBAAA,CAED,iEACC,SAAA",sourcesContent:["\n#contactsmenu-menu {\n\t/* show 2.5 to 4.5 entries depending on the screen height */\n\theight: calc(100vh - 50px * 3);\n\tmax-height: calc(50px * 6 + 2px);\n\tmin-height: calc(50px * 3.5);\n\twidth: 350px;\n\n\t&:deep {\n\t\t.emptycontent {\n\t\t\tmargin-top: 5vh !important;\n\t\t\tmargin-bottom: 1.5vh;\n\t\t\t.icon-loading,\n\t\t\t.icon-search {\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\t\t}\n\n\t\t#contactsmenu-search {\n\t\t\twidth: calc(100% - 16px);\n\t\t\tmargin: 8px;\n\t\t\theight: 34px;\n\t\t}\n\n\t\t.content {\n\t\t\t/* fixed max height of the parent container without the search input */\n\t\t\theight: calc(100vh - 50px * 3 - 50px);\n\t\t\tmax-height: calc(50px * 5);\n\t\t\tmin-height: calc(50px * 3.5 - 50px);\n\t\t\toverflow-y: auto;\n\n\t\t\t.footer {\n\t\t\t\ttext-align: center;\n\n\t\t\t\ta {\n\t\t\t\t\tdisplay: block;\n\t\t\t\t\twidth: 100%;\n\t\t\t\t\tpadding: 12px 0;\n\t\t\t\t\topacity: .5;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ta {\n\t\t\tpadding: 2px;\n\n\t\t\t&:focus-visible {\n\t\t\t\tbox-shadow: inset 0 0 0 2px var(--color-main-text) !important; // override rule in core/css/headers.scss #header a:focus-visible\n\t\t\t}\n\t\t}\n\n\t\t.contact {\n\t\t\tdisplay: flex;\n\t\t\tposition: relative;\n\t\t\talign-items: center;\n\t\t\tpadding: 3px 3px 3px 10px;\n\n\t\t\t.avatar {\n\t\t\t\theight: 32px;\n\t\t\t\twidth: 32px;\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\n\t\t\t.body {\n\t\t\t\tflex-grow: 1;\n\t\t\t\tpadding-left: 8px;\n\t\t\t\tmin-width: 0;\n\n\t\t\t\tdiv {\n\t\t\t\t\tposition: relative;\n\t\t\t\t\twidth: 100%;\n\t\t\t\t\toverflow-x: hidden;\n\t\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\t}\n\n\t\t\t\t.last-message, .email-address {\n\t\t\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.top-action, .second-action, .other-actions {\n\t\t\t\twidth: 16px;\n\t\t\t\theight: 16px;\n\t\t\t\topacity: .5;\n\t\t\t\tcursor: pointer;\n\n\t\t\t\t&:not(button) {\n\t\t\t\t\tpadding: 14px;\n\t\t\t\t}\n\t\t\t\timg {\n\t\t\t\t\tfilter: var(--background-invert-if-dark);\n\t\t\t\t}\n\n\t\t\t\t&:hover,\n\t\t\t\t&:active,\n\t\t\t\t&:focus {\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbutton.other-actions {\n\t\t\t\twidth: 44px;\n\n\t\t\t\t&:focus {\n\t\t\t\t\tborder-color: transparent;\n\t\t\t\t\tbox-shadow: 0 0 0 2px var(--color-main-text);\n\t\t\t\t}\n\n\t\t\t\t&:focus-visible {\n\t\t\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/* actions menu */\n\t\t\t.menu {\n\t\t\t\ttop: 47px;\n\t\t\t\tmargin-right: 13px;\n\t\t\t}\n\t\t\t.popovermenu::after {\n\t\t\t\tright: 2px;\n\t\t\t}\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),e.Z=r},71445:function(t,e,n){"use strict";var i=n(87537),o=n.n(i),a=n(23645),r=n.n(a)()(o());r.push([t.id,".user-menu[data-v-6a818bbc]{margin-right:12px}.user-menu[data-v-6a818bbc] .header-menu__trigger{opacity:1 !important}.user-menu[data-v-6a818bbc] .header-menu__trigger:focus-visible .user-menu__avatar{border:2px solid var(--color-primary-text)}.user-menu[data-v-6a818bbc] .header-menu__carret{display:none !important}.user-menu[data-v-6a818bbc] .header-menu__content{width:fit-content !important}.user-menu__avatar[data-v-6a818bbc]:active,.user-menu__avatar[data-v-6a818bbc]:focus,.user-menu__avatar[data-v-6a818bbc]:hover{border:2px solid var(--color-primary-text)}.user-menu__nav[data-v-6a818bbc]{display:flex;width:100%}.user-menu__nav ul[data-v-6a818bbc]{display:flex;flex-direction:column;gap:2px}.user-menu__nav ul[data-v-6a818bbc] li a,.user-menu__nav ul[data-v-6a818bbc] li button{border-radius:6px;display:inline-flex;align-items:center;height:var(--header-menu-item-height);color:var(--color-main-text);padding:10px 8px;box-sizing:border-box;white-space:nowrap;position:relative;width:100%}.user-menu__nav ul[data-v-6a818bbc] li a:hover,.user-menu__nav ul[data-v-6a818bbc] li button:hover{background-color:var(--color-background-hover)}.user-menu__nav ul[data-v-6a818bbc] li a:focus-visible,.user-menu__nav ul[data-v-6a818bbc] li button:focus-visible{background-color:var(--color-background-hover) !important;box-shadow:inset 0 0 0 2px var(--color-primary) !important;outline:none !important}.user-menu__nav ul[data-v-6a818bbc] li a:active,.user-menu__nav ul[data-v-6a818bbc] li a.active,.user-menu__nav ul[data-v-6a818bbc] li button:active,.user-menu__nav ul[data-v-6a818bbc] li button.active{background-color:var(--color-primary-light)}.user-menu__nav ul[data-v-6a818bbc] li a span,.user-menu__nav ul[data-v-6a818bbc] li button span{padding-bottom:0;color:var(--color-main-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:110px}.user-menu__nav ul[data-v-6a818bbc] li a img,.user-menu__nav ul[data-v-6a818bbc] li button img{width:16px;height:16px;margin-right:10px}.user-menu__nav ul[data-v-6a818bbc] li a img,.user-menu__nav ul[data-v-6a818bbc] li a svg,.user-menu__nav ul[data-v-6a818bbc] li button img,.user-menu__nav ul[data-v-6a818bbc] li button svg{opacity:.7;filter:var(--background-invert-if-dark)}.user-menu__nav ul[data-v-6a818bbc] li button{background-color:rgba(0,0,0,0);border:none;font-weight:normal;margin:0}","",{version:3,sources:["webpack://./core/src/views/UserMenu.vue"],names:[],mappings:"AACA,4BACC,iBAAA,CAIE,kDACC,oBAAA,CAEC,mFACC,0CAAA,CAKH,iDACC,uBAAA,CAGD,kDACC,4BAAA,CAMF,+HAGC,0CAAA,CAIF,iCACC,YAAA,CACA,UAAA,CAEA,oCACC,YAAA,CACA,qBAAA,CACA,OAAA,CAIE,uFAEC,iBAAA,CACA,mBAAA,CACA,kBAAA,CACA,qCAAA,CACA,4BAAA,CACA,gBAAA,CACA,qBAAA,CACA,kBAAA,CACA,iBAAA,CACA,UAAA,CAEA,mGACC,8CAAA,CAGD,mHACC,yDAAA,CACA,0DAAA,CACA,uBAAA,CAGD,0MAEC,2CAAA,CAGD,iGACC,gBAAA,CACA,4BAAA,CACA,kBAAA,CACA,eAAA,CACA,sBAAA,CACA,eAAA,CAGD,+FACC,UAAA,CACA,WAAA,CACA,iBAAA,CAGD,8LAEC,UAAA,CACA,uCAAA,CAKF,8CACC,8BAAA,CACA,WAAA,CACA,kBAAA,CACA,QAAA",sourcesContent:["\n.user-menu {\n\tmargin-right: 12px;\n\n\t&:deep {\n\t\t.header-menu {\n\t\t\t&__trigger {\n\t\t\t\topacity: 1 !important;\n\t\t\t\t&:focus-visible {\n\t\t\t\t\t.user-menu__avatar {\n\t\t\t\t\t\tborder: 2px solid var(--color-primary-text);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&__carret {\n\t\t\t\tdisplay: none !important;\n\t\t\t}\n\n\t\t\t&__content {\n\t\t\t\twidth: fit-content !important;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__avatar {\n\t\t&:active,\n\t\t&:focus,\n\t\t&:hover {\n\t\t\tborder: 2px solid var(--color-primary-text);\n\t\t}\n\t}\n\n\t&__nav {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\n\t\tul {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tgap: 2px;\n\n\t\t\t&:deep {\n\t\t\t\tli {\n\t\t\t\t\ta,\n\t\t\t\t\tbutton {\n\t\t\t\t\t\tborder-radius: 6px;\n\t\t\t\t\t\tdisplay: inline-flex;\n\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\theight: var(--header-menu-item-height);\n\t\t\t\t\t\tcolor: var(--color-main-text);\n\t\t\t\t\t\tpadding: 10px 8px;\n\t\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\twidth: 100%;\n\n\t\t\t\t\t\t&:hover {\n\t\t\t\t\t\t\tbackground-color: var(--color-background-hover);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t&:focus-visible {\n\t\t\t\t\t\t\tbackground-color: var(--color-background-hover) !important;\n\t\t\t\t\t\t\tbox-shadow: inset 0 0 0 2px var(--color-primary) !important;\n\t\t\t\t\t\t\toutline: none !important;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t&:active,\n\t\t\t\t\t\t&.active {\n\t\t\t\t\t\t\tbackground-color: var(--color-primary-light);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tspan {\n\t\t\t\t\t\t\tpadding-bottom: 0;\n\t\t\t\t\t\t\tcolor: var(--color-main-text);\n\t\t\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\t\t\t\tmax-width: 110px;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\timg {\n\t\t\t\t\t\t\twidth: 16px;\n\t\t\t\t\t\t\theight: 16px;\n\t\t\t\t\t\t\tmargin-right: 10px;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\timg,\n\t\t\t\t\t\tsvg {\n\t\t\t\t\t\t\topacity: .7;\n\t\t\t\t\t\t\tfilter: var(--background-invert-if-dark);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override global button styles\n\t\t\t\t\tbutton {\n\t\t\t\t\t\tbackground-color: transparent;\n\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\tmargin: 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),e.Z=r},10944:function(t,e,n){var i=n(40202);t.exports=(i.default||i).template({1:function(t,e,n,i,o){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(a=r(n,"if").call(null!=e?e:t.nullContext||{},null!=(a=null!=e?r(e,"contact"):e)?r(a,"profileUrl"):a,{name:"if",hash:{},fn:t.program(2,o,0),inverse:t.program(5,o,0),data:o,loc:{start:{line:2,column:1},end:{line:10,column:8}}}))?a:""},2:function(t,e,n,i,o){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(a=r(n,"if").call(null!=e?e:t.nullContext||{},null!=(a=null!=e?r(e,"contact"):e)?r(a,"profileTitle"):a,{name:"if",hash:{},fn:t.program(3,o,0),inverse:t.noop,data:o,loc:{start:{line:3,column:2},end:{line:7,column:9}}}))?a:""},3:function(t,e,n,i,o){var a,r=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t\t\t<a class="profile-link--avatar" href="'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"profileUrl"):a,e))+'">\n\t\t\t\t<img src="'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+'&size=32" class="avatar" srcset="'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+"&size=32 1x, "+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+"&size=64 2x, "+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+'&size=128 4x" alt="">\n\t\t\t</a>\n'},5:function(t,e,n,i,o){var a,r=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t\t<img src="'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+'&size=32" class="avatar" srcset="'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+"&size=32 1x, "+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+"&size=64 2x, "+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"avatar"):a,e))+'&size=128 4x" alt="">\n'},7:function(t,e,n,i,o){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(a=r(n,"if").call(null!=e?e:t.nullContext||{},null!=(a=null!=e?r(e,"contact"):e)?r(a,"profileUrl"):a,{name:"if",hash:{},fn:t.program(8,o,0),inverse:t.program(11,o,0),data:o,loc:{start:{line:12,column:1},end:{line:20,column:8}}}))?a:""},8:function(t,e,n,i,o){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(a=r(n,"if").call(null!=e?e:t.nullContext||{},null!=(a=null!=e?r(e,"contact"):e)?r(a,"profileTitle"):a,{name:"if",hash:{},fn:t.program(9,o,0),inverse:t.noop,data:o,loc:{start:{line:13,column:2},end:{line:17,column:9}}}))?a:""},9:function(t,e,n,i,o){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t\t\t<a class="profile-link--avatar" href="'+t.escapeExpression(t.lambda(null!=(a=null!=e?r(e,"contact"):e)?r(a,"profileUrl"):a,e))+'">\n\t\t\t\t<div class="avatar"></div>\n\t\t\t</a>\n'},11:function(t,e,n,i,o){return'\t\t<div class="avatar"></div>\n'},13:function(t,e,n,i,o){var a,r=null!=e?e:t.nullContext||{},s=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return(null!=(a=s(n,"if").call(r,null!=(a=null!=e?s(e,"contact"):e)?s(a,"profileTitle"):a,{name:"if",hash:{},fn:t.program(14,o,0),inverse:t.noop,data:o,loc:{start:{line:23,column:1},end:{line:29,column:8}}}))?a:"")+(null!=(a=s(n,"if").call(r,null!=(a=null!=e?s(e,"contact"):e)?s(a,"topAction"):a,{name:"if",hash:{},fn:t.program(16,o,0),inverse:t.noop,data:o,loc:{start:{line:30,column:1},end:{line:34,column:8}}}))?a:"")},14:function(t,e,n,i,o){var a,r=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t\t<a class="body profile-link--full-name" href="'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"profileUrl"):a,e))+'">\n\t\t\t<div class="full-name">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"fullName"):a,e))+'</div>\n\t\t\t<div class="last-message">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"lastMessage"):a,e))+'</div>\n\t\t\t<div class="email-address">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"emailAddresses"):a,e))+"</div>\n\t\t</a>\n"},16:function(t,e,n,i,o){var a,r=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t\t<a class="top-action" href="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"hyperlink"):a,e))+'" title="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"title"):a,e))+'" aria-label="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"title"):a,e))+'">\n\t\t\t<img src="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"icon"):a,e))+'" alt="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"title"):a,e))+'">\n\t\t</a>\n'},18:function(t,e,n,i,o){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(a=r(n,"if").call(null!=e?e:t.nullContext||{},null!=(a=null!=e?r(e,"contact"):e)?r(a,"topAction"):a,{name:"if",hash:{},fn:t.program(19,o,0),inverse:t.program(21,o,0),data:o,loc:{start:{line:35,column:0},end:{line:50,column:0}}}))?a:""},19:function(t,e,n,i,o){var a,r=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t<a class="body" href="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"hyperlink"):a,e))+'">\n\t\t<div class="full-name">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"fullName"):a,e))+'</div>\n\t\t<div class="last-message">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"lastMessage"):a,e))+'</div>\n\t\t<div class="email-address">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"emailAddresses"):a,e))+'</div>\n\t</a>\n \t<a class="top-action" href="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"hyperlink"):a,e))+'" title="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"title"):a,e))+'">\n \t\t<img src="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"icon"):a,e))+'" alt="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"topAction"):a)?l(a,"title"):a,e))+'">\n\t</a>\n'},21:function(t,e,n,i,o){var a,r=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t<div class="body">\n\t\t<div class="full-name">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"fullName"):a,e))+'</div>\n\t\t<div class="last-message">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"lastMessage"):a,e))+'</div>\n\t\t<div class="email-address">'+s(r(null!=(a=null!=e?l(e,"contact"):e)?l(a,"emailAddresses"):a,e))+"</div>\n\t</div>\n"},23:function(t,e,n,i,o){var a,r=t.lambda,s=t.escapeExpression,l=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<a class="second-action" href="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"secondAction"):a)?l(a,"hyperlink"):a,e))+'" aria-label="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"secondAction"):a)?l(a,"title"):a,e))+'" title="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"secondAction"):a)?l(a,"title"):a,e))+'">\n\t<img src="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"secondAction"):a)?l(a,"icon"):a,e))+'" alt="'+s(r(null!=(a=null!=(a=null!=e?l(e,"contact"):e)?l(a,"secondAction"):a)?l(a,"title"):a,e))+'">\n</a>\n'},25:function(t,e,n,i,o){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t<button class="other-actions icon-more"></button>\n\t<div class="menu popovermenu">\n\t\t<ul>\n'+(null!=(a=r(n,"each").call(null!=e?e:t.nullContext||{},null!=(a=null!=e?r(e,"contact"):e)?r(a,"actions"):a,{name:"each",hash:{},fn:t.program(26,o,0),inverse:t.noop,data:o,loc:{start:{line:60,column:3},end:{line:67,column:12}}}))?a:"")+"\t\t</ul>\n\t</div>\n"},26:function(t,e,n,i,o){var a,r=null!=e?e:t.nullContext||{},s=t.hooks.helperMissing,l="function",c=t.escapeExpression,u=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'\t\t\t<li>\n\t\t\t\t<a href="'+c(typeof(a=null!=(a=u(n,"hyperlink")||(null!=e?u(e,"hyperlink"):e))?a:s)===l?a.call(r,{name:"hyperlink",hash:{},data:o,loc:{start:{line:62,column:13},end:{line:62,column:26}}}):a)+'">\n\t\t\t\t\t<img src="'+c(typeof(a=null!=(a=u(n,"icon")||(null!=e?u(e,"icon"):e))?a:s)===l?a.call(r,{name:"icon",hash:{},data:o,loc:{start:{line:63,column:15},end:{line:63,column:23}}}):a)+'" alt="">\n\t\t\t\t\t<span>'+c(typeof(a=null!=(a=u(n,"title")||(null!=e?u(e,"title"):e))?a:s)===l?a.call(r,{name:"title",hash:{},data:o,loc:{start:{line:64,column:11},end:{line:64,column:20}}}):a)+"</span>\n\t\t\t\t</a>\n\t\t\t</li>\n"},compiler:[8,">= 4.3.0"],main:function(t,e,n,i,o){var a,r=null!=e?e:t.nullContext||{},s=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return(null!=(a=s(n,"if").call(r,null!=(a=null!=e?s(e,"contact"):e)?s(a,"avatar"):a,{name:"if",hash:{},fn:t.program(1,o,0),inverse:t.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!=e?s(e,"contact"):e)?s(a,"profileUrl"):a,{name:"if",hash:{},fn:t.program(13,o,0),inverse:t.program(18,o,0),data:o,loc:{start:{line:22,column:0},end:{line:50,column:7}}}))?a:"")+(null!=(a=s(n,"if").call(r,null!=(a=null!=e?s(e,"contact"):e)?s(a,"hasTwoActions"):a,{name:"if",hash:{},fn:t.program(23,o,0),inverse:t.noop,data:o,loc:{start:{line:51,column:0},end:{line:55,column:7}}}))?a:"")+(null!=(a=s(n,"if").call(r,null!=(a=null!=e?s(e,"contact"):e)?s(a,"hasManyActions"):a,{name:"if",hash:{},fn:t.program(25,o,0),inverse:t.noop,data:o,loc:{start:{line:56,column:0},end:{line:70,column:7}}}))?a:"")},useData:!0})},20421:function(t,e,n){var i=n(40202);t.exports=(i.default||i).template({compiler:[8,">= 4.3.0"],main:function(t,e,n,i,o){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<div class="emptycontent">\n\t<div class="icon-search"></div>\n\t<h2>'+t.escapeExpression("function"==typeof(a=null!=(a=r(n,"couldNotLoadText")||(null!=e?r(e,"couldNotLoadText"):e))?a:t.hooks.helperMissing)?a.call(null!=e?e:t.nullContext||{},{name:"couldNotLoadText",hash:{},data:o,loc:{start:{line:3,column:5},end:{line:3,column:25}}}):a)+"</h2>\n</div>\n"},useData:!0})},34083:function(t,e,n){var i=n(40202);t.exports=(i.default||i).template({1:function(t,e,n,i,o){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<div class="emptycontent">\n\t<div class="icon-search"></div>\n\t<h2>'+t.escapeExpression("function"==typeof(a=null!=(a=r(n,"noContactsFoundText")||(null!=e?r(e,"noContactsFoundText"):e))?a:t.hooks.helperMissing)?a.call(null!=e?e:t.nullContext||{},{name:"noContactsFoundText",hash:{},data:o,loc:{start:{line:4,column:5},end:{line:4,column:28}}}):a)+"</h2>\n</div>\n"},3:function(t,e,n,i,o){var a,r=null!=e?e:t.nullContext||{},s=t.hooks.helperMissing,l="function",c=t.escapeExpression,u=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<div class="footer"><a href="'+c(typeof(a=null!=(a=u(n,"contactsAppURL")||(null!=e?u(e,"contactsAppURL"):e))?a:s)===l?a.call(r,{name:"contactsAppURL",hash:{},data:o,loc:{start:{line:9,column:29},end:{line:9,column:47}}}):a)+'">'+c(typeof(a=null!=(a=u(n,"showAllContactsText")||(null!=e?u(e,"showAllContactsText"):e))?a:s)===l?a.call(r,{name:"showAllContactsText",hash:{},data:o,loc:{start:{line:9,column:49},end:{line:9,column:72}}}):a)+"</a></div>\n"},5:function(t,e,n,i,o){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return null!=(a=r(n,"if").call(null!=e?e:t.nullContext||{},null!=e?r(e,"canInstallApp"):e,{name:"if",hash:{},fn:t.program(6,o,0),inverse:t.noop,data:o,loc:{start:{line:10,column:0},end:{line:12,column:0}}}))?a:""},6:function(t,e,n,i,o){var a,r=null!=e?e:t.nullContext||{},s=t.hooks.helperMissing,l="function",c=t.escapeExpression,u=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<div class="footer"><a href="'+c(typeof(a=null!=(a=u(n,"contactsAppMgmtURL")||(null!=e?u(e,"contactsAppMgmtURL"):e))?a:s)===l?a.call(r,{name:"contactsAppMgmtURL",hash:{},data:o,loc:{start:{line:11,column:29},end:{line:11,column:51}}}):a)+'">'+c(typeof(a=null!=(a=u(n,"contactsAppMgmtText")||(null!=e?u(e,"contactsAppMgmtText"):e))?a:s)===l?a.call(r,{name:"contactsAppMgmtText",hash:{},data:o,loc:{start:{line:11,column:53},end:{line:11,column:76}}}):a)+"</a></div>\n"},compiler:[8,">= 4.3.0"],main:function(t,e,n,i,o){var a,r=null!=e?e:t.nullContext||{},s=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return(null!=(a=s(n,"unless").call(r,null!=(a=null!=e?s(e,"contacts"):e)?s(a,"length"):a,{name:"unless",hash:{},fn:t.program(1,o,0),inverse:t.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!=e?s(e,"contactsAppEnabled"):e,{name:"if",hash:{},fn:t.program(3,o,0),inverse:t.program(5,o,0),data:o,loc:{start:{line:8,column:0},end:{line:12,column:7}}}))?a:"")},useData:!0})},95386:function(t,e,n){var i=n(40202);t.exports=(i.default||i).template({compiler:[8,">= 4.3.0"],main:function(t,e,n,i,o){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<div class="emptycontent">\n\t<div class="icon-loading"></div>\n\t<h2>'+t.escapeExpression("function"==typeof(a=null!=(a=r(n,"loadingText")||(null!=e?r(e,"loadingText"):e))?a:t.hooks.helperMissing)?a.call(null!=e?e:t.nullContext||{},{name:"loadingText",hash:{},data:o,loc:{start:{line:3,column:5},end:{line:3,column:20}}}):a)+"</h2>\n</div>\n"},useData:!0})},66115:function(t,e,n){var i=n(40202);t.exports=(i.default||i).template({compiler:[8,">= 4.3.0"],main:function(t,e,n,i,o){var a,r=null!=e?e:t.nullContext||{},s=t.hooks.helperMissing,l="function",c=t.escapeExpression,u=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<label class="hidden-visually" for="contactsmenu-search">'+c(typeof(a=null!=(a=u(n,"searchContactsText")||(null!=e?u(e,"searchContactsText"):e))?a:s)===l?a.call(r,{name:"searchContactsText",hash:{},data: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!=e?u(e,"searchContactsText"):e))?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!=e?u(e,"searchTerm"):e))?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(t,e,n){var i=n(40202);t.exports=(i.default||i).template({1:function(t,e,n,i,o){var a,r=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<img src="'+t.escapeExpression("function"==typeof(a=null!=(a=r(n,"icon")||(null!=e?r(e,"icon"):e))?a:t.hooks.helperMissing)?a.call(null!=e?e:t.nullContext||{},{name:"icon",hash:{},data:o,loc:{start:{line:3,column:24},end:{line:3,column:32}}}):a)+'">'},compiler:[8,">= 4.3.0"],main:function(t,e,n,i,o){var a,r,s=null!=e?e:t.nullContext||{},l=t.hooks.helperMissing,c="function",u=t.escapeExpression,d=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'<li>\n\t<a href="'+u(typeof(r=null!=(r=d(n,"hyperlink")||(null!=e?d(e,"hyperlink"):e))?r:l)===c?r.call(s,{name:"hyperlink",hash:{},data:o,loc:{start:{line:2,column:10},end:{line:2,column:23}}}):r)+'">\n\t\t'+(null!=(a=d(n,"if").call(s,null!=e?d(e,"icon"):e,{name:"if",hash:{},fn:t.program(1,o,0),inverse:t.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!=e?d(e,"title"):e))?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(t,e,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(t){var e=a(t);return n(e)}function a(t){if(!n.o(i,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return i[t]}o.keys=function(){return Object.keys(i)},o.resolve=a,t.exports=o,o.id=46700},12081:function(t){"use strict";t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoAQMAAAC2MCouAAAABlBMVEVmZmZ1dXVT6N0BAAAAUklEQVQIW8XNsQ3AIAwF0bMoKBmBURgNj8YojEBJEcXwu2yQ+p507BTeWDnozPISjPpY4O0W6CqEisUtiG/EF+IT8YG4fznihnhCPCNeEK/89D1Gd22TNOyXVAAAAABJRU5ErkJggg=="},47868:function(t){"use strict";t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAABkAQMAAADOquA5AAAAA1BMVEUAAACnej3aAAAADklEQVQYGWMYBaOABgAAAlgAARbiVEcAAAAASUVORK5CYII="},58188:function(t){"use strict";t.exports="data:image/png;base64,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"},33178:function(t){"use strict";t.exports="data:image/png;base64,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"},40337:function(t){"use strict";t.exports="data:image/png;base64,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"},98811:function(t){"use strict";t.exports="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"},27373:function(t){"use strict";t.exports="data:image/gif;base64,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"}},o={};function a(t){var e=o[t];if(void 0!==e)return e.exports;var n=o[t]={id:t,loaded:!1,exports:{}};return i[t].call(n.exports,n,n.exports,a),n.loaded=!0,n.exports}a.m=i,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(t){return a.O[t](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(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,{a:e}),e},a.d=function(t,e){for(var n in e)a.o(e,n)&&!a.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},a.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},a.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},a.j=2943,function(){a.b=document.baseURI||self.location.href;var t={2943:0};a.O.j=function(e){return 0===t[e]};var e=function(e,n){var i,o,r=n[0],s=n[1],l=n[2],c=0;if(r.some((function(e){return 0!==t[e]}))){for(i in s)a.o(s,i)&&(a.m[i]=s[i]);if(l)var u=l(a)}for(e&&e(n);c<r.length;c++)o=r[c],a.o(t,o)&&t[o]&&t[o][0](),t[o]=0;return a.O(u)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))}(),a.nc=void 0;var r=a.O(void 0,[7874],(function(){return a(30300)}));r=a.O(r)}(); +//# sourceMappingURL=core-main.js.map?v=b35dfeffd73df74cd1e5
\ No newline at end of file diff --git a/dist/core-main.js.map b/dist/core-main.js.map index 445186485f4..7e956bfb88c 100644 --- a/dist/core-main.js.map +++ b/dist/core-main.js.map @@ -1 +1 @@ -{"version":3,"file":"core-main.js?v=579c1e950f8166c7368e","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/core/src/OC/legacy-loader.js","webpack:///nextcloud/core/src/OC/notification.js","webpack:///nextcloud/core/src/OC/xhr-error.js","webpack:///nextcloud/core/src/OC/apps.js","webpack:///nextcloud/core/src/OCP/appconfig.js","webpack:///nextcloud/core/src/OC/appconfig.js","webpack:///nextcloud/core/src/OC/appswebroots.js","webpack:///nextcloud/core/src/OC/backbone-webdav.js","webpack:///nextcloud/core/src/OC/backbone.js","webpack:///nextcloud/core/src/OC/config.js","webpack:///nextcloud/core/src/OC/contactsmenu.js","webpack:///nextcloud/core/src/OC/currentuser.js","webpack:///nextcloud/core/src/OCA/search.js","webpack:///nextcloud/core/src/OCA/index.js","webpack:///nextcloud/core/src/Util/a11y.js","webpack:///nextcloud/core/src/OC/dialogs.js","webpack:///nextcloud/core/src/OC/requesttoken.js","webpack:///nextcloud/core/src/OC/eventsource.js","webpack:///nextcloud/core/src/OC/menu.js","webpack:///nextcloud/core/src/OC/constants.js","webpack:///nextcloud/core/src/OC/admin.js","webpack:///nextcloud/core/src/OC/l10n.js","webpack:///nextcloud/core/src/OC/msg.js","webpack:///nextcloud/core/src/OC/password-confirmation.js","webpack:///nextcloud/core/src/OC/theme.js","webpack:///nextcloud/core/src/OC/util-history.js","webpack:///nextcloud/core/src/OC/util.js","webpack:///nextcloud/core/src/OC/debug.js","webpack:///nextcloud/core/src/OC/webroot.js","webpack:///nextcloud/core/src/OC/get_set.js","webpack:///nextcloud/core/src/OC/index.js","webpack:///nextcloud/core/src/OC/appsettings.js","webpack:///nextcloud/core/src/OC/capabilities.js","webpack:///nextcloud/core/src/OC/host.js","webpack:///nextcloud/core/src/OC/query-string.js","webpack:///nextcloud/core/src/OC/plugins.js","webpack:///nextcloud/core/src/OC/navigation.js","webpack:///nextcloud/core/src/OC/routing.js","webpack:///nextcloud/core/src/session-heartbeat.js","webpack:///nextcloud/core/src/views/ContactsMenu.vue?vue&type=script&lang=js&","webpack:///nextcloud/core/src/views/ContactsMenu.vue","webpack://nextcloud/./core/src/views/ContactsMenu.vue?41d6","webpack://nextcloud/./core/src/views/ContactsMenu.vue?1de5","webpack://nextcloud/./core/src/views/ContactsMenu.vue?f71b","webpack:///nextcloud/core/src/components/AppMenu.vue","webpack:///nextcloud/core/src/components/AppMenu.vue?vue&type=script&lang=js&","webpack://nextcloud/./core/src/components/AppMenu.vue?8f2a","webpack://nextcloud/./core/src/components/AppMenu.vue?95cf","webpack://nextcloud/./core/src/components/AppMenu.vue?d0fd","webpack:///nextcloud/core/src/components/UserMenu/UserMenuEntry.vue","webpack:///nextcloud/core/src/components/UserMenu/UserMenuEntry.vue?vue&type=script&lang=js&","webpack://nextcloud/./core/src/components/UserMenu/UserMenuEntry.vue?6a6f","webpack://nextcloud/./core/src/components/UserMenu/UserMenuEntry.vue?a480","webpack://nextcloud/./core/src/components/UserMenu/UserMenuEntry.vue?4de1","webpack:///nextcloud/core/src/views/UserMenu.vue","webpack:///nextcloud/core/src/views/UserMenu.vue?vue&type=script&lang=js&","webpack://nextcloud/./core/src/views/UserMenu.vue?3de1","webpack://nextcloud/./core/src/views/UserMenu.vue?5d6d","webpack://nextcloud/./core/src/views/UserMenu.vue?4b20","webpack:///nextcloud/core/src/init.js","webpack:///nextcloud/core/src/Polyfill/tooltip.js","webpack:///nextcloud/core/src/components/UserMenu.js","webpack:///nextcloud/core/src/components/MainMenu.js","webpack:///nextcloud/core/src/components/ContactsMenu.js","webpack:///nextcloud/core/src/OCP/comments.js","webpack:///nextcloud/core/src/OCP/whatsnew.js","webpack:///nextcloud/core/src/OCP/accessibility.js","webpack:///nextcloud/core/src/globals.js","webpack:///nextcloud/core/src/OCP/collaboration.js","webpack:///nextcloud/core/src/OCP/loader.js","webpack:///nextcloud/core/src/OCP/toast.js","webpack:///nextcloud/core/src/OCP/index.js","webpack:///nextcloud/core/src/jquery/avatar.js","webpack:///nextcloud/core/src/jquery/contactsmenu.js","webpack:///nextcloud/core/src/jquery/exists.js","webpack:///nextcloud/core/src/jquery/filterattr.js","webpack:///nextcloud/core/src/jquery/ocdialog.js","webpack:///nextcloud/core/src/jquery/octemplate.js","webpack:///nextcloud/core/src/jquery/placeholder.js","webpack:///nextcloud/core/src/jquery/requesttoken.js","webpack:///nextcloud/core/src/jquery/selectrange.js","webpack:///nextcloud/core/src/jquery/showpassword.js","webpack:///nextcloud/core/src/jquery/ui-fixes.js","webpack://nextcloud/./core/src/jquery/css/jquery-ui-fixes.scss?a4c2","webpack://nextcloud/./core/src/jquery/css/jquery.ocdialog.scss?5718","webpack:///nextcloud/core/src/jquery/index.js","webpack:///nextcloud/core/src/main.js","webpack:///nextcloud/core/src/jquery/css/jquery-ui-fixes.scss","webpack:///nextcloud/core/src/jquery/css/jquery.ocdialog.scss","webpack:///nextcloud/core/src/components/AppMenu.vue?vue&type=style&index=0&id=b778f520&prod&lang=scss&scoped=true&","webpack:///nextcloud/core/src/components/UserMenu/UserMenuEntry.vue?vue&type=style&index=0&id=6e59d13c&prod&lang=scss&scoped=true&","webpack:///nextcloud/core/src/views/ContactsMenu.vue?vue&type=style&index=0&id=1563c388&prod&lang=scss&scoped=true&","webpack:///nextcloud/core/src/views/UserMenu.vue?vue&type=style&index=0&id=6a818bbc&prod&lang=scss&scoped=true&","webpack:///nextcloud/core/src/OC/contactsmenu/contact.handlebars","webpack:///nextcloud/core/src/OC/contactsmenu/error.handlebars","webpack:///nextcloud/core/src/OC/contactsmenu/list.handlebars","webpack:///nextcloud/core/src/OC/contactsmenu/loading.handlebars","webpack:///nextcloud/core/src/OC/contactsmenu/menu.handlebars","webpack:///nextcloud/core/src/jquery/contactsmenu/jquery_entry.handlebars","webpack:///nextcloud/node_modules/moment/locale|sync|/^\\.\\/.*$","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/** @typedef {import('jquery')} jQuery */\nimport $ from 'jquery'\nimport { generateFilePath } from '@nextcloud/router'\n\nconst loadedScripts = {}\nconst loadedStyles = []\n\n/**\n * Load a script for the server and load it. If the script is already loaded,\n * the event handler will be called directly\n *\n * @param {string} app the app id to which the script belongs\n * @param {string} script the filename of the script\n * @param {Function} ready event handler to be called when the script is loaded\n * @return {jQuery.Deferred}\n * @deprecated 16.0.0 Use OCP.Loader.loadScript\n */\nexport const addScript = (app, script, ready) => {\n\tconsole.warn('OC.addScript is deprecated, use OCP.Loader.loadScript instead')\n\n\tlet deferred\n\tconst path = generateFilePath(app, 'js', script + '.js')\n\tif (!loadedScripts[path]) {\n\t\tdeferred = $.Deferred()\n\t\t$.getScript(path, () => deferred.resolve())\n\t\tloadedScripts[path] = deferred\n\t} else {\n\t\tif (ready) {\n\t\t\tready()\n\t\t}\n\t}\n\treturn loadedScripts[path]\n}\n\n/**\n * Loads a CSS file\n *\n * @param {string} app the app id to which the css style belongs\n * @param {string} style the filename of the css file\n * @deprecated 16.0.0 Use OCP.Loader.loadStylesheet\n */\nexport const addStyle = (app, style) => {\n\tconsole.warn('OC.addStyle is deprecated, use OCP.Loader.loadStylesheet instead')\n\n\tconst path = generateFilePath(app, 'css', style + '.css')\n\tif (loadedStyles.indexOf(path) === -1) {\n\t\tloadedStyles.push(path)\n\t\tif (document.createStyleSheet) {\n\t\t\tdocument.createStyleSheet(path)\n\t\t} else {\n\t\t\tstyle = $('<link rel=\"stylesheet\" type=\"text/css\" href=\"' + path + '\"/>')\n\t\t\t$('head').append(style)\n\t\t}\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author npmbuildbot[bot] \"npmbuildbot[bot]@users.noreply.github.com\"\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\n/** @typedef {import('jquery')} jQuery */\nimport $ from 'jquery'\nimport { showMessage, TOAST_DEFAULT_TIMEOUT, TOAST_PERMANENT_TIMEOUT } from '@nextcloud/dialogs'\n\n/**\n * @todo Write documentation\n * @deprecated 17.0.0 use the `@nextcloud/dialogs` package instead\n * @namespace OC.Notification\n */\nexport default {\n\n\tupdatableNotification: null,\n\n\tgetDefaultNotificationFunction: null,\n\n\t/**\n\t * @param {Function} callback callback function\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tsetDefault(callback) {\n\t\tthis.getDefaultNotificationFunction = callback\n\t},\n\n\t/**\n\t * Hides a notification.\n\t *\n\t * If a row is given, only hide that one.\n\t * If no row is given, hide all notifications.\n\t *\n\t * @param {jQuery} [$row] notification row\n\t * @param {Function} [callback] callback\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\thide($row, callback) {\n\t\tif (_.isFunction($row)) {\n\t\t\t// first arg is the callback\n\t\t\tcallback = $row\n\t\t\t$row = undefined\n\t\t}\n\n\t\tif (!$row) {\n\t\t\tconsole.error('Missing argument $row in OC.Notification.hide() call, caller needs to be adjusted to only dismiss its own notification')\n\t\t\treturn\n\t\t}\n\n\t\t// remove the row directly\n\t\t$row.each(function() {\n\t\t\tif ($(this)[0].toastify) {\n\t\t\t\t$(this)[0].toastify.hideToast()\n\t\t\t} else {\n\t\t\t\tconsole.error('cannot hide toast because object is not set')\n\t\t\t}\n\t\t\tif (this === this.updatableNotification) {\n\t\t\t\tthis.updatableNotification = null\n\t\t\t}\n\t\t})\n\t\tif (callback) {\n\t\t\tcallback.call()\n\t\t}\n\t\tif (this.getDefaultNotificationFunction) {\n\t\t\tthis.getDefaultNotificationFunction()\n\t\t}\n\t},\n\n\t/**\n\t * Shows a notification as HTML without being sanitized before.\n\t * If you pass unsanitized user input this may lead to a XSS vulnerability.\n\t * Consider using show() instead of showHTML()\n\t *\n\t * @param {string} html Message to display\n\t * @param {object} [options] options\n\t * @param {string} [options.type] notification type\n\t * @param {number} [options.timeout=0] timeout value, defaults to 0 (permanent)\n\t * @return {jQuery} jQuery element for notification row\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshowHtml(html, options) {\n\t\toptions = options || {}\n\t\toptions.isHTML = true\n\t\toptions.timeout = (!options.timeout) ? TOAST_PERMANENT_TIMEOUT : options.timeout\n\t\tconst toast = showMessage(html, options)\n\t\ttoast.toastElement.toastify = toast\n\t\treturn $(toast.toastElement)\n\t},\n\n\t/**\n\t * Shows a sanitized notification\n\t *\n\t * @param {string} text Message to display\n\t * @param {object} [options] options\n\t * @param {string} [options.type] notification type\n\t * @param {number} [options.timeout=0] timeout value, defaults to 0 (permanent)\n\t * @return {jQuery} jQuery element for notification row\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshow(text, options) {\n\t\tconst escapeHTML = function(text) {\n\t\t\treturn text.toString()\n\t\t\t\t.split('&').join('&')\n\t\t\t\t.split('<').join('<')\n\t\t\t\t.split('>').join('>')\n\t\t\t\t.split('\"').join('"')\n\t\t\t\t.split('\\'').join(''')\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/** @type {string} */\n\ttagName: 'ul',\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 {string} */\n\ttagName: 'li',\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\treturn this\n\t},\n\n\t/**\n\t * Toggle the visibility of the action popover menu\n\t *\n\t * @private\n\t * @returns {undefined}\n\t */\n\t_onToggleActionsMenu: function() {\n\t\tthis._actionMenuShown = !this._actionMenuShown\n\t\tif (this._actionMenuShown) {\n\t\t\tthis.$('.menu').show()\n\t\t} else {\n\t\t\tthis.$('.menu').hide()\n\t\t}\n\t\tthis.trigger('toggle:actionmenu', this.$el)\n\t},\n\n\t/**\n\t * @private\n\t * @argument {jQuery} $src\n\t * @returns {undefined}\n\t */\n\t_onOtherActionMenuOpened: function($src) {\n\t\tif (this.$el.is($src)) {\n\t\t\t// Ignore\n\t\t\treturn\n\t\t}\n\t\tthis._actionMenuShown = false\n\t\tthis.$('.menu').hide()\n\t}\n})\n\n/**\n * @class ContactsMenuView\n * @private\n */\nconst ContactsMenuView = View.extend({\n\n\t/** @type {undefined|function} */\n\t_loadingTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_errorTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_contentTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_contactsTemplate: undefined,\n\n\t/** @type {undefined|ContactCollection} */\n\t_contacts: undefined,\n\n\t/** @type {string} */\n\t_searchTerm: '',\n\n\tevents: {\n\t\t'input #contactsmenu-search': '_onSearch'\n\t},\n\n\ttemplates: {\n\t\tloading: require('./contactsmenu/loading.handlebars'),\n\t\terror: require('./contactsmenu/error.handlebars'),\n\t\tmenu: require('./contactsmenu/menu.handlebars'),\n\t\tlist: require('./contactsmenu/list.handlebars')\n\t},\n\n\t/**\n\t * @returns {undefined}\n\t */\n\t_onSearch: _.debounce(function(e) {\n\t\tvar searchTerm = this.$('#contactsmenu-search').val()\n\t\t// IE11 triggers an 'input' event after the view has been rendered\n\t\t// resulting in an endless loading loop. To prevent this, we remember\n\t\t// the last search term to savely ignore some events\n\t\t// See https://github.com/nextcloud/server/issues/5281\n\t\tif (searchTerm !== this._searchTerm) {\n\t\t\tthis.trigger('search', this.$('#contactsmenu-search').val())\n\t\t\tthis._searchTerm = searchTerm\n\t\t}\n\t}, 700),\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tloadingTemplate: function(data) {\n\t\treturn this.templates.loading(data)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\terrorTemplate: function(data) {\n\t\treturn this.templates.error(\n\t\t\t_.extend({\n\t\t\t\tcouldNotLoadText: t('core', 'Could not load your contacts')\n\t\t\t}, data)\n\t\t)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tcontentTemplate: function(data) {\n\t\treturn this.templates.menu(\n\t\t\t_.extend({\n\t\t\t\tsearchContactsText: t('core', 'Search contacts …')\n\t\t\t}, data)\n\t\t)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tcontactsTemplate: function(data) {\n\t\treturn this.templates.list(\n\t\t\t_.extend({\n\t\t\t\tnoContactsFoundText: t('core', 'No contacts found'),\n\t\t\t\tshowAllContactsText: t('core', 'Show all contacts …'),\n\t\t\t\tcontactsAppMgmtText: t('core', 'Install the Contacts app')\n\t\t\t}, data)\n\t\t)\n\t},\n\n\t/**\n\t * @param {object} options\n\t * @returns {undefined}\n\t */\n\tinitialize: function(options) {\n\t\tthis.options = options\n\t},\n\n\t/**\n\t * @param {string} text\n\t * @returns {undefined}\n\t */\n\tshowLoading: function(text) {\n\t\tthis.render()\n\t\tthis._contacts = undefined\n\t\tthis.$('.content').html(this.loadingTemplate({\n\t\t\tloadingText: text\n\t\t}))\n\t},\n\n\t/**\n\t * @returns {undefined}\n\t */\n\tshowError: function() {\n\t\tthis.render()\n\t\tthis._contacts = undefined\n\t\tthis.$('.content').html(this.errorTemplate())\n\t},\n\n\t/**\n\t * @param {object} viewData\n\t * @param {string} searchTerm\n\t * @returns {undefined}\n\t */\n\tshowContacts: function(viewData, searchTerm) {\n\t\tthis._contacts = viewData.contacts\n\t\tthis.render({\n\t\t\tcontacts: viewData.contacts\n\t\t})\n\n\t\tvar list = new ContactsListView({\n\t\t\tcollection: viewData.contacts\n\t\t})\n\t\tlist.render()\n\t\tthis.$('.content').html(this.contactsTemplate({\n\t\t\tcontacts: viewData.contacts,\n\t\t\tsearchTerm: searchTerm,\n\t\t\tcontactsAppEnabled: viewData.contactsAppEnabled,\n\t\t\tcontactsAppURL: OC.generateUrl('/apps/contacts'),\n\t\t\tcanInstallApp: OC.isUserAdmin(),\n\t\t\tcontactsAppMgmtURL: OC.generateUrl('/settings/apps/social/contacts')\n\t\t}))\n\t\tthis.$('#contactsmenu-contacts').html(list.$el)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {self}\n\t */\n\trender: function(data) {\n\t\tvar searchVal = this.$('#contactsmenu-search').val()\n\t\tthis.$el.html(this.contentTemplate(data))\n\n\t\t// Focus search\n\t\tthis.$('#contactsmenu-search').val(searchVal)\n\t\tthis.$('#contactsmenu-search').focus()\n\t\treturn this\n\t}\n\n})\n\n/**\n * @param {Object} options\n * @param {string} options.el\n * @class ContactsMenu\n * @memberOf OC\n */\nconst ContactsMenu = function(options) {\n\tthis.initialize(options)\n}\n\nContactsMenu.prototype = {\n\t/** @type {string} */\n\t$el: undefined,\n\n\t/** @type {ContactsMenuView} */\n\t_view: undefined,\n\n\t/** @type {Promise} */\n\t_contactsPromise: undefined,\n\n\t/**\n\t * @param {Object} options\n\t * @param {string} options.el - the selector of the element to render the menu in\n\t * @returns {undefined}\n\t */\n\tinitialize: function(options) {\n\t\tthis.$el = $(options.el)\n\n\t\tthis._view = new ContactsMenuView({\n\t\t\tel: this.$el,\n\t\t})\n\n\t\tthis._view.on('search', function(searchTerm) {\n\t\t\tthis.loadContacts(searchTerm)\n\t\t}, this)\n\t},\n\n\t/**\n\t * @private\n\t * @param {string|undefined} searchTerm\n\t * @returns {Promise}\n\t */\n\t_getContacts: function(searchTerm) {\n\t\tvar url = OC.generateUrl('/contactsmenu/contacts')\n\t\treturn Promise.resolve($.ajax(url, {\n\t\t\tmethod: 'POST',\n\t\t\tdata: {\n\t\t\t\tfilter: searchTerm\n\t\t\t}\n\t\t}))\n\t},\n\n\t/**\n\t * @param {string|undefined} searchTerm\n\t * @returns {undefined}\n\t */\n\tloadContacts: function(searchTerm) {\n\t\tvar self = this\n\n\t\tif (!self._contactsPromise) {\n\t\t\tself._contactsPromise = self._getContacts(searchTerm)\n\t\t}\n\n\t\tif (_.isUndefined(searchTerm) || searchTerm === '') {\n\t\t\tself._view.showLoading(t('core', 'Loading your contacts …'))\n\t\t} else {\n\t\t\tself._view.showLoading(t('core', 'Looking for {term} …', {\n\t\t\t\tterm: searchTerm\n\t\t\t}))\n\t\t}\n\t\treturn self._contactsPromise.then(function(data) {\n\t\t\t// Convert contact entries to Backbone collection\n\t\t\tdata.contacts = new ContactCollection(data.contacts)\n\n\t\t\tself._view.showContacts(data, searchTerm)\n\t\t}, function(e) {\n\t\t\tself._view.showError()\n\t\t\tconsole.error('There was an error loading your contacts', e)\n\t\t}).then(function() {\n\t\t\t// Delete promise, so that contacts are fetched again when the\n\t\t\t// menu is opened the next time.\n\t\t\tdelete self._contactsPromise\n\t\t}).catch(console.error.bind(this))\n\t}\n}\n\nexport default ContactsMenu\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Joas Schilling <coding@schilljs.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst rawUid = document\n\t.getElementsByTagName('head')[0]\n\t.getAttribute('data-user')\nconst displayName = document\n\t.getElementsByTagName('head')[0]\n\t.getAttribute('data-user-displayname')\n\nexport const currentUser = rawUid !== undefined ? rawUid : false\n\nexport const getCurrentUser = () => {\n\treturn {\n\t\tuid: currentUser,\n\t\tdisplayName,\n\t}\n}\n","/**\n * @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class Search {\n\n\t/**\n\t * @deprecated 20.0.0, will be removed in Nextcloud 22\n\t */\n\tconstructor() {\n\t\tconsole.warn('OCA.Search is deprecated. Please use the unified search API instead')\n\t}\n\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Search from './search'\n\n/**\n * Namespace for apps\n *\n * @namespace OCA\n */\nexport default {\n\t/**\n\t * @deprecated 20.0.0, will be removed in Nextcloud 22\n\t */\n\tSearch,\n}\n","/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/**\n * Return whether the DOM event is an accessible mouse or keyboard element activation\n *\n * @param {Event} event DOM event\n *\n * @return {boolean}\n */\nexport const isA11yActivation = (event) => {\n\tif (event.type === 'click') {\n\t\treturn true\n\t}\n\tif (event.type === 'keydown' && event.key === 'Enter') {\n\t\treturn true\n\t}\n\treturn false\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author Bartek Przybylski <bart.p.pl@gmail.com>\n * @author Christopher Schäpers <kondou@ts.unde.re>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author Daniel Kesselberg <mail@danielkesselberg.de>\n * @author Florian Schunk <florian.schunk@rwth-aachen.de>\n * @author Gary Kim <gary@garykim.dev>\n * @author Hendrik Leppelsack <hendrik@leppelsack.de>\n * @author Jan-Christoph Borchardt <hey@jancborchardt.net>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Jörn Friedrich Dreyer <jfd@butonic.de>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Loïc Hermann <loic.hermann@sciam.fr>\n * @author Morris Jobke <hey@morrisjobke.de>\n * @author Olivier Paroz <github@oparoz.com>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Sujith Haridasan <Sujith_Haridasan@mentor.com>\n * @author Thomas Citharel <nextcloud@tcit.fr>\n * @author Thomas Müller <thomas.mueller@tmit.eu>\n * @author Thomas Tanghus <thomas@tanghus.net>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport _ from 'underscore'\nimport $ from 'jquery'\n\nimport OC from './index'\nimport OCA from '../OCA/index'\nimport { isA11yActivation } from '../Util/a11y'\n\n/**\n * this class to ease the usage of jquery dialogs\n */\nconst Dialogs = {\n\t// dialog button types\n\tYES_NO_BUTTONS: 70,\n\tOK_BUTTONS: 71,\n\n\tFILEPICKER_TYPE_CHOOSE: 1,\n\tFILEPICKER_TYPE_MOVE: 2,\n\tFILEPICKER_TYPE_COPY: 3,\n\tFILEPICKER_TYPE_COPY_MOVE: 4,\n\tFILEPICKER_TYPE_CUSTOM: 5,\n\n\t// used to name each dialog\n\tdialogsCounter: 0,\n\n\t/**\n\t * displays alert dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK\n\t * @param {boolean} [modal] make the dialog modal\n\t */\n\talert: function(text, title, callback, modal) {\n\t\tthis.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'alert',\n\t\t\tDialogs.OK_BUTTON,\n\t\t\tcallback,\n\t\t\tmodal\n\t\t)\n\t},\n\t/**\n\t * displays info dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK\n\t * @param {boolean} [modal] make the dialog modal\n\t */\n\tinfo: function(text, title, callback, modal) {\n\t\tthis.message(text, title, 'info', Dialogs.OK_BUTTON, callback, modal)\n\t},\n\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirm: function(text, title, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'notice',\n\t\t\tDialogs.YES_NO_BUTTONS,\n\t\t\tcallback,\n\t\t\tmodal\n\t\t)\n\t},\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {(number|{type: number, confirm: string, cancel: string, confirmClasses: string})} buttons text content of buttons\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirmDestructive: function(text, title, buttons, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'none',\n\t\t\tbuttons,\n\t\t\tcallback,\n\t\t\tmodal === undefined ? true : modal\n\t\t)\n\t},\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirmHtml: function(text, title, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'notice',\n\t\t\tDialogs.YES_NO_BUTTONS,\n\t\t\tcallback,\n\t\t\tmodal,\n\t\t\ttrue\n\t\t)\n\t},\n\t/**\n\t * displays prompt dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @param {string} name name of the input field\n\t * @param {boolean} password whether the input should be a password input\n\t * @returns {Promise}\n\t */\n\tprompt: function(text, title, callback, modal, name, password) {\n\t\treturn $.when(this._getMessageTemplate()).then(function($tmpl) {\n\t\t\tvar dialogName = 'oc-dialog-' + Dialogs.dialogsCounter + '-content'\n\t\t\tvar dialogId = '#' + dialogName\n\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\tmessage: text,\n\t\t\t\ttype: 'notice'\n\t\t\t})\n\t\t\tvar input = $('<input/>')\n\t\t\tinput.attr('type', password ? 'password' : 'text').attr('id', dialogName + '-input').attr('placeholder', name)\n\t\t\tvar label = $('<label/>').attr('for', dialogName + '-input').text(name + ': ')\n\t\t\t$dlg.append(label)\n\t\t\t$dlg.append(input)\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false\n\t\t\t}\n\t\t\t$('body').append($dlg)\n\n\t\t\t// wrap callback in _.once():\n\t\t\t// only call callback once and not twice (button handler and close\n\t\t\t// event) but call it for the close event, if ESC or the x is hit\n\t\t\tif (callback !== undefined) {\n\t\t\t\tcallback = _.once(callback)\n\t\t\t}\n\n\t\t\tvar buttonlist = [{\n\t\t\t\ttext: t('core', 'No'),\n\t\t\t\tclick: function() {\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(false, input.val())\n\t\t\t\t\t}\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\ttext: t('core', 'Yes'),\n\t\t\t\tclick: function() {\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(true, input.val())\n\t\t\t\t\t}\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t},\n\t\t\t\tdefaultButton: true\n\t\t\t}]\n\n\t\t\t$(dialogId).ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist,\n\t\t\t\tclose: function() {\n\t\t\t\t\t// callback is already fired if Yes/No is clicked directly\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(false, input.val())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\tinput.focus()\n\t\t\tDialogs.dialogsCounter++\n\t\t})\n\t},\n\t/**\n\t * show a file picker to pick a file from\n\t *\n\t * In order to pick several types of mime types they need to be passed as an\n\t * array of strings.\n\t *\n\t * When no mime type filter is given only files can be selected. In order to\n\t * be able to select both files and folders \"['*', 'httpd/unix-directory']\"\n\t * should be used instead.\n\t *\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses Choose\n\t * @param {boolean} [multiselect] whether it should be possible to select multiple files\n\t * @param {string[]} [mimetypeFilter] mimetype to filter by - directories will always be included\n\t * @param {boolean} [modal] make the dialog modal\n\t * @param {string} [type] Type of file picker : Choose, copy, move, copy and move\n\t * @param {string} [path] path to the folder that the the file can be picket from\n\t * @param {Object} [options] additonal options that need to be set\n\t * @param {Function} [options.filter] filter function for advanced filtering\n\t */\n\tfilepicker: function(title, callback, multiselect, mimetypeFilter, modal, type, path, options) {\n\t\tvar self = this\n\n\t\tthis.filepicker.sortField = 'name'\n\t\tthis.filepicker.sortOrder = 'asc'\n\t\t// avoid opening the picker twice\n\t\tif (this.filepicker.loading) {\n\t\t\treturn\n\t\t}\n\n\t\tif (type === undefined) {\n\t\t\ttype = this.FILEPICKER_TYPE_CHOOSE\n\t\t}\n\n\t\tvar emptyText = t('core', 'No files in here')\n\t\tvar newText = t('files', 'New folder')\n\t\tif (type === this.FILEPICKER_TYPE_COPY || type === this.FILEPICKER_TYPE_MOVE || type === this.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\temptyText = t('core', 'No more subfolders in here')\n\t\t}\n\n\t\tthis.filepicker.loading = true\n\t\tthis.filepicker.filesClient = (OCA.Sharing && OCA.Sharing.PublicApp && OCA.Sharing.PublicApp.fileList) ? OCA.Sharing.PublicApp.fileList.filesClient : OC.Files.getClient()\n\n\t\tthis.filelist = null\n\t\tpath = path || ''\n\t\toptions = Object.assign({\n\t\t\tallowDirectoryChooser: false\n\t\t}, options)\n\n\t\t$.when(this._getFilePickerTemplate()).then(function($tmpl) {\n\t\t\tself.filepicker.loading = false\n\t\t\tvar dialogName = 'oc-dialog-filepicker-content'\n\t\t\tif (self.$filePicker) {\n\t\t\t\tself.$filePicker.ocdialog('close')\n\t\t\t}\n\n\t\t\tif (mimetypeFilter === undefined || mimetypeFilter === null) {\n\t\t\t\tmimetypeFilter = []\n\t\t\t}\n\t\t\tif (typeof (mimetypeFilter) === 'string') {\n\t\t\t\tmimetypeFilter = [mimetypeFilter]\n\t\t\t}\n\n\t\t\tself.$filePicker = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\temptytext: emptyText,\n\t\t\t\tnewtext: newText,\n\t\t\t\tnameCol: t('core', 'Name'),\n\t\t\t\tsizeCol: t('core', 'Size'),\n\t\t\t\tmodifiedCol: t('core', 'Modified')\n\t\t\t}).data('path', path).data('multiselect', multiselect).data('mimetype', mimetypeFilter).data('allowDirectoryChooser', options.allowDirectoryChooser)\n\t\t\tif (typeof(options.filter) === 'function') {\n\t\t\t\tself.$filePicker.data('filter', options.filter)\n\t\t\t}\n\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false\n\t\t\t}\n\t\t\tif (multiselect === undefined) {\n\t\t\t\tmultiselect = false\n\t\t\t}\n\n\t\t\t$(options?.target ?? 'body').prepend(self.$filePicker)\n\n\t\t\tself.$showGridView = $('button#picker-showgridview')\n\t\t\tself.$showGridView.on('click keydown', function(event) {\n\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\tself._onGridviewChange()\n\t\t\t\t}\n\t\t\t})\n\t\t\tself._getGridSettings()\n\n\t\t\tvar newButton = self.$filePicker.find('.actions.creatable .button-add')\n\t\t\tif (type === self.FILEPICKER_TYPE_CHOOSE && !options.allowDirectoryChooser) {\n\t\t\t\tself.$filePicker.find('.actions.creatable').hide()\n\t\t\t}\n\t\t\tnewButton.on('focus', function() {\n\t\t\t\tself.$filePicker.ocdialog('setEnterCallback', function(event) {\n\t\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tnewButton.click()\n\t\t\t\t})\n\t\t\t})\n\t\t\tnewButton.on('blur', function() {\n\t\t\t\tself.$filePicker.ocdialog('unsetEnterCallback')\n\t\t\t})\n\n\t\t\tOC.registerMenu(newButton, self.$filePicker.find('.menu'), function() {\n\t\t\t\t$input.tooltip('hide')\n\t\t\t\t$input.focus()\n\t\t\t\tself.$filePicker.ocdialog('setEnterCallback', function(event) {\n\t\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tself.$filePicker.submit()\n\t\t\t\t})\n\t\t\t\tvar newName = $input.val()\n\t\t\t\tvar lastPos = newName.lastIndexOf('.')\n\t\t\t\tif (lastPos === -1) {\n\t\t\t\t\tlastPos = newName.length\n\t\t\t\t}\n\t\t\t\t$input.selectRange(0, lastPos)\n\t\t\t})\n\t\t\tvar $form = self.$filePicker.find('.filenameform')\n\t\t\tvar $input = $form.find('input[type=\\'text\\']')\n\t\t\tvar $submit = $form.find('input[type=\\'submit\\']')\n\t\t\t$input.on('keydown', function(event) {\n\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t$form.submit()\n\t\t\t\t}\n\t\t\t})\n\t\t\t$submit.on('click', function(event) {\n\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\tevent.preventDefault()\n\t\t\t\t$form.submit()\n\t\t\t})\n\n\t\t\t/**\n\t\t\t * Checks whether the given file name is valid.\n\t\t\t *\n\t\t\t * @param name file name to check\n\t\t\t * @return true if the file name is valid.\n\t\t\t * @throws a string exception with an error message if\n\t\t\t * the file name is not valid\n\t\t\t *\n\t\t\t * NOTE: This function is duplicated in the files app:\n\t\t\t * https://github.com/nextcloud/server/blob/b9bc2417e7a8dc81feb0abe20359bedaf864f790/apps/files/js/files.js#L127-L148\n\t\t\t */\n\t\t\tvar isFileNameValid = function (name) {\n\t\t\t\tvar trimmedName = name.trim();\n\t\t\t\tif (trimmedName === '.' || trimmedName === '..')\n\t\t\t\t{\n\t\t\t\t\tthrow t('files', '\"{name}\" is an invalid file name.', {name: name})\n\t\t\t\t} else if (trimmedName.length === 0) {\n\t\t\t\t\tthrow t('files', 'File name cannot be empty.')\n\t\t\t\t} else if (trimmedName.indexOf('/') !== -1) {\n\t\t\t\t\tthrow t('files', '\"/\" is not allowed inside a file name.')\n\t\t\t\t} else if (!!(trimmedName.match(OC.config.blacklist_files_regex))) {\n\t\t\t\t\tthrow t('files', '\"{name}\" is not an allowed filetype', {name: name})\n\t\t\t\t}\n\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\tvar checkInput = function() {\n\t\t\t\tvar filename = $input.val()\n\t\t\t\ttry {\n\t\t\t\t\tif (!isFileNameValid(filename)) {\n\t\t\t\t\t\t// isFileNameValid(filename) throws an exception itself\n\t\t\t\t\t} else if (self.filelist.find(function(file) {\n\t\t\t\t\t\treturn file.name === this\n\t\t\t\t\t}, filename)) {\n\t\t\t\t\t\tthrow t('files', '{newName} already exists', { newName: filename }, undefined, {\n\t\t\t\t\t\t\tescape: false\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn true\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\t$input.attr('title', error)\n\t\t\t\t\t$input.tooltip({\n\t\t\t\t\t\tplacement: 'right',\n\t\t\t\t\t\ttrigger: 'manual',\n\t\t\t\t\t\t'container': '.newFolderMenu'\n\t\t\t\t\t})\n\t\t\t\t\t$input.tooltip('_fixTitle')\n\t\t\t\t\t$input.tooltip('show')\n\t\t\t\t\t$input.addClass('error')\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\t$form.on('submit', function(event) {\n\t\t\t\tevent.stopPropagation()\n\t\t\t\tevent.preventDefault()\n\n\t\t\t\tif (checkInput()) {\n\t\t\t\t\tvar newname = $input.val()\n\t\t\t\t\tself.filepicker.filesClient.createDirectory(self.$filePicker.data('path') + \"/\" + newname).always(function (status) {\n\t\t\t\t\t\tself._fillFilePicker(self.$filePicker.data('path') + \"/\" + newname, type)\n\t\t\t\t\t})\n\t\t\t\t\tOC.hideMenus()\n\t\t\t\t\tself.$filePicker.ocdialog('unsetEnterCallback')\n\t\t\t\t\tself.$filePicker.click()\n\t\t\t\t\t$input.val(newText)\n\t\t\t\t}\n\t\t\t})\n\t\t\t$input.on('input', function(event) {\n\t\t\t\t$input.tooltip('hide')\n\t\t\t})\n\n\t\t\tself.$filePicker.ready(function() {\n\t\t\t\tself.$fileListHeader = self.$filePicker.find('.filelist thead tr')\n\t\t\t\tself.$filelist = self.$filePicker.find('.filelist tbody')\n\t\t\t\tself.$filelistContainer = self.$filePicker.find('.filelist-container')\n\t\t\t\tself.$dirTree = self.$filePicker.find('.dirtree')\n\t\t\t\tself.$dirTree.on('click keydown', 'div:not(:last-child)', self, function(event) {\n\t\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\t\tself._handleTreeListSelect(event, type)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tself.$filelist.on('click keydown', 'tr', function(event) {\n\t\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\t\tself._handlePickerClick(event, $(this), type)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tself.$fileListHeader.on('click keydown', 'a', function(event) {\n\t\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\t\tvar dir = self.$filePicker.data('path')\n\t\t\t\t\t\tself.filepicker.sortField = $(event.currentTarget).data('sort')\n\t\t\t\t\t\tself.filepicker.sortOrder = self.filepicker.sortOrder === 'asc' ? 'desc' : 'asc'\n\t\t\t\t\t\tself._fillFilePicker(dir, type)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tself._fillFilePicker(path, type)\n\t\t\t})\n\n\t\t\t// build buttons\n\t\t\tvar functionToCall = function(returnType) {\n\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\tvar datapath\n\t\t\t\t\tif (multiselect === true) {\n\t\t\t\t\t\tdatapath = []\n\t\t\t\t\t\tself.$filelist.find('tr.filepicker_element_selected').each(function(index, element) {\n\t\t\t\t\t\t\tdatapath.push(self.$filePicker.data('path') + '/' + $(element).data('entryname'))\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdatapath = self.$filePicker.data('path')\n\t\t\t\t\t\tvar selectedName = self.$filelist.find('tr.filepicker_element_selected').data('entryname')\n\t\t\t\t\t\tif (selectedName) {\n\t\t\t\t\t\t\tdatapath += '/' + selectedName\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcallback(datapath, returnType)\n\t\t\t\t\tself.$filePicker.ocdialog('close')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar chooseCallback = function() {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_CHOOSE)\n\t\t\t}\n\n\t\t\tvar copyCallback = function() {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_COPY)\n\t\t\t}\n\n\t\t\tvar moveCallback = function() {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_MOVE)\n\t\t\t}\n\n\t\t\tvar buttonlist = []\n\t\t\tif (type === Dialogs.FILEPICKER_TYPE_CHOOSE) {\n\t\t\t\tbuttonlist.push({\n\t\t\t\t\ttext: t('core', 'Choose'),\n\t\t\t\t\tclick: chooseCallback,\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t})\n\t\t\t} else if (type === Dialogs.FILEPICKER_TYPE_CUSTOM) {\n\t\t\t\toptions.buttons.forEach(function(button) {\n\t\t\t\t\tbuttonlist.push({\n\t\t\t\t\t\ttext: button.text,\n\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\tfunctionToCall(button.type)\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdefaultButton: button.defaultButton\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tif (type === Dialogs.FILEPICKER_TYPE_COPY || type === Dialogs.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\t\t\tbuttonlist.push({\n\t\t\t\t\t\ttext: t('core', 'Copy'),\n\t\t\t\t\t\tclick: copyCallback,\n\t\t\t\t\t\tdefaultButton: false\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (type === Dialogs.FILEPICKER_TYPE_MOVE || type === Dialogs.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\t\t\tbuttonlist.push({\n\t\t\t\t\t\ttext: t('core', 'Move'),\n\t\t\t\t\t\tclick: moveCallback,\n\t\t\t\t\t\tdefaultButton: true\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tself.$filePicker.ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\t// max-width of 600\n\t\t\t\twidth: 600,\n\t\t\t\theight: 500,\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist,\n\t\t\t\tstyle: {\n\t\t\t\t\tbuttons: 'aside'\n\t\t\t\t},\n\t\t\t\tclose: function() {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t$(this).ocdialog('destroy').remove()\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t}\n\t\t\t\t\tself.$filePicker = null\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// We can access primary class only from oc-dialog.\n\t\t\t// Hence this is one of the approach to get the choose button.\n\t\t\tvar getOcDialog = self.$filePicker.closest('.oc-dialog')\n\t\t\tvar buttonEnableDisable = getOcDialog.find('.primary')\n\t\t\tif (self.$filePicker.data('mimetype').indexOf('httpd/unix-directory') !== -1 || self.$filePicker.data('allowDirectoryChooser')) {\n\t\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t\t} else {\n\t\t\t\tbuttonEnableDisable.prop('disabled', true)\n\t\t\t}\n\t\t})\n\t\t\t.fail(function(status, error) {\n\t\t\t\t// If the method is called while navigating away\n\t\t\t\t// from the page, it is probably not needed ;)\n\t\t\t\tself.filepicker.loading = false\n\t\t\t\tif (status !== 0) {\n\t\t\t\t\talert(t('core', 'Error loading file picker template: {error}', { error: error }))\n\t\t\t\t}\n\t\t\t})\n\t},\n\t/**\n\t * Displays raw dialog\n\t * You better use a wrapper instead ...\n\t */\n\tmessage: function(content, title, dialogType, buttons, callback, modal, allowHtml) {\n\t\treturn $.when(this._getMessageTemplate()).then(function($tmpl) {\n\t\t\tvar dialogName = 'oc-dialog-' + Dialogs.dialogsCounter + '-content'\n\t\t\tvar dialogId = '#' + dialogName\n\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\tmessage: content,\n\t\t\t\ttype: dialogType\n\t\t\t}, allowHtml ? { escapeFunction: '' } : {})\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false\n\t\t\t}\n\t\t\t$('body').append($dlg)\n\t\t\tvar buttonlist = []\n\t\t\tswitch (buttons) {\n\t\t\tcase Dialogs.YES_NO_BUTTONS:\n\t\t\t\tbuttonlist = [{\n\t\t\t\t\ttext: t('core', 'No'),\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\tcallback(false)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttext: t('core', 'Yes'),\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\tcallback(true)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t},\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t}]\n\t\t\t\tbreak\n\t\t\tcase Dialogs.OK_BUTTON:\n\t\t\t\tvar functionToCall = function() {\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\tcallback()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbuttonlist[0] = {\n\t\t\t\t\ttext: t('core', 'OK'),\n\t\t\t\t\tclick: functionToCall,\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tif (typeof(buttons) === 'object') {\n\t\t\t\t\tswitch (buttons.type) {\n\t\t\t\t\t\tcase Dialogs.YES_NO_BUTTONS:\n\t\t\t\t\t\t\tbuttonlist = [{\n\t\t\t\t\t\t\t\ttext: buttons.cancel || t('core', 'No'),\n\t\t\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\t\t\t\tcallback(false)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttext: buttons.confirm || t('core', 'Yes'),\n\t\t\t\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\t\t\t\t\tcallback(true)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdefaultButton: true,\n\t\t\t\t\t\t\t\t\tclasses: buttons.confirmClasses\n\t\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t$(dialogId).ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\tcloseCallback: () => { callback && callback(false) },\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist\n\t\t\t})\n\t\t\tDialogs.dialogsCounter++\n\t\t})\n\t\t\t.fail(function(status, error) {\n\t\t\t\t// If the method is called while navigating away from\n\t\t\t\t// the page, we still want to deliver the message.\n\t\t\t\tif (status === 0) {\n\t\t\t\t\talert(title + ': ' + content)\n\t\t\t\t} else {\n\t\t\t\t\talert(t('core', 'Error loading message template: {error}', { error: error }))\n\t\t\t\t}\n\t\t\t})\n\t},\n\t_fileexistsshown: false,\n\t/**\n\t * Displays file exists dialog\n\t * @param {object} data upload object\n\t * @param {object} original file with name, size and mtime\n\t * @param {object} replacement file with name, size and mtime\n\t * @param {object} controller with onCancel, onSkip, onReplace and onRename methods\n\t * @returns {Promise} jquery promise that resolves after the dialog template was loaded\n\t */\n\tfileexists: function(data, original, replacement, controller) {\n\t\tvar self = this\n\t\tvar dialogDeferred = new $.Deferred()\n\n\t\tvar getCroppedPreview = function(file) {\n\t\t\tvar deferred = new $.Deferred()\n\t\t\t// Only process image files.\n\t\t\tvar type = file.type && file.type.split('/').shift()\n\t\t\tif (window.FileReader && type === 'image') {\n\t\t\t\tvar reader = new FileReader()\n\t\t\t\treader.onload = function(e) {\n\t\t\t\t\tvar blob = new Blob([e.target.result])\n\t\t\t\t\twindow.URL = window.URL || window.webkitURL\n\t\t\t\t\tvar originalUrl = window.URL.createObjectURL(blob)\n\t\t\t\t\tvar image = new Image()\n\t\t\t\t\timage.src = originalUrl\n\t\t\t\t\timage.onload = function() {\n\t\t\t\t\t\tvar url = crop(image)\n\t\t\t\t\t\tdeferred.resolve(url)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treader.readAsArrayBuffer(file)\n\t\t\t} else {\n\t\t\t\tdeferred.reject()\n\t\t\t}\n\t\t\treturn deferred\n\t\t}\n\n\t\tvar crop = function(img) {\n\t\t\tvar canvas = document.createElement('canvas')\n\t\t\tvar targetSize = 96\n\t\t\tvar width = img.width\n\t\t\tvar height = img.height\n\t\t\tvar x; var y; var size\n\n\t\t\t// Calculate the width and height, constraining the proportions\n\t\t\tif (width > height) {\n\t\t\t\ty = 0\n\t\t\t\tx = (width - height) / 2\n\t\t\t} else {\n\t\t\t\ty = (height - width) / 2\n\t\t\t\tx = 0\n\t\t\t}\n\t\t\tsize = Math.min(width, height)\n\n\t\t\t// Set canvas size to the cropped area\n\t\t\tcanvas.width = size\n\t\t\tcanvas.height = size\n\t\t\tvar ctx = canvas.getContext('2d')\n\t\t\tctx.drawImage(img, x, y, size, size, 0, 0, size, size)\n\n\t\t\t// Resize the canvas to match the destination (right size uses 96px)\n\t\t\tresampleHermite(canvas, size, size, targetSize, targetSize)\n\n\t\t\treturn canvas.toDataURL('image/png', 0.7)\n\t\t}\n\n\t\t/**\n\t\t * Fast image resize/resample using Hermite filter with JavaScript.\n\t\t *\n\t\t * @author: ViliusL\n\t\t *\n\t\t * @param {*} canvas\n\t\t * @param {number} W\n\t\t * @param {number} H\n\t\t * @param {number} W2\n\t\t * @param {number} H2\n\t\t */\n\t\tvar resampleHermite = function(canvas, W, H, W2, H2) {\n\t\t\tW2 = Math.round(W2)\n\t\t\tH2 = Math.round(H2)\n\t\t\tvar img = canvas.getContext('2d').getImageData(0, 0, W, H)\n\t\t\tvar img2 = canvas.getContext('2d').getImageData(0, 0, W2, H2)\n\t\t\tvar data = img.data\n\t\t\tvar data2 = img2.data\n\t\t\tvar ratio_w = W / W2\n\t\t\tvar ratio_h = H / H2\n\t\t\tvar ratio_w_half = Math.ceil(ratio_w / 2)\n\t\t\tvar ratio_h_half = Math.ceil(ratio_h / 2)\n\n\t\t\tfor (var j = 0; j < H2; j++) {\n\t\t\t\tfor (var i = 0; i < W2; i++) {\n\t\t\t\t\tvar x2 = (i + j * W2) * 4\n\t\t\t\t\tvar weight = 0\n\t\t\t\t\tvar weights = 0\n\t\t\t\t\tvar weights_alpha = 0\n\t\t\t\t\tvar gx_r = 0\n\t\t\t\t\tvar gx_g = 0\n\t\t\t\t\tvar gx_b = 0\n\t\t\t\t\tvar gx_a = 0\n\t\t\t\t\tvar center_y = (j + 0.5) * ratio_h\n\t\t\t\t\tfor (var yy = Math.floor(j * ratio_h); yy < (j + 1) * ratio_h; yy++) {\n\t\t\t\t\t\tvar dy = Math.abs(center_y - (yy + 0.5)) / ratio_h_half\n\t\t\t\t\t\tvar center_x = (i + 0.5) * ratio_w\n\t\t\t\t\t\tvar w0 = dy * dy // pre-calc part of w\n\t\t\t\t\t\tfor (var xx = Math.floor(i * ratio_w); xx < (i + 1) * ratio_w; xx++) {\n\t\t\t\t\t\t\tvar dx = Math.abs(center_x - (xx + 0.5)) / ratio_w_half\n\t\t\t\t\t\t\tvar w = Math.sqrt(w0 + dx * dx)\n\t\t\t\t\t\t\tif (w >= -1 && w <= 1) {\n\t\t\t\t\t\t\t\t// hermite filter\n\t\t\t\t\t\t\t\tweight = 2 * w * w * w - 3 * w * w + 1\n\t\t\t\t\t\t\t\tif (weight > 0) {\n\t\t\t\t\t\t\t\t\tdx = 4 * (xx + yy * W)\n\t\t\t\t\t\t\t\t\t// alpha\n\t\t\t\t\t\t\t\t\tgx_a += weight * data[dx + 3]\n\t\t\t\t\t\t\t\t\tweights_alpha += weight\n\t\t\t\t\t\t\t\t\t// colors\n\t\t\t\t\t\t\t\t\tif (data[dx + 3] < 255) { weight = weight * data[dx + 3] / 250 }\n\t\t\t\t\t\t\t\t\tgx_r += weight * data[dx]\n\t\t\t\t\t\t\t\t\tgx_g += weight * data[dx + 1]\n\t\t\t\t\t\t\t\t\tgx_b += weight * data[dx + 2]\n\t\t\t\t\t\t\t\t\tweights += weight\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdata2[x2] = gx_r / weights\n\t\t\t\t\tdata2[x2 + 1] = gx_g / weights\n\t\t\t\t\tdata2[x2 + 2] = gx_b / weights\n\t\t\t\t\tdata2[x2 + 3] = gx_a / weights_alpha\n\t\t\t\t}\n\t\t\t}\n\t\t\tcanvas.getContext('2d').clearRect(0, 0, Math.max(W, W2), Math.max(H, H2))\n\t\t\tcanvas.width = W2\n\t\t\tcanvas.height = H2\n\t\t\tcanvas.getContext('2d').putImageData(img2, 0, 0)\n\t\t}\n\n\t\tvar addConflict = function($conflicts, original, replacement) {\n\n\t\t\tvar $conflict = $conflicts.find('.template').clone().removeClass('template').addClass('conflict')\n\t\t\tvar $originalDiv = $conflict.find('.original')\n\t\t\tvar $replacementDiv = $conflict.find('.replacement')\n\n\t\t\t$conflict.data('data', data)\n\n\t\t\t$conflict.find('.filename').text(original.name)\n\t\t\t$originalDiv.find('.size').text(OC.Util.humanFileSize(original.size))\n\t\t\t$originalDiv.find('.mtime').text(OC.Util.formatDate(original.mtime))\n\t\t\t// ie sucks\n\t\t\tif (replacement.size && replacement.lastModified) {\n\t\t\t\t$replacementDiv.find('.size').text(OC.Util.humanFileSize(replacement.size))\n\t\t\t\t$replacementDiv.find('.mtime').text(OC.Util.formatDate(replacement.lastModified))\n\t\t\t}\n\t\t\tvar path = original.directory + '/' + original.name\n\t\t\tvar urlSpec = {\n\t\t\t\tfile: path,\n\t\t\t\tx: 96,\n\t\t\t\ty: 96,\n\t\t\t\tc: original.etag,\n\t\t\t\tforceIcon: 0\n\t\t\t}\n\t\t\tvar previewpath = Files.generatePreviewUrl(urlSpec)\n\t\t\t// Escaping single quotes\n\t\t\tpreviewpath = previewpath.replace(/'/g, '%27')\n\t\t\t$originalDiv.find('.icon').css({ 'background-image': \"url('\" + previewpath + \"')\" })\n\t\t\tgetCroppedPreview(replacement).then(\n\t\t\t\tfunction(path) {\n\t\t\t\t\t$replacementDiv.find('.icon').css('background-image', 'url(' + path + ')')\n\t\t\t\t}, function() {\n\t\t\t\t\tpath = OC.MimeType.getIconUrl(replacement.type)\n\t\t\t\t\t$replacementDiv.find('.icon').css('background-image', 'url(' + path + ')')\n\t\t\t\t}\n\t\t\t)\n\t\t\t// connect checkboxes with labels\n\t\t\tvar checkboxId = $conflicts.find('.conflict').length\n\t\t\t$originalDiv.find('input:checkbox').attr('id', 'checkbox_original_' + checkboxId)\n\t\t\t$replacementDiv.find('input:checkbox').attr('id', 'checkbox_replacement_' + checkboxId)\n\n\t\t\t$conflicts.append($conflict)\n\n\t\t\t// set more recent mtime bold\n\t\t\t// ie sucks\n\t\t\tif (replacement.lastModified > original.mtime) {\n\t\t\t\t$replacementDiv.find('.mtime').css('font-weight', 'bold')\n\t\t\t} else if (replacement.lastModified < original.mtime) {\n\t\t\t\t$originalDiv.find('.mtime').css('font-weight', 'bold')\n\t\t\t} else {\n\t\t\t\t// TODO add to same mtime collection?\n\t\t\t}\n\n\t\t\t// set bigger size bold\n\t\t\tif (replacement.size && replacement.size > original.size) {\n\t\t\t\t$replacementDiv.find('.size').css('font-weight', 'bold')\n\t\t\t} else if (replacement.size && replacement.size < original.size) {\n\t\t\t\t$originalDiv.find('.size').css('font-weight', 'bold')\n\t\t\t} else {\n\t\t\t\t// TODO add to same size collection?\n\t\t\t}\n\n\t\t\t// TODO show skip action for files with same size and mtime in bottom row\n\n\t\t\t// always keep readonly files\n\n\t\t\tif (original.status === 'readonly') {\n\t\t\t\t$originalDiv\n\t\t\t\t\t.addClass('readonly')\n\t\t\t\t\t.find('input[type=\"checkbox\"]')\n\t\t\t\t\t.prop('checked', true)\n\t\t\t\t\t.prop('disabled', true)\n\t\t\t\t$originalDiv.find('.message')\n\t\t\t\t\t.text(t('core', 'read-only'))\n\t\t\t}\n\t\t}\n\t\t// var selection = controller.getSelection(data.originalFiles);\n\t\t// if (selection.defaultAction) {\n\t\t//\tcontroller[selection.defaultAction](data);\n\t\t// } else {\n\t\tvar dialogName = 'oc-dialog-fileexists-content'\n\t\tvar dialogId = '#' + dialogName\n\t\tif (this._fileexistsshown) {\n\t\t\t// add conflict\n\n\t\t\tvar $conflicts = $(dialogId + ' .conflicts')\n\t\t\taddConflict($conflicts, original, replacement)\n\n\t\t\tvar count = $(dialogId + ' .conflict').length\n\t\t\tvar title = n('core',\n\t\t\t\t'{count} file conflict',\n\t\t\t\t'{count} file conflicts',\n\t\t\t\tcount,\n\t\t\t\t{ count: count }\n\t\t\t)\n\t\t\t$(dialogId).parent().children('.oc-dialog-title').text(title)\n\n\t\t\t// recalculate dimensions\n\t\t\t$(window).trigger('resize')\n\t\t\tdialogDeferred.resolve()\n\t\t} else {\n\t\t\t// create dialog\n\t\t\tthis._fileexistsshown = true\n\t\t\t$.when(this._getFileExistsTemplate()).then(function($tmpl) {\n\t\t\t\tvar title = t('core', 'One file conflict')\n\t\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\t\tdialog_name: dialogName,\n\t\t\t\t\ttitle: title,\n\t\t\t\t\ttype: 'fileexists',\n\n\t\t\t\t\tallnewfiles: t('core', 'New Files'),\n\t\t\t\t\tallexistingfiles: t('core', 'Already existing files'),\n\n\t\t\t\t\twhy: t('core', 'Which files do you want to keep?'),\n\t\t\t\t\twhat: t('core', 'If you select both versions, the copied file will have a number added to its name.')\n\t\t\t\t})\n\t\t\t\t$('body').append($dlg)\n\n\t\t\t\tif (original && replacement) {\n\t\t\t\t\tvar $conflicts = $dlg.find('.conflicts')\n\t\t\t\t\taddConflict($conflicts, original, replacement)\n\t\t\t\t}\n\n\t\t\t\tvar buttonlist = [{\n\t\t\t\t\ttext: t('core', 'Cancel'),\n\t\t\t\t\tclasses: 'cancel',\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (typeof controller.onCancel !== 'undefined') {\n\t\t\t\t\t\t\tcontroller.onCancel(data)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttext: t('core', 'Continue'),\n\t\t\t\t\tclasses: 'continue',\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (typeof controller.onContinue !== 'undefined') {\n\t\t\t\t\t\t\tcontroller.onContinue($(dialogId + ' .conflict'))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t}]\n\n\t\t\t\t$(dialogId).ocdialog({\n\t\t\t\t\twidth: 500,\n\t\t\t\t\tcloseOnEscape: true,\n\t\t\t\t\tmodal: true,\n\t\t\t\t\tbuttons: buttonlist,\n\t\t\t\t\tcloseButton: null,\n\t\t\t\t\tclose: function() {\n\t\t\t\t\t\tself._fileexistsshown = false\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t$(this).ocdialog('destroy').remove()\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// ignore\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\t$(dialogId).css('height', 'auto')\n\n\t\t\t\tvar $primaryButton = $dlg.closest('.oc-dialog').find('button.continue')\n\t\t\t\t$primaryButton.prop('disabled', true)\n\n\t\t\t\tfunction updatePrimaryButton() {\n\t\t\t\t\tvar checkedCount = $dlg.find('.conflicts .checkbox:checked').length\n\t\t\t\t\t$primaryButton.prop('disabled', checkedCount === 0)\n\t\t\t\t}\n\n\t\t\t\t// add checkbox toggling actions\n\t\t\t\t$(dialogId).find('.allnewfiles').on('click', function() {\n\t\t\t\t\tvar $checkboxes = $(dialogId).find('.conflict .replacement input[type=\"checkbox\"]')\n\t\t\t\t\t$checkboxes.prop('checked', $(this).prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.allexistingfiles').on('click', function() {\n\t\t\t\t\tvar $checkboxes = $(dialogId).find('.conflict .original:not(.readonly) input[type=\"checkbox\"]')\n\t\t\t\t\t$checkboxes.prop('checked', $(this).prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.conflicts').on('click', '.replacement,.original:not(.readonly)', function() {\n\t\t\t\t\tvar $checkbox = $(this).find('input[type=\"checkbox\"]')\n\t\t\t\t\t$checkbox.prop('checked', !$checkbox.prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.conflicts').on('click', '.replacement input[type=\"checkbox\"],.original:not(.readonly) input[type=\"checkbox\"]', function() {\n\t\t\t\t\tvar $checkbox = $(this)\n\t\t\t\t\t$checkbox.prop('checked', !$checkbox.prop('checked'))\n\t\t\t\t})\n\n\t\t\t\t// update counters\n\t\t\t\t$(dialogId).on('click', '.replacement,.allnewfiles', function() {\n\t\t\t\t\tvar count = $(dialogId).find('.conflict .replacement input[type=\"checkbox\"]:checked').length\n\t\t\t\t\tif (count === $(dialogId + ' .conflict').length) {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', true)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text(t('core', '(all selected)'))\n\t\t\t\t\t} else if (count > 0) {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text(t('core', '({count} selected)', { count: count }))\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text('')\n\t\t\t\t\t}\n\t\t\t\t\tupdatePrimaryButton()\n\t\t\t\t})\n\t\t\t\t$(dialogId).on('click', '.original,.allexistingfiles', function() {\n\t\t\t\t\tvar count = $(dialogId).find('.conflict .original input[type=\"checkbox\"]:checked').length\n\t\t\t\t\tif (count === $(dialogId + ' .conflict').length) {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', true)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count').text(t('core', '(all selected)'))\n\t\t\t\t\t} else if (count > 0) {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count')\n\t\t\t\t\t\t\t.text(t('core', '({count} selected)', { count: count }))\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count').text('')\n\t\t\t\t\t}\n\t\t\t\t\tupdatePrimaryButton()\n\t\t\t\t})\n\n\t\t\t\tdialogDeferred.resolve()\n\t\t\t})\n\t\t\t\t.fail(function() {\n\t\t\t\t\tdialogDeferred.reject()\n\t\t\t\t\talert(t('core', 'Error loading file exists template'))\n\t\t\t\t})\n\t\t}\n\t\t// }\n\t\treturn dialogDeferred.promise()\n\t},\n\t// get the gridview setting and set the input accordingly\n\t_getGridSettings: function() {\n\t\tconst self = this\n\t\t$.get(OC.generateUrl('/apps/files/api/v1/showgridview'), function(response) {\n\t\t\tself.$showGridView\n\t\t\t\t.removeClass('icon-toggle-filelist icon-toggle-pictures')\n\t\t\t\t.addClass(response.gridview ? 'icon-toggle-filelist' : 'icon-toggle-pictures')\n\t\t\tself.$showGridView.attr(\n\t\t\t\t'aria-label',\n\t\t\t\tresponse.gridview ? t('files', 'Show list view') : t('files', 'Show grid view'),\n\t\t\t)\n\t\t\t$('.list-container').toggleClass('view-grid', response.gridview)\n\t\t})\n\t},\n\t_onGridviewChange: function() {\n\t\tconst isGridView = this.$showGridView.hasClass('icon-toggle-filelist')\n\t\t// only save state if user is logged in\n\t\tif (OC.currentUser) {\n\t\t\t$.post(OC.generateUrl('/apps/files/api/v1/showgridview'), { show: !isGridView })\n\t\t}\n\t\tthis.$showGridView\n\t\t\t.removeClass('icon-toggle-filelist icon-toggle-pictures')\n\t\t\t.addClass(isGridView ? 'icon-toggle-pictures' : 'icon-toggle-filelist')\n\t\tthis.$showGridView.attr(\n\t\t\t'aria-label',\n\t\t\tisGridView ? t('files', 'Show grid view') : t('files', 'Show list view'),\n\t\t)\n\t\tthis.$filePicker.find('.list-container').toggleClass('view-grid', !isGridView)\n\t},\n\t_getFilePickerTemplate: function() {\n\t\tvar defer = $.Deferred()\n\t\tif (!this.$filePickerTemplate) {\n\t\t\tvar self = this\n\t\t\t$.get(OC.filePath('core', 'templates', 'filepicker.html'), function(tmpl) {\n\t\t\t\tself.$filePickerTemplate = $(tmpl)\n\t\t\t\tself.$listTmpl = self.$filePickerTemplate.find('.filelist tbody tr:first-child').detach()\n\t\t\t\tdefer.resolve(self.$filePickerTemplate)\n\t\t\t})\n\t\t\t\t.fail(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\tdefer.reject(jqXHR.status, errorThrown)\n\t\t\t\t})\n\t\t} else {\n\t\t\tdefer.resolve(this.$filePickerTemplate)\n\t\t}\n\t\treturn defer.promise()\n\t},\n\t_getMessageTemplate: function() {\n\t\tvar defer = $.Deferred()\n\t\tif (!this.$messageTemplate) {\n\t\t\tvar self = this\n\t\t\t$.get(OC.filePath('core', 'templates', 'message.html'), function(tmpl) {\n\t\t\t\tself.$messageTemplate = $(tmpl)\n\t\t\t\tdefer.resolve(self.$messageTemplate)\n\t\t\t})\n\t\t\t\t.fail(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\tdefer.reject(jqXHR.status, errorThrown)\n\t\t\t\t})\n\t\t} else {\n\t\t\tdefer.resolve(this.$messageTemplate)\n\t\t}\n\t\treturn defer.promise()\n\t},\n\t_getFileExistsTemplate: function() {\n\t\tvar defer = $.Deferred()\n\t\tif (!this.$fileexistsTemplate) {\n\t\t\tvar self = this\n\t\t\t$.get(OC.filePath('files', 'templates', 'fileexists.html'), function(tmpl) {\n\t\t\t\tself.$fileexistsTemplate = $(tmpl)\n\t\t\t\tdefer.resolve(self.$fileexistsTemplate)\n\t\t\t})\n\t\t\t\t.fail(function() {\n\t\t\t\t\tdefer.reject()\n\t\t\t\t})\n\t\t} else {\n\t\t\tdefer.resolve(this.$fileexistsTemplate)\n\t\t}\n\t\treturn defer.promise()\n\t},\n\n\t/**\n\t * fills the filepicker with files\n\t */\n\t_fillFilePicker: async function(dir, type) {\n\t\tvar self = this\n\t\tthis.$filelist.empty()\n\t\tthis.$filePicker.find('.emptycontent').hide()\n\t\tthis.$filelistContainer.addClass('icon-loading')\n\t\tthis.$filePicker.data('path', dir)\n\t\tvar filter = this.$filePicker.data('mimetype')\n\t\tvar advancedFilter = this.$filePicker.data('filter')\n\t\tif (typeof (filter) === 'string') {\n\t\t\tfilter = [filter]\n\t\t}\n\t\tself.$fileListHeader.find('.sort-indicator').addClass('hidden').removeClass('icon-triangle-n').removeClass('icon-triangle-s')\n\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').removeClass('hidden')\n\t\tif (self.filepicker.sortOrder === 'asc') {\n\t\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').addClass('icon-triangle-n')\n\t\t} else {\n\t\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').addClass('icon-triangle-s')\n\t\t}\n\n\t\t// Wrap within a method because a promise cannot return multiple values\n\t\t// But the client impleemntation still does it...\n\t\tvar getFolderContents = async function(dir) {\n\t\t\treturn self.filepicker.filesClient.getFolderContents(dir)\n\t\t\t\t.then((status, files) => {\n\t\t\t\t\treturn files\n\t\t\t\t})\n\t\t}\n\n\t\ttry {\n\t\t\tvar files = await getFolderContents(dir)\n\t\t} catch (error) {\n\t\t\t// fallback to root if requested dir is non-existent\n\t\t\tconsole.error('Requested path does not exists, falling back to root')\n\t\t\tvar files = await getFolderContents('/')\n\t\t\tthis.$filePicker.data('path', '/')\n\t\t\tthis._changeButtonsText(type, '')\n\t\t}\n\n\t\tself.filelist = files\n\t\tif (filter && filter.length > 0 && filter.indexOf('*') === -1) {\n\t\t\tfiles = files.filter(function(file) {\n\t\t\t\treturn file.type === 'dir' || filter.indexOf(file.mimetype) !== -1\n\t\t\t})\n\t\t}\n\n\t\tif (advancedFilter) {\n\t\t\tfiles = files.filter(advancedFilter)\n\t\t}\n\n\t\t// Check if the showHidden input field exist and if it exist follow it\n\t\t// Otherwise just show the hidden files\n\t\tconst showHiddenInput = document.getElementById('showHiddenFiles')\n\t\tconst showHidden = showHiddenInput === null || showHiddenInput.value === \"1\"\n\t\tif (!showHidden) {\n\t\t\tfiles = files.filter(function(file) {\n\t\t\t\treturn !file.name.startsWith('.')\n\t\t\t})\n\t\t}\n\n\t\tvar Comparators = {\n\t\t\tname: function(fileInfo1, fileInfo2) {\n\t\t\t\tif (fileInfo1.type === 'dir' && fileInfo2.type !== 'dir') {\n\t\t\t\t\treturn -1\n\t\t\t\t}\n\t\t\t\tif (fileInfo1.type !== 'dir' && fileInfo2.type === 'dir') {\n\t\t\t\t\treturn 1\n\t\t\t\t}\n\t\t\t\treturn OC.Util.naturalSortCompare(fileInfo1.name, fileInfo2.name)\n\t\t\t},\n\t\t\tsize: function(fileInfo1, fileInfo2) {\n\t\t\t\treturn fileInfo1.size - fileInfo2.size\n\t\t\t},\n\t\t\tmtime: function(fileInfo1, fileInfo2) {\n\t\t\t\treturn fileInfo1.mtime - fileInfo2.mtime\n\t\t\t}\n\t\t}\n\t\tvar comparator = Comparators[self.filepicker.sortField] || Comparators.name\n\t\tfiles = files.sort(function(file1, file2) {\n\t\t\tvar isFavorite = function(fileInfo) {\n\t\t\t\treturn fileInfo.tags && fileInfo.tags.indexOf(OC.TAG_FAVORITE) >= 0\n\t\t\t}\n\n\t\t\tif (isFavorite(file1) && !isFavorite(file2)) {\n\t\t\t\treturn -1\n\t\t\t} else if (!isFavorite(file1) && isFavorite(file2)) {\n\t\t\t\treturn 1\n\t\t\t}\n\n\t\t\treturn self.filepicker.sortOrder === 'asc' ? comparator(file1, file2) : -comparator(file1, file2)\n\t\t})\n\n\t\tself._fillSlug()\n\n\t\tif (files.length === 0) {\n\t\t\tself.$filePicker.find('.emptycontent').show()\n\t\t\tself.$fileListHeader.hide()\n\t\t} else {\n\t\t\tself.$filePicker.find('.emptycontent').hide()\n\t\t\tself.$fileListHeader.show()\n\t\t}\n\n\t\tself.$filelist.empty();\n\n\t\t$.each(files, function(idx, entry) {\n\t\t\tif (entry.isEncrypted && entry.mimetype === 'httpd/unix-directory') {\n\t\t\t\tentry.icon = OC.MimeType.getIconUrl('dir-encrypted')\n\t\t\t} else {\n\t\t\t\tentry.icon = OC.MimeType.getIconUrl(entry.mimetype)\n\t\t\t}\n\n\t\t\tvar simpleSize, sizeColor\n\t\t\tif (typeof (entry.size) !== 'undefined' && entry.size >= 0) {\n\t\t\t\tsimpleSize = OC.Util.humanFileSize(parseInt(entry.size, 10), true)\n\t\t\t\tsizeColor = Math.round(160 - Math.pow((entry.size / (1024 * 1024)), 2))\n\t\t\t} else {\n\t\t\t\tsimpleSize = t('files', 'Pending')\n\t\t\t\tsizeColor = 80\n\t\t\t}\n\n\t\t\t// split the filename in half if the size is bigger than 20 char\n\t\t\t// for ellipsis\n\t\t\tif (entry.name.length >= 10) {\n\t\t\t\t// leave maximum 10 letters\n\t\t\t\tvar split = Math.min(Math.floor(entry.name.length / 2), 10)\n\t\t\t\tvar filename1 = entry.name.substr(0, entry.name.length - split)\n\t\t\t\tvar filename2 = entry.name.substr(entry.name.length - split)\n\t\t\t} else {\n\t\t\t\tvar filename1 = entry.name\n\t\t\t\tvar filename2 = ''\n\t\t\t}\n\n\t\t\tvar $row = self.$listTmpl.octemplate({\n\t\t\t\ttype: entry.type,\n\t\t\t\tdir: dir,\n\t\t\t\tfilename: entry.name,\n\t\t\t\tfilename1: filename1,\n\t\t\t\tfilename2: filename2,\n\t\t\t\tdate: OC.Util.relativeModifiedDate(entry.mtime),\n\t\t\t\tsize: simpleSize,\n\t\t\t\tsizeColor: sizeColor,\n\t\t\t\ticon: entry.icon\n\t\t\t})\n\t\t\tif (entry.type === 'file') {\n\t\t\t\tvar urlSpec = {\n\t\t\t\t\tfile: dir + '/' + entry.name,\n\t\t\t\t\tx: 100,\n\t\t\t\t\ty: 100\n\t\t\t\t}\n\t\t\t\tvar img = new Image()\n\t\t\t\tvar previewUrl = OC.generateUrl('/core/preview.png?') + $.param(urlSpec)\n\t\t\t\timg.onload = function() {\n\t\t\t\t\tif (img.width > 5) {\n\t\t\t\t\t\t$row.find('td.filename').attr('style', 'background-image:url(' + previewUrl + ')')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\timg.src = previewUrl\n\t\t\t}\n\t\t\tself.$filelist.append($row)\n\t\t})\n\n\t\tself.$filelistContainer.removeClass('icon-loading')\n\t},\n\t/**\n\t * fills the tree list with directories\n\t */\n\t_fillSlug: function() {\n\t\tvar addButton = this.$dirTree.find('.actions.creatable').detach()\n\t\tthis.$dirTree.empty()\n\t\tvar self = this\n\n\t\tself.$dirTree.append(addButton)\n\n\t\tvar dir\n\t\tvar path = this.$filePicker.data('path')\n\t\tvar $template = $('<div data-dir=\"{dir}\" tabindex=\"0\"><a>{name}</a></div>').addClass('crumb')\n\t\tif (path) {\n\t\t\tvar paths = path.split('/')\n\t\t\t$.each(paths, function(index, dir) {\n\t\t\t\tdir = paths.pop()\n\t\t\t\tif (dir === '') {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tself.$dirTree.prepend($template.octemplate({\n\t\t\t\t\tdir: paths.join('/') + '/' + dir,\n\t\t\t\t\tname: dir\n\t\t\t\t}))\n\t\t\t})\n\t\t}\n\n\t\t$template.octemplate({\n\t\t\tdir: '',\n\t\t\tname: t('core', 'Home'),\n\t\t}, { escapeFunction: null }).prependTo(this.$dirTree)\n\n\t},\n\t/**\n\t * handle selection made in the tree list\n\t */\n\t_handleTreeListSelect: function(event, type) {\n\t\tvar self = event.data\n\t\tvar dir = $(event.target).closest('.crumb').data('dir')\n\t\tself._fillFilePicker(dir, type)\n\t\tvar getOcDialog = (event.target).closest('.oc-dialog')\n\t\tvar buttonEnableDisable = $('.primary', getOcDialog)\n\t\tthis._changeButtonsText(type, dir.split(/[/]+/).pop())\n\t\tif (this.$filePicker.data('mimetype').indexOf('httpd/unix-directory') !== -1 || this.$filePicker.data('allowDirectoryChooser')) {\n\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t} else {\n\t\t\tbuttonEnableDisable.prop('disabled', true)\n\t\t}\n\t},\n\t/**\n\t * handle clicks made in the filepicker\n\t */\n\t_handlePickerClick: function(event, $element, type) {\n\t\tvar getOcDialog = this.$filePicker.closest('.oc-dialog')\n\t\tvar buttonEnableDisable = getOcDialog.find('.primary')\n\t\tif ($element.data('type') === 'file') {\n\t\t\tif (this.$filePicker.data('multiselect') !== true || !event.ctrlKey) {\n\t\t\t\tthis.$filelist.find('.filepicker_element_selected').removeClass('filepicker_element_selected')\n\t\t\t}\n\t\t\t$element.toggleClass('filepicker_element_selected')\n\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t} else if ($element.data('type') === 'dir') {\n\t\t\tthis._fillFilePicker(this.$filePicker.data('path') + '/' + $element.data('entryname'), type)\n\t\t\tthis._changeButtonsText(type, $element.data('entryname'))\n\t\t\tif (this.$filePicker.data('mimetype').indexOf('httpd/unix-directory') !== -1 || this.$filePicker.data('allowDirectoryChooser')) {\n\t\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t\t} else {\n\t\t\t\tbuttonEnableDisable.prop('disabled', true)\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Handle\n\t * @param type of action\n\t * @param dir on which to change buttons text\n\t * @private\n\t */\n\t_changeButtonsText: function(type, dir) {\n\t\tvar copyText = dir === '' ? t('core', 'Copy') : t('core', 'Copy to {folder}', { folder: dir })\n\t\tvar moveText = dir === '' ? t('core', 'Move') : t('core', 'Move to {folder}', { folder: dir })\n\t\tvar buttons = $('.oc-dialog-buttonrow button')\n\t\tswitch (type) {\n\t\t\tcase this.FILEPICKER_TYPE_CHOOSE:\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_CUSTOM:\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_COPY:\n\t\t\t\tbuttons.text(copyText)\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_MOVE:\n\t\t\t\tbuttons.text(moveText)\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_COPY_MOVE:\n\t\t\t\tbuttons.eq(0).text(copyText)\n\t\t\t\tbuttons.eq(1).text(moveText)\n\t\t\t\tbreak\n\t\t}\n\t}\n}\n\nexport default Dialogs\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { emit } from '@nextcloud/event-bus'\n\n/**\n * @private\n * @param {Document} global the document to read the initial value from\n * @param {Function} emit the function to invoke for every new token\n * @return {object}\n */\nexport const manageToken = (global, emit) => {\n\tlet token = global.getElementsByTagName('head')[0].getAttribute('data-requesttoken')\n\n\treturn {\n\t\tgetToken: () => token,\n\t\tsetToken: newToken => {\n\t\t\ttoken = newToken\n\n\t\t\temit('csrf-token-update', {\n\t\t\t\ttoken,\n\t\t\t})\n\t\t},\n\t}\n}\n\nconst manageFromDocument = manageToken(document, emit)\n\n/**\n * @return {string}\n */\nexport const getToken = manageFromDocument.getToken\n\n/**\n * @param {string} newToken new token\n */\nexport const setToken = manageFromDocument.setToken\n","/**\n * @copyright 2012 Robin Appelman icewind1991@gmail.com\n *\n * @author Arthur Schiwon <blizzz@arthur-schiwon.de>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Lukas Reschke <lukas@statuscode.ch>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Thomas Müller <thomas.mueller@tmit.eu>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport $ from 'jquery'\n\nimport { getToken } from './requesttoken'\n\n/**\n * Create a new event source\n * @param {string} src\n * @param {object} [data] to be send as GET\n *\n * @constructs OCEventSource\n */\nconst OCEventSource = function(src, data) {\n\tvar dataStr = ''\n\tvar name\n\tvar joinChar\n\tthis.typelessListeners = []\n\tthis.closed = false\n\tthis.listeners = {}\n\tif (data) {\n\t\tfor (name in data) {\n\t\t\tdataStr += name + '=' + encodeURIComponent(data[name]) + '&'\n\t\t}\n\t}\n\tdataStr += 'requesttoken=' + encodeURIComponent(getToken())\n\tif (!this.useFallBack && typeof EventSource !== 'undefined') {\n\t\tjoinChar = '&'\n\t\tif (src.indexOf('?') === -1) {\n\t\t\tjoinChar = '?'\n\t\t}\n\t\tthis.source = new EventSource(src + joinChar + dataStr)\n\t\tthis.source.onmessage = function(e) {\n\t\t\tfor (var i = 0; i < this.typelessListeners.length; i++) {\n\t\t\t\tthis.typelessListeners[i](JSON.parse(e.data))\n\t\t\t}\n\t\t}.bind(this)\n\t} else {\n\t\tvar iframeId = 'oc_eventsource_iframe_' + OCEventSource.iframeCount\n\t\tOCEventSource.fallBackSources[OCEventSource.iframeCount] = this\n\t\tthis.iframe = $('<iframe></iframe>')\n\t\tthis.iframe.attr('id', iframeId)\n\t\tthis.iframe.hide()\n\n\t\tjoinChar = '&'\n\t\tif (src.indexOf('?') === -1) {\n\t\t\tjoinChar = '?'\n\t\t}\n\t\tthis.iframe.attr('src', src + joinChar + 'fallback=true&fallback_id=' + OCEventSource.iframeCount + '&' + dataStr)\n\t\t$('body').append(this.iframe)\n\t\tthis.useFallBack = true\n\t\tOCEventSource.iframeCount++\n\t}\n\t// add close listener\n\tthis.listen('__internal__', function(data) {\n\t\tif (data === 'close') {\n\t\t\tthis.close()\n\t\t}\n\t}.bind(this))\n}\nOCEventSource.fallBackSources = []\nOCEventSource.iframeCount = 0// number of fallback iframes\nOCEventSource.fallBackCallBack = function(id, type, data) {\n\tOCEventSource.fallBackSources[id].fallBackCallBack(type, data)\n}\nOCEventSource.prototype = {\n\ttypelessListeners: [],\n\tiframe: null,\n\tlisteners: {}, // only for fallback\n\tuseFallBack: false,\n\t/**\n\t * Fallback callback for browsers that don't have the\n\t * native EventSource object.\n\t *\n\t * Calls the registered listeners.\n\t *\n\t * @private\n\t * @param {String} type event type\n\t * @param {Object} data received data\n\t */\n\tfallBackCallBack: function(type, data) {\n\t\tvar i\n\t\t// ignore messages that might appear after closing\n\t\tif (this.closed) {\n\t\t\treturn\n\t\t}\n\t\tif (type) {\n\t\t\tif (typeof this.listeners.done !== 'undefined') {\n\t\t\t\tfor (i = 0; i < this.listeners[type].length; i++) {\n\t\t\t\t\tthis.listeners[type][i](data)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor (i = 0; i < this.typelessListeners.length; i++) {\n\t\t\t\tthis.typelessListeners[i](data)\n\t\t\t}\n\t\t}\n\t},\n\tlastLength: 0, // for fallback\n\t/**\n\t * Listen to a given type of events.\n\t *\n\t * @param {String} type event type\n\t * @param {Function} callback event callback\n\t */\n\tlisten: function(type, callback) {\n\t\tif (callback && callback.call) {\n\n\t\t\tif (type) {\n\t\t\t\tif (this.useFallBack) {\n\t\t\t\t\tif (!this.listeners[type]) {\n\t\t\t\t\t\tthis.listeners[type] = []\n\t\t\t\t\t}\n\t\t\t\t\tthis.listeners[type].push(callback)\n\t\t\t\t} else {\n\t\t\t\t\tthis.source.addEventListener(type, function(e) {\n\t\t\t\t\t\tif (typeof e.data !== 'undefined') {\n\t\t\t\t\t\t\tcallback(JSON.parse(e.data))\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcallback('')\n\t\t\t\t\t\t}\n\t\t\t\t\t}, false)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.typelessListeners.push(callback)\n\t\t\t}\n\t\t}\n\t},\n\t/**\n\t * Closes this event source.\n\t */\n\tclose: function() {\n\t\tthis.closed = true\n\t\tif (typeof this.source !== 'undefined') {\n\t\t\tthis.source.close()\n\t\t}\n\t}\n}\n\nexport default OCEventSource\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\n/** @typedef {import('jquery')} jQuery */\nimport $ from 'jquery'\n\nimport { menuSpeed } from './constants'\n\nexport let currentMenu = null\nexport let currentMenuToggle = null\n\n/**\n * For menu toggling\n *\n * @param {jQuery} $toggle the toggle element\n * @param {jQuery} $menuEl the menu container element\n * @param {Function | undefined} toggle callback invoked everytime the menu is opened\n * @param {boolean} headerMenu is this a top right header menu?\n * @return {void}\n */\nexport const registerMenu = function($toggle, $menuEl, toggle, headerMenu) {\n\t$menuEl.addClass('menu')\n\tconst isClickableElement = $toggle.prop('tagName') === 'A' || $toggle.prop('tagName') === 'BUTTON'\n\n\t// On link and button, the enter key trigger a click event\n\t// Only use the click to avoid two fired events\n\t$toggle.on(isClickableElement ? 'click.menu' : 'click.menu keyup.menu', function(event) {\n\t\t// prevent the link event (append anchor to URL)\n\t\tevent.preventDefault()\n\n\t\t// allow enter key as a trigger\n\t\tif (event.key && event.key !== 'Enter') {\n\t\t\treturn\n\t\t}\n\n\t\tif ($menuEl.is(currentMenu)) {\n\t\t\thideMenus()\n\t\t\treturn\n\t\t} else if (currentMenu) {\n\t\t\t// another menu was open?\n\t\t\t// close it\n\t\t\thideMenus()\n\t\t}\n\n\t\tif (headerMenu === true) {\n\t\t\t$menuEl.parent().addClass('openedMenu')\n\t\t}\n\n\t\t// Set menu to expanded\n\t\t$toggle.attr('aria-expanded', true)\n\n\t\t$menuEl.slideToggle(menuSpeed, toggle)\n\t\tcurrentMenu = $menuEl\n\t\tcurrentMenuToggle = $toggle\n\t})\n}\n\n/**\n * Unregister a previously registered menu\n *\n * @param {jQuery} $toggle the toggle element\n * @param {jQuery} $menuEl the menu container element\n */\nexport const unregisterMenu = ($toggle, $menuEl) => {\n\t// close menu if opened\n\tif ($menuEl.is(currentMenu)) {\n\t\thideMenus()\n\t}\n\t$toggle.off('click.menu').removeClass('menutoggle')\n\t$menuEl.removeClass('menu')\n}\n\n/**\n * Hides any open menus\n *\n * @param {Function} complete callback when the hiding animation is done\n */\nexport const hideMenus = function(complete) {\n\tif (currentMenu) {\n\t\tconst lastMenu = currentMenu\n\t\tcurrentMenu.trigger(new $.Event('beforeHide'))\n\t\tcurrentMenu.slideUp(menuSpeed, function() {\n\t\t\tlastMenu.trigger(new $.Event('afterHide'))\n\t\t\tif (complete) {\n\t\t\t\tcomplete.apply(this, arguments)\n\t\t\t}\n\t\t})\n\t}\n\n\t// Set menu to closed\n\t$('.menutoggle').attr('aria-expanded', false)\n\tif (currentMenuToggle) {\n\t\tcurrentMenuToggle.attr('aria-expanded', false)\n\t}\n\n\t$('.openedMenu').removeClass('openedMenu')\n\tcurrentMenu = null\n\tcurrentMenuToggle = null\n}\n\n/**\n * Shows a given element as menu\n *\n * @param {object} [$toggle=null] menu toggle\n * @param {object} $menuEl menu element\n * @param {Function} complete callback when the showing animation is done\n */\nexport const showMenu = ($toggle, $menuEl, complete) => {\n\tif ($menuEl.is(currentMenu)) {\n\t\treturn\n\t}\n\thideMenus()\n\tcurrentMenu = $menuEl\n\tcurrentMenuToggle = $toggle\n\t$menuEl.trigger(new $.Event('beforeShow'))\n\t$menuEl.show()\n\t$menuEl.trigger(new $.Event('afterShow'))\n\t// no animation\n\tif (_.isFunction(complete)) {\n\t\tcomplete()\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const coreApps = ['', 'admin', 'log', 'core/search', 'core', '3rdparty']\nexport const menuSpeed = 50\nexport const PERMISSION_NONE = 0\nexport const PERMISSION_CREATE = 4\nexport const PERMISSION_READ = 1\nexport const PERMISSION_UPDATE = 2\nexport const PERMISSION_DELETE = 8\nexport const PERMISSION_SHARE = 16\nexport const PERMISSION_ALL = 31\nexport const TAG_FAVORITE = '_$!<Favorite>!$_'\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst isAdmin = !!window._oc_isadmin\n\n/**\n * Returns whether the current user is an administrator\n *\n * @return {boolean} true if the user is an admin, false otherwise\n * @since 9.0.0\n */\nexport const isUserAdmin = () => isAdmin\n","/**\n * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.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 Handlebars from 'handlebars'\nimport {\n\tloadTranslations,\n\ttranslate,\n\ttranslatePlural,\n\tregister,\n\tunregister,\n} from '@nextcloud/l10n'\n\n/**\n * L10N namespace with localization functions.\n *\n * @namespace OC.L10n\n * @deprecated 26.0.0 use https://www.npmjs.com/package/@nextcloud/l10n\n */\nconst L10n = {\n\n\t/**\n\t * Load an app's translation bundle if not loaded already.\n\t *\n\t * @deprecated 26.0.0 use `loadTranslations` from https://www.npmjs.com/package/@nextcloud/l10n\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: loadTranslations,\n\n\t/**\n\t * Register an app's translation bundle.\n\t *\n\t * @deprecated 26.0.0 use `register` from https://www.npmjs.com/package/@nextcloud/l10\n\t *\n\t * @param {string} appName name of the app\n\t * @param {Object<string, string>} bundle bundle\n\t */\n\tregister,\n\n\t/**\n\t * @private\n\t * @deprecated 26.0.0 use `unregister` from https://www.npmjs.com/package/@nextcloud/l10n\n\t */\n\t_unregister: unregister,\n\n\t/**\n\t * Translate a string\n\t *\n\t * @deprecated 26.0.0 use `translate` from https://www.npmjs.com/package/@nextcloud/l10n\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,\n\n\t/**\n\t * Translate a plural string\n\t *\n\t * @deprecated 26.0.0 use `translatePlural` from https://www.npmjs.com/package/@nextcloud/l10n\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,\n}\n\nexport default L10n\n\nHandlebars.registerHelper('t', function(app, text) {\n\treturn 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/functions/formatFileSize.html\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 from './l10n'\nimport {\n\tgetCanonicalLocale,\n\tgetLanguage,\n\tgetLocale,\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\t/**\n\t * @deprecated 26.0.0 use `getLocale` from https://www.npmjs.com/package/@nextcloud/l10n\n\t */\n\tgetLocale,\n\t/**\n\t * @deprecated 26.0.0 use `getLanguage` from https://www.npmjs.com/package/@nextcloud/l10n\n\t */\n\tgetLanguage,\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¶m2=abcde¶m3=xyz\n * @return {Object<string, string>} map containing key/values matching the URL parameters\n */\nexport const parse = queryString => {\n\tlet pos\n\tlet components\n\tconst result = {}\n\tlet key\n\tif (!queryString) {\n\t\treturn null\n\t}\n\tpos = queryString.indexOf('?')\n\tif (pos >= 0) {\n\t\tqueryString = queryString.substr(pos + 1)\n\t}\n\tconst parts = queryString.replace(/\\+/g, '%20').split('&')\n\tfor (let i = 0; i < parts.length; i++) {\n\t\t// split on first equal sign\n\t\tconst part = parts[i]\n\t\tpos = part.indexOf('=')\n\t\tif (pos >= 0) {\n\t\t\tcomponents = [\n\t\t\t\tpart.substr(0, pos),\n\t\t\t\tpart.substr(pos + 1),\n\t\t\t]\n\t\t} else {\n\t\t\t// key only\n\t\t\tcomponents = [part]\n\t\t}\n\t\tif (!components.length) {\n\t\t\tcontinue\n\t\t}\n\t\tkey = decodeURIComponent(components[0])\n\t\tif (!key) {\n\t\t\tcontinue\n\t\t}\n\t\t// if equal sign was there, return string\n\t\tif (components.length > 1) {\n\t\t\tresult[key] = decodeURIComponent(components[1])\n\t\t} else {\n\t\t\t// no equal sign => null value\n\t\t\tresult[key] = null\n\t\t}\n\t}\n\treturn result\n}\n\n/**\n * Builds a URL query from a JS map.\n *\n * @param {Object<string, string>} params map containing key/values matching the URL parameters\n * @return {string} String containing a URL query (without question) mark\n */\nexport const build = params => {\n\tif (!params) {\n\t\treturn ''\n\t}\n\treturn $.map(params, function(value, key) {\n\t\tlet s = encodeURIComponent(key)\n\t\tif (value !== null && typeof (value) !== 'undefined') {\n\t\t\ts += '=' + encodeURIComponent(value)\n\t\t}\n\t\treturn s\n\t}).join('&')\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default {\n\n\t/**\n\t * @type {Array.<OC.Plugin>}\n\t */\n\t_plugins: {},\n\n\t/**\n\t * Register plugin\n\t *\n\t * @param {string} targetName app name / class name to hook into\n\t * @param {OC.Plugin} plugin plugin\n\t */\n\tregister(targetName, plugin) {\n\t\tlet plugins = this._plugins[targetName]\n\t\tif (!plugins) {\n\t\t\tplugins = this._plugins[targetName] = []\n\t\t}\n\t\tplugins.push(plugin)\n\t},\n\n\t/**\n\t * Returns all plugin registered to the given target\n\t * name / app name / class name.\n\t *\n\t * @param {string} targetName app name / class name to hook into\n\t * @return {Array.<OC.Plugin>} array of plugins\n\t */\n\tgetPlugins(targetName) {\n\t\treturn this._plugins[targetName] || []\n\t},\n\n\t/**\n\t * Call attach() on all plugins registered to the given target name.\n\t *\n\t * @param {string} targetName app name / class name\n\t * @param {object} targetObject to be extended\n\t * @param {object} [options] options\n\t */\n\tattach(targetName, targetObject, options) {\n\t\tconst plugins = this.getPlugins(targetName)\n\t\tfor (let i = 0; i < plugins.length; i++) {\n\t\t\tif (plugins[i].attach) {\n\t\t\t\tplugins[i].attach(targetObject, options)\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Call detach() on all plugins registered to the given target name.\n\t *\n\t * @param {string} targetName app name / class name\n\t * @param {object} targetObject to be extended\n\t * @param {object} [options] options\n\t */\n\tdetach(targetName, targetObject, options) {\n\t\tconst plugins = this.getPlugins(targetName)\n\t\tfor (let i = 0; i < plugins.length; i++) {\n\t\t\tif (plugins[i].detach) {\n\t\t\t\tplugins[i].detach(targetObject, options)\n\t\t\t}\n\t\t}\n\t},\n\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const redirect = targetURL => { window.location = targetURL }\n\n/**\n * Reloads the current page\n *\n * @deprecated 17.0.0 use window.location.reload directly\n */\nexport const reload = () => { window.location.reload() }\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport {\n\tgetRootUrl as realGetRootUrl,\n} from '@nextcloud/router'\n\n/**\n * Creates a relative url for remote use\n *\n * @param {string} service id\n * @return {string} the url\n */\nexport const linkToRemoteBase = service => {\n\treturn realGetRootUrl() + '/remote.php/' + service\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\nimport { emit } from '@nextcloud/event-bus'\nimport { loadState } from '@nextcloud/initial-state'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { generateUrl } from '@nextcloud/router'\n\nimport OC from './OC'\nimport { setToken as setRequestToken, getToken as getRequestToken } from './OC/requesttoken'\n\nlet config = null\n/**\n * The legacy jsunit tests overwrite OC.config before calling initCore\n * therefore we need to wait with assigning the config fallback until initCore calls initSessionHeartBeat\n */\nconst loadConfig = () => {\n\ttry {\n\t\tconfig = loadState('core', 'config')\n\t} catch (e) {\n\t\t// This fallback is just for our legacy jsunit tests since we have no way to mock loadState calls\n\t\tconfig = OC.config\n\t}\n}\n\n/**\n * session heartbeat (defaults to enabled)\n *\n * @return {boolean}\n */\nconst keepSessionAlive = () => {\n\treturn config.session_keepalive === undefined\n\t\t|| !!config.session_keepalive\n}\n\n/**\n * get interval in seconds\n *\n * @return {number}\n */\nconst getInterval = () => {\n\tlet interval = NaN\n\tif (config.session_lifetime) {\n\t\tinterval = Math.floor(config.session_lifetime / 2)\n\t}\n\n\t// minimum one minute, max 24 hours, default 15 minutes\n\treturn Math.min(\n\t\t24 * 3600,\n\t\tMath.max(\n\t\t\t60,\n\t\t\tisNaN(interval) ? 900 : interval\n\t\t)\n\t)\n}\n\nconst getToken = async () => {\n\tconst url = generateUrl('/csrftoken')\n\n\t// Not using Axios here as Axios is not stubbable with the sinon fake server\n\t// see https://stackoverflow.com/questions/41516044/sinon-mocha-test-with-async-ajax-calls-didnt-return-promises\n\t// see js/tests/specs/coreSpec.js for the tests\n\tconst resp = await $.get(url)\n\n\treturn resp.token\n}\n\nconst poll = async () => {\n\ttry {\n\t\tconst token = await getToken()\n\t\tsetRequestToken(token)\n\t} catch (e) {\n\t\tconsole.error('session heartbeat failed', e)\n\t}\n}\n\nconst startPolling = () => {\n\tconst interval = setInterval(poll, getInterval() * 1000)\n\n\tconsole.info('session heartbeat polling started')\n\n\treturn interval\n}\n\nconst registerAutoLogout = () => {\n\tif (!config.auto_logout || !getCurrentUser()) {\n\t\treturn\n\t}\n\n\tlet lastActive = Date.now()\n\twindow.addEventListener('mousemove', e => {\n\t\tlastActive = Date.now()\n\t\tlocalStorage.setItem('lastActive', lastActive)\n\t})\n\n\twindow.addEventListener('touchstart', e => {\n\t\tlastActive = Date.now()\n\t\tlocalStorage.setItem('lastActive', lastActive)\n\t})\n\n\twindow.addEventListener('storage', e => {\n\t\tif (e.key !== 'lastActive') {\n\t\t\treturn\n\t\t}\n\t\tlastActive = e.newValue\n\t})\n\n\tsetInterval(function() {\n\t\tconst timeout = Date.now() - config.session_lifetime * 1000\n\t\tif (lastActive < timeout) {\n\t\t\tconsole.info('Inactivity timout reached, logging out')\n\t\t\tconst logoutUrl = generateUrl('/logout') + '?requesttoken=' + encodeURIComponent(getRequestToken())\n\t\t\twindow.location = logoutUrl\n\t\t}\n\t}, 1000)\n}\n\n/**\n * Calls the server periodically to ensure that session and CSRF\n * token doesn't expire\n */\nexport const initSessionHeartBeat = () => {\n\tloadConfig()\n\n\tregisterAutoLogout()\n\n\tif (!keepSessionAlive()) {\n\t\tconsole.info('session heartbeat disabled')\n\t\treturn\n\t}\n\tlet interval = startPolling()\n\n\twindow.addEventListener('online', async () => {\n\t\tconsole.info('browser is online again, resuming heartbeat')\n\t\tinterval = startPolling()\n\t\ttry {\n\t\t\tawait poll()\n\t\t\tconsole.info('session token successfully updated after resuming network')\n\n\t\t\t// Let apps know we're online and requests will have the new token\n\t\t\temit('networkOnline', {\n\t\t\t\tsuccess: true,\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.error('could not update session token after resuming network', e)\n\n\t\t\t// Let apps know we're online but requests might have an outdated token\n\t\t\temit('networkOnline', {\n\t\t\t\tsuccess: false,\n\t\t\t})\n\t\t}\n\t})\n\twindow.addEventListener('offline', () => {\n\t\tconsole.info('browser is offline, stopping heartbeat')\n\n\t\t// Let apps know we're offline\n\t\temit('networkOffline', {})\n\n\t\tclearInterval(interval)\n\t\tconsole.info('session heartbeat polling stopped')\n\t})\n}\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContactsMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContactsMenu.vue?vue&type=script&lang=js&\"","<!--\n - @copyright 2023 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n-->\n\n<template>\n\t<NcHeaderMenu id=\"contactsmenu\"\n\t\t:aria-label=\"t('core', 'Search contacts')\"\n\t\t@open=\"handleOpen\">\n\t\t<template #trigger>\n\t\t\t<Contacts :size=\"20\" />\n\t\t</template>\n\t\t<div id=\"contactsmenu-menu\" />\n\t</NcHeaderMenu>\n</template>\n\n<script>\nimport NcHeaderMenu from '@nextcloud/vue/dist/Components/NcHeaderMenu.js'\n\nimport Contacts from 'vue-material-design-icons/Contacts.vue'\n\nimport OC from '../OC/index.js'\n\nexport default {\n\tname: 'ContactsMenu',\n\n\tcomponents: {\n\t\tContacts,\n\t\tNcHeaderMenu,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tcontactsMenu: null,\n\t\t}\n\t},\n\n\tmounted() {\n\t\t// eslint-disable-next-line no-new\n\t\tthis.contactsMenu = new OC.ContactsMenu({\n\t\t\tel: '#contactsmenu-menu',\n\t\t})\n\t},\n\n\tmethods: {\n\t\thandleOpen() {\n\t\t\tthis.contactsMenu?.loadContacts()\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n#contactsmenu-menu {\n\t/* show 2.5 to 4.5 entries depending on the screen height */\n\theight: calc(100vh - 50px * 3);\n\tmax-height: calc(50px * 6 + 2px);\n\tmin-height: calc(50px * 3.5);\n\twidth: 350px;\n\n\t&:deep {\n\t\t.emptycontent {\n\t\t\tmargin-top: 5vh !important;\n\t\t\tmargin-bottom: 1.5vh;\n\t\t\t.icon-loading,\n\t\t\t.icon-search {\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\t\t}\n\n\t\t#contactsmenu-search {\n\t\t\twidth: calc(100% - 16px);\n\t\t\tmargin: 8px;\n\t\t\theight: 34px;\n\t\t}\n\n\t\t.content {\n\t\t\t/* fixed max height of the parent container without the search input */\n\t\t\theight: calc(100vh - 50px * 3 - 50px);\n\t\t\tmax-height: calc(50px * 5);\n\t\t\tmin-height: calc(50px * 3.5 - 50px);\n\t\t\toverflow-y: auto;\n\n\t\t\t.footer {\n\t\t\t\ttext-align: center;\n\n\t\t\t\ta {\n\t\t\t\t\tdisplay: block;\n\t\t\t\t\twidth: 100%;\n\t\t\t\t\tpadding: 12px 0;\n\t\t\t\t\topacity: .5;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ta {\n\t\t\tpadding: 2px;\n\n\t\t\t&:focus-visible {\n\t\t\t\tbox-shadow: inset 0 0 0 2px var(--color-main-text) !important; // override rule in core/css/headers.scss #header a:focus-visible\n\t\t\t}\n\t\t}\n\n\t\t.contact {\n\t\t\tdisplay: flex;\n\t\t\tposition: relative;\n\t\t\talign-items: center;\n\t\t\tpadding: 3px 3px 3px 10px;\n\n\t\t\t.avatar {\n\t\t\t\theight: 32px;\n\t\t\t\twidth: 32px;\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\n\t\t\t.body {\n\t\t\t\tflex-grow: 1;\n\t\t\t\tpadding-left: 8px;\n\t\t\t\tmin-width: 0;\n\n\t\t\t\tdiv {\n\t\t\t\t\tposition: relative;\n\t\t\t\t\twidth: 100%;\n\t\t\t\t\toverflow-x: hidden;\n\t\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\t}\n\n\t\t\t\t.last-message, .email-address {\n\t\t\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.top-action, .second-action, .other-actions {\n\t\t\t\twidth: 16px;\n\t\t\t\theight: 16px;\n\t\t\t\topacity: .5;\n\t\t\t\tcursor: pointer;\n\n\t\t\t\t&:not(button) {\n\t\t\t\t\tpadding: 14px;\n\t\t\t\t}\n\t\t\t\timg {\n\t\t\t\t\tfilter: var(--background-invert-if-dark);\n\t\t\t\t}\n\n\t\t\t\t&:hover,\n\t\t\t\t&:active,\n\t\t\t\t&:focus {\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbutton.other-actions {\n\t\t\t\twidth: 44px;\n\n\t\t\t\t&:focus {\n\t\t\t\t\tborder-color: transparent;\n\t\t\t\t\tbox-shadow: 0 0 0 2px var(--color-main-text);\n\t\t\t\t}\n\n\t\t\t\t&:focus-visible {\n\t\t\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/* actions menu */\n\t\t\t.menu {\n\t\t\t\ttop: 47px;\n\t\t\t\tmargin-right: 13px;\n\t\t\t}\n\t\t\t.popovermenu::after {\n\t\t\t\tright: 2px;\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContactsMenu.vue?vue&type=style&index=0&id=1563c388&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContactsMenu.vue?vue&type=style&index=0&id=1563c388&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ContactsMenu.vue?vue&type=template&id=1563c388&scoped=true&\"\nimport script from \"./ContactsMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./ContactsMenu.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ContactsMenu.vue?vue&type=style&index=0&id=1563c388&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1563c388\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcHeaderMenu',{attrs:{\"id\":\"contactsmenu\",\"aria-label\":_vm.t('core', 'Search contacts')},on:{\"open\":_vm.handleOpen},scopedSlots:_vm._u([{key:\"trigger\",fn:function(){return [_c('Contacts',{attrs:{\"size\":20}})]},proxy:true}])},[_vm._v(\" \"),_c('div',{attrs:{\"id\":\"contactsmenu-menu\"}})])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2022 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<nav class=\"app-menu\">\n\t\t<ul class=\"app-menu-main\">\n\t\t\t<li v-for=\"app in mainAppList\"\n\t\t\t\t:key=\"app.id\"\n\t\t\t\t:data-app-id=\"app.id\"\n\t\t\t\tclass=\"app-menu-entry\"\n\t\t\t\t:class=\"{ 'app-menu-entry__active': app.active }\">\n\t\t\t\t<a :href=\"app.href\"\n\t\t\t\t\t:class=\"{ 'has-unread': app.unread > 0 }\"\n\t\t\t\t\t:aria-label=\"appLabel(app)\"\n\t\t\t\t\t:title=\"app.name\"\n\t\t\t\t\t:aria-current=\"app.active ? 'page' : false\"\n\t\t\t\t\t:target=\"app.target ? '_blank' : undefined\"\n\t\t\t\t\t:rel=\"app.target ? 'noopener noreferrer' : undefined\">\n\t\t\t\t\t<img :src=\"app.icon\" alt=\"\">\n\t\t\t\t\t<div class=\"app-menu-entry--label\">\n\t\t\t\t\t\t{{ app.name }}\n\t\t\t\t\t\t<span v-if=\"app.unread > 0\" class=\"hidden-visually unread-counter\">{{ app.unread }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</a>\n\t\t\t</li>\n\t\t</ul>\n\t\t<NcActions class=\"app-menu-more\" :aria-label=\"t('core', 'More apps')\">\n\t\t\t<NcActionLink v-for=\"app in popoverAppList\"\n\t\t\t\t:key=\"app.id\"\n\t\t\t\t:aria-label=\"appLabel(app)\"\n\t\t\t\t:aria-current=\"app.active ? 'page' : false\"\n\t\t\t\t:href=\"app.href\"\n\t\t\t\tclass=\"app-menu-popover-entry\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<div class=\"app-icon\" :class=\"{ 'has-unread': app.unread > 0 }\">\n\t\t\t\t\t\t<img :src=\"app.icon\" alt=\"\">\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\t\t\t\t{{ app.name }}\n\t\t\t\t<span v-if=\"app.unread > 0\" class=\"hidden-visually unread-counter\">{{ app.unread }}</span>\n\t\t\t</NcActionLink>\n\t\t</NcActions>\n\t</nav>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions'\nimport NcActionLink from '@nextcloud/vue/dist/Components/NcActionLink'\n\nexport default {\n\tname: 'AppMenu',\n\tcomponents: {\n\t\tNcActions, NcActionLink,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tapps: loadState('core', 'apps', {}),\n\t\t\tappLimit: 0,\n\t\t\tobserver: null,\n\t\t}\n\t},\n\tcomputed: {\n\t\tappList() {\n\t\t\treturn Object.values(this.apps)\n\t\t},\n\t\tmainAppList() {\n\t\t\treturn this.appList.slice(0, this.appLimit)\n\t\t},\n\t\tpopoverAppList() {\n\t\t\treturn this.appList.slice(this.appLimit)\n\t\t},\n\t\tappLabel() {\n\t\t\treturn (app) => app.name\n\t\t\t\t+ (app.active ? ' (' + t('core', 'Currently open') + ')' : '')\n\t\t\t\t+ (app.unread > 0 ? ' (' + n('core', '{count} notification', '{count} notifications', app.unread, { count: app.unread }) + ')' : '')\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.observer = new ResizeObserver(this.resize)\n\t\tthis.observer.observe(this.$el)\n\t\tthis.resize()\n\t\tsubscribe('nextcloud:app-menu.refresh', this.setApps)\n\t},\n\tbeforeDestroy() {\n\t\tthis.observer.disconnect()\n\t\tunsubscribe('nextcloud:app-menu.refresh', this.setApps)\n\t},\n\tmethods: {\n\t\tsetNavigationCounter(id, counter) {\n\t\t\tthis.$set(this.apps[id], 'unread', counter)\n\t\t},\n\t\tsetApps({ apps }) {\n\t\t\tthis.apps = apps\n\t\t},\n\t\tresize() {\n\t\t\tconst availableWidth = this.$el.offsetWidth\n\t\t\tlet appCount = Math.floor(availableWidth / 50) - 1\n\t\t\tconst popoverAppCount = this.appList.length - appCount\n\t\t\tif (popoverAppCount === 1) {\n\t\t\t\tappCount--\n\t\t\t}\n\t\t\tif (appCount < 1) {\n\t\t\t\tappCount = 0\n\t\t\t}\n\t\t\tthis.appLimit = appCount\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$header-icon-size: 20px;\n\n.app-menu {\n\twidth: 100%;\n\tdisplay: flex;\n\tflex-shrink: 1;\n\tflex-wrap: wrap;\n}\n.app-menu-main {\n\tdisplay: flex;\n\tflex-wrap: nowrap;\n\n\t.app-menu-entry {\n\t\twidth: 50px;\n\t\theight: 50px;\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t\topacity: .7;\n\n\t\t&.app-menu-entry__active {\n\t\t\topacity: 1;\n\n\t\t\t&::before {\n\t\t\t\tcontent: \" \";\n\t\t\t\tposition: absolute;\n\t\t\t\tpointer-events: none;\n\t\t\t\tborder-bottom-color: var(--color-main-background);\n\t\t\t\ttransform: translateX(-50%);\n\t\t\t\twidth: 12px;\n\t\t\t\theight: 5px;\n\t\t\t\tborder-radius: 3px;\n\t\t\t\tbackground-color: var(--color-primary-text);\n\t\t\t\tleft: 50%;\n\t\t\t\tbottom: 6px;\n\t\t\t\tdisplay: block;\n\t\t\t\ttransition: all 0.1s ease-in-out;\n\t\t\t\topacity: 1;\n\t\t\t}\n\n\t\t\t.app-menu-entry--label {\n\t\t\t\tfont-weight: bold;\n\t\t\t}\n\t\t}\n\n\t\ta {\n\t\t\twidth: calc(100% - 4px);\n\t\t\theight: calc(100% - 4px);\n\t\t\tmargin: 2px;\n\t\t\tcolor: var(--color-primary-text);\n\t\t\tposition: relative;\n\t\t}\n\n\t\timg {\n\t\t\ttransition: margin 0.1s ease-in-out;\n\t\t\twidth: $header-icon-size;\n\t\t\theight: $header-icon-size;\n\t\t\tpadding: calc((100% - $header-icon-size) / 2);\n\t\t\tbox-sizing: content-box;\n\t\t\tfilter: var(--background-image-invert-if-bright);\n\t\t}\n\n\t\t.app-menu-entry--label {\n\t\t\topacity: 0;\n\t\t\tposition: absolute;\n\t\t\tfont-size: 12px;\n\t\t\tcolor: var(--color-primary-text);\n\t\t\ttext-align: center;\n\t\t\tleft: 50%;\n\t\t\ttop: 45%;\n\t\t\tdisplay: block;\n\t\t\tmin-width: 100%;\n\t\t\ttransform: translateX(-50%);\n\t\t\ttransition: all 0.1s ease-in-out;\n\t\t\twidth: 100%;\n\t\t\ttext-overflow: ellipsis;\n\t\t\toverflow: hidden;\n\t\t\tletter-spacing: -0.5px;\n\t\t}\n\n\t\t&:hover,\n\t\t&:focus-within {\n\t\t\topacity: 1;\n\t\t\t.app-menu-entry--label {\n\t\t\t\topacity: 1;\n\t\t\t\tfont-weight: bolder;\n\t\t\t\tbottom: 0;\n\t\t\t\twidth: 100%;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t}\n\n\t}\n\n\t// Show labels\n\t&:hover,\n\t&:focus-within,\n\t.app-menu-entry:hover,\n\t.app-menu-entry:focus {\n\t\topacity: 1;\n\n\t\timg {\n\t\t\tmargin-top: -8px;\n\t\t}\n\n\t\t.app-menu-entry--label {\n\t\t\topacity: 1;\n\t\t\tbottom: 0;\n\t\t}\n\n\t\t&::before, .app-menu-entry::before {\n\t\t\topacity: 0;\n\t\t}\n\t}\n}\n\n::v-deep .app-menu-more .button-vue--vue-tertiary {\n\topacity: .7;\n\tmargin: 3px;\n\tfilter: var(--background-image-invert-if-bright);\n\n\t/* Remove all background and align text color if not expanded */\n\t&:not([aria-expanded=\"true\"]) {\n\t\tcolor: var(--color-primary-text);\n\n\t\t&:hover {\n\t\t\topacity: 1;\n\t\t\tbackground-color: transparent !important;\n\t\t}\n\t}\n\n\t&:focus-visible {\n\t\topacity: 1;\n\t\toutline: none !important;\n\t}\n}\n\n.app-menu-popover-entry {\n\t.app-icon {\n\t\tposition: relative;\n\t\theight: 44px;\n\t\t/* Icons are bright so invert them if bright color theme == bright background is used */\n\t\tfilter: var(--background-invert-if-bright);\n\n\t\t&.has-unread::after {\n\t\t\tbackground-color: var(--color-main-text);\n\t\t}\n\n\t\timg {\n\t\t\twidth: $header-icon-size;\n\t\t\theight: $header-icon-size;\n\t\t\tpadding: calc((50px - $header-icon-size) / 2);\n\t\t}\n\t}\n}\n\n.has-unread::after {\n\tcontent: \"\";\n\twidth: 8px;\n\theight: 8px;\n\tbackground-color: var(--color-primary-text);\n\tborder-radius: 50%;\n\tposition: absolute;\n\tdisplay: block;\n\ttop: 10px;\n\tright: 10px;\n}\n\n.unread-counter {\n\tdisplay: none;\n}\n</style>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppMenu.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppMenu.vue?vue&type=style&index=0&id=b778f520&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppMenu.vue?vue&type=style&index=0&id=b778f520&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppMenu.vue?vue&type=template&id=b778f520&scoped=true&\"\nimport script from \"./AppMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./AppMenu.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AppMenu.vue?vue&type=style&index=0&id=b778f520&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b778f520\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('nav',{staticClass:\"app-menu\"},[_c('ul',{staticClass:\"app-menu-main\"},_vm._l((_vm.mainAppList),function(app){return _c('li',{key:app.id,staticClass:\"app-menu-entry\",class:{ 'app-menu-entry__active': app.active },attrs:{\"data-app-id\":app.id}},[_c('a',{class:{ 'has-unread': app.unread > 0 },attrs:{\"href\":app.href,\"aria-label\":_vm.appLabel(app),\"title\":app.name,\"aria-current\":app.active ? 'page' : false,\"target\":app.target ? '_blank' : undefined,\"rel\":app.target ? 'noopener noreferrer' : undefined}},[_c('img',{attrs:{\"src\":app.icon,\"alt\":\"\"}}),_vm._v(\" \"),_c('div',{staticClass:\"app-menu-entry--label\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(app.name)+\"\\n\\t\\t\\t\\t\\t\"),(app.unread > 0)?_c('span',{staticClass:\"hidden-visually unread-counter\"},[_vm._v(_vm._s(app.unread))]):_vm._e()])])])}),0),_vm._v(\" \"),_c('NcActions',{staticClass:\"app-menu-more\",attrs:{\"aria-label\":_vm.t('core', 'More apps')}},_vm._l((_vm.popoverAppList),function(app){return _c('NcActionLink',{key:app.id,staticClass:\"app-menu-popover-entry\",attrs:{\"aria-label\":_vm.appLabel(app),\"aria-current\":app.active ? 'page' : false,\"href\":app.href},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('div',{staticClass:\"app-icon\",class:{ 'has-unread': app.unread > 0 }},[_c('img',{attrs:{\"src\":app.icon,\"alt\":\"\"}})])]},proxy:true}],null,true)},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(app.name)+\"\\n\\t\\t\\t\"),(app.unread > 0)?_c('span',{staticClass:\"hidden-visually unread-counter\"},[_vm._v(_vm._s(app.unread))]):_vm._e()])}),1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2023 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n-->\n\n<template>\n\t<li :id=\"id\"\n\t\tclass=\"menu-entry\">\n\t\t<a v-if=\"href\"\n\t\t\t:href=\"href\"\n\t\t\t:class=\"{ active }\"\n\t\t\t@click.exact=\"handleClick\">\n\t\t\t<NcLoadingIcon v-if=\"loading\"\n\t\t\t\tclass=\"menu-entry__loading-icon\"\n\t\t\t\t:size=\"18\" />\n\t\t\t<img v-else :src=\"cachedIcon\" alt=\"\" />\n\t\t\t{{ name }}\n\t\t</a>\n\t\t<button v-else>\n\t\t\t<img :src=\"cachedIcon\" alt=\"\" />\n\t\t\t{{ name }}\n\t\t</button>\n\t</li>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\n\nconst versionHash = loadState('core', 'versionHash', '')\n\nexport default {\n\tname: 'UserMenuEntry',\n\n\tcomponents: {\n\t\tNcLoadingIcon,\n\t},\n\n\tprops: {\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\thref: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcachedIcon() {\n\t\t\treturn `${this.icon}?v=${versionHash}`\n\t\t},\n\t},\n\n\tmethods: {\n\t\thandleClick() {\n\t\t\tthis.loading = true\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.menu-entry {\n\t&__loading-icon {\n\t\tmargin-right: 8px;\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenuEntry.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenuEntry.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenuEntry.vue?vue&type=style&index=0&id=6e59d13c&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenuEntry.vue?vue&type=style&index=0&id=6e59d13c&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserMenuEntry.vue?vue&type=template&id=6e59d13c&scoped=true&\"\nimport script from \"./UserMenuEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./UserMenuEntry.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserMenuEntry.vue?vue&type=style&index=0&id=6e59d13c&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6e59d13c\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('li',{staticClass:\"menu-entry\",attrs:{\"id\":_vm.id}},[(_vm.href)?_c('a',{class:{ active: _vm.active },attrs:{\"href\":_vm.href},on:{\"click\":function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey)return null;return _vm.handleClick.apply(null, arguments)}}},[(_vm.loading)?_c('NcLoadingIcon',{staticClass:\"menu-entry__loading-icon\",attrs:{\"size\":18}}):_c('img',{attrs:{\"src\":_vm.cachedIcon,\"alt\":\"\"}}),_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.name)+\"\\n\\t\")],1):_c('button',[_c('img',{attrs:{\"src\":_vm.cachedIcon,\"alt\":\"\"}}),_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.name)+\"\\n\\t\")])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2023 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n-->\n\n<template>\n\t<NcHeaderMenu id=\"user-menu\"\n\t\tclass=\"user-menu\"\n\t\t:aria-label=\"t('core', 'Open settings menu')\">\n\t\t<template #trigger>\n\t\t\t<NcAvatar class=\"user-menu__avatar\"\n\t\t\t\t:disable-menu=\"true\"\n\t\t\t\t:disable-tooltip=\"true\"\n\t\t\t\t:user=\"userId\" />\n\t\t</template>\n\t\t<nav class=\"user-menu__nav\"\n\t\t\t:aria-label=\"t('core', 'Settings menu')\">\n\t\t\t<ul>\n\t\t\t\t<UserMenuEntry v-for=\"entry in settingsNavEntries\"\n\t\t\t\t\tv-bind=\"entry\"\n\t\t\t\t\t:key=\"entry.id\" />\n\t\t\t</ul>\n\t\t</nav>\n\t</NcHeaderMenu>\n</template>\n\n<script>\nimport { emit } from '@nextcloud/event-bus'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { loadState } from '@nextcloud/initial-state'\n\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js'\nimport NcHeaderMenu from '@nextcloud/vue/dist/Components/NcHeaderMenu.js'\n\nimport UserMenuEntry from '../components/UserMenu/UserMenuEntry.vue'\n\nconst settingsNavEntries = loadState('core', 'settingsNavEntries', [])\n\nexport default {\n\tname: 'UserMenu',\n\n\tcomponents: {\n\t\tNcAvatar,\n\t\tNcHeaderMenu,\n\t\tUserMenuEntry,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tsettingsNavEntries,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t}\n\t},\n\n\tmounted() {\n\t\temit('core:user-menu:mounted')\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.user-menu {\n\tmargin-right: 12px;\n\n\t&:deep {\n\t\t.header-menu {\n\t\t\t&__trigger {\n\t\t\t\topacity: 1 !important;\n\t\t\t\t&:focus-visible {\n\t\t\t\t\t.user-menu__avatar {\n\t\t\t\t\t\tborder: 2px solid var(--color-primary-text);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&__carret {\n\t\t\t\tdisplay: none !important;\n\t\t\t}\n\n\t\t\t&__content {\n\t\t\t\twidth: fit-content !important;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__avatar {\n\t\t&:active,\n\t\t&:focus,\n\t\t&:hover {\n\t\t\tborder: 2px solid var(--color-primary-text);\n\t\t}\n\t}\n\n\t&__nav {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\n\t\tul {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tgap: 2px;\n\n\t\t\t&:deep {\n\t\t\t\tli {\n\t\t\t\t\ta,\n\t\t\t\t\tbutton {\n\t\t\t\t\t\tborder-radius: 6px;\n\t\t\t\t\t\tdisplay: inline-flex;\n\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\theight: var(--header-menu-item-height);\n\t\t\t\t\t\tcolor: var(--color-main-text);\n\t\t\t\t\t\tpadding: 10px 8px;\n\t\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\twidth: 100%;\n\n\t\t\t\t\t\t&:hover {\n\t\t\t\t\t\t\tbackground-color: var(--color-background-hover);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t&:focus-visible {\n\t\t\t\t\t\t\tbackground-color: var(--color-background-hover) !important;\n\t\t\t\t\t\t\tbox-shadow: inset 0 0 0 2px var(--color-primary) !important;\n\t\t\t\t\t\t\toutline: none !important;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t&:active,\n\t\t\t\t\t\t&.active {\n\t\t\t\t\t\t\tbackground-color: var(--color-primary-light);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tspan {\n\t\t\t\t\t\t\tpadding-bottom: 0;\n\t\t\t\t\t\t\tcolor: var(--color-main-text);\n\t\t\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\t\t\t\tmax-width: 110px;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\timg {\n\t\t\t\t\t\t\twidth: 16px;\n\t\t\t\t\t\t\theight: 16px;\n\t\t\t\t\t\t\tmargin-right: 10px;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\timg,\n\t\t\t\t\t\tsvg {\n\t\t\t\t\t\t\topacity: .7;\n\t\t\t\t\t\t\tfilter: var(--background-invert-if-dark);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override global button styles\n\t\t\t\t\tbutton {\n\t\t\t\t\t\tbackground-color: transparent;\n\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\tmargin: 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenu.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenu.vue?vue&type=style&index=0&id=6a818bbc&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenu.vue?vue&type=style&index=0&id=6a818bbc&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserMenu.vue?vue&type=template&id=6a818bbc&scoped=true&\"\nimport script from \"./UserMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./UserMenu.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserMenu.vue?vue&type=style&index=0&id=6a818bbc&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6a818bbc\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcHeaderMenu',{staticClass:\"user-menu\",attrs:{\"id\":\"user-menu\",\"aria-label\":_vm.t('core', 'Open settings menu')},scopedSlots:_vm._u([{key:\"trigger\",fn:function(){return [_c('NcAvatar',{staticClass:\"user-menu__avatar\",attrs:{\"disable-menu\":true,\"disable-tooltip\":true,\"user\":_vm.userId}})]},proxy:true}])},[_vm._v(\" \"),_c('nav',{staticClass:\"user-menu__nav\",attrs:{\"aria-label\":_vm.t('core', 'Settings menu')}},[_c('ul',_vm._l((_vm.settingsNavEntries),function(entry){return _c('UserMenuEntry',_vm._b({key:entry.id},'UserMenuEntry',entry,false))}),1)])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Jan-Christoph Borchardt <hey@jancborchardt.net>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author nacho <nacho@ownyourbits.com>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* globals Snap */\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport moment from 'moment'\n\nimport { initSessionHeartBeat } from './session-heartbeat.js'\nimport OC from './OC/index.js'\nimport { setUp as setUpContactsMenu } from './components/ContactsMenu.js'\nimport { setUp as setUpMainMenu } from './components/MainMenu.js'\nimport { setUp as setUpUserMenu } from './components/UserMenu.js'\nimport PasswordConfirmation from './OC/password-confirmation.js'\n\n// keep in sync with core/css/variables.scss\nconst breakpointMobileWidth = 1024\n\nconst initLiveTimestamps = () => {\n\t// Update live timestamps every 30 seconds\n\tsetInterval(() => {\n\t\t$('.live-relative-timestamp').each(function() {\n\t\t\tconst timestamp = parseInt($(this).attr('data-timestamp'), 10)\n\t\t\t$(this).text(moment(timestamp).fromNow())\n\t\t})\n\t}, 30 * 1000)\n}\n\n/**\n * Moment doesn't have aliases for every locale and doesn't parse some locale IDs correctly so we need to alias them\n */\nconst localeAliases = {\n\tzh: 'zh-cn',\n\tzh_Hans: 'zh-cn',\n\tzh_Hans_CN: 'zh-cn',\n\tzh_Hans_HK: 'zh-cn',\n\tzh_Hans_MO: 'zh-cn',\n\tzh_Hans_SG: 'zh-cn',\n\tzh_Hant: 'zh-hk',\n\tzh_Hant_HK: 'zh-hk',\n\tzh_Hant_MO: 'zh-mo',\n\tzh_Hant_TW: 'zh-tw',\n}\nlet locale = OC.getLocale()\nif (Object.prototype.hasOwnProperty.call(localeAliases, locale)) {\n\tlocale = localeAliases[locale]\n}\n\n/**\n * Set users locale to moment.js as soon as possible\n */\nmoment.locale(locale)\n\n/**\n * Initializes core\n */\nexport const initCore = () => {\n\t$(window).on('unload.main', () => { OC._unloadCalled = true })\n\t$(window).on('beforeunload.main', () => {\n\t\t// super-trick thanks to http://stackoverflow.com/a/4651049\n\t\t// in case another handler displays a confirmation dialog (ex: navigating away\n\t\t// during an upload), there are two possible outcomes: user clicked \"ok\" or\n\t\t// \"cancel\"\n\n\t\t// first timeout handler is called after unload dialog is closed\n\t\tsetTimeout(() => {\n\t\t\tOC._userIsNavigatingAway = true\n\n\t\t\t// second timeout event is only called if user cancelled (Chrome),\n\t\t\t// but in other browsers it might still be triggered, so need to\n\t\t\t// set a higher delay...\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (!OC._unloadCalled) {\n\t\t\t\t\tOC._userIsNavigatingAway = false\n\t\t\t\t}\n\t\t\t}, 10000)\n\t\t}, 1)\n\t})\n\t$(document).on('ajaxError.main', function(event, request, settings) {\n\t\tif (settings && settings.allowAuthErrors) {\n\t\t\treturn\n\t\t}\n\t\tOC._processAjaxError(request)\n\t})\n\n\tinitSessionHeartBeat()\n\n\tOC.registerMenu($('#expand'), $('#expanddiv'), false, true)\n\n\t// toggle for menus\n\t$(document).on('mouseup.closemenus', event => {\n\t\tconst $el = $(event.target)\n\t\tif ($el.closest('.menu').length || $el.closest('.menutoggle').length) {\n\t\t\t// don't close when clicking on the menu directly or a menu toggle\n\t\t\treturn false\n\t\t}\n\n\t\tOC.hideMenus()\n\t})\n\n\tsetUpMainMenu()\n\tsetUpUserMenu()\n\tsetUpContactsMenu()\n\n\t// just add snapper for logged in users\n\t// and if the app doesn't handle the nav slider itself\n\tif ($('#app-navigation').length && !$('html').hasClass('lte9')\n\t\t&& !$('#app-content').hasClass('no-snapper')) {\n\n\t\t// App sidebar on mobile\n\t\tconst snapper = new Snap({\n\t\t\telement: document.getElementById('app-content'),\n\t\t\tdisable: 'right',\n\t\t\tmaxPosition: 300, // $navigation-width\n\t\t\tminDragDistance: 100,\n\t\t})\n\n\t\t$('#app-content').prepend('<div id=\"app-navigation-toggle\" class=\"icon-menu\" style=\"display:none\" tabindex=\"0\"></div>')\n\n\t\t// keep track whether snapper is currently animating, and\n\t\t// prevent to call open or close while that is the case\n\t\t// to avoid duplicating events (snap.js doesn't check this)\n\t\tlet animating = false\n\t\tsnapper.on('animating', () => {\n\t\t\t// we need this because the trigger button\n\t\t\t// is also implicitly wired to close by snapper\n\t\t\tanimating = true\n\t\t})\n\t\tsnapper.on('animated', () => {\n\t\t\tanimating = false\n\t\t})\n\t\tsnapper.on('start', () => {\n\t\t\t// we need this because dragging triggers that\n\t\t\tanimating = true\n\t\t})\n\t\tsnapper.on('end', () => {\n\t\t\t// we need this because dragging stop triggers that\n\t\t\tanimating = false\n\t\t})\n\n\t\t// These are necessary because calling open or close\n\t\t// on snapper during an animation makes it trigger an\n\t\t// unfinishable animation, which itself will continue\n\t\t// triggering animating events and cause high CPU load,\n\t\t//\n\t\t// Ref https://github.com/jakiestfu/Snap.js/issues/216\n\t\tconst oldSnapperOpen = snapper.open\n\t\tconst oldSnapperClose = snapper.close\n\t\tconst _snapperOpen = () => {\n\t\t\tif (animating || snapper.state().state !== 'closed') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\toldSnapperOpen('left')\n\t\t}\n\n\t\tconst _snapperClose = () => {\n\t\t\tif (animating || snapper.state().state === 'closed') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\toldSnapperClose()\n\t\t}\n\n\t\t// Needs to be deferred to properly catch in-between\n\t\t// events that snap.js is triggering after dragging.\n\t\t//\n\t\t// Skipped when running unit tests as we are not testing\n\t\t// the snap.js workarounds...\n\t\tif (!window.TESTING) {\n\t\t\tsnapper.open = () => {\n\t\t\t\t_.defer(_snapperOpen)\n\t\t\t}\n\t\t\tsnapper.close = () => {\n\t\t\t\t_.defer(_snapperClose)\n\t\t\t}\n\t\t}\n\n\t\t$('#app-navigation-toggle').click((e) => {\n\t\t\t// close is implicit in the button by snap.js\n\t\t\tif (snapper.state().state !== 'left') {\n\t\t\t\tsnapper.open()\n\t\t\t}\n\t\t})\n\t\t$('#app-navigation-toggle').keypress(e => {\n\t\t\tif (snapper.state().state === 'left') {\n\t\t\t\tsnapper.close()\n\t\t\t} else {\n\t\t\t\tsnapper.open()\n\t\t\t}\n\t\t})\n\n\t\t// close sidebar when switching navigation entry\n\t\tconst $appNavigation = $('#app-navigation')\n\t\t$appNavigation.delegate('a, :button', 'click', event => {\n\t\t\tconst $target = $(event.target)\n\t\t\t// don't hide navigation when changing settings or adding things\n\t\t\tif ($target.is('.app-navigation-noclose')\n\t\t\t\t|| $target.closest('.app-navigation-noclose').length) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif ($target.is('.app-navigation-entry-utils-menu-button')\n\t\t\t\t|| $target.closest('.app-navigation-entry-utils-menu-button').length) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif ($target.is('.add-new')\n\t\t\t\t|| $target.closest('.add-new').length) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif ($target.is('#app-settings')\n\t\t\t\t|| $target.closest('#app-settings').length) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tsnapper.close()\n\t\t})\n\n\t\tlet navigationBarSlideGestureEnabled = false\n\t\tlet navigationBarSlideGestureAllowed = true\n\t\tlet navigationBarSlideGestureEnablePending = false\n\n\t\tOC.allowNavigationBarSlideGesture = () => {\n\t\t\tnavigationBarSlideGestureAllowed = true\n\n\t\t\tif (navigationBarSlideGestureEnablePending) {\n\t\t\t\tsnapper.enable()\n\n\t\t\t\tnavigationBarSlideGestureEnabled = true\n\t\t\t\tnavigationBarSlideGestureEnablePending = false\n\t\t\t}\n\t\t}\n\n\t\tOC.disallowNavigationBarSlideGesture = () => {\n\t\t\tnavigationBarSlideGestureAllowed = false\n\n\t\t\tif (navigationBarSlideGestureEnabled) {\n\t\t\t\tconst endCurrentDrag = true\n\t\t\t\tsnapper.disable(endCurrentDrag)\n\n\t\t\t\tnavigationBarSlideGestureEnabled = false\n\t\t\t\tnavigationBarSlideGestureEnablePending = true\n\t\t\t}\n\t\t}\n\n\t\tconst toggleSnapperOnSize = () => {\n\t\t\tif ($(window).width() > breakpointMobileWidth) {\n\t\t\t\tsnapper.close()\n\t\t\t\tsnapper.disable()\n\n\t\t\t\tnavigationBarSlideGestureEnabled = false\n\t\t\t\tnavigationBarSlideGestureEnablePending = false\n\t\t\t} else if (navigationBarSlideGestureAllowed) {\n\t\t\t\tsnapper.enable()\n\n\t\t\t\tnavigationBarSlideGestureEnabled = true\n\t\t\t\tnavigationBarSlideGestureEnablePending = false\n\t\t\t} else {\n\t\t\t\tnavigationBarSlideGestureEnablePending = true\n\t\t\t}\n\t\t}\n\n\t\t$(window).resize(_.debounce(toggleSnapperOnSize, 250))\n\n\t\t// initial call\n\t\ttoggleSnapperOnSize()\n\n\t}\n\n\tinitLiveTimestamps()\n\tPasswordConfirmation.init()\n}\n","/**\n * @copyright 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n$.prototype.tooltip = (function(tooltip) {\n\treturn function(config) {\n\t\ttry {\n\t\t\treturn tooltip.call(this, config)\n\t\t} catch (ex) {\n\t\t\tif (ex instanceof TypeError && config === 'destroy') {\n\t\t\t\tif (window.TESTING === undefined) {\n\t\t\t\t\tconsole.error('Deprecated call $.tooltip(\\'destroy\\') has been deprecated and should be removed')\n\t\t\t\t}\n\t\t\t\treturn tooltip.call(this, 'dispose')\n\t\t\t}\n\t\t\tif (ex instanceof TypeError && config === 'fixTitle') {\n\t\t\t\tif (window.TESTING === undefined) {\n\t\t\t\t\tconsole.error('Deprecated call $.tooltip(\\'fixTitle\\') has been deprecated and should be removed')\n\t\t\t\t}\n\t\t\t\treturn tooltip.call(this, '_fixTitle')\n\t\t\t}\n\t\t}\n\t}\n})($.prototype.tooltip)\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\n\nimport UserMenu from '../views/UserMenu.vue'\n\nexport const setUp = () => {\n\tconst mountPoint = document.getElementById('user-menu')\n\tif (mountPoint) {\n\t\t// eslint-disable-next-line no-new\n\t\tnew Vue({\n\t\t\tel: mountPoint,\n\t\t\trender: h => h(UserMenu),\n\t\t})\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n'\nimport Vue from 'vue'\n\nimport AppMenu from './AppMenu.vue'\n\nexport const setUp = () => {\n\n\tVue.mixin({\n\t\tmethods: {\n\t\t\tt,\n\t\t\tn,\n\t\t},\n\t})\n\n\tconst container = document.getElementById('header-left__appmenu')\n\tif (!container) {\n\t\t// no container, possibly we're on a public page\n\t\treturn\n\t}\n\tconst AppMenuApp = Vue.extend(AppMenu)\n\tconst appMenu = new AppMenuApp({}).$mount(container)\n\n\tObject.assign(OC, {\n\t\tsetNavigationCounter(id, counter) {\n\t\t\tappMenu.setNavigationCounter(id, counter)\n\t\t},\n\t})\n\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Christopher Ng <chrng8@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\n\nimport ContactsMenu from '../views/ContactsMenu.vue'\n\n/**\n * @todo move to contacts menu code https://github.com/orgs/nextcloud/projects/31#card-21213129\n */\nexport const setUp = () => {\n\tconst mountPoint = document.getElementById('contactsmenu')\n\tif (mountPoint) {\n\t\t// eslint-disable-next-line no-new\n\t\tnew Vue({\n\t\t\tel: mountPoint,\n\t\t\trender: h => h(ContactsMenu),\n\t\t})\n\t}\n}\n","/**\n * @copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/*\n * Detects links:\n * Either the http(s) protocol is given or two strings, basically limited to ascii with the last\n * word being at least one digit long,\n * followed by at least another character\n *\n * The downside: anything not ascii is excluded. Not sure how common it is in areas using different\n * alphabets… the upside: fake domains with similar looking characters won't be formatted as links\n *\n * This is a copy of the backend regex in IURLGenerator, make sure to adjust both when changing\n */\nconst urlRegex = /(\\s|^)(https?:\\/\\/)((?:[-A-Z0-9+_]+\\.)+[-A-Z]+(?:\\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*)(\\s|$)/ig\n\n/**\n * @param {any} content -\n */\nexport function plainToRich(content) {\n\treturn this.formatLinksRich(content)\n}\n\n/**\n * @param {any} content -\n */\nexport function richToPlain(content) {\n\treturn this.formatLinksPlain(content)\n}\n\n/**\n * @param {any} content -\n */\nexport function formatLinksRich(content) {\n\treturn content.replace(urlRegex, function(_, leadingSpace, protocol, url, trailingSpace) {\n\t\tlet linkText = url\n\t\tif (!protocol) {\n\t\t\tprotocol = 'https://'\n\t\t} else if (protocol === 'http://') {\n\t\t\tlinkText = protocol + url\n\t\t}\n\n\t\treturn leadingSpace + '<a class=\"external\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"' + protocol + url + '\">' + linkText + '</a>' + trailingSpace\n\t})\n}\n\n/**\n * @param {any} content -\n */\nexport function formatLinksPlain(content) {\n\tconst $content = $('<div></div>').html(content)\n\t$content.find('a').each(function() {\n\t\tconst $this = $(this)\n\t\t$this.html($this.attr('href'))\n\t})\n\treturn $content.html()\n}\n","/**\n * @copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * @param {any} options -\n */\nexport function query(options) {\n\toptions = options || {}\n\tconst dismissOptions = options.dismiss || {}\n\t$.ajax({\n\t\ttype: 'GET',\n\t\turl: options.url || generateOcsUrl('core/whatsnew?format=json'),\n\t\tsuccess: options.success || function(data, statusText, xhr) {\n\t\t\tonQuerySuccess(data, statusText, xhr, dismissOptions)\n\t\t},\n\t\terror: options.error || onQueryError,\n\t})\n}\n\n/**\n * @param {any} version -\n * @param {any} options -\n */\nexport function dismiss(version, options) {\n\toptions = options || {}\n\t$.ajax({\n\t\ttype: 'POST',\n\t\turl: options.url || generateOcsUrl('core/whatsnew'),\n\t\tdata: { version: encodeURIComponent(version) },\n\t\tsuccess: options.success || onDismissSuccess,\n\t\terror: options.error || onDismissError,\n\t})\n\t// remove element immediately\n\t$('.whatsNewPopover').remove()\n}\n\n/**\n * @param {any} data -\n * @param {any} statusText -\n * @param {any} xhr -\n * @param {any} dismissOptions -\n */\nfunction onQuerySuccess(data, statusText, xhr, dismissOptions) {\n\tconsole.debug('querying Whats New data was successful: ' + statusText)\n\tconsole.debug(data)\n\n\tif (xhr.status !== 200) {\n\t\treturn\n\t}\n\n\tlet item, menuItem, text, icon\n\n\tconst div = document.createElement('div')\n\tdiv.classList.add('popovermenu', 'open', 'whatsNewPopover', 'menu-left')\n\n\tconst list = document.createElement('ul')\n\n\t// header\n\titem = document.createElement('li')\n\tmenuItem = document.createElement('span')\n\tmenuItem.className = 'menuitem'\n\n\ttext = document.createElement('span')\n\ttext.innerText = t('core', 'New in') + ' ' + data.ocs.data.product\n\ttext.className = 'caption'\n\tmenuItem.appendChild(text)\n\n\ticon = document.createElement('span')\n\ticon.className = 'icon-close'\n\ticon.onclick = function() {\n\t\tdismiss(data.ocs.data.version, dismissOptions)\n\t}\n\tmenuItem.appendChild(icon)\n\n\titem.appendChild(menuItem)\n\tlist.appendChild(item)\n\n\t// Highlights\n\tfor (const i in data.ocs.data.whatsNew.regular) {\n\t\tconst whatsNewTextItem = data.ocs.data.whatsNew.regular[i]\n\t\titem = document.createElement('li')\n\n\t\tmenuItem = document.createElement('span')\n\t\tmenuItem.className = 'menuitem'\n\n\t\ticon = document.createElement('span')\n\t\ticon.className = 'icon-checkmark'\n\t\tmenuItem.appendChild(icon)\n\n\t\ttext = document.createElement('p')\n\t\ttext.innerHTML = _.escape(whatsNewTextItem)\n\t\tmenuItem.appendChild(text)\n\n\t\titem.appendChild(menuItem)\n\t\tlist.appendChild(item)\n\t}\n\n\t// Changelog URL\n\tif (!_.isUndefined(data.ocs.data.changelogURL)) {\n\t\titem = document.createElement('li')\n\n\t\tmenuItem = document.createElement('a')\n\t\tmenuItem.href = data.ocs.data.changelogURL\n\t\tmenuItem.rel = 'noreferrer noopener'\n\t\tmenuItem.target = '_blank'\n\n\t\ticon = document.createElement('span')\n\t\ticon.className = 'icon-link'\n\t\tmenuItem.appendChild(icon)\n\n\t\ttext = document.createElement('span')\n\t\ttext.innerText = t('core', 'View changelog')\n\t\tmenuItem.appendChild(text)\n\n\t\titem.appendChild(menuItem)\n\t\tlist.appendChild(item)\n\t}\n\n\tdiv.appendChild(list)\n\tdocument.body.appendChild(div)\n}\n\n/**\n * @param {any} x -\n * @param {any} t -\n * @param {any} e -\n */\nfunction onQueryError(x, t, e) {\n\tconsole.debug('querying Whats New Data resulted in an error: ' + t + e)\n\tconsole.debug(x)\n}\n\n/**\n * @param {any} data -\n */\nfunction onDismissSuccess(data) {\n\t// noop\n}\n\n/**\n * @param {any} data -\n */\nfunction onDismissError(data) {\n\tconsole.debug('dismissing Whats New data resulted in an error: ' + data)\n}\n","/**\n * @copyright Copyright (c) 2022 Joas Schilling <coding@schilljs.com>\n *\n * @author Joas Schilling <coding@schilljs.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\n\n/**\n * Set the page heading\n *\n * @param {string} heading page title from the history api\n */\nexport function setPageHeading(heading) {\n\tconst headingEl = document.getElementById('page-heading-level-1')\n\tif (headingEl) {\n\t\theadingEl.textContent = heading\n\t}\n}\nexport default {\n\t/**\n\t * @return {boolean} Whether the user opted-out of shortcuts so that they should not be registered\n\t */\n\tdisableKeyboardShortcuts() {\n\t\treturn loadState('theming', 'shortcutsDisabled', false)\n\t},\n\tsetPageHeading,\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable @nextcloud/no-deprecations */\nimport { initCore } from './init'\n\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport 'jquery-migrate/dist/jquery-migrate.min'\n// TODO: switch to `jquery-ui` package and import widgets and effects individually\n// `jquery-ui-dist` is used as a workaround for the issue of missing effects\nimport 'jquery-ui-dist/jquery-ui'\nimport 'jquery-ui-dist/jquery-ui.css'\nimport 'jquery-ui-dist/jquery-ui.theme.css'\n// END TODO\nimport autosize from 'autosize'\nimport Backbone from 'backbone'\nimport './Polyfill/tooltip'\nimport ClipboardJS from 'clipboard'\nimport { dav } from 'davclient.js'\nimport Handlebars from 'handlebars'\nimport md5 from 'blueimp-md5'\nimport moment from 'moment'\nimport 'select2'\nimport 'select2/select2.css'\nimport 'snap.js/dist/snap'\nimport 'strengthify'\nimport 'strengthify/strengthify.css'\n\nimport OC from './OC/index'\nimport OCP from './OCP/index'\nimport OCA from './OCA/index'\nimport { getToken as getRequestToken } from './OC/requesttoken'\n\nconst warnIfNotTesting = function() {\n\tif (window.TESTING === undefined) {\n\t\tconsole.warn.apply(console, arguments)\n\t}\n}\n\n/**\n * Mark a function as deprecated and automatically\n * warn if used!\n *\n * @param {Function} func the library to deprecate\n * @param {string} funcName the name of the library\n * @param {number} version the version this gets removed\n * @return {Function}\n */\nconst deprecate = (func, funcName, version) => {\n\tconst oldFunc = func\n\tconst newFunc = function() {\n\t\twarnIfNotTesting(`The ${funcName} library is deprecated! It will be removed in nextcloud ${version}.`)\n\t\treturn oldFunc.apply(this, arguments)\n\t}\n\tObject.assign(newFunc, oldFunc)\n\treturn newFunc\n}\n\nconst setDeprecatedProp = (global, cb, msg) => {\n\t(Array.isArray(global) ? global : [global]).forEach(global => {\n\t\tif (window[global] !== undefined) {\n\t\t\tdelete window[global]\n\t\t}\n\t\tObject.defineProperty(window, global, {\n\t\t\tget: () => {\n\t\t\t\tif (msg) {\n\t\t\t\t\twarnIfNotTesting(`${global} is deprecated: ${msg}`)\n\t\t\t\t} else {\n\t\t\t\t\twarnIfNotTesting(`${global} is deprecated`)\n\t\t\t\t}\n\n\t\t\t\treturn cb()\n\t\t\t},\n\t\t})\n\t})\n}\n\nwindow._ = _\nsetDeprecatedProp(['$', 'jQuery'], () => $, 'The global jQuery is deprecated. It will be removed in a later versions without another warning. Please ship your own.')\nsetDeprecatedProp('autosize', () => autosize, 'please ship your own, this will be removed in Nextcloud 20')\nsetDeprecatedProp('Backbone', () => Backbone, 'please ship your own, this will be removed in Nextcloud 20')\nsetDeprecatedProp(['Clipboard', 'ClipboardJS'], () => ClipboardJS, 'please ship your own, this will be removed in Nextcloud 20')\nwindow.dav = dav\nsetDeprecatedProp('Handlebars', () => Handlebars, 'please ship your own, this will be removed in Nextcloud 20')\nsetDeprecatedProp('md5', () => md5, 'please ship your own, this will be removed in Nextcloud 20')\nsetDeprecatedProp('moment', () => moment, 'please ship your own, this will be removed in Nextcloud 20')\n\nwindow.OC = OC\nsetDeprecatedProp('initCore', () => initCore, 'this is an internal function')\nsetDeprecatedProp('oc_appswebroots', () => OC.appswebroots, 'use OC.appswebroots instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_config', () => OC.config, 'use OC.config instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_current_user', () => OC.getCurrentUser().uid, 'use OC.getCurrentUser().uid instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_debug', () => OC.debug, 'use OC.debug instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_defaults', () => OC.theme, 'use OC.theme instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_isadmin', OC.isUserAdmin, 'use OC.isUserAdmin() instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_requesttoken', () => getRequestToken(), 'use OC.requestToken instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_webroot', () => OC.webroot, 'use OC.getRootPath() instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('OCDialogs', () => OC.dialogs, 'use OC.dialogs instead, this will be removed in Nextcloud 20')\nwindow.OCP = OCP\nwindow.OCA = OCA\n$.fn.select2 = deprecate($.fn.select2, 'select2', 19)\n\n/**\n * translate a string\n *\n * @param {string} app the id of the app for which to translate the string\n * @param {string} text the string to translate\n * @param [vars] map of placeholder key to value\n * @param {number} [count] number to replace %n with\n * @return {string}\n */\nwindow.t = _.bind(OC.L10N.translate, OC.L10N)\n\n/**\n * translate a string\n *\n * @param {string} app the id of the app for which to translate the string\n * @param {string} text_singular the string to translate for exactly one object\n * @param {string} text_plural the string to translate for n objects\n * @param {number} count number to determine whether to use singular or plural\n * @param [vars] map of placeholder key to value\n * @return {string} Translated string\n */\nwindow.n = _.bind(OC.L10N.translatePlural, OC.L10N)\n","/**\n * @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport escapeHTML from 'escape-html'\n\n/**\n * @typedef TypeDefinition\n * @function {Function} action This action is executed to let the user select a resource\n * @param {string} icon Contains the icon css class for the type\n * @function Object() { [native code] }\n */\n\n/**\n * @type {TypeDefinition[]}\n */\nconst types = {}\n\n/**\n * Those translations will be used by the vue component but they should be shipped with the server\n * FIXME: Those translations should be added to the library\n *\n * @return {Array}\n */\nexport const l10nProjects = () => {\n\treturn [\n\t\tt('core', 'Add to a project'),\n\t\tt('core', 'Show details'),\n\t\tt('core', 'Hide details'),\n\t\tt('core', 'Rename project'),\n\t\tt('core', 'Failed to rename the project'),\n\t\tt('core', 'Failed to create a project'),\n\t\tt('core', 'Failed to add the item to the project'),\n\t\tt('core', 'Connect items to a project to make them easier to find'),\n\t\tt('core', 'Type to search for existing projects'),\n\t]\n}\n\nexport default {\n\t/**\n\t *\n\t * @param {string} type type\n\t * @param {TypeDefinition} typeDefinition typeDefinition\n\t */\n\tregisterType(type, typeDefinition) {\n\t\ttypes[type] = typeDefinition\n\t},\n\ttrigger(type) {\n\t\treturn types[type].action()\n\t},\n\tgetTypes() {\n\t\treturn Object.keys(types)\n\t},\n\tgetIcon(type) {\n\t\treturn types[type].typeIconClass || ''\n\t},\n\tgetLabel(type) {\n\t\treturn escapeHTML(types[type].typeString || type)\n\t},\n\tgetLink(type, id) {\n\t\t/* TODO: Allow action to be executed instead of href as well */\n\t\treturn typeof types[type] !== 'undefined' ? types[type].link(id) : ''\n\t},\n}\n","/**\n * @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst loadedScripts = {}\nconst loadedStylesheets = {}\n/**\n * @namespace OCP\n * @class Loader\n */\nexport default {\n\n\t/**\n\t * Load a script asynchronously\n\t *\n\t * @param {string} app the app name\n\t * @param {string} file the script file name\n\t * @return {Promise}\n\t */\n\tloadScript(app, file) {\n\t\tconst key = app + file\n\t\tif (Object.prototype.hasOwnProperty.call(loadedScripts, key)) {\n\t\t\treturn Promise.resolve()\n\t\t}\n\t\tloadedScripts[key] = true\n\t\treturn new Promise(function(resolve, reject) {\n\t\t\tconst scriptPath = OC.filePath(app, 'js', file)\n\t\t\tconst script = document.createElement('script')\n\t\t\tscript.src = scriptPath\n\t\t\tscript.setAttribute('nonce', btoa(OC.requestToken))\n\t\t\tscript.onload = () => resolve()\n\t\t\tscript.onerror = () => reject(new Error(`Failed to load script from ${scriptPath}`))\n\t\t\tdocument.head.appendChild(script)\n\t\t})\n\t},\n\n\t/**\n\t * Load a stylesheet file asynchronously\n\t *\n\t * @param {string} app the app name\n\t * @param {string} file the script file name\n\t * @return {Promise}\n\t */\n\tloadStylesheet(app, file) {\n\t\tconst key = app + file\n\t\tif (Object.prototype.hasOwnProperty.call(loadedStylesheets, key)) {\n\t\t\treturn Promise.resolve()\n\t\t}\n\t\tloadedStylesheets[key] = true\n\t\treturn new Promise(function(resolve, reject) {\n\t\t\tconst stylePath = OC.filePath(app, 'css', file)\n\t\t\tconst link = document.createElement('link')\n\t\t\tlink.href = stylePath\n\t\t\tlink.type = 'text/css'\n\t\t\tlink.rel = 'stylesheet'\n\t\t\tlink.onload = () => resolve()\n\t\t\tlink.onerror = () => reject(new Error(`Failed to load stylesheet from ${stylePath}`))\n\t\t\tdocument.head.appendChild(link)\n\t\t})\n\t},\n}\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport {\n\tshowError,\n\tshowInfo, showMessage,\n\tshowSuccess,\n\tshowWarning,\n} from '@nextcloud/dialogs'\n\nexport default {\n\t/**\n\t * @deprecated 19.0.0 use `showSuccess` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\tsuccess(text, options) {\n\t\treturn showSuccess(text, options)\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `showWarning` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\twarning(text, options) {\n\t\treturn showWarning(text, options)\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `showError` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\terror(text, options) {\n\t\treturn showError(text, options)\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `showInfo` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\tinfo(text, options) {\n\t\treturn showInfo(text, options)\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `showMessage` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\tmessage(text, options) {\n\t\treturn showMessage(text, options)\n\t},\n\n}\n","/**\n * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\n\nimport * as AppConfig from './appconfig'\nimport * as Comments from './comments'\nimport * as WhatsNew from './whatsnew'\n\nimport Accessibility from './accessibility'\nimport Collaboration from './collaboration'\nimport Loader from './loader'\nimport Toast from './toast'\n\n/** @namespace OCP */\nexport default {\n\tAccessibility,\n\tAppConfig,\n\tCollaboration,\n\tComments,\n\tInitialState: {\n\t\t/**\n\t\t * @deprecated 18.0.0 add https://www.npmjs.com/package/@nextcloud/initial-state to your app\n\t\t */\n\t\tloadState,\n\t},\n\tLoader,\n\t/**\n\t * @deprecated 19.0.0 use the `@nextcloud/dialogs` package instead\n\t */\n\tToast,\n\tWhatsNew,\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\nimport OC from '../OC'\n\n/**\n * This plugin inserts the right avatar for the user, depending on, whether a\n * custom avatar is uploaded - which it uses then - or not, and display a\n * placeholder with the first letter of the users name instead.\n * For this it queries the core_avatar_get route, thus this plugin is fit very\n * tightly for owncloud, and it may not work anywhere else.\n *\n * You may use this on any <div></div>\n * Here I'm using <div class=\"avatardiv\"></div> as an example.\n *\n * There are 5 ways to call this:\n *\n * 1. $('.avatardiv').avatar('jdoe', 128);\n * This will make the div to jdoe's fitting avatar, with a size of 128px.\n *\n * 2. $('.avatardiv').avatar('jdoe');\n * This will make the div to jdoe's fitting avatar. If the div already has a\n * height, it will be used for the avatars size. Otherwise this plugin will\n * search for 'size' DOM data, to use for avatar size. If neither are available\n * it will default to 64px.\n *\n * 3. $('.avatardiv').avatar();\n * This will search the DOM for 'user' data, to use as the username. If there\n * is no username available it will default to a placeholder with the value of\n * \"?\". The size will be determined the same way, as the second example.\n *\n * 4. $('.avatardiv').avatar('jdoe', 128, true);\n * This will behave like the first example, except it will also append random\n * hashes to the custom avatar images, to force image reloading in IE8.\n *\n * 5. $('.avatardiv').avatar('jdoe', 128, undefined, true);\n * This will behave like the first example, but it will hide the avatardiv, if\n * it will display the default placeholder. undefined is the ie8fix from\n * example 4 and can be either true, or false/undefined, to be ignored.\n *\n * 6. $('.avatardiv').avatar('jdoe', 128, undefined, true, callback);\n * This will behave like the above example, but it will call the function\n * defined in callback after the avatar is placed into the DOM.\n *\n */\n\n$.fn.avatar = function(user, size, ie8fix, hidedefault, callback, displayname) {\n\tconst setAvatarForUnknownUser = function(target) {\n\t\ttarget.imageplaceholder('?')\n\t\ttarget.css('background-color', '#b9b9b9')\n\t}\n\n\tif (typeof (user) !== 'undefined') {\n\t\tuser = String(user)\n\t}\n\tif (typeof (displayname) !== 'undefined') {\n\t\tdisplayname = String(displayname)\n\t}\n\n\tif (typeof (size) === 'undefined') {\n\t\tif (this.height() > 0) {\n\t\t\tsize = this.height()\n\t\t} else if (this.data('size') > 0) {\n\t\t\tsize = this.data('size')\n\t\t} else {\n\t\t\tsize = 64\n\t\t}\n\t}\n\n\tthis.height(size)\n\tthis.width(size)\n\n\tif (typeof (user) === 'undefined') {\n\t\tif (typeof (this.data('user')) !== 'undefined') {\n\t\t\tuser = this.data('user')\n\t\t} else {\n\t\t\tsetAvatarForUnknownUser(this)\n\t\t\treturn\n\t\t}\n\t}\n\n\t// sanitize\n\tuser = String(user).replace(/\\//g, '')\n\n\tconst $div = this\n\tlet url\n\n\t// If this is our own avatar we have to use the version attribute\n\tif (user === OC.getCurrentUser().uid) {\n\t\turl = OC.generateUrl(\n\t\t\t'/avatar/{user}/{size}?v={version}',\n\t\t\t{\n\t\t\t\tuser,\n\t\t\t\tsize: Math.ceil(size * window.devicePixelRatio),\n\t\t\t\tversion: oc_userconfig.avatar.version,\n\t\t\t})\n\t} else {\n\t\turl = OC.generateUrl(\n\t\t\t'/avatar/{user}/{size}',\n\t\t\t{\n\t\t\t\tuser,\n\t\t\t\tsize: Math.ceil(size * window.devicePixelRatio),\n\t\t\t})\n\t}\n\n\tconst img = new Image()\n\n\t// If the new image loads successfully set it.\n\timg.onload = function() {\n\t\t$div.clearimageplaceholder()\n\t\t$div.append(img)\n\n\t\tif (typeof callback === 'function') {\n\t\t\tcallback()\n\t\t}\n\t}\n\t// Fallback when avatar loading fails:\n\t// Use old placeholder when a displayname attribute is defined,\n\t// otherwise show the unknown user placeholder.\n\timg.onerror = function() {\n\t\t$div.clearimageplaceholder()\n\t\tif (typeof (displayname) !== 'undefined') {\n\t\t\t$div.imageplaceholder(user, displayname)\n\t\t} else {\n\t\t\tsetAvatarForUnknownUser($div)\n\t\t}\n\n\t\tif (typeof callback === 'function') {\n\t\t\tcallback()\n\t\t}\n\t}\n\n\tif (size < 32) {\n\t\t$div.addClass('icon-loading-small')\n\t} else {\n\t\t$div.addClass('icon-loading')\n\t}\n\timg.width = size\n\timg.height = size\n\timg.src = url\n\timg.alt = ''\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\nimport OC from '../OC'\nimport { isA11yActivation } from '../Util/a11y.js'\n\nconst LIST = ''\n\t+ '<div class=\"menu popovermenu menu-left hidden contactsmenu-popover\">'\n\t+ ' <ul>'\n\t+ ' <li>'\n\t+ ' <a>'\n\t+ ' <span class=\"icon-loading-small\"></span>'\n\t+ ' </a>'\n\t+ ' </li>'\n\t+ ' </ul>'\n\t+ '</div>'\n\nconst entryTemplate = require('./contactsmenu/jquery_entry.handlebars')\n\n$.fn.contactsMenu = function(shareWith, shareType, appendTo) {\n\t// 0 - user, 4 - email, 6 - remote\n\tconst allowedTypes = [0, 4, 6]\n\tif (allowedTypes.indexOf(shareType) === -1) {\n\t\treturn\n\t}\n\n\tconst $div = this\n\tappendTo.append(LIST)\n\tconst $list = appendTo.find('div.contactsmenu-popover')\n\n\t$div.on('click keydown', function(event) {\n\t\tif (!isA11yActivation(event)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (!$list.hasClass('hidden')) {\n\t\t\t$list.addClass('hidden')\n\t\t\t$list.hide()\n\t\t\treturn\n\t\t}\n\n\t\t$list.removeClass('hidden')\n\t\t$list.show()\n\n\t\tif ($list.hasClass('loaded')) {\n\t\t\treturn\n\t\t}\n\n\t\t$list.addClass('loaded')\n\t\t$.ajax(OC.generateUrl('/contactsmenu/findOne'), {\n\t\t\tmethod: 'POST',\n\t\t\tdata: {\n\t\t\t\tshareType,\n\t\t\t\tshareWith,\n\t\t\t},\n\t\t}).then(function(data) {\n\t\t\t$list.find('ul').find('li').addClass('hidden')\n\n\t\t\tlet actions\n\t\t\tif (!data.topAction) {\n\t\t\t\tactions = [{\n\t\t\t\t\thyperlink: '#',\n\t\t\t\t\ttitle: t('core', 'No action available'),\n\t\t\t\t}]\n\t\t\t} else {\n\t\t\t\tactions = [data.topAction].concat(data.actions)\n\t\t\t}\n\n\t\t\tactions.forEach(function(action) {\n\t\t\t\t$list.find('ul').append(entryTemplate(action))\n\t\t\t})\n\n\t\t\t$div.trigger('load')\n\t\t}, function(jqXHR) {\n\t\t\t$list.find('ul').find('li').addClass('hidden')\n\n\t\t\tlet title\n\t\t\tif (jqXHR.status === 404) {\n\t\t\t\ttitle = t('core', 'No action available')\n\t\t\t} else {\n\t\t\t\ttitle = t('core', 'Error fetching contact actions')\n\t\t\t}\n\n\t\t\t$list.find('ul').append(entryTemplate({\n\t\t\t\thyperlink: '#',\n\t\t\t\ttitle,\n\t\t\t}))\n\n\t\t\t$div.trigger('loaderror', jqXHR)\n\t\t})\n\t})\n\n\t$(document).click(function(event) {\n\t\tconst clickedList = ($list.has(event.target).length > 0)\n\t\tlet clickedTarget = ($div.has(event.target).length > 0)\n\n\t\t$div.each(function() {\n\t\t\tif ($(this).is(event.target)) {\n\t\t\t\tclickedTarget = true\n\t\t\t}\n\t\t})\n\n\t\tif (clickedList || clickedTarget) {\n\t\t\treturn\n\t\t}\n\n\t\t$list.addClass('hidden')\n\t\t$list.hide()\n\t})\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * check if an element exists.\n * allows you to write if ($('#myid').exists()) to increase readability\n *\n * @see {@link http://stackoverflow.com/questions/31044/is-there-an-exists-function-for-jquery}\n * @return {boolean}\n */\n$.fn.exists = function() {\n\treturn this.length > 0\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * Filter jQuery selector by attribute value\n *\n * @param {string} attrName attribute name\n * @param {string} attrValue attribute value\n * @return {void}\n */\n$.fn.filterAttr = function(attrName, attrValue) {\n\treturn this.filter(function() {\n\t\treturn $(this).attr(attrName) === attrValue\n\t})\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Gary Kim <gary@garykim.dev>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\nimport { createFocusTrap } from 'focus-trap'\nimport { isA11yActivation } from '../Util/a11y.js'\n\n$.widget('oc.ocdialog', {\n\toptions: {\n\t\twidth: 'auto',\n\t\theight: 'auto',\n\t\tcloseButton: true,\n\t\tcloseOnEscape: true,\n\t\tcloseCallback: null,\n\t\tmodal: false,\n\t},\n\t_create() {\n\t\tconst self = this\n\n\t\tthis.originalCss = {\n\t\t\tdisplay: this.element[0].style.display,\n\t\t\twidth: this.element[0].style.width,\n\t\t\theight: this.element[0].style.height,\n\t\t}\n\n\t\tthis.originalTitle = this.element.attr('title')\n\t\tthis.options.title = this.options.title || this.originalTitle\n\n\t\tthis.$dialog = $('<div class=\"oc-dialog\"></div>')\n\t\t\t.attr({\n\t\t\t\t// Setting tabIndex makes the div focusable\n\t\t\t\ttabIndex: -1,\n\t\t\t\trole: 'dialog',\n\t\t\t})\n\t\t\t.insertBefore(this.element)\n\t\tthis.$dialog.append(this.element.detach())\n\t\tthis.element.removeAttr('title').addClass('oc-dialog-content').appendTo(this.$dialog)\n\n\t\t// Activate the primary button on enter if there is a single input\n\t\tif (self.element.find('input').length === 1) {\n\t\t\tconst $input = self.element.find('input')\n\t\t\t$input.on('keydown', function(event) {\n\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\tif (self.$buttonrow) {\n\t\t\t\t\t\tconst $button = self.$buttonrow.find('button.primary')\n\t\t\t\t\t\tif ($button && !$button.prop('disabled')) {\n\t\t\t\t\t\t\t$button.click()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\tthis.$dialog.css({\n\t\t\tdisplay: 'inline-block',\n\t\t\tposition: 'fixed',\n\t\t})\n\n\t\tthis.enterCallback = null\n\n\t\t$(document).on('keydown keyup', function(event) {\n\t\t\tif (\n\t\t\t\tevent.target !== self.$dialog.get(0)\n\t\t\t\t&& self.$dialog.find($(event.target)).length === 0\n\t\t\t) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// Escape\n\t\t\tif (\n\t\t\t\tevent.keyCode === 27\n\t\t\t\t&& event.type === 'keydown'\n\t\t\t\t&& self.options.closeOnEscape\n\t\t\t) {\n\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\tself.close()\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// Enter\n\t\t\tif (event.keyCode === 13) {\n\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\tif (self.enterCallback !== null) {\n\t\t\t\t\tself.enterCallback()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif (event.type === 'keyup') {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t}\n\t\t})\n\n\t\tthis._setOptions(this.options)\n\t\tthis._createOverlay()\n\t\tthis._useFocusTrap()\n\t},\n\t_init() {\n\t\tthis._trigger('open')\n\t},\n\t_setOption(key, value) {\n\t\tconst self = this\n\t\tswitch (key) {\n\t\tcase 'title':\n\t\t\tif (this.$title) {\n\t\t\t\tthis.$title.text(value)\n\t\t\t} else {\n\t\t\t\tconst $title = $('<h2 class=\"oc-dialog-title\">'\n\t\t\t\t\t\t+ value\n\t\t\t\t\t\t+ '</h2>')\n\t\t\t\tthis.$title = $title.prependTo(this.$dialog)\n\t\t\t}\n\t\t\tthis._setSizes()\n\t\t\tbreak\n\t\tcase 'buttons':\n\t\t\tif (this.$buttonrow) {\n\t\t\t\tthis.$buttonrow.empty()\n\t\t\t} else {\n\t\t\t\tconst $buttonrow = $('<div class=\"oc-dialog-buttonrow\"></div>')\n\t\t\t\tthis.$buttonrow = $buttonrow.appendTo(this.$dialog)\n\t\t\t}\n\t\t\tif (value.length === 1) {\n\t\t\t\tthis.$buttonrow.addClass('onebutton')\n\t\t\t} else if (value.length === 2) {\n\t\t\t\tthis.$buttonrow.addClass('twobuttons')\n\t\t\t} else if (value.length === 3) {\n\t\t\t\tthis.$buttonrow.addClass('threebuttons')\n\t\t\t}\n\t\t\t$.each(value, function(idx, val) {\n\t\t\t\tconst $button = $('<button>').text(val.text)\n\t\t\t\tif (val.classes) {\n\t\t\t\t\t$button.addClass(val.classes)\n\t\t\t\t}\n\t\t\t\tif (val.defaultButton) {\n\t\t\t\t\t$button.addClass('primary')\n\t\t\t\t\tself.$defaultButton = $button\n\t\t\t\t}\n\t\t\t\tself.$buttonrow.append($button)\n\t\t\t\t$button.on('click keydown', function(event) {\n\t\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\t\tval.click.apply(self.element[0], arguments)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t\t\tthis.$buttonrow.find('button')\n\t\t\t\t.on('focus', function(event) {\n\t\t\t\t\tself.$buttonrow.find('button').removeClass('primary')\n\t\t\t\t\t$(this).addClass('primary')\n\t\t\t\t})\n\t\t\tthis._setSizes()\n\t\t\tbreak\n\t\tcase 'style':\n\t\t\tif (value.buttons !== undefined) {\n\t\t\t\tthis.$buttonrow.addClass(value.buttons)\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'closeButton':\n\t\t\tif (value) {\n\t\t\t\tconst $closeButton = $('<button class=\"oc-dialog-close\"></button>')\n\t\t\t\t$closeButton.attr('aria-label', t('core', 'Close \"{dialogTitle}\" dialog', { dialogTitle: this.$title || this.options.title }))\n\t\t\t\tthis.$dialog.prepend($closeButton)\n\t\t\t\t$closeButton.on('click keydown', function(event) {\n\t\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\t\tself.options.closeCallback && self.options.closeCallback()\n\t\t\t\t\t\tself.close()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tthis.$dialog.find('.oc-dialog-close').remove()\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'width':\n\t\t\tthis.$dialog.css('width', value)\n\t\t\tbreak\n\t\tcase 'height':\n\t\t\tthis.$dialog.css('height', value)\n\t\t\tbreak\n\t\tcase 'close':\n\t\t\tthis.closeCB = value\n\t\t\tbreak\n\t\t}\n\t\t// this._super(key, value);\n\t\t$.Widget.prototype._setOption.apply(this, arguments)\n\t},\n\t_setOptions(options) {\n\t\t// this._super(options);\n\t\t$.Widget.prototype._setOptions.apply(this, arguments)\n\t},\n\t_setSizes() {\n\t\tlet lessHeight = 0\n\t\tif (this.$title) {\n\t\t\tlessHeight += this.$title.outerHeight(true)\n\t\t}\n\t\tif (this.$buttonrow) {\n\t\t\tlessHeight += this.$buttonrow.outerHeight(true)\n\t\t}\n\t\tthis.element.css({\n\t\t\theight: 'calc(100% - ' + lessHeight + 'px)',\n\t\t})\n\t},\n\t_createOverlay() {\n\t\tif (!this.options.modal) {\n\t\t\treturn\n\t\t}\n\n\t\tconst self = this\n\t\tlet contentDiv = $('#content')\n\t\tif (contentDiv.length === 0) {\n\t\t\t// nextcloud-vue compatibility\n\t\t\tcontentDiv = $('.content')\n\t\t}\n\t\tthis.overlay = $('<div>')\n\t\t\t.addClass('oc-dialog-dim')\n\t\t\t.appendTo(contentDiv)\n\t\tthis.overlay.on('click keydown keyup', function(event) {\n\t\t\tif (event.target !== self.$dialog.get(0) && self.$dialog.find($(event.target)).length === 0) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tevent.stopPropagation()\n\n\t\t\t}\n\t\t})\n\t},\n\t_destroyOverlay() {\n\t\tif (!this.options.modal) {\n\t\t\treturn\n\t\t}\n\n\t\tif (this.overlay) {\n\t\t\tthis.overlay.off('click keydown keyup')\n\t\t\tthis.overlay.remove()\n\t\t\tthis.overlay = null\n\t\t}\n\t},\n\t_useFocusTrap() {\n\t\t// Create global stack if undefined\n\t\tObject.assign(window, { _nc_focus_trap: window._nc_focus_trap || [] })\n\n\t\tconst dialogElement = this.$dialog[0]\n\t\tthis.focusTrap = createFocusTrap(dialogElement, {\n\t\t\tallowOutsideClick: true,\n\t\t\ttrapStack: window._nc_focus_trap,\n\t\t\tfallbackFocus: dialogElement,\n\t\t})\n\n\t\tthis.focusTrap.activate()\n\t},\n\t_clearFocusTrap() {\n\t\tthis.focusTrap?.deactivate()\n\t\tthis.focusTrap = null\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._clearFocusTrap()\n\t\tthis._destroyOverlay()\n\t\tconst self = this\n\t\t// Ugly hack to catch remaining keyup events.\n\t\tsetTimeout(function() {\n\t\t\tself._trigger('close', self)\n\t\t}, 200)\n\n\t\tself.$dialog.remove()\n\t\tthis.destroy()\n\t},\n\tdestroy() {\n\t\tif (this.$title) {\n\t\t\tthis.$title.remove()\n\t\t}\n\t\tif (this.$buttonrow) {\n\t\t\tthis.$buttonrow.remove()\n\t\t}\n\n\t\tif (this.originalTitle) {\n\t\t\tthis.element.attr('title', this.originalTitle)\n\t\t}\n\t\tthis.element.removeClass('oc-dialog-content')\n\t\t\t.css(this.originalCss).detach().insertBefore(this.$dialog)\n\t\tthis.$dialog.remove()\n\t},\n})\n","/**\n * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\nimport escapeHTML from 'escape-html'\n\n/**\n * jQuery plugin for micro templates\n *\n * Strings are automatically escaped, but that can be disabled by setting\n * escapeFunction to null.\n *\n * Usage examples:\n *\n * var htmlStr = '<p>Bake, uncovered, until the {greasystuff} is melted and the {pasta} is heated through, about {min} minutes.</p>'\n * $(htmlStr).octemplate({greasystuff: 'cheese', pasta: 'macaroni', min: 10});\n *\n * var htmlStr = '<p>Welcome back {user}</p>';\n * $(htmlStr).octemplate({user: 'John Q. Public'}, {escapeFunction: null});\n *\n * Be aware that the target string must be wrapped in an HTML element for the\n * plugin to work. The following won't work:\n *\n * var textStr = 'Welcome back {user}';\n * $(textStr).octemplate({user: 'John Q. Public'});\n *\n * For anything larger than one-liners, you can use a simple $.get() ajax\n * request to get the template, or you can embed them it the page using the\n * text/template type:\n *\n * <script id=\"contactListItemTemplate\" type=\"text/template\">\n * <tr class=\"contact\" data-id=\"{id}\">\n * <td class=\"name\">\n * <input type=\"checkbox\" name=\"id\" value=\"{id}\" /><span class=\"nametext\">{name}</span>\n * </td>\n * <td class=\"email\">\n * <a href=\"mailto:{email}\">{email}</a>\n * </td>\n * <td class=\"phone\">{phone}</td>\n * </tr>\n * </script>\n *\n * var $tmpl = $('#contactListItemTemplate');\n * var contacts = // fetched in some ajax call\n *\n * $.each(contacts, function(idx, contact) {\n * $contactList.append(\n * $tmpl.octemplate({\n * id: contact.getId(),\n * name: contact.getDisplayName(),\n * email: contact.getPreferredEmail(),\n * phone: contact.getPreferredPhone(),\n * });\n * );\n * });\n */\n/**\n * Object Template\n * Inspired by micro templating done by e.g. underscore.js\n */\nconst Template = {\n\tinit(vars, options, elem) {\n\t\t// Mix in the passed in options with the default options\n\t\tthis.vars = vars\n\t\tthis.options = $.extend({}, this.options, options)\n\n\t\tthis.elem = elem\n\t\tconst self = this\n\n\t\tif (typeof this.options.escapeFunction === 'function') {\n\t\t\tconst keys = Object.keys(this.vars)\n\t\t\tfor (let key = 0; key < keys.length; key++) {\n\t\t\t\tif (typeof this.vars[keys[key]] === 'string') {\n\t\t\t\t\tthis.vars[keys[key]] = self.options.escapeFunction(this.vars[keys[key]])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst _html = this._build(this.vars)\n\t\treturn $(_html)\n\t},\n\t// From stackoverflow.com/questions/1408289/best-way-to-do-variable-interpolation-in-javascript\n\t_build(o) {\n\t\tconst data = this.elem.attr('type') === 'text/template' ? this.elem.html() : this.elem.get(0).outerHTML\n\t\ttry {\n\t\t\treturn data.replace(/{([^{}]*)}/g,\n\t\t\t\tfunction(a, b) {\n\t\t\t\t\tconst r = o[b]\n\t\t\t\t\treturn typeof r === 'string' || typeof r === 'number' ? r : a\n\t\t\t\t}\n\t\t\t)\n\t\t} catch (e) {\n\t\t\tconsole.error(e, 'data:', data)\n\t\t}\n\t},\n\toptions: {\n\t\tescapeFunction: escapeHTML,\n\t},\n}\n\n$.fn.octemplate = function(vars, options) {\n\tvars = vars || {}\n\tif (this.length) {\n\t\tconst _template = Object.create(Template)\n\t\treturn _template.init(vars, options, this)\n\t}\n}\n","/**\n * @copyright 2016-2018 John Molakvoæ <skjnldsv@protonmail.com>\n * @copyright 2013 Morris Jobke <morris.jobke@gmail.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Sergey Shliakhov <husband.sergey@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport $ from 'jquery'\nimport md5 from 'blueimp-md5'\n\n/*\n * Adds a background color to the element called on and adds the first character\n * of the passed in string. This string is also the seed for the generation of\n * the background color.\n *\n * You have following HTML:\n *\n * <div id=\"albumart\"></div>\n *\n * And call this from Javascript:\n *\n * $('#albumart').imageplaceholder('The Album Title');\n *\n * Which will result in:\n *\n * <div id=\"albumart\" style=\"background-color: rgb(121, 90, 171); ... \">T</div>\n *\n * You may also call it like this, to have a different background, than the seed:\n *\n * $('#albumart').imageplaceholder('The Album Title', 'Album Title');\n *\n * Resulting in:\n *\n * <div id=\"albumart\" style=\"background-color: rgb(121, 90, 171); ... \">A</div>\n *\n */\n\n/*\n* Alternatively, you can use the prototype function to convert your string to rgb colors:\n*\n* \"a6741a86aded5611a8e46ce16f2ad646\".toRgb()\n*\n* Will return the rgb parameters within the following object:\n*\n* Color {r: 208, g: 158, b: 109}\n*\n*/\n\nconst toRgb = (s) => {\n\t// Normalize hash\n\tvar hash = s.toLowerCase()\n\n\t// Already a md5 hash?\n\tif (hash.match(/^([0-9a-f]{4}-?){8}$/) === null) {\n\t\thash = md5(hash)\n\t}\n\n\thash = hash.replace(/[^0-9a-f]/g, '')\n\n\tfunction Color(r, g, b) {\n\t\tthis.r = r\n\t\tthis.g = g\n\t\tthis.b = b\n\t}\n\n\tfunction stepCalc(steps, ends) {\n\t\tvar step = new Array(3)\n\t\tstep[0] = (ends[1].r - ends[0].r) / steps\n\t\tstep[1] = (ends[1].g - ends[0].g) / steps\n\t\tstep[2] = (ends[1].b - ends[0].b) / steps\n\t\treturn step\n\t}\n\n\tfunction mixPalette(steps, color1, color2) {\n\t\tvar palette = []\n\t\tpalette.push(color1)\n\t\tvar step = stepCalc(steps, [color1, color2])\n\t\tfor (var i = 1; i < steps; i++) {\n\t\t\tvar r = parseInt(color1.r + (step[0] * i))\n\t\t\tvar g = parseInt(color1.g + (step[1] * i))\n\t\t\tvar b = parseInt(color1.b + (step[2] * i))\n\t\t\tpalette.push(new Color(r, g, b))\n\t\t}\n\t\treturn palette\n\t}\n\n\tconst red = new Color(182, 70, 157);\n\tconst yellow = new Color(221, 203, 85);\n\tconst blue = new Color(0, 130, 201); // Nextcloud blue\n\t// Number of steps to go from a color to another\n\t// 3 colors * 6 will result in 18 generated colors\n\tconst steps = 6;\n\n\tconst palette1 = mixPalette(steps, red, yellow);\n\tconst palette2 = mixPalette(steps, yellow, blue);\n\tconst palette3 = mixPalette(steps, blue, red);\n\n\tconst finalPalette = palette1.concat(palette2).concat(palette3);\n\n\t// Convert a string to an integer evenly\n\tfunction hashToInt(hash, maximum) {\n\t\tvar finalInt = 0\n\t\tvar result = []\n\n\t\t// Splitting evenly the string\n\t\tfor (var i = 0; i < hash.length; i++) {\n\t\t\t// chars in md5 goes up to f, hex:16\n\t\t\tresult.push(parseInt(hash.charAt(i), 16) % 16)\n\t\t}\n\t\t// Adds up all results\n\t\tfor (var j in result) {\n\t\t\tfinalInt += result[j]\n\t\t}\n\t\t// chars in md5 goes up to f, hex:16\n\t\t// make sure we're always using int in our operation\n\t\treturn parseInt(parseInt(finalInt) % maximum)\n\t}\n\n\treturn finalPalette[hashToInt(hash, steps * 3)]\n}\n\nString.prototype.toRgb = function() {\n\tconsole.warn('String.prototype.toRgb is deprecated! It will be removed in Nextcloud 22.')\n\n\treturn toRgb(this)\n}\n\n$.fn.imageplaceholder = function(seed, text, size) {\n\ttext = text || seed\n\n\t// Compute the hash\n\tvar rgb = toRgb(seed)\n\tthis.css('background-color', 'rgb(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ')')\n\n\t// Placeholders are square\n\tvar height = this.height() || size || 32\n\tthis.height(height)\n\tthis.width(height)\n\n\t// CSS rules\n\tthis.css('color', '#fff')\n\tthis.css('font-weight', 'normal')\n\tthis.css('text-align', 'center')\n\n\t// calculate the height\n\tthis.css('line-height', height + 'px')\n\tthis.css('font-size', (height * 0.55) + 'px')\n\n\tif (seed !== null && seed.length) {\n\t\tvar placeholderText = text.replace(/\\s+/g, ' ').trim().split(' ', 2).map((word) => word[0].toUpperCase()).join('')\n\t\tthis.html(placeholderText);\n\t}\n}\n\n$.fn.clearimageplaceholder = function() {\n\tthis.css('background-color', '')\n\tthis.css('color', '')\n\tthis.css('font-weight', '')\n\tthis.css('text-align', '')\n\tthis.css('line-height', '')\n\tthis.css('font-size', '')\n\tthis.html('')\n\tthis.removeClass('icon-loading')\n\tthis.removeClass('icon-loading-small')\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\nimport { getToken } from '../OC/requesttoken'\n\n$(document).on('ajaxSend', function(elm, xhr, settings) {\n\tif (settings.crossDomain === false) {\n\t\txhr.setRequestHeader('requesttoken', getToken())\n\t\txhr.setRequestHeader('OCS-APIREQUEST', 'true')\n\t}\n})\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * select a range in an input field\n *\n * @see {@link http://stackoverflow.com/questions/499126/jquery-set-cursor-position-in-text-area}\n * @param {number} start start selection from\n * @param {number} end number of char from start\n * @return {void}\n */\n$.fn.selectRange = function(start, end) {\n\treturn this.each(function() {\n\t\tif (this.setSelectionRange) {\n\t\t\tthis.focus()\n\t\t\tthis.setSelectionRange(start, end)\n\t\t} else if (this.createTextRange) {\n\t\t\tconst range = this.createTextRange()\n\t\t\trange.collapse(true)\n\t\t\trange.moveEnd('character', end)\n\t\t\trange.moveStart('character', start)\n\t\t\trange.select()\n\t\t}\n\t})\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * @name Show Password\n * @description\n * @version 1.3.0\n * @requires Jquery 1.5\n *\n * @author Jan Jarfalk <jan.jarfalk@unwrongest.com>\n * author-website http://www.unwrongest.com\n *\n * special-thanks Michel Gratton\n *\n * @license MIT\n */\n$.fn.extend({\n\tshowPassword(c) {\n\n\t\t// Setup callback object\n\t\tconst callback = { fn: null, args: {} }\n\t\tcallback.fn = c\n\n\t\t// Clones passwords and turn the clones into text inputs\n\t\tconst cloneElement = function(element) {\n\n\t\t\tconst $element = $(element)\n\n\t\t\tconst $clone = $('<input />')\n\n\t\t\t// Name added for JQuery Validation compatibility\n\t\t\t// Element name is required to avoid script warning.\n\t\t\t$clone.attr({\n\t\t\t\ttype: 'text',\n\t\t\t\tclass: $element.attr('class'),\n\t\t\t\tstyle: $element.attr('style'),\n\t\t\t\tsize: $element.attr('size'),\n\t\t\t\tname: $element.attr('name') + '-clone',\n\t\t\t\ttabindex: $element.attr('tabindex'),\n\t\t\t\tautocomplete: 'off',\n\t\t\t})\n\n\t\t\tif ($element.attr('placeholder') !== undefined) {\n\t\t\t\t$clone.attr('placeholder', $element.attr('placeholder'))\n\t\t\t}\n\n\t\t\treturn $clone\n\n\t\t}\n\n\t\t// Transfers values between two elements\n\t\tconst update = function(a, b) {\n\t\t\tb.val(a.val())\n\t\t}\n\n\t\t// Shows a or b depending on checkbox\n\t\tconst setState = function(checkbox, a, b) {\n\n\t\t\tif (checkbox.is(':checked')) {\n\t\t\t\tupdate(a, b)\n\t\t\t\tb.show()\n\t\t\t\ta.hide()\n\t\t\t} else {\n\t\t\t\tupdate(b, a)\n\t\t\t\tb.hide()\n\t\t\t\ta.show()\n\t\t\t}\n\n\t\t}\n\n\t\treturn this.each(function() {\n\n\t\t\tconst $input = $(this)\n\t\t\tconst $checkbox = $($input.data('typetoggle'))\n\n\t\t\t// Create clone\n\t\t\tconst $clone = cloneElement($input)\n\t\t\t$clone.insertAfter($input)\n\n\t\t\t// Set callback arguments\n\t\t\tif (callback.fn) {\n\t\t\t\tcallback.args.input = $input\n\t\t\t\tcallback.args.checkbox = $checkbox\n\t\t\t\tcallback.args.clone = $clone\n\t\t\t}\n\n\t\t\t$checkbox.bind('click', function() {\n\t\t\t\tsetState($checkbox, $input, $clone)\n\t\t\t})\n\n\t\t\t$input.bind('keyup', function() {\n\t\t\t\tupdate($input, $clone)\n\t\t\t})\n\n\t\t\t$clone.bind('keyup', function() {\n\t\t\t\tupdate($clone, $input)\n\n\t\t\t\t// Added for JQuery Validation compatibility\n\t\t\t\t// This will trigger validation if it's ON for keyup event\n\t\t\t\t$input.trigger('keyup')\n\n\t\t\t})\n\n\t\t\t// Added for JQuery Validation compatibility\n\t\t\t// This will trigger validation if it's ON for blur event\n\t\t\t$clone.bind('blur', function() {\n\t\t\t\t$input.trigger('focusout')\n\t\t\t})\n\n\t\t\tsetState($checkbox, $input, $clone)\n\n\t\t\t// set type of password field clone (type=text) to password right on submit\n\t\t\t// to prevent browser save the value of this field\n\t\t\t$clone.closest('form').submit(function(e) {\n\t\t\t\t// .prop has to be used, because .attr throws\n\t\t\t\t// an error while changing a type of an input\n\t\t\t\t// element\n\t\t\t\t$clone.prop('type', 'password')\n\t\t\t})\n\n\t\t\tif (callback.fn) {\n\t\t\t\tcallback.fn(callback.args)\n\t\t\t}\n\n\t\t})\n\t},\n})\n","/**\n * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n// Set autocomplete width the same as the related input\n// See http://stackoverflow.com/a/11845718\n$.ui.autocomplete.prototype._resizeMenu = function() {\n\tconst ul = this.menu.element\n\tul.outerWidth(this.element.outerWidth())\n}\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./jquery-ui-fixes.scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./jquery-ui-fixes.scss\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./jquery.ocdialog.scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./jquery.ocdialog.scss\";\n export default content && content.locals ? content.locals : undefined;\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\nimport './avatar'\nimport './contactsmenu'\nimport './exists'\nimport './filterattr'\nimport './ocdialog'\nimport './octemplate'\nimport './placeholder'\nimport './requesttoken'\nimport './selectrange'\nimport './showpassword'\nimport './ui-fixes'\n\nimport './css/jquery-ui-fixes.scss'\nimport './css/jquery.ocdialog.scss'\n\n/**\n * Disable automatic evaluation of responses for $.ajax() functions (and its\n * higher-level alternatives like $.get() and $.post()).\n *\n * If a response to a $.ajax() request returns a content type of \"application/javascript\"\n * JQuery would previously execute the response body. This is a pretty unexpected\n * behaviour and can result in a bypass of our Content-Security-Policy as well as\n * multiple unexpected XSS vectors.\n */\n$.ajaxSetup({\n\tcontents: {\n\t\tscript: false,\n\t},\n})\n\n/**\n * Disable execution of eval in jQuery. We do require an allowed eval CSP\n * configuration at the moment for handlebars et al. But for jQuery there is\n * not much of a reason to execute JavaScript directly via eval.\n *\n * This thus mitigates some unexpected XSS vectors.\n */\n$.globalEval = function() {\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\nimport 'core-js/stable'\nimport 'regenerator-runtime/runtime'\nimport './Polyfill/index.js'\n\n// If you remove the line below, tests won't pass\n// eslint-disable-next-line no-unused-vars\nimport OC from './OC/index.js'\n\nimport './globals.js'\nimport './jquery/index.js'\nimport { initCore } from './init.js'\nimport { registerAppsSlideToggle } from './OC/apps.js'\n\nwindow.addEventListener('DOMContentLoaded', function() {\n\tinitCore()\n\tregisterAppsSlideToggle()\n\n\t// fallback to hashchange when no history support\n\tif (window.history.pushState) {\n\t\twindow.onpopstate = _.bind(OC.Util.History._onPopState, OC.Util.History)\n\t} else {\n\t\t$(window).on('hashchange', _.bind(OC.Util.History._onPopState, OC.Util.History))\n\t}\n})\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"images/ui-icons_1d2d44_256x240.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_1___ = new URL(\"images/ui-icons_ffffff_256x240.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_2___ = new URL(\"images/ui-icons_ffd27a_256x240.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_3___ = new URL(\"images/ui-bg_diagonals-thick_20_666666_40x40.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_4___ = new URL(\"images/ui-bg_flat_10_000000_40x100.png\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___);\nvar ___CSS_LOADER_URL_REPLACEMENT_3___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_3___);\nvar ___CSS_LOADER_URL_REPLACEMENT_4___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_4___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".ui-widget-content{border:1px solid var(--color-border);background:var(--color-main-background) none;color:var(--color-main-text)}.ui-widget-content a{color:var(--color-main-text)}.ui-widget-header{border:none;color:var(--color-main-text);background-image:none}.ui-widget-header a{color:var(--color-main-text)}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid var(--color-border);background:var(--color-main-background) none;font-weight:bold;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #ddd;background:var(--color-main-background) none;font-weight:bold;color:var(--color-main-text)}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:var(--color-main-text)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid var(--color-primary);background:var(--color-main-background) none;font-weight:bold;color:var(--color-main-text)}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:var(--color-main-text)}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid var(--color-main-background);background:var(--color-main-background) none;color:var(--color-text-light);font-weight:600}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:var(--color-text-lighter)}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:var(--color-error);background:var(--color-error) none;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-state-default .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \")}.ui-state-active .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \")}.ui-state-highlight .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_1___ + \")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_2___ + \")}.ui-icon.ui-icon-none{display:none}.ui-widget-overlay{background:#666 url(\" + ___CSS_LOADER_URL_REPLACEMENT_3___ + \") 50% 50% repeat;opacity:.5}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url(\" + ___CSS_LOADER_URL_REPLACEMENT_4___ + \") 50% 50% repeat-x;opacity:.2;border-radius:5px}.ui-tabs{border:none}.ui-tabs .ui-tabs-nav.ui-corner-all{border-bottom-left-radius:0;border-bottom-right-radius:0}.ui-tabs .ui-tabs-nav{background:none;margin-bottom:15px}.ui-tabs .ui-tabs-nav .ui-state-default{border:none;border-bottom:1px solid rgba(0,0,0,0);font-weight:normal;margin:0 !important;padding:0 !important}.ui-tabs .ui-tabs-nav .ui-state-hover,.ui-tabs .ui-tabs-nav .ui-state-active{border:none;border-bottom:1px solid var(--color-main-text);color:var(--color-main-text)}.ui-tabs .ui-tabs-nav .ui-state-hover a,.ui-tabs .ui-tabs-nav .ui-state-hover a:link,.ui-tabs .ui-tabs-nav .ui-state-hover a:hover,.ui-tabs .ui-tabs-nav .ui-state-hover a:visited,.ui-tabs .ui-tabs-nav .ui-state-active a,.ui-tabs .ui-tabs-nav .ui-state-active a:link,.ui-tabs .ui-tabs-nav .ui-state-active a:hover,.ui-tabs .ui-tabs-nav .ui-state-active a:visited{color:var(--color-main-text)}.ui-tabs .ui-tabs-nav .ui-state-active{font-weight:bold}.ui-autocomplete.ui-menu{padding:0}.ui-autocomplete.ui-menu.item-count-1,.ui-autocomplete.ui-menu.item-count-2{overflow-y:hidden}.ui-autocomplete.ui-menu .ui-menu-item a{color:var(--color-text-lighter);display:block;padding:4px 4px 4px 14px}.ui-autocomplete.ui-menu .ui-menu-item a.ui-state-focus,.ui-autocomplete.ui-menu .ui-menu-item a.ui-state-active{box-shadow:inset 4px 0 var(--color-primary-element);color:var(--color-main-text)}.ui-autocomplete.ui-widget-content{background:var(--color-main-background);border-top:none}.ui-autocomplete.ui-corner-all{border-radius:0;border-bottom-left-radius:var(--border-radius);border-bottom-right-radius:var(--border-radius)}.ui-autocomplete .ui-state-hover,.ui-autocomplete .ui-widget-content .ui-state-hover,.ui-autocomplete .ui-widget-header .ui-state-hover,.ui-autocomplete .ui-state-focus,.ui-autocomplete .ui-widget-content .ui-state-focus,.ui-autocomplete .ui-widget-header .ui-state-focus{border:1px solid rgba(0,0,0,0);background:inherit;color:var(--color-primary-element)}.ui-autocomplete .ui-menu-item a{border-radius:0 !important}.ui-button.primary{background-color:var(--color-primary);color:var(--color-primary-text);border:1px solid var(--color-primary-text)}.ui-button:hover{font-weight:bold !important}.ui-draggable-handle,.ui-selectable{touch-action:pan-y}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/jquery/css/jquery-ui-fixes.scss\"],\"names\":[],\"mappings\":\"AAEA,mBACC,oCAAA,CACA,4CAAA,CACA,4BAAA,CAED,qBACC,4BAAA,CAED,kBACC,WAAA,CACA,4BAAA,CACA,qBAAA,CAED,oBACC,4BAAA,CAKD,2FAGC,oCAAA,CACA,4CAAA,CACA,gBAAA,CACA,UAAA,CAED,yEAGC,UAAA,CAED,0KAMC,qBAAA,CACA,4CAAA,CACA,gBAAA,CACA,4BAAA,CAED,2FAIC,4BAAA,CAED,wFAGC,qCAAA,CACA,4CAAA,CACA,gBAAA,CACA,4BAAA,CAED,sEAGC,4BAAA,CAKD,iGAGC,6CAAA,CACA,4CAAA,CACA,6BAAA,CACA,eAAA,CAED,uGAGC,+BAAA,CAED,qFAGC,yBAAA,CACA,kCAAA,CACA,UAAA,CAED,2FAGC,UAAA,CAED,oGAGC,UAAA,CAKD,2BACC,wDAAA,CAED,kDAEC,wDAAA,CAED,0BACC,wDAAA,CAED,6BACC,wDAAA,CAED,uDAEC,wDAAA,CAED,sBACC,YAAA,CAMD,mBACC,sEAAA,CACA,UAAA,CAED,kBACC,oBAAA,CACA,WAAA,CACA,wEAAA,CACA,UAAA,CACA,iBAAA,CAID,SACC,WAAA,CAEA,oCACC,2BAAA,CACA,4BAAA,CAGD,sBACC,eAAA,CACA,kBAAA,CAEA,wCACC,WAAA,CACA,qCAAA,CACA,kBAAA,CACA,mBAAA,CACA,oBAAA,CAGD,6EAEC,WAAA,CACA,8CAAA,CACA,4BAAA,CACA,0WACC,4BAAA,CAGF,uCACC,gBAAA,CAOF,yBACC,SAAA,CAIA,4EAEC,iBAAA,CAGD,yCACC,+BAAA,CACA,aAAA,CACA,wBAAA,CAEA,iHACC,mDAAA,CACA,4BAAA,CAKH,mCACC,uCAAA,CACA,eAAA,CAGD,+BACC,eAAA,CACA,8CAAA,CACA,+CAAA,CAGD,gRAKC,8BAAA,CACA,kBAAA,CACA,kCAAA,CAIA,iCACC,0BAAA,CAKH,mBACC,qCAAA,CACA,+BAAA,CACA,0CAAA,CAID,iBACI,2BAAA,CAKJ,oCAEC,kBAAA\",\"sourcesContent\":[\"/* Component containers\\n----------------------------------*/\\n.ui-widget-content {\\n\\tborder: 1px solid var(--color-border);\\n\\tbackground: var(--color-main-background) none;\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-widget-content a {\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-widget-header {\\n\\tborder: none;\\n\\tcolor: var(--color-main-text);\\n\\tbackground-image: none;\\n}\\n.ui-widget-header a {\\n\\tcolor: var(--color-main-text);\\n}\\n\\n/* Interaction states\\n----------------------------------*/\\n.ui-state-default,\\n.ui-widget-content .ui-state-default,\\n.ui-widget-header .ui-state-default {\\n\\tborder: 1px solid var(--color-border);\\n\\tbackground: var(--color-main-background) none;\\n\\tfont-weight: bold;\\n\\tcolor: #555;\\n}\\n.ui-state-default a,\\n.ui-state-default a:link,\\n.ui-state-default a:visited {\\n\\tcolor: #555;\\n}\\n.ui-state-hover,\\n.ui-widget-content .ui-state-hover,\\n.ui-widget-header .ui-state-hover,\\n.ui-state-focus,\\n.ui-widget-content .ui-state-focus,\\n.ui-widget-header .ui-state-focus {\\n\\tborder: 1px solid #ddd;\\n\\tbackground: var(--color-main-background) none;\\n\\tfont-weight: bold;\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-state-hover a,\\n.ui-state-hover a:hover,\\n.ui-state-hover a:link,\\n.ui-state-hover a:visited {\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-state-active,\\n.ui-widget-content .ui-state-active,\\n.ui-widget-header .ui-state-active {\\n\\tborder: 1px solid var(--color-primary);\\n\\tbackground: var(--color-main-background) none;\\n\\tfont-weight: bold;\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-state-active a,\\n.ui-state-active a:link,\\n.ui-state-active a:visited {\\n\\tcolor: var(--color-main-text);\\n}\\n\\n/* Interaction Cues\\n----------------------------------*/\\n.ui-state-highlight,\\n.ui-widget-content .ui-state-highlight,\\n.ui-widget-header .ui-state-highlight {\\n\\tborder: 1px solid var(--color-main-background);\\n\\tbackground: var(--color-main-background) none;\\n\\tcolor: var(--color-text-light);\\n\\tfont-weight: 600;\\n}\\n.ui-state-highlight a,\\n.ui-widget-content .ui-state-highlight a,\\n.ui-widget-header .ui-state-highlight a {\\n\\tcolor: var(--color-text-lighter);\\n}\\n.ui-state-error,\\n.ui-widget-content .ui-state-error,\\n.ui-widget-header .ui-state-error {\\n\\tborder: var(--color-error);\\n\\tbackground: var(--color-error) none;\\n\\tcolor: #ffffff;\\n}\\n.ui-state-error a,\\n.ui-widget-content .ui-state-error a,\\n.ui-widget-header .ui-state-error a {\\n\\tcolor: #ffffff;\\n}\\n.ui-state-error-text,\\n.ui-widget-content .ui-state-error-text,\\n.ui-widget-header .ui-state-error-text {\\n\\tcolor: #ffffff;\\n}\\n\\n/* Icons\\n----------------------------------*/\\n.ui-state-default .ui-icon {\\n\\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\\n}\\n.ui-state-hover .ui-icon,\\n.ui-state-focus .ui-icon {\\n\\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\\n}\\n.ui-state-active .ui-icon {\\n\\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\\n}\\n.ui-state-highlight .ui-icon {\\n\\tbackground-image: url('images/ui-icons_ffffff_256x240.png');\\n}\\n.ui-state-error .ui-icon,\\n.ui-state-error-text .ui-icon {\\n\\tbackground-image: url('images/ui-icons_ffd27a_256x240.png');\\n}\\n.ui-icon.ui-icon-none {\\n\\tdisplay: none;\\n}\\n\\n/* Misc visuals\\n----------------------------------*/\\n/* Overlays */\\n.ui-widget-overlay {\\n\\tbackground: #666666 url('images/ui-bg_diagonals-thick_20_666666_40x40.png') 50% 50% repeat;\\n\\topacity: .5;\\n}\\n.ui-widget-shadow {\\n\\tmargin: -5px 0 0 -5px;\\n\\tpadding: 5px;\\n\\tbackground: #000000 url('images/ui-bg_flat_10_000000_40x100.png') 50% 50% repeat-x;\\n\\topacity: .2;\\n\\tborder-radius: 5px;\\n}\\n\\n/* Tabs customizations */\\n.ui-tabs {\\n\\tborder: none;\\n\\n\\t.ui-tabs-nav.ui-corner-all {\\n\\t\\tborder-bottom-left-radius: 0;\\n\\t\\tborder-bottom-right-radius: 0;\\n\\t}\\n\\n\\t.ui-tabs-nav {\\n\\t\\tbackground: none;\\n\\t\\tmargin-bottom: 15px;\\n\\n\\t\\t.ui-state-default {\\n\\t\\t\\tborder: none;\\n\\t\\t\\tborder-bottom: 1px solid transparent;\\n\\t\\t\\tfont-weight: normal;\\n\\t\\t\\tmargin: 0 !important;\\n\\t\\t\\tpadding: 0 !important;\\n\\t\\t}\\n\\n\\t\\t.ui-state-hover,\\n\\t\\t.ui-state-active {\\n\\t\\t\\tborder: none;\\n\\t\\t\\tborder-bottom: 1px solid var(--color-main-text);\\n\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\ta, a:link, a:hover, a:visited {\\n\\t\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t.ui-state-active {\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t}\\n\\t}\\n}\\n\\n/* Select menus */\\n.ui-autocomplete {\\n\\t&.ui-menu {\\n\\t\\tpadding: 0;\\n\\n\\t\\t/* scrolling starts from three items,\\n\\t\\t * so hide overflow and scrollbars for a clean layout */\\n\\t\\t&.item-count-1,\\n\\t\\t&.item-count-2 {\\n\\t\\t\\toverflow-y: hidden;\\n\\t\\t}\\n\\n\\t\\t.ui-menu-item a {\\n\\t\\t\\tcolor: var(--color-text-lighter);\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\tpadding: 4px 4px 4px 14px;\\n\\n\\t\\t\\t&.ui-state-focus, &.ui-state-active {\\n\\t\\t\\t\\tbox-shadow: inset 4px 0 var(--color-primary-element);\\n\\t\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&.ui-widget-content {\\n\\t\\tbackground: var(--color-main-background);\\n\\t\\tborder-top: none;\\n\\t}\\n\\n\\t&.ui-corner-all {\\n\\t\\tborder-radius: 0;\\n\\t\\tborder-bottom-left-radius: var(--border-radius);\\n\\t\\tborder-bottom-right-radius: var(--border-radius);\\n\\t}\\n\\n\\t.ui-state-hover, .ui-widget-content .ui-state-hover,\\n\\t.ui-widget-header .ui-state-hover,\\n\\t.ui-state-focus,\\n\\t.ui-widget-content .ui-state-focus,\\n\\t.ui-widget-header .ui-state-focus {\\n\\t\\tborder: 1px solid transparent;\\n\\t\\tbackground: inherit;\\n\\t\\tcolor: var(--color-primary-element);\\n\\t}\\n\\n\\t.ui-menu-item {\\n\\t\\ta {\\n\\t\\t\\tborder-radius: 0 !important;\\n\\t\\t}\\n\\t}\\n}\\n\\n.ui-button.primary {\\n\\tbackground-color: var(--color-primary);\\n\\tcolor: var(--color-primary-text);\\n\\tborder: 1px solid var(--color-primary-text);\\n}\\n\\n// fix ui-buttons on hover\\n.ui-button:hover {\\n font-weight:bold !important;\\n}\\n\\n\\n/* DRAGGABLE */\\n.ui-draggable-handle,\\n.ui-selectable {\\n\\ttouch-action: pan-y;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".oc-dialog{background:var(--color-main-background);color:var(--color-text-light);border-radius:var(--border-radius-large);box-shadow:0 0 30px var(--color-box-shadow);padding:24px;z-index:10000;font-size:100%;box-sizing:border-box;min-width:200px;top:50%;left:50%;transform:translate(-50%, -50%);max-height:calc(100% - 20px);max-width:calc(100% - 20px);overflow:auto}.oc-dialog-title{background:var(--color-main-background)}.oc-dialog-buttonrow{position:relative;display:flex;background:rgba(0,0,0,0);right:0;bottom:0;padding:0;padding-top:10px;box-sizing:border-box;width:100%;background-image:linear-gradient(rgba(255, 255, 255, 0), var(--color-main-background))}.oc-dialog-buttonrow.twobuttons{justify-content:space-between}.oc-dialog-buttonrow.onebutton,.oc-dialog-buttonrow.twobuttons.aside{justify-content:flex-end}.oc-dialog-buttonrow button{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:44px;min-width:44px}.oc-dialog-close{position:absolute;width:44px !important;height:44px !important;top:4px;right:4px;padding:25px;background:var(--icon-close-dark) no-repeat center;opacity:.5;border-radius:var(--border-radius-pill)}.oc-dialog-close:hover,.oc-dialog-close:focus,.oc-dialog-close:active{opacity:1}.oc-dialog-dim{background-color:#000;opacity:.2;z-index:9999;position:fixed;top:0;left:0;width:100%;height:100%}body.theme--dark .oc-dialog-dim{opacity:.8}.oc-dialog-content{width:100%;max-width:550px}.oc-dialog.password-confirmation .oc-dialog-content{width:auto}.oc-dialog.password-confirmation .oc-dialog-content input[type=password]{width:100%}.oc-dialog.password-confirmation .oc-dialog-content label{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/jquery/css/jquery.ocdialog.scss\"],\"names\":[],\"mappings\":\"AAAA,WACC,uCAAA,CACA,6BAAA,CACA,wCAAA,CACA,2CAAA,CACA,YAAA,CACA,aAAA,CACA,cAAA,CACA,qBAAA,CACA,eAAA,CACA,OAAA,CACA,QAAA,CACA,+BAAA,CACA,4BAAA,CACA,2BAAA,CACA,aAAA,CAED,iBACC,uCAAA,CAED,qBACC,iBAAA,CACA,YAAA,CACA,wBAAA,CACA,OAAA,CACA,QAAA,CACA,SAAA,CACA,gBAAA,CACA,qBAAA,CACA,UAAA,CACA,sFAAA,CAEA,gCACO,6BAAA,CAGP,qEAEC,wBAAA,CAGD,4BACI,kBAAA,CACA,eAAA,CACH,sBAAA,CACA,WAAA,CACA,cAAA,CAIF,iBACC,iBAAA,CACA,qBAAA,CACA,sBAAA,CACA,OAAA,CACA,SAAA,CACA,YAAA,CACA,kDAAA,CACA,UAAA,CACA,uCAAA,CAEA,sEAGC,SAAA,CAIF,eACC,qBAAA,CACA,UAAA,CACA,YAAA,CACA,cAAA,CACA,KAAA,CACA,MAAA,CACA,UAAA,CACA,WAAA,CAGD,gCACC,UAAA,CAGD,mBACC,UAAA,CACA,eAAA,CAIA,oDACC,UAAA,CAEA,yEACC,UAAA,CAED,0DACC,YAAA\",\"sourcesContent\":[\".oc-dialog {\\n\\tbackground: var(--color-main-background);\\n\\tcolor: var(--color-text-light);\\n\\tborder-radius: var(--border-radius-large);\\n\\tbox-shadow: 0 0 30px var(--color-box-shadow);\\n\\tpadding: 24px;\\n\\tz-index: 10000;\\n\\tfont-size: 100%;\\n\\tbox-sizing: border-box;\\n\\tmin-width: 200px;\\n\\ttop: 50%;\\n\\tleft: 50%;\\n\\ttransform: translate(-50%, -50%);\\n\\tmax-height: calc(100% - 20px);\\n\\tmax-width: calc(100% - 20px);\\n\\toverflow: auto;\\n}\\n.oc-dialog-title {\\n\\tbackground: var(--color-main-background);\\n}\\n.oc-dialog-buttonrow {\\n\\tposition: relative;\\n\\tdisplay: flex;\\n\\tbackground: transparent;\\n\\tright: 0;\\n\\tbottom: 0;\\n\\tpadding: 0;\\n\\tpadding-top: 10px;\\n\\tbox-sizing: border-box;\\n\\twidth: 100%;\\n\\tbackground-image: linear-gradient(rgba(255, 255, 255, 0.0), var(--color-main-background));\\n\\n\\t&.twobuttons {\\n justify-content: space-between;\\n }\\n\\n\\t&.onebutton,\\n\\t&.twobuttons.aside {\\n\\t\\tjustify-content: flex-end;\\n\\t}\\n\\n\\tbutton {\\n\\t white-space: nowrap;\\n\\t overflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\theight: 44px;\\n\\t\\tmin-width: 44px;\\n\\t}\\n}\\n\\n.oc-dialog-close {\\n\\tposition: absolute;\\n\\twidth: 44px !important;\\n\\theight: 44px !important;\\n\\ttop: 4px;\\n\\tright: 4px;\\n\\tpadding: 25px;\\n\\tbackground: var(--icon-close-dark) no-repeat center;\\n\\topacity: .5;\\n\\tborder-radius: var(--border-radius-pill);\\n\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\topacity: 1;\\n\\t}\\n}\\n\\n.oc-dialog-dim {\\n\\tbackground-color: #000;\\n\\topacity: .2;\\n\\tz-index: 9999;\\n\\tposition: fixed;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\twidth: 100%;\\n\\theight: 100%;\\n}\\n\\nbody.theme--dark .oc-dialog-dim {\\n\\topacity: .8;\\n}\\n\\n.oc-dialog-content {\\n\\twidth: 100%;\\n\\tmax-width: 550px;\\n}\\n\\n.oc-dialog.password-confirmation {\\n\\t.oc-dialog-content {\\n\\t\\twidth: auto;\\n\\n\\t\\tinput[type=password] {\\n\\t\\t\\twidth: 100%;\\n\\t\\t}\\n\\t\\tlabel {\\n\\t\\t\\tdisplay: none;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-menu[data-v-b778f520]{width:100%;display:flex;flex-shrink:1;flex-wrap:wrap}.app-menu-main[data-v-b778f520]{display:flex;flex-wrap:nowrap}.app-menu-main .app-menu-entry[data-v-b778f520]{width:50px;height:50px;position:relative;display:flex;opacity:.7}.app-menu-main .app-menu-entry.app-menu-entry__active[data-v-b778f520]{opacity:1}.app-menu-main .app-menu-entry.app-menu-entry__active[data-v-b778f520]::before{content:\\\" \\\";position:absolute;pointer-events:none;border-bottom-color:var(--color-main-background);transform:translateX(-50%);width:12px;height:5px;border-radius:3px;background-color:var(--color-primary-text);left:50%;bottom:6px;display:block;transition:all .1s ease-in-out;opacity:1}.app-menu-main .app-menu-entry.app-menu-entry__active .app-menu-entry--label[data-v-b778f520]{font-weight:bold}.app-menu-main .app-menu-entry a[data-v-b778f520]{width:calc(100% - 4px);height:calc(100% - 4px);margin:2px;color:var(--color-primary-text);position:relative}.app-menu-main .app-menu-entry img[data-v-b778f520]{transition:margin .1s ease-in-out;width:20px;height:20px;padding:calc((100% - 20px)/2);box-sizing:content-box;filter:var(--background-image-invert-if-bright)}.app-menu-main .app-menu-entry .app-menu-entry--label[data-v-b778f520]{opacity:0;position:absolute;font-size:12px;color:var(--color-primary-text);text-align:center;left:50%;top:45%;display:block;min-width:100%;transform:translateX(-50%);transition:all .1s ease-in-out;width:100%;text-overflow:ellipsis;overflow:hidden;letter-spacing:-0.5px}.app-menu-main .app-menu-entry[data-v-b778f520]:hover,.app-menu-main .app-menu-entry[data-v-b778f520]:focus-within{opacity:1}.app-menu-main .app-menu-entry:hover .app-menu-entry--label[data-v-b778f520],.app-menu-main .app-menu-entry:focus-within .app-menu-entry--label[data-v-b778f520]{opacity:1;font-weight:bolder;bottom:0;width:100%;text-overflow:ellipsis;overflow:hidden}.app-menu-main[data-v-b778f520]:hover,.app-menu-main[data-v-b778f520]:focus-within,.app-menu-main .app-menu-entry[data-v-b778f520]:hover,.app-menu-main .app-menu-entry[data-v-b778f520]:focus{opacity:1}.app-menu-main:hover img[data-v-b778f520],.app-menu-main:focus-within img[data-v-b778f520],.app-menu-main .app-menu-entry:hover img[data-v-b778f520],.app-menu-main .app-menu-entry:focus img[data-v-b778f520]{margin-top:-8px}.app-menu-main:hover .app-menu-entry--label[data-v-b778f520],.app-menu-main:focus-within .app-menu-entry--label[data-v-b778f520],.app-menu-main .app-menu-entry:hover .app-menu-entry--label[data-v-b778f520],.app-menu-main .app-menu-entry:focus .app-menu-entry--label[data-v-b778f520]{opacity:1;bottom:0}.app-menu-main[data-v-b778f520]:hover::before,.app-menu-main:hover .app-menu-entry[data-v-b778f520]::before,.app-menu-main[data-v-b778f520]:focus-within::before,.app-menu-main:focus-within .app-menu-entry[data-v-b778f520]::before,.app-menu-main .app-menu-entry[data-v-b778f520]:hover::before,.app-menu-main .app-menu-entry:hover .app-menu-entry[data-v-b778f520]::before,.app-menu-main .app-menu-entry[data-v-b778f520]:focus::before,.app-menu-main .app-menu-entry:focus .app-menu-entry[data-v-b778f520]::before{opacity:0}[data-v-b778f520] .app-menu-more .button-vue--vue-tertiary{opacity:.7;margin:3px;filter:var(--background-image-invert-if-bright)}[data-v-b778f520] .app-menu-more .button-vue--vue-tertiary:not([aria-expanded=true]){color:var(--color-primary-text)}[data-v-b778f520] .app-menu-more .button-vue--vue-tertiary:not([aria-expanded=true]):hover{opacity:1;background-color:rgba(0,0,0,0) !important}[data-v-b778f520] .app-menu-more .button-vue--vue-tertiary:focus-visible{opacity:1;outline:none !important}.app-menu-popover-entry .app-icon[data-v-b778f520]{position:relative;height:44px;filter:var(--background-invert-if-bright)}.app-menu-popover-entry .app-icon.has-unread[data-v-b778f520]::after{background-color:var(--color-main-text)}.app-menu-popover-entry .app-icon img[data-v-b778f520]{width:20px;height:20px;padding:15px}.has-unread[data-v-b778f520]::after{content:\\\"\\\";width:8px;height:8px;background-color:var(--color-primary-text);border-radius:50%;position:absolute;display:block;top:10px;right:10px}.unread-counter[data-v-b778f520]{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/AppMenu.vue\"],\"names\":[],\"mappings\":\"AAGA,2BACC,UAAA,CACA,YAAA,CACA,aAAA,CACA,cAAA,CAED,gCACC,YAAA,CACA,gBAAA,CAEA,gDACC,UAAA,CACA,WAAA,CACA,iBAAA,CACA,YAAA,CACA,UAAA,CAEA,uEACC,SAAA,CAEA,+EACC,WAAA,CACA,iBAAA,CACA,mBAAA,CACA,gDAAA,CACA,0BAAA,CACA,UAAA,CACA,UAAA,CACA,iBAAA,CACA,0CAAA,CACA,QAAA,CACA,UAAA,CACA,aAAA,CACA,8BAAA,CACA,SAAA,CAGD,8FACC,gBAAA,CAIF,kDACC,sBAAA,CACA,uBAAA,CACA,UAAA,CACA,+BAAA,CACA,iBAAA,CAGD,oDACC,iCAAA,CACA,UAtDgB,CAuDhB,WAvDgB,CAwDhB,6BAAA,CACA,sBAAA,CACA,+CAAA,CAGD,uEACC,SAAA,CACA,iBAAA,CACA,cAAA,CACA,+BAAA,CACA,iBAAA,CACA,QAAA,CACA,OAAA,CACA,aAAA,CACA,cAAA,CACA,0BAAA,CACA,8BAAA,CACA,UAAA,CACA,sBAAA,CACA,eAAA,CACA,qBAAA,CAGD,mHAEC,SAAA,CACA,iKACC,SAAA,CACA,kBAAA,CACA,QAAA,CACA,UAAA,CACA,sBAAA,CACA,eAAA,CAOH,+LAIC,SAAA,CAEA,+MACC,eAAA,CAGD,2RACC,SAAA,CACA,QAAA,CAGD,8fACC,SAAA,CAKH,2DACC,UAAA,CACA,UAAA,CACA,+CAAA,CAGA,qFACC,+BAAA,CAEA,2FACC,SAAA,CACA,yCAAA,CAIF,yEACC,SAAA,CACA,uBAAA,CAKD,mDACC,iBAAA,CACA,WAAA,CAEA,yCAAA,CAEA,qEACC,uCAAA,CAGD,uDACC,UArJgB,CAsJhB,WAtJgB,CAuJhB,YAAA,CAKH,oCACC,UAAA,CACA,SAAA,CACA,UAAA,CACA,0CAAA,CACA,iBAAA,CACA,iBAAA,CACA,aAAA,CACA,QAAA,CACA,UAAA,CAGD,iCACC,YAAA\",\"sourcesContent\":[\"\\n$header-icon-size: 20px;\\n\\n.app-menu {\\n\\twidth: 100%;\\n\\tdisplay: flex;\\n\\tflex-shrink: 1;\\n\\tflex-wrap: wrap;\\n}\\n.app-menu-main {\\n\\tdisplay: flex;\\n\\tflex-wrap: nowrap;\\n\\n\\t.app-menu-entry {\\n\\t\\twidth: 50px;\\n\\t\\theight: 50px;\\n\\t\\tposition: relative;\\n\\t\\tdisplay: flex;\\n\\t\\topacity: .7;\\n\\n\\t\\t&.app-menu-entry__active {\\n\\t\\t\\topacity: 1;\\n\\n\\t\\t\\t&::before {\\n\\t\\t\\t\\tcontent: \\\" \\\";\\n\\t\\t\\t\\tposition: absolute;\\n\\t\\t\\t\\tpointer-events: none;\\n\\t\\t\\t\\tborder-bottom-color: var(--color-main-background);\\n\\t\\t\\t\\ttransform: translateX(-50%);\\n\\t\\t\\t\\twidth: 12px;\\n\\t\\t\\t\\theight: 5px;\\n\\t\\t\\t\\tborder-radius: 3px;\\n\\t\\t\\t\\tbackground-color: var(--color-primary-text);\\n\\t\\t\\t\\tleft: 50%;\\n\\t\\t\\t\\tbottom: 6px;\\n\\t\\t\\t\\tdisplay: block;\\n\\t\\t\\t\\ttransition: all 0.1s ease-in-out;\\n\\t\\t\\t\\topacity: 1;\\n\\t\\t\\t}\\n\\n\\t\\t\\t.app-menu-entry--label {\\n\\t\\t\\t\\tfont-weight: bold;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\ta {\\n\\t\\t\\twidth: calc(100% - 4px);\\n\\t\\t\\theight: calc(100% - 4px);\\n\\t\\t\\tmargin: 2px;\\n\\t\\t\\tcolor: var(--color-primary-text);\\n\\t\\t\\tposition: relative;\\n\\t\\t}\\n\\n\\t\\timg {\\n\\t\\t\\ttransition: margin 0.1s ease-in-out;\\n\\t\\t\\twidth: $header-icon-size;\\n\\t\\t\\theight: $header-icon-size;\\n\\t\\t\\tpadding: calc((100% - $header-icon-size) / 2);\\n\\t\\t\\tbox-sizing: content-box;\\n\\t\\t\\tfilter: var(--background-image-invert-if-bright);\\n\\t\\t}\\n\\n\\t\\t.app-menu-entry--label {\\n\\t\\t\\topacity: 0;\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\tfont-size: 12px;\\n\\t\\t\\tcolor: var(--color-primary-text);\\n\\t\\t\\ttext-align: center;\\n\\t\\t\\tleft: 50%;\\n\\t\\t\\ttop: 45%;\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\tmin-width: 100%;\\n\\t\\t\\ttransform: translateX(-50%);\\n\\t\\t\\ttransition: all 0.1s ease-in-out;\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\tletter-spacing: -0.5px;\\n\\t\\t}\\n\\n\\t\\t&:hover,\\n\\t\\t&:focus-within {\\n\\t\\t\\topacity: 1;\\n\\t\\t\\t.app-menu-entry--label {\\n\\t\\t\\t\\topacity: 1;\\n\\t\\t\\t\\tfont-weight: bolder;\\n\\t\\t\\t\\tbottom: 0;\\n\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\t\\toverflow: hidden;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t}\\n\\n\\t// Show labels\\n\\t&:hover,\\n\\t&:focus-within,\\n\\t.app-menu-entry:hover,\\n\\t.app-menu-entry:focus {\\n\\t\\topacity: 1;\\n\\n\\t\\timg {\\n\\t\\t\\tmargin-top: -8px;\\n\\t\\t}\\n\\n\\t\\t.app-menu-entry--label {\\n\\t\\t\\topacity: 1;\\n\\t\\t\\tbottom: 0;\\n\\t\\t}\\n\\n\\t\\t&::before, .app-menu-entry::before {\\n\\t\\t\\topacity: 0;\\n\\t\\t}\\n\\t}\\n}\\n\\n::v-deep .app-menu-more .button-vue--vue-tertiary {\\n\\topacity: .7;\\n\\tmargin: 3px;\\n\\tfilter: var(--background-image-invert-if-bright);\\n\\n\\t/* Remove all background and align text color if not expanded */\\n\\t&:not([aria-expanded=\\\"true\\\"]) {\\n\\t\\tcolor: var(--color-primary-text);\\n\\n\\t\\t&:hover {\\n\\t\\t\\topacity: 1;\\n\\t\\t\\tbackground-color: transparent !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&:focus-visible {\\n\\t\\topacity: 1;\\n\\t\\toutline: none !important;\\n\\t}\\n}\\n\\n.app-menu-popover-entry {\\n\\t.app-icon {\\n\\t\\tposition: relative;\\n\\t\\theight: 44px;\\n\\t\\t/* Icons are bright so invert them if bright color theme == bright background is used */\\n\\t\\tfilter: var(--background-invert-if-bright);\\n\\n\\t\\t&.has-unread::after {\\n\\t\\t\\tbackground-color: var(--color-main-text);\\n\\t\\t}\\n\\n\\t\\timg {\\n\\t\\t\\twidth: $header-icon-size;\\n\\t\\t\\theight: $header-icon-size;\\n\\t\\t\\tpadding: calc((50px - $header-icon-size) / 2);\\n\\t\\t}\\n\\t}\\n}\\n\\n.has-unread::after {\\n\\tcontent: \\\"\\\";\\n\\twidth: 8px;\\n\\theight: 8px;\\n\\tbackground-color: var(--color-primary-text);\\n\\tborder-radius: 50%;\\n\\tposition: absolute;\\n\\tdisplay: block;\\n\\ttop: 10px;\\n\\tright: 10px;\\n}\\n\\n.unread-counter {\\n\\tdisplay: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".menu-entry__loading-icon[data-v-6e59d13c]{margin-right:8px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/UserMenu/UserMenuEntry.vue\"],\"names\":[],\"mappings\":\"AAEC,2CACC,gBAAA\",\"sourcesContent\":[\"\\n.menu-entry {\\n\\t&__loading-icon {\\n\\t\\tmargin-right: 8px;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#contactsmenu-menu[data-v-1563c388]{height:calc(100vh - 150px);max-height:302px;min-height:175px;width:350px}#contactsmenu-menu[data-v-1563c388] .emptycontent{margin-top:5vh !important;margin-bottom:1.5vh}#contactsmenu-menu[data-v-1563c388] .emptycontent .icon-loading,#contactsmenu-menu[data-v-1563c388] .emptycontent .icon-search{display:inline-block}#contactsmenu-menu[data-v-1563c388] #contactsmenu-search{width:calc(100% - 16px);margin:8px;height:34px}#contactsmenu-menu[data-v-1563c388] .content{height:calc(100vh - 150px - 50px);max-height:250px;min-height:125px;overflow-y:auto}#contactsmenu-menu[data-v-1563c388] .content .footer{text-align:center}#contactsmenu-menu[data-v-1563c388] .content .footer a{display:block;width:100%;padding:12px 0;opacity:.5}#contactsmenu-menu[data-v-1563c388] a{padding:2px}#contactsmenu-menu[data-v-1563c388] a:focus-visible{box-shadow:inset 0 0 0 2px var(--color-main-text) !important}#contactsmenu-menu[data-v-1563c388] .contact{display:flex;position:relative;align-items:center;padding:3px 3px 3px 10px}#contactsmenu-menu[data-v-1563c388] .contact .avatar{height:32px;width:32px;display:inline-block}#contactsmenu-menu[data-v-1563c388] .contact .body{flex-grow:1;padding-left:8px;min-width:0}#contactsmenu-menu[data-v-1563c388] .contact .body div{position:relative;width:100%;overflow-x:hidden;text-overflow:ellipsis}#contactsmenu-menu[data-v-1563c388] .contact .body .last-message,#contactsmenu-menu[data-v-1563c388] .contact .body .email-address{color:var(--color-text-maxcontrast)}#contactsmenu-menu[data-v-1563c388] .contact .top-action,#contactsmenu-menu[data-v-1563c388] .contact .second-action,#contactsmenu-menu[data-v-1563c388] .contact .other-actions{width:16px;height:16px;opacity:.5;cursor:pointer}#contactsmenu-menu[data-v-1563c388] .contact .top-action:not(button),#contactsmenu-menu[data-v-1563c388] .contact .second-action:not(button),#contactsmenu-menu[data-v-1563c388] .contact .other-actions:not(button){padding:14px}#contactsmenu-menu[data-v-1563c388] .contact .top-action img,#contactsmenu-menu[data-v-1563c388] .contact .second-action img,#contactsmenu-menu[data-v-1563c388] .contact .other-actions img{filter:var(--background-invert-if-dark)}#contactsmenu-menu[data-v-1563c388] .contact .top-action:hover,#contactsmenu-menu[data-v-1563c388] .contact .top-action:active,#contactsmenu-menu[data-v-1563c388] .contact .top-action:focus,#contactsmenu-menu[data-v-1563c388] .contact .second-action:hover,#contactsmenu-menu[data-v-1563c388] .contact .second-action:active,#contactsmenu-menu[data-v-1563c388] .contact .second-action:focus,#contactsmenu-menu[data-v-1563c388] .contact .other-actions:hover,#contactsmenu-menu[data-v-1563c388] .contact .other-actions:active,#contactsmenu-menu[data-v-1563c388] .contact .other-actions:focus{opacity:1}#contactsmenu-menu[data-v-1563c388] .contact button.other-actions{width:44px}#contactsmenu-menu[data-v-1563c388] .contact button.other-actions:focus{border-color:rgba(0,0,0,0);box-shadow:0 0 0 2px var(--color-main-text)}#contactsmenu-menu[data-v-1563c388] .contact button.other-actions:focus-visible{border-radius:var(--border-radius-pill)}#contactsmenu-menu[data-v-1563c388] .contact .menu{top:47px;margin-right:13px}#contactsmenu-menu[data-v-1563c388] .contact .popovermenu::after{right:2px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/views/ContactsMenu.vue\"],\"names\":[],\"mappings\":\"AACA,oCAEC,0BAAA,CACA,gBAAA,CACA,gBAAA,CACA,WAAA,CAGC,kDACC,yBAAA,CACA,mBAAA,CACA,+HAEC,oBAAA,CAIF,yDACC,uBAAA,CACA,UAAA,CACA,WAAA,CAGD,6CAEC,iCAAA,CACA,gBAAA,CACA,gBAAA,CACA,eAAA,CAEA,qDACC,iBAAA,CAEA,uDACC,aAAA,CACA,UAAA,CACA,cAAA,CACA,UAAA,CAKH,sCACC,WAAA,CAEA,oDACC,4DAAA,CAIF,6CACC,YAAA,CACA,iBAAA,CACA,kBAAA,CACA,wBAAA,CAEA,qDACC,WAAA,CACA,UAAA,CACA,oBAAA,CAGD,mDACC,WAAA,CACA,gBAAA,CACA,WAAA,CAEA,uDACC,iBAAA,CACA,UAAA,CACA,iBAAA,CACA,sBAAA,CAGD,mIACC,mCAAA,CAIF,iLACC,UAAA,CACA,WAAA,CACA,UAAA,CACA,cAAA,CAEA,qNACC,YAAA,CAED,6LACC,uCAAA,CAGD,4kBAGC,SAAA,CAIF,kEACC,UAAA,CAEA,wEACC,0BAAA,CACA,2CAAA,CAGD,gFACC,uCAAA,CAKF,mDACC,QAAA,CACA,iBAAA,CAED,iEACC,SAAA\",\"sourcesContent\":[\"\\n#contactsmenu-menu {\\n\\t/* show 2.5 to 4.5 entries depending on the screen height */\\n\\theight: calc(100vh - 50px * 3);\\n\\tmax-height: calc(50px * 6 + 2px);\\n\\tmin-height: calc(50px * 3.5);\\n\\twidth: 350px;\\n\\n\\t&:deep {\\n\\t\\t.emptycontent {\\n\\t\\t\\tmargin-top: 5vh !important;\\n\\t\\t\\tmargin-bottom: 1.5vh;\\n\\t\\t\\t.icon-loading,\\n\\t\\t\\t.icon-search {\\n\\t\\t\\t\\tdisplay: inline-block;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t#contactsmenu-search {\\n\\t\\t\\twidth: calc(100% - 16px);\\n\\t\\t\\tmargin: 8px;\\n\\t\\t\\theight: 34px;\\n\\t\\t}\\n\\n\\t\\t.content {\\n\\t\\t\\t/* fixed max height of the parent container without the search input */\\n\\t\\t\\theight: calc(100vh - 50px * 3 - 50px);\\n\\t\\t\\tmax-height: calc(50px * 5);\\n\\t\\t\\tmin-height: calc(50px * 3.5 - 50px);\\n\\t\\t\\toverflow-y: auto;\\n\\n\\t\\t\\t.footer {\\n\\t\\t\\t\\ttext-align: center;\\n\\n\\t\\t\\t\\ta {\\n\\t\\t\\t\\t\\tdisplay: block;\\n\\t\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\t\\tpadding: 12px 0;\\n\\t\\t\\t\\t\\topacity: .5;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\ta {\\n\\t\\t\\tpadding: 2px;\\n\\n\\t\\t\\t&:focus-visible {\\n\\t\\t\\t\\tbox-shadow: inset 0 0 0 2px var(--color-main-text) !important; // override rule in core/css/headers.scss #header a:focus-visible\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.contact {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tposition: relative;\\n\\t\\t\\talign-items: center;\\n\\t\\t\\tpadding: 3px 3px 3px 10px;\\n\\n\\t\\t\\t.avatar {\\n\\t\\t\\t\\theight: 32px;\\n\\t\\t\\t\\twidth: 32px;\\n\\t\\t\\t\\tdisplay: inline-block;\\n\\t\\t\\t}\\n\\n\\t\\t\\t.body {\\n\\t\\t\\t\\tflex-grow: 1;\\n\\t\\t\\t\\tpadding-left: 8px;\\n\\t\\t\\t\\tmin-width: 0;\\n\\n\\t\\t\\t\\tdiv {\\n\\t\\t\\t\\t\\tposition: relative;\\n\\t\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\t\\toverflow-x: hidden;\\n\\t\\t\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t.last-message, .email-address {\\n\\t\\t\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t.top-action, .second-action, .other-actions {\\n\\t\\t\\t\\twidth: 16px;\\n\\t\\t\\t\\theight: 16px;\\n\\t\\t\\t\\topacity: .5;\\n\\t\\t\\t\\tcursor: pointer;\\n\\n\\t\\t\\t\\t&:not(button) {\\n\\t\\t\\t\\t\\tpadding: 14px;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\timg {\\n\\t\\t\\t\\t\\tfilter: var(--background-invert-if-dark);\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t&:hover,\\n\\t\\t\\t\\t&:active,\\n\\t\\t\\t\\t&:focus {\\n\\t\\t\\t\\t\\topacity: 1;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\tbutton.other-actions {\\n\\t\\t\\t\\twidth: 44px;\\n\\n\\t\\t\\t\\t&:focus {\\n\\t\\t\\t\\t\\tborder-color: transparent;\\n\\t\\t\\t\\t\\tbox-shadow: 0 0 0 2px var(--color-main-text);\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t&:focus-visible {\\n\\t\\t\\t\\t\\tborder-radius: var(--border-radius-pill);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t/* actions menu */\\n\\t\\t\\t.menu {\\n\\t\\t\\t\\ttop: 47px;\\n\\t\\t\\t\\tmargin-right: 13px;\\n\\t\\t\\t}\\n\\t\\t\\t.popovermenu::after {\\n\\t\\t\\t\\tright: 2px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".user-menu[data-v-6a818bbc]{margin-right:12px}.user-menu[data-v-6a818bbc] .header-menu__trigger{opacity:1 !important}.user-menu[data-v-6a818bbc] .header-menu__trigger:focus-visible .user-menu__avatar{border:2px solid var(--color-primary-text)}.user-menu[data-v-6a818bbc] .header-menu__carret{display:none !important}.user-menu[data-v-6a818bbc] .header-menu__content{width:fit-content !important}.user-menu__avatar[data-v-6a818bbc]:active,.user-menu__avatar[data-v-6a818bbc]:focus,.user-menu__avatar[data-v-6a818bbc]:hover{border:2px solid var(--color-primary-text)}.user-menu__nav[data-v-6a818bbc]{display:flex;width:100%}.user-menu__nav ul[data-v-6a818bbc]{display:flex;flex-direction:column;gap:2px}.user-menu__nav ul[data-v-6a818bbc] li a,.user-menu__nav ul[data-v-6a818bbc] li button{border-radius:6px;display:inline-flex;align-items:center;height:var(--header-menu-item-height);color:var(--color-main-text);padding:10px 8px;box-sizing:border-box;white-space:nowrap;position:relative;width:100%}.user-menu__nav ul[data-v-6a818bbc] li a:hover,.user-menu__nav ul[data-v-6a818bbc] li button:hover{background-color:var(--color-background-hover)}.user-menu__nav ul[data-v-6a818bbc] li a:focus-visible,.user-menu__nav ul[data-v-6a818bbc] li button:focus-visible{background-color:var(--color-background-hover) !important;box-shadow:inset 0 0 0 2px var(--color-primary) !important;outline:none !important}.user-menu__nav ul[data-v-6a818bbc] li a:active,.user-menu__nav ul[data-v-6a818bbc] li a.active,.user-menu__nav ul[data-v-6a818bbc] li button:active,.user-menu__nav ul[data-v-6a818bbc] li button.active{background-color:var(--color-primary-light)}.user-menu__nav ul[data-v-6a818bbc] li a span,.user-menu__nav ul[data-v-6a818bbc] li button span{padding-bottom:0;color:var(--color-main-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:110px}.user-menu__nav ul[data-v-6a818bbc] li a img,.user-menu__nav ul[data-v-6a818bbc] li button img{width:16px;height:16px;margin-right:10px}.user-menu__nav ul[data-v-6a818bbc] li a img,.user-menu__nav ul[data-v-6a818bbc] li a svg,.user-menu__nav ul[data-v-6a818bbc] li button img,.user-menu__nav ul[data-v-6a818bbc] li button svg{opacity:.7;filter:var(--background-invert-if-dark)}.user-menu__nav ul[data-v-6a818bbc] li button{background-color:rgba(0,0,0,0);border:none;font-weight:normal;margin:0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/views/UserMenu.vue\"],\"names\":[],\"mappings\":\"AACA,4BACC,iBAAA,CAIE,kDACC,oBAAA,CAEC,mFACC,0CAAA,CAKH,iDACC,uBAAA,CAGD,kDACC,4BAAA,CAMF,+HAGC,0CAAA,CAIF,iCACC,YAAA,CACA,UAAA,CAEA,oCACC,YAAA,CACA,qBAAA,CACA,OAAA,CAIE,uFAEC,iBAAA,CACA,mBAAA,CACA,kBAAA,CACA,qCAAA,CACA,4BAAA,CACA,gBAAA,CACA,qBAAA,CACA,kBAAA,CACA,iBAAA,CACA,UAAA,CAEA,mGACC,8CAAA,CAGD,mHACC,yDAAA,CACA,0DAAA,CACA,uBAAA,CAGD,0MAEC,2CAAA,CAGD,iGACC,gBAAA,CACA,4BAAA,CACA,kBAAA,CACA,eAAA,CACA,sBAAA,CACA,eAAA,CAGD,+FACC,UAAA,CACA,WAAA,CACA,iBAAA,CAGD,8LAEC,UAAA,CACA,uCAAA,CAKF,8CACC,8BAAA,CACA,WAAA,CACA,kBAAA,CACA,QAAA\",\"sourcesContent\":[\"\\n.user-menu {\\n\\tmargin-right: 12px;\\n\\n\\t&:deep {\\n\\t\\t.header-menu {\\n\\t\\t\\t&__trigger {\\n\\t\\t\\t\\topacity: 1 !important;\\n\\t\\t\\t\\t&:focus-visible {\\n\\t\\t\\t\\t\\t.user-menu__avatar {\\n\\t\\t\\t\\t\\t\\tborder: 2px solid var(--color-primary-text);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t&__carret {\\n\\t\\t\\t\\tdisplay: none !important;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&__content {\\n\\t\\t\\t\\twidth: fit-content !important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&__avatar {\\n\\t\\t&:active,\\n\\t\\t&:focus,\\n\\t\\t&:hover {\\n\\t\\t\\tborder: 2px solid var(--color-primary-text);\\n\\t\\t}\\n\\t}\\n\\n\\t&__nav {\\n\\t\\tdisplay: flex;\\n\\t\\twidth: 100%;\\n\\n\\t\\tul {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tflex-direction: column;\\n\\t\\t\\tgap: 2px;\\n\\n\\t\\t\\t&:deep {\\n\\t\\t\\t\\tli {\\n\\t\\t\\t\\t\\ta,\\n\\t\\t\\t\\t\\tbutton {\\n\\t\\t\\t\\t\\t\\tborder-radius: 6px;\\n\\t\\t\\t\\t\\t\\tdisplay: inline-flex;\\n\\t\\t\\t\\t\\t\\talign-items: center;\\n\\t\\t\\t\\t\\t\\theight: var(--header-menu-item-height);\\n\\t\\t\\t\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\t\\t\\t\\tpadding: 10px 8px;\\n\\t\\t\\t\\t\\t\\tbox-sizing: border-box;\\n\\t\\t\\t\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\t\\t\\t\\tposition: relative;\\n\\t\\t\\t\\t\\t\\twidth: 100%;\\n\\n\\t\\t\\t\\t\\t\\t&:hover {\\n\\t\\t\\t\\t\\t\\t\\tbackground-color: var(--color-background-hover);\\n\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t&:focus-visible {\\n\\t\\t\\t\\t\\t\\t\\tbackground-color: var(--color-background-hover) !important;\\n\\t\\t\\t\\t\\t\\t\\tbox-shadow: inset 0 0 0 2px var(--color-primary) !important;\\n\\t\\t\\t\\t\\t\\t\\toutline: none !important;\\n\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t&:active,\\n\\t\\t\\t\\t\\t\\t&.active {\\n\\t\\t\\t\\t\\t\\t\\tbackground-color: var(--color-primary-light);\\n\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\tspan {\\n\\t\\t\\t\\t\\t\\t\\tpadding-bottom: 0;\\n\\t\\t\\t\\t\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\t\\t\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\t\\t\\t\\t\\toverflow: hidden;\\n\\t\\t\\t\\t\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\t\\t\\t\\t\\tmax-width: 110px;\\n\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\timg {\\n\\t\\t\\t\\t\\t\\t\\twidth: 16px;\\n\\t\\t\\t\\t\\t\\t\\theight: 16px;\\n\\t\\t\\t\\t\\t\\t\\tmargin-right: 10px;\\n\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\timg,\\n\\t\\t\\t\\t\\t\\tsvg {\\n\\t\\t\\t\\t\\t\\t\\topacity: .7;\\n\\t\\t\\t\\t\\t\\t\\tfilter: var(--background-invert-if-dark);\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t// Override global button styles\\n\\t\\t\\t\\t\\tbutton {\\n\\t\\t\\t\\t\\t\\tbackground-color: transparent;\\n\\t\\t\\t\\t\\t\\tborder: none;\\n\\t\\t\\t\\t\\t\\tfont-weight: normal;\\n\\t\\t\\t\\t\\t\\tmargin: 0;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.program(5, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":1},\"end\":{\"line\":10,\"column\":8}}})) != null ? stack1 : \"\");\n},\"2\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileTitle\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":2},\"end\":{\"line\":7,\"column\":9}}})) != null ? stack1 : \"\");\n},\"3\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t\t<a class=\\\"profile-link--avatar\\\" href=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1), depth0))\n + \"\\\">\\n\t\t\t\t<img src=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32\\\" class=\\\"avatar\\\" srcset=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32 1x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=64 2x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=128 4x\\\" alt=\\\"\\\">\\n\t\t\t</a>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t<img src=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32\\\" class=\\\"avatar\\\" srcset=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32 1x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=64 2x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=128 4x\\\" alt=\\\"\\\">\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.program(11, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":12,\"column\":1},\"end\":{\"line\":20,\"column\":8}}})) != null ? stack1 : \"\");\n},\"8\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileTitle\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":13,\"column\":2},\"end\":{\"line\":17,\"column\":9}}})) != null ? stack1 : \"\");\n},\"9\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t\t<a class=\\\"profile-link--avatar\\\" href=\\\"\"\n + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1), depth0))\n + \"\\\">\\n\t\t\t\t<div class=\\\"avatar\\\"></div>\\n\t\t\t</a>\\n\";\n},\"11\":function(container,depth0,helpers,partials,data) {\n return \"\t\t<div class=\\\"avatar\\\"></div>\\n\";\n},\"13\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileTitle\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(14, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":23,\"column\":1},\"end\":{\"line\":29,\"column\":8}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(16, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":30,\"column\":1},\"end\":{\"line\":34,\"column\":8}}})) != null ? stack1 : \"\");\n},\"14\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t<a class=\\\"body profile-link--full-name\\\" href=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1), depth0))\n + \"\\\">\\n\t\t\t<div class=\\\"full-name\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"fullName\") : stack1), depth0))\n + \"</div>\\n\t\t\t<div class=\\\"last-message\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"lastMessage\") : stack1), depth0))\n + \"</div>\\n\t\t\t<div class=\\\"email-address\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"emailAddresses\") : stack1), depth0))\n + \"</div>\\n\t\t</a>\\n\";\n},\"16\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t<a class=\\\"top-action\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"hyperlink\") : stack1), depth0))\n + \"\\\" title=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\" aria-label=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n\t\t\t<img src=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"icon\") : stack1), depth0))\n + \"\\\" alt=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n\t\t</a>\\n\";\n},\"18\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(19, data, 0),\"inverse\":container.program(21, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":35,\"column\":0},\"end\":{\"line\":50,\"column\":0}}})) != null ? stack1 : \"\");\n},\"19\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t<a class=\\\"body\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"hyperlink\") : stack1), depth0))\n + \"\\\">\\n\t\t<div class=\\\"full-name\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"fullName\") : stack1), depth0))\n + \"</div>\\n\t\t<div class=\\\"last-message\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"lastMessage\") : stack1), depth0))\n + \"</div>\\n\t\t<div class=\\\"email-address\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"emailAddresses\") : stack1), depth0))\n + \"</div>\\n\t</a>\\n \t<a class=\\\"top-action\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"hyperlink\") : stack1), depth0))\n + \"\\\" title=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n \t\t<img src=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"icon\") : stack1), depth0))\n + \"\\\" alt=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n\t</a>\\n\";\n},\"21\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t<div class=\\\"body\\\">\\n\t\t<div class=\\\"full-name\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"fullName\") : stack1), depth0))\n + \"</div>\\n\t\t<div class=\\\"last-message\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"lastMessage\") : stack1), depth0))\n + \"</div>\\n\t\t<div class=\\\"email-address\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"emailAddresses\") : stack1), depth0))\n + \"</div>\\n\t</div>\\n\";\n},\"23\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<a class=\\\"second-action\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"hyperlink\") : stack1), depth0))\n + \"\\\" aria-label=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\" title=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n\t<img src=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"icon\") : stack1), depth0))\n + \"\\\" alt=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n</a>\\n\";\n},\"25\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t<button class=\\\"other-actions icon-more\\\"></button>\\n\t<div class=\\\"menu popovermenu\\\">\\n\t\t<ul>\\n\"\n + ((stack1 = lookupProperty(helpers,\"each\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"actions\") : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(26, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":60,\"column\":3},\"end\":{\"line\":67,\"column\":12}}})) != null ? stack1 : \"\")\n + \"\t\t</ul>\\n\t</div>\\n\";\n},\"26\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t\t<li>\\n\t\t\t\t<a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"hyperlink\") || (depth0 != null ? lookupProperty(depth0,\"hyperlink\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"hyperlink\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":62,\"column\":13},\"end\":{\"line\":62,\"column\":26}}}) : helper)))\n + \"\\\">\\n\t\t\t\t\t<img src=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"icon\") || (depth0 != null ? lookupProperty(depth0,\"icon\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"icon\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":63,\"column\":15},\"end\":{\"line\":63,\"column\":23}}}) : helper)))\n + \"\\\" alt=\\\"\\\">\\n\t\t\t\t\t<span>\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"title\") || (depth0 != null ? lookupProperty(depth0,\"title\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"title\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":64,\"column\":11},\"end\":{\"line\":64,\"column\":20}}}) : helper)))\n + \"</span>\\n\t\t\t\t</a>\\n\t\t\t</li>\\n\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(7, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":21,\"column\":7}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(13, data, 0),\"inverse\":container.program(18, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":22,\"column\":0},\"end\":{\"line\":50,\"column\":7}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"hasTwoActions\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(23, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":51,\"column\":0},\"end\":{\"line\":55,\"column\":7}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"hasManyActions\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(25, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":56,\"column\":0},\"end\":{\"line\":70,\"column\":7}}})) != null ? stack1 : \"\");\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-search\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"couldNotLoadText\") || (depth0 != null ? lookupProperty(depth0,\"couldNotLoadText\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"couldNotLoadText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":5},\"end\":{\"line\":3,\"column\":25}}}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-search\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"noContactsFoundText\") || (depth0 != null ? lookupProperty(depth0,\"noContactsFoundText\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"noContactsFoundText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":5},\"end\":{\"line\":4,\"column\":28}}}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"footer\\\"><a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"contactsAppURL\") || (depth0 != null ? lookupProperty(depth0,\"contactsAppURL\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppURL\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":29},\"end\":{\"line\":9,\"column\":47}}}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"showAllContactsText\") || (depth0 != null ? lookupProperty(depth0,\"showAllContactsText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"showAllContactsText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":49},\"end\":{\"line\":9,\"column\":72}}}) : helper)))\n + \"</a></div>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"canInstallApp\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":10,\"column\":0},\"end\":{\"line\":12,\"column\":0}}})) != null ? stack1 : \"\");\n},\"6\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"footer\\\"><a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"contactsAppMgmtURL\") || (depth0 != null ? lookupProperty(depth0,\"contactsAppMgmtURL\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppMgmtURL\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":29},\"end\":{\"line\":11,\"column\":51}}}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"contactsAppMgmtText\") || (depth0 != null ? lookupProperty(depth0,\"contactsAppMgmtText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppMgmtText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":53},\"end\":{\"line\":11,\"column\":76}}}) : helper)))\n + \"</a></div>\\n\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contacts\") : depth0)) != null ? lookupProperty(stack1,\"length\") : stack1),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":6,\"column\":11}}})) != null ? stack1 : \"\")\n + \"<div id=\\\"contactsmenu-contacts\\\"></div>\\n\"\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"contactsAppEnabled\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.program(5, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":8,\"column\":0},\"end\":{\"line\":12,\"column\":7}}})) != null ? stack1 : \"\");\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-loading\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"loadingText\") || (depth0 != null ? lookupProperty(depth0,\"loadingText\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"loadingText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":5},\"end\":{\"line\":3,\"column\":20}}}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<label class=\\\"hidden-visually\\\" for=\\\"contactsmenu-search\\\">\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"searchContactsText\") || (depth0 != null ? lookupProperty(depth0,\"searchContactsText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchContactsText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":57},\"end\":{\"line\":1,\"column\":79}}}) : helper)))\n + \"</label>\\n<input id=\\\"contactsmenu-search\\\" type=\\\"search\\\" placeholder=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"searchContactsText\") || (depth0 != null ? lookupProperty(depth0,\"searchContactsText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchContactsText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":59},\"end\":{\"line\":2,\"column\":81}}}) : helper)))\n + \"\\\" value=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"searchTerm\") || (depth0 != null ? lookupProperty(depth0,\"searchTerm\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchTerm\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":90},\"end\":{\"line\":2,\"column\":104}}}) : helper)))\n + \"\\\">\\n<div class=\\\"content\\\">\\n</div>\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<img src=\\\"\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"icon\") || (depth0 != null ? lookupProperty(depth0,\"icon\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"icon\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":24},\"end\":{\"line\":3,\"column\":32}}}) : helper)))\n + \"\\\">\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<li>\\n\t<a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"hyperlink\") || (depth0 != null ? lookupProperty(depth0,\"hyperlink\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"hyperlink\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":10},\"end\":{\"line\":2,\"column\":23}}}) : helper)))\n + \"\\\">\\n\t\t\"\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"icon\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":2},\"end\":{\"line\":3,\"column\":41}}})) != null ? stack1 : \"\")\n + \"\\n\t\t<span>\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"title\") || (depth0 != null ? lookupProperty(depth0,\"title\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"title\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":8},\"end\":{\"line\":4,\"column\":17}}}) : helper)))\n + \"</span>\\n\t</a>\\n</li>\\n\";\n},\"useData\":true});","var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 76225,\n\t\"./bn-bd.js\": 76225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-il\": 47207,\n\t\"./en-il.js\": 47207,\n\t\"./en-in\": 44175,\n\t\"./en-in.js\": 44175,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./en-sg\": 31662,\n\t\"./en-sg.js\": 31662,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-mx\": 96112,\n\t\"./es-mx.js\": 96112,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fil\": 42549,\n\t\"./fil.js\": 42549,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 94470,\n\t\"./fr-ca\": 63049,\n\t\"./fr-ca.js\": 63049,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 94470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 29295,\n\t\"./ga.js\": 29295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-deva\": 27884,\n\t\"./gom-deva.js\": 27884,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 30094,\n\t\"./hi.js\": 30094,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it-ch\": 10150,\n\t\"./it-ch.js\": 10150,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ku\": 1408,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./oc-lnc\": 92135,\n\t\"./oc-lnc.js\": 92135,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./tg\": 27321,\n\t\"./tg.js\": 27321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 19005,\n\t\"./tk.js\": 19005,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-mo\": 99807,\n\t\"./zh-mo.js\": 99807,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 2943;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2943: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], function() { return __webpack_require__(30300); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","loadedScripts","loadedStyles","updatableNotification","getDefaultNotificationFunction","setDefault","callback","this","hide","$row","_","undefined","each","$","toastify","hideToast","console","error","call","showHtml","html","options","isHTML","timeout","TOAST_PERMANENT_TIMEOUT","toast","showMessage","toastElement","show","text","toString","split","join","escapeHTML","showUpdate","showTemporary","TOAST_DEFAULT_TIMEOUT","isHidden","find","length","ajaxConnectionLostHandler","Notification","t","trailing","dynamicSlideToggleEnabled","enableDynamicSlideToggle","Apps","$el","removeClass","trigger","addClass","method","endpoint","OC","type","toUpperCase","url","generateOcsUrl","data","success","bind","getApps","getKeys","app","getValue","key","defaultValue","setValue","value","deleteKey","appConfig","window","oc_appconfig","AppConfig","_oc_appswebroots","methodMap","create","update","patch","delete","read","parsePropFindResult","result","davProperties","subResult","props","href","propStat","status","properties","propKey","id","parseIdFromLocation","queryPos","indexOf","substr","parts","pop","isSuccessStatus","callPropPatch","client","model","headers","propPatch","attrs","changedProp","warn","convertModelAttributesToDavProperties","changed","then","toJSON","Backbone","VendorBackbone","Object","assign","davCall","dav","baseUrl","xmlNamespaces","resolveUrl","requestToken","propFind","depth","response","propsMapping","results","body","shift","callPropFind","request","callMkCol","responseJson","locationHeader","xhr","getResponseHeader","callMethod","davSync","params","isCollection","Collection","hasInnerCollection","usePUT","collection","Error","urlError","JSON","stringify","processData","prototype","textStatus","errorThrown","context","_oc_config","Contact","Model","defaults","fullName","lastMessage","actions","hasOneAction","hasTwoActions","hasManyActions","initialize","get","set","ContactCollection","ContactsListView","View","_collection","_subViews","tagName","render","self","forEach","contact","item","ContactsListItemView","append","on","_onChildActionMenuToggle","push","$src","view","className","_template","_model","_actionMenuShown","events","contactTemplate","require","template","_onOtherActionMenuOpened","delegateEvents","imageplaceholder","_onToggleActionsMenu","is","ContactsMenuView","_loadingTemplate","_errorTemplate","_contentTemplate","_contactsTemplate","_contacts","_searchTerm","templates","loading","menu","list","_onSearch","e","searchTerm","val","loadingTemplate","errorTemplate","couldNotLoadText","contentTemplate","searchContactsText","contactsTemplate","noContactsFoundText","showAllContactsText","contactsAppMgmtText","showLoading","loadingText","showError","showContacts","viewData","contacts","contactsAppEnabled","contactsAppURL","canInstallApp","contactsAppMgmtURL","searchVal","focus","ContactsMenu","_view","_contactsPromise","el","loadContacts","_getContacts","Promise","resolve","filter","term","catch","rawUid","document","getElementsByTagName","getAttribute","displayName","currentUser","Search","isA11yActivation","event","global","emit","token","Dialogs","YES_NO_BUTTONS","OK_BUTTONS","FILEPICKER_TYPE_CHOOSE","FILEPICKER_TYPE_MOVE","FILEPICKER_TYPE_COPY","FILEPICKER_TYPE_COPY_MOVE","FILEPICKER_TYPE_CUSTOM","dialogsCounter","alert","title","modal","message","OK_BUTTON","info","confirm","confirmDestructive","buttons","confirmHtml","prompt","name","password","_getMessageTemplate","$tmpl","dialogName","dialogId","$dlg","octemplate","dialog_name","input","attr","label","buttonlist","click","ocdialog","defaultButton","closeOnEscape","close","filepicker","multiselect","mimetypeFilter","path","sortField","sortOrder","emptyText","newText","filesClient","OCA","Sharing","PublicApp","fileList","filelist","allowDirectoryChooser","_getFilePickerTemplate","$filePicker","emptytext","newtext","nameCol","sizeCol","modifiedCol","target","prepend","$showGridView","_onGridviewChange","_getGridSettings","newButton","stopImmediatePropagation","preventDefault","$input","tooltip","submit","newName","lastPos","lastIndexOf","selectRange","$form","$submit","stopPropagation","filename","trimmedName","trim","match","isFileNameValid","file","escape","placement","checkInput","newname","createDirectory","always","_fillFilePicker","ready","$fileListHeader","$filelist","$filelistContainer","$dirTree","_handleTreeListSelect","_handlePickerClick","dir","currentTarget","functionToCall","returnType","datapath","index","element","selectedName","button","width","height","style","remove","buttonEnableDisable","closest","prop","fail","content","dialogType","allowHtml","escapeFunction","cancel","classes","confirmClasses","closeCallback","_fileexistsshown","fileexists","original","replacement","controller","dialogDeferred","resampleHermite","canvas","W","H","W2","H2","Math","round","img","getContext","getImageData","img2","data2","ratio_w","ratio_h","ratio_w_half","ceil","ratio_h_half","j","i","x2","weight","weights","weights_alpha","gx_r","gx_g","gx_b","gx_a","center_y","yy","floor","dy","abs","center_x","w0","xx","dx","w","sqrt","clearRect","max","putImageData","addConflict","$conflicts","$conflict","clone","$originalDiv","$replacementDiv","size","mtime","lastModified","directory","urlSpec","x","y","c","etag","forceIcon","previewpath","Files","generatePreviewUrl","replace","css","FileReader","reader","onload","blob","Blob","URL","webkitURL","originalUrl","createObjectURL","image","Image","src","createElement","min","drawImage","toDataURL","readAsArrayBuffer","reject","getCroppedPreview","checkboxId","count","n","parent","children","_getFileExistsTemplate","allnewfiles","allexistingfiles","why","what","onCancel","onContinue","closeButton","$primaryButton","updatePrimaryButton","checkedCount","$checkbox","promise","gridview","toggleClass","isGridView","hasClass","defer","$filePickerTemplate","tmpl","$listTmpl","detach","jqXHR","$messageTemplate","$fileexistsTemplate","empty","advancedFilter","getFolderContents","files","_changeButtonsText","mimetype","showHiddenInput","getElementById","startsWith","comparator","Comparators","fileInfo1","fileInfo2","sort","file1","file2","isFavorite","fileInfo","tags","_fillSlug","idx","entry","simpleSize","sizeColor","isEncrypted","icon","parseInt","pow","filename1","filename2","date","previewUrl","addButton","$template","paths","prependTo","getOcDialog","$element","ctrlKey","copyText","folder","moveText","eq","manageFromDocument","getToken","setToken","newToken","OCEventSource","joinChar","dataStr","typelessListeners","closed","listeners","encodeURIComponent","useFallBack","EventSource","iframeId","iframeCount","fallBackSources","iframe","source","onmessage","parse","listen","fallBackCallBack","done","lastLength","addEventListener","currentMenu","currentMenuToggle","hideMenus","complete","lastMenu","slideUp","apply","arguments","isAdmin","_oc_isadmin","load","loadTranslations","register","_unregister","unregister","translate","translatePlural","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","b","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","a","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","generateFilePath","addStyle","createStyleSheet","appSettings","args","appid","scriptName","cache","settings","popup","arrowclass","loadJS","scriptname","jqxhr","appswebroots","dialogs","getCurrentUser","uid","isUserAdmin","L10N","_ajaxConnectionLostHandler","_processAjaxError","statusText","timer","setInterval","clearInterval","registerXHRForErrorProcessing","readyState","getCapabilities","realGetCapabilities","registerMenu","$toggle","$menuEl","toggle","headerMenu","isClickableElement","slideToggle","showMenu","unregisterMenu","off","basename","encodePath","dirname","isSamePath","joinPaths","getHost","host","getHostName","hostname","getPort","port","getProtocol","protocol","getCanonicalLocale","getLocale","getLanguage","buildQueryString","parseQueryString","queryString","components","part","decodeURIComponent","msg","PasswordConfirmation","Plugins","_plugins","targetName","plugin","plugins","getPlugins","attach","targetObject","Util","filePath","namespaces","tail","getRootPath","getRootUrl","imagePath","redirect","targetURL","reload","getRequestToken","linkTo","linkToOCS","service","version","ocsVersion","linkToRemote","generateRemoteUrl","linkToRemoteBase","realGetRootUrl","subscribe","resp","poll","setRequestToken","startPolling","NaN","session_lifetime","isNaN","getInterval","Contacts","NcHeaderMenu","contactsMenu","mounted","methods","handleOpen","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","_c","_self","scopedSlots","_u","fn","proxy","_v","NcActions","NcActionLink","apps","appLimit","observer","computed","appList","mainAppList","popoverAppList","appLabel","beforeDestroy","unsubscribe","setNavigationCounter","setApps","resize","appCount","staticClass","_l","class","active","unread","_s","_e","NcLoadingIcon","required","cachedIcon","handleClick","$event","shiftKey","altKey","metaKey","NcAvatar","UserMenuEntry","settingsNavEntries","userId","_b","localeAliases","zh","zh_Hans","zh_Hans_CN","zh_Hans_HK","zh_Hans_MO","zh_Hans_SG","zh_Hant","zh_Hant_HK","zh_Hant_MO","zh_Hant_TW","locale","hasOwnProperty","initCore","mountPoint","allowAuthErrors","loadState","loadConfig","auto_logout","lastActive","now","localStorage","setItem","newValue","logoutUrl","registerAutoLogout","session_keepalive","initSessionHeartBeat","Vue","container","appMenu","AppMenu","$mount","counter","setUpMainMenu","h","UserMenu","setUpContactsMenu","snapper","Snap","disable","maxPosition","minDragDistance","animating","oldSnapperOpen","open","oldSnapperClose","_snapperOpen","_snapperClose","keypress","delegate","$target","navigationBarSlideGestureEnabled","navigationBarSlideGestureAllowed","navigationBarSlideGestureEnablePending","enable","toggleSnapperOnSize","ex","TypeError","urlRegex","plainToRich","formatLinksRich","richToPlain","formatLinksPlain","leadingSpace","trailingSpace","linkText","$content","$this","dismissOptions","dismiss","menuItem","div","classList","add","innerText","ocs","product","onclick","whatsNew","regular","whatsNewTextItem","innerHTML","changelogURL","rel","onQuerySuccess","onQueryError","onDismissSuccess","onDismissError","func","oldFunc","newFunc","disableKeyboardShortcuts","setPageHeading","heading","headingEl","textContent","types","loadedStylesheets","loadScript","scriptPath","btoa","onerror","head","loadStylesheet","stylePath","link","showSuccess","warning","showWarning","showInfo","Accessibility","Collaboration","registerType","typeDefinition","action","getTypes","keys","getIcon","typeIconClass","getLabel","typeString","getLink","Comments","InitialState","Loader","Toast","WhatsNew","warnIfNotTesting","setDeprecatedProp","cb","Array","isArray","defineProperty","autosize","ClipboardJS","md5","OCP","user","ie8fix","hidedefault","displayname","setAvatarForUnknownUser","String","$div","devicePixelRatio","oc_userconfig","avatar","clearimageplaceholder","alt","entryTemplate","shareWith","shareType","appendTo","$list","topAction","concat","hyperlink","clickedList","has","clickedTarget","attrName","attrValue","_create","originalCss","display","originalTitle","tabIndex","role","insertBefore","removeAttr","$buttonrow","$button","enterCallback","keyCode","_setOptions","_createOverlay","_useFocusTrap","_init","_trigger","_setOption","$title","_setSizes","$defaultButton","$closeButton","dialogTitle","closeCB","lessHeight","outerHeight","contentDiv","overlay","_destroyOverlay","_nc_focus_trap","dialogElement","focusTrap","createFocusTrap","allowOutsideClick","trapStack","fallbackFocus","activate","_clearFocusTrap","deactivate","widget","setEnterCallback","unsetEnterCallback","destroy","Template","vars","elem","_html","_build","o","outerHTML","r","toRgb","Color","mixPalette","steps","color1","color2","palette","step","ends","stepCalc","red","yellow","blue","palette1","palette2","palette3","maximum","finalInt","hashToInt","seed","rgb","placeholderText","map","word","elm","crossDomain","setRequestHeader","start","end","setSelectionRange","createTextRange","range","collapse","moveEnd","moveStart","select","showPassword","setState","checkbox","$clone","tabindex","autocomplete","cloneElement","insertAfter","outerWidth","contents","areaSelector","area","hideArea","slideDown","showArea","onpopstate","___CSS_LOADER_URL_IMPORT_0___","___CSS_LOADER_URL_IMPORT_1___","___CSS_LOADER_URL_IMPORT_2___","___CSS_LOADER_URL_IMPORT_3___","___CSS_LOADER_URL_IMPORT_4___","___CSS_LOADER_EXPORT___","___CSS_LOADER_URL_REPLACEMENT_0___","___CSS_LOADER_URL_REPLACEMENT_1___","___CSS_LOADER_URL_REPLACEMENT_2___","___CSS_LOADER_URL_REPLACEMENT_3___","___CSS_LOADER_URL_REPLACEMENT_4___","module","exports","depth0","helpers","partials","stack1","lookupProperty","propertyName","nullContext","program","noop","alias1","lambda","alias2","escapeExpression","helper","hooks","helperMissing","alias3","alias4","webpackContext","req","webpackContextResolve","__webpack_require__","code","__webpack_module_cache__","moduleId","cachedModule","loaded","__webpack_modules__","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","every","splice","getter","__esModule","d","definition","enumerable","globalThis","Function","obj","Symbol","toStringTag","nmd","baseURI","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","nc","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file +{"version":3,"file":"core-main.js?v=b35dfeffd73df74cd1e5","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/core/src/OC/legacy-loader.js","webpack:///nextcloud/core/src/OC/notification.js","webpack:///nextcloud/core/src/OC/xhr-error.js","webpack:///nextcloud/core/src/OC/apps.js","webpack:///nextcloud/core/src/OCP/appconfig.js","webpack:///nextcloud/core/src/OC/appconfig.js","webpack:///nextcloud/core/src/OC/appswebroots.js","webpack:///nextcloud/core/src/OC/backbone-webdav.js","webpack:///nextcloud/core/src/OC/backbone.js","webpack:///nextcloud/core/src/OC/config.js","webpack:///nextcloud/core/src/OC/contactsmenu.js","webpack:///nextcloud/core/src/OC/currentuser.js","webpack:///nextcloud/core/src/OCA/search.js","webpack:///nextcloud/core/src/OCA/index.js","webpack:///nextcloud/core/src/Util/a11y.js","webpack:///nextcloud/core/src/OC/dialogs.js","webpack:///nextcloud/core/src/OC/requesttoken.js","webpack:///nextcloud/core/src/OC/eventsource.js","webpack:///nextcloud/core/src/OC/menu.js","webpack:///nextcloud/core/src/OC/constants.js","webpack:///nextcloud/core/src/OC/admin.js","webpack:///nextcloud/core/src/OC/l10n.js","webpack:///nextcloud/core/src/OC/msg.js","webpack:///nextcloud/core/src/OC/password-confirmation.js","webpack:///nextcloud/core/src/OC/theme.js","webpack:///nextcloud/core/src/OC/util-history.js","webpack:///nextcloud/core/src/OC/util.js","webpack:///nextcloud/core/src/OC/debug.js","webpack:///nextcloud/core/src/OC/webroot.js","webpack:///nextcloud/core/src/OC/get_set.js","webpack:///nextcloud/core/src/OC/index.js","webpack:///nextcloud/core/src/OC/appsettings.js","webpack:///nextcloud/core/src/OC/capabilities.js","webpack:///nextcloud/core/src/OC/host.js","webpack:///nextcloud/core/src/OC/query-string.js","webpack:///nextcloud/core/src/OC/plugins.js","webpack:///nextcloud/core/src/OC/navigation.js","webpack:///nextcloud/core/src/OC/routing.js","webpack:///nextcloud/core/src/session-heartbeat.js","webpack:///nextcloud/core/src/views/ContactsMenu.vue?vue&type=script&lang=js&","webpack:///nextcloud/core/src/views/ContactsMenu.vue","webpack://nextcloud/./core/src/views/ContactsMenu.vue?41d6","webpack://nextcloud/./core/src/views/ContactsMenu.vue?1de5","webpack://nextcloud/./core/src/views/ContactsMenu.vue?f71b","webpack:///nextcloud/core/src/components/AppMenu.vue","webpack:///nextcloud/core/src/components/AppMenu.vue?vue&type=script&lang=js&","webpack://nextcloud/./core/src/components/AppMenu.vue?8f2a","webpack://nextcloud/./core/src/components/AppMenu.vue?95cf","webpack://nextcloud/./core/src/components/AppMenu.vue?d0fd","webpack:///nextcloud/core/src/components/UserMenu/UserMenuEntry.vue","webpack:///nextcloud/core/src/components/UserMenu/UserMenuEntry.vue?vue&type=script&lang=js&","webpack://nextcloud/./core/src/components/UserMenu/UserMenuEntry.vue?6a6f","webpack://nextcloud/./core/src/components/UserMenu/UserMenuEntry.vue?a480","webpack://nextcloud/./core/src/components/UserMenu/UserMenuEntry.vue?4de1","webpack:///nextcloud/core/src/views/UserMenu.vue","webpack:///nextcloud/core/src/views/UserMenu.vue?vue&type=script&lang=js&","webpack://nextcloud/./core/src/views/UserMenu.vue?3de1","webpack://nextcloud/./core/src/views/UserMenu.vue?5d6d","webpack://nextcloud/./core/src/views/UserMenu.vue?4b20","webpack:///nextcloud/core/src/init.js","webpack:///nextcloud/core/src/Polyfill/tooltip.js","webpack:///nextcloud/core/src/components/UserMenu.js","webpack:///nextcloud/core/src/components/MainMenu.js","webpack:///nextcloud/core/src/components/ContactsMenu.js","webpack:///nextcloud/core/src/OCP/comments.js","webpack:///nextcloud/core/src/OCP/whatsnew.js","webpack:///nextcloud/core/src/OCP/accessibility.js","webpack:///nextcloud/core/src/globals.js","webpack:///nextcloud/core/src/OCP/collaboration.js","webpack:///nextcloud/core/src/OCP/loader.js","webpack:///nextcloud/core/src/OCP/toast.js","webpack:///nextcloud/core/src/OCP/index.js","webpack:///nextcloud/core/src/jquery/avatar.js","webpack:///nextcloud/core/src/jquery/contactsmenu.js","webpack:///nextcloud/core/src/jquery/exists.js","webpack:///nextcloud/core/src/jquery/filterattr.js","webpack:///nextcloud/core/src/jquery/ocdialog.js","webpack:///nextcloud/core/src/jquery/octemplate.js","webpack:///nextcloud/core/src/jquery/placeholder.js","webpack:///nextcloud/core/src/jquery/requesttoken.js","webpack:///nextcloud/core/src/jquery/selectrange.js","webpack:///nextcloud/core/src/jquery/showpassword.js","webpack:///nextcloud/core/src/jquery/ui-fixes.js","webpack://nextcloud/./core/src/jquery/css/jquery-ui-fixes.scss?a4c2","webpack://nextcloud/./core/src/jquery/css/jquery.ocdialog.scss?5718","webpack:///nextcloud/core/src/jquery/index.js","webpack:///nextcloud/core/src/main.js","webpack:///nextcloud/core/src/jquery/css/jquery-ui-fixes.scss","webpack:///nextcloud/core/src/jquery/css/jquery.ocdialog.scss","webpack:///nextcloud/core/src/components/AppMenu.vue?vue&type=style&index=0&id=b778f520&prod&lang=scss&scoped=true&","webpack:///nextcloud/core/src/components/UserMenu/UserMenuEntry.vue?vue&type=style&index=0&id=6e59d13c&prod&lang=scss&scoped=true&","webpack:///nextcloud/core/src/views/ContactsMenu.vue?vue&type=style&index=0&id=1563c388&prod&lang=scss&scoped=true&","webpack:///nextcloud/core/src/views/UserMenu.vue?vue&type=style&index=0&id=6a818bbc&prod&lang=scss&scoped=true&","webpack:///nextcloud/core/src/OC/contactsmenu/contact.handlebars","webpack:///nextcloud/core/src/OC/contactsmenu/error.handlebars","webpack:///nextcloud/core/src/OC/contactsmenu/list.handlebars","webpack:///nextcloud/core/src/OC/contactsmenu/loading.handlebars","webpack:///nextcloud/core/src/OC/contactsmenu/menu.handlebars","webpack:///nextcloud/core/src/jquery/contactsmenu/jquery_entry.handlebars","webpack:///nextcloud/node_modules/moment/locale|sync|/^\\.\\/.*$","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/** @typedef {import('jquery')} jQuery */\nimport $ from 'jquery'\nimport { generateFilePath } from '@nextcloud/router'\n\nconst loadedScripts = {}\nconst loadedStyles = []\n\n/**\n * Load a script for the server and load it. If the script is already loaded,\n * the event handler will be called directly\n *\n * @param {string} app the app id to which the script belongs\n * @param {string} script the filename of the script\n * @param {Function} ready event handler to be called when the script is loaded\n * @return {jQuery.Deferred}\n * @deprecated 16.0.0 Use OCP.Loader.loadScript\n */\nexport const addScript = (app, script, ready) => {\n\tconsole.warn('OC.addScript is deprecated, use OCP.Loader.loadScript instead')\n\n\tlet deferred\n\tconst path = generateFilePath(app, 'js', script + '.js')\n\tif (!loadedScripts[path]) {\n\t\tdeferred = $.Deferred()\n\t\t$.getScript(path, () => deferred.resolve())\n\t\tloadedScripts[path] = deferred\n\t} else {\n\t\tif (ready) {\n\t\t\tready()\n\t\t}\n\t}\n\treturn loadedScripts[path]\n}\n\n/**\n * Loads a CSS file\n *\n * @param {string} app the app id to which the css style belongs\n * @param {string} style the filename of the css file\n * @deprecated 16.0.0 Use OCP.Loader.loadStylesheet\n */\nexport const addStyle = (app, style) => {\n\tconsole.warn('OC.addStyle is deprecated, use OCP.Loader.loadStylesheet instead')\n\n\tconst path = generateFilePath(app, 'css', style + '.css')\n\tif (loadedStyles.indexOf(path) === -1) {\n\t\tloadedStyles.push(path)\n\t\tif (document.createStyleSheet) {\n\t\t\tdocument.createStyleSheet(path)\n\t\t} else {\n\t\t\tstyle = $('<link rel=\"stylesheet\" type=\"text/css\" href=\"' + path + '\"/>')\n\t\t\t$('head').append(style)\n\t\t}\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author npmbuildbot[bot] \"npmbuildbot[bot]@users.noreply.github.com\"\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\n/** @typedef {import('jquery')} jQuery */\nimport $ from 'jquery'\nimport { showMessage, TOAST_DEFAULT_TIMEOUT, TOAST_PERMANENT_TIMEOUT } from '@nextcloud/dialogs'\n\n/**\n * @todo Write documentation\n * @deprecated 17.0.0 use the `@nextcloud/dialogs` package instead\n * @namespace OC.Notification\n */\nexport default {\n\n\tupdatableNotification: null,\n\n\tgetDefaultNotificationFunction: null,\n\n\t/**\n\t * @param {Function} callback callback function\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tsetDefault(callback) {\n\t\tthis.getDefaultNotificationFunction = callback\n\t},\n\n\t/**\n\t * Hides a notification.\n\t *\n\t * If a row is given, only hide that one.\n\t * If no row is given, hide all notifications.\n\t *\n\t * @param {jQuery} [$row] notification row\n\t * @param {Function} [callback] callback\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\thide($row, callback) {\n\t\tif (_.isFunction($row)) {\n\t\t\t// first arg is the callback\n\t\t\tcallback = $row\n\t\t\t$row = undefined\n\t\t}\n\n\t\tif (!$row) {\n\t\t\tconsole.error('Missing argument $row in OC.Notification.hide() call, caller needs to be adjusted to only dismiss its own notification')\n\t\t\treturn\n\t\t}\n\n\t\t// remove the row directly\n\t\t$row.each(function() {\n\t\t\tif ($(this)[0].toastify) {\n\t\t\t\t$(this)[0].toastify.hideToast()\n\t\t\t} else {\n\t\t\t\tconsole.error('cannot hide toast because object is not set')\n\t\t\t}\n\t\t\tif (this === this.updatableNotification) {\n\t\t\t\tthis.updatableNotification = null\n\t\t\t}\n\t\t})\n\t\tif (callback) {\n\t\t\tcallback.call()\n\t\t}\n\t\tif (this.getDefaultNotificationFunction) {\n\t\t\tthis.getDefaultNotificationFunction()\n\t\t}\n\t},\n\n\t/**\n\t * Shows a notification as HTML without being sanitized before.\n\t * If you pass unsanitized user input this may lead to a XSS vulnerability.\n\t * Consider using show() instead of showHTML()\n\t *\n\t * @param {string} html Message to display\n\t * @param {object} [options] options\n\t * @param {string} [options.type] notification type\n\t * @param {number} [options.timeout=0] timeout value, defaults to 0 (permanent)\n\t * @return {jQuery} jQuery element for notification row\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshowHtml(html, options) {\n\t\toptions = options || {}\n\t\toptions.isHTML = true\n\t\toptions.timeout = (!options.timeout) ? TOAST_PERMANENT_TIMEOUT : options.timeout\n\t\tconst toast = showMessage(html, options)\n\t\ttoast.toastElement.toastify = toast\n\t\treturn $(toast.toastElement)\n\t},\n\n\t/**\n\t * Shows a sanitized notification\n\t *\n\t * @param {string} text Message to display\n\t * @param {object} [options] options\n\t * @param {string} [options.type] notification type\n\t * @param {number} [options.timeout=0] timeout value, defaults to 0 (permanent)\n\t * @return {jQuery} jQuery element for notification row\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshow(text, options) {\n\t\tconst escapeHTML = function(text) {\n\t\t\treturn text.toString()\n\t\t\t\t.split('&').join('&')\n\t\t\t\t.split('<').join('<')\n\t\t\t\t.split('>').join('>')\n\t\t\t\t.split('\"').join('"')\n\t\t\t\t.split('\\'').join(''')\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/** @type {string} */\n\ttagName: 'ul',\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 {string} */\n\ttagName: 'li',\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\treturn this\n\t},\n\n\t/**\n\t * Toggle the visibility of the action popover menu\n\t *\n\t * @private\n\t * @returns {undefined}\n\t */\n\t_onToggleActionsMenu: function() {\n\t\tthis._actionMenuShown = !this._actionMenuShown\n\t\tif (this._actionMenuShown) {\n\t\t\tthis.$('.menu').show()\n\t\t} else {\n\t\t\tthis.$('.menu').hide()\n\t\t}\n\t\tthis.trigger('toggle:actionmenu', this.$el)\n\t},\n\n\t/**\n\t * @private\n\t * @argument {jQuery} $src\n\t * @returns {undefined}\n\t */\n\t_onOtherActionMenuOpened: function($src) {\n\t\tif (this.$el.is($src)) {\n\t\t\t// Ignore\n\t\t\treturn\n\t\t}\n\t\tthis._actionMenuShown = false\n\t\tthis.$('.menu').hide()\n\t}\n})\n\n/**\n * @class ContactsMenuView\n * @private\n */\nconst ContactsMenuView = View.extend({\n\n\t/** @type {undefined|function} */\n\t_loadingTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_errorTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_contentTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_contactsTemplate: undefined,\n\n\t/** @type {undefined|ContactCollection} */\n\t_contacts: undefined,\n\n\t/** @type {string} */\n\t_searchTerm: '',\n\n\tevents: {\n\t\t'input #contactsmenu-search': '_onSearch'\n\t},\n\n\ttemplates: {\n\t\tloading: require('./contactsmenu/loading.handlebars'),\n\t\terror: require('./contactsmenu/error.handlebars'),\n\t\tmenu: require('./contactsmenu/menu.handlebars'),\n\t\tlist: require('./contactsmenu/list.handlebars')\n\t},\n\n\t/**\n\t * @returns {undefined}\n\t */\n\t_onSearch: _.debounce(function(e) {\n\t\tvar searchTerm = this.$('#contactsmenu-search').val()\n\t\t// IE11 triggers an 'input' event after the view has been rendered\n\t\t// resulting in an endless loading loop. To prevent this, we remember\n\t\t// the last search term to savely ignore some events\n\t\t// See https://github.com/nextcloud/server/issues/5281\n\t\tif (searchTerm !== this._searchTerm) {\n\t\t\tthis.trigger('search', this.$('#contactsmenu-search').val())\n\t\t\tthis._searchTerm = searchTerm\n\t\t}\n\t}, 700),\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tloadingTemplate: function(data) {\n\t\treturn this.templates.loading(data)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\terrorTemplate: function(data) {\n\t\treturn this.templates.error(\n\t\t\t_.extend({\n\t\t\t\tcouldNotLoadText: t('core', 'Could not load your contacts')\n\t\t\t}, data)\n\t\t)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tcontentTemplate: function(data) {\n\t\treturn this.templates.menu(\n\t\t\t_.extend({\n\t\t\t\tsearchContactsText: t('core', 'Search contacts …')\n\t\t\t}, data)\n\t\t)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tcontactsTemplate: function(data) {\n\t\treturn this.templates.list(\n\t\t\t_.extend({\n\t\t\t\tnoContactsFoundText: t('core', 'No contacts found'),\n\t\t\t\tshowAllContactsText: t('core', 'Show all contacts …'),\n\t\t\t\tcontactsAppMgmtText: t('core', 'Install the Contacts app')\n\t\t\t}, data)\n\t\t)\n\t},\n\n\t/**\n\t * @param {object} options\n\t * @returns {undefined}\n\t */\n\tinitialize: function(options) {\n\t\tthis.options = options\n\t},\n\n\t/**\n\t * @param {string} text\n\t * @returns {undefined}\n\t */\n\tshowLoading: function(text) {\n\t\tthis.render()\n\t\tthis._contacts = undefined\n\t\tthis.$('.content').html(this.loadingTemplate({\n\t\t\tloadingText: text\n\t\t}))\n\t},\n\n\t/**\n\t * @returns {undefined}\n\t */\n\tshowError: function() {\n\t\tthis.render()\n\t\tthis._contacts = undefined\n\t\tthis.$('.content').html(this.errorTemplate())\n\t},\n\n\t/**\n\t * @param {object} viewData\n\t * @param {string} searchTerm\n\t * @returns {undefined}\n\t */\n\tshowContacts: function(viewData, searchTerm) {\n\t\tthis._contacts = viewData.contacts\n\t\tthis.render({\n\t\t\tcontacts: viewData.contacts\n\t\t})\n\n\t\tvar list = new ContactsListView({\n\t\t\tcollection: viewData.contacts\n\t\t})\n\t\tlist.render()\n\t\tthis.$('.content').html(this.contactsTemplate({\n\t\t\tcontacts: viewData.contacts,\n\t\t\tsearchTerm: searchTerm,\n\t\t\tcontactsAppEnabled: viewData.contactsAppEnabled,\n\t\t\tcontactsAppURL: OC.generateUrl('/apps/contacts'),\n\t\t\tcanInstallApp: OC.isUserAdmin(),\n\t\t\tcontactsAppMgmtURL: OC.generateUrl('/settings/apps/social/contacts')\n\t\t}))\n\t\tthis.$('#contactsmenu-contacts').html(list.$el)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {self}\n\t */\n\trender: function(data) {\n\t\tvar searchVal = this.$('#contactsmenu-search').val()\n\t\tthis.$el.html(this.contentTemplate(data))\n\n\t\t// Focus search\n\t\tthis.$('#contactsmenu-search').val(searchVal)\n\t\tthis.$('#contactsmenu-search').focus()\n\t\treturn this\n\t}\n\n})\n\n/**\n * @param {Object} options\n * @param {string} options.el\n * @class ContactsMenu\n * @memberOf OC\n */\nconst ContactsMenu = function(options) {\n\tthis.initialize(options)\n}\n\nContactsMenu.prototype = {\n\t/** @type {string} */\n\t$el: undefined,\n\n\t/** @type {ContactsMenuView} */\n\t_view: undefined,\n\n\t/** @type {Promise} */\n\t_contactsPromise: undefined,\n\n\t/**\n\t * @param {Object} options\n\t * @param {string} options.el - the selector of the element to render the menu in\n\t * @returns {undefined}\n\t */\n\tinitialize: function(options) {\n\t\tthis.$el = $(options.el)\n\n\t\tthis._view = new ContactsMenuView({\n\t\t\tel: this.$el,\n\t\t})\n\n\t\tthis._view.on('search', function(searchTerm) {\n\t\t\tthis.loadContacts(searchTerm)\n\t\t}, this)\n\t},\n\n\t/**\n\t * @private\n\t * @param {string|undefined} searchTerm\n\t * @returns {Promise}\n\t */\n\t_getContacts: function(searchTerm) {\n\t\tvar url = OC.generateUrl('/contactsmenu/contacts')\n\t\treturn Promise.resolve($.ajax(url, {\n\t\t\tmethod: 'POST',\n\t\t\tdata: {\n\t\t\t\tfilter: searchTerm\n\t\t\t}\n\t\t}))\n\t},\n\n\t/**\n\t * @param {string|undefined} searchTerm\n\t * @returns {undefined}\n\t */\n\tloadContacts: function(searchTerm) {\n\t\tvar self = this\n\n\t\tif (!self._contactsPromise) {\n\t\t\tself._contactsPromise = self._getContacts(searchTerm)\n\t\t}\n\n\t\tif (_.isUndefined(searchTerm) || searchTerm === '') {\n\t\t\tself._view.showLoading(t('core', 'Loading your contacts …'))\n\t\t} else {\n\t\t\tself._view.showLoading(t('core', 'Looking for {term} …', {\n\t\t\t\tterm: searchTerm\n\t\t\t}))\n\t\t}\n\t\treturn self._contactsPromise.then(function(data) {\n\t\t\t// Convert contact entries to Backbone collection\n\t\t\tdata.contacts = new ContactCollection(data.contacts)\n\n\t\t\tself._view.showContacts(data, searchTerm)\n\t\t}, function(e) {\n\t\t\tself._view.showError()\n\t\t\tconsole.error('There was an error loading your contacts', e)\n\t\t}).then(function() {\n\t\t\t// Delete promise, so that contacts are fetched again when the\n\t\t\t// menu is opened the next time.\n\t\t\tdelete self._contactsPromise\n\t\t}).catch(console.error.bind(this))\n\t}\n}\n\nexport default ContactsMenu\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Joas Schilling <coding@schilljs.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst rawUid = document\n\t.getElementsByTagName('head')[0]\n\t.getAttribute('data-user')\nconst displayName = document\n\t.getElementsByTagName('head')[0]\n\t.getAttribute('data-user-displayname')\n\nexport const currentUser = rawUid !== undefined ? rawUid : false\n\nexport const getCurrentUser = () => {\n\treturn {\n\t\tuid: currentUser,\n\t\tdisplayName,\n\t}\n}\n","/**\n * @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class Search {\n\n\t/**\n\t * @deprecated 20.0.0, will be removed in Nextcloud 22\n\t */\n\tconstructor() {\n\t\tconsole.warn('OCA.Search is deprecated. Please use the unified search API instead')\n\t}\n\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Search from './search'\n\n/**\n * Namespace for apps\n *\n * @namespace OCA\n */\nexport default {\n\t/**\n\t * @deprecated 20.0.0, will be removed in Nextcloud 22\n\t */\n\tSearch,\n}\n","/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/**\n * Return whether the DOM event is an accessible mouse or keyboard element activation\n *\n * @param {Event} event DOM event\n *\n * @return {boolean}\n */\nexport const isA11yActivation = (event) => {\n\tif (event.type === 'click') {\n\t\treturn true\n\t}\n\tif (event.type === 'keydown' && event.key === 'Enter') {\n\t\treturn true\n\t}\n\treturn false\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author Bartek Przybylski <bart.p.pl@gmail.com>\n * @author Christopher Schäpers <kondou@ts.unde.re>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author Daniel Kesselberg <mail@danielkesselberg.de>\n * @author Florian Schunk <florian.schunk@rwth-aachen.de>\n * @author Gary Kim <gary@garykim.dev>\n * @author Hendrik Leppelsack <hendrik@leppelsack.de>\n * @author Jan-Christoph Borchardt <hey@jancborchardt.net>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Jörn Friedrich Dreyer <jfd@butonic.de>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Loïc Hermann <loic.hermann@sciam.fr>\n * @author Morris Jobke <hey@morrisjobke.de>\n * @author Olivier Paroz <github@oparoz.com>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Sujith Haridasan <Sujith_Haridasan@mentor.com>\n * @author Thomas Citharel <nextcloud@tcit.fr>\n * @author Thomas Müller <thomas.mueller@tmit.eu>\n * @author Thomas Tanghus <thomas@tanghus.net>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport _ from 'underscore'\nimport $ from 'jquery'\n\nimport OC from './index'\nimport OCA from '../OCA/index'\nimport { isA11yActivation } from '../Util/a11y'\n\n/**\n * this class to ease the usage of jquery dialogs\n */\nconst Dialogs = {\n\t// dialog button types\n\tYES_NO_BUTTONS: 70,\n\tOK_BUTTONS: 71,\n\n\tFILEPICKER_TYPE_CHOOSE: 1,\n\tFILEPICKER_TYPE_MOVE: 2,\n\tFILEPICKER_TYPE_COPY: 3,\n\tFILEPICKER_TYPE_COPY_MOVE: 4,\n\tFILEPICKER_TYPE_CUSTOM: 5,\n\n\t// used to name each dialog\n\tdialogsCounter: 0,\n\n\t/**\n\t * displays alert dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK\n\t * @param {boolean} [modal] make the dialog modal\n\t */\n\talert: function(text, title, callback, modal) {\n\t\tthis.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'alert',\n\t\t\tDialogs.OK_BUTTON,\n\t\t\tcallback,\n\t\t\tmodal\n\t\t)\n\t},\n\t/**\n\t * displays info dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK\n\t * @param {boolean} [modal] make the dialog modal\n\t */\n\tinfo: function(text, title, callback, modal) {\n\t\tthis.message(text, title, 'info', Dialogs.OK_BUTTON, callback, modal)\n\t},\n\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirm: function(text, title, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'notice',\n\t\t\tDialogs.YES_NO_BUTTONS,\n\t\t\tcallback,\n\t\t\tmodal\n\t\t)\n\t},\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {(number|{type: number, confirm: string, cancel: string, confirmClasses: string})} buttons text content of buttons\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirmDestructive: function(text, title, buttons, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'none',\n\t\t\tbuttons,\n\t\t\tcallback,\n\t\t\tmodal === undefined ? true : modal\n\t\t)\n\t},\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirmHtml: function(text, title, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'notice',\n\t\t\tDialogs.YES_NO_BUTTONS,\n\t\t\tcallback,\n\t\t\tmodal,\n\t\t\ttrue\n\t\t)\n\t},\n\t/**\n\t * displays prompt dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @param {string} name name of the input field\n\t * @param {boolean} password whether the input should be a password input\n\t * @returns {Promise}\n\t */\n\tprompt: function(text, title, callback, modal, name, password) {\n\t\treturn $.when(this._getMessageTemplate()).then(function($tmpl) {\n\t\t\tvar dialogName = 'oc-dialog-' + Dialogs.dialogsCounter + '-content'\n\t\t\tvar dialogId = '#' + dialogName\n\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\tmessage: text,\n\t\t\t\ttype: 'notice'\n\t\t\t})\n\t\t\tvar input = $('<input/>')\n\t\t\tinput.attr('type', password ? 'password' : 'text').attr('id', dialogName + '-input').attr('placeholder', name)\n\t\t\tvar label = $('<label/>').attr('for', dialogName + '-input').text(name + ': ')\n\t\t\t$dlg.append(label)\n\t\t\t$dlg.append(input)\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false\n\t\t\t}\n\t\t\t$('body').append($dlg)\n\n\t\t\t// wrap callback in _.once():\n\t\t\t// only call callback once and not twice (button handler and close\n\t\t\t// event) but call it for the close event, if ESC or the x is hit\n\t\t\tif (callback !== undefined) {\n\t\t\t\tcallback = _.once(callback)\n\t\t\t}\n\n\t\t\tvar buttonlist = [{\n\t\t\t\ttext: t('core', 'No'),\n\t\t\t\tclick: function() {\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(false, input.val())\n\t\t\t\t\t}\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\ttext: t('core', 'Yes'),\n\t\t\t\tclick: function() {\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(true, input.val())\n\t\t\t\t\t}\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t},\n\t\t\t\tdefaultButton: true\n\t\t\t}]\n\n\t\t\t$(dialogId).ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist,\n\t\t\t\tclose: function() {\n\t\t\t\t\t// callback is already fired if Yes/No is clicked directly\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(false, input.val())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\tinput.focus()\n\t\t\tDialogs.dialogsCounter++\n\t\t})\n\t},\n\t/**\n\t * show a file picker to pick a file from\n\t *\n\t * In order to pick several types of mime types they need to be passed as an\n\t * array of strings.\n\t *\n\t * When no mime type filter is given only files can be selected. In order to\n\t * be able to select both files and folders \"['*', 'httpd/unix-directory']\"\n\t * should be used instead.\n\t *\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses Choose\n\t * @param {boolean} [multiselect] whether it should be possible to select multiple files\n\t * @param {string[]} [mimetypeFilter] mimetype to filter by - directories will always be included\n\t * @param {boolean} [modal] make the dialog modal\n\t * @param {string} [type] Type of file picker : Choose, copy, move, copy and move\n\t * @param {string} [path] path to the folder that the the file can be picket from\n\t * @param {Object} [options] additonal options that need to be set\n\t * @param {Function} [options.filter] filter function for advanced filtering\n\t */\n\tfilepicker: function(title, callback, multiselect, mimetypeFilter, modal, type, path, options) {\n\t\tvar self = this\n\n\t\tthis.filepicker.sortField = 'name'\n\t\tthis.filepicker.sortOrder = 'asc'\n\t\t// avoid opening the picker twice\n\t\tif (this.filepicker.loading) {\n\t\t\treturn\n\t\t}\n\n\t\tif (type === undefined) {\n\t\t\ttype = this.FILEPICKER_TYPE_CHOOSE\n\t\t}\n\n\t\tvar emptyText = t('core', 'No files in here')\n\t\tvar newText = t('files', 'New folder')\n\t\tif (type === this.FILEPICKER_TYPE_COPY || type === this.FILEPICKER_TYPE_MOVE || type === this.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\temptyText = t('core', 'No more subfolders in here')\n\t\t}\n\n\t\tthis.filepicker.loading = true\n\t\tthis.filepicker.filesClient = (OCA.Sharing && OCA.Sharing.PublicApp && OCA.Sharing.PublicApp.fileList) ? OCA.Sharing.PublicApp.fileList.filesClient : OC.Files.getClient()\n\n\t\tthis.filelist = null\n\t\tpath = path || ''\n\t\toptions = Object.assign({\n\t\t\tallowDirectoryChooser: false\n\t\t}, options)\n\n\t\t$.when(this._getFilePickerTemplate()).then(function($tmpl) {\n\t\t\tself.filepicker.loading = false\n\t\t\tvar dialogName = 'oc-dialog-filepicker-content'\n\t\t\tif (self.$filePicker) {\n\t\t\t\tself.$filePicker.ocdialog('close')\n\t\t\t}\n\n\t\t\tif (mimetypeFilter === undefined || mimetypeFilter === null) {\n\t\t\t\tmimetypeFilter = []\n\t\t\t}\n\t\t\tif (typeof (mimetypeFilter) === 'string') {\n\t\t\t\tmimetypeFilter = [mimetypeFilter]\n\t\t\t}\n\n\t\t\tself.$filePicker = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\temptytext: emptyText,\n\t\t\t\tnewtext: newText,\n\t\t\t\tnameCol: t('core', 'Name'),\n\t\t\t\tsizeCol: t('core', 'Size'),\n\t\t\t\tmodifiedCol: t('core', 'Modified')\n\t\t\t}).data('path', path).data('multiselect', multiselect).data('mimetype', mimetypeFilter).data('allowDirectoryChooser', options.allowDirectoryChooser)\n\t\t\tif (typeof(options.filter) === 'function') {\n\t\t\t\tself.$filePicker.data('filter', options.filter)\n\t\t\t}\n\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false\n\t\t\t}\n\t\t\tif (multiselect === undefined) {\n\t\t\t\tmultiselect = false\n\t\t\t}\n\n\t\t\t$(options?.target ?? 'body').prepend(self.$filePicker)\n\n\t\t\tself.$showGridView = $('button#picker-showgridview')\n\t\t\tself.$showGridView.on('click keydown', function(event) {\n\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\tself._onGridviewChange()\n\t\t\t\t}\n\t\t\t})\n\t\t\tself._getGridSettings()\n\n\t\t\tvar newButton = self.$filePicker.find('.actions.creatable .button-add')\n\t\t\tif (type === self.FILEPICKER_TYPE_CHOOSE && !options.allowDirectoryChooser) {\n\t\t\t\tself.$filePicker.find('.actions.creatable').hide()\n\t\t\t}\n\t\t\tnewButton.on('focus', function() {\n\t\t\t\tself.$filePicker.ocdialog('setEnterCallback', function(event) {\n\t\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tnewButton.click()\n\t\t\t\t})\n\t\t\t})\n\t\t\tnewButton.on('blur', function() {\n\t\t\t\tself.$filePicker.ocdialog('unsetEnterCallback')\n\t\t\t})\n\n\t\t\tOC.registerMenu(newButton, self.$filePicker.find('.menu'), function() {\n\t\t\t\t$input.tooltip('hide')\n\t\t\t\t$input.focus()\n\t\t\t\tself.$filePicker.ocdialog('setEnterCallback', function(event) {\n\t\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tself.$filePicker.submit()\n\t\t\t\t})\n\t\t\t\tvar newName = $input.val()\n\t\t\t\tvar lastPos = newName.lastIndexOf('.')\n\t\t\t\tif (lastPos === -1) {\n\t\t\t\t\tlastPos = newName.length\n\t\t\t\t}\n\t\t\t\t$input.selectRange(0, lastPos)\n\t\t\t})\n\t\t\tvar $form = self.$filePicker.find('.filenameform')\n\t\t\tvar $input = $form.find('input[type=\\'text\\']')\n\t\t\tvar $submit = $form.find('input[type=\\'submit\\']')\n\t\t\t$input.on('keydown', function(event) {\n\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t$form.submit()\n\t\t\t\t}\n\t\t\t})\n\t\t\t$submit.on('click', function(event) {\n\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\tevent.preventDefault()\n\t\t\t\t$form.submit()\n\t\t\t})\n\n\t\t\t/**\n\t\t\t * Checks whether the given file name is valid.\n\t\t\t *\n\t\t\t * @param name file name to check\n\t\t\t * @return true if the file name is valid.\n\t\t\t * @throws a string exception with an error message if\n\t\t\t * the file name is not valid\n\t\t\t *\n\t\t\t * NOTE: This function is duplicated in the files app:\n\t\t\t * https://github.com/nextcloud/server/blob/b9bc2417e7a8dc81feb0abe20359bedaf864f790/apps/files/js/files.js#L127-L148\n\t\t\t */\n\t\t\tvar isFileNameValid = function (name) {\n\t\t\t\tvar trimmedName = name.trim();\n\t\t\t\tif (trimmedName === '.' || trimmedName === '..')\n\t\t\t\t{\n\t\t\t\t\tthrow t('files', '\"{name}\" is an invalid file name.', {name: name})\n\t\t\t\t} else if (trimmedName.length === 0) {\n\t\t\t\t\tthrow t('files', 'File name cannot be empty.')\n\t\t\t\t} else if (trimmedName.indexOf('/') !== -1) {\n\t\t\t\t\tthrow t('files', '\"/\" is not allowed inside a file name.')\n\t\t\t\t} else if (!!(trimmedName.match(OC.config.blacklist_files_regex))) {\n\t\t\t\t\tthrow t('files', '\"{name}\" is not an allowed filetype', {name: name})\n\t\t\t\t}\n\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\tvar checkInput = function() {\n\t\t\t\tvar filename = $input.val()\n\t\t\t\ttry {\n\t\t\t\t\tif (!isFileNameValid(filename)) {\n\t\t\t\t\t\t// isFileNameValid(filename) throws an exception itself\n\t\t\t\t\t} else if (self.filelist.find(function(file) {\n\t\t\t\t\t\treturn file.name === this\n\t\t\t\t\t}, filename)) {\n\t\t\t\t\t\tthrow t('files', '{newName} already exists', { newName: filename }, undefined, {\n\t\t\t\t\t\t\tescape: false\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn true\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\t$input.attr('title', error)\n\t\t\t\t\t$input.tooltip({\n\t\t\t\t\t\tplacement: 'right',\n\t\t\t\t\t\ttrigger: 'manual',\n\t\t\t\t\t\t'container': '.newFolderMenu'\n\t\t\t\t\t})\n\t\t\t\t\t$input.tooltip('_fixTitle')\n\t\t\t\t\t$input.tooltip('show')\n\t\t\t\t\t$input.addClass('error')\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\t$form.on('submit', function(event) {\n\t\t\t\tevent.stopPropagation()\n\t\t\t\tevent.preventDefault()\n\n\t\t\t\tif (checkInput()) {\n\t\t\t\t\tvar newname = $input.val()\n\t\t\t\t\tself.filepicker.filesClient.createDirectory(self.$filePicker.data('path') + \"/\" + newname).always(function (status) {\n\t\t\t\t\t\tself._fillFilePicker(self.$filePicker.data('path') + \"/\" + newname, type)\n\t\t\t\t\t})\n\t\t\t\t\tOC.hideMenus()\n\t\t\t\t\tself.$filePicker.ocdialog('unsetEnterCallback')\n\t\t\t\t\tself.$filePicker.click()\n\t\t\t\t\t$input.val(newText)\n\t\t\t\t}\n\t\t\t})\n\t\t\t$input.on('input', function(event) {\n\t\t\t\t$input.tooltip('hide')\n\t\t\t})\n\n\t\t\tself.$filePicker.ready(function() {\n\t\t\t\tself.$fileListHeader = self.$filePicker.find('.filelist thead tr')\n\t\t\t\tself.$filelist = self.$filePicker.find('.filelist tbody')\n\t\t\t\tself.$filelistContainer = self.$filePicker.find('.filelist-container')\n\t\t\t\tself.$dirTree = self.$filePicker.find('.dirtree')\n\t\t\t\tself.$dirTree.on('click keydown', 'div:not(:last-child)', self, function(event) {\n\t\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\t\tself._handleTreeListSelect(event, type)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tself.$filelist.on('click keydown', 'tr', function(event) {\n\t\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\t\tself._handlePickerClick(event, $(this), type)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tself.$fileListHeader.on('click keydown', 'a', function(event) {\n\t\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\t\tvar dir = self.$filePicker.data('path')\n\t\t\t\t\t\tself.filepicker.sortField = $(event.currentTarget).data('sort')\n\t\t\t\t\t\tself.filepicker.sortOrder = self.filepicker.sortOrder === 'asc' ? 'desc' : 'asc'\n\t\t\t\t\t\tself._fillFilePicker(dir, type)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tself._fillFilePicker(path, type)\n\t\t\t})\n\n\t\t\t// build buttons\n\t\t\tvar functionToCall = function(returnType) {\n\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\tvar datapath\n\t\t\t\t\tif (multiselect === true) {\n\t\t\t\t\t\tdatapath = []\n\t\t\t\t\t\tself.$filelist.find('tr.filepicker_element_selected').each(function(index, element) {\n\t\t\t\t\t\t\tdatapath.push(self.$filePicker.data('path') + '/' + $(element).data('entryname'))\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdatapath = self.$filePicker.data('path')\n\t\t\t\t\t\tvar selectedName = self.$filelist.find('tr.filepicker_element_selected').data('entryname')\n\t\t\t\t\t\tif (selectedName) {\n\t\t\t\t\t\t\tdatapath += '/' + selectedName\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcallback(datapath, returnType)\n\t\t\t\t\tself.$filePicker.ocdialog('close')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar chooseCallback = function() {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_CHOOSE)\n\t\t\t}\n\n\t\t\tvar copyCallback = function() {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_COPY)\n\t\t\t}\n\n\t\t\tvar moveCallback = function() {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_MOVE)\n\t\t\t}\n\n\t\t\tvar buttonlist = []\n\t\t\tif (type === Dialogs.FILEPICKER_TYPE_CHOOSE) {\n\t\t\t\tbuttonlist.push({\n\t\t\t\t\ttext: t('core', 'Choose'),\n\t\t\t\t\tclick: chooseCallback,\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t})\n\t\t\t} else if (type === Dialogs.FILEPICKER_TYPE_CUSTOM) {\n\t\t\t\toptions.buttons.forEach(function(button) {\n\t\t\t\t\tbuttonlist.push({\n\t\t\t\t\t\ttext: button.text,\n\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\tfunctionToCall(button.type)\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdefaultButton: button.defaultButton\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tif (type === Dialogs.FILEPICKER_TYPE_COPY || type === Dialogs.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\t\t\tbuttonlist.push({\n\t\t\t\t\t\ttext: t('core', 'Copy'),\n\t\t\t\t\t\tclick: copyCallback,\n\t\t\t\t\t\tdefaultButton: false\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (type === Dialogs.FILEPICKER_TYPE_MOVE || type === Dialogs.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\t\t\tbuttonlist.push({\n\t\t\t\t\t\ttext: t('core', 'Move'),\n\t\t\t\t\t\tclick: moveCallback,\n\t\t\t\t\t\tdefaultButton: true\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tself.$filePicker.ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\t// max-width of 600\n\t\t\t\twidth: 600,\n\t\t\t\theight: 500,\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist,\n\t\t\t\tstyle: {\n\t\t\t\t\tbuttons: 'aside'\n\t\t\t\t},\n\t\t\t\tclose: function() {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t$(this).ocdialog('destroy').remove()\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t}\n\t\t\t\t\tself.$filePicker = null\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// We can access primary class only from oc-dialog.\n\t\t\t// Hence this is one of the approach to get the choose button.\n\t\t\tvar getOcDialog = self.$filePicker.closest('.oc-dialog')\n\t\t\tvar buttonEnableDisable = getOcDialog.find('.primary')\n\t\t\tif (self.$filePicker.data('mimetype').indexOf('httpd/unix-directory') !== -1 || self.$filePicker.data('allowDirectoryChooser')) {\n\t\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t\t} else {\n\t\t\t\tbuttonEnableDisable.prop('disabled', true)\n\t\t\t}\n\t\t})\n\t\t\t.fail(function(status, error) {\n\t\t\t\t// If the method is called while navigating away\n\t\t\t\t// from the page, it is probably not needed ;)\n\t\t\t\tself.filepicker.loading = false\n\t\t\t\tif (status !== 0) {\n\t\t\t\t\talert(t('core', 'Error loading file picker template: {error}', { error: error }))\n\t\t\t\t}\n\t\t\t})\n\t},\n\t/**\n\t * Displays raw dialog\n\t * You better use a wrapper instead ...\n\t */\n\tmessage: function(content, title, dialogType, buttons, callback, modal, allowHtml) {\n\t\treturn $.when(this._getMessageTemplate()).then(function($tmpl) {\n\t\t\tvar dialogName = 'oc-dialog-' + Dialogs.dialogsCounter + '-content'\n\t\t\tvar dialogId = '#' + dialogName\n\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\tmessage: content,\n\t\t\t\ttype: dialogType\n\t\t\t}, allowHtml ? { escapeFunction: '' } : {})\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false\n\t\t\t}\n\t\t\t$('body').append($dlg)\n\t\t\tvar buttonlist = []\n\t\t\tswitch (buttons) {\n\t\t\tcase Dialogs.YES_NO_BUTTONS:\n\t\t\t\tbuttonlist = [{\n\t\t\t\t\ttext: t('core', 'No'),\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\tcallback(false)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttext: t('core', 'Yes'),\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\tcallback(true)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t},\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t}]\n\t\t\t\tbreak\n\t\t\tcase Dialogs.OK_BUTTON:\n\t\t\t\tvar functionToCall = function() {\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\tcallback()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbuttonlist[0] = {\n\t\t\t\t\ttext: t('core', 'OK'),\n\t\t\t\t\tclick: functionToCall,\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tif (typeof(buttons) === 'object') {\n\t\t\t\t\tswitch (buttons.type) {\n\t\t\t\t\t\tcase Dialogs.YES_NO_BUTTONS:\n\t\t\t\t\t\t\tbuttonlist = [{\n\t\t\t\t\t\t\t\ttext: buttons.cancel || t('core', 'No'),\n\t\t\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\t\t\t\tcallback(false)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttext: buttons.confirm || t('core', 'Yes'),\n\t\t\t\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\t\t\t\t\tcallback(true)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdefaultButton: true,\n\t\t\t\t\t\t\t\t\tclasses: buttons.confirmClasses\n\t\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t$(dialogId).ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\tcloseCallback: () => { callback && callback(false) },\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist\n\t\t\t})\n\t\t\tDialogs.dialogsCounter++\n\t\t})\n\t\t\t.fail(function(status, error) {\n\t\t\t\t// If the method is called while navigating away from\n\t\t\t\t// the page, we still want to deliver the message.\n\t\t\t\tif (status === 0) {\n\t\t\t\t\talert(title + ': ' + content)\n\t\t\t\t} else {\n\t\t\t\t\talert(t('core', 'Error loading message template: {error}', { error: error }))\n\t\t\t\t}\n\t\t\t})\n\t},\n\t_fileexistsshown: false,\n\t/**\n\t * Displays file exists dialog\n\t * @param {object} data upload object\n\t * @param {object} original file with name, size and mtime\n\t * @param {object} replacement file with name, size and mtime\n\t * @param {object} controller with onCancel, onSkip, onReplace and onRename methods\n\t * @returns {Promise} jquery promise that resolves after the dialog template was loaded\n\t */\n\tfileexists: function(data, original, replacement, controller) {\n\t\tvar self = this\n\t\tvar dialogDeferred = new $.Deferred()\n\n\t\tvar getCroppedPreview = function(file) {\n\t\t\tvar deferred = new $.Deferred()\n\t\t\t// Only process image files.\n\t\t\tvar type = file.type && file.type.split('/').shift()\n\t\t\tif (window.FileReader && type === 'image') {\n\t\t\t\tvar reader = new FileReader()\n\t\t\t\treader.onload = function(e) {\n\t\t\t\t\tvar blob = new Blob([e.target.result])\n\t\t\t\t\twindow.URL = window.URL || window.webkitURL\n\t\t\t\t\tvar originalUrl = window.URL.createObjectURL(blob)\n\t\t\t\t\tvar image = new Image()\n\t\t\t\t\timage.src = originalUrl\n\t\t\t\t\timage.onload = function() {\n\t\t\t\t\t\tvar url = crop(image)\n\t\t\t\t\t\tdeferred.resolve(url)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treader.readAsArrayBuffer(file)\n\t\t\t} else {\n\t\t\t\tdeferred.reject()\n\t\t\t}\n\t\t\treturn deferred\n\t\t}\n\n\t\tvar crop = function(img) {\n\t\t\tvar canvas = document.createElement('canvas')\n\t\t\tvar targetSize = 96\n\t\t\tvar width = img.width\n\t\t\tvar height = img.height\n\t\t\tvar x; var y; var size\n\n\t\t\t// Calculate the width and height, constraining the proportions\n\t\t\tif (width > height) {\n\t\t\t\ty = 0\n\t\t\t\tx = (width - height) / 2\n\t\t\t} else {\n\t\t\t\ty = (height - width) / 2\n\t\t\t\tx = 0\n\t\t\t}\n\t\t\tsize = Math.min(width, height)\n\n\t\t\t// Set canvas size to the cropped area\n\t\t\tcanvas.width = size\n\t\t\tcanvas.height = size\n\t\t\tvar ctx = canvas.getContext('2d')\n\t\t\tctx.drawImage(img, x, y, size, size, 0, 0, size, size)\n\n\t\t\t// Resize the canvas to match the destination (right size uses 96px)\n\t\t\tresampleHermite(canvas, size, size, targetSize, targetSize)\n\n\t\t\treturn canvas.toDataURL('image/png', 0.7)\n\t\t}\n\n\t\t/**\n\t\t * Fast image resize/resample using Hermite filter with JavaScript.\n\t\t *\n\t\t * @author: ViliusL\n\t\t *\n\t\t * @param {*} canvas\n\t\t * @param {number} W\n\t\t * @param {number} H\n\t\t * @param {number} W2\n\t\t * @param {number} H2\n\t\t */\n\t\tvar resampleHermite = function(canvas, W, H, W2, H2) {\n\t\t\tW2 = Math.round(W2)\n\t\t\tH2 = Math.round(H2)\n\t\t\tvar img = canvas.getContext('2d').getImageData(0, 0, W, H)\n\t\t\tvar img2 = canvas.getContext('2d').getImageData(0, 0, W2, H2)\n\t\t\tvar data = img.data\n\t\t\tvar data2 = img2.data\n\t\t\tvar ratio_w = W / W2\n\t\t\tvar ratio_h = H / H2\n\t\t\tvar ratio_w_half = Math.ceil(ratio_w / 2)\n\t\t\tvar ratio_h_half = Math.ceil(ratio_h / 2)\n\n\t\t\tfor (var j = 0; j < H2; j++) {\n\t\t\t\tfor (var i = 0; i < W2; i++) {\n\t\t\t\t\tvar x2 = (i + j * W2) * 4\n\t\t\t\t\tvar weight = 0\n\t\t\t\t\tvar weights = 0\n\t\t\t\t\tvar weights_alpha = 0\n\t\t\t\t\tvar gx_r = 0\n\t\t\t\t\tvar gx_g = 0\n\t\t\t\t\tvar gx_b = 0\n\t\t\t\t\tvar gx_a = 0\n\t\t\t\t\tvar center_y = (j + 0.5) * ratio_h\n\t\t\t\t\tfor (var yy = Math.floor(j * ratio_h); yy < (j + 1) * ratio_h; yy++) {\n\t\t\t\t\t\tvar dy = Math.abs(center_y - (yy + 0.5)) / ratio_h_half\n\t\t\t\t\t\tvar center_x = (i + 0.5) * ratio_w\n\t\t\t\t\t\tvar w0 = dy * dy // pre-calc part of w\n\t\t\t\t\t\tfor (var xx = Math.floor(i * ratio_w); xx < (i + 1) * ratio_w; xx++) {\n\t\t\t\t\t\t\tvar dx = Math.abs(center_x - (xx + 0.5)) / ratio_w_half\n\t\t\t\t\t\t\tvar w = Math.sqrt(w0 + dx * dx)\n\t\t\t\t\t\t\tif (w >= -1 && w <= 1) {\n\t\t\t\t\t\t\t\t// hermite filter\n\t\t\t\t\t\t\t\tweight = 2 * w * w * w - 3 * w * w + 1\n\t\t\t\t\t\t\t\tif (weight > 0) {\n\t\t\t\t\t\t\t\t\tdx = 4 * (xx + yy * W)\n\t\t\t\t\t\t\t\t\t// alpha\n\t\t\t\t\t\t\t\t\tgx_a += weight * data[dx + 3]\n\t\t\t\t\t\t\t\t\tweights_alpha += weight\n\t\t\t\t\t\t\t\t\t// colors\n\t\t\t\t\t\t\t\t\tif (data[dx + 3] < 255) { weight = weight * data[dx + 3] / 250 }\n\t\t\t\t\t\t\t\t\tgx_r += weight * data[dx]\n\t\t\t\t\t\t\t\t\tgx_g += weight * data[dx + 1]\n\t\t\t\t\t\t\t\t\tgx_b += weight * data[dx + 2]\n\t\t\t\t\t\t\t\t\tweights += weight\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdata2[x2] = gx_r / weights\n\t\t\t\t\tdata2[x2 + 1] = gx_g / weights\n\t\t\t\t\tdata2[x2 + 2] = gx_b / weights\n\t\t\t\t\tdata2[x2 + 3] = gx_a / weights_alpha\n\t\t\t\t}\n\t\t\t}\n\t\t\tcanvas.getContext('2d').clearRect(0, 0, Math.max(W, W2), Math.max(H, H2))\n\t\t\tcanvas.width = W2\n\t\t\tcanvas.height = H2\n\t\t\tcanvas.getContext('2d').putImageData(img2, 0, 0)\n\t\t}\n\n\t\tvar addConflict = function($conflicts, original, replacement) {\n\n\t\t\tvar $conflict = $conflicts.find('.template').clone().removeClass('template').addClass('conflict')\n\t\t\tvar $originalDiv = $conflict.find('.original')\n\t\t\tvar $replacementDiv = $conflict.find('.replacement')\n\n\t\t\t$conflict.data('data', data)\n\n\t\t\t$conflict.find('.filename').text(original.name)\n\t\t\t$originalDiv.find('.size').text(OC.Util.humanFileSize(original.size))\n\t\t\t$originalDiv.find('.mtime').text(OC.Util.formatDate(original.mtime))\n\t\t\t// ie sucks\n\t\t\tif (replacement.size && replacement.lastModified) {\n\t\t\t\t$replacementDiv.find('.size').text(OC.Util.humanFileSize(replacement.size))\n\t\t\t\t$replacementDiv.find('.mtime').text(OC.Util.formatDate(replacement.lastModified))\n\t\t\t}\n\t\t\tvar path = original.directory + '/' + original.name\n\t\t\tvar urlSpec = {\n\t\t\t\tfile: path,\n\t\t\t\tx: 96,\n\t\t\t\ty: 96,\n\t\t\t\tc: original.etag,\n\t\t\t\tforceIcon: 0\n\t\t\t}\n\t\t\tvar previewpath = Files.generatePreviewUrl(urlSpec)\n\t\t\t// Escaping single quotes\n\t\t\tpreviewpath = previewpath.replace(/'/g, '%27')\n\t\t\t$originalDiv.find('.icon').css({ 'background-image': \"url('\" + previewpath + \"')\" })\n\t\t\tgetCroppedPreview(replacement).then(\n\t\t\t\tfunction(path) {\n\t\t\t\t\t$replacementDiv.find('.icon').css('background-image', 'url(' + path + ')')\n\t\t\t\t}, function() {\n\t\t\t\t\tpath = OC.MimeType.getIconUrl(replacement.type)\n\t\t\t\t\t$replacementDiv.find('.icon').css('background-image', 'url(' + path + ')')\n\t\t\t\t}\n\t\t\t)\n\t\t\t// connect checkboxes with labels\n\t\t\tvar checkboxId = $conflicts.find('.conflict').length\n\t\t\t$originalDiv.find('input:checkbox').attr('id', 'checkbox_original_' + checkboxId)\n\t\t\t$replacementDiv.find('input:checkbox').attr('id', 'checkbox_replacement_' + checkboxId)\n\n\t\t\t$conflicts.append($conflict)\n\n\t\t\t// set more recent mtime bold\n\t\t\t// ie sucks\n\t\t\tif (replacement.lastModified > original.mtime) {\n\t\t\t\t$replacementDiv.find('.mtime').css('font-weight', 'bold')\n\t\t\t} else if (replacement.lastModified < original.mtime) {\n\t\t\t\t$originalDiv.find('.mtime').css('font-weight', 'bold')\n\t\t\t} else {\n\t\t\t\t// TODO add to same mtime collection?\n\t\t\t}\n\n\t\t\t// set bigger size bold\n\t\t\tif (replacement.size && replacement.size > original.size) {\n\t\t\t\t$replacementDiv.find('.size').css('font-weight', 'bold')\n\t\t\t} else if (replacement.size && replacement.size < original.size) {\n\t\t\t\t$originalDiv.find('.size').css('font-weight', 'bold')\n\t\t\t} else {\n\t\t\t\t// TODO add to same size collection?\n\t\t\t}\n\n\t\t\t// TODO show skip action for files with same size and mtime in bottom row\n\n\t\t\t// always keep readonly files\n\n\t\t\tif (original.status === 'readonly') {\n\t\t\t\t$originalDiv\n\t\t\t\t\t.addClass('readonly')\n\t\t\t\t\t.find('input[type=\"checkbox\"]')\n\t\t\t\t\t.prop('checked', true)\n\t\t\t\t\t.prop('disabled', true)\n\t\t\t\t$originalDiv.find('.message')\n\t\t\t\t\t.text(t('core', 'read-only'))\n\t\t\t}\n\t\t}\n\t\t// var selection = controller.getSelection(data.originalFiles);\n\t\t// if (selection.defaultAction) {\n\t\t//\tcontroller[selection.defaultAction](data);\n\t\t// } else {\n\t\tvar dialogName = 'oc-dialog-fileexists-content'\n\t\tvar dialogId = '#' + dialogName\n\t\tif (this._fileexistsshown) {\n\t\t\t// add conflict\n\n\t\t\tvar $conflicts = $(dialogId + ' .conflicts')\n\t\t\taddConflict($conflicts, original, replacement)\n\n\t\t\tvar count = $(dialogId + ' .conflict').length\n\t\t\tvar title = n('core',\n\t\t\t\t'{count} file conflict',\n\t\t\t\t'{count} file conflicts',\n\t\t\t\tcount,\n\t\t\t\t{ count: count }\n\t\t\t)\n\t\t\t$(dialogId).parent().children('.oc-dialog-title').text(title)\n\n\t\t\t// recalculate dimensions\n\t\t\t$(window).trigger('resize')\n\t\t\tdialogDeferred.resolve()\n\t\t} else {\n\t\t\t// create dialog\n\t\t\tthis._fileexistsshown = true\n\t\t\t$.when(this._getFileExistsTemplate()).then(function($tmpl) {\n\t\t\t\tvar title = t('core', 'One file conflict')\n\t\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\t\tdialog_name: dialogName,\n\t\t\t\t\ttitle: title,\n\t\t\t\t\ttype: 'fileexists',\n\n\t\t\t\t\tallnewfiles: t('core', 'New Files'),\n\t\t\t\t\tallexistingfiles: t('core', 'Already existing files'),\n\n\t\t\t\t\twhy: t('core', 'Which files do you want to keep?'),\n\t\t\t\t\twhat: t('core', 'If you select both versions, the copied file will have a number added to its name.')\n\t\t\t\t})\n\t\t\t\t$('body').append($dlg)\n\n\t\t\t\tif (original && replacement) {\n\t\t\t\t\tvar $conflicts = $dlg.find('.conflicts')\n\t\t\t\t\taddConflict($conflicts, original, replacement)\n\t\t\t\t}\n\n\t\t\t\tvar buttonlist = [{\n\t\t\t\t\ttext: t('core', 'Cancel'),\n\t\t\t\t\tclasses: 'cancel',\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (typeof controller.onCancel !== 'undefined') {\n\t\t\t\t\t\t\tcontroller.onCancel(data)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttext: t('core', 'Continue'),\n\t\t\t\t\tclasses: 'continue',\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (typeof controller.onContinue !== 'undefined') {\n\t\t\t\t\t\t\tcontroller.onContinue($(dialogId + ' .conflict'))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t}]\n\n\t\t\t\t$(dialogId).ocdialog({\n\t\t\t\t\twidth: 500,\n\t\t\t\t\tcloseOnEscape: true,\n\t\t\t\t\tmodal: true,\n\t\t\t\t\tbuttons: buttonlist,\n\t\t\t\t\tcloseButton: null,\n\t\t\t\t\tclose: function() {\n\t\t\t\t\t\tself._fileexistsshown = false\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t$(this).ocdialog('destroy').remove()\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// ignore\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\t$(dialogId).css('height', 'auto')\n\n\t\t\t\tvar $primaryButton = $dlg.closest('.oc-dialog').find('button.continue')\n\t\t\t\t$primaryButton.prop('disabled', true)\n\n\t\t\t\tfunction updatePrimaryButton() {\n\t\t\t\t\tvar checkedCount = $dlg.find('.conflicts .checkbox:checked').length\n\t\t\t\t\t$primaryButton.prop('disabled', checkedCount === 0)\n\t\t\t\t}\n\n\t\t\t\t// add checkbox toggling actions\n\t\t\t\t$(dialogId).find('.allnewfiles').on('click', function() {\n\t\t\t\t\tvar $checkboxes = $(dialogId).find('.conflict .replacement input[type=\"checkbox\"]')\n\t\t\t\t\t$checkboxes.prop('checked', $(this).prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.allexistingfiles').on('click', function() {\n\t\t\t\t\tvar $checkboxes = $(dialogId).find('.conflict .original:not(.readonly) input[type=\"checkbox\"]')\n\t\t\t\t\t$checkboxes.prop('checked', $(this).prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.conflicts').on('click', '.replacement,.original:not(.readonly)', function() {\n\t\t\t\t\tvar $checkbox = $(this).find('input[type=\"checkbox\"]')\n\t\t\t\t\t$checkbox.prop('checked', !$checkbox.prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.conflicts').on('click', '.replacement input[type=\"checkbox\"],.original:not(.readonly) input[type=\"checkbox\"]', function() {\n\t\t\t\t\tvar $checkbox = $(this)\n\t\t\t\t\t$checkbox.prop('checked', !$checkbox.prop('checked'))\n\t\t\t\t})\n\n\t\t\t\t// update counters\n\t\t\t\t$(dialogId).on('click', '.replacement,.allnewfiles', function() {\n\t\t\t\t\tvar count = $(dialogId).find('.conflict .replacement input[type=\"checkbox\"]:checked').length\n\t\t\t\t\tif (count === $(dialogId + ' .conflict').length) {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', true)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text(t('core', '(all selected)'))\n\t\t\t\t\t} else if (count > 0) {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text(t('core', '({count} selected)', { count: count }))\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text('')\n\t\t\t\t\t}\n\t\t\t\t\tupdatePrimaryButton()\n\t\t\t\t})\n\t\t\t\t$(dialogId).on('click', '.original,.allexistingfiles', function() {\n\t\t\t\t\tvar count = $(dialogId).find('.conflict .original input[type=\"checkbox\"]:checked').length\n\t\t\t\t\tif (count === $(dialogId + ' .conflict').length) {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', true)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count').text(t('core', '(all selected)'))\n\t\t\t\t\t} else if (count > 0) {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count')\n\t\t\t\t\t\t\t.text(t('core', '({count} selected)', { count: count }))\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count').text('')\n\t\t\t\t\t}\n\t\t\t\t\tupdatePrimaryButton()\n\t\t\t\t})\n\n\t\t\t\tdialogDeferred.resolve()\n\t\t\t})\n\t\t\t\t.fail(function() {\n\t\t\t\t\tdialogDeferred.reject()\n\t\t\t\t\talert(t('core', 'Error loading file exists template'))\n\t\t\t\t})\n\t\t}\n\t\t// }\n\t\treturn dialogDeferred.promise()\n\t},\n\t// get the gridview setting and set the input accordingly\n\t_getGridSettings: function() {\n\t\tconst self = this\n\t\t$.get(OC.generateUrl('/apps/files/api/v1/showgridview'), function(response) {\n\t\t\tself.$showGridView\n\t\t\t\t.removeClass('icon-toggle-filelist icon-toggle-pictures')\n\t\t\t\t.addClass(response.gridview ? 'icon-toggle-filelist' : 'icon-toggle-pictures')\n\t\t\tself.$showGridView.attr(\n\t\t\t\t'aria-label',\n\t\t\t\tresponse.gridview ? t('files', 'Show list view') : t('files', 'Show grid view'),\n\t\t\t)\n\t\t\t$('.list-container').toggleClass('view-grid', response.gridview)\n\t\t})\n\t},\n\t_onGridviewChange: function() {\n\t\tconst isGridView = this.$showGridView.hasClass('icon-toggle-filelist')\n\t\t// only save state if user is logged in\n\t\tif (OC.currentUser) {\n\t\t\t$.post(OC.generateUrl('/apps/files/api/v1/showgridview'), { show: !isGridView })\n\t\t}\n\t\tthis.$showGridView\n\t\t\t.removeClass('icon-toggle-filelist icon-toggle-pictures')\n\t\t\t.addClass(isGridView ? 'icon-toggle-pictures' : 'icon-toggle-filelist')\n\t\tthis.$showGridView.attr(\n\t\t\t'aria-label',\n\t\t\tisGridView ? t('files', 'Show grid view') : t('files', 'Show list view'),\n\t\t)\n\t\tthis.$filePicker.find('.list-container').toggleClass('view-grid', !isGridView)\n\t},\n\t_getFilePickerTemplate: function() {\n\t\tvar defer = $.Deferred()\n\t\tif (!this.$filePickerTemplate) {\n\t\t\tvar self = this\n\t\t\t$.get(OC.filePath('core', 'templates', 'filepicker.html'), function(tmpl) {\n\t\t\t\tself.$filePickerTemplate = $(tmpl)\n\t\t\t\tself.$listTmpl = self.$filePickerTemplate.find('.filelist tbody tr:first-child').detach()\n\t\t\t\tdefer.resolve(self.$filePickerTemplate)\n\t\t\t})\n\t\t\t\t.fail(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\tdefer.reject(jqXHR.status, errorThrown)\n\t\t\t\t})\n\t\t} else {\n\t\t\tdefer.resolve(this.$filePickerTemplate)\n\t\t}\n\t\treturn defer.promise()\n\t},\n\t_getMessageTemplate: function() {\n\t\tvar defer = $.Deferred()\n\t\tif (!this.$messageTemplate) {\n\t\t\tvar self = this\n\t\t\t$.get(OC.filePath('core', 'templates', 'message.html'), function(tmpl) {\n\t\t\t\tself.$messageTemplate = $(tmpl)\n\t\t\t\tdefer.resolve(self.$messageTemplate)\n\t\t\t})\n\t\t\t\t.fail(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\tdefer.reject(jqXHR.status, errorThrown)\n\t\t\t\t})\n\t\t} else {\n\t\t\tdefer.resolve(this.$messageTemplate)\n\t\t}\n\t\treturn defer.promise()\n\t},\n\t_getFileExistsTemplate: function() {\n\t\tvar defer = $.Deferred()\n\t\tif (!this.$fileexistsTemplate) {\n\t\t\tvar self = this\n\t\t\t$.get(OC.filePath('files', 'templates', 'fileexists.html'), function(tmpl) {\n\t\t\t\tself.$fileexistsTemplate = $(tmpl)\n\t\t\t\tdefer.resolve(self.$fileexistsTemplate)\n\t\t\t})\n\t\t\t\t.fail(function() {\n\t\t\t\t\tdefer.reject()\n\t\t\t\t})\n\t\t} else {\n\t\t\tdefer.resolve(this.$fileexistsTemplate)\n\t\t}\n\t\treturn defer.promise()\n\t},\n\n\t/**\n\t * fills the filepicker with files\n\t */\n\t_fillFilePicker: async function(dir, type) {\n\t\tvar self = this\n\t\tthis.$filelist.empty()\n\t\tthis.$filePicker.find('.emptycontent').hide()\n\t\tthis.$filelistContainer.addClass('icon-loading')\n\t\tthis.$filePicker.data('path', dir)\n\t\tvar filter = this.$filePicker.data('mimetype')\n\t\tvar advancedFilter = this.$filePicker.data('filter')\n\t\tif (typeof (filter) === 'string') {\n\t\t\tfilter = [filter]\n\t\t}\n\t\tself.$fileListHeader.find('.sort-indicator').addClass('hidden').removeClass('icon-triangle-n').removeClass('icon-triangle-s')\n\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').removeClass('hidden')\n\t\tif (self.filepicker.sortOrder === 'asc') {\n\t\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').addClass('icon-triangle-n')\n\t\t} else {\n\t\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').addClass('icon-triangle-s')\n\t\t}\n\n\t\t// Wrap within a method because a promise cannot return multiple values\n\t\t// But the client impleemntation still does it...\n\t\tvar getFolderContents = async function(dir) {\n\t\t\treturn self.filepicker.filesClient.getFolderContents(dir)\n\t\t\t\t.then((status, files) => {\n\t\t\t\t\treturn files\n\t\t\t\t})\n\t\t}\n\n\t\ttry {\n\t\t\tvar files = await getFolderContents(dir)\n\t\t} catch (error) {\n\t\t\t// fallback to root if requested dir is non-existent\n\t\t\tconsole.error('Requested path does not exists, falling back to root')\n\t\t\tvar files = await getFolderContents('/')\n\t\t\tthis.$filePicker.data('path', '/')\n\t\t\tthis._changeButtonsText(type, '')\n\t\t}\n\n\t\tself.filelist = files\n\t\tif (filter && filter.length > 0 && filter.indexOf('*') === -1) {\n\t\t\tfiles = files.filter(function(file) {\n\t\t\t\treturn file.type === 'dir' || filter.indexOf(file.mimetype) !== -1\n\t\t\t})\n\t\t}\n\n\t\tif (advancedFilter) {\n\t\t\tfiles = files.filter(advancedFilter)\n\t\t}\n\n\t\t// Check if the showHidden input field exist and if it exist follow it\n\t\t// Otherwise just show the hidden files\n\t\tconst showHiddenInput = document.getElementById('showHiddenFiles')\n\t\tconst showHidden = showHiddenInput === null || showHiddenInput.value === \"1\"\n\t\tif (!showHidden) {\n\t\t\tfiles = files.filter(function(file) {\n\t\t\t\treturn !file.name.startsWith('.')\n\t\t\t})\n\t\t}\n\n\t\tvar Comparators = {\n\t\t\tname: function(fileInfo1, fileInfo2) {\n\t\t\t\tif (fileInfo1.type === 'dir' && fileInfo2.type !== 'dir') {\n\t\t\t\t\treturn -1\n\t\t\t\t}\n\t\t\t\tif (fileInfo1.type !== 'dir' && fileInfo2.type === 'dir') {\n\t\t\t\t\treturn 1\n\t\t\t\t}\n\t\t\t\treturn OC.Util.naturalSortCompare(fileInfo1.name, fileInfo2.name)\n\t\t\t},\n\t\t\tsize: function(fileInfo1, fileInfo2) {\n\t\t\t\treturn fileInfo1.size - fileInfo2.size\n\t\t\t},\n\t\t\tmtime: function(fileInfo1, fileInfo2) {\n\t\t\t\treturn fileInfo1.mtime - fileInfo2.mtime\n\t\t\t}\n\t\t}\n\t\tvar comparator = Comparators[self.filepicker.sortField] || Comparators.name\n\t\tfiles = files.sort(function(file1, file2) {\n\t\t\tvar isFavorite = function(fileInfo) {\n\t\t\t\treturn fileInfo.tags && fileInfo.tags.indexOf(OC.TAG_FAVORITE) >= 0\n\t\t\t}\n\n\t\t\tif (isFavorite(file1) && !isFavorite(file2)) {\n\t\t\t\treturn -1\n\t\t\t} else if (!isFavorite(file1) && isFavorite(file2)) {\n\t\t\t\treturn 1\n\t\t\t}\n\n\t\t\treturn self.filepicker.sortOrder === 'asc' ? comparator(file1, file2) : -comparator(file1, file2)\n\t\t})\n\n\t\tself._fillSlug()\n\n\t\tif (files.length === 0) {\n\t\t\tself.$filePicker.find('.emptycontent').show()\n\t\t\tself.$fileListHeader.hide()\n\t\t} else {\n\t\t\tself.$filePicker.find('.emptycontent').hide()\n\t\t\tself.$fileListHeader.show()\n\t\t}\n\n\t\tself.$filelist.empty();\n\n\t\t$.each(files, function(idx, entry) {\n\t\t\tif (entry.isEncrypted && entry.mimetype === 'httpd/unix-directory') {\n\t\t\t\tentry.icon = OC.MimeType.getIconUrl('dir-encrypted')\n\t\t\t} else {\n\t\t\t\tentry.icon = OC.MimeType.getIconUrl(entry.mimetype)\n\t\t\t}\n\n\t\t\tvar simpleSize, sizeColor\n\t\t\tif (typeof (entry.size) !== 'undefined' && entry.size >= 0) {\n\t\t\t\tsimpleSize = OC.Util.humanFileSize(parseInt(entry.size, 10), true)\n\t\t\t\tsizeColor = Math.round(160 - Math.pow((entry.size / (1024 * 1024)), 2))\n\t\t\t} else {\n\t\t\t\tsimpleSize = t('files', 'Pending')\n\t\t\t\tsizeColor = 80\n\t\t\t}\n\n\t\t\t// split the filename in half if the size is bigger than 20 char\n\t\t\t// for ellipsis\n\t\t\tif (entry.name.length >= 10) {\n\t\t\t\t// leave maximum 10 letters\n\t\t\t\tvar split = Math.min(Math.floor(entry.name.length / 2), 10)\n\t\t\t\tvar filename1 = entry.name.substr(0, entry.name.length - split)\n\t\t\t\tvar filename2 = entry.name.substr(entry.name.length - split)\n\t\t\t} else {\n\t\t\t\tvar filename1 = entry.name\n\t\t\t\tvar filename2 = ''\n\t\t\t}\n\n\t\t\tvar $row = self.$listTmpl.octemplate({\n\t\t\t\ttype: entry.type,\n\t\t\t\tdir: dir,\n\t\t\t\tfilename: entry.name,\n\t\t\t\tfilename1: filename1,\n\t\t\t\tfilename2: filename2,\n\t\t\t\tdate: OC.Util.relativeModifiedDate(entry.mtime),\n\t\t\t\tsize: simpleSize,\n\t\t\t\tsizeColor: sizeColor,\n\t\t\t\ticon: entry.icon\n\t\t\t})\n\t\t\tif (entry.type === 'file') {\n\t\t\t\tvar urlSpec = {\n\t\t\t\t\tfile: dir + '/' + entry.name,\n\t\t\t\t\tx: 100,\n\t\t\t\t\ty: 100\n\t\t\t\t}\n\t\t\t\tvar img = new Image()\n\t\t\t\tvar previewUrl = OC.generateUrl('/core/preview.png?') + $.param(urlSpec)\n\t\t\t\timg.onload = function() {\n\t\t\t\t\tif (img.width > 5) {\n\t\t\t\t\t\t$row.find('td.filename').attr('style', 'background-image:url(' + previewUrl + ')')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\timg.src = previewUrl\n\t\t\t}\n\t\t\tself.$filelist.append($row)\n\t\t})\n\n\t\tself.$filelistContainer.removeClass('icon-loading')\n\t},\n\t/**\n\t * fills the tree list with directories\n\t */\n\t_fillSlug: function() {\n\t\tvar addButton = this.$dirTree.find('.actions.creatable').detach()\n\t\tthis.$dirTree.empty()\n\t\tvar self = this\n\n\t\tself.$dirTree.append(addButton)\n\n\t\tvar dir\n\t\tvar path = this.$filePicker.data('path')\n\t\tvar $template = $('<div data-dir=\"{dir}\" tabindex=\"0\"><a>{name}</a></div>').addClass('crumb')\n\t\tif (path) {\n\t\t\tvar paths = path.split('/')\n\t\t\t$.each(paths, function(index, dir) {\n\t\t\t\tdir = paths.pop()\n\t\t\t\tif (dir === '') {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tself.$dirTree.prepend($template.octemplate({\n\t\t\t\t\tdir: paths.join('/') + '/' + dir,\n\t\t\t\t\tname: dir\n\t\t\t\t}))\n\t\t\t})\n\t\t}\n\n\t\t$template.octemplate({\n\t\t\tdir: '',\n\t\t\tname: t('core', 'Home'),\n\t\t}, { escapeFunction: null }).prependTo(this.$dirTree)\n\n\t},\n\t/**\n\t * handle selection made in the tree list\n\t */\n\t_handleTreeListSelect: function(event, type) {\n\t\tvar self = event.data\n\t\tvar dir = $(event.target).closest('.crumb').data('dir')\n\t\tself._fillFilePicker(dir, type)\n\t\tvar getOcDialog = (event.target).closest('.oc-dialog')\n\t\tvar buttonEnableDisable = $('.primary', getOcDialog)\n\t\tthis._changeButtonsText(type, dir.split(/[/]+/).pop())\n\t\tif (this.$filePicker.data('mimetype').indexOf('httpd/unix-directory') !== -1 || this.$filePicker.data('allowDirectoryChooser')) {\n\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t} else {\n\t\t\tbuttonEnableDisable.prop('disabled', true)\n\t\t}\n\t},\n\t/**\n\t * handle clicks made in the filepicker\n\t */\n\t_handlePickerClick: function(event, $element, type) {\n\t\tvar getOcDialog = this.$filePicker.closest('.oc-dialog')\n\t\tvar buttonEnableDisable = getOcDialog.find('.primary')\n\t\tif ($element.data('type') === 'file') {\n\t\t\tif (this.$filePicker.data('multiselect') !== true || !event.ctrlKey) {\n\t\t\t\tthis.$filelist.find('.filepicker_element_selected').removeClass('filepicker_element_selected')\n\t\t\t}\n\t\t\t$element.toggleClass('filepicker_element_selected')\n\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t} else if ($element.data('type') === 'dir') {\n\t\t\tthis._fillFilePicker(this.$filePicker.data('path') + '/' + $element.data('entryname'), type)\n\t\t\tthis._changeButtonsText(type, $element.data('entryname'))\n\t\t\tif (this.$filePicker.data('mimetype').indexOf('httpd/unix-directory') !== -1 || this.$filePicker.data('allowDirectoryChooser')) {\n\t\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t\t} else {\n\t\t\t\tbuttonEnableDisable.prop('disabled', true)\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Handle\n\t * @param type of action\n\t * @param dir on which to change buttons text\n\t * @private\n\t */\n\t_changeButtonsText: function(type, dir) {\n\t\tvar copyText = dir === '' ? t('core', 'Copy') : t('core', 'Copy to {folder}', { folder: dir })\n\t\tvar moveText = dir === '' ? t('core', 'Move') : t('core', 'Move to {folder}', { folder: dir })\n\t\tvar buttons = $('.oc-dialog-buttonrow button')\n\t\tswitch (type) {\n\t\t\tcase this.FILEPICKER_TYPE_CHOOSE:\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_CUSTOM:\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_COPY:\n\t\t\t\tbuttons.text(copyText)\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_MOVE:\n\t\t\t\tbuttons.text(moveText)\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_COPY_MOVE:\n\t\t\t\tbuttons.eq(0).text(copyText)\n\t\t\t\tbuttons.eq(1).text(moveText)\n\t\t\t\tbreak\n\t\t}\n\t}\n}\n\nexport default Dialogs\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { emit } from '@nextcloud/event-bus'\n\n/**\n * @private\n * @param {Document} global the document to read the initial value from\n * @param {Function} emit the function to invoke for every new token\n * @return {object}\n */\nexport const manageToken = (global, emit) => {\n\tlet token = global.getElementsByTagName('head')[0].getAttribute('data-requesttoken')\n\n\treturn {\n\t\tgetToken: () => token,\n\t\tsetToken: newToken => {\n\t\t\ttoken = newToken\n\n\t\t\temit('csrf-token-update', {\n\t\t\t\ttoken,\n\t\t\t})\n\t\t},\n\t}\n}\n\nconst manageFromDocument = manageToken(document, emit)\n\n/**\n * @return {string}\n */\nexport const getToken = manageFromDocument.getToken\n\n/**\n * @param {string} newToken new token\n */\nexport const setToken = manageFromDocument.setToken\n","/**\n * @copyright 2012 Robin Appelman icewind1991@gmail.com\n *\n * @author Arthur Schiwon <blizzz@arthur-schiwon.de>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Lukas Reschke <lukas@statuscode.ch>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Thomas Müller <thomas.mueller@tmit.eu>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport $ from 'jquery'\n\nimport { getToken } from './requesttoken'\n\n/**\n * Create a new event source\n * @param {string} src\n * @param {object} [data] to be send as GET\n *\n * @constructs OCEventSource\n */\nconst OCEventSource = function(src, data) {\n\tvar dataStr = ''\n\tvar name\n\tvar joinChar\n\tthis.typelessListeners = []\n\tthis.closed = false\n\tthis.listeners = {}\n\tif (data) {\n\t\tfor (name in data) {\n\t\t\tdataStr += name + '=' + encodeURIComponent(data[name]) + '&'\n\t\t}\n\t}\n\tdataStr += 'requesttoken=' + encodeURIComponent(getToken())\n\tif (!this.useFallBack && typeof EventSource !== 'undefined') {\n\t\tjoinChar = '&'\n\t\tif (src.indexOf('?') === -1) {\n\t\t\tjoinChar = '?'\n\t\t}\n\t\tthis.source = new EventSource(src + joinChar + dataStr)\n\t\tthis.source.onmessage = function(e) {\n\t\t\tfor (var i = 0; i < this.typelessListeners.length; i++) {\n\t\t\t\tthis.typelessListeners[i](JSON.parse(e.data))\n\t\t\t}\n\t\t}.bind(this)\n\t} else {\n\t\tvar iframeId = 'oc_eventsource_iframe_' + OCEventSource.iframeCount\n\t\tOCEventSource.fallBackSources[OCEventSource.iframeCount] = this\n\t\tthis.iframe = $('<iframe></iframe>')\n\t\tthis.iframe.attr('id', iframeId)\n\t\tthis.iframe.hide()\n\n\t\tjoinChar = '&'\n\t\tif (src.indexOf('?') === -1) {\n\t\t\tjoinChar = '?'\n\t\t}\n\t\tthis.iframe.attr('src', src + joinChar + 'fallback=true&fallback_id=' + OCEventSource.iframeCount + '&' + dataStr)\n\t\t$('body').append(this.iframe)\n\t\tthis.useFallBack = true\n\t\tOCEventSource.iframeCount++\n\t}\n\t// add close listener\n\tthis.listen('__internal__', function(data) {\n\t\tif (data === 'close') {\n\t\t\tthis.close()\n\t\t}\n\t}.bind(this))\n}\nOCEventSource.fallBackSources = []\nOCEventSource.iframeCount = 0// number of fallback iframes\nOCEventSource.fallBackCallBack = function(id, type, data) {\n\tOCEventSource.fallBackSources[id].fallBackCallBack(type, data)\n}\nOCEventSource.prototype = {\n\ttypelessListeners: [],\n\tiframe: null,\n\tlisteners: {}, // only for fallback\n\tuseFallBack: false,\n\t/**\n\t * Fallback callback for browsers that don't have the\n\t * native EventSource object.\n\t *\n\t * Calls the registered listeners.\n\t *\n\t * @private\n\t * @param {String} type event type\n\t * @param {Object} data received data\n\t */\n\tfallBackCallBack: function(type, data) {\n\t\tvar i\n\t\t// ignore messages that might appear after closing\n\t\tif (this.closed) {\n\t\t\treturn\n\t\t}\n\t\tif (type) {\n\t\t\tif (typeof this.listeners.done !== 'undefined') {\n\t\t\t\tfor (i = 0; i < this.listeners[type].length; i++) {\n\t\t\t\t\tthis.listeners[type][i](data)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor (i = 0; i < this.typelessListeners.length; i++) {\n\t\t\t\tthis.typelessListeners[i](data)\n\t\t\t}\n\t\t}\n\t},\n\tlastLength: 0, // for fallback\n\t/**\n\t * Listen to a given type of events.\n\t *\n\t * @param {String} type event type\n\t * @param {Function} callback event callback\n\t */\n\tlisten: function(type, callback) {\n\t\tif (callback && callback.call) {\n\n\t\t\tif (type) {\n\t\t\t\tif (this.useFallBack) {\n\t\t\t\t\tif (!this.listeners[type]) {\n\t\t\t\t\t\tthis.listeners[type] = []\n\t\t\t\t\t}\n\t\t\t\t\tthis.listeners[type].push(callback)\n\t\t\t\t} else {\n\t\t\t\t\tthis.source.addEventListener(type, function(e) {\n\t\t\t\t\t\tif (typeof e.data !== 'undefined') {\n\t\t\t\t\t\t\tcallback(JSON.parse(e.data))\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcallback('')\n\t\t\t\t\t\t}\n\t\t\t\t\t}, false)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.typelessListeners.push(callback)\n\t\t\t}\n\t\t}\n\t},\n\t/**\n\t * Closes this event source.\n\t */\n\tclose: function() {\n\t\tthis.closed = true\n\t\tif (typeof this.source !== 'undefined') {\n\t\t\tthis.source.close()\n\t\t}\n\t}\n}\n\nexport default OCEventSource\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\n/** @typedef {import('jquery')} jQuery */\nimport $ from 'jquery'\n\nimport { menuSpeed } from './constants'\n\nexport let currentMenu = null\nexport let currentMenuToggle = null\n\n/**\n * For menu toggling\n *\n * @param {jQuery} $toggle the toggle element\n * @param {jQuery} $menuEl the menu container element\n * @param {Function | undefined} toggle callback invoked everytime the menu is opened\n * @param {boolean} headerMenu is this a top right header menu?\n * @return {void}\n */\nexport const registerMenu = function($toggle, $menuEl, toggle, headerMenu) {\n\t$menuEl.addClass('menu')\n\tconst isClickableElement = $toggle.prop('tagName') === 'A' || $toggle.prop('tagName') === 'BUTTON'\n\n\t// On link and button, the enter key trigger a click event\n\t// Only use the click to avoid two fired events\n\t$toggle.on(isClickableElement ? 'click.menu' : 'click.menu keyup.menu', function(event) {\n\t\t// prevent the link event (append anchor to URL)\n\t\tevent.preventDefault()\n\n\t\t// allow enter key as a trigger\n\t\tif (event.key && event.key !== 'Enter') {\n\t\t\treturn\n\t\t}\n\n\t\tif ($menuEl.is(currentMenu)) {\n\t\t\thideMenus()\n\t\t\treturn\n\t\t} else if (currentMenu) {\n\t\t\t// another menu was open?\n\t\t\t// close it\n\t\t\thideMenus()\n\t\t}\n\n\t\tif (headerMenu === true) {\n\t\t\t$menuEl.parent().addClass('openedMenu')\n\t\t}\n\n\t\t// Set menu to expanded\n\t\t$toggle.attr('aria-expanded', true)\n\n\t\t$menuEl.slideToggle(menuSpeed, toggle)\n\t\tcurrentMenu = $menuEl\n\t\tcurrentMenuToggle = $toggle\n\t})\n}\n\n/**\n * Unregister a previously registered menu\n *\n * @param {jQuery} $toggle the toggle element\n * @param {jQuery} $menuEl the menu container element\n */\nexport const unregisterMenu = ($toggle, $menuEl) => {\n\t// close menu if opened\n\tif ($menuEl.is(currentMenu)) {\n\t\thideMenus()\n\t}\n\t$toggle.off('click.menu').removeClass('menutoggle')\n\t$menuEl.removeClass('menu')\n}\n\n/**\n * Hides any open menus\n *\n * @param {Function} complete callback when the hiding animation is done\n */\nexport const hideMenus = function(complete) {\n\tif (currentMenu) {\n\t\tconst lastMenu = currentMenu\n\t\tcurrentMenu.trigger(new $.Event('beforeHide'))\n\t\tcurrentMenu.slideUp(menuSpeed, function() {\n\t\t\tlastMenu.trigger(new $.Event('afterHide'))\n\t\t\tif (complete) {\n\t\t\t\tcomplete.apply(this, arguments)\n\t\t\t}\n\t\t})\n\t}\n\n\t// Set menu to closed\n\t$('.menutoggle').attr('aria-expanded', false)\n\tif (currentMenuToggle) {\n\t\tcurrentMenuToggle.attr('aria-expanded', false)\n\t}\n\n\t$('.openedMenu').removeClass('openedMenu')\n\tcurrentMenu = null\n\tcurrentMenuToggle = null\n}\n\n/**\n * Shows a given element as menu\n *\n * @param {object} [$toggle=null] menu toggle\n * @param {object} $menuEl menu element\n * @param {Function} complete callback when the showing animation is done\n */\nexport const showMenu = ($toggle, $menuEl, complete) => {\n\tif ($menuEl.is(currentMenu)) {\n\t\treturn\n\t}\n\thideMenus()\n\tcurrentMenu = $menuEl\n\tcurrentMenuToggle = $toggle\n\t$menuEl.trigger(new $.Event('beforeShow'))\n\t$menuEl.show()\n\t$menuEl.trigger(new $.Event('afterShow'))\n\t// no animation\n\tif (_.isFunction(complete)) {\n\t\tcomplete()\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const coreApps = ['', 'admin', 'log', 'core/search', 'core', '3rdparty']\nexport const menuSpeed = 50\nexport const PERMISSION_NONE = 0\nexport const PERMISSION_CREATE = 4\nexport const PERMISSION_READ = 1\nexport const PERMISSION_UPDATE = 2\nexport const PERMISSION_DELETE = 8\nexport const PERMISSION_SHARE = 16\nexport const PERMISSION_ALL = 31\nexport const TAG_FAVORITE = '_$!<Favorite>!$_'\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst isAdmin = !!window._oc_isadmin\n\n/**\n * Returns whether the current user is an administrator\n *\n * @return {boolean} true if the user is an admin, false otherwise\n * @since 9.0.0\n */\nexport const isUserAdmin = () => isAdmin\n","/**\n * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.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 Handlebars from 'handlebars'\nimport {\n\tloadTranslations,\n\ttranslate,\n\ttranslatePlural,\n\tregister,\n\tunregister,\n} from '@nextcloud/l10n'\n\n/**\n * L10N namespace with localization functions.\n *\n * @namespace OC.L10n\n * @deprecated 26.0.0 use https://www.npmjs.com/package/@nextcloud/l10n\n */\nconst L10n = {\n\n\t/**\n\t * Load an app's translation bundle if not loaded already.\n\t *\n\t * @deprecated 26.0.0 use `loadTranslations` from https://www.npmjs.com/package/@nextcloud/l10n\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: loadTranslations,\n\n\t/**\n\t * Register an app's translation bundle.\n\t *\n\t * @deprecated 26.0.0 use `register` from https://www.npmjs.com/package/@nextcloud/l10\n\t *\n\t * @param {string} appName name of the app\n\t * @param {Object<string, string>} bundle bundle\n\t */\n\tregister,\n\n\t/**\n\t * @private\n\t * @deprecated 26.0.0 use `unregister` from https://www.npmjs.com/package/@nextcloud/l10n\n\t */\n\t_unregister: unregister,\n\n\t/**\n\t * Translate a string\n\t *\n\t * @deprecated 26.0.0 use `translate` from https://www.npmjs.com/package/@nextcloud/l10n\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,\n\n\t/**\n\t * Translate a plural string\n\t *\n\t * @deprecated 26.0.0 use `translatePlural` from https://www.npmjs.com/package/@nextcloud/l10n\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,\n}\n\nexport default L10n\n\nHandlebars.registerHelper('t', function(app, text) {\n\treturn 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\tconst $buttonrow = $dialog.find('.oc-dialog-buttonrow')\n\t\t\t\t$buttonrow.addClass('aside')\n\n\t\t\t\tconst $buttons = $buttonrow.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/functions/formatFileSize.html\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 from './l10n'\nimport {\n\tgetCanonicalLocale,\n\tgetLanguage,\n\tgetLocale,\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\t/**\n\t * @deprecated 26.0.0 use `getLocale` from https://www.npmjs.com/package/@nextcloud/l10n\n\t */\n\tgetLocale,\n\t/**\n\t * @deprecated 26.0.0 use `getLanguage` from https://www.npmjs.com/package/@nextcloud/l10n\n\t */\n\tgetLanguage,\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¶m2=abcde¶m3=xyz\n * @return {Object<string, string>} map containing key/values matching the URL parameters\n */\nexport const parse = queryString => {\n\tlet pos\n\tlet components\n\tconst result = {}\n\tlet key\n\tif (!queryString) {\n\t\treturn null\n\t}\n\tpos = queryString.indexOf('?')\n\tif (pos >= 0) {\n\t\tqueryString = queryString.substr(pos + 1)\n\t}\n\tconst parts = queryString.replace(/\\+/g, '%20').split('&')\n\tfor (let i = 0; i < parts.length; i++) {\n\t\t// split on first equal sign\n\t\tconst part = parts[i]\n\t\tpos = part.indexOf('=')\n\t\tif (pos >= 0) {\n\t\t\tcomponents = [\n\t\t\t\tpart.substr(0, pos),\n\t\t\t\tpart.substr(pos + 1),\n\t\t\t]\n\t\t} else {\n\t\t\t// key only\n\t\t\tcomponents = [part]\n\t\t}\n\t\tif (!components.length) {\n\t\t\tcontinue\n\t\t}\n\t\tkey = decodeURIComponent(components[0])\n\t\tif (!key) {\n\t\t\tcontinue\n\t\t}\n\t\t// if equal sign was there, return string\n\t\tif (components.length > 1) {\n\t\t\tresult[key] = decodeURIComponent(components[1])\n\t\t} else {\n\t\t\t// no equal sign => null value\n\t\t\tresult[key] = null\n\t\t}\n\t}\n\treturn result\n}\n\n/**\n * Builds a URL query from a JS map.\n *\n * @param {Object<string, string>} params map containing key/values matching the URL parameters\n * @return {string} String containing a URL query (without question) mark\n */\nexport const build = params => {\n\tif (!params) {\n\t\treturn ''\n\t}\n\treturn $.map(params, function(value, key) {\n\t\tlet s = encodeURIComponent(key)\n\t\tif (value !== null && typeof (value) !== 'undefined') {\n\t\t\ts += '=' + encodeURIComponent(value)\n\t\t}\n\t\treturn s\n\t}).join('&')\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default {\n\n\t/**\n\t * @type {Array.<OC.Plugin>}\n\t */\n\t_plugins: {},\n\n\t/**\n\t * Register plugin\n\t *\n\t * @param {string} targetName app name / class name to hook into\n\t * @param {OC.Plugin} plugin plugin\n\t */\n\tregister(targetName, plugin) {\n\t\tlet plugins = this._plugins[targetName]\n\t\tif (!plugins) {\n\t\t\tplugins = this._plugins[targetName] = []\n\t\t}\n\t\tplugins.push(plugin)\n\t},\n\n\t/**\n\t * Returns all plugin registered to the given target\n\t * name / app name / class name.\n\t *\n\t * @param {string} targetName app name / class name to hook into\n\t * @return {Array.<OC.Plugin>} array of plugins\n\t */\n\tgetPlugins(targetName) {\n\t\treturn this._plugins[targetName] || []\n\t},\n\n\t/**\n\t * Call attach() on all plugins registered to the given target name.\n\t *\n\t * @param {string} targetName app name / class name\n\t * @param {object} targetObject to be extended\n\t * @param {object} [options] options\n\t */\n\tattach(targetName, targetObject, options) {\n\t\tconst plugins = this.getPlugins(targetName)\n\t\tfor (let i = 0; i < plugins.length; i++) {\n\t\t\tif (plugins[i].attach) {\n\t\t\t\tplugins[i].attach(targetObject, options)\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Call detach() on all plugins registered to the given target name.\n\t *\n\t * @param {string} targetName app name / class name\n\t * @param {object} targetObject to be extended\n\t * @param {object} [options] options\n\t */\n\tdetach(targetName, targetObject, options) {\n\t\tconst plugins = this.getPlugins(targetName)\n\t\tfor (let i = 0; i < plugins.length; i++) {\n\t\t\tif (plugins[i].detach) {\n\t\t\t\tplugins[i].detach(targetObject, options)\n\t\t\t}\n\t\t}\n\t},\n\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const redirect = targetURL => { window.location = targetURL }\n\n/**\n * Reloads the current page\n *\n * @deprecated 17.0.0 use window.location.reload directly\n */\nexport const reload = () => { window.location.reload() }\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport {\n\tgetRootUrl as realGetRootUrl,\n} from '@nextcloud/router'\n\n/**\n * Creates a relative url for remote use\n *\n * @param {string} service id\n * @return {string} the url\n */\nexport const linkToRemoteBase = service => {\n\treturn realGetRootUrl() + '/remote.php/' + service\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\nimport { emit } from '@nextcloud/event-bus'\nimport { loadState } from '@nextcloud/initial-state'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { generateUrl } from '@nextcloud/router'\n\nimport OC from './OC'\nimport { setToken as setRequestToken, getToken as getRequestToken } from './OC/requesttoken'\n\nlet config = null\n/**\n * The legacy jsunit tests overwrite OC.config before calling initCore\n * therefore we need to wait with assigning the config fallback until initCore calls initSessionHeartBeat\n */\nconst loadConfig = () => {\n\ttry {\n\t\tconfig = loadState('core', 'config')\n\t} catch (e) {\n\t\t// This fallback is just for our legacy jsunit tests since we have no way to mock loadState calls\n\t\tconfig = OC.config\n\t}\n}\n\n/**\n * session heartbeat (defaults to enabled)\n *\n * @return {boolean}\n */\nconst keepSessionAlive = () => {\n\treturn config.session_keepalive === undefined\n\t\t|| !!config.session_keepalive\n}\n\n/**\n * get interval in seconds\n *\n * @return {number}\n */\nconst getInterval = () => {\n\tlet interval = NaN\n\tif (config.session_lifetime) {\n\t\tinterval = Math.floor(config.session_lifetime / 2)\n\t}\n\n\t// minimum one minute, max 24 hours, default 15 minutes\n\treturn Math.min(\n\t\t24 * 3600,\n\t\tMath.max(\n\t\t\t60,\n\t\t\tisNaN(interval) ? 900 : interval\n\t\t)\n\t)\n}\n\nconst getToken = async () => {\n\tconst url = generateUrl('/csrftoken')\n\n\t// Not using Axios here as Axios is not stubbable with the sinon fake server\n\t// see https://stackoverflow.com/questions/41516044/sinon-mocha-test-with-async-ajax-calls-didnt-return-promises\n\t// see js/tests/specs/coreSpec.js for the tests\n\tconst resp = await $.get(url)\n\n\treturn resp.token\n}\n\nconst poll = async () => {\n\ttry {\n\t\tconst token = await getToken()\n\t\tsetRequestToken(token)\n\t} catch (e) {\n\t\tconsole.error('session heartbeat failed', e)\n\t}\n}\n\nconst startPolling = () => {\n\tconst interval = setInterval(poll, getInterval() * 1000)\n\n\tconsole.info('session heartbeat polling started')\n\n\treturn interval\n}\n\nconst registerAutoLogout = () => {\n\tif (!config.auto_logout || !getCurrentUser()) {\n\t\treturn\n\t}\n\n\tlet lastActive = Date.now()\n\twindow.addEventListener('mousemove', e => {\n\t\tlastActive = Date.now()\n\t\tlocalStorage.setItem('lastActive', lastActive)\n\t})\n\n\twindow.addEventListener('touchstart', e => {\n\t\tlastActive = Date.now()\n\t\tlocalStorage.setItem('lastActive', lastActive)\n\t})\n\n\twindow.addEventListener('storage', e => {\n\t\tif (e.key !== 'lastActive') {\n\t\t\treturn\n\t\t}\n\t\tlastActive = e.newValue\n\t})\n\n\tsetInterval(function() {\n\t\tconst timeout = Date.now() - config.session_lifetime * 1000\n\t\tif (lastActive < timeout) {\n\t\t\tconsole.info('Inactivity timout reached, logging out')\n\t\t\tconst logoutUrl = generateUrl('/logout') + '?requesttoken=' + encodeURIComponent(getRequestToken())\n\t\t\twindow.location = logoutUrl\n\t\t}\n\t}, 1000)\n}\n\n/**\n * Calls the server periodically to ensure that session and CSRF\n * token doesn't expire\n */\nexport const initSessionHeartBeat = () => {\n\tloadConfig()\n\n\tregisterAutoLogout()\n\n\tif (!keepSessionAlive()) {\n\t\tconsole.info('session heartbeat disabled')\n\t\treturn\n\t}\n\tlet interval = startPolling()\n\n\twindow.addEventListener('online', async () => {\n\t\tconsole.info('browser is online again, resuming heartbeat')\n\t\tinterval = startPolling()\n\t\ttry {\n\t\t\tawait poll()\n\t\t\tconsole.info('session token successfully updated after resuming network')\n\n\t\t\t// Let apps know we're online and requests will have the new token\n\t\t\temit('networkOnline', {\n\t\t\t\tsuccess: true,\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.error('could not update session token after resuming network', e)\n\n\t\t\t// Let apps know we're online but requests might have an outdated token\n\t\t\temit('networkOnline', {\n\t\t\t\tsuccess: false,\n\t\t\t})\n\t\t}\n\t})\n\twindow.addEventListener('offline', () => {\n\t\tconsole.info('browser is offline, stopping heartbeat')\n\n\t\t// Let apps know we're offline\n\t\temit('networkOffline', {})\n\n\t\tclearInterval(interval)\n\t\tconsole.info('session heartbeat polling stopped')\n\t})\n}\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContactsMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContactsMenu.vue?vue&type=script&lang=js&\"","<!--\n - @copyright 2023 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n-->\n\n<template>\n\t<NcHeaderMenu id=\"contactsmenu\"\n\t\t:aria-label=\"t('core', 'Search contacts')\"\n\t\t@open=\"handleOpen\">\n\t\t<template #trigger>\n\t\t\t<Contacts :size=\"20\" />\n\t\t</template>\n\t\t<div id=\"contactsmenu-menu\" />\n\t</NcHeaderMenu>\n</template>\n\n<script>\nimport NcHeaderMenu from '@nextcloud/vue/dist/Components/NcHeaderMenu.js'\n\nimport Contacts from 'vue-material-design-icons/Contacts.vue'\n\nimport OC from '../OC/index.js'\n\nexport default {\n\tname: 'ContactsMenu',\n\n\tcomponents: {\n\t\tContacts,\n\t\tNcHeaderMenu,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tcontactsMenu: null,\n\t\t}\n\t},\n\n\tmounted() {\n\t\t// eslint-disable-next-line no-new\n\t\tthis.contactsMenu = new OC.ContactsMenu({\n\t\t\tel: '#contactsmenu-menu',\n\t\t})\n\t},\n\n\tmethods: {\n\t\thandleOpen() {\n\t\t\tthis.contactsMenu?.loadContacts()\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n#contactsmenu-menu {\n\t/* show 2.5 to 4.5 entries depending on the screen height */\n\theight: calc(100vh - 50px * 3);\n\tmax-height: calc(50px * 6 + 2px);\n\tmin-height: calc(50px * 3.5);\n\twidth: 350px;\n\n\t&:deep {\n\t\t.emptycontent {\n\t\t\tmargin-top: 5vh !important;\n\t\t\tmargin-bottom: 1.5vh;\n\t\t\t.icon-loading,\n\t\t\t.icon-search {\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\t\t}\n\n\t\t#contactsmenu-search {\n\t\t\twidth: calc(100% - 16px);\n\t\t\tmargin: 8px;\n\t\t\theight: 34px;\n\t\t}\n\n\t\t.content {\n\t\t\t/* fixed max height of the parent container without the search input */\n\t\t\theight: calc(100vh - 50px * 3 - 50px);\n\t\t\tmax-height: calc(50px * 5);\n\t\t\tmin-height: calc(50px * 3.5 - 50px);\n\t\t\toverflow-y: auto;\n\n\t\t\t.footer {\n\t\t\t\ttext-align: center;\n\n\t\t\t\ta {\n\t\t\t\t\tdisplay: block;\n\t\t\t\t\twidth: 100%;\n\t\t\t\t\tpadding: 12px 0;\n\t\t\t\t\topacity: .5;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ta {\n\t\t\tpadding: 2px;\n\n\t\t\t&:focus-visible {\n\t\t\t\tbox-shadow: inset 0 0 0 2px var(--color-main-text) !important; // override rule in core/css/headers.scss #header a:focus-visible\n\t\t\t}\n\t\t}\n\n\t\t.contact {\n\t\t\tdisplay: flex;\n\t\t\tposition: relative;\n\t\t\talign-items: center;\n\t\t\tpadding: 3px 3px 3px 10px;\n\n\t\t\t.avatar {\n\t\t\t\theight: 32px;\n\t\t\t\twidth: 32px;\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\n\t\t\t.body {\n\t\t\t\tflex-grow: 1;\n\t\t\t\tpadding-left: 8px;\n\t\t\t\tmin-width: 0;\n\n\t\t\t\tdiv {\n\t\t\t\t\tposition: relative;\n\t\t\t\t\twidth: 100%;\n\t\t\t\t\toverflow-x: hidden;\n\t\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\t}\n\n\t\t\t\t.last-message, .email-address {\n\t\t\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.top-action, .second-action, .other-actions {\n\t\t\t\twidth: 16px;\n\t\t\t\theight: 16px;\n\t\t\t\topacity: .5;\n\t\t\t\tcursor: pointer;\n\n\t\t\t\t&:not(button) {\n\t\t\t\t\tpadding: 14px;\n\t\t\t\t}\n\t\t\t\timg {\n\t\t\t\t\tfilter: var(--background-invert-if-dark);\n\t\t\t\t}\n\n\t\t\t\t&:hover,\n\t\t\t\t&:active,\n\t\t\t\t&:focus {\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbutton.other-actions {\n\t\t\t\twidth: 44px;\n\n\t\t\t\t&:focus {\n\t\t\t\t\tborder-color: transparent;\n\t\t\t\t\tbox-shadow: 0 0 0 2px var(--color-main-text);\n\t\t\t\t}\n\n\t\t\t\t&:focus-visible {\n\t\t\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/* actions menu */\n\t\t\t.menu {\n\t\t\t\ttop: 47px;\n\t\t\t\tmargin-right: 13px;\n\t\t\t}\n\t\t\t.popovermenu::after {\n\t\t\t\tright: 2px;\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContactsMenu.vue?vue&type=style&index=0&id=1563c388&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContactsMenu.vue?vue&type=style&index=0&id=1563c388&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ContactsMenu.vue?vue&type=template&id=1563c388&scoped=true&\"\nimport script from \"./ContactsMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./ContactsMenu.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ContactsMenu.vue?vue&type=style&index=0&id=1563c388&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1563c388\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcHeaderMenu',{attrs:{\"id\":\"contactsmenu\",\"aria-label\":_vm.t('core', 'Search contacts')},on:{\"open\":_vm.handleOpen},scopedSlots:_vm._u([{key:\"trigger\",fn:function(){return [_c('Contacts',{attrs:{\"size\":20}})]},proxy:true}])},[_vm._v(\" \"),_c('div',{attrs:{\"id\":\"contactsmenu-menu\"}})])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2022 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<nav class=\"app-menu\">\n\t\t<ul class=\"app-menu-main\">\n\t\t\t<li v-for=\"app in mainAppList\"\n\t\t\t\t:key=\"app.id\"\n\t\t\t\t:data-app-id=\"app.id\"\n\t\t\t\tclass=\"app-menu-entry\"\n\t\t\t\t:class=\"{ 'app-menu-entry__active': app.active }\">\n\t\t\t\t<a :href=\"app.href\"\n\t\t\t\t\t:class=\"{ 'has-unread': app.unread > 0 }\"\n\t\t\t\t\t:aria-label=\"appLabel(app)\"\n\t\t\t\t\t:title=\"app.name\"\n\t\t\t\t\t:aria-current=\"app.active ? 'page' : false\"\n\t\t\t\t\t:target=\"app.target ? '_blank' : undefined\"\n\t\t\t\t\t:rel=\"app.target ? 'noopener noreferrer' : undefined\">\n\t\t\t\t\t<img :src=\"app.icon\" alt=\"\">\n\t\t\t\t\t<div class=\"app-menu-entry--label\">\n\t\t\t\t\t\t{{ app.name }}\n\t\t\t\t\t\t<span v-if=\"app.unread > 0\" class=\"hidden-visually unread-counter\">{{ app.unread }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</a>\n\t\t\t</li>\n\t\t</ul>\n\t\t<NcActions class=\"app-menu-more\" :aria-label=\"t('core', 'More apps')\">\n\t\t\t<NcActionLink v-for=\"app in popoverAppList\"\n\t\t\t\t:key=\"app.id\"\n\t\t\t\t:aria-label=\"appLabel(app)\"\n\t\t\t\t:aria-current=\"app.active ? 'page' : false\"\n\t\t\t\t:href=\"app.href\"\n\t\t\t\tclass=\"app-menu-popover-entry\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<div class=\"app-icon\" :class=\"{ 'has-unread': app.unread > 0 }\">\n\t\t\t\t\t\t<img :src=\"app.icon\" alt=\"\">\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\t\t\t\t{{ app.name }}\n\t\t\t\t<span v-if=\"app.unread > 0\" class=\"hidden-visually unread-counter\">{{ app.unread }}</span>\n\t\t\t</NcActionLink>\n\t\t</NcActions>\n\t</nav>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions'\nimport NcActionLink from '@nextcloud/vue/dist/Components/NcActionLink'\n\nexport default {\n\tname: 'AppMenu',\n\tcomponents: {\n\t\tNcActions, NcActionLink,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tapps: loadState('core', 'apps', {}),\n\t\t\tappLimit: 0,\n\t\t\tobserver: null,\n\t\t}\n\t},\n\tcomputed: {\n\t\tappList() {\n\t\t\treturn Object.values(this.apps)\n\t\t},\n\t\tmainAppList() {\n\t\t\treturn this.appList.slice(0, this.appLimit)\n\t\t},\n\t\tpopoverAppList() {\n\t\t\treturn this.appList.slice(this.appLimit)\n\t\t},\n\t\tappLabel() {\n\t\t\treturn (app) => app.name\n\t\t\t\t+ (app.active ? ' (' + t('core', 'Currently open') + ')' : '')\n\t\t\t\t+ (app.unread > 0 ? ' (' + n('core', '{count} notification', '{count} notifications', app.unread, { count: app.unread }) + ')' : '')\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.observer = new ResizeObserver(this.resize)\n\t\tthis.observer.observe(this.$el)\n\t\tthis.resize()\n\t\tsubscribe('nextcloud:app-menu.refresh', this.setApps)\n\t},\n\tbeforeDestroy() {\n\t\tthis.observer.disconnect()\n\t\tunsubscribe('nextcloud:app-menu.refresh', this.setApps)\n\t},\n\tmethods: {\n\t\tsetNavigationCounter(id, counter) {\n\t\t\tthis.$set(this.apps[id], 'unread', counter)\n\t\t},\n\t\tsetApps({ apps }) {\n\t\t\tthis.apps = apps\n\t\t},\n\t\tresize() {\n\t\t\tconst availableWidth = this.$el.offsetWidth\n\t\t\tlet appCount = Math.floor(availableWidth / 50) - 1\n\t\t\tconst popoverAppCount = this.appList.length - appCount\n\t\t\tif (popoverAppCount === 1) {\n\t\t\t\tappCount--\n\t\t\t}\n\t\t\tif (appCount < 1) {\n\t\t\t\tappCount = 0\n\t\t\t}\n\t\t\tthis.appLimit = appCount\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$header-icon-size: 20px;\n\n.app-menu {\n\twidth: 100%;\n\tdisplay: flex;\n\tflex-shrink: 1;\n\tflex-wrap: wrap;\n}\n.app-menu-main {\n\tdisplay: flex;\n\tflex-wrap: nowrap;\n\n\t.app-menu-entry {\n\t\twidth: 50px;\n\t\theight: 50px;\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t\topacity: .7;\n\n\t\t&.app-menu-entry__active {\n\t\t\topacity: 1;\n\n\t\t\t&::before {\n\t\t\t\tcontent: \" \";\n\t\t\t\tposition: absolute;\n\t\t\t\tpointer-events: none;\n\t\t\t\tborder-bottom-color: var(--color-main-background);\n\t\t\t\ttransform: translateX(-50%);\n\t\t\t\twidth: 12px;\n\t\t\t\theight: 5px;\n\t\t\t\tborder-radius: 3px;\n\t\t\t\tbackground-color: var(--color-primary-text);\n\t\t\t\tleft: 50%;\n\t\t\t\tbottom: 6px;\n\t\t\t\tdisplay: block;\n\t\t\t\ttransition: all 0.1s ease-in-out;\n\t\t\t\topacity: 1;\n\t\t\t}\n\n\t\t\t.app-menu-entry--label {\n\t\t\t\tfont-weight: bold;\n\t\t\t}\n\t\t}\n\n\t\ta {\n\t\t\twidth: calc(100% - 4px);\n\t\t\theight: calc(100% - 4px);\n\t\t\tmargin: 2px;\n\t\t\tcolor: var(--color-primary-text);\n\t\t\tposition: relative;\n\t\t}\n\n\t\timg {\n\t\t\ttransition: margin 0.1s ease-in-out;\n\t\t\twidth: $header-icon-size;\n\t\t\theight: $header-icon-size;\n\t\t\tpadding: calc((100% - $header-icon-size) / 2);\n\t\t\tbox-sizing: content-box;\n\t\t\tfilter: var(--background-image-invert-if-bright);\n\t\t}\n\n\t\t.app-menu-entry--label {\n\t\t\topacity: 0;\n\t\t\tposition: absolute;\n\t\t\tfont-size: 12px;\n\t\t\tcolor: var(--color-primary-text);\n\t\t\ttext-align: center;\n\t\t\tleft: 50%;\n\t\t\ttop: 45%;\n\t\t\tdisplay: block;\n\t\t\tmin-width: 100%;\n\t\t\ttransform: translateX(-50%);\n\t\t\ttransition: all 0.1s ease-in-out;\n\t\t\twidth: 100%;\n\t\t\ttext-overflow: ellipsis;\n\t\t\toverflow: hidden;\n\t\t\tletter-spacing: -0.5px;\n\t\t}\n\n\t\t&:hover,\n\t\t&:focus-within {\n\t\t\topacity: 1;\n\t\t\t.app-menu-entry--label {\n\t\t\t\topacity: 1;\n\t\t\t\tfont-weight: bolder;\n\t\t\t\tbottom: 0;\n\t\t\t\twidth: 100%;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t}\n\n\t}\n\n\t// Show labels\n\t&:hover,\n\t&:focus-within,\n\t.app-menu-entry:hover,\n\t.app-menu-entry:focus {\n\t\topacity: 1;\n\n\t\timg {\n\t\t\tmargin-top: -8px;\n\t\t}\n\n\t\t.app-menu-entry--label {\n\t\t\topacity: 1;\n\t\t\tbottom: 0;\n\t\t}\n\n\t\t&::before, .app-menu-entry::before {\n\t\t\topacity: 0;\n\t\t}\n\t}\n}\n\n::v-deep .app-menu-more .button-vue--vue-tertiary {\n\topacity: .7;\n\tmargin: 3px;\n\tfilter: var(--background-image-invert-if-bright);\n\n\t/* Remove all background and align text color if not expanded */\n\t&:not([aria-expanded=\"true\"]) {\n\t\tcolor: var(--color-primary-text);\n\n\t\t&:hover {\n\t\t\topacity: 1;\n\t\t\tbackground-color: transparent !important;\n\t\t}\n\t}\n\n\t&:focus-visible {\n\t\topacity: 1;\n\t\toutline: none !important;\n\t}\n}\n\n.app-menu-popover-entry {\n\t.app-icon {\n\t\tposition: relative;\n\t\theight: 44px;\n\t\t/* Icons are bright so invert them if bright color theme == bright background is used */\n\t\tfilter: var(--background-invert-if-bright);\n\n\t\t&.has-unread::after {\n\t\t\tbackground-color: var(--color-main-text);\n\t\t}\n\n\t\timg {\n\t\t\twidth: $header-icon-size;\n\t\t\theight: $header-icon-size;\n\t\t\tpadding: calc((50px - $header-icon-size) / 2);\n\t\t}\n\t}\n}\n\n.has-unread::after {\n\tcontent: \"\";\n\twidth: 8px;\n\theight: 8px;\n\tbackground-color: var(--color-primary-text);\n\tborder-radius: 50%;\n\tposition: absolute;\n\tdisplay: block;\n\ttop: 10px;\n\tright: 10px;\n}\n\n.unread-counter {\n\tdisplay: none;\n}\n</style>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppMenu.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppMenu.vue?vue&type=style&index=0&id=b778f520&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppMenu.vue?vue&type=style&index=0&id=b778f520&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppMenu.vue?vue&type=template&id=b778f520&scoped=true&\"\nimport script from \"./AppMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./AppMenu.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AppMenu.vue?vue&type=style&index=0&id=b778f520&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b778f520\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('nav',{staticClass:\"app-menu\"},[_c('ul',{staticClass:\"app-menu-main\"},_vm._l((_vm.mainAppList),function(app){return _c('li',{key:app.id,staticClass:\"app-menu-entry\",class:{ 'app-menu-entry__active': app.active },attrs:{\"data-app-id\":app.id}},[_c('a',{class:{ 'has-unread': app.unread > 0 },attrs:{\"href\":app.href,\"aria-label\":_vm.appLabel(app),\"title\":app.name,\"aria-current\":app.active ? 'page' : false,\"target\":app.target ? '_blank' : undefined,\"rel\":app.target ? 'noopener noreferrer' : undefined}},[_c('img',{attrs:{\"src\":app.icon,\"alt\":\"\"}}),_vm._v(\" \"),_c('div',{staticClass:\"app-menu-entry--label\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(app.name)+\"\\n\\t\\t\\t\\t\\t\"),(app.unread > 0)?_c('span',{staticClass:\"hidden-visually unread-counter\"},[_vm._v(_vm._s(app.unread))]):_vm._e()])])])}),0),_vm._v(\" \"),_c('NcActions',{staticClass:\"app-menu-more\",attrs:{\"aria-label\":_vm.t('core', 'More apps')}},_vm._l((_vm.popoverAppList),function(app){return _c('NcActionLink',{key:app.id,staticClass:\"app-menu-popover-entry\",attrs:{\"aria-label\":_vm.appLabel(app),\"aria-current\":app.active ? 'page' : false,\"href\":app.href},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('div',{staticClass:\"app-icon\",class:{ 'has-unread': app.unread > 0 }},[_c('img',{attrs:{\"src\":app.icon,\"alt\":\"\"}})])]},proxy:true}],null,true)},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(app.name)+\"\\n\\t\\t\\t\"),(app.unread > 0)?_c('span',{staticClass:\"hidden-visually unread-counter\"},[_vm._v(_vm._s(app.unread))]):_vm._e()])}),1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2023 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n-->\n\n<template>\n\t<li :id=\"id\"\n\t\tclass=\"menu-entry\">\n\t\t<a v-if=\"href\"\n\t\t\t:href=\"href\"\n\t\t\t:class=\"{ active }\"\n\t\t\t@click.exact=\"handleClick\">\n\t\t\t<NcLoadingIcon v-if=\"loading\"\n\t\t\t\tclass=\"menu-entry__loading-icon\"\n\t\t\t\t:size=\"18\" />\n\t\t\t<img v-else :src=\"cachedIcon\" alt=\"\" />\n\t\t\t{{ name }}\n\t\t</a>\n\t\t<button v-else>\n\t\t\t<img :src=\"cachedIcon\" alt=\"\" />\n\t\t\t{{ name }}\n\t\t</button>\n\t</li>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\n\nconst versionHash = loadState('core', 'versionHash', '')\n\nexport default {\n\tname: 'UserMenuEntry',\n\n\tcomponents: {\n\t\tNcLoadingIcon,\n\t},\n\n\tprops: {\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\thref: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcachedIcon() {\n\t\t\treturn `${this.icon}?v=${versionHash}`\n\t\t},\n\t},\n\n\tmethods: {\n\t\thandleClick() {\n\t\t\tthis.loading = true\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.menu-entry {\n\t&__loading-icon {\n\t\tmargin-right: 8px;\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenuEntry.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenuEntry.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenuEntry.vue?vue&type=style&index=0&id=6e59d13c&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenuEntry.vue?vue&type=style&index=0&id=6e59d13c&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserMenuEntry.vue?vue&type=template&id=6e59d13c&scoped=true&\"\nimport script from \"./UserMenuEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./UserMenuEntry.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserMenuEntry.vue?vue&type=style&index=0&id=6e59d13c&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6e59d13c\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('li',{staticClass:\"menu-entry\",attrs:{\"id\":_vm.id}},[(_vm.href)?_c('a',{class:{ active: _vm.active },attrs:{\"href\":_vm.href},on:{\"click\":function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey)return null;return _vm.handleClick.apply(null, arguments)}}},[(_vm.loading)?_c('NcLoadingIcon',{staticClass:\"menu-entry__loading-icon\",attrs:{\"size\":18}}):_c('img',{attrs:{\"src\":_vm.cachedIcon,\"alt\":\"\"}}),_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.name)+\"\\n\\t\")],1):_c('button',[_c('img',{attrs:{\"src\":_vm.cachedIcon,\"alt\":\"\"}}),_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.name)+\"\\n\\t\")])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2023 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n-->\n\n<template>\n\t<NcHeaderMenu id=\"user-menu\"\n\t\tclass=\"user-menu\"\n\t\t:aria-label=\"t('core', 'Open settings menu')\">\n\t\t<template #trigger>\n\t\t\t<NcAvatar class=\"user-menu__avatar\"\n\t\t\t\t:disable-menu=\"true\"\n\t\t\t\t:disable-tooltip=\"true\"\n\t\t\t\t:user=\"userId\" />\n\t\t</template>\n\t\t<nav class=\"user-menu__nav\"\n\t\t\t:aria-label=\"t('core', 'Settings menu')\">\n\t\t\t<ul>\n\t\t\t\t<UserMenuEntry v-for=\"entry in settingsNavEntries\"\n\t\t\t\t\tv-bind=\"entry\"\n\t\t\t\t\t:key=\"entry.id\" />\n\t\t\t</ul>\n\t\t</nav>\n\t</NcHeaderMenu>\n</template>\n\n<script>\nimport { emit } from '@nextcloud/event-bus'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { loadState } from '@nextcloud/initial-state'\n\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js'\nimport NcHeaderMenu from '@nextcloud/vue/dist/Components/NcHeaderMenu.js'\n\nimport UserMenuEntry from '../components/UserMenu/UserMenuEntry.vue'\n\nconst settingsNavEntries = loadState('core', 'settingsNavEntries', [])\n\nexport default {\n\tname: 'UserMenu',\n\n\tcomponents: {\n\t\tNcAvatar,\n\t\tNcHeaderMenu,\n\t\tUserMenuEntry,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tsettingsNavEntries,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t}\n\t},\n\n\tmounted() {\n\t\temit('core:user-menu:mounted')\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.user-menu {\n\tmargin-right: 12px;\n\n\t&:deep {\n\t\t.header-menu {\n\t\t\t&__trigger {\n\t\t\t\topacity: 1 !important;\n\t\t\t\t&:focus-visible {\n\t\t\t\t\t.user-menu__avatar {\n\t\t\t\t\t\tborder: 2px solid var(--color-primary-text);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&__carret {\n\t\t\t\tdisplay: none !important;\n\t\t\t}\n\n\t\t\t&__content {\n\t\t\t\twidth: fit-content !important;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__avatar {\n\t\t&:active,\n\t\t&:focus,\n\t\t&:hover {\n\t\t\tborder: 2px solid var(--color-primary-text);\n\t\t}\n\t}\n\n\t&__nav {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\n\t\tul {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tgap: 2px;\n\n\t\t\t&:deep {\n\t\t\t\tli {\n\t\t\t\t\ta,\n\t\t\t\t\tbutton {\n\t\t\t\t\t\tborder-radius: 6px;\n\t\t\t\t\t\tdisplay: inline-flex;\n\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\theight: var(--header-menu-item-height);\n\t\t\t\t\t\tcolor: var(--color-main-text);\n\t\t\t\t\t\tpadding: 10px 8px;\n\t\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\twidth: 100%;\n\n\t\t\t\t\t\t&:hover {\n\t\t\t\t\t\t\tbackground-color: var(--color-background-hover);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t&:focus-visible {\n\t\t\t\t\t\t\tbackground-color: var(--color-background-hover) !important;\n\t\t\t\t\t\t\tbox-shadow: inset 0 0 0 2px var(--color-primary) !important;\n\t\t\t\t\t\t\toutline: none !important;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t&:active,\n\t\t\t\t\t\t&.active {\n\t\t\t\t\t\t\tbackground-color: var(--color-primary-light);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tspan {\n\t\t\t\t\t\t\tpadding-bottom: 0;\n\t\t\t\t\t\t\tcolor: var(--color-main-text);\n\t\t\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\t\t\toverflow: hidden;\n\t\t\t\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\t\t\t\tmax-width: 110px;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\timg {\n\t\t\t\t\t\t\twidth: 16px;\n\t\t\t\t\t\t\theight: 16px;\n\t\t\t\t\t\t\tmargin-right: 10px;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\timg,\n\t\t\t\t\t\tsvg {\n\t\t\t\t\t\t\topacity: .7;\n\t\t\t\t\t\t\tfilter: var(--background-invert-if-dark);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override global button styles\n\t\t\t\t\tbutton {\n\t\t\t\t\t\tbackground-color: transparent;\n\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\tmargin: 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenu.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenu.vue?vue&type=style&index=0&id=6a818bbc&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserMenu.vue?vue&type=style&index=0&id=6a818bbc&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserMenu.vue?vue&type=template&id=6a818bbc&scoped=true&\"\nimport script from \"./UserMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./UserMenu.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserMenu.vue?vue&type=style&index=0&id=6a818bbc&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6a818bbc\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcHeaderMenu',{staticClass:\"user-menu\",attrs:{\"id\":\"user-menu\",\"aria-label\":_vm.t('core', 'Open settings menu')},scopedSlots:_vm._u([{key:\"trigger\",fn:function(){return [_c('NcAvatar',{staticClass:\"user-menu__avatar\",attrs:{\"disable-menu\":true,\"disable-tooltip\":true,\"user\":_vm.userId}})]},proxy:true}])},[_vm._v(\" \"),_c('nav',{staticClass:\"user-menu__nav\",attrs:{\"aria-label\":_vm.t('core', 'Settings menu')}},[_c('ul',_vm._l((_vm.settingsNavEntries),function(entry){return _c('UserMenuEntry',_vm._b({key:entry.id},'UserMenuEntry',entry,false))}),1)])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Jan-Christoph Borchardt <hey@jancborchardt.net>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author nacho <nacho@ownyourbits.com>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* globals Snap */\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport moment from 'moment'\n\nimport { initSessionHeartBeat } from './session-heartbeat.js'\nimport OC from './OC/index.js'\nimport { setUp as setUpContactsMenu } from './components/ContactsMenu.js'\nimport { setUp as setUpMainMenu } from './components/MainMenu.js'\nimport { setUp as setUpUserMenu } from './components/UserMenu.js'\nimport PasswordConfirmation from './OC/password-confirmation.js'\n\n// keep in sync with core/css/variables.scss\nconst breakpointMobileWidth = 1024\n\nconst initLiveTimestamps = () => {\n\t// Update live timestamps every 30 seconds\n\tsetInterval(() => {\n\t\t$('.live-relative-timestamp').each(function() {\n\t\t\tconst timestamp = parseInt($(this).attr('data-timestamp'), 10)\n\t\t\t$(this).text(moment(timestamp).fromNow())\n\t\t})\n\t}, 30 * 1000)\n}\n\n/**\n * Moment doesn't have aliases for every locale and doesn't parse some locale IDs correctly so we need to alias them\n */\nconst localeAliases = {\n\tzh: 'zh-cn',\n\tzh_Hans: 'zh-cn',\n\tzh_Hans_CN: 'zh-cn',\n\tzh_Hans_HK: 'zh-cn',\n\tzh_Hans_MO: 'zh-cn',\n\tzh_Hans_SG: 'zh-cn',\n\tzh_Hant: 'zh-hk',\n\tzh_Hant_HK: 'zh-hk',\n\tzh_Hant_MO: 'zh-mo',\n\tzh_Hant_TW: 'zh-tw',\n}\nlet locale = OC.getLocale()\nif (Object.prototype.hasOwnProperty.call(localeAliases, locale)) {\n\tlocale = localeAliases[locale]\n}\n\n/**\n * Set users locale to moment.js as soon as possible\n */\nmoment.locale(locale)\n\n/**\n * Initializes core\n */\nexport const initCore = () => {\n\t$(window).on('unload.main', () => { OC._unloadCalled = true })\n\t$(window).on('beforeunload.main', () => {\n\t\t// super-trick thanks to http://stackoverflow.com/a/4651049\n\t\t// in case another handler displays a confirmation dialog (ex: navigating away\n\t\t// during an upload), there are two possible outcomes: user clicked \"ok\" or\n\t\t// \"cancel\"\n\n\t\t// first timeout handler is called after unload dialog is closed\n\t\tsetTimeout(() => {\n\t\t\tOC._userIsNavigatingAway = true\n\n\t\t\t// second timeout event is only called if user cancelled (Chrome),\n\t\t\t// but in other browsers it might still be triggered, so need to\n\t\t\t// set a higher delay...\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (!OC._unloadCalled) {\n\t\t\t\t\tOC._userIsNavigatingAway = false\n\t\t\t\t}\n\t\t\t}, 10000)\n\t\t}, 1)\n\t})\n\t$(document).on('ajaxError.main', function(event, request, settings) {\n\t\tif (settings && settings.allowAuthErrors) {\n\t\t\treturn\n\t\t}\n\t\tOC._processAjaxError(request)\n\t})\n\n\tinitSessionHeartBeat()\n\n\tOC.registerMenu($('#expand'), $('#expanddiv'), false, true)\n\n\t// toggle for menus\n\t$(document).on('mouseup.closemenus', event => {\n\t\tconst $el = $(event.target)\n\t\tif ($el.closest('.menu').length || $el.closest('.menutoggle').length) {\n\t\t\t// don't close when clicking on the menu directly or a menu toggle\n\t\t\treturn false\n\t\t}\n\n\t\tOC.hideMenus()\n\t})\n\n\tsetUpMainMenu()\n\tsetUpUserMenu()\n\tsetUpContactsMenu()\n\n\t// just add snapper for logged in users\n\t// and if the app doesn't handle the nav slider itself\n\tif ($('#app-navigation').length && !$('html').hasClass('lte9')\n\t\t&& !$('#app-content').hasClass('no-snapper')) {\n\n\t\t// App sidebar on mobile\n\t\tconst snapper = new Snap({\n\t\t\telement: document.getElementById('app-content'),\n\t\t\tdisable: 'right',\n\t\t\tmaxPosition: 300, // $navigation-width\n\t\t\tminDragDistance: 100,\n\t\t})\n\n\t\t$('#app-content').prepend('<div id=\"app-navigation-toggle\" class=\"icon-menu\" style=\"display:none\" tabindex=\"0\"></div>')\n\n\t\t// keep track whether snapper is currently animating, and\n\t\t// prevent to call open or close while that is the case\n\t\t// to avoid duplicating events (snap.js doesn't check this)\n\t\tlet animating = false\n\t\tsnapper.on('animating', () => {\n\t\t\t// we need this because the trigger button\n\t\t\t// is also implicitly wired to close by snapper\n\t\t\tanimating = true\n\t\t})\n\t\tsnapper.on('animated', () => {\n\t\t\tanimating = false\n\t\t})\n\t\tsnapper.on('start', () => {\n\t\t\t// we need this because dragging triggers that\n\t\t\tanimating = true\n\t\t})\n\t\tsnapper.on('end', () => {\n\t\t\t// we need this because dragging stop triggers that\n\t\t\tanimating = false\n\t\t})\n\n\t\t// These are necessary because calling open or close\n\t\t// on snapper during an animation makes it trigger an\n\t\t// unfinishable animation, which itself will continue\n\t\t// triggering animating events and cause high CPU load,\n\t\t//\n\t\t// Ref https://github.com/jakiestfu/Snap.js/issues/216\n\t\tconst oldSnapperOpen = snapper.open\n\t\tconst oldSnapperClose = snapper.close\n\t\tconst _snapperOpen = () => {\n\t\t\tif (animating || snapper.state().state !== 'closed') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\toldSnapperOpen('left')\n\t\t}\n\n\t\tconst _snapperClose = () => {\n\t\t\tif (animating || snapper.state().state === 'closed') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\toldSnapperClose()\n\t\t}\n\n\t\t// Needs to be deferred to properly catch in-between\n\t\t// events that snap.js is triggering after dragging.\n\t\t//\n\t\t// Skipped when running unit tests as we are not testing\n\t\t// the snap.js workarounds...\n\t\tif (!window.TESTING) {\n\t\t\tsnapper.open = () => {\n\t\t\t\t_.defer(_snapperOpen)\n\t\t\t}\n\t\t\tsnapper.close = () => {\n\t\t\t\t_.defer(_snapperClose)\n\t\t\t}\n\t\t}\n\n\t\t$('#app-navigation-toggle').click((e) => {\n\t\t\t// close is implicit in the button by snap.js\n\t\t\tif (snapper.state().state !== 'left') {\n\t\t\t\tsnapper.open()\n\t\t\t}\n\t\t})\n\t\t$('#app-navigation-toggle').keypress(e => {\n\t\t\tif (snapper.state().state === 'left') {\n\t\t\t\tsnapper.close()\n\t\t\t} else {\n\t\t\t\tsnapper.open()\n\t\t\t}\n\t\t})\n\n\t\t// close sidebar when switching navigation entry\n\t\tconst $appNavigation = $('#app-navigation')\n\t\t$appNavigation.delegate('a, :button', 'click', event => {\n\t\t\tconst $target = $(event.target)\n\t\t\t// don't hide navigation when changing settings or adding things\n\t\t\tif ($target.is('.app-navigation-noclose')\n\t\t\t\t|| $target.closest('.app-navigation-noclose').length) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif ($target.is('.app-navigation-entry-utils-menu-button')\n\t\t\t\t|| $target.closest('.app-navigation-entry-utils-menu-button').length) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif ($target.is('.add-new')\n\t\t\t\t|| $target.closest('.add-new').length) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif ($target.is('#app-settings')\n\t\t\t\t|| $target.closest('#app-settings').length) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tsnapper.close()\n\t\t})\n\n\t\tlet navigationBarSlideGestureEnabled = false\n\t\tlet navigationBarSlideGestureAllowed = true\n\t\tlet navigationBarSlideGestureEnablePending = false\n\n\t\tOC.allowNavigationBarSlideGesture = () => {\n\t\t\tnavigationBarSlideGestureAllowed = true\n\n\t\t\tif (navigationBarSlideGestureEnablePending) {\n\t\t\t\tsnapper.enable()\n\n\t\t\t\tnavigationBarSlideGestureEnabled = true\n\t\t\t\tnavigationBarSlideGestureEnablePending = false\n\t\t\t}\n\t\t}\n\n\t\tOC.disallowNavigationBarSlideGesture = () => {\n\t\t\tnavigationBarSlideGestureAllowed = false\n\n\t\t\tif (navigationBarSlideGestureEnabled) {\n\t\t\t\tconst endCurrentDrag = true\n\t\t\t\tsnapper.disable(endCurrentDrag)\n\n\t\t\t\tnavigationBarSlideGestureEnabled = false\n\t\t\t\tnavigationBarSlideGestureEnablePending = true\n\t\t\t}\n\t\t}\n\n\t\tconst toggleSnapperOnSize = () => {\n\t\t\tif ($(window).width() > breakpointMobileWidth) {\n\t\t\t\tsnapper.close()\n\t\t\t\tsnapper.disable()\n\n\t\t\t\tnavigationBarSlideGestureEnabled = false\n\t\t\t\tnavigationBarSlideGestureEnablePending = false\n\t\t\t} else if (navigationBarSlideGestureAllowed) {\n\t\t\t\tsnapper.enable()\n\n\t\t\t\tnavigationBarSlideGestureEnabled = true\n\t\t\t\tnavigationBarSlideGestureEnablePending = false\n\t\t\t} else {\n\t\t\t\tnavigationBarSlideGestureEnablePending = true\n\t\t\t}\n\t\t}\n\n\t\t$(window).resize(_.debounce(toggleSnapperOnSize, 250))\n\n\t\t// initial call\n\t\ttoggleSnapperOnSize()\n\n\t}\n\n\tinitLiveTimestamps()\n\tPasswordConfirmation.init()\n}\n","/**\n * @copyright 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n$.prototype.tooltip = (function(tooltip) {\n\treturn function(config) {\n\t\ttry {\n\t\t\treturn tooltip.call(this, config)\n\t\t} catch (ex) {\n\t\t\tif (ex instanceof TypeError && config === 'destroy') {\n\t\t\t\tif (window.TESTING === undefined) {\n\t\t\t\t\tconsole.error('Deprecated call $.tooltip(\\'destroy\\') has been deprecated and should be removed')\n\t\t\t\t}\n\t\t\t\treturn tooltip.call(this, 'dispose')\n\t\t\t}\n\t\t\tif (ex instanceof TypeError && config === 'fixTitle') {\n\t\t\t\tif (window.TESTING === undefined) {\n\t\t\t\t\tconsole.error('Deprecated call $.tooltip(\\'fixTitle\\') has been deprecated and should be removed')\n\t\t\t\t}\n\t\t\t\treturn tooltip.call(this, '_fixTitle')\n\t\t\t}\n\t\t}\n\t}\n})($.prototype.tooltip)\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\n\nimport UserMenu from '../views/UserMenu.vue'\n\nexport const setUp = () => {\n\tconst mountPoint = document.getElementById('user-menu')\n\tif (mountPoint) {\n\t\t// eslint-disable-next-line no-new\n\t\tnew Vue({\n\t\t\tel: mountPoint,\n\t\t\trender: h => h(UserMenu),\n\t\t})\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n'\nimport Vue from 'vue'\n\nimport AppMenu from './AppMenu.vue'\n\nexport const setUp = () => {\n\n\tVue.mixin({\n\t\tmethods: {\n\t\t\tt,\n\t\t\tn,\n\t\t},\n\t})\n\n\tconst container = document.getElementById('header-left__appmenu')\n\tif (!container) {\n\t\t// no container, possibly we're on a public page\n\t\treturn\n\t}\n\tconst AppMenuApp = Vue.extend(AppMenu)\n\tconst appMenu = new AppMenuApp({}).$mount(container)\n\n\tObject.assign(OC, {\n\t\tsetNavigationCounter(id, counter) {\n\t\t\tappMenu.setNavigationCounter(id, counter)\n\t\t},\n\t})\n\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Christopher Ng <chrng8@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\n\nimport ContactsMenu from '../views/ContactsMenu.vue'\n\n/**\n * @todo move to contacts menu code https://github.com/orgs/nextcloud/projects/31#card-21213129\n */\nexport const setUp = () => {\n\tconst mountPoint = document.getElementById('contactsmenu')\n\tif (mountPoint) {\n\t\t// eslint-disable-next-line no-new\n\t\tnew Vue({\n\t\t\tel: mountPoint,\n\t\t\trender: h => h(ContactsMenu),\n\t\t})\n\t}\n}\n","/**\n * @copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/*\n * Detects links:\n * Either the http(s) protocol is given or two strings, basically limited to ascii with the last\n * word being at least one digit long,\n * followed by at least another character\n *\n * The downside: anything not ascii is excluded. Not sure how common it is in areas using different\n * alphabets… the upside: fake domains with similar looking characters won't be formatted as links\n *\n * This is a copy of the backend regex in IURLGenerator, make sure to adjust both when changing\n */\nconst urlRegex = /(\\s|^)(https?:\\/\\/)((?:[-A-Z0-9+_]+\\.)+[-A-Z]+(?:\\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*)(\\s|$)/ig\n\n/**\n * @param {any} content -\n */\nexport function plainToRich(content) {\n\treturn this.formatLinksRich(content)\n}\n\n/**\n * @param {any} content -\n */\nexport function richToPlain(content) {\n\treturn this.formatLinksPlain(content)\n}\n\n/**\n * @param {any} content -\n */\nexport function formatLinksRich(content) {\n\treturn content.replace(urlRegex, function(_, leadingSpace, protocol, url, trailingSpace) {\n\t\tlet linkText = url\n\t\tif (!protocol) {\n\t\t\tprotocol = 'https://'\n\t\t} else if (protocol === 'http://') {\n\t\t\tlinkText = protocol + url\n\t\t}\n\n\t\treturn leadingSpace + '<a class=\"external\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"' + protocol + url + '\">' + linkText + '</a>' + trailingSpace\n\t})\n}\n\n/**\n * @param {any} content -\n */\nexport function formatLinksPlain(content) {\n\tconst $content = $('<div></div>').html(content)\n\t$content.find('a').each(function() {\n\t\tconst $this = $(this)\n\t\t$this.html($this.attr('href'))\n\t})\n\treturn $content.html()\n}\n","/**\n * @copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * @param {any} options -\n */\nexport function query(options) {\n\toptions = options || {}\n\tconst dismissOptions = options.dismiss || {}\n\t$.ajax({\n\t\ttype: 'GET',\n\t\turl: options.url || generateOcsUrl('core/whatsnew?format=json'),\n\t\tsuccess: options.success || function(data, statusText, xhr) {\n\t\t\tonQuerySuccess(data, statusText, xhr, dismissOptions)\n\t\t},\n\t\terror: options.error || onQueryError,\n\t})\n}\n\n/**\n * @param {any} version -\n * @param {any} options -\n */\nexport function dismiss(version, options) {\n\toptions = options || {}\n\t$.ajax({\n\t\ttype: 'POST',\n\t\turl: options.url || generateOcsUrl('core/whatsnew'),\n\t\tdata: { version: encodeURIComponent(version) },\n\t\tsuccess: options.success || onDismissSuccess,\n\t\terror: options.error || onDismissError,\n\t})\n\t// remove element immediately\n\t$('.whatsNewPopover').remove()\n}\n\n/**\n * @param {any} data -\n * @param {any} statusText -\n * @param {any} xhr -\n * @param {any} dismissOptions -\n */\nfunction onQuerySuccess(data, statusText, xhr, dismissOptions) {\n\tconsole.debug('querying Whats New data was successful: ' + statusText)\n\tconsole.debug(data)\n\n\tif (xhr.status !== 200) {\n\t\treturn\n\t}\n\n\tlet item, menuItem, text, icon\n\n\tconst div = document.createElement('div')\n\tdiv.classList.add('popovermenu', 'open', 'whatsNewPopover', 'menu-left')\n\n\tconst list = document.createElement('ul')\n\n\t// header\n\titem = document.createElement('li')\n\tmenuItem = document.createElement('span')\n\tmenuItem.className = 'menuitem'\n\n\ttext = document.createElement('span')\n\ttext.innerText = t('core', 'New in') + ' ' + data.ocs.data.product\n\ttext.className = 'caption'\n\tmenuItem.appendChild(text)\n\n\ticon = document.createElement('span')\n\ticon.className = 'icon-close'\n\ticon.onclick = function() {\n\t\tdismiss(data.ocs.data.version, dismissOptions)\n\t}\n\tmenuItem.appendChild(icon)\n\n\titem.appendChild(menuItem)\n\tlist.appendChild(item)\n\n\t// Highlights\n\tfor (const i in data.ocs.data.whatsNew.regular) {\n\t\tconst whatsNewTextItem = data.ocs.data.whatsNew.regular[i]\n\t\titem = document.createElement('li')\n\n\t\tmenuItem = document.createElement('span')\n\t\tmenuItem.className = 'menuitem'\n\n\t\ticon = document.createElement('span')\n\t\ticon.className = 'icon-checkmark'\n\t\tmenuItem.appendChild(icon)\n\n\t\ttext = document.createElement('p')\n\t\ttext.innerHTML = _.escape(whatsNewTextItem)\n\t\tmenuItem.appendChild(text)\n\n\t\titem.appendChild(menuItem)\n\t\tlist.appendChild(item)\n\t}\n\n\t// Changelog URL\n\tif (!_.isUndefined(data.ocs.data.changelogURL)) {\n\t\titem = document.createElement('li')\n\n\t\tmenuItem = document.createElement('a')\n\t\tmenuItem.href = data.ocs.data.changelogURL\n\t\tmenuItem.rel = 'noreferrer noopener'\n\t\tmenuItem.target = '_blank'\n\n\t\ticon = document.createElement('span')\n\t\ticon.className = 'icon-link'\n\t\tmenuItem.appendChild(icon)\n\n\t\ttext = document.createElement('span')\n\t\ttext.innerText = t('core', 'View changelog')\n\t\tmenuItem.appendChild(text)\n\n\t\titem.appendChild(menuItem)\n\t\tlist.appendChild(item)\n\t}\n\n\tdiv.appendChild(list)\n\tdocument.body.appendChild(div)\n}\n\n/**\n * @param {any} x -\n * @param {any} t -\n * @param {any} e -\n */\nfunction onQueryError(x, t, e) {\n\tconsole.debug('querying Whats New Data resulted in an error: ' + t + e)\n\tconsole.debug(x)\n}\n\n/**\n * @param {any} data -\n */\nfunction onDismissSuccess(data) {\n\t// noop\n}\n\n/**\n * @param {any} data -\n */\nfunction onDismissError(data) {\n\tconsole.debug('dismissing Whats New data resulted in an error: ' + data)\n}\n","/**\n * @copyright Copyright (c) 2022 Joas Schilling <coding@schilljs.com>\n *\n * @author Joas Schilling <coding@schilljs.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\n\n/**\n * Set the page heading\n *\n * @param {string} heading page title from the history api\n */\nexport function setPageHeading(heading) {\n\tconst headingEl = document.getElementById('page-heading-level-1')\n\tif (headingEl) {\n\t\theadingEl.textContent = heading\n\t}\n}\nexport default {\n\t/**\n\t * @return {boolean} Whether the user opted-out of shortcuts so that they should not be registered\n\t */\n\tdisableKeyboardShortcuts() {\n\t\treturn loadState('theming', 'shortcutsDisabled', false)\n\t},\n\tsetPageHeading,\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable @nextcloud/no-deprecations */\nimport { initCore } from './init'\n\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport 'jquery-migrate/dist/jquery-migrate.min'\n// TODO: switch to `jquery-ui` package and import widgets and effects individually\n// `jquery-ui-dist` is used as a workaround for the issue of missing effects\nimport 'jquery-ui-dist/jquery-ui'\nimport 'jquery-ui-dist/jquery-ui.css'\nimport 'jquery-ui-dist/jquery-ui.theme.css'\n// END TODO\nimport autosize from 'autosize'\nimport Backbone from 'backbone'\nimport './Polyfill/tooltip'\nimport ClipboardJS from 'clipboard'\nimport { dav } from 'davclient.js'\nimport Handlebars from 'handlebars'\nimport md5 from 'blueimp-md5'\nimport moment from 'moment'\nimport 'select2'\nimport 'select2/select2.css'\nimport 'snap.js/dist/snap'\nimport 'strengthify'\nimport 'strengthify/strengthify.css'\n\nimport OC from './OC/index'\nimport OCP from './OCP/index'\nimport OCA from './OCA/index'\nimport { getToken as getRequestToken } from './OC/requesttoken'\n\nconst warnIfNotTesting = function() {\n\tif (window.TESTING === undefined) {\n\t\tconsole.warn.apply(console, arguments)\n\t}\n}\n\n/**\n * Mark a function as deprecated and automatically\n * warn if used!\n *\n * @param {Function} func the library to deprecate\n * @param {string} funcName the name of the library\n * @param {number} version the version this gets removed\n * @return {Function}\n */\nconst deprecate = (func, funcName, version) => {\n\tconst oldFunc = func\n\tconst newFunc = function() {\n\t\twarnIfNotTesting(`The ${funcName} library is deprecated! It will be removed in nextcloud ${version}.`)\n\t\treturn oldFunc.apply(this, arguments)\n\t}\n\tObject.assign(newFunc, oldFunc)\n\treturn newFunc\n}\n\nconst setDeprecatedProp = (global, cb, msg) => {\n\t(Array.isArray(global) ? global : [global]).forEach(global => {\n\t\tif (window[global] !== undefined) {\n\t\t\tdelete window[global]\n\t\t}\n\t\tObject.defineProperty(window, global, {\n\t\t\tget: () => {\n\t\t\t\tif (msg) {\n\t\t\t\t\twarnIfNotTesting(`${global} is deprecated: ${msg}`)\n\t\t\t\t} else {\n\t\t\t\t\twarnIfNotTesting(`${global} is deprecated`)\n\t\t\t\t}\n\n\t\t\t\treturn cb()\n\t\t\t},\n\t\t})\n\t})\n}\n\nwindow._ = _\nsetDeprecatedProp(['$', 'jQuery'], () => $, 'The global jQuery is deprecated. It will be removed in a later versions without another warning. Please ship your own.')\nsetDeprecatedProp('autosize', () => autosize, 'please ship your own, this will be removed in Nextcloud 20')\nsetDeprecatedProp('Backbone', () => Backbone, 'please ship your own, this will be removed in Nextcloud 20')\nsetDeprecatedProp(['Clipboard', 'ClipboardJS'], () => ClipboardJS, 'please ship your own, this will be removed in Nextcloud 20')\nwindow.dav = dav\nsetDeprecatedProp('Handlebars', () => Handlebars, 'please ship your own, this will be removed in Nextcloud 20')\nsetDeprecatedProp('md5', () => md5, 'please ship your own, this will be removed in Nextcloud 20')\nsetDeprecatedProp('moment', () => moment, 'please ship your own, this will be removed in Nextcloud 20')\n\nwindow.OC = OC\nsetDeprecatedProp('initCore', () => initCore, 'this is an internal function')\nsetDeprecatedProp('oc_appswebroots', () => OC.appswebroots, 'use OC.appswebroots instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_config', () => OC.config, 'use OC.config instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_current_user', () => OC.getCurrentUser().uid, 'use OC.getCurrentUser().uid instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_debug', () => OC.debug, 'use OC.debug instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_defaults', () => OC.theme, 'use OC.theme instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_isadmin', OC.isUserAdmin, 'use OC.isUserAdmin() instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_requesttoken', () => getRequestToken(), 'use OC.requestToken instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_webroot', () => OC.webroot, 'use OC.getRootPath() instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('OCDialogs', () => OC.dialogs, 'use OC.dialogs instead, this will be removed in Nextcloud 20')\nwindow.OCP = OCP\nwindow.OCA = OCA\n$.fn.select2 = deprecate($.fn.select2, 'select2', 19)\n\n/**\n * translate a string\n *\n * @param {string} app the id of the app for which to translate the string\n * @param {string} text the string to translate\n * @param [vars] map of placeholder key to value\n * @param {number} [count] number to replace %n with\n * @return {string}\n */\nwindow.t = _.bind(OC.L10N.translate, OC.L10N)\n\n/**\n * translate a string\n *\n * @param {string} app the id of the app for which to translate the string\n * @param {string} text_singular the string to translate for exactly one object\n * @param {string} text_plural the string to translate for n objects\n * @param {number} count number to determine whether to use singular or plural\n * @param [vars] map of placeholder key to value\n * @return {string} Translated string\n */\nwindow.n = _.bind(OC.L10N.translatePlural, OC.L10N)\n","/**\n * @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport escapeHTML from 'escape-html'\n\n/**\n * @typedef TypeDefinition\n * @function {Function} action This action is executed to let the user select a resource\n * @param {string} icon Contains the icon css class for the type\n * @function Object() { [native code] }\n */\n\n/**\n * @type {TypeDefinition[]}\n */\nconst types = {}\n\n/**\n * Those translations will be used by the vue component but they should be shipped with the server\n * FIXME: Those translations should be added to the library\n *\n * @return {Array}\n */\nexport const l10nProjects = () => {\n\treturn [\n\t\tt('core', 'Add to a project'),\n\t\tt('core', 'Show details'),\n\t\tt('core', 'Hide details'),\n\t\tt('core', 'Rename project'),\n\t\tt('core', 'Failed to rename the project'),\n\t\tt('core', 'Failed to create a project'),\n\t\tt('core', 'Failed to add the item to the project'),\n\t\tt('core', 'Connect items to a project to make them easier to find'),\n\t\tt('core', 'Type to search for existing projects'),\n\t]\n}\n\nexport default {\n\t/**\n\t *\n\t * @param {string} type type\n\t * @param {TypeDefinition} typeDefinition typeDefinition\n\t */\n\tregisterType(type, typeDefinition) {\n\t\ttypes[type] = typeDefinition\n\t},\n\ttrigger(type) {\n\t\treturn types[type].action()\n\t},\n\tgetTypes() {\n\t\treturn Object.keys(types)\n\t},\n\tgetIcon(type) {\n\t\treturn types[type].typeIconClass || ''\n\t},\n\tgetLabel(type) {\n\t\treturn escapeHTML(types[type].typeString || type)\n\t},\n\tgetLink(type, id) {\n\t\t/* TODO: Allow action to be executed instead of href as well */\n\t\treturn typeof types[type] !== 'undefined' ? types[type].link(id) : ''\n\t},\n}\n","/**\n * @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst loadedScripts = {}\nconst loadedStylesheets = {}\n/**\n * @namespace OCP\n * @class Loader\n */\nexport default {\n\n\t/**\n\t * Load a script asynchronously\n\t *\n\t * @param {string} app the app name\n\t * @param {string} file the script file name\n\t * @return {Promise}\n\t */\n\tloadScript(app, file) {\n\t\tconst key = app + file\n\t\tif (Object.prototype.hasOwnProperty.call(loadedScripts, key)) {\n\t\t\treturn Promise.resolve()\n\t\t}\n\t\tloadedScripts[key] = true\n\t\treturn new Promise(function(resolve, reject) {\n\t\t\tconst scriptPath = OC.filePath(app, 'js', file)\n\t\t\tconst script = document.createElement('script')\n\t\t\tscript.src = scriptPath\n\t\t\tscript.setAttribute('nonce', btoa(OC.requestToken))\n\t\t\tscript.onload = () => resolve()\n\t\t\tscript.onerror = () => reject(new Error(`Failed to load script from ${scriptPath}`))\n\t\t\tdocument.head.appendChild(script)\n\t\t})\n\t},\n\n\t/**\n\t * Load a stylesheet file asynchronously\n\t *\n\t * @param {string} app the app name\n\t * @param {string} file the script file name\n\t * @return {Promise}\n\t */\n\tloadStylesheet(app, file) {\n\t\tconst key = app + file\n\t\tif (Object.prototype.hasOwnProperty.call(loadedStylesheets, key)) {\n\t\t\treturn Promise.resolve()\n\t\t}\n\t\tloadedStylesheets[key] = true\n\t\treturn new Promise(function(resolve, reject) {\n\t\t\tconst stylePath = OC.filePath(app, 'css', file)\n\t\t\tconst link = document.createElement('link')\n\t\t\tlink.href = stylePath\n\t\t\tlink.type = 'text/css'\n\t\t\tlink.rel = 'stylesheet'\n\t\t\tlink.onload = () => resolve()\n\t\t\tlink.onerror = () => reject(new Error(`Failed to load stylesheet from ${stylePath}`))\n\t\t\tdocument.head.appendChild(link)\n\t\t})\n\t},\n}\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport {\n\tshowError,\n\tshowInfo, showMessage,\n\tshowSuccess,\n\tshowWarning,\n} from '@nextcloud/dialogs'\n\nexport default {\n\t/**\n\t * @deprecated 19.0.0 use `showSuccess` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\tsuccess(text, options) {\n\t\treturn showSuccess(text, options)\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `showWarning` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\twarning(text, options) {\n\t\treturn showWarning(text, options)\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `showError` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\terror(text, options) {\n\t\treturn showError(text, options)\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `showInfo` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\tinfo(text, options) {\n\t\treturn showInfo(text, options)\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `showMessage` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\tmessage(text, options) {\n\t\treturn showMessage(text, options)\n\t},\n\n}\n","/**\n * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\n\nimport * as AppConfig from './appconfig'\nimport * as Comments from './comments'\nimport * as WhatsNew from './whatsnew'\n\nimport Accessibility from './accessibility'\nimport Collaboration from './collaboration'\nimport Loader from './loader'\nimport Toast from './toast'\n\n/** @namespace OCP */\nexport default {\n\tAccessibility,\n\tAppConfig,\n\tCollaboration,\n\tComments,\n\tInitialState: {\n\t\t/**\n\t\t * @deprecated 18.0.0 add https://www.npmjs.com/package/@nextcloud/initial-state to your app\n\t\t */\n\t\tloadState,\n\t},\n\tLoader,\n\t/**\n\t * @deprecated 19.0.0 use the `@nextcloud/dialogs` package instead\n\t */\n\tToast,\n\tWhatsNew,\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\nimport OC from '../OC'\n\n/**\n * This plugin inserts the right avatar for the user, depending on, whether a\n * custom avatar is uploaded - which it uses then - or not, and display a\n * placeholder with the first letter of the users name instead.\n * For this it queries the core_avatar_get route, thus this plugin is fit very\n * tightly for owncloud, and it may not work anywhere else.\n *\n * You may use this on any <div></div>\n * Here I'm using <div class=\"avatardiv\"></div> as an example.\n *\n * There are 5 ways to call this:\n *\n * 1. $('.avatardiv').avatar('jdoe', 128);\n * This will make the div to jdoe's fitting avatar, with a size of 128px.\n *\n * 2. $('.avatardiv').avatar('jdoe');\n * This will make the div to jdoe's fitting avatar. If the div already has a\n * height, it will be used for the avatars size. Otherwise this plugin will\n * search for 'size' DOM data, to use for avatar size. If neither are available\n * it will default to 64px.\n *\n * 3. $('.avatardiv').avatar();\n * This will search the DOM for 'user' data, to use as the username. If there\n * is no username available it will default to a placeholder with the value of\n * \"?\". The size will be determined the same way, as the second example.\n *\n * 4. $('.avatardiv').avatar('jdoe', 128, true);\n * This will behave like the first example, except it will also append random\n * hashes to the custom avatar images, to force image reloading in IE8.\n *\n * 5. $('.avatardiv').avatar('jdoe', 128, undefined, true);\n * This will behave like the first example, but it will hide the avatardiv, if\n * it will display the default placeholder. undefined is the ie8fix from\n * example 4 and can be either true, or false/undefined, to be ignored.\n *\n * 6. $('.avatardiv').avatar('jdoe', 128, undefined, true, callback);\n * This will behave like the above example, but it will call the function\n * defined in callback after the avatar is placed into the DOM.\n *\n */\n\n$.fn.avatar = function(user, size, ie8fix, hidedefault, callback, displayname) {\n\tconst setAvatarForUnknownUser = function(target) {\n\t\ttarget.imageplaceholder('?')\n\t\ttarget.css('background-color', '#b9b9b9')\n\t}\n\n\tif (typeof (user) !== 'undefined') {\n\t\tuser = String(user)\n\t}\n\tif (typeof (displayname) !== 'undefined') {\n\t\tdisplayname = String(displayname)\n\t}\n\n\tif (typeof (size) === 'undefined') {\n\t\tif (this.height() > 0) {\n\t\t\tsize = this.height()\n\t\t} else if (this.data('size') > 0) {\n\t\t\tsize = this.data('size')\n\t\t} else {\n\t\t\tsize = 64\n\t\t}\n\t}\n\n\tthis.height(size)\n\tthis.width(size)\n\n\tif (typeof (user) === 'undefined') {\n\t\tif (typeof (this.data('user')) !== 'undefined') {\n\t\t\tuser = this.data('user')\n\t\t} else {\n\t\t\tsetAvatarForUnknownUser(this)\n\t\t\treturn\n\t\t}\n\t}\n\n\t// sanitize\n\tuser = String(user).replace(/\\//g, '')\n\n\tconst $div = this\n\tlet url\n\n\t// If this is our own avatar we have to use the version attribute\n\tif (user === OC.getCurrentUser().uid) {\n\t\turl = OC.generateUrl(\n\t\t\t'/avatar/{user}/{size}?v={version}',\n\t\t\t{\n\t\t\t\tuser,\n\t\t\t\tsize: Math.ceil(size * window.devicePixelRatio),\n\t\t\t\tversion: oc_userconfig.avatar.version,\n\t\t\t})\n\t} else {\n\t\turl = OC.generateUrl(\n\t\t\t'/avatar/{user}/{size}',\n\t\t\t{\n\t\t\t\tuser,\n\t\t\t\tsize: Math.ceil(size * window.devicePixelRatio),\n\t\t\t})\n\t}\n\n\tconst img = new Image()\n\n\t// If the new image loads successfully set it.\n\timg.onload = function() {\n\t\t$div.clearimageplaceholder()\n\t\t$div.append(img)\n\n\t\tif (typeof callback === 'function') {\n\t\t\tcallback()\n\t\t}\n\t}\n\t// Fallback when avatar loading fails:\n\t// Use old placeholder when a displayname attribute is defined,\n\t// otherwise show the unknown user placeholder.\n\timg.onerror = function() {\n\t\t$div.clearimageplaceholder()\n\t\tif (typeof (displayname) !== 'undefined') {\n\t\t\t$div.imageplaceholder(user, displayname)\n\t\t} else {\n\t\t\tsetAvatarForUnknownUser($div)\n\t\t}\n\n\t\tif (typeof callback === 'function') {\n\t\t\tcallback()\n\t\t}\n\t}\n\n\tif (size < 32) {\n\t\t$div.addClass('icon-loading-small')\n\t} else {\n\t\t$div.addClass('icon-loading')\n\t}\n\timg.width = size\n\timg.height = size\n\timg.src = url\n\timg.alt = ''\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\nimport OC from '../OC'\nimport { isA11yActivation } from '../Util/a11y.js'\n\nconst LIST = ''\n\t+ '<div class=\"menu popovermenu menu-left hidden contactsmenu-popover\">'\n\t+ ' <ul>'\n\t+ ' <li>'\n\t+ ' <a>'\n\t+ ' <span class=\"icon-loading-small\"></span>'\n\t+ ' </a>'\n\t+ ' </li>'\n\t+ ' </ul>'\n\t+ '</div>'\n\nconst entryTemplate = require('./contactsmenu/jquery_entry.handlebars')\n\n$.fn.contactsMenu = function(shareWith, shareType, appendTo) {\n\t// 0 - user, 4 - email, 6 - remote\n\tconst allowedTypes = [0, 4, 6]\n\tif (allowedTypes.indexOf(shareType) === -1) {\n\t\treturn\n\t}\n\n\tconst $div = this\n\tappendTo.append(LIST)\n\tconst $list = appendTo.find('div.contactsmenu-popover')\n\n\t$div.on('click keydown', function(event) {\n\t\tif (!isA11yActivation(event)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (!$list.hasClass('hidden')) {\n\t\t\t$list.addClass('hidden')\n\t\t\t$list.hide()\n\t\t\treturn\n\t\t}\n\n\t\t$list.removeClass('hidden')\n\t\t$list.show()\n\n\t\tif ($list.hasClass('loaded')) {\n\t\t\treturn\n\t\t}\n\n\t\t$list.addClass('loaded')\n\t\t$.ajax(OC.generateUrl('/contactsmenu/findOne'), {\n\t\t\tmethod: 'POST',\n\t\t\tdata: {\n\t\t\t\tshareType,\n\t\t\t\tshareWith,\n\t\t\t},\n\t\t}).then(function(data) {\n\t\t\t$list.find('ul').find('li').addClass('hidden')\n\n\t\t\tlet actions\n\t\t\tif (!data.topAction) {\n\t\t\t\tactions = [{\n\t\t\t\t\thyperlink: '#',\n\t\t\t\t\ttitle: t('core', 'No action available'),\n\t\t\t\t}]\n\t\t\t} else {\n\t\t\t\tactions = [data.topAction].concat(data.actions)\n\t\t\t}\n\n\t\t\tactions.forEach(function(action) {\n\t\t\t\t$list.find('ul').append(entryTemplate(action))\n\t\t\t})\n\n\t\t\t$div.trigger('load')\n\t\t}, function(jqXHR) {\n\t\t\t$list.find('ul').find('li').addClass('hidden')\n\n\t\t\tlet title\n\t\t\tif (jqXHR.status === 404) {\n\t\t\t\ttitle = t('core', 'No action available')\n\t\t\t} else {\n\t\t\t\ttitle = t('core', 'Error fetching contact actions')\n\t\t\t}\n\n\t\t\t$list.find('ul').append(entryTemplate({\n\t\t\t\thyperlink: '#',\n\t\t\t\ttitle,\n\t\t\t}))\n\n\t\t\t$div.trigger('loaderror', jqXHR)\n\t\t})\n\t})\n\n\t$(document).click(function(event) {\n\t\tconst clickedList = ($list.has(event.target).length > 0)\n\t\tlet clickedTarget = ($div.has(event.target).length > 0)\n\n\t\t$div.each(function() {\n\t\t\tif ($(this).is(event.target)) {\n\t\t\t\tclickedTarget = true\n\t\t\t}\n\t\t})\n\n\t\tif (clickedList || clickedTarget) {\n\t\t\treturn\n\t\t}\n\n\t\t$list.addClass('hidden')\n\t\t$list.hide()\n\t})\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * check if an element exists.\n * allows you to write if ($('#myid').exists()) to increase readability\n *\n * @see {@link http://stackoverflow.com/questions/31044/is-there-an-exists-function-for-jquery}\n * @return {boolean}\n */\n$.fn.exists = function() {\n\treturn this.length > 0\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * Filter jQuery selector by attribute value\n *\n * @param {string} attrName attribute name\n * @param {string} attrValue attribute value\n * @return {void}\n */\n$.fn.filterAttr = function(attrName, attrValue) {\n\treturn this.filter(function() {\n\t\treturn $(this).attr(attrName) === attrValue\n\t})\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Gary Kim <gary@garykim.dev>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\nimport { createFocusTrap } from 'focus-trap'\nimport { isA11yActivation } from '../Util/a11y.js'\n\n$.widget('oc.ocdialog', {\n\toptions: {\n\t\twidth: 'auto',\n\t\theight: 'auto',\n\t\tcloseButton: true,\n\t\tcloseOnEscape: true,\n\t\tcloseCallback: null,\n\t\tmodal: false,\n\t},\n\t_create() {\n\t\tconst self = this\n\n\t\tthis.originalCss = {\n\t\t\tdisplay: this.element[0].style.display,\n\t\t\twidth: this.element[0].style.width,\n\t\t\theight: this.element[0].style.height,\n\t\t}\n\n\t\tthis.originalTitle = this.element.attr('title')\n\t\tthis.options.title = this.options.title || this.originalTitle\n\n\t\tthis.$dialog = $('<div class=\"oc-dialog\"></div>')\n\t\t\t.attr({\n\t\t\t\t// Setting tabIndex makes the div focusable\n\t\t\t\ttabIndex: -1,\n\t\t\t\trole: 'dialog',\n\t\t\t})\n\t\t\t.insertBefore(this.element)\n\t\tthis.$dialog.append(this.element.detach())\n\t\tthis.element.removeAttr('title').addClass('oc-dialog-content').appendTo(this.$dialog)\n\n\t\t// Activate the primary button on enter if there is a single input\n\t\tif (self.element.find('input').length === 1) {\n\t\t\tconst $input = self.element.find('input')\n\t\t\t$input.on('keydown', function(event) {\n\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\tif (self.$buttonrow) {\n\t\t\t\t\t\tconst $button = self.$buttonrow.find('button.primary')\n\t\t\t\t\t\tif ($button && !$button.prop('disabled')) {\n\t\t\t\t\t\t\t$button.click()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\tthis.$dialog.css({\n\t\t\tdisplay: 'inline-block',\n\t\t\tposition: 'fixed',\n\t\t})\n\n\t\tthis.enterCallback = null\n\n\t\t$(document).on('keydown keyup', function(event) {\n\t\t\tif (\n\t\t\t\tevent.target !== self.$dialog.get(0)\n\t\t\t\t&& self.$dialog.find($(event.target)).length === 0\n\t\t\t) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// Escape\n\t\t\tif (\n\t\t\t\tevent.keyCode === 27\n\t\t\t\t&& event.type === 'keydown'\n\t\t\t\t&& self.options.closeOnEscape\n\t\t\t) {\n\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\tself.close()\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// Enter\n\t\t\tif (event.keyCode === 13) {\n\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\tif (self.enterCallback !== null) {\n\t\t\t\t\tself.enterCallback()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif (event.type === 'keyup') {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t}\n\t\t})\n\n\t\tthis._setOptions(this.options)\n\t\tthis._createOverlay()\n\t\tthis._useFocusTrap()\n\t},\n\t_init() {\n\t\tthis._trigger('open')\n\t},\n\t_setOption(key, value) {\n\t\tconst self = this\n\t\tswitch (key) {\n\t\tcase 'title':\n\t\t\tif (this.$title) {\n\t\t\t\tthis.$title.text(value)\n\t\t\t} else {\n\t\t\t\tconst $title = $('<h2 class=\"oc-dialog-title\">'\n\t\t\t\t\t\t+ value\n\t\t\t\t\t\t+ '</h2>')\n\t\t\t\tthis.$title = $title.prependTo(this.$dialog)\n\t\t\t}\n\t\t\tthis._setSizes()\n\t\t\tbreak\n\t\tcase 'buttons':\n\t\t\tif (this.$buttonrow) {\n\t\t\t\tthis.$buttonrow.empty()\n\t\t\t} else {\n\t\t\t\tconst $buttonrow = $('<div class=\"oc-dialog-buttonrow\"></div>')\n\t\t\t\tthis.$buttonrow = $buttonrow.appendTo(this.$dialog)\n\t\t\t}\n\t\t\tif (value.length === 1) {\n\t\t\t\tthis.$buttonrow.addClass('onebutton')\n\t\t\t} else if (value.length === 2) {\n\t\t\t\tthis.$buttonrow.addClass('twobuttons')\n\t\t\t} else if (value.length === 3) {\n\t\t\t\tthis.$buttonrow.addClass('threebuttons')\n\t\t\t}\n\t\t\t$.each(value, function(idx, val) {\n\t\t\t\tconst $button = $('<button>').text(val.text)\n\t\t\t\tif (val.classes) {\n\t\t\t\t\t$button.addClass(val.classes)\n\t\t\t\t}\n\t\t\t\tif (val.defaultButton) {\n\t\t\t\t\t$button.addClass('primary')\n\t\t\t\t\tself.$defaultButton = $button\n\t\t\t\t}\n\t\t\t\tself.$buttonrow.append($button)\n\t\t\t\t$button.on('click keydown', function(event) {\n\t\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\t\tval.click.apply(self.element[0], arguments)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t\t\tthis.$buttonrow.find('button')\n\t\t\t\t.on('focus', function(event) {\n\t\t\t\t\tself.$buttonrow.find('button').removeClass('primary')\n\t\t\t\t\t$(this).addClass('primary')\n\t\t\t\t})\n\t\t\tthis._setSizes()\n\t\t\tbreak\n\t\tcase 'style':\n\t\t\tif (value.buttons !== undefined) {\n\t\t\t\tthis.$buttonrow.addClass(value.buttons)\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'closeButton':\n\t\t\tif (value) {\n\t\t\t\tconst $closeButton = $('<button class=\"oc-dialog-close\"></button>')\n\t\t\t\t$closeButton.attr('aria-label', t('core', 'Close \"{dialogTitle}\" dialog', { dialogTitle: this.$title || this.options.title }))\n\t\t\t\tthis.$dialog.prepend($closeButton)\n\t\t\t\t$closeButton.on('click keydown', function(event) {\n\t\t\t\t\tif (isA11yActivation(event)) {\n\t\t\t\t\t\tself.options.closeCallback && self.options.closeCallback()\n\t\t\t\t\t\tself.close()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tthis.$dialog.find('.oc-dialog-close').remove()\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'width':\n\t\t\tthis.$dialog.css('width', value)\n\t\t\tbreak\n\t\tcase 'height':\n\t\t\tthis.$dialog.css('height', value)\n\t\t\tbreak\n\t\tcase 'close':\n\t\t\tthis.closeCB = value\n\t\t\tbreak\n\t\t}\n\t\t// this._super(key, value);\n\t\t$.Widget.prototype._setOption.apply(this, arguments)\n\t},\n\t_setOptions(options) {\n\t\t// this._super(options);\n\t\t$.Widget.prototype._setOptions.apply(this, arguments)\n\t},\n\t_setSizes() {\n\t\tlet lessHeight = 0\n\t\tif (this.$title) {\n\t\t\tlessHeight += this.$title.outerHeight(true)\n\t\t}\n\t\tif (this.$buttonrow) {\n\t\t\tlessHeight += this.$buttonrow.outerHeight(true)\n\t\t}\n\t\tthis.element.css({\n\t\t\theight: 'calc(100% - ' + lessHeight + 'px)',\n\t\t})\n\t},\n\t_createOverlay() {\n\t\tif (!this.options.modal) {\n\t\t\treturn\n\t\t}\n\n\t\tconst self = this\n\t\tlet contentDiv = $('#content')\n\t\tif (contentDiv.length === 0) {\n\t\t\t// nextcloud-vue compatibility\n\t\t\tcontentDiv = $('.content')\n\t\t}\n\t\tthis.overlay = $('<div>')\n\t\t\t.addClass('oc-dialog-dim')\n\t\t\t.appendTo(contentDiv)\n\t\tthis.overlay.on('click keydown keyup', function(event) {\n\t\t\tif (event.target !== self.$dialog.get(0) && self.$dialog.find($(event.target)).length === 0) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tevent.stopPropagation()\n\n\t\t\t}\n\t\t})\n\t},\n\t_destroyOverlay() {\n\t\tif (!this.options.modal) {\n\t\t\treturn\n\t\t}\n\n\t\tif (this.overlay) {\n\t\t\tthis.overlay.off('click keydown keyup')\n\t\t\tthis.overlay.remove()\n\t\t\tthis.overlay = null\n\t\t}\n\t},\n\t_useFocusTrap() {\n\t\t// Create global stack if undefined\n\t\tObject.assign(window, { _nc_focus_trap: window._nc_focus_trap || [] })\n\n\t\tconst dialogElement = this.$dialog[0]\n\t\tthis.focusTrap = createFocusTrap(dialogElement, {\n\t\t\tallowOutsideClick: true,\n\t\t\ttrapStack: window._nc_focus_trap,\n\t\t\tfallbackFocus: dialogElement,\n\t\t})\n\n\t\tthis.focusTrap.activate()\n\t},\n\t_clearFocusTrap() {\n\t\tthis.focusTrap?.deactivate()\n\t\tthis.focusTrap = null\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._clearFocusTrap()\n\t\tthis._destroyOverlay()\n\t\tconst self = this\n\t\t// Ugly hack to catch remaining keyup events.\n\t\tsetTimeout(function() {\n\t\t\tself._trigger('close', self)\n\t\t}, 200)\n\n\t\tself.$dialog.remove()\n\t\tthis.destroy()\n\t},\n\tdestroy() {\n\t\tif (this.$title) {\n\t\t\tthis.$title.remove()\n\t\t}\n\t\tif (this.$buttonrow) {\n\t\t\tthis.$buttonrow.remove()\n\t\t}\n\n\t\tif (this.originalTitle) {\n\t\t\tthis.element.attr('title', this.originalTitle)\n\t\t}\n\t\tthis.element.removeClass('oc-dialog-content')\n\t\t\t.css(this.originalCss).detach().insertBefore(this.$dialog)\n\t\tthis.$dialog.remove()\n\t},\n})\n","/**\n * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\nimport escapeHTML from 'escape-html'\n\n/**\n * jQuery plugin for micro templates\n *\n * Strings are automatically escaped, but that can be disabled by setting\n * escapeFunction to null.\n *\n * Usage examples:\n *\n * var htmlStr = '<p>Bake, uncovered, until the {greasystuff} is melted and the {pasta} is heated through, about {min} minutes.</p>'\n * $(htmlStr).octemplate({greasystuff: 'cheese', pasta: 'macaroni', min: 10});\n *\n * var htmlStr = '<p>Welcome back {user}</p>';\n * $(htmlStr).octemplate({user: 'John Q. Public'}, {escapeFunction: null});\n *\n * Be aware that the target string must be wrapped in an HTML element for the\n * plugin to work. The following won't work:\n *\n * var textStr = 'Welcome back {user}';\n * $(textStr).octemplate({user: 'John Q. Public'});\n *\n * For anything larger than one-liners, you can use a simple $.get() ajax\n * request to get the template, or you can embed them it the page using the\n * text/template type:\n *\n * <script id=\"contactListItemTemplate\" type=\"text/template\">\n * <tr class=\"contact\" data-id=\"{id}\">\n * <td class=\"name\">\n * <input type=\"checkbox\" name=\"id\" value=\"{id}\" /><span class=\"nametext\">{name}</span>\n * </td>\n * <td class=\"email\">\n * <a href=\"mailto:{email}\">{email}</a>\n * </td>\n * <td class=\"phone\">{phone}</td>\n * </tr>\n * </script>\n *\n * var $tmpl = $('#contactListItemTemplate');\n * var contacts = // fetched in some ajax call\n *\n * $.each(contacts, function(idx, contact) {\n * $contactList.append(\n * $tmpl.octemplate({\n * id: contact.getId(),\n * name: contact.getDisplayName(),\n * email: contact.getPreferredEmail(),\n * phone: contact.getPreferredPhone(),\n * });\n * );\n * });\n */\n/**\n * Object Template\n * Inspired by micro templating done by e.g. underscore.js\n */\nconst Template = {\n\tinit(vars, options, elem) {\n\t\t// Mix in the passed in options with the default options\n\t\tthis.vars = vars\n\t\tthis.options = $.extend({}, this.options, options)\n\n\t\tthis.elem = elem\n\t\tconst self = this\n\n\t\tif (typeof this.options.escapeFunction === 'function') {\n\t\t\tconst keys = Object.keys(this.vars)\n\t\t\tfor (let key = 0; key < keys.length; key++) {\n\t\t\t\tif (typeof this.vars[keys[key]] === 'string') {\n\t\t\t\t\tthis.vars[keys[key]] = self.options.escapeFunction(this.vars[keys[key]])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst _html = this._build(this.vars)\n\t\treturn $(_html)\n\t},\n\t// From stackoverflow.com/questions/1408289/best-way-to-do-variable-interpolation-in-javascript\n\t_build(o) {\n\t\tconst data = this.elem.attr('type') === 'text/template' ? this.elem.html() : this.elem.get(0).outerHTML\n\t\ttry {\n\t\t\treturn data.replace(/{([^{}]*)}/g,\n\t\t\t\tfunction(a, b) {\n\t\t\t\t\tconst r = o[b]\n\t\t\t\t\treturn typeof r === 'string' || typeof r === 'number' ? r : a\n\t\t\t\t}\n\t\t\t)\n\t\t} catch (e) {\n\t\t\tconsole.error(e, 'data:', data)\n\t\t}\n\t},\n\toptions: {\n\t\tescapeFunction: escapeHTML,\n\t},\n}\n\n$.fn.octemplate = function(vars, options) {\n\tvars = vars || {}\n\tif (this.length) {\n\t\tconst _template = Object.create(Template)\n\t\treturn _template.init(vars, options, this)\n\t}\n}\n","/**\n * @copyright 2016-2018 John Molakvoæ <skjnldsv@protonmail.com>\n * @copyright 2013 Morris Jobke <morris.jobke@gmail.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Sergey Shliakhov <husband.sergey@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport $ from 'jquery'\nimport md5 from 'blueimp-md5'\n\n/*\n * Adds a background color to the element called on and adds the first character\n * of the passed in string. This string is also the seed for the generation of\n * the background color.\n *\n * You have following HTML:\n *\n * <div id=\"albumart\"></div>\n *\n * And call this from Javascript:\n *\n * $('#albumart').imageplaceholder('The Album Title');\n *\n * Which will result in:\n *\n * <div id=\"albumart\" style=\"background-color: rgb(121, 90, 171); ... \">T</div>\n *\n * You may also call it like this, to have a different background, than the seed:\n *\n * $('#albumart').imageplaceholder('The Album Title', 'Album Title');\n *\n * Resulting in:\n *\n * <div id=\"albumart\" style=\"background-color: rgb(121, 90, 171); ... \">A</div>\n *\n */\n\n/*\n* Alternatively, you can use the prototype function to convert your string to rgb colors:\n*\n* \"a6741a86aded5611a8e46ce16f2ad646\".toRgb()\n*\n* Will return the rgb parameters within the following object:\n*\n* Color {r: 208, g: 158, b: 109}\n*\n*/\n\nconst toRgb = (s) => {\n\t// Normalize hash\n\tvar hash = s.toLowerCase()\n\n\t// Already a md5 hash?\n\tif (hash.match(/^([0-9a-f]{4}-?){8}$/) === null) {\n\t\thash = md5(hash)\n\t}\n\n\thash = hash.replace(/[^0-9a-f]/g, '')\n\n\tfunction Color(r, g, b) {\n\t\tthis.r = r\n\t\tthis.g = g\n\t\tthis.b = b\n\t}\n\n\tfunction stepCalc(steps, ends) {\n\t\tvar step = new Array(3)\n\t\tstep[0] = (ends[1].r - ends[0].r) / steps\n\t\tstep[1] = (ends[1].g - ends[0].g) / steps\n\t\tstep[2] = (ends[1].b - ends[0].b) / steps\n\t\treturn step\n\t}\n\n\tfunction mixPalette(steps, color1, color2) {\n\t\tvar palette = []\n\t\tpalette.push(color1)\n\t\tvar step = stepCalc(steps, [color1, color2])\n\t\tfor (var i = 1; i < steps; i++) {\n\t\t\tvar r = parseInt(color1.r + (step[0] * i))\n\t\t\tvar g = parseInt(color1.g + (step[1] * i))\n\t\t\tvar b = parseInt(color1.b + (step[2] * i))\n\t\t\tpalette.push(new Color(r, g, b))\n\t\t}\n\t\treturn palette\n\t}\n\n\tconst red = new Color(182, 70, 157);\n\tconst yellow = new Color(221, 203, 85);\n\tconst blue = new Color(0, 130, 201); // Nextcloud blue\n\t// Number of steps to go from a color to another\n\t// 3 colors * 6 will result in 18 generated colors\n\tconst steps = 6;\n\n\tconst palette1 = mixPalette(steps, red, yellow);\n\tconst palette2 = mixPalette(steps, yellow, blue);\n\tconst palette3 = mixPalette(steps, blue, red);\n\n\tconst finalPalette = palette1.concat(palette2).concat(palette3);\n\n\t// Convert a string to an integer evenly\n\tfunction hashToInt(hash, maximum) {\n\t\tvar finalInt = 0\n\t\tvar result = []\n\n\t\t// Splitting evenly the string\n\t\tfor (var i = 0; i < hash.length; i++) {\n\t\t\t// chars in md5 goes up to f, hex:16\n\t\t\tresult.push(parseInt(hash.charAt(i), 16) % 16)\n\t\t}\n\t\t// Adds up all results\n\t\tfor (var j in result) {\n\t\t\tfinalInt += result[j]\n\t\t}\n\t\t// chars in md5 goes up to f, hex:16\n\t\t// make sure we're always using int in our operation\n\t\treturn parseInt(parseInt(finalInt) % maximum)\n\t}\n\n\treturn finalPalette[hashToInt(hash, steps * 3)]\n}\n\nString.prototype.toRgb = function() {\n\tconsole.warn('String.prototype.toRgb is deprecated! It will be removed in Nextcloud 22.')\n\n\treturn toRgb(this)\n}\n\n$.fn.imageplaceholder = function(seed, text, size) {\n\ttext = text || seed\n\n\t// Compute the hash\n\tvar rgb = toRgb(seed)\n\tthis.css('background-color', 'rgb(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ')')\n\n\t// Placeholders are square\n\tvar height = this.height() || size || 32\n\tthis.height(height)\n\tthis.width(height)\n\n\t// CSS rules\n\tthis.css('color', '#fff')\n\tthis.css('font-weight', 'normal')\n\tthis.css('text-align', 'center')\n\n\t// calculate the height\n\tthis.css('line-height', height + 'px')\n\tthis.css('font-size', (height * 0.55) + 'px')\n\n\tif (seed !== null && seed.length) {\n\t\tvar placeholderText = text.replace(/\\s+/g, ' ').trim().split(' ', 2).map((word) => word[0].toUpperCase()).join('')\n\t\tthis.html(placeholderText);\n\t}\n}\n\n$.fn.clearimageplaceholder = function() {\n\tthis.css('background-color', '')\n\tthis.css('color', '')\n\tthis.css('font-weight', '')\n\tthis.css('text-align', '')\n\tthis.css('line-height', '')\n\tthis.css('font-size', '')\n\tthis.html('')\n\tthis.removeClass('icon-loading')\n\tthis.removeClass('icon-loading-small')\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\nimport { getToken } from '../OC/requesttoken'\n\n$(document).on('ajaxSend', function(elm, xhr, settings) {\n\tif (settings.crossDomain === false) {\n\t\txhr.setRequestHeader('requesttoken', getToken())\n\t\txhr.setRequestHeader('OCS-APIREQUEST', 'true')\n\t}\n})\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * select a range in an input field\n *\n * @see {@link http://stackoverflow.com/questions/499126/jquery-set-cursor-position-in-text-area}\n * @param {number} start start selection from\n * @param {number} end number of char from start\n * @return {void}\n */\n$.fn.selectRange = function(start, end) {\n\treturn this.each(function() {\n\t\tif (this.setSelectionRange) {\n\t\t\tthis.focus()\n\t\t\tthis.setSelectionRange(start, end)\n\t\t} else if (this.createTextRange) {\n\t\t\tconst range = this.createTextRange()\n\t\t\trange.collapse(true)\n\t\t\trange.moveEnd('character', end)\n\t\t\trange.moveStart('character', start)\n\t\t\trange.select()\n\t\t}\n\t})\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * @name Show Password\n * @description\n * @version 1.3.0\n * @requires Jquery 1.5\n *\n * @author Jan Jarfalk <jan.jarfalk@unwrongest.com>\n * author-website http://www.unwrongest.com\n *\n * special-thanks Michel Gratton\n *\n * @license MIT\n */\n$.fn.extend({\n\tshowPassword(c) {\n\n\t\t// Setup callback object\n\t\tconst callback = { fn: null, args: {} }\n\t\tcallback.fn = c\n\n\t\t// Clones passwords and turn the clones into text inputs\n\t\tconst cloneElement = function(element) {\n\n\t\t\tconst $element = $(element)\n\n\t\t\tconst $clone = $('<input />')\n\n\t\t\t// Name added for JQuery Validation compatibility\n\t\t\t// Element name is required to avoid script warning.\n\t\t\t$clone.attr({\n\t\t\t\ttype: 'text',\n\t\t\t\tclass: $element.attr('class'),\n\t\t\t\tstyle: $element.attr('style'),\n\t\t\t\tsize: $element.attr('size'),\n\t\t\t\tname: $element.attr('name') + '-clone',\n\t\t\t\ttabindex: $element.attr('tabindex'),\n\t\t\t\tautocomplete: 'off',\n\t\t\t})\n\n\t\t\tif ($element.attr('placeholder') !== undefined) {\n\t\t\t\t$clone.attr('placeholder', $element.attr('placeholder'))\n\t\t\t}\n\n\t\t\treturn $clone\n\n\t\t}\n\n\t\t// Transfers values between two elements\n\t\tconst update = function(a, b) {\n\t\t\tb.val(a.val())\n\t\t}\n\n\t\t// Shows a or b depending on checkbox\n\t\tconst setState = function(checkbox, a, b) {\n\n\t\t\tif (checkbox.is(':checked')) {\n\t\t\t\tupdate(a, b)\n\t\t\t\tb.show()\n\t\t\t\ta.hide()\n\t\t\t} else {\n\t\t\t\tupdate(b, a)\n\t\t\t\tb.hide()\n\t\t\t\ta.show()\n\t\t\t}\n\n\t\t}\n\n\t\treturn this.each(function() {\n\n\t\t\tconst $input = $(this)\n\t\t\tconst $checkbox = $($input.data('typetoggle'))\n\n\t\t\t// Create clone\n\t\t\tconst $clone = cloneElement($input)\n\t\t\t$clone.insertAfter($input)\n\n\t\t\t// Set callback arguments\n\t\t\tif (callback.fn) {\n\t\t\t\tcallback.args.input = $input\n\t\t\t\tcallback.args.checkbox = $checkbox\n\t\t\t\tcallback.args.clone = $clone\n\t\t\t}\n\n\t\t\t$checkbox.bind('click', function() {\n\t\t\t\tsetState($checkbox, $input, $clone)\n\t\t\t})\n\n\t\t\t$input.bind('keyup', function() {\n\t\t\t\tupdate($input, $clone)\n\t\t\t})\n\n\t\t\t$clone.bind('keyup', function() {\n\t\t\t\tupdate($clone, $input)\n\n\t\t\t\t// Added for JQuery Validation compatibility\n\t\t\t\t// This will trigger validation if it's ON for keyup event\n\t\t\t\t$input.trigger('keyup')\n\n\t\t\t})\n\n\t\t\t// Added for JQuery Validation compatibility\n\t\t\t// This will trigger validation if it's ON for blur event\n\t\t\t$clone.bind('blur', function() {\n\t\t\t\t$input.trigger('focusout')\n\t\t\t})\n\n\t\t\tsetState($checkbox, $input, $clone)\n\n\t\t\t// set type of password field clone (type=text) to password right on submit\n\t\t\t// to prevent browser save the value of this field\n\t\t\t$clone.closest('form').submit(function(e) {\n\t\t\t\t// .prop has to be used, because .attr throws\n\t\t\t\t// an error while changing a type of an input\n\t\t\t\t// element\n\t\t\t\t$clone.prop('type', 'password')\n\t\t\t})\n\n\t\t\tif (callback.fn) {\n\t\t\t\tcallback.fn(callback.args)\n\t\t\t}\n\n\t\t})\n\t},\n})\n","/**\n * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n// Set autocomplete width the same as the related input\n// See http://stackoverflow.com/a/11845718\n$.ui.autocomplete.prototype._resizeMenu = function() {\n\tconst ul = this.menu.element\n\tul.outerWidth(this.element.outerWidth())\n}\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./jquery-ui-fixes.scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./jquery-ui-fixes.scss\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./jquery.ocdialog.scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./jquery.ocdialog.scss\";\n export default content && content.locals ? content.locals : undefined;\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\nimport './avatar'\nimport './contactsmenu'\nimport './exists'\nimport './filterattr'\nimport './ocdialog'\nimport './octemplate'\nimport './placeholder'\nimport './requesttoken'\nimport './selectrange'\nimport './showpassword'\nimport './ui-fixes'\n\nimport './css/jquery-ui-fixes.scss'\nimport './css/jquery.ocdialog.scss'\n\n/**\n * Disable automatic evaluation of responses for $.ajax() functions (and its\n * higher-level alternatives like $.get() and $.post()).\n *\n * If a response to a $.ajax() request returns a content type of \"application/javascript\"\n * JQuery would previously execute the response body. This is a pretty unexpected\n * behaviour and can result in a bypass of our Content-Security-Policy as well as\n * multiple unexpected XSS vectors.\n */\n$.ajaxSetup({\n\tcontents: {\n\t\tscript: false,\n\t},\n})\n\n/**\n * Disable execution of eval in jQuery. We do require an allowed eval CSP\n * configuration at the moment for handlebars et al. But for jQuery there is\n * not much of a reason to execute JavaScript directly via eval.\n *\n * This thus mitigates some unexpected XSS vectors.\n */\n$.globalEval = function() {\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\nimport 'core-js/stable'\nimport 'regenerator-runtime/runtime'\nimport './Polyfill/index.js'\n\n// If you remove the line below, tests won't pass\n// eslint-disable-next-line no-unused-vars\nimport OC from './OC/index.js'\n\nimport './globals.js'\nimport './jquery/index.js'\nimport { initCore } from './init.js'\nimport { registerAppsSlideToggle } from './OC/apps.js'\n\nwindow.addEventListener('DOMContentLoaded', function() {\n\tinitCore()\n\tregisterAppsSlideToggle()\n\n\t// fallback to hashchange when no history support\n\tif (window.history.pushState) {\n\t\twindow.onpopstate = _.bind(OC.Util.History._onPopState, OC.Util.History)\n\t} else {\n\t\t$(window).on('hashchange', _.bind(OC.Util.History._onPopState, OC.Util.History))\n\t}\n})\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"images/ui-icons_1d2d44_256x240.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_1___ = new URL(\"images/ui-icons_ffffff_256x240.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_2___ = new URL(\"images/ui-icons_ffd27a_256x240.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_3___ = new URL(\"images/ui-bg_diagonals-thick_20_666666_40x40.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_4___ = new URL(\"images/ui-bg_flat_10_000000_40x100.png\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___);\nvar ___CSS_LOADER_URL_REPLACEMENT_3___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_3___);\nvar ___CSS_LOADER_URL_REPLACEMENT_4___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_4___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".ui-widget-content{border:1px solid var(--color-border);background:var(--color-main-background) none;color:var(--color-main-text)}.ui-widget-content a{color:var(--color-main-text)}.ui-widget-header{border:none;color:var(--color-main-text);background-image:none}.ui-widget-header a{color:var(--color-main-text)}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid var(--color-border);background:var(--color-main-background) none;font-weight:bold;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #ddd;background:var(--color-main-background) none;font-weight:bold;color:var(--color-main-text)}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:var(--color-main-text)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid var(--color-primary);background:var(--color-main-background) none;font-weight:bold;color:var(--color-main-text)}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:var(--color-main-text)}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid var(--color-main-background);background:var(--color-main-background) none;color:var(--color-text-light);font-weight:600}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:var(--color-text-lighter)}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:var(--color-error);background:var(--color-error) none;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-state-default .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \")}.ui-state-active .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \")}.ui-state-highlight .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_1___ + \")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_2___ + \")}.ui-icon.ui-icon-none{display:none}.ui-widget-overlay{background:#666 url(\" + ___CSS_LOADER_URL_REPLACEMENT_3___ + \") 50% 50% repeat;opacity:.5}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url(\" + ___CSS_LOADER_URL_REPLACEMENT_4___ + \") 50% 50% repeat-x;opacity:.2;border-radius:5px}.ui-tabs{border:none}.ui-tabs .ui-tabs-nav.ui-corner-all{border-bottom-left-radius:0;border-bottom-right-radius:0}.ui-tabs .ui-tabs-nav{background:none;margin-bottom:15px}.ui-tabs .ui-tabs-nav .ui-state-default{border:none;border-bottom:1px solid rgba(0,0,0,0);font-weight:normal;margin:0 !important;padding:0 !important}.ui-tabs .ui-tabs-nav .ui-state-hover,.ui-tabs .ui-tabs-nav .ui-state-active{border:none;border-bottom:1px solid var(--color-main-text);color:var(--color-main-text)}.ui-tabs .ui-tabs-nav .ui-state-hover a,.ui-tabs .ui-tabs-nav .ui-state-hover a:link,.ui-tabs .ui-tabs-nav .ui-state-hover a:hover,.ui-tabs .ui-tabs-nav .ui-state-hover a:visited,.ui-tabs .ui-tabs-nav .ui-state-active a,.ui-tabs .ui-tabs-nav .ui-state-active a:link,.ui-tabs .ui-tabs-nav .ui-state-active a:hover,.ui-tabs .ui-tabs-nav .ui-state-active a:visited{color:var(--color-main-text)}.ui-tabs .ui-tabs-nav .ui-state-active{font-weight:bold}.ui-autocomplete.ui-menu{padding:0}.ui-autocomplete.ui-menu.item-count-1,.ui-autocomplete.ui-menu.item-count-2{overflow-y:hidden}.ui-autocomplete.ui-menu .ui-menu-item a{color:var(--color-text-lighter);display:block;padding:4px 4px 4px 14px}.ui-autocomplete.ui-menu .ui-menu-item a.ui-state-focus,.ui-autocomplete.ui-menu .ui-menu-item a.ui-state-active{box-shadow:inset 4px 0 var(--color-primary-element);color:var(--color-main-text)}.ui-autocomplete.ui-widget-content{background:var(--color-main-background);border-top:none}.ui-autocomplete.ui-corner-all{border-radius:0;border-bottom-left-radius:var(--border-radius);border-bottom-right-radius:var(--border-radius)}.ui-autocomplete .ui-state-hover,.ui-autocomplete .ui-widget-content .ui-state-hover,.ui-autocomplete .ui-widget-header .ui-state-hover,.ui-autocomplete .ui-state-focus,.ui-autocomplete .ui-widget-content .ui-state-focus,.ui-autocomplete .ui-widget-header .ui-state-focus{border:1px solid rgba(0,0,0,0);background:inherit;color:var(--color-primary-element)}.ui-autocomplete .ui-menu-item a{border-radius:0 !important}.ui-button.primary{background-color:var(--color-primary);color:var(--color-primary-text);border:1px solid var(--color-primary-text)}.ui-button:hover{font-weight:bold !important}.ui-draggable-handle,.ui-selectable{touch-action:pan-y}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/jquery/css/jquery-ui-fixes.scss\"],\"names\":[],\"mappings\":\"AAEA,mBACC,oCAAA,CACA,4CAAA,CACA,4BAAA,CAED,qBACC,4BAAA,CAED,kBACC,WAAA,CACA,4BAAA,CACA,qBAAA,CAED,oBACC,4BAAA,CAKD,2FAGC,oCAAA,CACA,4CAAA,CACA,gBAAA,CACA,UAAA,CAED,yEAGC,UAAA,CAED,0KAMC,qBAAA,CACA,4CAAA,CACA,gBAAA,CACA,4BAAA,CAED,2FAIC,4BAAA,CAED,wFAGC,qCAAA,CACA,4CAAA,CACA,gBAAA,CACA,4BAAA,CAED,sEAGC,4BAAA,CAKD,iGAGC,6CAAA,CACA,4CAAA,CACA,6BAAA,CACA,eAAA,CAED,uGAGC,+BAAA,CAED,qFAGC,yBAAA,CACA,kCAAA,CACA,UAAA,CAED,2FAGC,UAAA,CAED,oGAGC,UAAA,CAKD,2BACC,wDAAA,CAED,kDAEC,wDAAA,CAED,0BACC,wDAAA,CAED,6BACC,wDAAA,CAED,uDAEC,wDAAA,CAED,sBACC,YAAA,CAMD,mBACC,sEAAA,CACA,UAAA,CAED,kBACC,oBAAA,CACA,WAAA,CACA,wEAAA,CACA,UAAA,CACA,iBAAA,CAID,SACC,WAAA,CAEA,oCACC,2BAAA,CACA,4BAAA,CAGD,sBACC,eAAA,CACA,kBAAA,CAEA,wCACC,WAAA,CACA,qCAAA,CACA,kBAAA,CACA,mBAAA,CACA,oBAAA,CAGD,6EAEC,WAAA,CACA,8CAAA,CACA,4BAAA,CACA,0WACC,4BAAA,CAGF,uCACC,gBAAA,CAOF,yBACC,SAAA,CAIA,4EAEC,iBAAA,CAGD,yCACC,+BAAA,CACA,aAAA,CACA,wBAAA,CAEA,iHACC,mDAAA,CACA,4BAAA,CAKH,mCACC,uCAAA,CACA,eAAA,CAGD,+BACC,eAAA,CACA,8CAAA,CACA,+CAAA,CAGD,gRAKC,8BAAA,CACA,kBAAA,CACA,kCAAA,CAIA,iCACC,0BAAA,CAKH,mBACC,qCAAA,CACA,+BAAA,CACA,0CAAA,CAID,iBACI,2BAAA,CAKJ,oCAEC,kBAAA\",\"sourcesContent\":[\"/* Component containers\\n----------------------------------*/\\n.ui-widget-content {\\n\\tborder: 1px solid var(--color-border);\\n\\tbackground: var(--color-main-background) none;\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-widget-content a {\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-widget-header {\\n\\tborder: none;\\n\\tcolor: var(--color-main-text);\\n\\tbackground-image: none;\\n}\\n.ui-widget-header a {\\n\\tcolor: var(--color-main-text);\\n}\\n\\n/* Interaction states\\n----------------------------------*/\\n.ui-state-default,\\n.ui-widget-content .ui-state-default,\\n.ui-widget-header .ui-state-default {\\n\\tborder: 1px solid var(--color-border);\\n\\tbackground: var(--color-main-background) none;\\n\\tfont-weight: bold;\\n\\tcolor: #555;\\n}\\n.ui-state-default a,\\n.ui-state-default a:link,\\n.ui-state-default a:visited {\\n\\tcolor: #555;\\n}\\n.ui-state-hover,\\n.ui-widget-content .ui-state-hover,\\n.ui-widget-header .ui-state-hover,\\n.ui-state-focus,\\n.ui-widget-content .ui-state-focus,\\n.ui-widget-header .ui-state-focus {\\n\\tborder: 1px solid #ddd;\\n\\tbackground: var(--color-main-background) none;\\n\\tfont-weight: bold;\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-state-hover a,\\n.ui-state-hover a:hover,\\n.ui-state-hover a:link,\\n.ui-state-hover a:visited {\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-state-active,\\n.ui-widget-content .ui-state-active,\\n.ui-widget-header .ui-state-active {\\n\\tborder: 1px solid var(--color-primary);\\n\\tbackground: var(--color-main-background) none;\\n\\tfont-weight: bold;\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-state-active a,\\n.ui-state-active a:link,\\n.ui-state-active a:visited {\\n\\tcolor: var(--color-main-text);\\n}\\n\\n/* Interaction Cues\\n----------------------------------*/\\n.ui-state-highlight,\\n.ui-widget-content .ui-state-highlight,\\n.ui-widget-header .ui-state-highlight {\\n\\tborder: 1px solid var(--color-main-background);\\n\\tbackground: var(--color-main-background) none;\\n\\tcolor: var(--color-text-light);\\n\\tfont-weight: 600;\\n}\\n.ui-state-highlight a,\\n.ui-widget-content .ui-state-highlight a,\\n.ui-widget-header .ui-state-highlight a {\\n\\tcolor: var(--color-text-lighter);\\n}\\n.ui-state-error,\\n.ui-widget-content .ui-state-error,\\n.ui-widget-header .ui-state-error {\\n\\tborder: var(--color-error);\\n\\tbackground: var(--color-error) none;\\n\\tcolor: #ffffff;\\n}\\n.ui-state-error a,\\n.ui-widget-content .ui-state-error a,\\n.ui-widget-header .ui-state-error a {\\n\\tcolor: #ffffff;\\n}\\n.ui-state-error-text,\\n.ui-widget-content .ui-state-error-text,\\n.ui-widget-header .ui-state-error-text {\\n\\tcolor: #ffffff;\\n}\\n\\n/* Icons\\n----------------------------------*/\\n.ui-state-default .ui-icon {\\n\\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\\n}\\n.ui-state-hover .ui-icon,\\n.ui-state-focus .ui-icon {\\n\\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\\n}\\n.ui-state-active .ui-icon {\\n\\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\\n}\\n.ui-state-highlight .ui-icon {\\n\\tbackground-image: url('images/ui-icons_ffffff_256x240.png');\\n}\\n.ui-state-error .ui-icon,\\n.ui-state-error-text .ui-icon {\\n\\tbackground-image: url('images/ui-icons_ffd27a_256x240.png');\\n}\\n.ui-icon.ui-icon-none {\\n\\tdisplay: none;\\n}\\n\\n/* Misc visuals\\n----------------------------------*/\\n/* Overlays */\\n.ui-widget-overlay {\\n\\tbackground: #666666 url('images/ui-bg_diagonals-thick_20_666666_40x40.png') 50% 50% repeat;\\n\\topacity: .5;\\n}\\n.ui-widget-shadow {\\n\\tmargin: -5px 0 0 -5px;\\n\\tpadding: 5px;\\n\\tbackground: #000000 url('images/ui-bg_flat_10_000000_40x100.png') 50% 50% repeat-x;\\n\\topacity: .2;\\n\\tborder-radius: 5px;\\n}\\n\\n/* Tabs customizations */\\n.ui-tabs {\\n\\tborder: none;\\n\\n\\t.ui-tabs-nav.ui-corner-all {\\n\\t\\tborder-bottom-left-radius: 0;\\n\\t\\tborder-bottom-right-radius: 0;\\n\\t}\\n\\n\\t.ui-tabs-nav {\\n\\t\\tbackground: none;\\n\\t\\tmargin-bottom: 15px;\\n\\n\\t\\t.ui-state-default {\\n\\t\\t\\tborder: none;\\n\\t\\t\\tborder-bottom: 1px solid transparent;\\n\\t\\t\\tfont-weight: normal;\\n\\t\\t\\tmargin: 0 !important;\\n\\t\\t\\tpadding: 0 !important;\\n\\t\\t}\\n\\n\\t\\t.ui-state-hover,\\n\\t\\t.ui-state-active {\\n\\t\\t\\tborder: none;\\n\\t\\t\\tborder-bottom: 1px solid var(--color-main-text);\\n\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\ta, a:link, a:hover, a:visited {\\n\\t\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t.ui-state-active {\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t}\\n\\t}\\n}\\n\\n/* Select menus */\\n.ui-autocomplete {\\n\\t&.ui-menu {\\n\\t\\tpadding: 0;\\n\\n\\t\\t/* scrolling starts from three items,\\n\\t\\t * so hide overflow and scrollbars for a clean layout */\\n\\t\\t&.item-count-1,\\n\\t\\t&.item-count-2 {\\n\\t\\t\\toverflow-y: hidden;\\n\\t\\t}\\n\\n\\t\\t.ui-menu-item a {\\n\\t\\t\\tcolor: var(--color-text-lighter);\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\tpadding: 4px 4px 4px 14px;\\n\\n\\t\\t\\t&.ui-state-focus, &.ui-state-active {\\n\\t\\t\\t\\tbox-shadow: inset 4px 0 var(--color-primary-element);\\n\\t\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&.ui-widget-content {\\n\\t\\tbackground: var(--color-main-background);\\n\\t\\tborder-top: none;\\n\\t}\\n\\n\\t&.ui-corner-all {\\n\\t\\tborder-radius: 0;\\n\\t\\tborder-bottom-left-radius: var(--border-radius);\\n\\t\\tborder-bottom-right-radius: var(--border-radius);\\n\\t}\\n\\n\\t.ui-state-hover, .ui-widget-content .ui-state-hover,\\n\\t.ui-widget-header .ui-state-hover,\\n\\t.ui-state-focus,\\n\\t.ui-widget-content .ui-state-focus,\\n\\t.ui-widget-header .ui-state-focus {\\n\\t\\tborder: 1px solid transparent;\\n\\t\\tbackground: inherit;\\n\\t\\tcolor: var(--color-primary-element);\\n\\t}\\n\\n\\t.ui-menu-item {\\n\\t\\ta {\\n\\t\\t\\tborder-radius: 0 !important;\\n\\t\\t}\\n\\t}\\n}\\n\\n.ui-button.primary {\\n\\tbackground-color: var(--color-primary);\\n\\tcolor: var(--color-primary-text);\\n\\tborder: 1px solid var(--color-primary-text);\\n}\\n\\n// fix ui-buttons on hover\\n.ui-button:hover {\\n font-weight:bold !important;\\n}\\n\\n\\n/* DRAGGABLE */\\n.ui-draggable-handle,\\n.ui-selectable {\\n\\ttouch-action: pan-y;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".oc-dialog{background:var(--color-main-background);color:var(--color-text-light);border-radius:var(--border-radius-large);box-shadow:0 0 30px var(--color-box-shadow);padding:24px;z-index:10000;font-size:100%;box-sizing:border-box;min-width:200px;top:50%;left:50%;transform:translate(-50%, -50%);max-height:calc(100% - 20px);max-width:calc(100% - 20px);overflow:auto}.oc-dialog-title{background:var(--color-main-background)}.oc-dialog-buttonrow{position:relative;display:flex;background:rgba(0,0,0,0);right:0;bottom:0;padding:0;padding-top:10px;box-sizing:border-box;width:100%;background-image:linear-gradient(rgba(255, 255, 255, 0), var(--color-main-background))}.oc-dialog-buttonrow.twobuttons{justify-content:space-between}.oc-dialog-buttonrow.onebutton,.oc-dialog-buttonrow.twobuttons.aside{justify-content:flex-end}.oc-dialog-buttonrow button{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:44px;min-width:44px}.oc-dialog-close{position:absolute;width:44px !important;height:44px !important;top:4px;right:4px;padding:25px;background:var(--icon-close-dark) no-repeat center;opacity:.5;border-radius:var(--border-radius-pill)}.oc-dialog-close:hover,.oc-dialog-close:focus,.oc-dialog-close:active{opacity:1}.oc-dialog-dim{background-color:#000;opacity:.2;z-index:9999;position:fixed;top:0;left:0;width:100%;height:100%}body.theme--dark .oc-dialog-dim{opacity:.8}.oc-dialog-content{width:100%;max-width:550px}.oc-dialog.password-confirmation .oc-dialog-content{width:auto}.oc-dialog.password-confirmation .oc-dialog-content input[type=password]{width:100%}.oc-dialog.password-confirmation .oc-dialog-content label{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/jquery/css/jquery.ocdialog.scss\"],\"names\":[],\"mappings\":\"AAAA,WACC,uCAAA,CACA,6BAAA,CACA,wCAAA,CACA,2CAAA,CACA,YAAA,CACA,aAAA,CACA,cAAA,CACA,qBAAA,CACA,eAAA,CACA,OAAA,CACA,QAAA,CACA,+BAAA,CACA,4BAAA,CACA,2BAAA,CACA,aAAA,CAED,iBACC,uCAAA,CAED,qBACC,iBAAA,CACA,YAAA,CACA,wBAAA,CACA,OAAA,CACA,QAAA,CACA,SAAA,CACA,gBAAA,CACA,qBAAA,CACA,UAAA,CACA,sFAAA,CAEA,gCACO,6BAAA,CAGP,qEAEC,wBAAA,CAGD,4BACI,kBAAA,CACA,eAAA,CACH,sBAAA,CACA,WAAA,CACA,cAAA,CAIF,iBACC,iBAAA,CACA,qBAAA,CACA,sBAAA,CACA,OAAA,CACA,SAAA,CACA,YAAA,CACA,kDAAA,CACA,UAAA,CACA,uCAAA,CAEA,sEAGC,SAAA,CAIF,eACC,qBAAA,CACA,UAAA,CACA,YAAA,CACA,cAAA,CACA,KAAA,CACA,MAAA,CACA,UAAA,CACA,WAAA,CAGD,gCACC,UAAA,CAGD,mBACC,UAAA,CACA,eAAA,CAIA,oDACC,UAAA,CAEA,yEACC,UAAA,CAED,0DACC,YAAA\",\"sourcesContent\":[\".oc-dialog {\\n\\tbackground: var(--color-main-background);\\n\\tcolor: var(--color-text-light);\\n\\tborder-radius: var(--border-radius-large);\\n\\tbox-shadow: 0 0 30px var(--color-box-shadow);\\n\\tpadding: 24px;\\n\\tz-index: 10000;\\n\\tfont-size: 100%;\\n\\tbox-sizing: border-box;\\n\\tmin-width: 200px;\\n\\ttop: 50%;\\n\\tleft: 50%;\\n\\ttransform: translate(-50%, -50%);\\n\\tmax-height: calc(100% - 20px);\\n\\tmax-width: calc(100% - 20px);\\n\\toverflow: auto;\\n}\\n.oc-dialog-title {\\n\\tbackground: var(--color-main-background);\\n}\\n.oc-dialog-buttonrow {\\n\\tposition: relative;\\n\\tdisplay: flex;\\n\\tbackground: transparent;\\n\\tright: 0;\\n\\tbottom: 0;\\n\\tpadding: 0;\\n\\tpadding-top: 10px;\\n\\tbox-sizing: border-box;\\n\\twidth: 100%;\\n\\tbackground-image: linear-gradient(rgba(255, 255, 255, 0.0), var(--color-main-background));\\n\\n\\t&.twobuttons {\\n justify-content: space-between;\\n }\\n\\n\\t&.onebutton,\\n\\t&.twobuttons.aside {\\n\\t\\tjustify-content: flex-end;\\n\\t}\\n\\n\\tbutton {\\n\\t white-space: nowrap;\\n\\t overflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\theight: 44px;\\n\\t\\tmin-width: 44px;\\n\\t}\\n}\\n\\n.oc-dialog-close {\\n\\tposition: absolute;\\n\\twidth: 44px !important;\\n\\theight: 44px !important;\\n\\ttop: 4px;\\n\\tright: 4px;\\n\\tpadding: 25px;\\n\\tbackground: var(--icon-close-dark) no-repeat center;\\n\\topacity: .5;\\n\\tborder-radius: var(--border-radius-pill);\\n\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\topacity: 1;\\n\\t}\\n}\\n\\n.oc-dialog-dim {\\n\\tbackground-color: #000;\\n\\topacity: .2;\\n\\tz-index: 9999;\\n\\tposition: fixed;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\twidth: 100%;\\n\\theight: 100%;\\n}\\n\\nbody.theme--dark .oc-dialog-dim {\\n\\topacity: .8;\\n}\\n\\n.oc-dialog-content {\\n\\twidth: 100%;\\n\\tmax-width: 550px;\\n}\\n\\n.oc-dialog.password-confirmation {\\n\\t.oc-dialog-content {\\n\\t\\twidth: auto;\\n\\n\\t\\tinput[type=password] {\\n\\t\\t\\twidth: 100%;\\n\\t\\t}\\n\\t\\tlabel {\\n\\t\\t\\tdisplay: none;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-menu[data-v-b778f520]{width:100%;display:flex;flex-shrink:1;flex-wrap:wrap}.app-menu-main[data-v-b778f520]{display:flex;flex-wrap:nowrap}.app-menu-main .app-menu-entry[data-v-b778f520]{width:50px;height:50px;position:relative;display:flex;opacity:.7}.app-menu-main .app-menu-entry.app-menu-entry__active[data-v-b778f520]{opacity:1}.app-menu-main .app-menu-entry.app-menu-entry__active[data-v-b778f520]::before{content:\\\" \\\";position:absolute;pointer-events:none;border-bottom-color:var(--color-main-background);transform:translateX(-50%);width:12px;height:5px;border-radius:3px;background-color:var(--color-primary-text);left:50%;bottom:6px;display:block;transition:all .1s ease-in-out;opacity:1}.app-menu-main .app-menu-entry.app-menu-entry__active .app-menu-entry--label[data-v-b778f520]{font-weight:bold}.app-menu-main .app-menu-entry a[data-v-b778f520]{width:calc(100% - 4px);height:calc(100% - 4px);margin:2px;color:var(--color-primary-text);position:relative}.app-menu-main .app-menu-entry img[data-v-b778f520]{transition:margin .1s ease-in-out;width:20px;height:20px;padding:calc((100% - 20px)/2);box-sizing:content-box;filter:var(--background-image-invert-if-bright)}.app-menu-main .app-menu-entry .app-menu-entry--label[data-v-b778f520]{opacity:0;position:absolute;font-size:12px;color:var(--color-primary-text);text-align:center;left:50%;top:45%;display:block;min-width:100%;transform:translateX(-50%);transition:all .1s ease-in-out;width:100%;text-overflow:ellipsis;overflow:hidden;letter-spacing:-0.5px}.app-menu-main .app-menu-entry[data-v-b778f520]:hover,.app-menu-main .app-menu-entry[data-v-b778f520]:focus-within{opacity:1}.app-menu-main .app-menu-entry:hover .app-menu-entry--label[data-v-b778f520],.app-menu-main .app-menu-entry:focus-within .app-menu-entry--label[data-v-b778f520]{opacity:1;font-weight:bolder;bottom:0;width:100%;text-overflow:ellipsis;overflow:hidden}.app-menu-main[data-v-b778f520]:hover,.app-menu-main[data-v-b778f520]:focus-within,.app-menu-main .app-menu-entry[data-v-b778f520]:hover,.app-menu-main .app-menu-entry[data-v-b778f520]:focus{opacity:1}.app-menu-main:hover img[data-v-b778f520],.app-menu-main:focus-within img[data-v-b778f520],.app-menu-main .app-menu-entry:hover img[data-v-b778f520],.app-menu-main .app-menu-entry:focus img[data-v-b778f520]{margin-top:-8px}.app-menu-main:hover .app-menu-entry--label[data-v-b778f520],.app-menu-main:focus-within .app-menu-entry--label[data-v-b778f520],.app-menu-main .app-menu-entry:hover .app-menu-entry--label[data-v-b778f520],.app-menu-main .app-menu-entry:focus .app-menu-entry--label[data-v-b778f520]{opacity:1;bottom:0}.app-menu-main[data-v-b778f520]:hover::before,.app-menu-main:hover .app-menu-entry[data-v-b778f520]::before,.app-menu-main[data-v-b778f520]:focus-within::before,.app-menu-main:focus-within .app-menu-entry[data-v-b778f520]::before,.app-menu-main .app-menu-entry[data-v-b778f520]:hover::before,.app-menu-main .app-menu-entry:hover .app-menu-entry[data-v-b778f520]::before,.app-menu-main .app-menu-entry[data-v-b778f520]:focus::before,.app-menu-main .app-menu-entry:focus .app-menu-entry[data-v-b778f520]::before{opacity:0}[data-v-b778f520] .app-menu-more .button-vue--vue-tertiary{opacity:.7;margin:3px;filter:var(--background-image-invert-if-bright)}[data-v-b778f520] .app-menu-more .button-vue--vue-tertiary:not([aria-expanded=true]){color:var(--color-primary-text)}[data-v-b778f520] .app-menu-more .button-vue--vue-tertiary:not([aria-expanded=true]):hover{opacity:1;background-color:rgba(0,0,0,0) !important}[data-v-b778f520] .app-menu-more .button-vue--vue-tertiary:focus-visible{opacity:1;outline:none !important}.app-menu-popover-entry .app-icon[data-v-b778f520]{position:relative;height:44px;filter:var(--background-invert-if-bright)}.app-menu-popover-entry .app-icon.has-unread[data-v-b778f520]::after{background-color:var(--color-main-text)}.app-menu-popover-entry .app-icon img[data-v-b778f520]{width:20px;height:20px;padding:15px}.has-unread[data-v-b778f520]::after{content:\\\"\\\";width:8px;height:8px;background-color:var(--color-primary-text);border-radius:50%;position:absolute;display:block;top:10px;right:10px}.unread-counter[data-v-b778f520]{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/AppMenu.vue\"],\"names\":[],\"mappings\":\"AAGA,2BACC,UAAA,CACA,YAAA,CACA,aAAA,CACA,cAAA,CAED,gCACC,YAAA,CACA,gBAAA,CAEA,gDACC,UAAA,CACA,WAAA,CACA,iBAAA,CACA,YAAA,CACA,UAAA,CAEA,uEACC,SAAA,CAEA,+EACC,WAAA,CACA,iBAAA,CACA,mBAAA,CACA,gDAAA,CACA,0BAAA,CACA,UAAA,CACA,UAAA,CACA,iBAAA,CACA,0CAAA,CACA,QAAA,CACA,UAAA,CACA,aAAA,CACA,8BAAA,CACA,SAAA,CAGD,8FACC,gBAAA,CAIF,kDACC,sBAAA,CACA,uBAAA,CACA,UAAA,CACA,+BAAA,CACA,iBAAA,CAGD,oDACC,iCAAA,CACA,UAtDgB,CAuDhB,WAvDgB,CAwDhB,6BAAA,CACA,sBAAA,CACA,+CAAA,CAGD,uEACC,SAAA,CACA,iBAAA,CACA,cAAA,CACA,+BAAA,CACA,iBAAA,CACA,QAAA,CACA,OAAA,CACA,aAAA,CACA,cAAA,CACA,0BAAA,CACA,8BAAA,CACA,UAAA,CACA,sBAAA,CACA,eAAA,CACA,qBAAA,CAGD,mHAEC,SAAA,CACA,iKACC,SAAA,CACA,kBAAA,CACA,QAAA,CACA,UAAA,CACA,sBAAA,CACA,eAAA,CAOH,+LAIC,SAAA,CAEA,+MACC,eAAA,CAGD,2RACC,SAAA,CACA,QAAA,CAGD,8fACC,SAAA,CAKH,2DACC,UAAA,CACA,UAAA,CACA,+CAAA,CAGA,qFACC,+BAAA,CAEA,2FACC,SAAA,CACA,yCAAA,CAIF,yEACC,SAAA,CACA,uBAAA,CAKD,mDACC,iBAAA,CACA,WAAA,CAEA,yCAAA,CAEA,qEACC,uCAAA,CAGD,uDACC,UArJgB,CAsJhB,WAtJgB,CAuJhB,YAAA,CAKH,oCACC,UAAA,CACA,SAAA,CACA,UAAA,CACA,0CAAA,CACA,iBAAA,CACA,iBAAA,CACA,aAAA,CACA,QAAA,CACA,UAAA,CAGD,iCACC,YAAA\",\"sourcesContent\":[\"\\n$header-icon-size: 20px;\\n\\n.app-menu {\\n\\twidth: 100%;\\n\\tdisplay: flex;\\n\\tflex-shrink: 1;\\n\\tflex-wrap: wrap;\\n}\\n.app-menu-main {\\n\\tdisplay: flex;\\n\\tflex-wrap: nowrap;\\n\\n\\t.app-menu-entry {\\n\\t\\twidth: 50px;\\n\\t\\theight: 50px;\\n\\t\\tposition: relative;\\n\\t\\tdisplay: flex;\\n\\t\\topacity: .7;\\n\\n\\t\\t&.app-menu-entry__active {\\n\\t\\t\\topacity: 1;\\n\\n\\t\\t\\t&::before {\\n\\t\\t\\t\\tcontent: \\\" \\\";\\n\\t\\t\\t\\tposition: absolute;\\n\\t\\t\\t\\tpointer-events: none;\\n\\t\\t\\t\\tborder-bottom-color: var(--color-main-background);\\n\\t\\t\\t\\ttransform: translateX(-50%);\\n\\t\\t\\t\\twidth: 12px;\\n\\t\\t\\t\\theight: 5px;\\n\\t\\t\\t\\tborder-radius: 3px;\\n\\t\\t\\t\\tbackground-color: var(--color-primary-text);\\n\\t\\t\\t\\tleft: 50%;\\n\\t\\t\\t\\tbottom: 6px;\\n\\t\\t\\t\\tdisplay: block;\\n\\t\\t\\t\\ttransition: all 0.1s ease-in-out;\\n\\t\\t\\t\\topacity: 1;\\n\\t\\t\\t}\\n\\n\\t\\t\\t.app-menu-entry--label {\\n\\t\\t\\t\\tfont-weight: bold;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\ta {\\n\\t\\t\\twidth: calc(100% - 4px);\\n\\t\\t\\theight: calc(100% - 4px);\\n\\t\\t\\tmargin: 2px;\\n\\t\\t\\tcolor: var(--color-primary-text);\\n\\t\\t\\tposition: relative;\\n\\t\\t}\\n\\n\\t\\timg {\\n\\t\\t\\ttransition: margin 0.1s ease-in-out;\\n\\t\\t\\twidth: $header-icon-size;\\n\\t\\t\\theight: $header-icon-size;\\n\\t\\t\\tpadding: calc((100% - $header-icon-size) / 2);\\n\\t\\t\\tbox-sizing: content-box;\\n\\t\\t\\tfilter: var(--background-image-invert-if-bright);\\n\\t\\t}\\n\\n\\t\\t.app-menu-entry--label {\\n\\t\\t\\topacity: 0;\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\tfont-size: 12px;\\n\\t\\t\\tcolor: var(--color-primary-text);\\n\\t\\t\\ttext-align: center;\\n\\t\\t\\tleft: 50%;\\n\\t\\t\\ttop: 45%;\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\tmin-width: 100%;\\n\\t\\t\\ttransform: translateX(-50%);\\n\\t\\t\\ttransition: all 0.1s ease-in-out;\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\tletter-spacing: -0.5px;\\n\\t\\t}\\n\\n\\t\\t&:hover,\\n\\t\\t&:focus-within {\\n\\t\\t\\topacity: 1;\\n\\t\\t\\t.app-menu-entry--label {\\n\\t\\t\\t\\topacity: 1;\\n\\t\\t\\t\\tfont-weight: bolder;\\n\\t\\t\\t\\tbottom: 0;\\n\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\t\\toverflow: hidden;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t}\\n\\n\\t// Show labels\\n\\t&:hover,\\n\\t&:focus-within,\\n\\t.app-menu-entry:hover,\\n\\t.app-menu-entry:focus {\\n\\t\\topacity: 1;\\n\\n\\t\\timg {\\n\\t\\t\\tmargin-top: -8px;\\n\\t\\t}\\n\\n\\t\\t.app-menu-entry--label {\\n\\t\\t\\topacity: 1;\\n\\t\\t\\tbottom: 0;\\n\\t\\t}\\n\\n\\t\\t&::before, .app-menu-entry::before {\\n\\t\\t\\topacity: 0;\\n\\t\\t}\\n\\t}\\n}\\n\\n::v-deep .app-menu-more .button-vue--vue-tertiary {\\n\\topacity: .7;\\n\\tmargin: 3px;\\n\\tfilter: var(--background-image-invert-if-bright);\\n\\n\\t/* Remove all background and align text color if not expanded */\\n\\t&:not([aria-expanded=\\\"true\\\"]) {\\n\\t\\tcolor: var(--color-primary-text);\\n\\n\\t\\t&:hover {\\n\\t\\t\\topacity: 1;\\n\\t\\t\\tbackground-color: transparent !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&:focus-visible {\\n\\t\\topacity: 1;\\n\\t\\toutline: none !important;\\n\\t}\\n}\\n\\n.app-menu-popover-entry {\\n\\t.app-icon {\\n\\t\\tposition: relative;\\n\\t\\theight: 44px;\\n\\t\\t/* Icons are bright so invert them if bright color theme == bright background is used */\\n\\t\\tfilter: var(--background-invert-if-bright);\\n\\n\\t\\t&.has-unread::after {\\n\\t\\t\\tbackground-color: var(--color-main-text);\\n\\t\\t}\\n\\n\\t\\timg {\\n\\t\\t\\twidth: $header-icon-size;\\n\\t\\t\\theight: $header-icon-size;\\n\\t\\t\\tpadding: calc((50px - $header-icon-size) / 2);\\n\\t\\t}\\n\\t}\\n}\\n\\n.has-unread::after {\\n\\tcontent: \\\"\\\";\\n\\twidth: 8px;\\n\\theight: 8px;\\n\\tbackground-color: var(--color-primary-text);\\n\\tborder-radius: 50%;\\n\\tposition: absolute;\\n\\tdisplay: block;\\n\\ttop: 10px;\\n\\tright: 10px;\\n}\\n\\n.unread-counter {\\n\\tdisplay: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".menu-entry__loading-icon[data-v-6e59d13c]{margin-right:8px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/UserMenu/UserMenuEntry.vue\"],\"names\":[],\"mappings\":\"AAEC,2CACC,gBAAA\",\"sourcesContent\":[\"\\n.menu-entry {\\n\\t&__loading-icon {\\n\\t\\tmargin-right: 8px;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#contactsmenu-menu[data-v-1563c388]{height:calc(100vh - 150px);max-height:302px;min-height:175px;width:350px}#contactsmenu-menu[data-v-1563c388] .emptycontent{margin-top:5vh !important;margin-bottom:1.5vh}#contactsmenu-menu[data-v-1563c388] .emptycontent .icon-loading,#contactsmenu-menu[data-v-1563c388] .emptycontent .icon-search{display:inline-block}#contactsmenu-menu[data-v-1563c388] #contactsmenu-search{width:calc(100% - 16px);margin:8px;height:34px}#contactsmenu-menu[data-v-1563c388] .content{height:calc(100vh - 150px - 50px);max-height:250px;min-height:125px;overflow-y:auto}#contactsmenu-menu[data-v-1563c388] .content .footer{text-align:center}#contactsmenu-menu[data-v-1563c388] .content .footer a{display:block;width:100%;padding:12px 0;opacity:.5}#contactsmenu-menu[data-v-1563c388] a{padding:2px}#contactsmenu-menu[data-v-1563c388] a:focus-visible{box-shadow:inset 0 0 0 2px var(--color-main-text) !important}#contactsmenu-menu[data-v-1563c388] .contact{display:flex;position:relative;align-items:center;padding:3px 3px 3px 10px}#contactsmenu-menu[data-v-1563c388] .contact .avatar{height:32px;width:32px;display:inline-block}#contactsmenu-menu[data-v-1563c388] .contact .body{flex-grow:1;padding-left:8px;min-width:0}#contactsmenu-menu[data-v-1563c388] .contact .body div{position:relative;width:100%;overflow-x:hidden;text-overflow:ellipsis}#contactsmenu-menu[data-v-1563c388] .contact .body .last-message,#contactsmenu-menu[data-v-1563c388] .contact .body .email-address{color:var(--color-text-maxcontrast)}#contactsmenu-menu[data-v-1563c388] .contact .top-action,#contactsmenu-menu[data-v-1563c388] .contact .second-action,#contactsmenu-menu[data-v-1563c388] .contact .other-actions{width:16px;height:16px;opacity:.5;cursor:pointer}#contactsmenu-menu[data-v-1563c388] .contact .top-action:not(button),#contactsmenu-menu[data-v-1563c388] .contact .second-action:not(button),#contactsmenu-menu[data-v-1563c388] .contact .other-actions:not(button){padding:14px}#contactsmenu-menu[data-v-1563c388] .contact .top-action img,#contactsmenu-menu[data-v-1563c388] .contact .second-action img,#contactsmenu-menu[data-v-1563c388] .contact .other-actions img{filter:var(--background-invert-if-dark)}#contactsmenu-menu[data-v-1563c388] .contact .top-action:hover,#contactsmenu-menu[data-v-1563c388] .contact .top-action:active,#contactsmenu-menu[data-v-1563c388] .contact .top-action:focus,#contactsmenu-menu[data-v-1563c388] .contact .second-action:hover,#contactsmenu-menu[data-v-1563c388] .contact .second-action:active,#contactsmenu-menu[data-v-1563c388] .contact .second-action:focus,#contactsmenu-menu[data-v-1563c388] .contact .other-actions:hover,#contactsmenu-menu[data-v-1563c388] .contact .other-actions:active,#contactsmenu-menu[data-v-1563c388] .contact .other-actions:focus{opacity:1}#contactsmenu-menu[data-v-1563c388] .contact button.other-actions{width:44px}#contactsmenu-menu[data-v-1563c388] .contact button.other-actions:focus{border-color:rgba(0,0,0,0);box-shadow:0 0 0 2px var(--color-main-text)}#contactsmenu-menu[data-v-1563c388] .contact button.other-actions:focus-visible{border-radius:var(--border-radius-pill)}#contactsmenu-menu[data-v-1563c388] .contact .menu{top:47px;margin-right:13px}#contactsmenu-menu[data-v-1563c388] .contact .popovermenu::after{right:2px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/views/ContactsMenu.vue\"],\"names\":[],\"mappings\":\"AACA,oCAEC,0BAAA,CACA,gBAAA,CACA,gBAAA,CACA,WAAA,CAGC,kDACC,yBAAA,CACA,mBAAA,CACA,+HAEC,oBAAA,CAIF,yDACC,uBAAA,CACA,UAAA,CACA,WAAA,CAGD,6CAEC,iCAAA,CACA,gBAAA,CACA,gBAAA,CACA,eAAA,CAEA,qDACC,iBAAA,CAEA,uDACC,aAAA,CACA,UAAA,CACA,cAAA,CACA,UAAA,CAKH,sCACC,WAAA,CAEA,oDACC,4DAAA,CAIF,6CACC,YAAA,CACA,iBAAA,CACA,kBAAA,CACA,wBAAA,CAEA,qDACC,WAAA,CACA,UAAA,CACA,oBAAA,CAGD,mDACC,WAAA,CACA,gBAAA,CACA,WAAA,CAEA,uDACC,iBAAA,CACA,UAAA,CACA,iBAAA,CACA,sBAAA,CAGD,mIACC,mCAAA,CAIF,iLACC,UAAA,CACA,WAAA,CACA,UAAA,CACA,cAAA,CAEA,qNACC,YAAA,CAED,6LACC,uCAAA,CAGD,4kBAGC,SAAA,CAIF,kEACC,UAAA,CAEA,wEACC,0BAAA,CACA,2CAAA,CAGD,gFACC,uCAAA,CAKF,mDACC,QAAA,CACA,iBAAA,CAED,iEACC,SAAA\",\"sourcesContent\":[\"\\n#contactsmenu-menu {\\n\\t/* show 2.5 to 4.5 entries depending on the screen height */\\n\\theight: calc(100vh - 50px * 3);\\n\\tmax-height: calc(50px * 6 + 2px);\\n\\tmin-height: calc(50px * 3.5);\\n\\twidth: 350px;\\n\\n\\t&:deep {\\n\\t\\t.emptycontent {\\n\\t\\t\\tmargin-top: 5vh !important;\\n\\t\\t\\tmargin-bottom: 1.5vh;\\n\\t\\t\\t.icon-loading,\\n\\t\\t\\t.icon-search {\\n\\t\\t\\t\\tdisplay: inline-block;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t#contactsmenu-search {\\n\\t\\t\\twidth: calc(100% - 16px);\\n\\t\\t\\tmargin: 8px;\\n\\t\\t\\theight: 34px;\\n\\t\\t}\\n\\n\\t\\t.content {\\n\\t\\t\\t/* fixed max height of the parent container without the search input */\\n\\t\\t\\theight: calc(100vh - 50px * 3 - 50px);\\n\\t\\t\\tmax-height: calc(50px * 5);\\n\\t\\t\\tmin-height: calc(50px * 3.5 - 50px);\\n\\t\\t\\toverflow-y: auto;\\n\\n\\t\\t\\t.footer {\\n\\t\\t\\t\\ttext-align: center;\\n\\n\\t\\t\\t\\ta {\\n\\t\\t\\t\\t\\tdisplay: block;\\n\\t\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\t\\tpadding: 12px 0;\\n\\t\\t\\t\\t\\topacity: .5;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\ta {\\n\\t\\t\\tpadding: 2px;\\n\\n\\t\\t\\t&:focus-visible {\\n\\t\\t\\t\\tbox-shadow: inset 0 0 0 2px var(--color-main-text) !important; // override rule in core/css/headers.scss #header a:focus-visible\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.contact {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tposition: relative;\\n\\t\\t\\talign-items: center;\\n\\t\\t\\tpadding: 3px 3px 3px 10px;\\n\\n\\t\\t\\t.avatar {\\n\\t\\t\\t\\theight: 32px;\\n\\t\\t\\t\\twidth: 32px;\\n\\t\\t\\t\\tdisplay: inline-block;\\n\\t\\t\\t}\\n\\n\\t\\t\\t.body {\\n\\t\\t\\t\\tflex-grow: 1;\\n\\t\\t\\t\\tpadding-left: 8px;\\n\\t\\t\\t\\tmin-width: 0;\\n\\n\\t\\t\\t\\tdiv {\\n\\t\\t\\t\\t\\tposition: relative;\\n\\t\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\t\\toverflow-x: hidden;\\n\\t\\t\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t.last-message, .email-address {\\n\\t\\t\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t.top-action, .second-action, .other-actions {\\n\\t\\t\\t\\twidth: 16px;\\n\\t\\t\\t\\theight: 16px;\\n\\t\\t\\t\\topacity: .5;\\n\\t\\t\\t\\tcursor: pointer;\\n\\n\\t\\t\\t\\t&:not(button) {\\n\\t\\t\\t\\t\\tpadding: 14px;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\timg {\\n\\t\\t\\t\\t\\tfilter: var(--background-invert-if-dark);\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t&:hover,\\n\\t\\t\\t\\t&:active,\\n\\t\\t\\t\\t&:focus {\\n\\t\\t\\t\\t\\topacity: 1;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\tbutton.other-actions {\\n\\t\\t\\t\\twidth: 44px;\\n\\n\\t\\t\\t\\t&:focus {\\n\\t\\t\\t\\t\\tborder-color: transparent;\\n\\t\\t\\t\\t\\tbox-shadow: 0 0 0 2px var(--color-main-text);\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t&:focus-visible {\\n\\t\\t\\t\\t\\tborder-radius: var(--border-radius-pill);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t/* actions menu */\\n\\t\\t\\t.menu {\\n\\t\\t\\t\\ttop: 47px;\\n\\t\\t\\t\\tmargin-right: 13px;\\n\\t\\t\\t}\\n\\t\\t\\t.popovermenu::after {\\n\\t\\t\\t\\tright: 2px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".user-menu[data-v-6a818bbc]{margin-right:12px}.user-menu[data-v-6a818bbc] .header-menu__trigger{opacity:1 !important}.user-menu[data-v-6a818bbc] .header-menu__trigger:focus-visible .user-menu__avatar{border:2px solid var(--color-primary-text)}.user-menu[data-v-6a818bbc] .header-menu__carret{display:none !important}.user-menu[data-v-6a818bbc] .header-menu__content{width:fit-content !important}.user-menu__avatar[data-v-6a818bbc]:active,.user-menu__avatar[data-v-6a818bbc]:focus,.user-menu__avatar[data-v-6a818bbc]:hover{border:2px solid var(--color-primary-text)}.user-menu__nav[data-v-6a818bbc]{display:flex;width:100%}.user-menu__nav ul[data-v-6a818bbc]{display:flex;flex-direction:column;gap:2px}.user-menu__nav ul[data-v-6a818bbc] li a,.user-menu__nav ul[data-v-6a818bbc] li button{border-radius:6px;display:inline-flex;align-items:center;height:var(--header-menu-item-height);color:var(--color-main-text);padding:10px 8px;box-sizing:border-box;white-space:nowrap;position:relative;width:100%}.user-menu__nav ul[data-v-6a818bbc] li a:hover,.user-menu__nav ul[data-v-6a818bbc] li button:hover{background-color:var(--color-background-hover)}.user-menu__nav ul[data-v-6a818bbc] li a:focus-visible,.user-menu__nav ul[data-v-6a818bbc] li button:focus-visible{background-color:var(--color-background-hover) !important;box-shadow:inset 0 0 0 2px var(--color-primary) !important;outline:none !important}.user-menu__nav ul[data-v-6a818bbc] li a:active,.user-menu__nav ul[data-v-6a818bbc] li a.active,.user-menu__nav ul[data-v-6a818bbc] li button:active,.user-menu__nav ul[data-v-6a818bbc] li button.active{background-color:var(--color-primary-light)}.user-menu__nav ul[data-v-6a818bbc] li a span,.user-menu__nav ul[data-v-6a818bbc] li button span{padding-bottom:0;color:var(--color-main-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:110px}.user-menu__nav ul[data-v-6a818bbc] li a img,.user-menu__nav ul[data-v-6a818bbc] li button img{width:16px;height:16px;margin-right:10px}.user-menu__nav ul[data-v-6a818bbc] li a img,.user-menu__nav ul[data-v-6a818bbc] li a svg,.user-menu__nav ul[data-v-6a818bbc] li button img,.user-menu__nav ul[data-v-6a818bbc] li button svg{opacity:.7;filter:var(--background-invert-if-dark)}.user-menu__nav ul[data-v-6a818bbc] li button{background-color:rgba(0,0,0,0);border:none;font-weight:normal;margin:0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/views/UserMenu.vue\"],\"names\":[],\"mappings\":\"AACA,4BACC,iBAAA,CAIE,kDACC,oBAAA,CAEC,mFACC,0CAAA,CAKH,iDACC,uBAAA,CAGD,kDACC,4BAAA,CAMF,+HAGC,0CAAA,CAIF,iCACC,YAAA,CACA,UAAA,CAEA,oCACC,YAAA,CACA,qBAAA,CACA,OAAA,CAIE,uFAEC,iBAAA,CACA,mBAAA,CACA,kBAAA,CACA,qCAAA,CACA,4BAAA,CACA,gBAAA,CACA,qBAAA,CACA,kBAAA,CACA,iBAAA,CACA,UAAA,CAEA,mGACC,8CAAA,CAGD,mHACC,yDAAA,CACA,0DAAA,CACA,uBAAA,CAGD,0MAEC,2CAAA,CAGD,iGACC,gBAAA,CACA,4BAAA,CACA,kBAAA,CACA,eAAA,CACA,sBAAA,CACA,eAAA,CAGD,+FACC,UAAA,CACA,WAAA,CACA,iBAAA,CAGD,8LAEC,UAAA,CACA,uCAAA,CAKF,8CACC,8BAAA,CACA,WAAA,CACA,kBAAA,CACA,QAAA\",\"sourcesContent\":[\"\\n.user-menu {\\n\\tmargin-right: 12px;\\n\\n\\t&:deep {\\n\\t\\t.header-menu {\\n\\t\\t\\t&__trigger {\\n\\t\\t\\t\\topacity: 1 !important;\\n\\t\\t\\t\\t&:focus-visible {\\n\\t\\t\\t\\t\\t.user-menu__avatar {\\n\\t\\t\\t\\t\\t\\tborder: 2px solid var(--color-primary-text);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t&__carret {\\n\\t\\t\\t\\tdisplay: none !important;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&__content {\\n\\t\\t\\t\\twidth: fit-content !important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&__avatar {\\n\\t\\t&:active,\\n\\t\\t&:focus,\\n\\t\\t&:hover {\\n\\t\\t\\tborder: 2px solid var(--color-primary-text);\\n\\t\\t}\\n\\t}\\n\\n\\t&__nav {\\n\\t\\tdisplay: flex;\\n\\t\\twidth: 100%;\\n\\n\\t\\tul {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tflex-direction: column;\\n\\t\\t\\tgap: 2px;\\n\\n\\t\\t\\t&:deep {\\n\\t\\t\\t\\tli {\\n\\t\\t\\t\\t\\ta,\\n\\t\\t\\t\\t\\tbutton {\\n\\t\\t\\t\\t\\t\\tborder-radius: 6px;\\n\\t\\t\\t\\t\\t\\tdisplay: inline-flex;\\n\\t\\t\\t\\t\\t\\talign-items: center;\\n\\t\\t\\t\\t\\t\\theight: var(--header-menu-item-height);\\n\\t\\t\\t\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\t\\t\\t\\tpadding: 10px 8px;\\n\\t\\t\\t\\t\\t\\tbox-sizing: border-box;\\n\\t\\t\\t\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\t\\t\\t\\tposition: relative;\\n\\t\\t\\t\\t\\t\\twidth: 100%;\\n\\n\\t\\t\\t\\t\\t\\t&:hover {\\n\\t\\t\\t\\t\\t\\t\\tbackground-color: var(--color-background-hover);\\n\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t&:focus-visible {\\n\\t\\t\\t\\t\\t\\t\\tbackground-color: var(--color-background-hover) !important;\\n\\t\\t\\t\\t\\t\\t\\tbox-shadow: inset 0 0 0 2px var(--color-primary) !important;\\n\\t\\t\\t\\t\\t\\t\\toutline: none !important;\\n\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\t&:active,\\n\\t\\t\\t\\t\\t\\t&.active {\\n\\t\\t\\t\\t\\t\\t\\tbackground-color: var(--color-primary-light);\\n\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\tspan {\\n\\t\\t\\t\\t\\t\\t\\tpadding-bottom: 0;\\n\\t\\t\\t\\t\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\t\\t\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\t\\t\\t\\t\\toverflow: hidden;\\n\\t\\t\\t\\t\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\t\\t\\t\\t\\tmax-width: 110px;\\n\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\timg {\\n\\t\\t\\t\\t\\t\\t\\twidth: 16px;\\n\\t\\t\\t\\t\\t\\t\\theight: 16px;\\n\\t\\t\\t\\t\\t\\t\\tmargin-right: 10px;\\n\\t\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t\\timg,\\n\\t\\t\\t\\t\\t\\tsvg {\\n\\t\\t\\t\\t\\t\\t\\topacity: .7;\\n\\t\\t\\t\\t\\t\\t\\tfilter: var(--background-invert-if-dark);\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\t// Override global button styles\\n\\t\\t\\t\\t\\tbutton {\\n\\t\\t\\t\\t\\t\\tbackground-color: transparent;\\n\\t\\t\\t\\t\\t\\tborder: none;\\n\\t\\t\\t\\t\\t\\tfont-weight: normal;\\n\\t\\t\\t\\t\\t\\tmargin: 0;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.program(5, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":1},\"end\":{\"line\":10,\"column\":8}}})) != null ? stack1 : \"\");\n},\"2\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileTitle\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":2},\"end\":{\"line\":7,\"column\":9}}})) != null ? stack1 : \"\");\n},\"3\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t\t<a class=\\\"profile-link--avatar\\\" href=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1), depth0))\n + \"\\\">\\n\t\t\t\t<img src=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32\\\" class=\\\"avatar\\\" srcset=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32 1x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=64 2x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=128 4x\\\" alt=\\\"\\\">\\n\t\t\t</a>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t<img src=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32\\\" class=\\\"avatar\\\" srcset=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32 1x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=64 2x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=128 4x\\\" alt=\\\"\\\">\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.program(11, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":12,\"column\":1},\"end\":{\"line\":20,\"column\":8}}})) != null ? stack1 : \"\");\n},\"8\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileTitle\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":13,\"column\":2},\"end\":{\"line\":17,\"column\":9}}})) != null ? stack1 : \"\");\n},\"9\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t\t<a class=\\\"profile-link--avatar\\\" href=\\\"\"\n + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1), depth0))\n + \"\\\">\\n\t\t\t\t<div class=\\\"avatar\\\"></div>\\n\t\t\t</a>\\n\";\n},\"11\":function(container,depth0,helpers,partials,data) {\n return \"\t\t<div class=\\\"avatar\\\"></div>\\n\";\n},\"13\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileTitle\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(14, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":23,\"column\":1},\"end\":{\"line\":29,\"column\":8}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(16, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":30,\"column\":1},\"end\":{\"line\":34,\"column\":8}}})) != null ? stack1 : \"\");\n},\"14\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t<a class=\\\"body profile-link--full-name\\\" href=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1), depth0))\n + \"\\\">\\n\t\t\t<div class=\\\"full-name\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"fullName\") : stack1), depth0))\n + \"</div>\\n\t\t\t<div class=\\\"last-message\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"lastMessage\") : stack1), depth0))\n + \"</div>\\n\t\t\t<div class=\\\"email-address\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"emailAddresses\") : stack1), depth0))\n + \"</div>\\n\t\t</a>\\n\";\n},\"16\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t<a class=\\\"top-action\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"hyperlink\") : stack1), depth0))\n + \"\\\" title=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\" aria-label=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n\t\t\t<img src=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"icon\") : stack1), depth0))\n + \"\\\" alt=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n\t\t</a>\\n\";\n},\"18\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(19, data, 0),\"inverse\":container.program(21, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":35,\"column\":0},\"end\":{\"line\":50,\"column\":0}}})) != null ? stack1 : \"\");\n},\"19\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t<a class=\\\"body\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"hyperlink\") : stack1), depth0))\n + \"\\\">\\n\t\t<div class=\\\"full-name\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"fullName\") : stack1), depth0))\n + \"</div>\\n\t\t<div class=\\\"last-message\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"lastMessage\") : stack1), depth0))\n + \"</div>\\n\t\t<div class=\\\"email-address\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"emailAddresses\") : stack1), depth0))\n + \"</div>\\n\t</a>\\n \t<a class=\\\"top-action\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"hyperlink\") : stack1), depth0))\n + \"\\\" title=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n \t\t<img src=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"icon\") : stack1), depth0))\n + \"\\\" alt=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n\t</a>\\n\";\n},\"21\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t<div class=\\\"body\\\">\\n\t\t<div class=\\\"full-name\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"fullName\") : stack1), depth0))\n + \"</div>\\n\t\t<div class=\\\"last-message\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"lastMessage\") : stack1), depth0))\n + \"</div>\\n\t\t<div class=\\\"email-address\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"emailAddresses\") : stack1), depth0))\n + \"</div>\\n\t</div>\\n\";\n},\"23\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<a class=\\\"second-action\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"hyperlink\") : stack1), depth0))\n + \"\\\" aria-label=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\" title=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n\t<img src=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"icon\") : stack1), depth0))\n + \"\\\" alt=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n</a>\\n\";\n},\"25\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t<button class=\\\"other-actions icon-more\\\"></button>\\n\t<div class=\\\"menu popovermenu\\\">\\n\t\t<ul>\\n\"\n + ((stack1 = lookupProperty(helpers,\"each\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"actions\") : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(26, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":60,\"column\":3},\"end\":{\"line\":67,\"column\":12}}})) != null ? stack1 : \"\")\n + \"\t\t</ul>\\n\t</div>\\n\";\n},\"26\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t\t<li>\\n\t\t\t\t<a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"hyperlink\") || (depth0 != null ? lookupProperty(depth0,\"hyperlink\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"hyperlink\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":62,\"column\":13},\"end\":{\"line\":62,\"column\":26}}}) : helper)))\n + \"\\\">\\n\t\t\t\t\t<img src=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"icon\") || (depth0 != null ? lookupProperty(depth0,\"icon\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"icon\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":63,\"column\":15},\"end\":{\"line\":63,\"column\":23}}}) : helper)))\n + \"\\\" alt=\\\"\\\">\\n\t\t\t\t\t<span>\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"title\") || (depth0 != null ? lookupProperty(depth0,\"title\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"title\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":64,\"column\":11},\"end\":{\"line\":64,\"column\":20}}}) : helper)))\n + \"</span>\\n\t\t\t\t</a>\\n\t\t\t</li>\\n\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(7, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":21,\"column\":7}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(13, data, 0),\"inverse\":container.program(18, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":22,\"column\":0},\"end\":{\"line\":50,\"column\":7}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"hasTwoActions\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(23, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":51,\"column\":0},\"end\":{\"line\":55,\"column\":7}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"hasManyActions\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(25, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":56,\"column\":0},\"end\":{\"line\":70,\"column\":7}}})) != null ? stack1 : \"\");\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-search\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"couldNotLoadText\") || (depth0 != null ? lookupProperty(depth0,\"couldNotLoadText\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"couldNotLoadText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":5},\"end\":{\"line\":3,\"column\":25}}}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-search\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"noContactsFoundText\") || (depth0 != null ? lookupProperty(depth0,\"noContactsFoundText\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"noContactsFoundText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":5},\"end\":{\"line\":4,\"column\":28}}}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"footer\\\"><a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"contactsAppURL\") || (depth0 != null ? lookupProperty(depth0,\"contactsAppURL\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppURL\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":29},\"end\":{\"line\":9,\"column\":47}}}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"showAllContactsText\") || (depth0 != null ? lookupProperty(depth0,\"showAllContactsText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"showAllContactsText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":49},\"end\":{\"line\":9,\"column\":72}}}) : helper)))\n + \"</a></div>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"canInstallApp\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":10,\"column\":0},\"end\":{\"line\":12,\"column\":0}}})) != null ? stack1 : \"\");\n},\"6\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"footer\\\"><a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"contactsAppMgmtURL\") || (depth0 != null ? lookupProperty(depth0,\"contactsAppMgmtURL\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppMgmtURL\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":29},\"end\":{\"line\":11,\"column\":51}}}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"contactsAppMgmtText\") || (depth0 != null ? lookupProperty(depth0,\"contactsAppMgmtText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppMgmtText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":53},\"end\":{\"line\":11,\"column\":76}}}) : helper)))\n + \"</a></div>\\n\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contacts\") : depth0)) != null ? lookupProperty(stack1,\"length\") : stack1),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":6,\"column\":11}}})) != null ? stack1 : \"\")\n + \"<div id=\\\"contactsmenu-contacts\\\"></div>\\n\"\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"contactsAppEnabled\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.program(5, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":8,\"column\":0},\"end\":{\"line\":12,\"column\":7}}})) != null ? stack1 : \"\");\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-loading\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"loadingText\") || (depth0 != null ? lookupProperty(depth0,\"loadingText\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"loadingText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":5},\"end\":{\"line\":3,\"column\":20}}}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<label class=\\\"hidden-visually\\\" for=\\\"contactsmenu-search\\\">\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"searchContactsText\") || (depth0 != null ? lookupProperty(depth0,\"searchContactsText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchContactsText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":57},\"end\":{\"line\":1,\"column\":79}}}) : helper)))\n + \"</label>\\n<input id=\\\"contactsmenu-search\\\" type=\\\"search\\\" placeholder=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"searchContactsText\") || (depth0 != null ? lookupProperty(depth0,\"searchContactsText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchContactsText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":59},\"end\":{\"line\":2,\"column\":81}}}) : helper)))\n + \"\\\" value=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"searchTerm\") || (depth0 != null ? lookupProperty(depth0,\"searchTerm\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchTerm\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":90},\"end\":{\"line\":2,\"column\":104}}}) : helper)))\n + \"\\\">\\n<div class=\\\"content\\\">\\n</div>\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<img src=\\\"\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"icon\") || (depth0 != null ? lookupProperty(depth0,\"icon\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"icon\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":24},\"end\":{\"line\":3,\"column\":32}}}) : helper)))\n + \"\\\">\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<li>\\n\t<a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"hyperlink\") || (depth0 != null ? lookupProperty(depth0,\"hyperlink\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"hyperlink\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":10},\"end\":{\"line\":2,\"column\":23}}}) : helper)))\n + \"\\\">\\n\t\t\"\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"icon\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":2},\"end\":{\"line\":3,\"column\":41}}})) != null ? stack1 : \"\")\n + \"\\n\t\t<span>\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"title\") || (depth0 != null ? lookupProperty(depth0,\"title\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"title\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":8},\"end\":{\"line\":4,\"column\":17}}}) : helper)))\n + \"</span>\\n\t</a>\\n</li>\\n\";\n},\"useData\":true});","var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 76225,\n\t\"./bn-bd.js\": 76225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-il\": 47207,\n\t\"./en-il.js\": 47207,\n\t\"./en-in\": 44175,\n\t\"./en-in.js\": 44175,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./en-sg\": 31662,\n\t\"./en-sg.js\": 31662,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-mx\": 96112,\n\t\"./es-mx.js\": 96112,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fil\": 42549,\n\t\"./fil.js\": 42549,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 94470,\n\t\"./fr-ca\": 63049,\n\t\"./fr-ca.js\": 63049,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 94470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 29295,\n\t\"./ga.js\": 29295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-deva\": 27884,\n\t\"./gom-deva.js\": 27884,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 30094,\n\t\"./hi.js\": 30094,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it-ch\": 10150,\n\t\"./it-ch.js\": 10150,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ku\": 1408,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./oc-lnc\": 92135,\n\t\"./oc-lnc.js\": 92135,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./tg\": 27321,\n\t\"./tg.js\": 27321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 19005,\n\t\"./tk.js\": 19005,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-mo\": 99807,\n\t\"./zh-mo.js\": 99807,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 2943;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2943: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], function() { return __webpack_require__(30300); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","loadedScripts","loadedStyles","updatableNotification","getDefaultNotificationFunction","setDefault","callback","this","hide","$row","_","undefined","each","$","toastify","hideToast","console","error","call","showHtml","html","options","isHTML","timeout","TOAST_PERMANENT_TIMEOUT","toast","showMessage","toastElement","show","text","toString","split","join","escapeHTML","showUpdate","showTemporary","TOAST_DEFAULT_TIMEOUT","isHidden","find","length","ajaxConnectionLostHandler","Notification","t","trailing","dynamicSlideToggleEnabled","enableDynamicSlideToggle","Apps","$el","removeClass","trigger","addClass","method","endpoint","OC","type","toUpperCase","url","generateOcsUrl","data","success","bind","getApps","getKeys","app","getValue","key","defaultValue","setValue","value","deleteKey","appConfig","window","oc_appconfig","AppConfig","_oc_appswebroots","methodMap","create","update","patch","delete","read","parsePropFindResult","result","davProperties","subResult","props","href","propStat","status","properties","propKey","id","parseIdFromLocation","queryPos","indexOf","substr","parts","pop","isSuccessStatus","callPropPatch","client","model","headers","propPatch","attrs","changedProp","warn","convertModelAttributesToDavProperties","changed","then","toJSON","Backbone","VendorBackbone","Object","assign","davCall","dav","baseUrl","xmlNamespaces","resolveUrl","requestToken","propFind","depth","response","propsMapping","results","body","shift","callPropFind","request","callMkCol","responseJson","locationHeader","xhr","getResponseHeader","callMethod","davSync","params","isCollection","Collection","hasInnerCollection","usePUT","collection","Error","urlError","JSON","stringify","processData","prototype","textStatus","errorThrown","context","_oc_config","Contact","Model","defaults","fullName","lastMessage","actions","hasOneAction","hasTwoActions","hasManyActions","initialize","get","set","ContactCollection","ContactsListView","View","_collection","_subViews","tagName","render","self","forEach","contact","item","ContactsListItemView","append","on","_onChildActionMenuToggle","push","$src","view","className","_template","_model","_actionMenuShown","events","contactTemplate","require","template","_onOtherActionMenuOpened","delegateEvents","imageplaceholder","_onToggleActionsMenu","is","ContactsMenuView","_loadingTemplate","_errorTemplate","_contentTemplate","_contactsTemplate","_contacts","_searchTerm","templates","loading","menu","list","_onSearch","e","searchTerm","val","loadingTemplate","errorTemplate","couldNotLoadText","contentTemplate","searchContactsText","contactsTemplate","noContactsFoundText","showAllContactsText","contactsAppMgmtText","showLoading","loadingText","showError","showContacts","viewData","contacts","contactsAppEnabled","contactsAppURL","canInstallApp","contactsAppMgmtURL","searchVal","focus","ContactsMenu","_view","_contactsPromise","el","loadContacts","_getContacts","Promise","resolve","filter","term","catch","rawUid","document","getElementsByTagName","getAttribute","displayName","currentUser","Search","isA11yActivation","event","global","emit","token","Dialogs","YES_NO_BUTTONS","OK_BUTTONS","FILEPICKER_TYPE_CHOOSE","FILEPICKER_TYPE_MOVE","FILEPICKER_TYPE_COPY","FILEPICKER_TYPE_COPY_MOVE","FILEPICKER_TYPE_CUSTOM","dialogsCounter","alert","title","modal","message","OK_BUTTON","info","confirm","confirmDestructive","buttons","confirmHtml","prompt","name","password","_getMessageTemplate","$tmpl","dialogName","dialogId","$dlg","octemplate","dialog_name","input","attr","label","buttonlist","click","ocdialog","defaultButton","closeOnEscape","close","filepicker","multiselect","mimetypeFilter","path","sortField","sortOrder","emptyText","newText","filesClient","OCA","Sharing","PublicApp","fileList","filelist","allowDirectoryChooser","_getFilePickerTemplate","$filePicker","emptytext","newtext","nameCol","sizeCol","modifiedCol","target","prepend","$showGridView","_onGridviewChange","_getGridSettings","newButton","stopImmediatePropagation","preventDefault","$input","tooltip","submit","newName","lastPos","lastIndexOf","selectRange","$form","$submit","stopPropagation","filename","trimmedName","trim","match","isFileNameValid","file","escape","placement","checkInput","newname","createDirectory","always","_fillFilePicker","ready","$fileListHeader","$filelist","$filelistContainer","$dirTree","_handleTreeListSelect","_handlePickerClick","dir","currentTarget","functionToCall","returnType","datapath","index","element","selectedName","button","width","height","style","remove","buttonEnableDisable","closest","prop","fail","content","dialogType","allowHtml","escapeFunction","cancel","classes","confirmClasses","closeCallback","_fileexistsshown","fileexists","original","replacement","controller","dialogDeferred","resampleHermite","canvas","W","H","W2","H2","Math","round","img","getContext","getImageData","img2","data2","ratio_w","ratio_h","ratio_w_half","ceil","ratio_h_half","j","i","x2","weight","weights","weights_alpha","gx_r","gx_g","gx_b","gx_a","center_y","yy","floor","dy","abs","center_x","w0","xx","dx","w","sqrt","clearRect","max","putImageData","addConflict","$conflicts","$conflict","clone","$originalDiv","$replacementDiv","size","mtime","lastModified","directory","urlSpec","x","y","c","etag","forceIcon","previewpath","Files","generatePreviewUrl","replace","css","FileReader","reader","onload","blob","Blob","URL","webkitURL","originalUrl","createObjectURL","image","Image","src","createElement","min","drawImage","toDataURL","readAsArrayBuffer","reject","getCroppedPreview","checkboxId","count","n","parent","children","_getFileExistsTemplate","allnewfiles","allexistingfiles","why","what","onCancel","onContinue","closeButton","$primaryButton","updatePrimaryButton","checkedCount","$checkbox","promise","gridview","toggleClass","isGridView","hasClass","defer","$filePickerTemplate","tmpl","$listTmpl","detach","jqXHR","$messageTemplate","$fileexistsTemplate","empty","advancedFilter","getFolderContents","files","_changeButtonsText","mimetype","showHiddenInput","getElementById","startsWith","comparator","Comparators","fileInfo1","fileInfo2","sort","file1","file2","isFavorite","fileInfo","tags","_fillSlug","idx","entry","simpleSize","sizeColor","isEncrypted","icon","parseInt","pow","filename1","filename2","date","previewUrl","addButton","$template","paths","prependTo","getOcDialog","$element","ctrlKey","copyText","folder","moveText","eq","manageFromDocument","getToken","setToken","newToken","OCEventSource","joinChar","dataStr","typelessListeners","closed","listeners","encodeURIComponent","useFallBack","EventSource","iframeId","iframeCount","fallBackSources","iframe","source","onmessage","parse","listen","fallBackCallBack","done","lastLength","addEventListener","currentMenu","currentMenuToggle","hideMenus","complete","lastMenu","slideUp","apply","arguments","isAdmin","_oc_isadmin","load","loadTranslations","register","_unregister","unregister","translate","translatePlural","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","$buttonrow","$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","b","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","a","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","generateFilePath","addStyle","createStyleSheet","appSettings","args","appid","scriptName","cache","settings","popup","arrowclass","loadJS","scriptname","jqxhr","appswebroots","dialogs","getCurrentUser","uid","isUserAdmin","L10N","_ajaxConnectionLostHandler","_processAjaxError","statusText","timer","setInterval","clearInterval","registerXHRForErrorProcessing","readyState","getCapabilities","realGetCapabilities","registerMenu","$toggle","$menuEl","toggle","headerMenu","isClickableElement","slideToggle","showMenu","unregisterMenu","off","basename","encodePath","dirname","isSamePath","joinPaths","getHost","host","getHostName","hostname","getPort","port","getProtocol","protocol","getCanonicalLocale","getLocale","getLanguage","buildQueryString","parseQueryString","queryString","components","part","decodeURIComponent","msg","PasswordConfirmation","Plugins","_plugins","targetName","plugin","plugins","getPlugins","attach","targetObject","Util","filePath","namespaces","tail","getRootPath","getRootUrl","imagePath","redirect","targetURL","reload","getRequestToken","linkTo","linkToOCS","service","version","ocsVersion","linkToRemote","generateRemoteUrl","linkToRemoteBase","realGetRootUrl","subscribe","resp","poll","setRequestToken","startPolling","NaN","session_lifetime","isNaN","getInterval","Contacts","NcHeaderMenu","contactsMenu","mounted","methods","handleOpen","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","_c","_self","scopedSlots","_u","fn","proxy","_v","NcActions","NcActionLink","apps","appLimit","observer","computed","appList","mainAppList","popoverAppList","appLabel","beforeDestroy","unsubscribe","setNavigationCounter","setApps","resize","appCount","staticClass","_l","class","active","unread","_s","_e","NcLoadingIcon","required","cachedIcon","handleClick","$event","shiftKey","altKey","metaKey","NcAvatar","UserMenuEntry","settingsNavEntries","userId","_b","localeAliases","zh","zh_Hans","zh_Hans_CN","zh_Hans_HK","zh_Hans_MO","zh_Hans_SG","zh_Hant","zh_Hant_HK","zh_Hant_MO","zh_Hant_TW","locale","hasOwnProperty","initCore","mountPoint","allowAuthErrors","loadState","loadConfig","auto_logout","lastActive","now","localStorage","setItem","newValue","logoutUrl","registerAutoLogout","session_keepalive","initSessionHeartBeat","Vue","container","appMenu","AppMenu","$mount","counter","setUpMainMenu","h","UserMenu","setUpContactsMenu","snapper","Snap","disable","maxPosition","minDragDistance","animating","oldSnapperOpen","open","oldSnapperClose","_snapperOpen","_snapperClose","keypress","delegate","$target","navigationBarSlideGestureEnabled","navigationBarSlideGestureAllowed","navigationBarSlideGestureEnablePending","enable","toggleSnapperOnSize","ex","TypeError","urlRegex","plainToRich","formatLinksRich","richToPlain","formatLinksPlain","leadingSpace","trailingSpace","linkText","$content","$this","dismissOptions","dismiss","menuItem","div","classList","add","innerText","ocs","product","onclick","whatsNew","regular","whatsNewTextItem","innerHTML","changelogURL","rel","onQuerySuccess","onQueryError","onDismissSuccess","onDismissError","func","oldFunc","newFunc","disableKeyboardShortcuts","setPageHeading","heading","headingEl","textContent","types","loadedStylesheets","loadScript","scriptPath","btoa","onerror","head","loadStylesheet","stylePath","link","showSuccess","warning","showWarning","showInfo","Accessibility","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","$button","enterCallback","keyCode","_setOptions","_createOverlay","_useFocusTrap","_init","_trigger","_setOption","$title","_setSizes","$defaultButton","$closeButton","dialogTitle","closeCB","lessHeight","outerHeight","contentDiv","overlay","_destroyOverlay","_nc_focus_trap","dialogElement","focusTrap","createFocusTrap","allowOutsideClick","trapStack","fallbackFocus","activate","_clearFocusTrap","deactivate","widget","setEnterCallback","unsetEnterCallback","destroy","Template","vars","elem","_html","_build","o","outerHTML","r","toRgb","Color","mixPalette","steps","color1","color2","palette","step","ends","stepCalc","red","yellow","blue","palette1","palette2","palette3","maximum","finalInt","hashToInt","seed","rgb","placeholderText","map","word","elm","crossDomain","setRequestHeader","start","end","setSelectionRange","createTextRange","range","collapse","moveEnd","moveStart","select","showPassword","setState","checkbox","$clone","tabindex","autocomplete","cloneElement","insertAfter","outerWidth","contents","areaSelector","area","hideArea","slideDown","showArea","onpopstate","___CSS_LOADER_URL_IMPORT_0___","___CSS_LOADER_URL_IMPORT_1___","___CSS_LOADER_URL_IMPORT_2___","___CSS_LOADER_URL_IMPORT_3___","___CSS_LOADER_URL_IMPORT_4___","___CSS_LOADER_EXPORT___","___CSS_LOADER_URL_REPLACEMENT_0___","___CSS_LOADER_URL_REPLACEMENT_1___","___CSS_LOADER_URL_REPLACEMENT_2___","___CSS_LOADER_URL_REPLACEMENT_3___","___CSS_LOADER_URL_REPLACEMENT_4___","module","exports","depth0","helpers","partials","stack1","lookupProperty","propertyName","nullContext","program","noop","alias1","lambda","alias2","escapeExpression","helper","hooks","helperMissing","alias3","alias4","webpackContext","req","webpackContextResolve","__webpack_require__","code","__webpack_module_cache__","moduleId","cachedModule","loaded","__webpack_modules__","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","every","splice","getter","__esModule","d","definition","enumerable","globalThis","Function","obj","Symbol","toStringTag","nmd","baseURI","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","nc","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file diff --git a/dist/files_sharing-files_sharing_tab.js b/dist/files_sharing-files_sharing_tab.js index b5a0a76e54a..fa736b640a1 100644 --- a/dist/files_sharing-files_sharing_tab.js +++ b/dist/files_sharing-files_sharing_tab.js @@ -1,3 +1,3 @@ /*! For license information please see files_sharing-files_sharing_tab.js.LICENSE.txt */ -!function(){"use strict";var e,n={26790:function(e,n,r){var i=r(20144),a=r(31352),s=r(1794),o=r(79753),c=r(75925),l=r.n(c),u=r(4820),h=r(79954);function d(e){return d="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},d(e)}function f(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,(void 0,i=function(e,t){if("object"!==d(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!==d(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(r.key),"symbol"===d(i)?i:String(i)),r)}var i}var p=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e)}var t,n;return t=e,(n=[{key:"isPublicUploadEnabled",get:function(){return document.getElementsByClassName("files-filestable")[0]&&"yes"===document.getElementsByClassName("files-filestable")[0].dataset.allowPublicUpload}},{key:"isShareWithLinkAllowed",get:function(){return document.getElementById("allowShareWithLink")&&"yes"===document.getElementById("allowShareWithLink").value}},{key:"federatedShareDocLink",get:function(){return OC.appConfig.core.federatedCloudShareDoc}},{key:"defaultExpirationDate",get:function(){return this.isDefaultExpireDateEnabled?new Date((new Date).setDate((new Date).getDate()+this.defaultExpireDate)):null}},{key:"defaultInternalExpirationDate",get:function(){return this.isDefaultInternalExpireDateEnabled?new Date((new Date).setDate((new Date).getDate()+this.defaultInternalExpireDate)):null}},{key:"defaultRemoteExpirationDateString",get:function(){return this.isDefaultRemoteExpireDateEnabled?new Date((new Date).setDate((new Date).getDate()+this.defaultRemoteExpireDate)):null}},{key:"enforcePasswordForPublicLink",get:function(){return!0===OC.appConfig.core.enforcePasswordForPublicLink}},{key:"enableLinkPasswordByDefault",get:function(){return!0===OC.appConfig.core.enableLinkPasswordByDefault}},{key:"isDefaultExpireDateEnforced",get:function(){return!0===OC.appConfig.core.defaultExpireDateEnforced}},{key:"isDefaultExpireDateEnabled",get:function(){return!0===OC.appConfig.core.defaultExpireDateEnabled}},{key:"isDefaultInternalExpireDateEnforced",get:function(){return!0===OC.appConfig.core.defaultInternalExpireDateEnforced}},{key:"isDefaultRemoteExpireDateEnforced",get:function(){return!0===OC.appConfig.core.defaultRemoteExpireDateEnforced}},{key:"isDefaultInternalExpireDateEnabled",get:function(){return!0===OC.appConfig.core.defaultInternalExpireDateEnabled}},{key:"isDefaultRemoteExpireDateEnabled",get:function(){return!0===OC.appConfig.core.defaultRemoteExpireDateEnabled}},{key:"isRemoteShareAllowed",get:function(){return!0===OC.appConfig.core.remoteShareAllowed}},{key:"isMailShareAllowed",get:function(){var e,t,n,r=OC.getCapabilities();return void 0!==(null==r||null===(e=r.files_sharing)||void 0===e?void 0:e.sharebymail)&&!0===(null==r||null===(t=r.files_sharing)||void 0===t||null===(n=t.public)||void 0===n?void 0:n.enabled)}},{key:"defaultExpireDate",get:function(){return OC.appConfig.core.defaultExpireDate}},{key:"defaultInternalExpireDate",get:function(){return OC.appConfig.core.defaultInternalExpireDate}},{key:"defaultRemoteExpireDate",get:function(){return OC.appConfig.core.defaultRemoteExpireDate}},{key:"isResharingAllowed",get:function(){return!0===OC.appConfig.core.resharingAllowed}},{key:"isPasswordForMailSharesRequired",get:function(){return void 0!==OC.getCapabilities().files_sharing.sharebymail&&OC.getCapabilities().files_sharing.sharebymail.password.enforced}},{key:"shouldAlwaysShowUnique",get:function(){var e,t;return!0===(null===(e=OC.getCapabilities().files_sharing)||void 0===e||null===(t=e.sharee)||void 0===t?void 0:t.always_show_unique)}},{key:"allowGroupSharing",get:function(){return!0===OC.appConfig.core.allowGroupSharing}},{key:"maxAutocompleteResults",get:function(){return parseInt(OC.config["sharing.maxAutocompleteResults"],10)||25}},{key:"minSearchStringLength",get:function(){return parseInt(OC.config["sharing.minSearchStringLength"],10)||0}},{key:"passwordPolicy",get:function(){var e=OC.getCapabilities();return e.password_policy?e.password_policy:{}}}])&&f(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),e}(),g=r(41922),m=r(25108);function v(e){return v="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},v(e)}function y(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,_(r.key),r)}}function _(e){var t=function(e,t){if("object"!==v(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!==v(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===v(t)?t:String(t)}var A=function(){function e(t){var n,r,i,a;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),r=this,a=void 0,(i=_(i="_share"))in r?Object.defineProperty(r,i,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[i]=a,t.ocs&&t.ocs.data&&t.ocs.data[0]&&(t=t.ocs.data[0]),t.hide_download=!!t.hide_download,t.mail_send=!!t.mail_send,t.attributes)try{t.attributes=JSON.parse(t.attributes)}catch(e){m.warn('Could not parse share attributes returned by server: "'+t.attributes+'"')}t.attributes=null!==(n=t.attributes)&&void 0!==n?n:[],this._share=t}var t,n;return t=e,(n=[{key:"state",get:function(){return this._share}},{key:"id",get:function(){return this._share.id}},{key:"type",get:function(){return this._share.share_type}},{key:"permissions",get:function(){return this._share.permissions},set:function(e){this._share.permissions=e}},{key:"attributes",get:function(){return this._share.attributes}},{key:"owner",get:function(){return this._share.uid_owner}},{key:"ownerDisplayName",get:function(){return this._share.displayname_owner}},{key:"shareWith",get:function(){return this._share.share_with}},{key:"shareWithDisplayName",get:function(){return this._share.share_with_displayname||this._share.share_with}},{key:"shareWithDisplayNameUnique",get:function(){return this._share.share_with_displayname_unique||this._share.share_with}},{key:"shareWithLink",get:function(){return this._share.share_with_link}},{key:"shareWithAvatar",get:function(){return this._share.share_with_avatar}},{key:"uidFileOwner",get:function(){return this._share.uid_file_owner}},{key:"displaynameFileOwner",get:function(){return this._share.displayname_file_owner||this._share.uid_file_owner}},{key:"createdTime",get:function(){return this._share.stime}},{key:"expireDate",get:function(){return this._share.expiration},set:function(e){this._share.expiration=e}},{key:"token",get:function(){return this._share.token}},{key:"note",get:function(){return this._share.note},set:function(e){this._share.note=e}},{key:"label",get:function(){return this._share.label},set:function(e){this._share.label=e}},{key:"mailSend",get:function(){return!0===this._share.mail_send}},{key:"hideDownload",get:function(){return!0===this._share.hide_download},set:function(e){this._share.hide_download=!0===e}},{key:"password",get:function(){return this._share.password},set:function(e){this._share.password=e}},{key:"passwordExpirationTime",get:function(){return this._share.password_expiration_time},set:function(e){this._share.password_expiration_time=e}},{key:"sendPasswordByTalk",get:function(){return this._share.send_password_by_talk},set:function(e){this._share.send_password_by_talk=e}},{key:"path",get:function(){return this._share.path}},{key:"itemType",get:function(){return this._share.item_type}},{key:"mimetype",get:function(){return this._share.mimetype}},{key:"fileSource",get:function(){return this._share.file_source}},{key:"fileTarget",get:function(){return this._share.file_target}},{key:"fileParent",get:function(){return this._share.file_parent}},{key:"hasReadPermission",get:function(){return!!(this.permissions&OC.PERMISSION_READ)}},{key:"hasCreatePermission",get:function(){return!!(this.permissions&OC.PERMISSION_CREATE)}},{key:"hasDeletePermission",get:function(){return!!(this.permissions&OC.PERMISSION_DELETE)}},{key:"hasUpdatePermission",get:function(){return!!(this.permissions&OC.PERMISSION_UPDATE)}},{key:"hasSharePermission",get:function(){return!!(this.permissions&OC.PERMISSION_SHARE)}},{key:"hasDownloadPermission",get:function(){for(var e in this._share.attributes){var t=this._share.attributes[e];if("permissions"===t.scope&&"download"===t.key)return t.enabled}return!0},set:function(e){this.setAttribute("permissions","download",!!e)}},{key:"setAttribute",value:function(e,t,n){var r={scope:e,key:t,enabled:n};for(var i in this._share.attributes){var a=this._share.attributes[i];if(a.scope===r.scope&&a.key===r.key)return void(this._share.attributes[i]=r)}this._share.attributes.push(r)}},{key:"canEdit",get:function(){return!0===this._share.can_edit}},{key:"canDelete",get:function(){return!0===this._share.can_delete}},{key:"viaFileid",get:function(){return this._share.via_fileid}},{key:"viaPath",get:function(){return this._share.via_path}},{key:"parent",get:function(){return this._share.parent}},{key:"storageId",get:function(){return this._share.storage_id}},{key:"storage",get:function(){return this._share.storage}},{key:"itemSource",get:function(){return this._share.item_source}},{key:"status",get:function(){return this._share.status}}])&&y(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),e}(),b={data:function(){return{SHARE_TYPES:g.D}}},E=r(64024),w=r(76212),S=r.n(w),C=r(12945),x=r.n(C),k={name:"SharingEntrySimple",components:{NcActions:x()},props:{title:{type:String,default:"",required:!0},subtitle:{type:String,default:""},isUnique:{type:Boolean,default:!0},ariaExpanded:{type:Boolean,default:null}},computed:{ariaExpandedValue:function(){return null===this.ariaExpanded?this.ariaExpanded:this.ariaExpanded?"true":"false"}}},P=r(93379),D=r.n(P),T=r(7795),R=r.n(T),N=r(90569),O=r.n(N),I=r(3565),L=r.n(I),H=r(19216),Y=r.n(H),U=r(44589),j=r.n(U),M=r(3335),B={};B.styleTagTransform=j(),B.setAttributes=L(),B.insert=O().bind(null,"head"),B.domAPI=R(),B.insertStyleElement=Y(),D()(M.Z,B),M.Z&&M.Z.locals&&M.Z.locals;var W=r(51900),F=(0,W.Z)(k,(function(){var e=this,t=e._self._c;return t("li",{staticClass:"sharing-entry"},[e._t("avatar"),e._v(" "),t("div",{staticClass:"sharing-entry__desc"},[t("span",{staticClass:"sharing-entry__title"},[e._v(e._s(e.title))]),e._v(" "),e.subtitle?t("p",[e._v("\n\t\t\t"+e._s(e.subtitle)+"\n\t\t")]):e._e()]),e._v(" "),e.$slots.default?t("NcActions",{ref:"actionsComponent",staticClass:"sharing-entry__actions",attrs:{"menu-align":"right","aria-expanded":e.ariaExpandedValue}},[e._t("default")],2):e._e()],2)}),[],!1,null,"9fd256bc",null).exports,q=r(25108);function Z(e,t,n,r,i,a,s){try{var o=e[a](s),c=o.value}catch(e){return void n(e)}o.done?t(c):Promise.resolve(c).then(r,i)}var $={name:"SharingEntryInternal",components:{NcActionLink:S(),SharingEntrySimple:F},props:{fileInfo:{type:Object,default:function(){},required:!0}},data:function(){return{copied:!1,copySuccess:!1}},computed:{internalLink:function(){return window.location.protocol+"//"+window.location.host+(0,o.generateUrl)("/f/")+this.fileInfo.id},copyLinkTooltip:function(){return this.copied?this.copySuccess?"":t("files_sharing","Cannot copy, please copy the link manually"):t("files_sharing","Copy internal link to clipboard")},internalLinkSubtitle:function(){return"dir"===this.fileInfo.type?t("files_sharing","Only works for users with access to this folder"):t("files_sharing","Only works for users with access to this file")}},methods:{copyLink:function(){var e,n=this;return(e=regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,navigator.clipboard.writeText(n.internalLink);case 3:(0,E.s$)(t("files_sharing","Link copied")),n.$refs.shareEntrySimple.$refs.actionsComponent.$el.focus(),n.copySuccess=!0,n.copied=!0,e.next=14;break;case 9:e.prev=9,e.t0=e.catch(0),n.copySuccess=!1,n.copied=!0,q.error(e.t0);case 14:return e.prev=14,setTimeout((function(){n.copySuccess=!1,n.copied=!1}),4e3),e.finish(14);case 17:case"end":return e.stop()}}),e,null,[[0,9,14,17]])})),function(){var t=this,n=arguments;return new Promise((function(r,i){var a=e.apply(t,n);function s(e){Z(a,r,i,s,o,"next",e)}function o(e){Z(a,r,i,s,o,"throw",e)}s(void 0)}))})()}}},G=$,V=r(66828),K={};K.styleTagTransform=j(),K.setAttributes=L(),K.insert=O().bind(null,"head"),K.domAPI=R(),K.insertStyleElement=Y(),D()(V.Z,K),V.Z&&V.Z.locals&&V.Z.locals;var Q=(0,W.Z)(G,(function(){var e=this,t=e._self._c;return t("ul",[t("SharingEntrySimple",{ref:"shareEntrySimple",staticClass:"sharing-entry__internal",attrs:{title:e.t("files_sharing","Internal link"),subtitle:e.internalLinkSubtitle},scopedSlots:e._u([{key:"avatar",fn:function(){return[t("div",{staticClass:"avatar-external icon-external-white"})]},proxy:!0}])},[e._v(" "),t("NcActionLink",{attrs:{href:e.internalLink,"aria-label":e.copyLinkTooltip,title:e.copyLinkTooltip,target:"_blank",icon:e.copied&&e.copySuccess?"icon-checkmark-color":"icon-clippy"},on:{click:function(t){return t.preventDefault(),e.copyLink.apply(null,arguments)}}})],1)],1)}),[],!1,null,"69e43ddc",null),z=Q.exports,J=r(45994),X=r(78595),ee=r(20296),te=r.n(ee),ne=r(36456),re=r.n(ne),ie=r(25108);function ae(e,t,n,r,i,a,s){try{var o=e[a](s),c=o.value}catch(e){return void n(e)}o.done?t(c):Promise.resolve(c).then(r,i)}var se=new p,oe="abcdefgijkmnopqrstwxyzABCDEFGHJKLMNPQRSTWXYZ23456789";function ce(){return le.apply(this,arguments)}function le(){var e;return e=regeneratorRuntime.mark((function e(){var n,r,i,a,s;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!se.passwordPolicy.api||!se.passwordPolicy.api.generate){e.next=14;break}return e.prev=1,e.next=4,u.default.get(se.passwordPolicy.api.generate);case 4:if(!(n=e.sent).data.ocs.data.password){e.next=8;break}return(0,E.s$)(t("files_sharing","Password created successfully")),e.abrupt("return",n.data.ocs.data.password);case 8:e.next=14;break;case 10:e.prev=10,e.t0=e.catch(1),ie.info("Error generating password from password_policy",e.t0),(0,E.x2)(t("files_sharing","Error generating password from password policy"));case 14:for(r=new Uint8Array(10),i=oe.length/255,self.crypto.getRandomValues(r),a="",s=0;s<r.length;s++)a+=oe.charAt(r[s]*i);return e.abrupt("return",a);case 20:case"end":return e.stop()}}),e,null,[[1,10]])})),le=function(){var t=this,n=arguments;return new Promise((function(r,i){var a=e.apply(t,n);function s(e){ae(a,r,i,s,o,"next",e)}function o(e){ae(a,r,i,s,o,"throw",e)}s(void 0)}))},le.apply(this,arguments)}r(35449);var ue=r(25108);function he(e,t,n,r,i,a,s){try{var o=e[a](s),c=o.value}catch(e){return void n(e)}o.done?t(c):Promise.resolve(c).then(r,i)}function de(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var a=e.apply(t,n);function s(e){he(a,r,i,s,o,"next",e)}function o(e){he(a,r,i,s,o,"throw",e)}s(void 0)}))}}var fe=(0,o.generateOcsUrl)("apps/files_sharing/api/v1/shares"),pe={methods:{createShare:function(e){return de(regeneratorRuntime.mark((function n(){var r,i,a,s,o,c,l,h,d,f,p,g,m,v,y,_,b,E;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return r=e.path,i=e.permissions,a=e.shareType,s=e.shareWith,o=e.publicUpload,c=e.password,l=e.sendPasswordByTalk,h=e.expireDate,d=e.label,f=e.attributes,n.prev=1,n.next=4,u.default.post(fe,{path:r,permissions:i,shareType:a,shareWith:s,publicUpload:o,password:c,sendPasswordByTalk:l,expireDate:h,label:d,attributes:f});case 4:if(null!=(g=n.sent)&&null!==(p=g.data)&&void 0!==p&&p.ocs){n.next=7;break}throw g;case 7:return m=new A(g.data.ocs.data),(0,X.j8)("files_sharing:share:created",{share:m}),n.abrupt("return",m);case 12:throw n.prev=12,n.t0=n.catch(1),ue.error("Error while creating share",n.t0),E=null===n.t0||void 0===n.t0||null===(v=n.t0.response)||void 0===v||null===(y=v.data)||void 0===y||null===(_=y.ocs)||void 0===_||null===(b=_.meta)||void 0===b?void 0:b.message,OC.Notification.showTemporary(E?t("files_sharing","Error creating the share: {errorMessage}",{errorMessage:E}):t("files_sharing","Error creating the share"),{type:"error"}),n.t0;case 18:case"end":return n.stop()}}),n,null,[[1,12]])})))()},deleteShare:function(e){return de(regeneratorRuntime.mark((function n(){var r,i,a,s,o,c,l;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,n.next=3,u.default.delete(fe+"/".concat(e));case 3:if(null!=(i=n.sent)&&null!==(r=i.data)&&void 0!==r&&r.ocs){n.next=6;break}throw i;case 6:return(0,X.j8)("files_sharing:share:deleted",{id:e}),n.abrupt("return",!0);case 10:throw n.prev=10,n.t0=n.catch(0),ue.error("Error while deleting share",n.t0),l=null===n.t0||void 0===n.t0||null===(a=n.t0.response)||void 0===a||null===(s=a.data)||void 0===s||null===(o=s.ocs)||void 0===o||null===(c=o.meta)||void 0===c?void 0:c.message,OC.Notification.showTemporary(l?t("files_sharing","Error deleting the share: {errorMessage}",{errorMessage:l}):t("files_sharing","Error deleting the share"),{type:"error"}),n.t0;case 16:case"end":return n.stop()}}),n,null,[[0,10]])})))()},updateShare:function(e,n){return de(regeneratorRuntime.mark((function r(){var i,a,s,o,c,l,h,d;return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.prev=0,r.next=3,u.default.put(fe+"/".concat(e),n);case 3:if(a=r.sent,(0,X.j8)("files_sharing:share:updated",{id:e}),null!=a&&null!==(i=a.data)&&void 0!==i&&i.ocs){r.next=9;break}throw a;case 9:return r.abrupt("return",a.data.ocs.data);case 10:r.next=18;break;case 12:throw r.prev=12,r.t0=r.catch(0),ue.error("Error while updating share",r.t0),400!==r.t0.response.status&&(h=null===r.t0||void 0===r.t0||null===(s=r.t0.response)||void 0===s||null===(o=s.data)||void 0===o||null===(c=o.ocs)||void 0===c||null===(l=c.meta)||void 0===l?void 0:l.message,OC.Notification.showTemporary(h?t("files_sharing","Error updating the share: {errorMessage}",{errorMessage:h}):t("files_sharing","Error updating the share"),{type:"error"})),d=r.t0.response.data.ocs.meta.message,new Error(d);case 18:case"end":return r.stop()}}),r,null,[[0,12]])})))()}}},ge=r(25108);function me(e){return me="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},me(e)}function ve(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function ye(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ve(Object(n),!0).forEach((function(t){_e(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ve(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function _e(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==me(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!==me(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===me(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ae(e,t,n,r,i,a,s){try{var o=e[a](s),c=o.value}catch(e){return void n(e)}o.done?t(c):Promise.resolve(c).then(r,i)}function be(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var a=e.apply(t,n);function s(e){Ae(a,r,i,s,o,"next",e)}function o(e){Ae(a,r,i,s,o,"throw",e)}s(void 0)}))}}var Ee={name:"SharingInput",components:{NcSelect:re()},mixins:[b,pe],props:{shares:{type:Array,default:function(){return[]},required:!0},linkShares:{type:Array,default:function(){return[]},required:!0},fileInfo:{type:Object,default:function(){},required:!0},reshare:{type:A,default:null},canReshare:{type:Boolean,required:!0}},data:function(){return{config:new p,loading:!1,query:"",recommendations:[],ShareSearch:OCA.Sharing.ShareSearch.state,suggestions:[],value:null}},computed:{externalResults:function(){return this.ShareSearch.results},inputPlaceholder:function(){var e=this.config.isRemoteShareAllowed;return this.canReshare?e?t("files_sharing","Name, email, or Federated Cloud ID …"):t("files_sharing","Name or email …"):t("files_sharing","Resharing is not allowed")},isValidQuery:function(){return this.query&&""!==this.query.trim()&&this.query.length>this.config.minSearchStringLength},options:function(){return this.isValidQuery?this.suggestions:this.recommendations},noResultText:function(){return this.loading?t("files_sharing","Searching …"):t("files_sharing","No elements found.")}},mounted:function(){this.getRecommendations()},methods:{handleOpen:function(){(0,X.j8)("viewer:trapElements:changed",this.$refs.select.$el)},asyncFind:function(e){var t=this;return be(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(t.query=e.trim(),!t.isValidQuery){n.next=5;break}return t.loading=!0,n.next=5,t.debounceGetSuggestions(e);case 5:case"end":return n.stop()}}),n)})))()},getSuggestions:function(e){var n=arguments,r=this;return be(regeneratorRuntime.mark((function i(){var a,s,c,l,h,d,f,p,g,m,v,y,_;return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return a=n.length>1&&void 0!==n[1]&&n[1],r.loading=!0,!0===OC.getCapabilities().files_sharing.sharee.query_lookup_default&&(a=!0),s=[r.SHARE_TYPES.SHARE_TYPE_USER,r.SHARE_TYPES.SHARE_TYPE_GROUP,r.SHARE_TYPES.SHARE_TYPE_REMOTE,r.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP,r.SHARE_TYPES.SHARE_TYPE_CIRCLE,r.SHARE_TYPES.SHARE_TYPE_ROOM,r.SHARE_TYPES.SHARE_TYPE_GUEST,r.SHARE_TYPES.SHARE_TYPE_DECK,r.SHARE_TYPES.SHARE_TYPE_SCIENCEMESH],!0===OC.getCapabilities().files_sharing.public.enabled&&s.push(r.SHARE_TYPES.SHARE_TYPE_EMAIL),c=null,i.prev=6,i.next=9,u.default.get((0,o.generateOcsUrl)("apps/files_sharing/api/v1/sharees"),{params:{format:"json",itemType:"dir"===r.fileInfo.type?"folder":"file",search:e,lookup:a,perPage:r.config.maxAutocompleteResults,shareType:s}});case 9:c=i.sent,i.next=16;break;case 12:return i.prev=12,i.t0=i.catch(6),ge.error("Error fetching suggestions",i.t0),i.abrupt("return");case 16:l=c.data.ocs.data,h=c.data.ocs.data.exact,l.exact=[],d=Object.values(h).reduce((function(e,t){return e.concat(t)}),[]),f=Object.values(l).reduce((function(e,t){return e.concat(t)}),[]),p=r.filterOutExistingShares(d).map((function(e){return r.formatForMultiselect(e)})).sort((function(e,t){return e.shareType-t.shareType})),g=r.filterOutExistingShares(f).map((function(e){return r.formatForMultiselect(e)})).sort((function(e,t){return e.shareType-t.shareType})),m=[],l.lookupEnabled&&!a&&m.push({id:"global-lookup",isNoUser:!0,displayName:t("files_sharing","Search globally"),lookup:!0}),v=r.externalResults.filter((function(e){return!e.condition||e.condition(r)})),y=p.concat(g).concat(v).concat(m),_=y.reduce((function(e,t){return t.displayName?(e[t.displayName]||(e[t.displayName]=0),e[t.displayName]++,e):e}),{}),r.suggestions=y.map((function(e){return _[e.displayName]>1&&!e.desc?ye(ye({},e),{},{desc:e.shareWithDisplayNameUnique}):e})),r.loading=!1,ge.info("suggestions",r.suggestions);case 31:case"end":return i.stop()}}),i,null,[[6,12]])})))()},debounceGetSuggestions:te()((function(){this.getSuggestions.apply(this,arguments)}),300),getRecommendations:function(){var e=this;return be(regeneratorRuntime.mark((function t(){var n,r,i;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e.loading=!0,n=null,t.prev=2,t.next=5,u.default.get((0,o.generateOcsUrl)("apps/files_sharing/api/v1/sharees_recommended"),{params:{format:"json",itemType:e.fileInfo.type}});case 5:n=t.sent,t.next=12;break;case 8:return t.prev=8,t.t0=t.catch(2),ge.error("Error fetching recommendations",t.t0),t.abrupt("return");case 12:r=e.externalResults.filter((function(t){return!t.condition||t.condition(e)})),i=Object.values(n.data.ocs.data.exact).reduce((function(e,t){return e.concat(t)}),[]),e.recommendations=e.filterOutExistingShares(i).map((function(t){return e.formatForMultiselect(t)})).concat(r),e.loading=!1,ge.info("recommendations",e.recommendations);case 17:case"end":return t.stop()}}),t,null,[[2,8]])})))()},filterOutExistingShares:function(e){var t=this;return e.reduce((function(e,n){if("object"!==me(n))return e;try{if(n.value.shareType===t.SHARE_TYPES.SHARE_TYPE_USER){if(n.value.shareWith===(0,J.ts)().uid)return e;if(t.reshare&&n.value.shareWith===t.reshare.owner)return e}if(n.value.shareType===t.SHARE_TYPES.SHARE_TYPE_EMAIL){if(-1!==t.linkShares.map((function(e){return e.shareWith})).indexOf(n.value.shareWith.trim()))return e}else{var r=t.shares.reduce((function(e,t){return e[t.shareWith]=t.type,e}),{}),i=n.value.shareWith.trim();if(i in r&&r[i]===n.value.shareType)return e}e.push(n)}catch(t){return e}return e}),[])},shareTypeToIcon:function(e){switch(e){case this.SHARE_TYPES.SHARE_TYPE_GUEST:return{icon:"icon-user",iconTitle:t("files_sharing","Guest")};case this.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP:case this.SHARE_TYPES.SHARE_TYPE_GROUP:return{icon:"icon-group",iconTitle:t("files_sharing","Group")};case this.SHARE_TYPES.SHARE_TYPE_EMAIL:return{icon:"icon-mail",iconTitle:t("files_sharing","Email")};case this.SHARE_TYPES.SHARE_TYPE_CIRCLE:return{icon:"icon-circle",iconTitle:t("files_sharing","Circle")};case this.SHARE_TYPES.SHARE_TYPE_ROOM:return{icon:"icon-room",iconTitle:t("files_sharing","Talk conversation")};case this.SHARE_TYPES.SHARE_TYPE_DECK:return{icon:"icon-deck",iconTitle:t("files_sharing","Deck board")};case this.SHARE_TYPES.SHARE_TYPE_SCIENCEMESH:return{icon:"icon-sciencemesh",iconTitle:t("files_sharing","Science Mesh")};default:return{}}},formatForMultiselect:function(e){var n,r;if(e.value.shareType===this.SHARE_TYPES.SHARE_TYPE_USER&&this.config.shouldAlwaysShowUnique)n=null!==(r=e.shareWithDisplayNameUnique)&&void 0!==r?r:"";else if(e.value.shareType!==this.SHARE_TYPES.SHARE_TYPE_REMOTE&&e.value.shareType!==this.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP||!e.value.server)if(e.value.shareType===this.SHARE_TYPES.SHARE_TYPE_EMAIL)n=e.value.shareWith;else{var i;n=null!==(i=e.shareWithDescription)&&void 0!==i?i:""}else n=t("files_sharing","on {server}",{server:e.value.server});return ye({id:"".concat(e.value.shareType,"-").concat(e.value.shareWith),shareWith:e.value.shareWith,shareType:e.value.shareType,user:e.uuid||e.value.shareWith,isNoUser:e.value.shareType!==this.SHARE_TYPES.SHARE_TYPE_USER,displayName:e.name||e.label,subtitle:n,shareWithDisplayNameUnique:e.shareWithDisplayNameUnique||""},this.shareTypeToIcon(e.value.shareType))},addShare:function(e){var t=this;return be(regeneratorRuntime.mark((function n(){var r,i,a,s;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(t.value=null,!e.lookup){n.next=6;break}return n.next=4,t.getSuggestions(t.query,!0);case 4:return t.$nextTick((function(){t.$refs.select.$children[0].open=!0})),n.abrupt("return",!0);case 6:if(!e.handler){n.next=12;break}return n.next=9,e.handler(t);case 9:return r=n.sent,t.$emit("add:share",new A(r)),n.abrupt("return",!0);case 12:if(t.loading=!0,ge.debug("Adding a new share from the input for",e),n.prev=14,i=null,!t.config.enforcePasswordForPublicLink||e.shareType!==t.SHARE_TYPES.SHARE_TYPE_EMAIL){n.next=20;break}return n.next=19,ce();case 19:i=n.sent;case 20:return a=(t.fileInfo.path+"/"+t.fileInfo.name).replace("//","/"),n.next=23,t.createShare({path:a,shareType:e.shareType,shareWith:e.shareWith,password:i,permissions:t.fileInfo.sharePermissions&OC.getCapabilities().files_sharing.default_permissions,attributes:JSON.stringify(t.fileInfo.shareAttributes)});case 23:if(s=n.sent,!i){n.next=32;break}return s.newPassword=i,n.next=28,new Promise((function(e){t.$emit("add:share",s,e)}));case 28:n.sent.open=!0,n.next=33;break;case 32:t.$emit("add:share",s);case 33:return n.next=35,t.getRecommendations();case 35:n.next=42;break;case 37:n.prev=37,n.t0=n.catch(14),t.$nextTick((function(){t.$refs.select.$children[0].open=!0})),t.query=e.shareWith,ge.error("Error while adding new share",n.t0);case 42:return n.prev=42,t.loading=!1,n.finish(42);case 45:case"end":return n.stop()}}),n,null,[[14,37,42,45]])})))()}}},we=Ee,Se=r(49082),Ce={};Ce.styleTagTransform=j(),Ce.setAttributes=L(),Ce.insert=O().bind(null,"head"),Ce.domAPI=R(),Ce.insertStyleElement=Y(),D()(Se.Z,Ce),Se.Z&&Se.Z.locals&&Se.Z.locals;var xe=(0,W.Z)(we,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"sharing-search"},[t("label",{attrs:{for:"sharing-search-input"}},[e._v(e._s(e.t("files_sharing","Search for share recipients")))]),e._v(" "),t("NcSelect",{ref:"select",staticClass:"sharing-search__input",attrs:{id:"sharing-search-input",disabled:!e.canReshare,loading:e.loading,filterable:!1,placeholder:e.inputPlaceholder,"clear-search-on-blur":function(){return!1},"user-select":!0,options:e.options},on:{open:e.handleOpen,search:e.asyncFind,"option:selected":e.addShare},scopedSlots:e._u([{key:"no-options",fn:function(t){var n=t.search;return[e._v("\n\t\t\t"+e._s(n?e.noResultText:e.t("files_sharing","No recommendations. Start typing."))+"\n\t\t")]}}]),model:{value:e.value,callback:function(t){e.value=t},expression:"value"}})],1)}),[],!1,null,null,null),ke=xe.exports,Pe=r(45400),De=r.n(Pe),Te=r(65358),Re=r(1162),Ne=r.n(Re),Oe=r(25746),Ie=r(25108);function Le(e){return Le="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},Le(e)}function He(e,t,n,r,i,a,s){try{var o=e[a](s),c=o.value}catch(e){return void n(e)}o.done?t(c):Promise.resolve(c).then(r,i)}function Ye(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var a=e.apply(t,n);function s(e){He(a,r,i,s,o,"next",e)}function o(e){He(a,r,i,s,o,"throw",e)}s(void 0)}))}}var Ue={mixins:[pe,b],props:{fileInfo:{type:Object,default:function(){},required:!0},share:{type:A,default:null},isUnique:{type:Boolean,default:!0}},data:function(){var e;return{config:new p,errors:{},loading:!1,saving:!1,open:!1,updateQueue:new Oe.Z({concurrency:1}),reactiveState:null===(e=this.share)||void 0===e?void 0:e.state}},computed:{hasNote:{get:function(){return""!==this.share.note},set:function(e){this.share.note=e?null:""}},dateTomorrow:function(){return new Date((new Date).setDate((new Date).getDate()+1))},lang:function(){var e=window.dayNamesShort?window.dayNamesShort:["Sun.","Mon.","Tue.","Wed.","Thu.","Fri.","Sat."],t=window.monthNamesShort?window.monthNamesShort:["Jan.","Feb.","Mar.","Apr.","May.","Jun.","Jul.","Aug.","Sep.","Oct.","Nov.","Dec."];return{formatLocale:{firstDayOfWeek:window.firstDay?window.firstDay:0,monthsShort:t,weekdaysMin:e,weekdaysShort:e},monthFormat:"MMM"}},isShareOwner:function(){return this.share&&this.share.owner===(0,J.ts)().uid}},methods:{checkShare:function(e){return(!e.password||"string"==typeof e.password&&""!==e.password.trim())&&!(e.expirationDate&&!e.expirationDate.isValid())},parseDateString:function(e){var t;if(e)return new Date(null===(t=e.match(/([0-9]{4}-[0-9]{2}-[0-9]{2})/i))||void 0===t?void 0:t.pop())},formatDateToString:function(e){return new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate())).toISOString().split("T")[0]},onExpirationChange:function(e){this.share.expireDate=this.formatDateToString(e),this.queueUpdate("expireDate")},onExpirationDisable:function(){this.share.expireDate="",this.queueUpdate("expireDate")},onNoteChange:function(e){this.$set(this.share,"newNote",e.trim())},onNoteSubmit:function(){this.share.newNote&&(this.share.note=this.share.newNote,this.$delete(this.share,"newNote"),this.queueUpdate("note"))},onDelete:function(){var e=this;return Ye(regeneratorRuntime.mark((function n(){var r;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,e.loading=!0,e.open=!1,n.next=5,e.deleteShare(e.share.id);case 5:Ie.debug("Share deleted",e.share.id),r="file"===e.share.itemType?t("files_sharing",'File "{path}" has been unshared',{path:e.share.path}):t("files_sharing",'Folder "{path}" has been unshared',{path:e.share.path}),(0,E.s$)(r),e.$emit("remove:share",e.share),n.next=14;break;case 11:n.prev=11,n.t0=n.catch(0),e.open=!0;case 14:return n.prev=14,e.loading=!1,n.finish(14);case 17:case"end":return n.stop()}}),n,null,[[0,11,14,17]])})))()},queueUpdate:function(){for(var e=this,n=arguments.length,r=new Array(n),i=0;i<n;i++)r[i]=arguments[i];if(0!==r.length){if(this.share.id){var a={};return r.forEach((function(t){"object"===Le(e.share[t])?a[t]=JSON.stringify(e.share[t]):a[t]=e.share[t].toString()})),void this.updateQueue.add(Ye(regeneratorRuntime.mark((function n(){var i,s;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return e.saving=!0,e.errors={},n.prev=2,n.next=5,e.updateShare(e.share.id,a);case 5:i=n.sent,r.indexOf("password")>=0&&(e.$delete(e.share,"newPassword"),e.share.passwordExpirationTime=i.password_expiration_time),e.$delete(e.errors,r[0]),(0,E.s$)(t("files_sharing","Share {propertyName} saved",{propertyName:r[0]})),n.next=15;break;case 11:n.prev=11,n.t0=n.catch(2),(s=n.t0.message)&&""!==s&&(e.onSyncError(r[0],s),(0,E.x2)(t("files_sharing",s)));case 15:return n.prev=15,e.saving=!1,n.finish(15);case 18:case"end":return n.stop()}}),n,null,[[2,11,15,18]])}))))}Ie.debug("Updated local share",this.share)}},onSyncError:function(e,t){switch(this.open=!0,e){case"password":case"pending":case"expireDate":case"label":case"note":this.$set(this.errors,e,t);var n=this.$refs[e];if(n){n.$el&&(n=n.$el);var r=n.querySelector(".focusable");r&&r.focus()}break;case"sendPasswordByTalk":this.$set(this.errors,e,t),this.share.sendPasswordByTalk=!this.share.sendPasswordByTalk}},debounceQueueUpdate:te()((function(e){this.queueUpdate(e)}),500)}},je={name:"SharingEntryInherited",components:{NcActionButton:De(),NcActionLink:S(),NcActionText:Ne(),NcAvatar:l(),SharingEntrySimple:F},mixins:[Ue],props:{share:{type:A,required:!0}},computed:{viaFileTargetUrl:function(){return(0,o.generateUrl)("/f/{fileid}",{fileid:this.share.viaFileid})},viaFolderName:function(){return(0,Te.EZ)(this.share.viaPath)}}},Me=r(24147),Be={};Be.styleTagTransform=j(),Be.setAttributes=L(),Be.insert=O().bind(null,"head"),Be.domAPI=R(),Be.insertStyleElement=Y(),D()(Me.Z,Be),Me.Z&&Me.Z.locals&&Me.Z.locals;var We=(0,W.Z)(je,(function(){var e=this,t=e._self._c;return t("SharingEntrySimple",{key:e.share.id,staticClass:"sharing-entry__inherited",attrs:{title:e.share.shareWithDisplayName},scopedSlots:e._u([{key:"avatar",fn:function(){return[t("NcAvatar",{staticClass:"sharing-entry__avatar",attrs:{user:e.share.shareWith,"display-name":e.share.shareWithDisplayName}})]},proxy:!0}])},[e._v(" "),t("NcActionText",{attrs:{icon:"icon-user"}},[e._v("\n\t\t"+e._s(e.t("files_sharing","Added by {initiator}",{initiator:e.share.ownerDisplayName}))+"\n\t")]),e._v(" "),e.share.viaPath&&e.share.viaFileid?t("NcActionLink",{attrs:{icon:"icon-folder",href:e.viaFileTargetUrl}},[e._v("\n\t\t"+e._s(e.t("files_sharing","Via “{folder}”",{folder:e.viaFolderName}))+"\n\t")]):e._e(),e._v(" "),e.share.canDelete?t("NcActionButton",{attrs:{icon:"icon-close"},on:{click:function(t){return t.preventDefault(),e.onDelete.apply(null,arguments)}}},[e._v("\n\t\t"+e._s(e.t("files_sharing","Unshare"))+"\n\t")]):e._e()],1)}),[],!1,null,"23251e4a",null),Fe=We.exports,qe=r(25108);function Ze(e,t,n,r,i,a,s){try{var o=e[a](s),c=o.value}catch(e){return void n(e)}o.done?t(c):Promise.resolve(c).then(r,i)}var $e={name:"SharingInherited",components:{NcActionButton:De(),SharingEntryInherited:Fe,SharingEntrySimple:F},props:{fileInfo:{type:Object,default:function(){},required:!0}},data:function(){return{loaded:!1,loading:!1,showInheritedShares:!1,shares:[]}},computed:{showInheritedSharesIcon:function(){return this.loading?"icon-loading-small":this.showInheritedShares?"icon-triangle-n":"icon-triangle-s"},mainTitle:function(){return t("files_sharing","Others with access")},subTitle:function(){return this.showInheritedShares&&0===this.shares.length?t("files_sharing","No other users with access found"):""},toggleTooltip:function(){return"dir"===this.fileInfo.type?t("files_sharing","Toggle list of others with access to this directory"):t("files_sharing","Toggle list of others with access to this file")},fullPath:function(){return"".concat(this.fileInfo.path,"/").concat(this.fileInfo.name).replace("//","/")}},watch:{fileInfo:function(){this.resetState()}},methods:{toggleInheritedShares:function(){this.showInheritedShares=!this.showInheritedShares,this.showInheritedShares?this.fetchInheritedShares():this.resetState()},fetchInheritedShares:function(){var e,n=this;return(e=regeneratorRuntime.mark((function e(){var r,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.loading=!0,e.prev=1,r=(0,o.generateOcsUrl)("apps/files_sharing/api/v1/shares/inherited?format=json&path={path}",{path:n.fullPath}),e.next=5,u.default.get(r);case 5:i=e.sent,n.shares=i.data.ocs.data.map((function(e){return new A(e)})).sort((function(e,t){return t.createdTime-e.createdTime})),qe.info(n.shares),n.loaded=!0,e.next=14;break;case 11:e.prev=11,e.t0=e.catch(1),OC.Notification.showTemporary(t("files_sharing","Unable to fetch inherited shares"),{type:"error"});case 14:return e.prev=14,n.loading=!1,e.finish(14);case 17:case"end":return e.stop()}}),e,null,[[1,11,14,17]])})),function(){var t=this,n=arguments;return new Promise((function(r,i){var a=e.apply(t,n);function s(e){Ze(a,r,i,s,o,"next",e)}function o(e){Ze(a,r,i,s,o,"throw",e)}s(void 0)}))})()},resetState:function(){this.loaded=!1,this.loading=!1,this.showInheritedShares=!1,this.shares=[]},removeShare:function(e){var t=this.shares.findIndex((function(t){return t===e}));this.shares.splice(t,1)}}},Ge=$e,Ve=r(16843),Ke={};Ke.styleTagTransform=j(),Ke.setAttributes=L(),Ke.insert=O().bind(null,"head"),Ke.domAPI=R(),Ke.insertStyleElement=Y(),D()(Ve.Z,Ke),Ve.Z&&Ve.Z.locals&&Ve.Z.locals;var Qe=(0,W.Z)(Ge,(function(){var e=this,t=e._self._c;return t("ul",{attrs:{id:"sharing-inherited-shares"}},[t("SharingEntrySimple",{staticClass:"sharing-entry__inherited",attrs:{title:e.mainTitle,subtitle:e.subTitle,"aria-expanded":e.showInheritedShares},scopedSlots:e._u([{key:"avatar",fn:function(){return[t("div",{staticClass:"avatar-shared icon-more-white"})]},proxy:!0}])},[e._v(" "),t("NcActionButton",{attrs:{icon:e.showInheritedSharesIcon,"aria-label":e.toggleTooltip,title:e.toggleTooltip},on:{click:function(t){return t.preventDefault(),t.stopPropagation(),e.toggleInheritedShares.apply(null,arguments)}}})],1),e._v(" "),e._l(e.shares,(function(n){return t("SharingEntryInherited",{key:n.id,attrs:{"file-info":e.fileInfo,share:n},on:{"remove:share":e.removeShare}})}))],2)}),[],!1,null,"3462b966",null),ze=Qe.exports,Je=r(81807),Xe=r.n(Je),et=r(79570),tt=r.n(et),nt=r(875),rt=r.n(nt),it=r(18074),at=r.n(it),st={name:"ExternalShareAction",props:{id:{type:String,required:!0},action:{type:Object,default:function(){return{}}},fileInfo:{type:Object,default:function(){},required:!0},share:{type:A,default:null}},computed:{data:function(){return this.action.data(this)}}},ot=(0,W.Z)(st,(function(){var e=this;return(0,e._self._c)(e.data.is,e._g(e._b({tag:"Component"},"Component",e.data,!1),e.action.handlers),[e._v("\n\t"+e._s(e.data.text)+"\n")])}),[],!1,null,null,null).exports,ct=r(30158),lt=r.n(ct),ut={NONE:0,READ:1,UPDATE:2,CREATE:4,DELETE:8,SHARE:16},ht={READ_ONLY:ut.READ,UPLOAD_AND_UPDATE:ut.READ|ut.UPDATE|ut.CREATE|ut.DELETE,FILE_DROP:ut.CREATE,ALL:ut.UPDATE|ut.CREATE|ut.READ|ut.DELETE|ut.SHARE};function dt(e,t){return e!==ut.NONE&&(e&t)===t}function ft(e){return!(!dt(e,ut.READ)&&!dt(e,ut.CREATE)||!dt(e,ut.READ)&&(dt(e,ut.UPDATE)||dt(e,ut.DELETE)))}function pt(e,t){return dt(e,t)?function(e,t){return e&~t}(e,t):function(e,t){return e|t}(e,t)}var gt=r(55976),mt=r(32964),vt={name:"SharePermissionsEditor",components:{NcActionButton:De(),NcActionCheckbox:Xe(),NcActionRadio:lt(),Tune:gt.Z,ChevronLeft:mt.default},mixins:[Ue],data:function(){return{randomFormName:Math.random().toString(27).substring(2),showCustomPermissionsForm:!1,atomicPermissions:ut,bundledPermissions:ht}},computed:{sharePermissionsSummary:function(){var e=this;return Object.values(this.atomicPermissions).filter((function(t){return e.shareHasPermissions(t)})).map((function(t){switch(t){case e.atomicPermissions.CREATE:return e.t("files_sharing","Upload");case e.atomicPermissions.READ:return e.t("files_sharing","Read");case e.atomicPermissions.UPDATE:return e.t("files_sharing","Edit");case e.atomicPermissions.DELETE:return e.t("files_sharing","Delete");default:return null}})).filter((function(e){return null!==e})).join(", ")},sharePermissionsIsBundle:function(){var e=this;return Object.values(ht).map((function(t){return e.sharePermissionEqual(t)})).filter((function(e){return e})).length>0},sharePermissionsSetIsValid:function(){return ft(this.share.permissions)},isFolder:function(){return"dir"===this.fileInfo.type},fileHasCreatePermission:function(){return!!(this.fileInfo.permissions&ut.CREATE)}},mounted:function(){this.showCustomPermissionsForm=!this.sharePermissionsIsBundle},methods:{sharePermissionEqual:function(e){return(this.share.permissions&~ut.SHARE)===e},shareHasPermissions:function(e){return dt(this.share.permissions,e)},setSharePermissions:function(e){this.share.permissions=e,this.queueUpdate("permissions")},canToggleSharePermissions:function(e){return function(e,t){return ft(pt(e,t))}(this.share.permissions,e)},toggleSharePermissions:function(e){this.share.permissions=pt(this.share.permissions,e),ft(this.share.permissions)&&this.queueUpdate("permissions")}}},yt=r(73286),_t={};_t.styleTagTransform=j(),_t.setAttributes=L(),_t.insert=O().bind(null,"head"),_t.domAPI=R(),_t.insertStyleElement=Y(),D()(yt.Z,_t),yt.Z&&yt.Z.locals&&yt.Z.locals;var At=(0,W.Z)(vt,(function(){var e=this,t=e._self._c;return t("li",[t("ul",[e.isFolder?e._e():t("NcActionCheckbox",{attrs:{checked:e.shareHasPermissions(e.atomicPermissions.UPDATE),disabled:e.saving},on:{"update:checked":function(t){return e.toggleSharePermissions(e.atomicPermissions.UPDATE)}}},[e._v("\n\t\t\t"+e._s(e.t("files_sharing","Allow editing"))+"\n\t\t")]),e._v(" "),e.isFolder&&e.fileHasCreatePermission&&e.config.isPublicUploadEnabled?[e.showCustomPermissionsForm?t("span",{class:{error:!e.sharePermissionsSetIsValid}},[t("NcActionCheckbox",{attrs:{checked:e.shareHasPermissions(e.atomicPermissions.READ),disabled:e.saving||!e.canToggleSharePermissions(e.atomicPermissions.READ)},on:{"update:checked":function(t){return e.toggleSharePermissions(e.atomicPermissions.READ)}}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Read"))+"\n\t\t\t\t")]),e._v(" "),t("NcActionCheckbox",{attrs:{checked:e.shareHasPermissions(e.atomicPermissions.CREATE),disabled:e.saving||!e.canToggleSharePermissions(e.atomicPermissions.CREATE)},on:{"update:checked":function(t){return e.toggleSharePermissions(e.atomicPermissions.CREATE)}}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Upload"))+"\n\t\t\t\t")]),e._v(" "),t("NcActionCheckbox",{attrs:{checked:e.shareHasPermissions(e.atomicPermissions.UPDATE),disabled:e.saving||!e.canToggleSharePermissions(e.atomicPermissions.UPDATE)},on:{"update:checked":function(t){return e.toggleSharePermissions(e.atomicPermissions.UPDATE)}}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Edit"))+"\n\t\t\t\t")]),e._v(" "),t("NcActionCheckbox",{attrs:{checked:e.shareHasPermissions(e.atomicPermissions.DELETE),disabled:e.saving||!e.canToggleSharePermissions(e.atomicPermissions.DELETE)},on:{"update:checked":function(t){return e.toggleSharePermissions(e.atomicPermissions.DELETE)}}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Delete"))+"\n\t\t\t\t")]),e._v(" "),t("NcActionButton",{on:{click:function(t){e.showCustomPermissionsForm=!1}},scopedSlots:e._u([{key:"icon",fn:function(){return[t("ChevronLeft")]},proxy:!0}],null,!1,1018742195)},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Bundled permissions"))+"\n\t\t\t\t")])],1):[t("NcActionRadio",{attrs:{checked:e.sharePermissionEqual(e.bundledPermissions.READ_ONLY),value:e.bundledPermissions.READ_ONLY,name:e.randomFormName,disabled:e.saving},on:{change:function(t){return e.setSharePermissions(e.bundledPermissions.READ_ONLY)}}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Read only"))+"\n\t\t\t\t")]),e._v(" "),t("NcActionRadio",{attrs:{checked:e.sharePermissionEqual(e.bundledPermissions.UPLOAD_AND_UPDATE),value:e.bundledPermissions.UPLOAD_AND_UPDATE,disabled:e.saving,name:e.randomFormName},on:{change:function(t){return e.setSharePermissions(e.bundledPermissions.UPLOAD_AND_UPDATE)}}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Allow upload and editing"))+"\n\t\t\t\t")]),e._v(" "),t("NcActionRadio",{staticClass:"sharing-entry__action--public-upload",attrs:{checked:e.sharePermissionEqual(e.bundledPermissions.FILE_DROP),value:e.bundledPermissions.FILE_DROP,disabled:e.saving,name:e.randomFormName},on:{change:function(t){return e.setSharePermissions(e.bundledPermissions.FILE_DROP)}}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","File drop (upload only)"))+"\n\t\t\t\t")]),e._v(" "),t("NcActionButton",{attrs:{title:e.t("files_sharing","Custom permissions")},on:{click:function(t){e.showCustomPermissionsForm=!0}},scopedSlots:e._u([{key:"icon",fn:function(){return[t("Tune")]},proxy:!0}],null,!1,961531849)},[e._v("\n\t\t\t\t\t"+e._s(e.sharePermissionsIsBundle?"":e.sharePermissionsSummary)+"\n\t\t\t\t")])]]:e._e()],2)])}),[],!1,null,"5e957d09",null).exports,bt=r(25108);function Et(e){return Et="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},Et(e)}function wt(e,t,n,r,i,a,s){try{var o=e[a](s),c=o.value}catch(e){return void n(e)}o.done?t(c):Promise.resolve(c).then(r,i)}function St(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var a=e.apply(t,n);function s(e){wt(a,r,i,s,o,"next",e)}function o(e){wt(a,r,i,s,o,"throw",e)}s(void 0)}))}}var Ct={name:"SharingEntryLink",components:{NcActions:x(),NcActionButton:De(),NcActionCheckbox:Xe(),NcActionInput:tt(),NcActionLink:S(),NcActionText:Ne(),NcActionTextEditable:at(),NcActionSeparator:rt(),NcAvatar:l(),ExternalShareAction:ot,SharePermissionsEditor:At},mixins:[Ue],props:{canReshare:{type:Boolean,default:!0},index:{type:Number,default:null}},data:function(){return{copySuccess:!0,copied:!1,pending:!1,ExternalLegacyLinkActions:OCA.Sharing.ExternalLinkActions.state,ExternalShareActions:OCA.Sharing.ExternalShareActions.state}},computed:{title:function(){if(this.share&&this.share.id){if(!this.isShareOwner&&this.share.ownerDisplayName)return this.isEmailShareType?t("files_sharing","{shareWith} by {initiator}",{shareWith:this.share.shareWith,initiator:this.share.ownerDisplayName}):t("files_sharing","Shared via link by {initiator}",{initiator:this.share.ownerDisplayName});if(this.share.label&&""!==this.share.label.trim())return this.isEmailShareType?t("files_sharing","Mail share ({label})",{label:this.share.label.trim()}):t("files_sharing","Share link ({label})",{label:this.share.label.trim()});if(this.isEmailShareType)return this.share.shareWith}return this.index>1?t("files_sharing","Share link ({index})",{index:this.index}):t("files_sharing","Share link")},subtitle:function(){return this.isEmailShareType&&this.title!==this.share.shareWith?this.share.shareWith:null},hasExpirationDate:{get:function(){return this.config.isDefaultExpireDateEnforced||!!this.share.expireDate},set:function(e){var t=this.config.defaultExpirationDate||new Date((new Date).setDate((new Date).getDate()+1));this.share.expireDate=e?this.formatDateToString(t):"",bt.debug("Expiration date status",e,this.share.expireDate)}},dateMaxEnforced:function(){return this.config.isDefaultExpireDateEnforced?new Date((new Date).setDate((new Date).getDate()+this.config.defaultExpireDate)):null},isPasswordProtected:{get:function(){return this.config.enforcePasswordForPublicLink||!!this.share.password},set:function(e){var t=this;return St(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(n.t0=i.ZP,n.t1=t.share,!e){n.next=8;break}return n.next=5,ce();case 5:n.t2=n.sent,n.next=9;break;case 8:n.t2="";case 9:n.t3=n.t2,n.t0.set.call(n.t0,n.t1,"password",n.t3),i.ZP.set(t.share,"newPassword",t.share.password);case 12:case"end":return n.stop()}}),n)})))()}},passwordExpirationTime:function(){if(null===this.share.passwordExpirationTime)return null;var e=moment(this.share.passwordExpirationTime);return!(e.diff(moment())<0)&&e.fromNow()},isTalkEnabled:function(){return void 0!==OC.appswebroots.spreed},isPasswordProtectedByTalkAvailable:function(){return this.isPasswordProtected&&this.isTalkEnabled},isPasswordProtectedByTalk:{get:function(){return this.share.sendPasswordByTalk},set:function(e){var t=this;return St(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:t.share.sendPasswordByTalk=e;case 1:case"end":return n.stop()}}),n)})))()}},isEmailShareType:function(){return!!this.share&&this.share.type===this.SHARE_TYPES.SHARE_TYPE_EMAIL},canTogglePasswordProtectedByTalkAvailable:function(){return!(!this.isPasswordProtected||this.isEmailShareType&&!this.hasUnsavedPassword)},pendingPassword:function(){return this.config.enableLinkPasswordByDefault&&this.share&&!this.share.id},pendingEnforcedPassword:function(){return this.config.enforcePasswordForPublicLink&&this.share&&!this.share.id},pendingExpirationDate:function(){return this.config.isDefaultExpireDateEnforced&&this.share&&!this.share.id},hasUnsavedPassword:function(){return void 0!==this.share.newPassword},shareLink:function(){return window.location.protocol+"//"+window.location.host+(0,o.generateUrl)("/s/")+this.share.token},actionsTooltip:function(){return t("files_sharing",'Actions for "{title}"',{title:this.title})},copyLinkTooltip:function(){return this.copied?this.copySuccess?"":t("files_sharing","Cannot copy, please copy the link manually"):t("files_sharing",'Copy public link of "{title}" to clipboard',{title:this.title})},externalLegacyLinkActions:function(){return this.ExternalLegacyLinkActions.actions},externalLinkActions:function(){return this.ExternalShareActions.actions.filter((function(e){return e.shareType.includes(g.D.SHARE_TYPE_LINK)||e.shareType.includes(g.D.SHARE_TYPE_EMAIL)}))},isPasswordPolicyEnabled:function(){return"object"===Et(this.config.passwordPolicy)},canChangeHideDownload:function(){return this.fileInfo.shareAttributes.some((function(e){return"download"===e.key&&"permissions"===e.scope&&!1===e.enabled}))}},methods:{onNewLinkShare:function(){var e=this;return St(regeneratorRuntime.mark((function n(){var r,i,a,s;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(!e.loading){n.next=2;break}return n.abrupt("return");case 2:if(r={share_type:g.D.SHARE_TYPE_LINK},e.config.isDefaultExpireDateEnforced&&(r.expiration=e.formatDateToString(e.config.defaultExpirationDate)),!(e.config.enableLinkPasswordByDefault||e.config.enforcePasswordForPublicLink||e.config.isDefaultExpireDateEnforced)){n.next=37;break}if(e.pending=!0,!e.share||e.share.id){n.next=24;break}if(!e.checkShare(e.share)){n.next=21;break}return n.prev=8,n.next=11,e.pushNewLinkShare(e.share,!0);case 11:n.next=18;break;case 13:return n.prev=13,n.t0=n.catch(8),e.pending=!1,bt.error(n.t0),n.abrupt("return",!1);case 18:return n.abrupt("return",!0);case 21:return e.open=!0,OC.Notification.showTemporary(t("files_sharing","Error, please enter proper password and/or expiration date")),n.abrupt("return",!1);case 24:if(!e.config.enableLinkPasswordByDefault&&!e.config.enforcePasswordForPublicLink){n.next=28;break}return n.next=27,ce();case 27:r.password=n.sent;case 28:return i=new A(r),n.next=31,new Promise((function(t){e.$emit("add:share",i,t)}));case 31:a=n.sent,e.open=!1,e.pending=!1,a.open=!0,n.next=40;break;case 37:return s=new A(r),n.next=40,e.pushNewLinkShare(s);case 40:case"end":return n.stop()}}),n,null,[[8,13]])})))()},pushNewLinkShare:function(e,n){var r=this;return St(regeneratorRuntime.mark((function i(){var a,s,o,c,l,u,h,d,f;return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(i.prev=0,!r.loading){i.next=3;break}return i.abrupt("return",!0);case 3:return r.loading=!0,r.errors={},a=(r.fileInfo.path+"/"+r.fileInfo.name).replace("//","/"),s={path:a,shareType:g.D.SHARE_TYPE_LINK,password:e.password,expireDate:e.expireDate,attributes:JSON.stringify(r.fileInfo.shareAttributes)},bt.debug("Creating link share with options",s),i.next=10,r.createShare(s);case 10:if(o=i.sent,r.open=!1,bt.debug("Link share created",o),!n){i.next=19;break}return i.next=16,new Promise((function(e){r.$emit("update:share",o,e)}));case 16:c=i.sent,i.next=22;break;case 19:return i.next=21,new Promise((function(e){r.$emit("add:share",o,e)}));case 21:c=i.sent;case 22:r.config.enforcePasswordForPublicLink||c.copyLink(),(0,E.s$)(t("sharing","Link share created")),i.next=35;break;case 26:if(i.prev=26,i.t0=i.catch(0),f=null===i.t0||void 0===i.t0||null===(l=i.t0.response)||void 0===l||null===(u=l.data)||void 0===u||null===(h=u.ocs)||void 0===h||null===(d=h.meta)||void 0===d?void 0:d.message){i.next=33;break}return(0,E.x2)(t("sharing","Error while creating the share")),bt.error(i.t0),i.abrupt("return");case 33:throw f.match(/password/i)?r.onSyncError("password",f):f.match(/date/i)?r.onSyncError("expireDate",f):r.onSyncError("pending",f),i.t0;case 35:return i.prev=35,r.loading=!1,i.finish(35);case 38:case"end":return i.stop()}}),i,null,[[0,26,35,38]])})))()},onLabelChange:function(e){this.$set(this.share,"newLabel",e.trim())},onLabelSubmit:function(){"string"==typeof this.share.newLabel&&(this.share.label=this.share.newLabel,this.$delete(this.share,"newLabel"),this.queueUpdate("label"))},copyLink:function(){var e=this;return St(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,n.next=3,navigator.clipboard.writeText(e.shareLink);case 3:(0,E.s$)(t("files_sharing","Link copied")),e.$refs.copyButton.$el.focus(),e.copySuccess=!0,e.copied=!0,n.next=14;break;case 9:n.prev=9,n.t0=n.catch(0),e.copySuccess=!1,e.copied=!0,bt.error(n.t0);case 14:return n.prev=14,setTimeout((function(){e.copySuccess=!1,e.copied=!1}),4e3),n.finish(14);case 17:case"end":return n.stop()}}),n,null,[[0,9,14,17]])})))()},onPasswordChange:function(e){this.$set(this.share,"newPassword",e)},onPasswordDisable:function(){this.share.password="",this.$delete(this.share,"newPassword"),this.share.id&&this.queueUpdate("password")},onPasswordSubmit:function(){this.hasUnsavedPassword&&(this.share.password=this.share.newPassword.trim(),this.queueUpdate("password"))},onPasswordProtectedByTalkChange:function(){this.hasUnsavedPassword&&(this.share.password=this.share.newPassword.trim()),this.queueUpdate("sendPasswordByTalk","password")},onMenuClose:function(){this.onPasswordSubmit(),this.onNoteSubmit()},onCancel:function(){this.$emit("remove:share",this.share)}}},xt=Ct,kt=r(14113),Pt={};Pt.styleTagTransform=j(),Pt.setAttributes=L(),Pt.insert=O().bind(null,"head"),Pt.domAPI=R(),Pt.insertStyleElement=Y(),D()(kt.Z,Pt),kt.Z&&kt.Z.locals&&kt.Z.locals;var Dt=(0,W.Z)(xt,(function(){var e=this,t=e._self._c;return t("li",{staticClass:"sharing-entry sharing-entry__link",class:{"sharing-entry--share":e.share}},[t("NcAvatar",{staticClass:"sharing-entry__avatar",attrs:{"is-no-user":!0,"icon-class":e.isEmailShareType?"avatar-link-share icon-mail-white":"avatar-link-share icon-public-white"}}),e._v(" "),t("div",{staticClass:"sharing-entry__desc"},[t("span",{staticClass:"sharing-entry__title",attrs:{title:e.title}},[e._v("\n\t\t\t"+e._s(e.title)+"\n\t\t")]),e._v(" "),e.subtitle?t("p",[e._v("\n\t\t\t"+e._s(e.subtitle)+"\n\t\t")]):e._e()]),e._v(" "),e.share&&!e.isEmailShareType&&e.share.token?t("NcActions",{ref:"copyButton",staticClass:"sharing-entry__copy"},[t("NcActionLink",{attrs:{href:e.shareLink,target:"_blank",title:e.copyLinkTooltip,"aria-label":e.copyLinkTooltip,icon:e.copied&&e.copySuccess?"icon-checkmark-color":"icon-clippy"},on:{click:function(t){return t.stopPropagation(),t.preventDefault(),e.copyLink.apply(null,arguments)}}})],1):e._e(),e._v(" "),!e.pending&&(e.pendingPassword||e.pendingEnforcedPassword||e.pendingExpirationDate)?t("NcActions",{staticClass:"sharing-entry__actions",attrs:{"aria-label":e.actionsTooltip,"menu-align":"right",open:e.open},on:{"update:open":function(t){e.open=t},close:e.onNewLinkShare}},[e.errors.pending?t("NcActionText",{class:{error:e.errors.pending},attrs:{icon:"icon-error"}},[e._v("\n\t\t\t"+e._s(e.errors.pending)+"\n\t\t")]):t("NcActionText",{attrs:{icon:"icon-info"}},[e._v("\n\t\t\t"+e._s(e.t("files_sharing","Please enter the following required information before creating the share"))+"\n\t\t")]),e._v(" "),e.pendingEnforcedPassword?t("NcActionText",{attrs:{icon:"icon-password"}},[e._v("\n\t\t\t"+e._s(e.t("files_sharing","Password protection (enforced)"))+"\n\t\t")]):e.pendingPassword?t("NcActionCheckbox",{staticClass:"share-link-password-checkbox",attrs:{checked:e.isPasswordProtected,disabled:e.config.enforcePasswordForPublicLink||e.saving},on:{"update:checked":function(t){e.isPasswordProtected=t},uncheck:e.onPasswordDisable}},[e._v("\n\t\t\t"+e._s(e.t("files_sharing","Password protection"))+"\n\t\t")]):e._e(),e._v(" "),e.pendingEnforcedPassword||e.share.password?t("NcActionInput",{staticClass:"share-link-password",attrs:{value:e.share.password,disabled:e.saving,required:e.config.enableLinkPasswordByDefault||e.config.enforcePasswordForPublicLink,minlength:e.isPasswordPolicyEnabled&&e.config.passwordPolicy.minLength,icon:"",autocomplete:"new-password"},on:{"update:value":function(t){return e.$set(e.share,"password",t)},submit:e.onNewLinkShare}},[e._v("\n\t\t\t"+e._s(e.t("files_sharing","Enter a password"))+"\n\t\t")]):e._e(),e._v(" "),e.pendingExpirationDate?t("NcActionText",{attrs:{icon:"icon-calendar-dark"}},[e._v("\n\t\t\t"+e._s(e.t("files_sharing","Expiration date (enforced)"))+"\n\t\t")]):e._e(),e._v(" "),e.pendingExpirationDate?t("NcActionInput",{staticClass:"share-link-expire-date",attrs:{disabled:e.saving,"is-native-picker":!0,"hide-label":!0,value:new Date(e.share.expireDate),type:"date",min:e.dateTomorrow,max:e.dateMaxEnforced},on:{input:e.onExpirationChange}},[e._v("\n\t\t\t"+e._s(e.t("files_sharing","Enter a date"))+"\n\t\t")]):e._e(),e._v(" "),t("NcActionButton",{attrs:{icon:"icon-checkmark"},on:{click:function(t){return t.preventDefault(),t.stopPropagation(),e.onNewLinkShare.apply(null,arguments)}}},[e._v("\n\t\t\t"+e._s(e.t("files_sharing","Create share"))+"\n\t\t")]),e._v(" "),t("NcActionButton",{attrs:{icon:"icon-close"},on:{click:function(t){return t.preventDefault(),t.stopPropagation(),e.onCancel.apply(null,arguments)}}},[e._v("\n\t\t\t"+e._s(e.t("files_sharing","Cancel"))+"\n\t\t")])],1):e.loading?t("div",{staticClass:"icon-loading-small sharing-entry__loading"}):t("NcActions",{staticClass:"sharing-entry__actions",attrs:{"aria-label":e.actionsTooltip,"menu-align":"right",open:e.open},on:{"update:open":function(t){e.open=t},close:e.onMenuClose}},[e.share?[e.share.canEdit&&e.canReshare?[t("NcActionInput",{ref:"label",class:{error:e.errors.label},attrs:{disabled:e.saving,label:e.t("files_sharing","Share label"),value:void 0!==e.share.newLabel?e.share.newLabel:e.share.label,icon:"icon-edit",maxlength:"255"},on:{"update:value":e.onLabelChange,submit:e.onLabelSubmit}}),e._v(" "),t("SharePermissionsEditor",{attrs:{"can-reshare":e.canReshare,share:e.share,"file-info":e.fileInfo},on:{"update:share":function(t){e.share=t}}}),e._v(" "),t("NcActionSeparator"),e._v(" "),t("NcActionCheckbox",{attrs:{checked:e.share.hideDownload,disabled:e.saving||e.canChangeHideDownload},on:{"update:checked":function(t){return e.$set(e.share,"hideDownload",t)},change:function(t){return e.queueUpdate("hideDownload")}}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Hide download"))+"\n\t\t\t\t")]),e._v(" "),t("NcActionCheckbox",{staticClass:"share-link-password-checkbox",attrs:{checked:e.isPasswordProtected,disabled:e.config.enforcePasswordForPublicLink||e.saving},on:{"update:checked":function(t){e.isPasswordProtected=t},uncheck:e.onPasswordDisable}},[e._v("\n\t\t\t\t\t"+e._s(e.config.enforcePasswordForPublicLink?e.t("files_sharing","Password protection (enforced)"):e.t("files_sharing","Password protect"))+"\n\t\t\t\t")]),e._v(" "),e.isPasswordProtected?t("NcActionInput",{ref:"password",staticClass:"share-link-password",class:{error:e.errors.password},attrs:{disabled:e.saving,required:e.config.enforcePasswordForPublicLink,value:e.hasUnsavedPassword?e.share.newPassword:"***************",icon:"icon-password",autocomplete:"new-password",type:e.hasUnsavedPassword?"text":"password"},on:{"update:value":e.onPasswordChange,submit:e.onPasswordSubmit}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Enter a password"))+"\n\t\t\t\t")]):e._e(),e._v(" "),e.isEmailShareType&&e.passwordExpirationTime?t("NcActionText",{attrs:{icon:"icon-info"}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Password expires {passwordExpirationTime}",{passwordExpirationTime:e.passwordExpirationTime}))+"\n\t\t\t\t")]):e.isEmailShareType&&null!==e.passwordExpirationTime?t("NcActionText",{attrs:{icon:"icon-error"}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Password expired"))+"\n\t\t\t\t")]):e._e(),e._v(" "),e.isPasswordProtectedByTalkAvailable?t("NcActionCheckbox",{staticClass:"share-link-password-talk-checkbox",attrs:{checked:e.isPasswordProtectedByTalk,disabled:!e.canTogglePasswordProtectedByTalkAvailable||e.saving},on:{"update:checked":function(t){e.isPasswordProtectedByTalk=t},change:e.onPasswordProtectedByTalkChange}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Video verification"))+"\n\t\t\t\t")]):e._e(),e._v(" "),t("NcActionCheckbox",{staticClass:"share-link-expire-date-checkbox",attrs:{checked:e.hasExpirationDate,disabled:e.config.isDefaultExpireDateEnforced||e.saving},on:{"update:checked":function(t){e.hasExpirationDate=t},uncheck:e.onExpirationDisable}},[e._v("\n\t\t\t\t\t"+e._s(e.config.isDefaultExpireDateEnforced?e.t("files_sharing","Expiration date (enforced)"):e.t("files_sharing","Set expiration date"))+"\n\t\t\t\t")]),e._v(" "),e.hasExpirationDate?t("NcActionInput",{ref:"expireDate",staticClass:"share-link-expire-date",class:{error:e.errors.expireDate},attrs:{"is-native-picker":!0,"hide-label":!0,disabled:e.saving,value:new Date(e.share.expireDate),type:"date",min:e.dateTomorrow,max:e.dateMaxEnforced},on:{input:e.onExpirationChange}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Enter a date"))+"\n\t\t\t\t")]):e._e(),e._v(" "),t("NcActionCheckbox",{attrs:{checked:e.hasNote,disabled:e.saving},on:{"update:checked":function(t){e.hasNote=t},uncheck:function(t){return e.queueUpdate("note")}}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Note to recipient"))+"\n\t\t\t\t")]),e._v(" "),e.hasNote?t("NcActionTextEditable",{ref:"note",class:{error:e.errors.note},attrs:{disabled:e.saving,placeholder:e.t("files_sharing","Enter a note for the share recipient"),value:e.share.newNote||e.share.note,icon:"icon-edit"},on:{"update:value":e.onNoteChange,submit:e.onNoteSubmit}}):e._e()]:e._e(),e._v(" "),t("NcActionSeparator"),e._v(" "),e._l(e.externalLinkActions,(function(n){return t("ExternalShareAction",{key:n.id,attrs:{id:n.id,action:n,"file-info":e.fileInfo,share:e.share}})})),e._v(" "),e._l(e.externalLegacyLinkActions,(function(n,r){var i=n.icon,a=n.url,s=n.name;return t("NcActionLink",{key:r,attrs:{href:a(e.shareLink),icon:i,target:"_blank"}},[e._v("\n\t\t\t\t"+e._s(s)+"\n\t\t\t")])})),e._v(" "),e.share.canDelete?t("NcActionButton",{attrs:{icon:"icon-close",disabled:e.saving},on:{click:function(t){return t.preventDefault(),e.onDelete.apply(null,arguments)}}},[e._v("\n\t\t\t\t"+e._s(e.t("files_sharing","Unshare"))+"\n\t\t\t")]):e._e(),e._v(" "),!e.isEmailShareType&&e.canReshare?t("NcActionButton",{staticClass:"new-share-link",attrs:{icon:"icon-add"},on:{click:function(t){return t.preventDefault(),t.stopPropagation(),e.onNewLinkShare.apply(null,arguments)}}},[e._v("\n\t\t\t\t"+e._s(e.t("files_sharing","Add another link"))+"\n\t\t\t")]):e._e()]:e.canReshare?t("NcActionButton",{staticClass:"new-share-link",attrs:{title:e.t("files_sharing","Create a new share link"),"aria-label":e.t("files_sharing","Create a new share link"),icon:e.loading?"icon-loading-small":"icon-add"},on:{click:function(t){return t.preventDefault(),t.stopPropagation(),e.onNewLinkShare.apply(null,arguments)}}}):e._e()],2)],1)}),[],!1,null,"10855e60",null),Tt={name:"SharingLinkList",components:{SharingEntryLink:Dt.exports},mixins:[b],props:{fileInfo:{type:Object,default:function(){},required:!0},shares:{type:Array,default:function(){return[]},required:!0},canReshare:{type:Boolean,required:!0}},data:function(){return{canLinkShare:OC.getCapabilities().files_sharing.public.enabled}},computed:{hasLinkShares:function(){var e=this;return this.shares.filter((function(t){return t.type===e.SHARE_TYPES.SHARE_TYPE_LINK})).length>0},hasShares:function(){return this.shares.length>0}},methods:{addShare:function(e,t){this.shares.unshift(e),this.awaitForShare(e,t)},awaitForShare:function(e,t){var n=this;this.$nextTick((function(){var r=n.$children.find((function(t){return t.share===e}));r&&t(r)}))},removeShare:function(e){var t=this.shares.findIndex((function(t){return t===e}));this.shares.splice(t,1)}}},Rt=(0,W.Z)(Tt,(function(){var e=this,t=e._self._c;return e.canLinkShare?t("ul",{staticClass:"sharing-link-list"},[!e.hasLinkShares&&e.canReshare?t("SharingEntryLink",{attrs:{"can-reshare":e.canReshare,"file-info":e.fileInfo},on:{"add:share":e.addShare}}):e._e(),e._v(" "),e.hasShares?e._l(e.shares,(function(n,r){return t("SharingEntryLink",{key:n.id,attrs:{index:e.shares.length>1?r+1:null,"can-reshare":e.canReshare,share:e.shares[r],"file-info":e.fileInfo},on:{"update:share":[function(t){return e.$set(e.shares,r,t)},function(t){return e.awaitForShare.apply(e,arguments)}],"add:share":function(t){return e.addShare.apply(e,arguments)},"remove:share":e.removeShare}})})):e._e()],2):e._e()}),[],!1,null,null,null),Nt=Rt.exports,Ot=r(25108);function It(e){return It="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},It(e)}var Lt={name:"SharingEntry",components:{NcActions:x(),NcActionButton:De(),NcActionCheckbox:Xe(),NcActionInput:tt(),NcActionTextEditable:at(),NcAvatar:l()},mixins:[Ue],data:function(){return{permissionsEdit:OC.PERMISSION_UPDATE,permissionsCreate:OC.PERMISSION_CREATE,permissionsDelete:OC.PERMISSION_DELETE,permissionsRead:OC.PERMISSION_READ,permissionsShare:OC.PERMISSION_SHARE}},computed:{title:function(){var e=this.share.shareWithDisplayName;return this.share.type===this.SHARE_TYPES.SHARE_TYPE_GROUP?e+=" (".concat(t("files_sharing","group"),")"):this.share.type===this.SHARE_TYPES.SHARE_TYPE_ROOM?e+=" (".concat(t("files_sharing","conversation"),")"):this.share.type===this.SHARE_TYPES.SHARE_TYPE_REMOTE?e+=" (".concat(t("files_sharing","remote"),")"):this.share.type===this.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP?e+=" (".concat(t("files_sharing","remote group"),")"):this.share.type===this.SHARE_TYPES.SHARE_TYPE_GUEST&&(e+=" (".concat(t("files_sharing","guest"),")")),e},tooltip:function(){if(this.share.owner!==this.share.uidFileOwner){var e={user:this.share.shareWithDisplayName,owner:this.share.ownerDisplayName};return this.share.type===this.SHARE_TYPES.SHARE_TYPE_GROUP?t("files_sharing","Shared with the group {user} by {owner}",e):this.share.type===this.SHARE_TYPES.SHARE_TYPE_ROOM?t("files_sharing","Shared with the conversation {user} by {owner}",e):t("files_sharing","Shared with {user} by {owner}",e)}return null},canHaveNote:function(){return!this.isRemote},isRemote:function(){return this.share.type===this.SHARE_TYPES.SHARE_TYPE_REMOTE||this.share.type===this.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP},canSetEdit:function(){return this.fileInfo.sharePermissions&OC.PERMISSION_UPDATE||this.canEdit},canSetCreate:function(){return this.fileInfo.sharePermissions&OC.PERMISSION_CREATE||this.canCreate},canSetDelete:function(){return this.fileInfo.sharePermissions&OC.PERMISSION_DELETE||this.canDelete},canSetReshare:function(){return this.fileInfo.sharePermissions&OC.PERMISSION_SHARE||this.canReshare},canSetDownload:function(){return this.fileInfo.canDownload()||this.canDownload},canEdit:{get:function(){return this.share.hasUpdatePermission},set:function(e){this.updatePermissions({isEditChecked:e})}},canCreate:{get:function(){return this.share.hasCreatePermission},set:function(e){this.updatePermissions({isCreateChecked:e})}},canDelete:{get:function(){return this.share.hasDeletePermission},set:function(e){this.updatePermissions({isDeleteChecked:e})}},canReshare:{get:function(){return this.share.hasSharePermission},set:function(e){this.updatePermissions({isReshareChecked:e})}},canDownload:{get:function(){return this.share.hasDownloadPermission},set:function(e){this.updatePermissions({isDownloadChecked:e})}},hasRead:{get:function(){return this.share.hasReadPermission}},isFolder:function(){return"dir"===this.fileInfo.type},hasExpirationDate:{get:function(){return this.config.isDefaultInternalExpireDateEnforced||!!this.share.expireDate},set:function(e){var t=this.config.defaultInternalExpirationDate||new Date((new Date).setDate((new Date).getDate()+1));this.share.expireDate=e?this.formatDateToString(t):"",Ot.debug("Expiration date status",e,this.share.expireDate)}},dateMaxEnforced:function(){return!this.isRemote&&this.config.isDefaultInternalExpireDateEnforced?new Date((new Date).setDate((new Date).getDate()+1+this.config.defaultInternalExpireDate)):this.config.isDefaultRemoteExpireDateEnforced?new Date((new Date).setDate((new Date).getDate()+1+this.config.defaultRemoteExpireDate)):null},hasStatus:function(){return this.share.type===this.SHARE_TYPES.SHARE_TYPE_USER&&"object"===It(this.share.status)&&!Array.isArray(this.share.status)},allowDownloadText:function(){return t("files_sharing","Allow download")},isSetDownloadButtonVisible:function(){return this.isFolder||["application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.ms-powerpoint","application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.oasis.opendocument.text","application/vnd.oasis.opendocument.spreadsheet","application/vnd.oasis.opendocument.presentation"].includes(this.fileInfo.mimetype)}},methods:{updatePermissions:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.isEditChecked,n=void 0===t?this.canEdit:t,r=e.isCreateChecked,i=void 0===r?this.canCreate:r,a=e.isDeleteChecked,s=void 0===a?this.canDelete:a,o=e.isReshareChecked,c=void 0===o?this.canReshare:o,l=e.isDownloadChecked,u=void 0===l?this.canDownload:l,h=0|(this.hasRead?this.permissionsRead:0)|(i?this.permissionsCreate:0)|(s?this.permissionsDelete:0)|(n?this.permissionsEdit:0)|(c?this.permissionsShare:0);this.share.permissions=h,this.share.hasDownloadPermission!==u&&(this.share.hasDownloadPermission=u),this.queueUpdate("permissions","attributes")},onMenuClose:function(){this.onNoteSubmit()}}},Ht=Lt,Yt=r(24196),Ut={};Ut.styleTagTransform=j(),Ut.setAttributes=L(),Ut.insert=O().bind(null,"head"),Ut.domAPI=R(),Ut.insertStyleElement=Y(),D()(Yt.Z,Ut),Yt.Z&&Yt.Z.locals&&Yt.Z.locals;var jt=(0,W.Z)(Ht,(function(){var e=this,t=e._self._c;return t("li",{staticClass:"sharing-entry"},[t("NcAvatar",{staticClass:"sharing-entry__avatar",attrs:{"is-no-user":e.share.type!==e.SHARE_TYPES.SHARE_TYPE_USER,user:e.share.shareWith,"display-name":e.share.shareWithDisplayName,"menu-position":"left",url:e.share.shareWithAvatar}}),e._v(" "),t(e.share.shareWithLink?"a":"div",{tag:"component",staticClass:"sharing-entry__desc",attrs:{title:e.tooltip,"aria-label":e.tooltip,href:e.share.shareWithLink}},[t("span",[e._v(e._s(e.title)),e.isUnique?e._e():t("span",{staticClass:"sharing-entry__desc-unique"},[e._v(" ("+e._s(e.share.shareWithDisplayNameUnique)+")")])]),e._v(" "),e.hasStatus?t("p",[t("span",[e._v(e._s(e.share.status.icon||""))]),e._v(" "),t("span",[e._v(e._s(e.share.status.message||""))])]):e._e()]),e._v(" "),t("NcActions",{staticClass:"sharing-entry__actions",attrs:{"menu-align":"right"},on:{close:e.onMenuClose}},[e.share.canEdit?[t("NcActionCheckbox",{ref:"canEdit",attrs:{checked:e.canEdit,value:e.permissionsEdit,disabled:e.saving||!e.canSetEdit},on:{"update:checked":function(t){e.canEdit=t}}},[e._v("\n\t\t\t\t"+e._s(e.t("files_sharing","Allow editing"))+"\n\t\t\t")]),e._v(" "),e.isFolder?t("NcActionCheckbox",{ref:"canCreate",attrs:{checked:e.canCreate,value:e.permissionsCreate,disabled:e.saving||!e.canSetCreate},on:{"update:checked":function(t){e.canCreate=t}}},[e._v("\n\t\t\t\t"+e._s(e.t("files_sharing","Allow creating"))+"\n\t\t\t")]):e._e(),e._v(" "),e.isFolder?t("NcActionCheckbox",{ref:"canDelete",attrs:{checked:e.canDelete,value:e.permissionsDelete,disabled:e.saving||!e.canSetDelete},on:{"update:checked":function(t){e.canDelete=t}}},[e._v("\n\t\t\t\t"+e._s(e.t("files_sharing","Allow deleting"))+"\n\t\t\t")]):e._e(),e._v(" "),e.config.isResharingAllowed?t("NcActionCheckbox",{ref:"canReshare",attrs:{checked:e.canReshare,value:e.permissionsShare,disabled:e.saving||!e.canSetReshare},on:{"update:checked":function(t){e.canReshare=t}}},[e._v("\n\t\t\t\t"+e._s(e.t("files_sharing","Allow resharing"))+"\n\t\t\t")]):e._e(),e._v(" "),e.isSetDownloadButtonVisible?t("NcActionCheckbox",{ref:"canDownload",attrs:{checked:e.canDownload,disabled:e.saving||!e.canSetDownload},on:{"update:checked":function(t){e.canDownload=t}}},[e._v("\n\t\t\t\t"+e._s(e.allowDownloadText)+"\n\t\t\t")]):e._e(),e._v(" "),t("NcActionCheckbox",{attrs:{checked:e.hasExpirationDate,disabled:e.config.isDefaultInternalExpireDateEnforced||e.saving},on:{"update:checked":function(t){e.hasExpirationDate=t},uncheck:e.onExpirationDisable}},[e._v("\n\t\t\t\t"+e._s(e.config.isDefaultInternalExpireDateEnforced?e.t("files_sharing","Expiration date enforced"):e.t("files_sharing","Set expiration date"))+"\n\t\t\t")]),e._v(" "),e.hasExpirationDate?t("NcActionInput",{ref:"expireDate",class:{error:e.errors.expireDate},attrs:{"is-native-picker":!0,"hide-label":!0,disabled:e.saving,value:new Date(e.share.expireDate),type:"date",min:e.dateTomorrow,max:e.dateMaxEnforced},on:{input:e.onExpirationChange}},[e._v("\n\t\t\t\t"+e._s(e.t("files_sharing","Enter a date"))+"\n\t\t\t")]):e._e(),e._v(" "),e.canHaveNote?[t("NcActionCheckbox",{attrs:{checked:e.hasNote,disabled:e.saving},on:{"update:checked":function(t){e.hasNote=t},uncheck:function(t){return e.queueUpdate("note")}}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Note to recipient"))+"\n\t\t\t\t")]),e._v(" "),e.hasNote?t("NcActionTextEditable",{ref:"note",class:{error:e.errors.note},attrs:{disabled:e.saving,value:e.share.newNote||e.share.note,icon:"icon-edit"},on:{"update:value":e.onNoteChange,submit:e.onNoteSubmit}}):e._e()]:e._e()]:e._e(),e._v(" "),e.share.canDelete?t("NcActionButton",{attrs:{icon:"icon-close",disabled:e.saving},on:{click:function(t){return t.preventDefault(),e.onDelete.apply(null,arguments)}}},[e._v("\n\t\t\t"+e._s(e.t("files_sharing","Unshare"))+"\n\t\t")]):e._e()],2)],1)}),[],!1,null,"13a6a5f0",null);function Mt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var Bt={name:"SharingList",components:{SharingEntry:jt.exports},mixins:[b],props:{fileInfo:{type:Object,default:function(){},required:!0},shares:{type:Array,default:function(){return[]},required:!0}},computed:{hasShares:function(){return 0===this.shares.length},isUnique:function(){var e=this;return function(t){return(n=e.shares,function(e){if(Array.isArray(e))return Mt(e)}(n)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(n)||function(e,t){if(e){if("string"==typeof e)return Mt(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Mt(e,t):void 0}}(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).filter((function(n){return t.type===e.SHARE_TYPES.SHARE_TYPE_USER&&t.shareWithDisplayName===n.shareWithDisplayName})).length<=1;var n}}},methods:{removeShare:function(e){var t=this.shares.findIndex((function(t){return t===e}));this.shares.splice(t,1)}}},Wt=(0,W.Z)(Bt,(function(){var e=this,t=e._self._c;return t("ul",{staticClass:"sharing-sharee-list"},e._l(e.shares,(function(n){return t("SharingEntry",{key:n.id,attrs:{"file-info":e.fileInfo,share:n,"is-unique":e.isUnique(n)},on:{"remove:share":e.removeShare}})})),1)}),[],!1,null,null,null).exports,Ft=r(25108);function qt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Zt(e,t,n,r,i,a,s){try{var o=e[a](s),c=o.value}catch(e){return void n(e)}o.done?t(c):Promise.resolve(c).then(r,i)}function $t(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var a=e.apply(t,n);function s(e){Zt(a,r,i,s,o,"next",e)}function o(e){Zt(a,r,i,s,o,"throw",e)}s(void 0)}))}}var Gt={name:"SharingTab",components:{NcAvatar:l(),CollectionList:s.G,SharingEntryInternal:z,SharingEntrySimple:F,SharingInherited:ze,SharingInput:ke,SharingLinkList:Nt,SharingList:Wt},mixins:[b],data:function(){return{config:new p,error:"",expirationInterval:null,loading:!0,fileInfo:null,reshare:null,sharedWithMe:{},shares:[],linkShares:[],sections:OCA.Sharing.ShareTabSections.getSections(),projectsEnabled:(0,h.j)("core","projects_enabled",!1)}},computed:{isSharedWithMe:function(){return Object.keys(this.sharedWithMe).length>0},canReshare:function(){return!!(this.fileInfo.permissions&OC.PERMISSION_SHARE)||!!(this.reshare&&this.reshare.hasSharePermission&&this.config.isResharingAllowed)}},methods:{update:function(e){var t=this;return $t(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:t.fileInfo=e,t.resetState(),t.getShares();case 3:case"end":return n.stop()}}),n)})))()},getShares:function(){var e=this;return $t(regeneratorRuntime.mark((function n(){var r,i,a,s,c,l,h,d,f,p,g,m;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,e.loading=!0,r=(0,o.generateOcsUrl)("apps/files_sharing/api/v1/shares"),i="json",a=(e.fileInfo.path+"/"+e.fileInfo.name).replace("//","/"),s=u.default.get(r,{params:{format:i,path:a,reshares:!0}}),c=u.default.get(r,{params:{format:i,path:a,shared_with_me:!0}}),n.next=9,Promise.all([s,c]);case 9:l=n.sent,y=2,h=function(e){if(Array.isArray(e))return e}(v=l)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a,s,o=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(o.push(r.value),o.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(l)throw i}}return o}}(v,y)||function(e,t){if(e){if("string"==typeof e)return qt(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?qt(e,t):void 0}}(v,y)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),d=h[0],f=h[1],e.loading=!1,e.processSharedWithMe(f),e.processShares(d),n.next=23;break;case 18:n.prev=18,n.t0=n.catch(0),null!==(p=n.t0.response.data)&&void 0!==p&&null!==(g=p.ocs)&&void 0!==g&&null!==(m=g.meta)&&void 0!==m&&m.message?e.error=n.t0.response.data.ocs.meta.message:e.error=t("files_sharing","Unable to load the shares list"),e.loading=!1,Ft.error("Error loading the shares list",n.t0);case 23:case"end":return n.stop()}var v,y}),n,null,[[0,18]])})))()},resetState:function(){clearInterval(this.expirationInterval),this.loading=!0,this.error="",this.sharedWithMe={},this.shares=[],this.linkShares=[]},updateExpirationSubtitle:function(e){var n=moment(e.expireDate).unix();this.$set(this.sharedWithMe,"subtitle",t("files_sharing","Expires {relativetime}",{relativetime:OC.Util.relativeModifiedDate(1e3*n)})),moment().unix()>n&&(clearInterval(this.expirationInterval),this.$set(this.sharedWithMe,"subtitle",t("files_sharing","this share just expired.")))},processShares:function(e){var t=this,n=e.data;if(n.ocs&&n.ocs.data&&n.ocs.data.length>0){var r=n.ocs.data.map((function(e){return new A(e)})).sort((function(e,t){return t.createdTime-e.createdTime}));this.linkShares=r.filter((function(e){return e.type===t.SHARE_TYPES.SHARE_TYPE_LINK||e.type===t.SHARE_TYPES.SHARE_TYPE_EMAIL})),this.shares=r.filter((function(e){return e.type!==t.SHARE_TYPES.SHARE_TYPE_LINK&&e.type!==t.SHARE_TYPES.SHARE_TYPE_EMAIL})),Ft.debug("Processed",this.linkShares.length,"link share(s)"),Ft.debug("Processed",this.shares.length,"share(s)")}},processSharedWithMe:function(e){var n=e.data;if(n.ocs&&n.ocs.data&&n.ocs.data[0]){var r=new A(n),i=function(e){return e.type===g.D.SHARE_TYPE_GROUP?t("files_sharing","Shared with you and the group {group} by {owner}",{group:e.shareWithDisplayName,owner:e.ownerDisplayName},void 0,{escape:!1}):e.type===g.D.SHARE_TYPE_CIRCLE?t("files_sharing","Shared with you and {circle} by {owner}",{circle:e.shareWithDisplayName,owner:e.ownerDisplayName},void 0,{escape:!1}):e.type===g.D.SHARE_TYPE_ROOM?e.shareWithDisplayName?t("files_sharing","Shared with you and the conversation {conversation} by {owner}",{conversation:e.shareWithDisplayName,owner:e.ownerDisplayName},void 0,{escape:!1}):t("files_sharing","Shared with you in a conversation by {owner}",{owner:e.ownerDisplayName},void 0,{escape:!1}):t("files_sharing","Shared with you by {owner}",{owner:e.ownerDisplayName},void 0,{escape:!1})}(r),a=r.ownerDisplayName,s=r.owner;this.sharedWithMe={displayName:a,title:i,user:s},this.reshare=r,r.expireDate&&moment(r.expireDate).unix()>moment().unix()&&(this.updateExpirationSubtitle(r),this.expirationInterval=setInterval(this.updateExpirationSubtitle,1e4,r))}else this.fileInfo&&void 0!==this.fileInfo.shareOwnerId&&this.fileInfo.shareOwnerId!==OC.currentUser&&(this.sharedWithMe={displayName:this.fileInfo.shareOwner,title:t("files_sharing","Shared with you by {owner}",{owner:this.fileInfo.shareOwner},void 0,{escape:!1}),user:this.fileInfo.shareOwnerId})},addShare:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){};e.type===this.SHARE_TYPES.SHARE_TYPE_EMAIL?this.linkShares.unshift(e):this.shares.unshift(e),this.awaitForShare(e,t)},awaitForShare:function(e,t){var n=this.$refs.shareList;e.type===this.SHARE_TYPES.SHARE_TYPE_EMAIL&&(n=this.$refs.linkShareList),this.$nextTick((function(){var r=n.$children.find((function(t){return t.share===e}));r&&t(r)}))}}},Vt=Gt,Kt=r(64727),Qt={};Qt.styleTagTransform=j(),Qt.setAttributes=L(),Qt.insert=O().bind(null,"head"),Qt.domAPI=R(),Qt.insertStyleElement=Y(),D()(Kt.Z,Qt),Kt.Z&&Kt.Z.locals&&Kt.Z.locals;var zt=(0,W.Z)(Vt,(function(){var e=this,t=e._self._c;return t("div",{class:{"icon-loading":e.loading}},[e.error?t("div",{staticClass:"emptycontent",class:{emptyContentWithSections:e.sections.length>0}},[t("div",{staticClass:"icon icon-error"}),e._v(" "),t("h2",[e._v(e._s(e.error))])]):t("div",{staticClass:"sharingTab__content"},[e.isSharedWithMe?t("SharingEntrySimple",e._b({staticClass:"sharing-entry__reshare",scopedSlots:e._u([{key:"avatar",fn:function(){return[t("NcAvatar",{staticClass:"sharing-entry__avatar",attrs:{user:e.sharedWithMe.user,"display-name":e.sharedWithMe.displayName}})]},proxy:!0}],null,!1,3197855346)},"SharingEntrySimple",e.sharedWithMe,!1)):e._e(),e._v(" "),e.loading?e._e():t("SharingInput",{attrs:{"can-reshare":e.canReshare,"file-info":e.fileInfo,"link-shares":e.linkShares,reshare:e.reshare,shares:e.shares},on:{"add:share":e.addShare}}),e._v(" "),e.loading?e._e():t("SharingLinkList",{ref:"linkShareList",attrs:{"can-reshare":e.canReshare,"file-info":e.fileInfo,shares:e.linkShares}}),e._v(" "),e.loading?e._e():t("SharingList",{ref:"shareList",attrs:{shares:e.shares,"file-info":e.fileInfo}}),e._v(" "),e.canReshare&&!e.loading?t("SharingInherited",{attrs:{"file-info":e.fileInfo}}):e._e(),e._v(" "),t("SharingEntryInternal",{attrs:{"file-info":e.fileInfo}}),e._v(" "),e.projectsEnabled&&e.fileInfo?t("CollectionList",{attrs:{id:"".concat(e.fileInfo.id),type:"file",name:e.fileInfo.name}}):e._e()],1),e._v(" "),e._l(e.sections,(function(n,r){return t("div",{key:r,ref:"section-"+r,refInFor:!0,staticClass:"sharingTab__additionalContent"},[t(n(e.$refs["section-"+r],e.fileInfo),{tag:"component",attrs:{"file-info":e.fileInfo}})],1)}))],2)}),[],!1,null,"56c61b11",null).exports,Jt=r(25108);function Xt(e){return Xt="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},Xt(e)}function en(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,tn(r.key),r)}}function tn(e){var t=function(e,t){if("object"!==Xt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!==Xt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===Xt(t)?t:String(t)}var nn=function(){function e(){var t,n,r;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),t=this,r=void 0,(n=tn(n="_state"))in t?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r,this._state={},this._state.results=[],Jt.debug("OCA.Sharing.ShareSearch initialized")}var t,n;return t=e,(n=[{key:"state",get:function(){return this._state}},{key:"addNewResult",value:function(e){return""!==e.displayName.trim()&&"function"==typeof e.handler?(this._state.results.push(e),!0):(Jt.error("Invalid search result provided",e),!1)}}])&&en(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),e}(),rn=r(25108);function an(e){return an="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},an(e)}function sn(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,on(r.key),r)}}function on(e){var t=function(e,t){if("object"!==an(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!==an(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===an(t)?t:String(t)}var cn=function(){function e(){var t,n,r;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),t=this,r=void 0,(n=on(n="_state"))in t?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r,this._state={},this._state.actions=[],rn.debug("OCA.Sharing.ExternalLinkActions initialized")}var t,n;return t=e,(n=[{key:"state",get:function(){return this._state}},{key:"registerAction",value:function(e){return rn.warn("OCA.Sharing.ExternalLinkActions is deprecated, use OCA.Sharing.ExternalShareAction instead"),"object"===an(e)&&e.icon&&e.name&&e.url?(this._state.actions.push(e),!0):(rn.error("Invalid action provided",e),!1)}}])&&sn(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),e}(),ln=r(25108);function un(e){return un="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},un(e)}function hn(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,dn(r.key),r)}}function dn(e){var t=function(e,t){if("object"!==un(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!==un(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===un(t)?t:String(t)}var fn=function(){function e(){var t,n,r;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),t=this,r=void 0,(n=dn(n="_state"))in t?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r,this._state={},this._state.actions=[],ln.debug("OCA.Sharing.ExternalShareActions initialized")}var t,n;return t=e,(n=[{key:"state",get:function(){return this._state}},{key:"registerAction",value:function(e){return"object"===un(e)&&"string"==typeof e.id&&"function"==typeof e.data&&Array.isArray(e.shareType)&&"object"===un(e.handlers)&&Object.values(e.handlers).every((function(e){return"function"==typeof e}))?this._state.actions.findIndex((function(t){return t.id===e.id}))>-1?(ln.error("An action with the same id ".concat(e.id," already exists"),e),!1):(this._state.actions.push(e),!0):(ln.error("Invalid action provided",e),!1)}}])&&hn(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();function pn(e){return pn="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},pn(e)}function gn(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,mn(r.key),r)}}function mn(e){var t=function(e,t){if("object"!==pn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!==pn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===pn(t)?t:String(t)}var vn=function(){function e(){var t,n,r;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),t=this,r=void 0,(n=mn(n="_sections"))in t?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r,this._sections=[]}var t,n;return t=e,(n=[{key:"registerSection",value:function(e){this._sections.push(e)}},{key:"getSections",value:function(){return this._sections}}])&&gn(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),e}(),yn=r(44582);function _n(e,t,n,r,i,a,s){try{var o=e[a](s),c=o.value}catch(e){return void n(e)}o.done?t(c):Promise.resolve(c).then(r,i)}window.OCA.Sharing||(window.OCA.Sharing={}),Object.assign(window.OCA.Sharing,{ShareSearch:new nn}),Object.assign(window.OCA.Sharing,{ExternalLinkActions:new cn}),Object.assign(window.OCA.Sharing,{ExternalShareActions:new fn}),Object.assign(window.OCA.Sharing,{ShareTabSections:new vn}),i.ZP.prototype.t=a.Iu,i.ZP.prototype.n=a.uN;var An=i.ZP.extend(zt),bn=null;window.addEventListener("DOMContentLoaded",(function(){OCA.Files&&OCA.Files.Sidebar&&OCA.Files.Sidebar.registerTab(new OCA.Files.Sidebar.Tab({id:"sharing",name:(0,a.Iu)("files_sharing","Sharing"),iconSvg:yn,mount:function(e,t,n){return(r=regeneratorRuntime.mark((function r(){return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return bn&&bn.$destroy(),bn=new An({parent:n}),r.next=4,bn.update(t);case 4:bn.$mount(e);case 5:case"end":return r.stop()}}),r)})),function(){var e=this,t=arguments;return new Promise((function(n,i){var a=r.apply(e,t);function s(e){_n(a,n,i,s,o,"next",e)}function o(e){_n(a,n,i,s,o,"throw",e)}s(void 0)}))})();var r},update:function(e){bn.update(e)},destroy:function(){bn.$destroy(),bn=null}}))}))},73286:function(e,t,n){var r=n(87537),i=n.n(r),a=n(23645),s=n.n(a)()(i());s.push([e.id,".error[data-v-5e957d09] .action-checkbox__label:before{border:1px solid var(--color-error)}","",{version:3,sources:["webpack://./apps/files_sharing/src/components/SharePermissionsEditor.vue"],names:[],mappings:"AAEC,uDACC,mCAAA",sourcesContent:["\n.error {\n\t::v-deep .action-checkbox__label:before {\n\t\tborder: 1px solid var(--color-error);\n\t}\n}\n"],sourceRoot:""}]),t.Z=s},24196:function(e,t,n){var r=n(87537),i=n.n(r),a=n(23645),s=n.n(a)()(i());s.push([e.id,".sharing-entry[data-v-13a6a5f0]{display:flex;align-items:center;height:44px}.sharing-entry__desc[data-v-13a6a5f0]{display:flex;flex-direction:column;justify-content:space-between;padding:8px;line-height:1.2em}.sharing-entry__desc p[data-v-13a6a5f0]{color:var(--color-text-maxcontrast)}.sharing-entry__desc-unique[data-v-13a6a5f0]{color:var(--color-text-maxcontrast)}.sharing-entry__actions[data-v-13a6a5f0]{margin-left:auto}","",{version:3,sources:["webpack://./apps/files_sharing/src/components/SharingEntry.vue"],names:[],mappings:"AACA,gCACC,YAAA,CACA,kBAAA,CACA,WAAA,CACA,sCACC,YAAA,CACA,qBAAA,CACA,6BAAA,CACA,WAAA,CACA,iBAAA,CACA,wCACC,mCAAA,CAED,6CACC,mCAAA,CAGF,yCACC,gBAAA",sourcesContent:["\n.sharing-entry {\n\tdisplay: flex;\n\talign-items: center;\n\theight: 44px;\n\t&__desc {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tjustify-content: space-between;\n\t\tpadding: 8px;\n\t\tline-height: 1.2em;\n\t\tp {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t\t&-unique {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n\t&__actions {\n\t\tmargin-left: auto;\n\t}\n}\n"],sourceRoot:""}]),t.Z=s},24147:function(e,t,n){var r=n(87537),i=n.n(r),a=n(23645),s=n.n(a)()(i());s.push([e.id,".sharing-entry[data-v-23251e4a]{display:flex;align-items:center;height:44px}.sharing-entry__desc[data-v-23251e4a]{display:flex;flex-direction:column;justify-content:space-between;padding:8px;line-height:1.2em}.sharing-entry__desc p[data-v-23251e4a]{color:var(--color-text-maxcontrast)}.sharing-entry__actions[data-v-23251e4a]{margin-left:auto}","",{version:3,sources:["webpack://./apps/files_sharing/src/components/SharingEntryInherited.vue"],names:[],mappings:"AACA,gCACC,YAAA,CACA,kBAAA,CACA,WAAA,CACA,sCACC,YAAA,CACA,qBAAA,CACA,6BAAA,CACA,WAAA,CACA,iBAAA,CACA,wCACC,mCAAA,CAGF,yCACC,gBAAA",sourcesContent:["\n.sharing-entry {\n\tdisplay: flex;\n\talign-items: center;\n\theight: 44px;\n\t&__desc {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tjustify-content: space-between;\n\t\tpadding: 8px;\n\t\tline-height: 1.2em;\n\t\tp {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n\t&__actions {\n\t\tmargin-left: auto;\n\t}\n}\n"],sourceRoot:""}]),t.Z=s},66828:function(e,t,n){var r=n(87537),i=n.n(r),a=n(23645),s=n.n(a)()(i());s.push([e.id,".sharing-entry__internal .avatar-external[data-v-69e43ddc]{width:32px;height:32px;line-height:32px;font-size:18px;background-color:var(--color-text-maxcontrast);border-radius:50%;flex-shrink:0}.sharing-entry__internal .icon-checkmark-color[data-v-69e43ddc]{opacity:1}","",{version:3,sources:["webpack://./apps/files_sharing/src/components/SharingEntryInternal.vue"],names:[],mappings:"AAEC,2DACC,UAAA,CACA,WAAA,CACA,gBAAA,CACA,cAAA,CACA,8CAAA,CACA,iBAAA,CACA,aAAA,CAED,gEACC,SAAA",sourcesContent:["\n.sharing-entry__internal {\n\t.avatar-external {\n\t\twidth: 32px;\n\t\theight: 32px;\n\t\tline-height: 32px;\n\t\tfont-size: 18px;\n\t\tbackground-color: var(--color-text-maxcontrast);\n\t\tborder-radius: 50%;\n\t\tflex-shrink: 0;\n\t}\n\t.icon-checkmark-color {\n\t\topacity: 1;\n\t}\n}\n"],sourceRoot:""}]),t.Z=s},14113:function(e,t,n){var r=n(87537),i=n.n(r),a=n(23645),s=n.n(a)()(i());s.push([e.id,".sharing-entry[data-v-10855e60]{display:flex;align-items:center;min-height:44px}.sharing-entry__desc[data-v-10855e60]{display:flex;flex-direction:column;justify-content:space-between;padding:8px;line-height:1.2em;overflow:hidden}.sharing-entry__desc p[data-v-10855e60]{color:var(--color-text-maxcontrast)}.sharing-entry__title[data-v-10855e60]{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.sharing-entry:not(.sharing-entry--share) .sharing-entry__actions .new-share-link[data-v-10855e60]{border-top:1px solid var(--color-border)}.sharing-entry[data-v-10855e60] .avatar-link-share{background-color:var(--color-primary)}.sharing-entry .sharing-entry__action--public-upload[data-v-10855e60]{border-bottom:1px solid var(--color-border)}.sharing-entry__loading[data-v-10855e60]{width:44px;height:44px;margin:0;padding:14px;margin-left:auto}.sharing-entry .action-item[data-v-10855e60]{margin-left:auto}.sharing-entry .action-item~.action-item[data-v-10855e60],.sharing-entry .action-item~.sharing-entry__loading[data-v-10855e60]{margin-left:0}.sharing-entry .icon-checkmark-color[data-v-10855e60]{opacity:1}","",{version:3,sources:["webpack://./apps/files_sharing/src/components/SharingEntryLink.vue"],names:[],mappings:"AACA,gCACC,YAAA,CACA,kBAAA,CACA,eAAA,CACA,sCACC,YAAA,CACA,qBAAA,CACA,6BAAA,CACA,WAAA,CACA,iBAAA,CACA,eAAA,CAEA,wCACC,mCAAA,CAGF,uCACC,sBAAA,CACA,eAAA,CACA,kBAAA,CAIA,mGACC,wCAAA,CAIF,mDACC,qCAAA,CAGD,sEACC,2CAAA,CAGD,yCACC,UAAA,CACA,WAAA,CACA,QAAA,CACA,YAAA,CACA,gBAAA,CAKD,6CACC,gBAAA,CACA,+HAEC,aAAA,CAIF,sDACC,SAAA",sourcesContent:["\n.sharing-entry {\n\tdisplay: flex;\n\talign-items: center;\n\tmin-height: 44px;\n\t&__desc {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tjustify-content: space-between;\n\t\tpadding: 8px;\n\t\tline-height: 1.2em;\n\t\toverflow: hidden;\n\n\t\tp {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n\t&__title {\n\t\ttext-overflow: ellipsis;\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t}\n\n\t&:not(.sharing-entry--share) &__actions {\n\t\t.new-share-link {\n\t\t\tborder-top: 1px solid var(--color-border);\n\t\t}\n\t}\n\n\t::v-deep .avatar-link-share {\n\t\tbackground-color: var(--color-primary);\n\t}\n\n\t.sharing-entry__action--public-upload {\n\t\tborder-bottom: 1px solid var(--color-border);\n\t}\n\n\t&__loading {\n\t\twidth: 44px;\n\t\theight: 44px;\n\t\tmargin: 0;\n\t\tpadding: 14px;\n\t\tmargin-left: auto;\n\t}\n\n\t// put menus to the left\n\t// but only the first one\n\t.action-item {\n\t\tmargin-left: auto;\n\t\t~ .action-item,\n\t\t~ .sharing-entry__loading {\n\t\t\tmargin-left: 0;\n\t\t}\n\t}\n\n\t.icon-checkmark-color {\n\t\topacity: 1;\n\t}\n}\n"],sourceRoot:""}]),t.Z=s},3335:function(e,t,n){var r=n(87537),i=n.n(r),a=n(23645),s=n.n(a)()(i());s.push([e.id,".sharing-entry[data-v-9fd256bc]{display:flex;align-items:center;min-height:44px}.sharing-entry__desc[data-v-9fd256bc]{padding:8px;line-height:1.2em;position:relative;flex:1 1;min-width:0}.sharing-entry__desc p[data-v-9fd256bc]{color:var(--color-text-maxcontrast)}.sharing-entry__title[data-v-9fd256bc]{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;max-width:inherit}.sharing-entry__actions[data-v-9fd256bc]{margin-left:auto !important}","",{version:3,sources:["webpack://./apps/files_sharing/src/components/SharingEntrySimple.vue"],names:[],mappings:"AACA,gCACC,YAAA,CACA,kBAAA,CACA,eAAA,CACA,sCACC,WAAA,CACA,iBAAA,CACA,iBAAA,CACA,QAAA,CACA,WAAA,CACA,wCACC,mCAAA,CAGF,uCACC,kBAAA,CACA,sBAAA,CACA,eAAA,CACA,iBAAA,CAED,yCACC,2BAAA",sourcesContent:["\n.sharing-entry {\n\tdisplay: flex;\n\talign-items: center;\n\tmin-height: 44px;\n\t&__desc {\n\t\tpadding: 8px;\n\t\tline-height: 1.2em;\n\t\tposition: relative;\n\t\tflex: 1 1;\n\t\tmin-width: 0;\n\t\tp {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n\t&__title {\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\toverflow: hidden;\n\t\tmax-width: inherit;\n\t}\n\t&__actions {\n\t\tmargin-left: auto !important;\n\t}\n}\n"],sourceRoot:""}]),t.Z=s},49082:function(e,t,n){var r=n(87537),i=n.n(r),a=n(23645),s=n.n(a)()(i());s.push([e.id,".sharing-search{display:flex;flex-direction:column;margin-bottom:4px}.sharing-search label[for=sharing-search-input]{margin-bottom:2px}.sharing-search__input{width:100%;margin:10px 0}.vs__dropdown-menu span[lookup] .avatardiv{background-image:var(--icon-search-white);background-repeat:no-repeat;background-position:center;background-color:var(--color-text-maxcontrast) !important}.vs__dropdown-menu span[lookup] .avatardiv div{display:none}","",{version:3,sources:["webpack://./apps/files_sharing/src/components/SharingInput.vue"],names:[],mappings:"AACA,gBACC,YAAA,CACA,qBAAA,CACA,iBAAA,CAEA,gDACC,iBAAA,CAGD,uBACC,UAAA,CACA,aAAA,CAOA,2CACC,yCAAA,CACA,2BAAA,CACA,0BAAA,CACA,yDAAA,CACA,+CACC,YAAA",sourcesContent:['\n.sharing-search {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin-bottom: 4px;\n\n\tlabel[for="sharing-search-input"] {\n\t\tmargin-bottom: 2px;\n\t}\n\n\t&__input {\n\t\twidth: 100%;\n\t\tmargin: 10px 0;\n\t}\n}\n\n.vs__dropdown-menu {\n\t// properly style the lookup entry\n\tspan[lookup] {\n\t\t.avatardiv {\n\t\t\tbackground-image: var(--icon-search-white);\n\t\t\tbackground-repeat: no-repeat;\n\t\t\tbackground-position: center;\n\t\t\tbackground-color: var(--color-text-maxcontrast) !important;\n\t\t\tdiv {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\t}\n}\n'],sourceRoot:""}]),t.Z=s},16843:function(e,t,n){var r=n(87537),i=n.n(r),a=n(23645),s=n.n(a)()(i());s.push([e.id,".sharing-entry__inherited .avatar-shared[data-v-3462b966]{width:32px;height:32px;line-height:32px;font-size:18px;background-color:var(--color-text-maxcontrast);border-radius:50%;flex-shrink:0}","",{version:3,sources:["webpack://./apps/files_sharing/src/views/SharingInherited.vue"],names:[],mappings:"AAEC,0DACC,UAAA,CACA,WAAA,CACA,gBAAA,CACA,cAAA,CACA,8CAAA,CACA,iBAAA,CACA,aAAA",sourcesContent:["\n.sharing-entry__inherited {\n\t.avatar-shared {\n\t\twidth: 32px;\n\t\theight: 32px;\n\t\tline-height: 32px;\n\t\tfont-size: 18px;\n\t\tbackground-color: var(--color-text-maxcontrast);\n\t\tborder-radius: 50%;\n\t\tflex-shrink: 0;\n\t}\n}\n"],sourceRoot:""}]),t.Z=s},64727:function(e,t,n){var r=n(87537),i=n.n(r),a=n(23645),s=n.n(a)()(i());s.push([e.id,".emptyContentWithSections[data-v-56c61b11]{margin:1rem auto}.sharingTab__content[data-v-56c61b11]{padding:0 6px}.sharingTab__additionalContent[data-v-56c61b11]{margin:44px 0}","",{version:3,sources:["webpack://./apps/files_sharing/src/views/SharingTab.vue"],names:[],mappings:"AACA,2CACC,gBAAA,CAIA,sCACC,aAAA,CAED,gDACC,aAAA",sourcesContent:["\n.emptyContentWithSections {\n\tmargin: 1rem auto;\n}\n\n.sharingTab {\n\t&__content {\n\t\tpadding: 0 6px;\n\t}\n\t&__additionalContent {\n\t\tmargin: 44px 0;\n\t}\n}\n"],sourceRoot:""}]),t.Z=s}},r={};function i(e){var t=r[e];if(void 0!==t)return t.exports;var a=r[e]={id:e,loaded:!1,exports:{}};return n[e].call(a.exports,a,a.exports,i),a.loaded=!0,a.exports}i.m=n,e=[],i.O=function(t,n,r,a){if(!n){var s=1/0;for(u=0;u<e.length;u++){n=e[u][0],r=e[u][1],a=e[u][2];for(var o=!0,c=0;c<n.length;c++)(!1&a||s>=a)&&Object.keys(i.O).every((function(e){return i.O[e](n[c])}))?n.splice(c--,1):(o=!1,a<s&&(s=a));if(o){e.splice(u--,1);var l=r();void 0!==l&&(t=l)}}return t}a=a||0;for(var u=e.length;u>0&&e[u-1][2]>a;u--)e[u]=e[u-1];e[u]=[n,r,a]},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,{a:t}),t},i.d=function(e,t){for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e},i.j=7870,function(){i.b=document.baseURI||self.location.href;var e={7870:0};i.O.j=function(t){return 0===e[t]};var t=function(t,n){var r,a,s=n[0],o=n[1],c=n[2],l=0;if(s.some((function(t){return 0!==e[t]}))){for(r in o)i.o(o,r)&&(i.m[r]=o[r]);if(c)var u=c(i)}for(t&&t(n);l<s.length;l++)a=s[l],i.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return i.O(u)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))}(),i.nc=void 0;var a=i.O(void 0,[7874],(function(){return i(26790)}));a=i.O(a)}(); -//# sourceMappingURL=files_sharing-files_sharing_tab.js.map?v=7f2811313e1689cae10c
\ No newline at end of file +!function(){"use strict";var e,n={36345:function(e,n,r){var i=r(20144),a=r(31352),s=r(1794),o=r(79753),c=r(75925),l=r.n(c),u=r(4820),h=r(79954);function d(e){return d="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},d(e)}function f(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,(void 0,i=function(e,t){if("object"!==d(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!==d(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(r.key),"symbol"===d(i)?i:String(i)),r)}var i}var p=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e)}var t,n;return t=e,(n=[{key:"isPublicUploadEnabled",get:function(){return document.getElementsByClassName("files-filestable")[0]&&"yes"===document.getElementsByClassName("files-filestable")[0].dataset.allowPublicUpload}},{key:"isShareWithLinkAllowed",get:function(){return document.getElementById("allowShareWithLink")&&"yes"===document.getElementById("allowShareWithLink").value}},{key:"federatedShareDocLink",get:function(){return OC.appConfig.core.federatedCloudShareDoc}},{key:"defaultExpirationDate",get:function(){return this.isDefaultExpireDateEnabled?new Date((new Date).setDate((new Date).getDate()+this.defaultExpireDate)):null}},{key:"defaultInternalExpirationDate",get:function(){return this.isDefaultInternalExpireDateEnabled?new Date((new Date).setDate((new Date).getDate()+this.defaultInternalExpireDate)):null}},{key:"defaultRemoteExpirationDateString",get:function(){return this.isDefaultRemoteExpireDateEnabled?new Date((new Date).setDate((new Date).getDate()+this.defaultRemoteExpireDate)):null}},{key:"enforcePasswordForPublicLink",get:function(){return!0===OC.appConfig.core.enforcePasswordForPublicLink}},{key:"enableLinkPasswordByDefault",get:function(){return!0===OC.appConfig.core.enableLinkPasswordByDefault}},{key:"isDefaultExpireDateEnforced",get:function(){return!0===OC.appConfig.core.defaultExpireDateEnforced}},{key:"isDefaultExpireDateEnabled",get:function(){return!0===OC.appConfig.core.defaultExpireDateEnabled}},{key:"isDefaultInternalExpireDateEnforced",get:function(){return!0===OC.appConfig.core.defaultInternalExpireDateEnforced}},{key:"isDefaultRemoteExpireDateEnforced",get:function(){return!0===OC.appConfig.core.defaultRemoteExpireDateEnforced}},{key:"isDefaultInternalExpireDateEnabled",get:function(){return!0===OC.appConfig.core.defaultInternalExpireDateEnabled}},{key:"isDefaultRemoteExpireDateEnabled",get:function(){return!0===OC.appConfig.core.defaultRemoteExpireDateEnabled}},{key:"isRemoteShareAllowed",get:function(){return!0===OC.appConfig.core.remoteShareAllowed}},{key:"isMailShareAllowed",get:function(){var e,t,n,r=OC.getCapabilities();return void 0!==(null==r||null===(e=r.files_sharing)||void 0===e?void 0:e.sharebymail)&&!0===(null==r||null===(t=r.files_sharing)||void 0===t||null===(n=t.public)||void 0===n?void 0:n.enabled)}},{key:"defaultExpireDate",get:function(){return OC.appConfig.core.defaultExpireDate}},{key:"defaultInternalExpireDate",get:function(){return OC.appConfig.core.defaultInternalExpireDate}},{key:"defaultRemoteExpireDate",get:function(){return OC.appConfig.core.defaultRemoteExpireDate}},{key:"isResharingAllowed",get:function(){return!0===OC.appConfig.core.resharingAllowed}},{key:"isPasswordForMailSharesRequired",get:function(){return void 0!==OC.getCapabilities().files_sharing.sharebymail&&OC.getCapabilities().files_sharing.sharebymail.password.enforced}},{key:"shouldAlwaysShowUnique",get:function(){var e,t;return!0===(null===(e=OC.getCapabilities().files_sharing)||void 0===e||null===(t=e.sharee)||void 0===t?void 0:t.always_show_unique)}},{key:"allowGroupSharing",get:function(){return!0===OC.appConfig.core.allowGroupSharing}},{key:"maxAutocompleteResults",get:function(){return parseInt(OC.config["sharing.maxAutocompleteResults"],10)||25}},{key:"minSearchStringLength",get:function(){return parseInt(OC.config["sharing.minSearchStringLength"],10)||0}},{key:"passwordPolicy",get:function(){var e=OC.getCapabilities();return e.password_policy?e.password_policy:{}}}])&&f(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),e}(),g=r(41922),m=r(25108);function v(e){return v="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},v(e)}function y(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,_(r.key),r)}}function _(e){var t=function(e,t){if("object"!==v(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!==v(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===v(t)?t:String(t)}var A=function(){function e(t){var n,r,i,a;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),r=this,a=void 0,(i=_(i="_share"))in r?Object.defineProperty(r,i,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[i]=a,t.ocs&&t.ocs.data&&t.ocs.data[0]&&(t=t.ocs.data[0]),t.hide_download=!!t.hide_download,t.mail_send=!!t.mail_send,t.attributes)try{t.attributes=JSON.parse(t.attributes)}catch(e){m.warn('Could not parse share attributes returned by server: "'+t.attributes+'"')}t.attributes=null!==(n=t.attributes)&&void 0!==n?n:[],this._share=t}var t,n;return t=e,(n=[{key:"state",get:function(){return this._share}},{key:"id",get:function(){return this._share.id}},{key:"type",get:function(){return this._share.share_type}},{key:"permissions",get:function(){return this._share.permissions},set:function(e){this._share.permissions=e}},{key:"attributes",get:function(){return this._share.attributes}},{key:"owner",get:function(){return this._share.uid_owner}},{key:"ownerDisplayName",get:function(){return this._share.displayname_owner}},{key:"shareWith",get:function(){return this._share.share_with}},{key:"shareWithDisplayName",get:function(){return this._share.share_with_displayname||this._share.share_with}},{key:"shareWithDisplayNameUnique",get:function(){return this._share.share_with_displayname_unique||this._share.share_with}},{key:"shareWithLink",get:function(){return this._share.share_with_link}},{key:"shareWithAvatar",get:function(){return this._share.share_with_avatar}},{key:"uidFileOwner",get:function(){return this._share.uid_file_owner}},{key:"displaynameFileOwner",get:function(){return this._share.displayname_file_owner||this._share.uid_file_owner}},{key:"createdTime",get:function(){return this._share.stime}},{key:"expireDate",get:function(){return this._share.expiration},set:function(e){this._share.expiration=e}},{key:"token",get:function(){return this._share.token}},{key:"note",get:function(){return this._share.note},set:function(e){this._share.note=e}},{key:"label",get:function(){return this._share.label},set:function(e){this._share.label=e}},{key:"mailSend",get:function(){return!0===this._share.mail_send}},{key:"hideDownload",get:function(){return!0===this._share.hide_download},set:function(e){this._share.hide_download=!0===e}},{key:"password",get:function(){return this._share.password},set:function(e){this._share.password=e}},{key:"passwordExpirationTime",get:function(){return this._share.password_expiration_time},set:function(e){this._share.password_expiration_time=e}},{key:"sendPasswordByTalk",get:function(){return this._share.send_password_by_talk},set:function(e){this._share.send_password_by_talk=e}},{key:"path",get:function(){return this._share.path}},{key:"itemType",get:function(){return this._share.item_type}},{key:"mimetype",get:function(){return this._share.mimetype}},{key:"fileSource",get:function(){return this._share.file_source}},{key:"fileTarget",get:function(){return this._share.file_target}},{key:"fileParent",get:function(){return this._share.file_parent}},{key:"hasReadPermission",get:function(){return!!(this.permissions&OC.PERMISSION_READ)}},{key:"hasCreatePermission",get:function(){return!!(this.permissions&OC.PERMISSION_CREATE)}},{key:"hasDeletePermission",get:function(){return!!(this.permissions&OC.PERMISSION_DELETE)}},{key:"hasUpdatePermission",get:function(){return!!(this.permissions&OC.PERMISSION_UPDATE)}},{key:"hasSharePermission",get:function(){return!!(this.permissions&OC.PERMISSION_SHARE)}},{key:"hasDownloadPermission",get:function(){for(var e in this._share.attributes){var t=this._share.attributes[e];if("permissions"===t.scope&&"download"===t.key)return t.enabled}return!0},set:function(e){this.setAttribute("permissions","download",!!e)}},{key:"setAttribute",value:function(e,t,n){var r={scope:e,key:t,enabled:n};for(var i in this._share.attributes){var a=this._share.attributes[i];if(a.scope===r.scope&&a.key===r.key)return void(this._share.attributes[i]=r)}this._share.attributes.push(r)}},{key:"canEdit",get:function(){return!0===this._share.can_edit}},{key:"canDelete",get:function(){return!0===this._share.can_delete}},{key:"viaFileid",get:function(){return this._share.via_fileid}},{key:"viaPath",get:function(){return this._share.via_path}},{key:"parent",get:function(){return this._share.parent}},{key:"storageId",get:function(){return this._share.storage_id}},{key:"storage",get:function(){return this._share.storage}},{key:"itemSource",get:function(){return this._share.item_source}},{key:"status",get:function(){return this._share.status}}])&&y(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),e}(),b={data:function(){return{SHARE_TYPES:g.D}}},E=r(64024),w=r(76212),S=r.n(w),C=r(12945),x=r.n(C),k={name:"SharingEntrySimple",components:{NcActions:x()},props:{title:{type:String,default:"",required:!0},subtitle:{type:String,default:""},isUnique:{type:Boolean,default:!0},ariaExpanded:{type:Boolean,default:null}},computed:{ariaExpandedValue:function(){return null===this.ariaExpanded?this.ariaExpanded:this.ariaExpanded?"true":"false"}}},P=r(93379),D=r.n(P),T=r(7795),R=r.n(T),N=r(90569),O=r.n(N),I=r(3565),L=r.n(I),H=r(19216),Y=r.n(H),U=r(44589),j=r.n(U),M=r(3335),B={};B.styleTagTransform=j(),B.setAttributes=L(),B.insert=O().bind(null,"head"),B.domAPI=R(),B.insertStyleElement=Y(),D()(M.Z,B),M.Z&&M.Z.locals&&M.Z.locals;var W=r(51900),F=(0,W.Z)(k,(function(){var e=this,t=e._self._c;return t("li",{staticClass:"sharing-entry"},[e._t("avatar"),e._v(" "),t("div",{staticClass:"sharing-entry__desc"},[t("span",{staticClass:"sharing-entry__title"},[e._v(e._s(e.title))]),e._v(" "),e.subtitle?t("p",[e._v("\n\t\t\t"+e._s(e.subtitle)+"\n\t\t")]):e._e()]),e._v(" "),e.$slots.default?t("NcActions",{ref:"actionsComponent",staticClass:"sharing-entry__actions",attrs:{"menu-align":"right","aria-expanded":e.ariaExpandedValue}},[e._t("default")],2):e._e()],2)}),[],!1,null,"9fd256bc",null).exports,q=r(25108);function Z(e,t,n,r,i,a,s){try{var o=e[a](s),c=o.value}catch(e){return void n(e)}o.done?t(c):Promise.resolve(c).then(r,i)}var $={name:"SharingEntryInternal",components:{NcActionLink:S(),SharingEntrySimple:F},props:{fileInfo:{type:Object,default:function(){},required:!0}},data:function(){return{copied:!1,copySuccess:!1}},computed:{internalLink:function(){return window.location.protocol+"//"+window.location.host+(0,o.generateUrl)("/f/")+this.fileInfo.id},copyLinkTooltip:function(){return this.copied?this.copySuccess?"":t("files_sharing","Cannot copy, please copy the link manually"):t("files_sharing","Copy internal link to clipboard")},internalLinkSubtitle:function(){return"dir"===this.fileInfo.type?t("files_sharing","Only works for users with access to this folder"):t("files_sharing","Only works for users with access to this file")}},methods:{copyLink:function(){var e,n=this;return(e=regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,navigator.clipboard.writeText(n.internalLink);case 3:(0,E.s$)(t("files_sharing","Link copied")),n.$refs.shareEntrySimple.$refs.actionsComponent.$el.focus(),n.copySuccess=!0,n.copied=!0,e.next=14;break;case 9:e.prev=9,e.t0=e.catch(0),n.copySuccess=!1,n.copied=!0,q.error(e.t0);case 14:return e.prev=14,setTimeout((function(){n.copySuccess=!1,n.copied=!1}),4e3),e.finish(14);case 17:case"end":return e.stop()}}),e,null,[[0,9,14,17]])})),function(){var t=this,n=arguments;return new Promise((function(r,i){var a=e.apply(t,n);function s(e){Z(a,r,i,s,o,"next",e)}function o(e){Z(a,r,i,s,o,"throw",e)}s(void 0)}))})()}}},G=$,V=r(66828),K={};K.styleTagTransform=j(),K.setAttributes=L(),K.insert=O().bind(null,"head"),K.domAPI=R(),K.insertStyleElement=Y(),D()(V.Z,K),V.Z&&V.Z.locals&&V.Z.locals;var Q=(0,W.Z)(G,(function(){var e=this,t=e._self._c;return t("ul",[t("SharingEntrySimple",{ref:"shareEntrySimple",staticClass:"sharing-entry__internal",attrs:{title:e.t("files_sharing","Internal link"),subtitle:e.internalLinkSubtitle},scopedSlots:e._u([{key:"avatar",fn:function(){return[t("div",{staticClass:"avatar-external icon-external-white"})]},proxy:!0}])},[e._v(" "),t("NcActionLink",{attrs:{href:e.internalLink,"aria-label":e.copyLinkTooltip,title:e.copyLinkTooltip,target:"_blank",icon:e.copied&&e.copySuccess?"icon-checkmark-color":"icon-clippy"},on:{click:function(t){return t.preventDefault(),e.copyLink.apply(null,arguments)}}})],1)],1)}),[],!1,null,"69e43ddc",null),z=Q.exports,J=r(45994),X=r(78595),ee=r(20296),te=r.n(ee),ne=r(36456),re=r.n(ne),ie=r(25108);function ae(e,t,n,r,i,a,s){try{var o=e[a](s),c=o.value}catch(e){return void n(e)}o.done?t(c):Promise.resolve(c).then(r,i)}var se=new p,oe="abcdefgijkmnopqrstwxyzABCDEFGHJKLMNPQRSTWXYZ23456789";function ce(){return le.apply(this,arguments)}function le(){var e;return e=regeneratorRuntime.mark((function e(){var n,r,i,a,s;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!se.passwordPolicy.api||!se.passwordPolicy.api.generate){e.next=14;break}return e.prev=1,e.next=4,u.default.get(se.passwordPolicy.api.generate);case 4:if(!(n=e.sent).data.ocs.data.password){e.next=8;break}return(0,E.s$)(t("files_sharing","Password created successfully")),e.abrupt("return",n.data.ocs.data.password);case 8:e.next=14;break;case 10:e.prev=10,e.t0=e.catch(1),ie.info("Error generating password from password_policy",e.t0),(0,E.x2)(t("files_sharing","Error generating password from password policy"));case 14:for(r=new Uint8Array(10),i=oe.length/255,self.crypto.getRandomValues(r),a="",s=0;s<r.length;s++)a+=oe.charAt(r[s]*i);return e.abrupt("return",a);case 20:case"end":return e.stop()}}),e,null,[[1,10]])})),le=function(){var t=this,n=arguments;return new Promise((function(r,i){var a=e.apply(t,n);function s(e){ae(a,r,i,s,o,"next",e)}function o(e){ae(a,r,i,s,o,"throw",e)}s(void 0)}))},le.apply(this,arguments)}r(35449);var ue=r(25108);function he(e,t,n,r,i,a,s){try{var o=e[a](s),c=o.value}catch(e){return void n(e)}o.done?t(c):Promise.resolve(c).then(r,i)}function de(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var a=e.apply(t,n);function s(e){he(a,r,i,s,o,"next",e)}function o(e){he(a,r,i,s,o,"throw",e)}s(void 0)}))}}var fe=(0,o.generateOcsUrl)("apps/files_sharing/api/v1/shares"),pe={methods:{createShare:function(e){return de(regeneratorRuntime.mark((function n(){var r,i,a,s,o,c,l,h,d,f,p,g,m,v,y,_,b,E;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return r=e.path,i=e.permissions,a=e.shareType,s=e.shareWith,o=e.publicUpload,c=e.password,l=e.sendPasswordByTalk,h=e.expireDate,d=e.label,f=e.attributes,n.prev=1,n.next=4,u.default.post(fe,{path:r,permissions:i,shareType:a,shareWith:s,publicUpload:o,password:c,sendPasswordByTalk:l,expireDate:h,label:d,attributes:f});case 4:if(null!=(g=n.sent)&&null!==(p=g.data)&&void 0!==p&&p.ocs){n.next=7;break}throw g;case 7:return m=new A(g.data.ocs.data),(0,X.j8)("files_sharing:share:created",{share:m}),n.abrupt("return",m);case 12:throw n.prev=12,n.t0=n.catch(1),ue.error("Error while creating share",n.t0),E=null===n.t0||void 0===n.t0||null===(v=n.t0.response)||void 0===v||null===(y=v.data)||void 0===y||null===(_=y.ocs)||void 0===_||null===(b=_.meta)||void 0===b?void 0:b.message,OC.Notification.showTemporary(E?t("files_sharing","Error creating the share: {errorMessage}",{errorMessage:E}):t("files_sharing","Error creating the share"),{type:"error"}),n.t0;case 18:case"end":return n.stop()}}),n,null,[[1,12]])})))()},deleteShare:function(e){return de(regeneratorRuntime.mark((function n(){var r,i,a,s,o,c,l;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,n.next=3,u.default.delete(fe+"/".concat(e));case 3:if(null!=(i=n.sent)&&null!==(r=i.data)&&void 0!==r&&r.ocs){n.next=6;break}throw i;case 6:return(0,X.j8)("files_sharing:share:deleted",{id:e}),n.abrupt("return",!0);case 10:throw n.prev=10,n.t0=n.catch(0),ue.error("Error while deleting share",n.t0),l=null===n.t0||void 0===n.t0||null===(a=n.t0.response)||void 0===a||null===(s=a.data)||void 0===s||null===(o=s.ocs)||void 0===o||null===(c=o.meta)||void 0===c?void 0:c.message,OC.Notification.showTemporary(l?t("files_sharing","Error deleting the share: {errorMessage}",{errorMessage:l}):t("files_sharing","Error deleting the share"),{type:"error"}),n.t0;case 16:case"end":return n.stop()}}),n,null,[[0,10]])})))()},updateShare:function(e,n){return de(regeneratorRuntime.mark((function r(){var i,a,s,o,c,l,h,d;return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.prev=0,r.next=3,u.default.put(fe+"/".concat(e),n);case 3:if(a=r.sent,(0,X.j8)("files_sharing:share:updated",{id:e}),null!=a&&null!==(i=a.data)&&void 0!==i&&i.ocs){r.next=9;break}throw a;case 9:return r.abrupt("return",a.data.ocs.data);case 10:r.next=18;break;case 12:throw r.prev=12,r.t0=r.catch(0),ue.error("Error while updating share",r.t0),400!==r.t0.response.status&&(h=null===r.t0||void 0===r.t0||null===(s=r.t0.response)||void 0===s||null===(o=s.data)||void 0===o||null===(c=o.ocs)||void 0===c||null===(l=c.meta)||void 0===l?void 0:l.message,OC.Notification.showTemporary(h?t("files_sharing","Error updating the share: {errorMessage}",{errorMessage:h}):t("files_sharing","Error updating the share"),{type:"error"})),d=r.t0.response.data.ocs.meta.message,new Error(d);case 18:case"end":return r.stop()}}),r,null,[[0,12]])})))()}}},ge=r(25108);function me(e){return me="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},me(e)}function ve(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function ye(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ve(Object(n),!0).forEach((function(t){_e(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ve(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function _e(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==me(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!==me(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===me(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ae(e,t,n,r,i,a,s){try{var o=e[a](s),c=o.value}catch(e){return void n(e)}o.done?t(c):Promise.resolve(c).then(r,i)}function be(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var a=e.apply(t,n);function s(e){Ae(a,r,i,s,o,"next",e)}function o(e){Ae(a,r,i,s,o,"throw",e)}s(void 0)}))}}var Ee={name:"SharingInput",components:{NcSelect:re()},mixins:[b,pe],props:{shares:{type:Array,default:function(){return[]},required:!0},linkShares:{type:Array,default:function(){return[]},required:!0},fileInfo:{type:Object,default:function(){},required:!0},reshare:{type:A,default:null},canReshare:{type:Boolean,required:!0}},data:function(){return{config:new p,loading:!1,query:"",recommendations:[],ShareSearch:OCA.Sharing.ShareSearch.state,suggestions:[],value:null}},computed:{externalResults:function(){return this.ShareSearch.results},inputPlaceholder:function(){var e=this.config.isRemoteShareAllowed;return this.canReshare?e?t("files_sharing","Name, email, or Federated Cloud ID …"):t("files_sharing","Name or email …"):t("files_sharing","Resharing is not allowed")},isValidQuery:function(){return this.query&&""!==this.query.trim()&&this.query.length>this.config.minSearchStringLength},options:function(){return this.isValidQuery?this.suggestions:this.recommendations},noResultText:function(){return this.loading?t("files_sharing","Searching …"):t("files_sharing","No elements found.")}},mounted:function(){this.getRecommendations()},methods:{handleOpen:function(){(0,X.j8)("viewer:trapElements:changed",this.$refs.select.$el)},asyncFind:function(e){var t=this;return be(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(t.query=e.trim(),!t.isValidQuery){n.next=5;break}return t.loading=!0,n.next=5,t.debounceGetSuggestions(e);case 5:case"end":return n.stop()}}),n)})))()},getSuggestions:function(e){var n=arguments,r=this;return be(regeneratorRuntime.mark((function i(){var a,s,c,l,h,d,f,p,g,m,v,y,_;return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return a=n.length>1&&void 0!==n[1]&&n[1],r.loading=!0,!0===OC.getCapabilities().files_sharing.sharee.query_lookup_default&&(a=!0),s=[r.SHARE_TYPES.SHARE_TYPE_USER,r.SHARE_TYPES.SHARE_TYPE_GROUP,r.SHARE_TYPES.SHARE_TYPE_REMOTE,r.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP,r.SHARE_TYPES.SHARE_TYPE_CIRCLE,r.SHARE_TYPES.SHARE_TYPE_ROOM,r.SHARE_TYPES.SHARE_TYPE_GUEST,r.SHARE_TYPES.SHARE_TYPE_DECK,r.SHARE_TYPES.SHARE_TYPE_SCIENCEMESH],!0===OC.getCapabilities().files_sharing.public.enabled&&s.push(r.SHARE_TYPES.SHARE_TYPE_EMAIL),c=null,i.prev=6,i.next=9,u.default.get((0,o.generateOcsUrl)("apps/files_sharing/api/v1/sharees"),{params:{format:"json",itemType:"dir"===r.fileInfo.type?"folder":"file",search:e,lookup:a,perPage:r.config.maxAutocompleteResults,shareType:s}});case 9:c=i.sent,i.next=16;break;case 12:return i.prev=12,i.t0=i.catch(6),ge.error("Error fetching suggestions",i.t0),i.abrupt("return");case 16:l=c.data.ocs.data,h=c.data.ocs.data.exact,l.exact=[],d=Object.values(h).reduce((function(e,t){return e.concat(t)}),[]),f=Object.values(l).reduce((function(e,t){return e.concat(t)}),[]),p=r.filterOutExistingShares(d).map((function(e){return r.formatForMultiselect(e)})).sort((function(e,t){return e.shareType-t.shareType})),g=r.filterOutExistingShares(f).map((function(e){return r.formatForMultiselect(e)})).sort((function(e,t){return e.shareType-t.shareType})),m=[],l.lookupEnabled&&!a&&m.push({id:"global-lookup",isNoUser:!0,displayName:t("files_sharing","Search globally"),lookup:!0}),v=r.externalResults.filter((function(e){return!e.condition||e.condition(r)})),y=p.concat(g).concat(v).concat(m),_=y.reduce((function(e,t){return t.displayName?(e[t.displayName]||(e[t.displayName]=0),e[t.displayName]++,e):e}),{}),r.suggestions=y.map((function(e){return _[e.displayName]>1&&!e.desc?ye(ye({},e),{},{desc:e.shareWithDisplayNameUnique}):e})),r.loading=!1,ge.info("suggestions",r.suggestions);case 31:case"end":return i.stop()}}),i,null,[[6,12]])})))()},debounceGetSuggestions:te()((function(){this.getSuggestions.apply(this,arguments)}),300),getRecommendations:function(){var e=this;return be(regeneratorRuntime.mark((function t(){var n,r,i;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e.loading=!0,n=null,t.prev=2,t.next=5,u.default.get((0,o.generateOcsUrl)("apps/files_sharing/api/v1/sharees_recommended"),{params:{format:"json",itemType:e.fileInfo.type}});case 5:n=t.sent,t.next=12;break;case 8:return t.prev=8,t.t0=t.catch(2),ge.error("Error fetching recommendations",t.t0),t.abrupt("return");case 12:r=e.externalResults.filter((function(t){return!t.condition||t.condition(e)})),i=Object.values(n.data.ocs.data.exact).reduce((function(e,t){return e.concat(t)}),[]),e.recommendations=e.filterOutExistingShares(i).map((function(t){return e.formatForMultiselect(t)})).concat(r),e.loading=!1,ge.info("recommendations",e.recommendations);case 17:case"end":return t.stop()}}),t,null,[[2,8]])})))()},filterOutExistingShares:function(e){var t=this;return e.reduce((function(e,n){if("object"!==me(n))return e;try{if(n.value.shareType===t.SHARE_TYPES.SHARE_TYPE_USER){if(n.value.shareWith===(0,J.ts)().uid)return e;if(t.reshare&&n.value.shareWith===t.reshare.owner)return e}if(n.value.shareType===t.SHARE_TYPES.SHARE_TYPE_EMAIL){if(-1!==t.linkShares.map((function(e){return e.shareWith})).indexOf(n.value.shareWith.trim()))return e}else{var r=t.shares.reduce((function(e,t){return e[t.shareWith]=t.type,e}),{}),i=n.value.shareWith.trim();if(i in r&&r[i]===n.value.shareType)return e}e.push(n)}catch(t){return e}return e}),[])},shareTypeToIcon:function(e){switch(e){case this.SHARE_TYPES.SHARE_TYPE_GUEST:return{icon:"icon-user",iconTitle:t("files_sharing","Guest")};case this.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP:case this.SHARE_TYPES.SHARE_TYPE_GROUP:return{icon:"icon-group",iconTitle:t("files_sharing","Group")};case this.SHARE_TYPES.SHARE_TYPE_EMAIL:return{icon:"icon-mail",iconTitle:t("files_sharing","Email")};case this.SHARE_TYPES.SHARE_TYPE_CIRCLE:return{icon:"icon-circle",iconTitle:t("files_sharing","Circle")};case this.SHARE_TYPES.SHARE_TYPE_ROOM:return{icon:"icon-room",iconTitle:t("files_sharing","Talk conversation")};case this.SHARE_TYPES.SHARE_TYPE_DECK:return{icon:"icon-deck",iconTitle:t("files_sharing","Deck board")};case this.SHARE_TYPES.SHARE_TYPE_SCIENCEMESH:return{icon:"icon-sciencemesh",iconTitle:t("files_sharing","Science Mesh")};default:return{}}},formatForMultiselect:function(e){var n,r;if(e.value.shareType===this.SHARE_TYPES.SHARE_TYPE_USER&&this.config.shouldAlwaysShowUnique)n=null!==(r=e.shareWithDisplayNameUnique)&&void 0!==r?r:"";else if(e.value.shareType!==this.SHARE_TYPES.SHARE_TYPE_REMOTE&&e.value.shareType!==this.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP||!e.value.server)if(e.value.shareType===this.SHARE_TYPES.SHARE_TYPE_EMAIL)n=e.value.shareWith;else{var i;n=null!==(i=e.shareWithDescription)&&void 0!==i?i:""}else n=t("files_sharing","on {server}",{server:e.value.server});return ye({id:"".concat(e.value.shareType,"-").concat(e.value.shareWith),shareWith:e.value.shareWith,shareType:e.value.shareType,user:e.uuid||e.value.shareWith,isNoUser:e.value.shareType!==this.SHARE_TYPES.SHARE_TYPE_USER,displayName:e.name||e.label,subtitle:n,shareWithDisplayNameUnique:e.shareWithDisplayNameUnique||""},this.shareTypeToIcon(e.value.shareType))},addShare:function(e){var t=this;return be(regeneratorRuntime.mark((function n(){var r,i,a,s;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(t.value=null,!e.lookup){n.next=6;break}return n.next=4,t.getSuggestions(t.query,!0);case 4:return t.$nextTick((function(){t.$refs.select.$children[0].open=!0})),n.abrupt("return",!0);case 6:if(!e.handler){n.next=12;break}return n.next=9,e.handler(t);case 9:return r=n.sent,t.$emit("add:share",new A(r)),n.abrupt("return",!0);case 12:if(t.loading=!0,ge.debug("Adding a new share from the input for",e),n.prev=14,i=null,!t.config.enforcePasswordForPublicLink||e.shareType!==t.SHARE_TYPES.SHARE_TYPE_EMAIL){n.next=20;break}return n.next=19,ce();case 19:i=n.sent;case 20:return a=(t.fileInfo.path+"/"+t.fileInfo.name).replace("//","/"),n.next=23,t.createShare({path:a,shareType:e.shareType,shareWith:e.shareWith,password:i,permissions:t.fileInfo.sharePermissions&OC.getCapabilities().files_sharing.default_permissions,attributes:JSON.stringify(t.fileInfo.shareAttributes)});case 23:if(s=n.sent,!i){n.next=32;break}return s.newPassword=i,n.next=28,new Promise((function(e){t.$emit("add:share",s,e)}));case 28:n.sent.open=!0,n.next=33;break;case 32:t.$emit("add:share",s);case 33:return n.next=35,t.getRecommendations();case 35:n.next=42;break;case 37:n.prev=37,n.t0=n.catch(14),t.$nextTick((function(){t.$refs.select.$children[0].open=!0})),t.query=e.shareWith,ge.error("Error while adding new share",n.t0);case 42:return n.prev=42,t.loading=!1,n.finish(42);case 45:case"end":return n.stop()}}),n,null,[[14,37,42,45]])})))()}}},we=Ee,Se=r(49082),Ce={};Ce.styleTagTransform=j(),Ce.setAttributes=L(),Ce.insert=O().bind(null,"head"),Ce.domAPI=R(),Ce.insertStyleElement=Y(),D()(Se.Z,Ce),Se.Z&&Se.Z.locals&&Se.Z.locals;var xe=(0,W.Z)(we,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"sharing-search"},[t("label",{attrs:{for:"sharing-search-input"}},[e._v(e._s(e.t("files_sharing","Search for share recipients")))]),e._v(" "),t("NcSelect",{ref:"select",staticClass:"sharing-search__input",attrs:{id:"sharing-search-input",disabled:!e.canReshare,loading:e.loading,filterable:!1,placeholder:e.inputPlaceholder,"clear-search-on-blur":function(){return!1},"user-select":!0,options:e.options},on:{open:e.handleOpen,search:e.asyncFind,"option:selected":e.addShare},scopedSlots:e._u([{key:"no-options",fn:function(t){var n=t.search;return[e._v("\n\t\t\t"+e._s(n?e.noResultText:e.t("files_sharing","No recommendations. Start typing."))+"\n\t\t")]}}]),model:{value:e.value,callback:function(t){e.value=t},expression:"value"}})],1)}),[],!1,null,null,null),ke=xe.exports,Pe=r(45400),De=r.n(Pe),Te=r(65358),Re=r(1162),Ne=r.n(Re),Oe=r(25746),Ie=r(25108);function Le(e){return Le="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},Le(e)}function He(e,t,n,r,i,a,s){try{var o=e[a](s),c=o.value}catch(e){return void n(e)}o.done?t(c):Promise.resolve(c).then(r,i)}function Ye(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var a=e.apply(t,n);function s(e){He(a,r,i,s,o,"next",e)}function o(e){He(a,r,i,s,o,"throw",e)}s(void 0)}))}}var Ue={mixins:[pe,b],props:{fileInfo:{type:Object,default:function(){},required:!0},share:{type:A,default:null},isUnique:{type:Boolean,default:!0}},data:function(){var e;return{config:new p,errors:{},loading:!1,saving:!1,open:!1,updateQueue:new Oe.Z({concurrency:1}),reactiveState:null===(e=this.share)||void 0===e?void 0:e.state}},computed:{hasNote:{get:function(){return""!==this.share.note},set:function(e){this.share.note=e?null:""}},dateTomorrow:function(){return new Date((new Date).setDate((new Date).getDate()+1))},lang:function(){var e=window.dayNamesShort?window.dayNamesShort:["Sun.","Mon.","Tue.","Wed.","Thu.","Fri.","Sat."],t=window.monthNamesShort?window.monthNamesShort:["Jan.","Feb.","Mar.","Apr.","May.","Jun.","Jul.","Aug.","Sep.","Oct.","Nov.","Dec."];return{formatLocale:{firstDayOfWeek:window.firstDay?window.firstDay:0,monthsShort:t,weekdaysMin:e,weekdaysShort:e},monthFormat:"MMM"}},isShareOwner:function(){return this.share&&this.share.owner===(0,J.ts)().uid}},methods:{checkShare:function(e){return(!e.password||"string"==typeof e.password&&""!==e.password.trim())&&!(e.expirationDate&&!e.expirationDate.isValid())},parseDateString:function(e){var t;if(e)return new Date(null===(t=e.match(/([0-9]{4}-[0-9]{2}-[0-9]{2})/i))||void 0===t?void 0:t.pop())},formatDateToString:function(e){return new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate())).toISOString().split("T")[0]},onExpirationChange:function(e){this.share.expireDate=this.formatDateToString(e),this.queueUpdate("expireDate")},onExpirationDisable:function(){this.share.expireDate="",this.queueUpdate("expireDate")},onNoteChange:function(e){this.$set(this.share,"newNote",e.trim())},onNoteSubmit:function(){this.share.newNote&&(this.share.note=this.share.newNote,this.$delete(this.share,"newNote"),this.queueUpdate("note"))},onDelete:function(){var e=this;return Ye(regeneratorRuntime.mark((function n(){var r;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,e.loading=!0,e.open=!1,n.next=5,e.deleteShare(e.share.id);case 5:Ie.debug("Share deleted",e.share.id),r="file"===e.share.itemType?t("files_sharing",'File "{path}" has been unshared',{path:e.share.path}):t("files_sharing",'Folder "{path}" has been unshared',{path:e.share.path}),(0,E.s$)(r),e.$emit("remove:share",e.share),n.next=14;break;case 11:n.prev=11,n.t0=n.catch(0),e.open=!0;case 14:return n.prev=14,e.loading=!1,n.finish(14);case 17:case"end":return n.stop()}}),n,null,[[0,11,14,17]])})))()},queueUpdate:function(){for(var e=this,n=arguments.length,r=new Array(n),i=0;i<n;i++)r[i]=arguments[i];if(0!==r.length){if(this.share.id){var a={};return r.forEach((function(t){"object"===Le(e.share[t])?a[t]=JSON.stringify(e.share[t]):a[t]=e.share[t].toString()})),void this.updateQueue.add(Ye(regeneratorRuntime.mark((function n(){var i,s;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return e.saving=!0,e.errors={},n.prev=2,n.next=5,e.updateShare(e.share.id,a);case 5:i=n.sent,r.indexOf("password")>=0&&(e.$delete(e.share,"newPassword"),e.share.passwordExpirationTime=i.password_expiration_time),e.$delete(e.errors,r[0]),(0,E.s$)(t("files_sharing","Share {propertyName} saved",{propertyName:r[0]})),n.next=15;break;case 11:n.prev=11,n.t0=n.catch(2),(s=n.t0.message)&&""!==s&&(e.onSyncError(r[0],s),(0,E.x2)(t("files_sharing",s)));case 15:return n.prev=15,e.saving=!1,n.finish(15);case 18:case"end":return n.stop()}}),n,null,[[2,11,15,18]])}))))}Ie.debug("Updated local share",this.share)}},onSyncError:function(e,t){switch(this.open=!0,e){case"password":case"pending":case"expireDate":case"label":case"note":this.$set(this.errors,e,t);var n=this.$refs[e];if(n){n.$el&&(n=n.$el);var r=n.querySelector(".focusable");r&&r.focus()}break;case"sendPasswordByTalk":this.$set(this.errors,e,t),this.share.sendPasswordByTalk=!this.share.sendPasswordByTalk}},debounceQueueUpdate:te()((function(e){this.queueUpdate(e)}),500)}},je={name:"SharingEntryInherited",components:{NcActionButton:De(),NcActionLink:S(),NcActionText:Ne(),NcAvatar:l(),SharingEntrySimple:F},mixins:[Ue],props:{share:{type:A,required:!0}},computed:{viaFileTargetUrl:function(){return(0,o.generateUrl)("/f/{fileid}",{fileid:this.share.viaFileid})},viaFolderName:function(){return(0,Te.EZ)(this.share.viaPath)}}},Me=r(24147),Be={};Be.styleTagTransform=j(),Be.setAttributes=L(),Be.insert=O().bind(null,"head"),Be.domAPI=R(),Be.insertStyleElement=Y(),D()(Me.Z,Be),Me.Z&&Me.Z.locals&&Me.Z.locals;var We=(0,W.Z)(je,(function(){var e=this,t=e._self._c;return t("SharingEntrySimple",{key:e.share.id,staticClass:"sharing-entry__inherited",attrs:{title:e.share.shareWithDisplayName},scopedSlots:e._u([{key:"avatar",fn:function(){return[t("NcAvatar",{staticClass:"sharing-entry__avatar",attrs:{user:e.share.shareWith,"display-name":e.share.shareWithDisplayName}})]},proxy:!0}])},[e._v(" "),t("NcActionText",{attrs:{icon:"icon-user"}},[e._v("\n\t\t"+e._s(e.t("files_sharing","Added by {initiator}",{initiator:e.share.ownerDisplayName}))+"\n\t")]),e._v(" "),e.share.viaPath&&e.share.viaFileid?t("NcActionLink",{attrs:{icon:"icon-folder",href:e.viaFileTargetUrl}},[e._v("\n\t\t"+e._s(e.t("files_sharing","Via “{folder}”",{folder:e.viaFolderName}))+"\n\t")]):e._e(),e._v(" "),e.share.canDelete?t("NcActionButton",{attrs:{icon:"icon-close"},on:{click:function(t){return t.preventDefault(),e.onDelete.apply(null,arguments)}}},[e._v("\n\t\t"+e._s(e.t("files_sharing","Unshare"))+"\n\t")]):e._e()],1)}),[],!1,null,"23251e4a",null),Fe=We.exports,qe=r(25108);function Ze(e,t,n,r,i,a,s){try{var o=e[a](s),c=o.value}catch(e){return void n(e)}o.done?t(c):Promise.resolve(c).then(r,i)}var $e={name:"SharingInherited",components:{NcActionButton:De(),SharingEntryInherited:Fe,SharingEntrySimple:F},props:{fileInfo:{type:Object,default:function(){},required:!0}},data:function(){return{loaded:!1,loading:!1,showInheritedShares:!1,shares:[]}},computed:{showInheritedSharesIcon:function(){return this.loading?"icon-loading-small":this.showInheritedShares?"icon-triangle-n":"icon-triangle-s"},mainTitle:function(){return t("files_sharing","Others with access")},subTitle:function(){return this.showInheritedShares&&0===this.shares.length?t("files_sharing","No other users with access found"):""},toggleTooltip:function(){return"dir"===this.fileInfo.type?t("files_sharing","Toggle list of others with access to this directory"):t("files_sharing","Toggle list of others with access to this file")},fullPath:function(){return"".concat(this.fileInfo.path,"/").concat(this.fileInfo.name).replace("//","/")}},watch:{fileInfo:function(){this.resetState()}},methods:{toggleInheritedShares:function(){this.showInheritedShares=!this.showInheritedShares,this.showInheritedShares?this.fetchInheritedShares():this.resetState()},fetchInheritedShares:function(){var e,n=this;return(e=regeneratorRuntime.mark((function e(){var r,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.loading=!0,e.prev=1,r=(0,o.generateOcsUrl)("apps/files_sharing/api/v1/shares/inherited?format=json&path={path}",{path:n.fullPath}),e.next=5,u.default.get(r);case 5:i=e.sent,n.shares=i.data.ocs.data.map((function(e){return new A(e)})).sort((function(e,t){return t.createdTime-e.createdTime})),qe.info(n.shares),n.loaded=!0,e.next=14;break;case 11:e.prev=11,e.t0=e.catch(1),OC.Notification.showTemporary(t("files_sharing","Unable to fetch inherited shares"),{type:"error"});case 14:return e.prev=14,n.loading=!1,e.finish(14);case 17:case"end":return e.stop()}}),e,null,[[1,11,14,17]])})),function(){var t=this,n=arguments;return new Promise((function(r,i){var a=e.apply(t,n);function s(e){Ze(a,r,i,s,o,"next",e)}function o(e){Ze(a,r,i,s,o,"throw",e)}s(void 0)}))})()},resetState:function(){this.loaded=!1,this.loading=!1,this.showInheritedShares=!1,this.shares=[]},removeShare:function(e){var t=this.shares.findIndex((function(t){return t===e}));this.shares.splice(t,1)}}},Ge=$e,Ve=r(16843),Ke={};Ke.styleTagTransform=j(),Ke.setAttributes=L(),Ke.insert=O().bind(null,"head"),Ke.domAPI=R(),Ke.insertStyleElement=Y(),D()(Ve.Z,Ke),Ve.Z&&Ve.Z.locals&&Ve.Z.locals;var Qe=(0,W.Z)(Ge,(function(){var e=this,t=e._self._c;return t("ul",{attrs:{id:"sharing-inherited-shares"}},[t("SharingEntrySimple",{staticClass:"sharing-entry__inherited",attrs:{title:e.mainTitle,subtitle:e.subTitle,"aria-expanded":e.showInheritedShares},scopedSlots:e._u([{key:"avatar",fn:function(){return[t("div",{staticClass:"avatar-shared icon-more-white"})]},proxy:!0}])},[e._v(" "),t("NcActionButton",{attrs:{icon:e.showInheritedSharesIcon,"aria-label":e.toggleTooltip,title:e.toggleTooltip},on:{click:function(t){return t.preventDefault(),t.stopPropagation(),e.toggleInheritedShares.apply(null,arguments)}}})],1),e._v(" "),e._l(e.shares,(function(n){return t("SharingEntryInherited",{key:n.id,attrs:{"file-info":e.fileInfo,share:n},on:{"remove:share":e.removeShare}})}))],2)}),[],!1,null,"3462b966",null),ze=Qe.exports,Je=r(81807),Xe=r.n(Je),et=r(79570),tt=r.n(et),nt=r(875),rt=r.n(nt),it=r(18074),at=r.n(it),st={name:"ExternalShareAction",props:{id:{type:String,required:!0},action:{type:Object,default:function(){return{}}},fileInfo:{type:Object,default:function(){},required:!0},share:{type:A,default:null}},computed:{data:function(){return this.action.data(this)}}},ot=(0,W.Z)(st,(function(){var e=this;return(0,e._self._c)(e.data.is,e._g(e._b({tag:"Component"},"Component",e.data,!1),e.action.handlers),[e._v("\n\t"+e._s(e.data.text)+"\n")])}),[],!1,null,null,null).exports,ct=r(30158),lt=r.n(ct),ut={NONE:0,READ:1,UPDATE:2,CREATE:4,DELETE:8,SHARE:16},ht={READ_ONLY:ut.READ,UPLOAD_AND_UPDATE:ut.READ|ut.UPDATE|ut.CREATE|ut.DELETE,FILE_DROP:ut.CREATE,ALL:ut.UPDATE|ut.CREATE|ut.READ|ut.DELETE|ut.SHARE};function dt(e,t){return e!==ut.NONE&&(e&t)===t}function ft(e){return!(!dt(e,ut.READ)&&!dt(e,ut.CREATE)||!dt(e,ut.READ)&&(dt(e,ut.UPDATE)||dt(e,ut.DELETE)))}function pt(e,t){return dt(e,t)?function(e,t){return e&~t}(e,t):function(e,t){return e|t}(e,t)}var gt=r(55976),mt=r(32964),vt={name:"SharePermissionsEditor",components:{NcActionButton:De(),NcActionCheckbox:Xe(),NcActionRadio:lt(),Tune:gt.Z,ChevronLeft:mt.default},mixins:[Ue],data:function(){return{randomFormName:Math.random().toString(27).substring(2),showCustomPermissionsForm:!1,atomicPermissions:ut,bundledPermissions:ht}},computed:{sharePermissionsSummary:function(){var e=this;return Object.values(this.atomicPermissions).filter((function(t){return e.shareHasPermissions(t)})).map((function(t){switch(t){case e.atomicPermissions.CREATE:return e.t("files_sharing","Upload");case e.atomicPermissions.READ:return e.t("files_sharing","Read");case e.atomicPermissions.UPDATE:return e.t("files_sharing","Edit");case e.atomicPermissions.DELETE:return e.t("files_sharing","Delete");default:return null}})).filter((function(e){return null!==e})).join(", ")},sharePermissionsIsBundle:function(){var e=this;return Object.values(ht).map((function(t){return e.sharePermissionEqual(t)})).filter((function(e){return e})).length>0},sharePermissionsSetIsValid:function(){return ft(this.share.permissions)},isFolder:function(){return"dir"===this.fileInfo.type},fileHasCreatePermission:function(){return!!(this.fileInfo.permissions&ut.CREATE)}},mounted:function(){this.showCustomPermissionsForm=!this.sharePermissionsIsBundle},methods:{sharePermissionEqual:function(e){return(this.share.permissions&~ut.SHARE)===e},shareHasPermissions:function(e){return dt(this.share.permissions,e)},setSharePermissions:function(e){this.share.permissions=e,this.queueUpdate("permissions")},canToggleSharePermissions:function(e){return function(e,t){return ft(pt(e,t))}(this.share.permissions,e)},toggleSharePermissions:function(e){this.share.permissions=pt(this.share.permissions,e),ft(this.share.permissions)&&this.queueUpdate("permissions")}}},yt=r(73286),_t={};_t.styleTagTransform=j(),_t.setAttributes=L(),_t.insert=O().bind(null,"head"),_t.domAPI=R(),_t.insertStyleElement=Y(),D()(yt.Z,_t),yt.Z&&yt.Z.locals&&yt.Z.locals;var At=(0,W.Z)(vt,(function(){var e=this,t=e._self._c;return t("li",[t("ul",[e.isFolder?e._e():t("NcActionCheckbox",{attrs:{checked:e.shareHasPermissions(e.atomicPermissions.UPDATE),disabled:e.saving},on:{"update:checked":function(t){return e.toggleSharePermissions(e.atomicPermissions.UPDATE)}}},[e._v("\n\t\t\t"+e._s(e.t("files_sharing","Allow editing"))+"\n\t\t")]),e._v(" "),e.isFolder&&e.fileHasCreatePermission&&e.config.isPublicUploadEnabled?[e.showCustomPermissionsForm?t("span",{class:{error:!e.sharePermissionsSetIsValid}},[t("NcActionCheckbox",{attrs:{checked:e.shareHasPermissions(e.atomicPermissions.READ),disabled:e.saving||!e.canToggleSharePermissions(e.atomicPermissions.READ)},on:{"update:checked":function(t){return e.toggleSharePermissions(e.atomicPermissions.READ)}}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Read"))+"\n\t\t\t\t")]),e._v(" "),t("NcActionCheckbox",{attrs:{checked:e.shareHasPermissions(e.atomicPermissions.CREATE),disabled:e.saving||!e.canToggleSharePermissions(e.atomicPermissions.CREATE)},on:{"update:checked":function(t){return e.toggleSharePermissions(e.atomicPermissions.CREATE)}}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Upload"))+"\n\t\t\t\t")]),e._v(" "),t("NcActionCheckbox",{attrs:{checked:e.shareHasPermissions(e.atomicPermissions.UPDATE),disabled:e.saving||!e.canToggleSharePermissions(e.atomicPermissions.UPDATE)},on:{"update:checked":function(t){return e.toggleSharePermissions(e.atomicPermissions.UPDATE)}}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Edit"))+"\n\t\t\t\t")]),e._v(" "),t("NcActionCheckbox",{attrs:{checked:e.shareHasPermissions(e.atomicPermissions.DELETE),disabled:e.saving||!e.canToggleSharePermissions(e.atomicPermissions.DELETE)},on:{"update:checked":function(t){return e.toggleSharePermissions(e.atomicPermissions.DELETE)}}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Delete"))+"\n\t\t\t\t")]),e._v(" "),t("NcActionButton",{on:{click:function(t){e.showCustomPermissionsForm=!1}},scopedSlots:e._u([{key:"icon",fn:function(){return[t("ChevronLeft")]},proxy:!0}],null,!1,1018742195)},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Bundled permissions"))+"\n\t\t\t\t")])],1):[t("NcActionRadio",{attrs:{checked:e.sharePermissionEqual(e.bundledPermissions.READ_ONLY),value:e.bundledPermissions.READ_ONLY,name:e.randomFormName,disabled:e.saving},on:{change:function(t){return e.setSharePermissions(e.bundledPermissions.READ_ONLY)}}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Read only"))+"\n\t\t\t\t")]),e._v(" "),t("NcActionRadio",{attrs:{checked:e.sharePermissionEqual(e.bundledPermissions.UPLOAD_AND_UPDATE),value:e.bundledPermissions.UPLOAD_AND_UPDATE,disabled:e.saving,name:e.randomFormName},on:{change:function(t){return e.setSharePermissions(e.bundledPermissions.UPLOAD_AND_UPDATE)}}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Allow upload and editing"))+"\n\t\t\t\t")]),e._v(" "),t("NcActionRadio",{staticClass:"sharing-entry__action--public-upload",attrs:{checked:e.sharePermissionEqual(e.bundledPermissions.FILE_DROP),value:e.bundledPermissions.FILE_DROP,disabled:e.saving,name:e.randomFormName},on:{change:function(t){return e.setSharePermissions(e.bundledPermissions.FILE_DROP)}}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","File drop (upload only)"))+"\n\t\t\t\t")]),e._v(" "),t("NcActionButton",{attrs:{title:e.t("files_sharing","Custom permissions")},on:{click:function(t){e.showCustomPermissionsForm=!0}},scopedSlots:e._u([{key:"icon",fn:function(){return[t("Tune")]},proxy:!0}],null,!1,961531849)},[e._v("\n\t\t\t\t\t"+e._s(e.sharePermissionsIsBundle?"":e.sharePermissionsSummary)+"\n\t\t\t\t")])]]:e._e()],2)])}),[],!1,null,"5e957d09",null).exports,bt=r(25108);function Et(e){return Et="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},Et(e)}function wt(e,t,n,r,i,a,s){try{var o=e[a](s),c=o.value}catch(e){return void n(e)}o.done?t(c):Promise.resolve(c).then(r,i)}function St(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var a=e.apply(t,n);function s(e){wt(a,r,i,s,o,"next",e)}function o(e){wt(a,r,i,s,o,"throw",e)}s(void 0)}))}}var Ct={name:"SharingEntryLink",components:{NcActions:x(),NcActionButton:De(),NcActionCheckbox:Xe(),NcActionInput:tt(),NcActionLink:S(),NcActionText:Ne(),NcActionTextEditable:at(),NcActionSeparator:rt(),NcAvatar:l(),ExternalShareAction:ot,SharePermissionsEditor:At},mixins:[Ue],props:{canReshare:{type:Boolean,default:!0},index:{type:Number,default:null}},data:function(){return{copySuccess:!0,copied:!1,pending:!1,ExternalLegacyLinkActions:OCA.Sharing.ExternalLinkActions.state,ExternalShareActions:OCA.Sharing.ExternalShareActions.state}},computed:{title:function(){if(this.share&&this.share.id){if(!this.isShareOwner&&this.share.ownerDisplayName)return this.isEmailShareType?t("files_sharing","{shareWith} by {initiator}",{shareWith:this.share.shareWith,initiator:this.share.ownerDisplayName}):t("files_sharing","Shared via link by {initiator}",{initiator:this.share.ownerDisplayName});if(this.share.label&&""!==this.share.label.trim())return this.isEmailShareType?t("files_sharing","Mail share ({label})",{label:this.share.label.trim()}):t("files_sharing","Share link ({label})",{label:this.share.label.trim()});if(this.isEmailShareType)return this.share.shareWith}return this.index>1?t("files_sharing","Share link ({index})",{index:this.index}):t("files_sharing","Share link")},subtitle:function(){return this.isEmailShareType&&this.title!==this.share.shareWith?this.share.shareWith:null},hasExpirationDate:{get:function(){return this.config.isDefaultExpireDateEnforced||!!this.share.expireDate},set:function(e){var t=this.config.defaultExpirationDate||new Date((new Date).setDate((new Date).getDate()+1));this.share.expireDate=e?this.formatDateToString(t):"",bt.debug("Expiration date status",e,this.share.expireDate)}},dateMaxEnforced:function(){return this.config.isDefaultExpireDateEnforced?new Date((new Date).setDate((new Date).getDate()+this.config.defaultExpireDate)):null},isPasswordProtected:{get:function(){return this.config.enforcePasswordForPublicLink||!!this.share.password},set:function(e){var t=this;return St(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(n.t0=i.ZP,n.t1=t.share,!e){n.next=8;break}return n.next=5,ce();case 5:n.t2=n.sent,n.next=9;break;case 8:n.t2="";case 9:n.t3=n.t2,n.t0.set.call(n.t0,n.t1,"password",n.t3),i.ZP.set(t.share,"newPassword",t.share.password);case 12:case"end":return n.stop()}}),n)})))()}},passwordExpirationTime:function(){if(null===this.share.passwordExpirationTime)return null;var e=moment(this.share.passwordExpirationTime);return!(e.diff(moment())<0)&&e.fromNow()},isTalkEnabled:function(){return void 0!==OC.appswebroots.spreed},isPasswordProtectedByTalkAvailable:function(){return this.isPasswordProtected&&this.isTalkEnabled},isPasswordProtectedByTalk:{get:function(){return this.share.sendPasswordByTalk},set:function(e){var t=this;return St(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:t.share.sendPasswordByTalk=e;case 1:case"end":return n.stop()}}),n)})))()}},isEmailShareType:function(){return!!this.share&&this.share.type===this.SHARE_TYPES.SHARE_TYPE_EMAIL},canTogglePasswordProtectedByTalkAvailable:function(){return!(!this.isPasswordProtected||this.isEmailShareType&&!this.hasUnsavedPassword)},pendingPassword:function(){return this.config.enableLinkPasswordByDefault&&this.share&&!this.share.id},pendingEnforcedPassword:function(){return this.config.enforcePasswordForPublicLink&&this.share&&!this.share.id},pendingExpirationDate:function(){return this.config.isDefaultExpireDateEnforced&&this.share&&!this.share.id},hasUnsavedPassword:function(){return void 0!==this.share.newPassword},shareLink:function(){return window.location.protocol+"//"+window.location.host+(0,o.generateUrl)("/s/")+this.share.token},actionsTooltip:function(){return t("files_sharing",'Actions for "{title}"',{title:this.title})},copyLinkTooltip:function(){return this.copied?this.copySuccess?"":t("files_sharing","Cannot copy, please copy the link manually"):t("files_sharing",'Copy public link of "{title}" to clipboard',{title:this.title})},externalLegacyLinkActions:function(){return this.ExternalLegacyLinkActions.actions},externalLinkActions:function(){return this.ExternalShareActions.actions.filter((function(e){return e.shareType.includes(g.D.SHARE_TYPE_LINK)||e.shareType.includes(g.D.SHARE_TYPE_EMAIL)}))},isPasswordPolicyEnabled:function(){return"object"===Et(this.config.passwordPolicy)},canChangeHideDownload:function(){return this.fileInfo.shareAttributes.some((function(e){return"download"===e.key&&"permissions"===e.scope&&!1===e.enabled}))}},methods:{onNewLinkShare:function(){var e=this;return St(regeneratorRuntime.mark((function n(){var r,i,a,s;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(!e.loading){n.next=2;break}return n.abrupt("return");case 2:if(r={share_type:g.D.SHARE_TYPE_LINK},e.config.isDefaultExpireDateEnforced&&(r.expiration=e.formatDateToString(e.config.defaultExpirationDate)),!(e.config.enableLinkPasswordByDefault||e.config.enforcePasswordForPublicLink||e.config.isDefaultExpireDateEnforced)){n.next=37;break}if(e.pending=!0,!e.share||e.share.id){n.next=24;break}if(!e.checkShare(e.share)){n.next=21;break}return n.prev=8,n.next=11,e.pushNewLinkShare(e.share,!0);case 11:n.next=18;break;case 13:return n.prev=13,n.t0=n.catch(8),e.pending=!1,bt.error(n.t0),n.abrupt("return",!1);case 18:return n.abrupt("return",!0);case 21:return e.open=!0,OC.Notification.showTemporary(t("files_sharing","Error, please enter proper password and/or expiration date")),n.abrupt("return",!1);case 24:if(!e.config.enableLinkPasswordByDefault&&!e.config.enforcePasswordForPublicLink){n.next=28;break}return n.next=27,ce();case 27:r.password=n.sent;case 28:return i=new A(r),n.next=31,new Promise((function(t){e.$emit("add:share",i,t)}));case 31:a=n.sent,e.open=!1,e.pending=!1,a.open=!0,n.next=40;break;case 37:return s=new A(r),n.next=40,e.pushNewLinkShare(s);case 40:case"end":return n.stop()}}),n,null,[[8,13]])})))()},pushNewLinkShare:function(e,n){var r=this;return St(regeneratorRuntime.mark((function i(){var a,s,o,c,l,u,h,d,f;return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(i.prev=0,!r.loading){i.next=3;break}return i.abrupt("return",!0);case 3:return r.loading=!0,r.errors={},a=(r.fileInfo.path+"/"+r.fileInfo.name).replace("//","/"),s={path:a,shareType:g.D.SHARE_TYPE_LINK,password:e.password,expireDate:e.expireDate,attributes:JSON.stringify(r.fileInfo.shareAttributes)},bt.debug("Creating link share with options",s),i.next=10,r.createShare(s);case 10:if(o=i.sent,r.open=!1,bt.debug("Link share created",o),!n){i.next=19;break}return i.next=16,new Promise((function(e){r.$emit("update:share",o,e)}));case 16:c=i.sent,i.next=22;break;case 19:return i.next=21,new Promise((function(e){r.$emit("add:share",o,e)}));case 21:c=i.sent;case 22:r.config.enforcePasswordForPublicLink||c.copyLink(),(0,E.s$)(t("sharing","Link share created")),i.next=35;break;case 26:if(i.prev=26,i.t0=i.catch(0),f=null===i.t0||void 0===i.t0||null===(l=i.t0.response)||void 0===l||null===(u=l.data)||void 0===u||null===(h=u.ocs)||void 0===h||null===(d=h.meta)||void 0===d?void 0:d.message){i.next=33;break}return(0,E.x2)(t("sharing","Error while creating the share")),bt.error(i.t0),i.abrupt("return");case 33:throw f.match(/password/i)?r.onSyncError("password",f):f.match(/date/i)?r.onSyncError("expireDate",f):r.onSyncError("pending",f),i.t0;case 35:return i.prev=35,r.loading=!1,i.finish(35);case 38:case"end":return i.stop()}}),i,null,[[0,26,35,38]])})))()},onLabelChange:function(e){this.$set(this.share,"newLabel",e.trim())},onLabelSubmit:function(){"string"==typeof this.share.newLabel&&(this.share.label=this.share.newLabel,this.$delete(this.share,"newLabel"),this.queueUpdate("label"))},copyLink:function(){var e=this;return St(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,n.next=3,navigator.clipboard.writeText(e.shareLink);case 3:(0,E.s$)(t("files_sharing","Link copied")),e.$refs.copyButton.$el.focus(),e.copySuccess=!0,e.copied=!0,n.next=14;break;case 9:n.prev=9,n.t0=n.catch(0),e.copySuccess=!1,e.copied=!0,bt.error(n.t0);case 14:return n.prev=14,setTimeout((function(){e.copySuccess=!1,e.copied=!1}),4e3),n.finish(14);case 17:case"end":return n.stop()}}),n,null,[[0,9,14,17]])})))()},onPasswordChange:function(e){this.$set(this.share,"newPassword",e)},onPasswordDisable:function(){this.share.password="",this.$delete(this.share,"newPassword"),this.share.id&&this.queueUpdate("password")},onPasswordSubmit:function(){this.hasUnsavedPassword&&(this.share.password=this.share.newPassword.trim(),this.queueUpdate("password"))},onPasswordProtectedByTalkChange:function(){this.hasUnsavedPassword&&(this.share.password=this.share.newPassword.trim()),this.queueUpdate("sendPasswordByTalk","password")},onMenuClose:function(){this.onPasswordSubmit(),this.onNoteSubmit()},onCancel:function(){this.$emit("remove:share",this.share)}}},xt=Ct,kt=r(14113),Pt={};Pt.styleTagTransform=j(),Pt.setAttributes=L(),Pt.insert=O().bind(null,"head"),Pt.domAPI=R(),Pt.insertStyleElement=Y(),D()(kt.Z,Pt),kt.Z&&kt.Z.locals&&kt.Z.locals;var Dt=(0,W.Z)(xt,(function(){var e=this,t=e._self._c;return t("li",{staticClass:"sharing-entry sharing-entry__link",class:{"sharing-entry--share":e.share}},[t("NcAvatar",{staticClass:"sharing-entry__avatar",attrs:{"is-no-user":!0,"icon-class":e.isEmailShareType?"avatar-link-share icon-mail-white":"avatar-link-share icon-public-white"}}),e._v(" "),t("div",{staticClass:"sharing-entry__desc"},[t("span",{staticClass:"sharing-entry__title",attrs:{title:e.title}},[e._v("\n\t\t\t"+e._s(e.title)+"\n\t\t")]),e._v(" "),e.subtitle?t("p",[e._v("\n\t\t\t"+e._s(e.subtitle)+"\n\t\t")]):e._e()]),e._v(" "),e.share&&!e.isEmailShareType&&e.share.token?t("NcActions",{ref:"copyButton",staticClass:"sharing-entry__copy"},[t("NcActionLink",{attrs:{href:e.shareLink,target:"_blank",title:e.copyLinkTooltip,"aria-label":e.copyLinkTooltip,icon:e.copied&&e.copySuccess?"icon-checkmark-color":"icon-clippy"},on:{click:function(t){return t.stopPropagation(),t.preventDefault(),e.copyLink.apply(null,arguments)}}})],1):e._e(),e._v(" "),!e.pending&&(e.pendingPassword||e.pendingEnforcedPassword||e.pendingExpirationDate)?t("NcActions",{staticClass:"sharing-entry__actions",attrs:{"aria-label":e.actionsTooltip,"menu-align":"right",open:e.open},on:{"update:open":function(t){e.open=t},close:e.onNewLinkShare}},[e.errors.pending?t("NcActionText",{class:{error:e.errors.pending},attrs:{icon:"icon-error"}},[e._v("\n\t\t\t"+e._s(e.errors.pending)+"\n\t\t")]):t("NcActionText",{attrs:{icon:"icon-info"}},[e._v("\n\t\t\t"+e._s(e.t("files_sharing","Please enter the following required information before creating the share"))+"\n\t\t")]),e._v(" "),e.pendingEnforcedPassword?t("NcActionText",{attrs:{icon:"icon-password"}},[e._v("\n\t\t\t"+e._s(e.t("files_sharing","Password protection (enforced)"))+"\n\t\t")]):e.pendingPassword?t("NcActionCheckbox",{staticClass:"share-link-password-checkbox",attrs:{checked:e.isPasswordProtected,disabled:e.config.enforcePasswordForPublicLink||e.saving},on:{"update:checked":function(t){e.isPasswordProtected=t},uncheck:e.onPasswordDisable}},[e._v("\n\t\t\t"+e._s(e.t("files_sharing","Password protection"))+"\n\t\t")]):e._e(),e._v(" "),e.pendingEnforcedPassword||e.share.password?t("NcActionInput",{staticClass:"share-link-password",attrs:{value:e.share.password,disabled:e.saving,required:e.config.enableLinkPasswordByDefault||e.config.enforcePasswordForPublicLink,minlength:e.isPasswordPolicyEnabled&&e.config.passwordPolicy.minLength,icon:"",autocomplete:"new-password"},on:{"update:value":function(t){return e.$set(e.share,"password",t)},submit:e.onNewLinkShare}},[e._v("\n\t\t\t"+e._s(e.t("files_sharing","Enter a password"))+"\n\t\t")]):e._e(),e._v(" "),e.pendingExpirationDate?t("NcActionText",{attrs:{icon:"icon-calendar-dark"}},[e._v("\n\t\t\t"+e._s(e.t("files_sharing","Expiration date (enforced)"))+"\n\t\t")]):e._e(),e._v(" "),e.pendingExpirationDate?t("NcActionInput",{staticClass:"share-link-expire-date",attrs:{disabled:e.saving,"is-native-picker":!0,"hide-label":!0,value:new Date(e.share.expireDate),type:"date",min:e.dateTomorrow,max:e.dateMaxEnforced},on:{input:e.onExpirationChange}},[e._v("\n\t\t\t"+e._s(e.t("files_sharing","Enter a date"))+"\n\t\t")]):e._e(),e._v(" "),t("NcActionButton",{attrs:{icon:"icon-checkmark"},on:{click:function(t){return t.preventDefault(),t.stopPropagation(),e.onNewLinkShare.apply(null,arguments)}}},[e._v("\n\t\t\t"+e._s(e.t("files_sharing","Create share"))+"\n\t\t")]),e._v(" "),t("NcActionButton",{attrs:{icon:"icon-close"},on:{click:function(t){return t.preventDefault(),t.stopPropagation(),e.onCancel.apply(null,arguments)}}},[e._v("\n\t\t\t"+e._s(e.t("files_sharing","Cancel"))+"\n\t\t")])],1):e.loading?t("div",{staticClass:"icon-loading-small sharing-entry__loading"}):t("NcActions",{staticClass:"sharing-entry__actions",attrs:{"aria-label":e.actionsTooltip,"menu-align":"right",open:e.open},on:{"update:open":function(t){e.open=t},close:e.onMenuClose}},[e.share?[e.share.canEdit&&e.canReshare?[t("NcActionInput",{ref:"label",class:{error:e.errors.label},attrs:{disabled:e.saving,label:e.t("files_sharing","Share label"),value:void 0!==e.share.newLabel?e.share.newLabel:e.share.label,icon:"icon-edit",maxlength:"255"},on:{"update:value":e.onLabelChange,submit:e.onLabelSubmit}}),e._v(" "),t("SharePermissionsEditor",{attrs:{"can-reshare":e.canReshare,share:e.share,"file-info":e.fileInfo},on:{"update:share":function(t){e.share=t}}}),e._v(" "),t("NcActionSeparator"),e._v(" "),t("NcActionCheckbox",{attrs:{checked:e.share.hideDownload,disabled:e.saving||e.canChangeHideDownload},on:{"update:checked":function(t){return e.$set(e.share,"hideDownload",t)},change:function(t){return e.queueUpdate("hideDownload")}}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Hide download"))+"\n\t\t\t\t")]),e._v(" "),t("NcActionCheckbox",{staticClass:"share-link-password-checkbox",attrs:{checked:e.isPasswordProtected,disabled:e.config.enforcePasswordForPublicLink||e.saving},on:{"update:checked":function(t){e.isPasswordProtected=t},uncheck:e.onPasswordDisable}},[e._v("\n\t\t\t\t\t"+e._s(e.config.enforcePasswordForPublicLink?e.t("files_sharing","Password protection (enforced)"):e.t("files_sharing","Password protect"))+"\n\t\t\t\t")]),e._v(" "),e.isPasswordProtected?t("NcActionInput",{ref:"password",staticClass:"share-link-password",class:{error:e.errors.password},attrs:{disabled:e.saving,required:e.config.enforcePasswordForPublicLink,value:e.hasUnsavedPassword?e.share.newPassword:"***************",icon:"icon-password",autocomplete:"new-password",type:e.hasUnsavedPassword?"text":"password"},on:{"update:value":e.onPasswordChange,submit:e.onPasswordSubmit}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Enter a password"))+"\n\t\t\t\t")]):e._e(),e._v(" "),e.isEmailShareType&&e.passwordExpirationTime?t("NcActionText",{attrs:{icon:"icon-info"}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Password expires {passwordExpirationTime}",{passwordExpirationTime:e.passwordExpirationTime}))+"\n\t\t\t\t")]):e.isEmailShareType&&null!==e.passwordExpirationTime?t("NcActionText",{attrs:{icon:"icon-error"}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Password expired"))+"\n\t\t\t\t")]):e._e(),e._v(" "),e.isPasswordProtectedByTalkAvailable?t("NcActionCheckbox",{staticClass:"share-link-password-talk-checkbox",attrs:{checked:e.isPasswordProtectedByTalk,disabled:!e.canTogglePasswordProtectedByTalkAvailable||e.saving},on:{"update:checked":function(t){e.isPasswordProtectedByTalk=t},change:e.onPasswordProtectedByTalkChange}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Video verification"))+"\n\t\t\t\t")]):e._e(),e._v(" "),t("NcActionCheckbox",{staticClass:"share-link-expire-date-checkbox",attrs:{checked:e.hasExpirationDate,disabled:e.config.isDefaultExpireDateEnforced||e.saving},on:{"update:checked":function(t){e.hasExpirationDate=t},uncheck:e.onExpirationDisable}},[e._v("\n\t\t\t\t\t"+e._s(e.config.isDefaultExpireDateEnforced?e.t("files_sharing","Expiration date (enforced)"):e.t("files_sharing","Set expiration date"))+"\n\t\t\t\t")]),e._v(" "),e.hasExpirationDate?t("NcActionInput",{ref:"expireDate",staticClass:"share-link-expire-date",class:{error:e.errors.expireDate},attrs:{"is-native-picker":!0,"hide-label":!0,disabled:e.saving,value:new Date(e.share.expireDate),type:"date",min:e.dateTomorrow,max:e.dateMaxEnforced},on:{input:e.onExpirationChange}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Enter a date"))+"\n\t\t\t\t")]):e._e(),e._v(" "),t("NcActionCheckbox",{attrs:{checked:e.hasNote,disabled:e.saving},on:{"update:checked":function(t){e.hasNote=t},uncheck:function(t){return e.queueUpdate("note")}}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Note to recipient"))+"\n\t\t\t\t")]),e._v(" "),e.hasNote?t("NcActionTextEditable",{ref:"note",class:{error:e.errors.note},attrs:{disabled:e.saving,placeholder:e.t("files_sharing","Enter a note for the share recipient"),value:e.share.newNote||e.share.note,icon:"icon-edit"},on:{"update:value":e.onNoteChange,submit:e.onNoteSubmit}}):e._e()]:e._e(),e._v(" "),t("NcActionSeparator"),e._v(" "),e._l(e.externalLinkActions,(function(n){return t("ExternalShareAction",{key:n.id,attrs:{id:n.id,action:n,"file-info":e.fileInfo,share:e.share}})})),e._v(" "),e._l(e.externalLegacyLinkActions,(function(n,r){var i=n.icon,a=n.url,s=n.name;return t("NcActionLink",{key:r,attrs:{href:a(e.shareLink),icon:i,target:"_blank"}},[e._v("\n\t\t\t\t"+e._s(s)+"\n\t\t\t")])})),e._v(" "),e.share.canDelete?t("NcActionButton",{attrs:{icon:"icon-close",disabled:e.saving},on:{click:function(t){return t.preventDefault(),e.onDelete.apply(null,arguments)}}},[e._v("\n\t\t\t\t"+e._s(e.t("files_sharing","Unshare"))+"\n\t\t\t")]):e._e(),e._v(" "),!e.isEmailShareType&&e.canReshare?t("NcActionButton",{staticClass:"new-share-link",attrs:{icon:"icon-add"},on:{click:function(t){return t.preventDefault(),t.stopPropagation(),e.onNewLinkShare.apply(null,arguments)}}},[e._v("\n\t\t\t\t"+e._s(e.t("files_sharing","Add another link"))+"\n\t\t\t")]):e._e()]:e.canReshare?t("NcActionButton",{staticClass:"new-share-link",attrs:{title:e.t("files_sharing","Create a new share link"),"aria-label":e.t("files_sharing","Create a new share link"),icon:e.loading?"icon-loading-small":"icon-add"},on:{click:function(t){return t.preventDefault(),t.stopPropagation(),e.onNewLinkShare.apply(null,arguments)}}}):e._e()],2)],1)}),[],!1,null,"10855e60",null),Tt={name:"SharingLinkList",components:{SharingEntryLink:Dt.exports},mixins:[b],props:{fileInfo:{type:Object,default:function(){},required:!0},shares:{type:Array,default:function(){return[]},required:!0},canReshare:{type:Boolean,required:!0}},data:function(){return{canLinkShare:OC.getCapabilities().files_sharing.public.enabled}},computed:{hasLinkShares:function(){var e=this;return this.shares.filter((function(t){return t.type===e.SHARE_TYPES.SHARE_TYPE_LINK})).length>0},hasShares:function(){return this.shares.length>0}},methods:{addShare:function(e,t){this.shares.unshift(e),this.awaitForShare(e,t)},awaitForShare:function(e,t){var n=this;this.$nextTick((function(){var r=n.$children.find((function(t){return t.share===e}));r&&t(r)}))},removeShare:function(e){var t=this.shares.findIndex((function(t){return t===e}));this.shares.splice(t,1)}}},Rt=(0,W.Z)(Tt,(function(){var e=this,t=e._self._c;return e.canLinkShare?t("ul",{staticClass:"sharing-link-list"},[!e.hasLinkShares&&e.canReshare?t("SharingEntryLink",{attrs:{"can-reshare":e.canReshare,"file-info":e.fileInfo},on:{"add:share":e.addShare}}):e._e(),e._v(" "),e.hasShares?e._l(e.shares,(function(n,r){return t("SharingEntryLink",{key:n.id,attrs:{index:e.shares.length>1?r+1:null,"can-reshare":e.canReshare,share:e.shares[r],"file-info":e.fileInfo},on:{"update:share":[function(t){return e.$set(e.shares,r,t)},function(t){return e.awaitForShare.apply(e,arguments)}],"add:share":function(t){return e.addShare.apply(e,arguments)},"remove:share":e.removeShare}})})):e._e()],2):e._e()}),[],!1,null,null,null),Nt=Rt.exports,Ot=r(25108);function It(e){return It="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},It(e)}var Lt={name:"SharingEntry",components:{NcActions:x(),NcActionButton:De(),NcActionCheckbox:Xe(),NcActionInput:tt(),NcActionTextEditable:at(),NcAvatar:l()},mixins:[Ue],data:function(){return{permissionsEdit:OC.PERMISSION_UPDATE,permissionsCreate:OC.PERMISSION_CREATE,permissionsDelete:OC.PERMISSION_DELETE,permissionsRead:OC.PERMISSION_READ,permissionsShare:OC.PERMISSION_SHARE}},computed:{title:function(){var e=this.share.shareWithDisplayName;return this.share.type===this.SHARE_TYPES.SHARE_TYPE_GROUP?e+=" (".concat(t("files_sharing","group"),")"):this.share.type===this.SHARE_TYPES.SHARE_TYPE_ROOM?e+=" (".concat(t("files_sharing","conversation"),")"):this.share.type===this.SHARE_TYPES.SHARE_TYPE_REMOTE?e+=" (".concat(t("files_sharing","remote"),")"):this.share.type===this.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP?e+=" (".concat(t("files_sharing","remote group"),")"):this.share.type===this.SHARE_TYPES.SHARE_TYPE_GUEST&&(e+=" (".concat(t("files_sharing","guest"),")")),e},tooltip:function(){if(this.share.owner!==this.share.uidFileOwner){var e={user:this.share.shareWithDisplayName,owner:this.share.ownerDisplayName};return this.share.type===this.SHARE_TYPES.SHARE_TYPE_GROUP?t("files_sharing","Shared with the group {user} by {owner}",e):this.share.type===this.SHARE_TYPES.SHARE_TYPE_ROOM?t("files_sharing","Shared with the conversation {user} by {owner}",e):t("files_sharing","Shared with {user} by {owner}",e)}return null},canHaveNote:function(){return!this.isRemote},isRemote:function(){return this.share.type===this.SHARE_TYPES.SHARE_TYPE_REMOTE||this.share.type===this.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP},canSetEdit:function(){return this.fileInfo.sharePermissions&OC.PERMISSION_UPDATE||this.canEdit},canSetCreate:function(){return this.fileInfo.sharePermissions&OC.PERMISSION_CREATE||this.canCreate},canSetDelete:function(){return this.fileInfo.sharePermissions&OC.PERMISSION_DELETE||this.canDelete},canSetReshare:function(){return this.fileInfo.sharePermissions&OC.PERMISSION_SHARE||this.canReshare},canSetDownload:function(){return this.fileInfo.canDownload()||this.canDownload},canEdit:{get:function(){return this.share.hasUpdatePermission},set:function(e){this.updatePermissions({isEditChecked:e})}},canCreate:{get:function(){return this.share.hasCreatePermission},set:function(e){this.updatePermissions({isCreateChecked:e})}},canDelete:{get:function(){return this.share.hasDeletePermission},set:function(e){this.updatePermissions({isDeleteChecked:e})}},canReshare:{get:function(){return this.share.hasSharePermission},set:function(e){this.updatePermissions({isReshareChecked:e})}},canDownload:{get:function(){return this.share.hasDownloadPermission},set:function(e){this.updatePermissions({isDownloadChecked:e})}},hasRead:{get:function(){return this.share.hasReadPermission}},isFolder:function(){return"dir"===this.fileInfo.type},hasExpirationDate:{get:function(){return this.config.isDefaultInternalExpireDateEnforced||!!this.share.expireDate},set:function(e){var t=this.config.defaultInternalExpirationDate||new Date((new Date).setDate((new Date).getDate()+1));this.share.expireDate=e?this.formatDateToString(t):"",Ot.debug("Expiration date status",e,this.share.expireDate)}},dateMaxEnforced:function(){return!this.isRemote&&this.config.isDefaultInternalExpireDateEnforced?new Date((new Date).setDate((new Date).getDate()+1+this.config.defaultInternalExpireDate)):this.config.isDefaultRemoteExpireDateEnforced?new Date((new Date).setDate((new Date).getDate()+1+this.config.defaultRemoteExpireDate)):null},hasStatus:function(){return this.share.type===this.SHARE_TYPES.SHARE_TYPE_USER&&"object"===It(this.share.status)&&!Array.isArray(this.share.status)},allowDownloadText:function(){return t("files_sharing","Allow download")},isSetDownloadButtonVisible:function(){return(!this.share||this.share.type!==this.SHARE_TYPES.SHARE_TYPE_CIRCLE)&&(this.isFolder||["application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.ms-powerpoint","application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.oasis.opendocument.text","application/vnd.oasis.opendocument.spreadsheet","application/vnd.oasis.opendocument.presentation"].includes(this.fileInfo.mimetype))}},methods:{updatePermissions:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.isEditChecked,n=void 0===t?this.canEdit:t,r=e.isCreateChecked,i=void 0===r?this.canCreate:r,a=e.isDeleteChecked,s=void 0===a?this.canDelete:a,o=e.isReshareChecked,c=void 0===o?this.canReshare:o,l=e.isDownloadChecked,u=void 0===l?this.canDownload:l,h=0|(this.hasRead?this.permissionsRead:0)|(i?this.permissionsCreate:0)|(s?this.permissionsDelete:0)|(n?this.permissionsEdit:0)|(c?this.permissionsShare:0);this.share.permissions=h,this.share.hasDownloadPermission!==u&&(this.share.hasDownloadPermission=u),this.queueUpdate("permissions","attributes")},onMenuClose:function(){this.onNoteSubmit()}}},Ht=Lt,Yt=r(2096),Ut={};Ut.styleTagTransform=j(),Ut.setAttributes=L(),Ut.insert=O().bind(null,"head"),Ut.domAPI=R(),Ut.insertStyleElement=Y(),D()(Yt.Z,Ut),Yt.Z&&Yt.Z.locals&&Yt.Z.locals;var jt=(0,W.Z)(Ht,(function(){var e=this,t=e._self._c;return t("li",{staticClass:"sharing-entry"},[t("NcAvatar",{staticClass:"sharing-entry__avatar",attrs:{"is-no-user":e.share.type!==e.SHARE_TYPES.SHARE_TYPE_USER,user:e.share.shareWith,"display-name":e.share.shareWithDisplayName,"menu-position":"left",url:e.share.shareWithAvatar}}),e._v(" "),t(e.share.shareWithLink?"a":"div",{tag:"component",staticClass:"sharing-entry__desc",attrs:{title:e.tooltip,"aria-label":e.tooltip,href:e.share.shareWithLink}},[t("span",[e._v(e._s(e.title)),e.isUnique?e._e():t("span",{staticClass:"sharing-entry__desc-unique"},[e._v(" ("+e._s(e.share.shareWithDisplayNameUnique)+")")])]),e._v(" "),e.hasStatus?t("p",[t("span",[e._v(e._s(e.share.status.icon||""))]),e._v(" "),t("span",[e._v(e._s(e.share.status.message||""))])]):e._e()]),e._v(" "),t("NcActions",{staticClass:"sharing-entry__actions",attrs:{"menu-align":"right"},on:{close:e.onMenuClose}},[e.share.canEdit?[t("NcActionCheckbox",{ref:"canEdit",attrs:{checked:e.canEdit,value:e.permissionsEdit,disabled:e.saving||!e.canSetEdit},on:{"update:checked":function(t){e.canEdit=t}}},[e._v("\n\t\t\t\t"+e._s(e.t("files_sharing","Allow editing"))+"\n\t\t\t")]),e._v(" "),e.isFolder?t("NcActionCheckbox",{ref:"canCreate",attrs:{checked:e.canCreate,value:e.permissionsCreate,disabled:e.saving||!e.canSetCreate},on:{"update:checked":function(t){e.canCreate=t}}},[e._v("\n\t\t\t\t"+e._s(e.t("files_sharing","Allow creating"))+"\n\t\t\t")]):e._e(),e._v(" "),e.isFolder?t("NcActionCheckbox",{ref:"canDelete",attrs:{checked:e.canDelete,value:e.permissionsDelete,disabled:e.saving||!e.canSetDelete},on:{"update:checked":function(t){e.canDelete=t}}},[e._v("\n\t\t\t\t"+e._s(e.t("files_sharing","Allow deleting"))+"\n\t\t\t")]):e._e(),e._v(" "),e.config.isResharingAllowed?t("NcActionCheckbox",{ref:"canReshare",attrs:{checked:e.canReshare,value:e.permissionsShare,disabled:e.saving||!e.canSetReshare},on:{"update:checked":function(t){e.canReshare=t}}},[e._v("\n\t\t\t\t"+e._s(e.t("files_sharing","Allow resharing"))+"\n\t\t\t")]):e._e(),e._v(" "),e.isSetDownloadButtonVisible?t("NcActionCheckbox",{ref:"canDownload",attrs:{checked:e.canDownload,disabled:e.saving||!e.canSetDownload},on:{"update:checked":function(t){e.canDownload=t}}},[e._v("\n\t\t\t\t"+e._s(e.allowDownloadText)+"\n\t\t\t")]):e._e(),e._v(" "),t("NcActionCheckbox",{attrs:{checked:e.hasExpirationDate,disabled:e.config.isDefaultInternalExpireDateEnforced||e.saving},on:{"update:checked":function(t){e.hasExpirationDate=t},uncheck:e.onExpirationDisable}},[e._v("\n\t\t\t\t"+e._s(e.config.isDefaultInternalExpireDateEnforced?e.t("files_sharing","Expiration date enforced"):e.t("files_sharing","Set expiration date"))+"\n\t\t\t")]),e._v(" "),e.hasExpirationDate?t("NcActionInput",{ref:"expireDate",class:{error:e.errors.expireDate},attrs:{"is-native-picker":!0,"hide-label":!0,disabled:e.saving,value:new Date(e.share.expireDate),type:"date",min:e.dateTomorrow,max:e.dateMaxEnforced},on:{input:e.onExpirationChange}},[e._v("\n\t\t\t\t"+e._s(e.t("files_sharing","Enter a date"))+"\n\t\t\t")]):e._e(),e._v(" "),e.canHaveNote?[t("NcActionCheckbox",{attrs:{checked:e.hasNote,disabled:e.saving},on:{"update:checked":function(t){e.hasNote=t},uncheck:function(t){return e.queueUpdate("note")}}},[e._v("\n\t\t\t\t\t"+e._s(e.t("files_sharing","Note to recipient"))+"\n\t\t\t\t")]),e._v(" "),e.hasNote?t("NcActionTextEditable",{ref:"note",class:{error:e.errors.note},attrs:{disabled:e.saving,value:e.share.newNote||e.share.note,icon:"icon-edit"},on:{"update:value":e.onNoteChange,submit:e.onNoteSubmit}}):e._e()]:e._e()]:e._e(),e._v(" "),e.share.canDelete?t("NcActionButton",{attrs:{icon:"icon-close",disabled:e.saving},on:{click:function(t){return t.preventDefault(),e.onDelete.apply(null,arguments)}}},[e._v("\n\t\t\t"+e._s(e.t("files_sharing","Unshare"))+"\n\t\t")]):e._e()],2)],1)}),[],!1,null,"0d6fcc6a",null);function Mt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var Bt={name:"SharingList",components:{SharingEntry:jt.exports},mixins:[b],props:{fileInfo:{type:Object,default:function(){},required:!0},shares:{type:Array,default:function(){return[]},required:!0}},computed:{hasShares:function(){return 0===this.shares.length},isUnique:function(){var e=this;return function(t){return(n=e.shares,function(e){if(Array.isArray(e))return Mt(e)}(n)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(n)||function(e,t){if(e){if("string"==typeof e)return Mt(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Mt(e,t):void 0}}(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).filter((function(n){return t.type===e.SHARE_TYPES.SHARE_TYPE_USER&&t.shareWithDisplayName===n.shareWithDisplayName})).length<=1;var n}}},methods:{removeShare:function(e){var t=this.shares.findIndex((function(t){return t===e}));this.shares.splice(t,1)}}},Wt=(0,W.Z)(Bt,(function(){var e=this,t=e._self._c;return t("ul",{staticClass:"sharing-sharee-list"},e._l(e.shares,(function(n){return t("SharingEntry",{key:n.id,attrs:{"file-info":e.fileInfo,share:n,"is-unique":e.isUnique(n)},on:{"remove:share":e.removeShare}})})),1)}),[],!1,null,null,null).exports,Ft=r(25108);function qt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Zt(e,t,n,r,i,a,s){try{var o=e[a](s),c=o.value}catch(e){return void n(e)}o.done?t(c):Promise.resolve(c).then(r,i)}function $t(e){return function(){var t=this,n=arguments;return new Promise((function(r,i){var a=e.apply(t,n);function s(e){Zt(a,r,i,s,o,"next",e)}function o(e){Zt(a,r,i,s,o,"throw",e)}s(void 0)}))}}var Gt={name:"SharingTab",components:{NcAvatar:l(),CollectionList:s.G,SharingEntryInternal:z,SharingEntrySimple:F,SharingInherited:ze,SharingInput:ke,SharingLinkList:Nt,SharingList:Wt},mixins:[b],data:function(){return{config:new p,error:"",expirationInterval:null,loading:!0,fileInfo:null,reshare:null,sharedWithMe:{},shares:[],linkShares:[],sections:OCA.Sharing.ShareTabSections.getSections(),projectsEnabled:(0,h.j)("core","projects_enabled",!1)}},computed:{isSharedWithMe:function(){return Object.keys(this.sharedWithMe).length>0},canReshare:function(){return!!(this.fileInfo.permissions&OC.PERMISSION_SHARE)||!!(this.reshare&&this.reshare.hasSharePermission&&this.config.isResharingAllowed)}},methods:{update:function(e){var t=this;return $t(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:t.fileInfo=e,t.resetState(),t.getShares();case 3:case"end":return n.stop()}}),n)})))()},getShares:function(){var e=this;return $t(regeneratorRuntime.mark((function n(){var r,i,a,s,c,l,h,d,f,p,g,m;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,e.loading=!0,r=(0,o.generateOcsUrl)("apps/files_sharing/api/v1/shares"),i="json",a=(e.fileInfo.path+"/"+e.fileInfo.name).replace("//","/"),s=u.default.get(r,{params:{format:i,path:a,reshares:!0}}),c=u.default.get(r,{params:{format:i,path:a,shared_with_me:!0}}),n.next=9,Promise.all([s,c]);case 9:l=n.sent,y=2,h=function(e){if(Array.isArray(e))return e}(v=l)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a,s,o=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(o.push(r.value),o.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(l)throw i}}return o}}(v,y)||function(e,t){if(e){if("string"==typeof e)return qt(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?qt(e,t):void 0}}(v,y)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),d=h[0],f=h[1],e.loading=!1,e.processSharedWithMe(f),e.processShares(d),n.next=23;break;case 18:n.prev=18,n.t0=n.catch(0),null!==(p=n.t0.response.data)&&void 0!==p&&null!==(g=p.ocs)&&void 0!==g&&null!==(m=g.meta)&&void 0!==m&&m.message?e.error=n.t0.response.data.ocs.meta.message:e.error=t("files_sharing","Unable to load the shares list"),e.loading=!1,Ft.error("Error loading the shares list",n.t0);case 23:case"end":return n.stop()}var v,y}),n,null,[[0,18]])})))()},resetState:function(){clearInterval(this.expirationInterval),this.loading=!0,this.error="",this.sharedWithMe={},this.shares=[],this.linkShares=[]},updateExpirationSubtitle:function(e){var n=moment(e.expireDate).unix();this.$set(this.sharedWithMe,"subtitle",t("files_sharing","Expires {relativetime}",{relativetime:OC.Util.relativeModifiedDate(1e3*n)})),moment().unix()>n&&(clearInterval(this.expirationInterval),this.$set(this.sharedWithMe,"subtitle",t("files_sharing","this share just expired.")))},processShares:function(e){var t=this,n=e.data;if(n.ocs&&n.ocs.data&&n.ocs.data.length>0){var r=n.ocs.data.map((function(e){return new A(e)})).sort((function(e,t){return t.createdTime-e.createdTime}));this.linkShares=r.filter((function(e){return e.type===t.SHARE_TYPES.SHARE_TYPE_LINK||e.type===t.SHARE_TYPES.SHARE_TYPE_EMAIL})),this.shares=r.filter((function(e){return e.type!==t.SHARE_TYPES.SHARE_TYPE_LINK&&e.type!==t.SHARE_TYPES.SHARE_TYPE_EMAIL})),Ft.debug("Processed",this.linkShares.length,"link share(s)"),Ft.debug("Processed",this.shares.length,"share(s)")}},processSharedWithMe:function(e){var n=e.data;if(n.ocs&&n.ocs.data&&n.ocs.data[0]){var r=new A(n),i=function(e){return e.type===g.D.SHARE_TYPE_GROUP?t("files_sharing","Shared with you and the group {group} by {owner}",{group:e.shareWithDisplayName,owner:e.ownerDisplayName},void 0,{escape:!1}):e.type===g.D.SHARE_TYPE_CIRCLE?t("files_sharing","Shared with you and {circle} by {owner}",{circle:e.shareWithDisplayName,owner:e.ownerDisplayName},void 0,{escape:!1}):e.type===g.D.SHARE_TYPE_ROOM?e.shareWithDisplayName?t("files_sharing","Shared with you and the conversation {conversation} by {owner}",{conversation:e.shareWithDisplayName,owner:e.ownerDisplayName},void 0,{escape:!1}):t("files_sharing","Shared with you in a conversation by {owner}",{owner:e.ownerDisplayName},void 0,{escape:!1}):t("files_sharing","Shared with you by {owner}",{owner:e.ownerDisplayName},void 0,{escape:!1})}(r),a=r.ownerDisplayName,s=r.owner;this.sharedWithMe={displayName:a,title:i,user:s},this.reshare=r,r.expireDate&&moment(r.expireDate).unix()>moment().unix()&&(this.updateExpirationSubtitle(r),this.expirationInterval=setInterval(this.updateExpirationSubtitle,1e4,r))}else this.fileInfo&&void 0!==this.fileInfo.shareOwnerId&&this.fileInfo.shareOwnerId!==OC.currentUser&&(this.sharedWithMe={displayName:this.fileInfo.shareOwner,title:t("files_sharing","Shared with you by {owner}",{owner:this.fileInfo.shareOwner},void 0,{escape:!1}),user:this.fileInfo.shareOwnerId})},addShare:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){};e.type===this.SHARE_TYPES.SHARE_TYPE_EMAIL?this.linkShares.unshift(e):this.shares.unshift(e),this.awaitForShare(e,t)},awaitForShare:function(e,t){var n=this.$refs.shareList;e.type===this.SHARE_TYPES.SHARE_TYPE_EMAIL&&(n=this.$refs.linkShareList),this.$nextTick((function(){var r=n.$children.find((function(t){return t.share===e}));r&&t(r)}))}}},Vt=Gt,Kt=r(64727),Qt={};Qt.styleTagTransform=j(),Qt.setAttributes=L(),Qt.insert=O().bind(null,"head"),Qt.domAPI=R(),Qt.insertStyleElement=Y(),D()(Kt.Z,Qt),Kt.Z&&Kt.Z.locals&&Kt.Z.locals;var zt=(0,W.Z)(Vt,(function(){var e=this,t=e._self._c;return t("div",{class:{"icon-loading":e.loading}},[e.error?t("div",{staticClass:"emptycontent",class:{emptyContentWithSections:e.sections.length>0}},[t("div",{staticClass:"icon icon-error"}),e._v(" "),t("h2",[e._v(e._s(e.error))])]):t("div",{staticClass:"sharingTab__content"},[e.isSharedWithMe?t("SharingEntrySimple",e._b({staticClass:"sharing-entry__reshare",scopedSlots:e._u([{key:"avatar",fn:function(){return[t("NcAvatar",{staticClass:"sharing-entry__avatar",attrs:{user:e.sharedWithMe.user,"display-name":e.sharedWithMe.displayName}})]},proxy:!0}],null,!1,3197855346)},"SharingEntrySimple",e.sharedWithMe,!1)):e._e(),e._v(" "),e.loading?e._e():t("SharingInput",{attrs:{"can-reshare":e.canReshare,"file-info":e.fileInfo,"link-shares":e.linkShares,reshare:e.reshare,shares:e.shares},on:{"add:share":e.addShare}}),e._v(" "),e.loading?e._e():t("SharingLinkList",{ref:"linkShareList",attrs:{"can-reshare":e.canReshare,"file-info":e.fileInfo,shares:e.linkShares}}),e._v(" "),e.loading?e._e():t("SharingList",{ref:"shareList",attrs:{shares:e.shares,"file-info":e.fileInfo}}),e._v(" "),e.canReshare&&!e.loading?t("SharingInherited",{attrs:{"file-info":e.fileInfo}}):e._e(),e._v(" "),t("SharingEntryInternal",{attrs:{"file-info":e.fileInfo}}),e._v(" "),e.projectsEnabled&&e.fileInfo?t("CollectionList",{attrs:{id:"".concat(e.fileInfo.id),type:"file",name:e.fileInfo.name}}):e._e()],1),e._v(" "),e._l(e.sections,(function(n,r){return t("div",{key:r,ref:"section-"+r,refInFor:!0,staticClass:"sharingTab__additionalContent"},[t(n(e.$refs["section-"+r],e.fileInfo),{tag:"component",attrs:{"file-info":e.fileInfo}})],1)}))],2)}),[],!1,null,"56c61b11",null).exports,Jt=r(25108);function Xt(e){return Xt="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},Xt(e)}function en(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,tn(r.key),r)}}function tn(e){var t=function(e,t){if("object"!==Xt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!==Xt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===Xt(t)?t:String(t)}var nn=function(){function e(){var t,n,r;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),t=this,r=void 0,(n=tn(n="_state"))in t?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r,this._state={},this._state.results=[],Jt.debug("OCA.Sharing.ShareSearch initialized")}var t,n;return t=e,(n=[{key:"state",get:function(){return this._state}},{key:"addNewResult",value:function(e){return""!==e.displayName.trim()&&"function"==typeof e.handler?(this._state.results.push(e),!0):(Jt.error("Invalid search result provided",e),!1)}}])&&en(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),e}(),rn=r(25108);function an(e){return an="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},an(e)}function sn(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,on(r.key),r)}}function on(e){var t=function(e,t){if("object"!==an(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!==an(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===an(t)?t:String(t)}var cn=function(){function e(){var t,n,r;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),t=this,r=void 0,(n=on(n="_state"))in t?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r,this._state={},this._state.actions=[],rn.debug("OCA.Sharing.ExternalLinkActions initialized")}var t,n;return t=e,(n=[{key:"state",get:function(){return this._state}},{key:"registerAction",value:function(e){return rn.warn("OCA.Sharing.ExternalLinkActions is deprecated, use OCA.Sharing.ExternalShareAction instead"),"object"===an(e)&&e.icon&&e.name&&e.url?(this._state.actions.push(e),!0):(rn.error("Invalid action provided",e),!1)}}])&&sn(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),e}(),ln=r(25108);function un(e){return un="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},un(e)}function hn(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,dn(r.key),r)}}function dn(e){var t=function(e,t){if("object"!==un(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!==un(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===un(t)?t:String(t)}var fn=function(){function e(){var t,n,r;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),t=this,r=void 0,(n=dn(n="_state"))in t?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r,this._state={},this._state.actions=[],ln.debug("OCA.Sharing.ExternalShareActions initialized")}var t,n;return t=e,(n=[{key:"state",get:function(){return this._state}},{key:"registerAction",value:function(e){return"object"===un(e)&&"string"==typeof e.id&&"function"==typeof e.data&&Array.isArray(e.shareType)&&"object"===un(e.handlers)&&Object.values(e.handlers).every((function(e){return"function"==typeof e}))?this._state.actions.findIndex((function(t){return t.id===e.id}))>-1?(ln.error("An action with the same id ".concat(e.id," already exists"),e),!1):(this._state.actions.push(e),!0):(ln.error("Invalid action provided",e),!1)}}])&&hn(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();function pn(e){return pn="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},pn(e)}function gn(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,mn(r.key),r)}}function mn(e){var t=function(e,t){if("object"!==pn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!==pn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===pn(t)?t:String(t)}var vn=function(){function e(){var t,n,r;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),t=this,r=void 0,(n=mn(n="_sections"))in t?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r,this._sections=[]}var t,n;return t=e,(n=[{key:"registerSection",value:function(e){this._sections.push(e)}},{key:"getSections",value:function(){return this._sections}}])&&gn(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),e}(),yn=r(44582);function _n(e,t,n,r,i,a,s){try{var o=e[a](s),c=o.value}catch(e){return void n(e)}o.done?t(c):Promise.resolve(c).then(r,i)}window.OCA.Sharing||(window.OCA.Sharing={}),Object.assign(window.OCA.Sharing,{ShareSearch:new nn}),Object.assign(window.OCA.Sharing,{ExternalLinkActions:new cn}),Object.assign(window.OCA.Sharing,{ExternalShareActions:new fn}),Object.assign(window.OCA.Sharing,{ShareTabSections:new vn}),i.ZP.prototype.t=a.Iu,i.ZP.prototype.n=a.uN;var An=i.ZP.extend(zt),bn=null;window.addEventListener("DOMContentLoaded",(function(){OCA.Files&&OCA.Files.Sidebar&&OCA.Files.Sidebar.registerTab(new OCA.Files.Sidebar.Tab({id:"sharing",name:(0,a.Iu)("files_sharing","Sharing"),iconSvg:yn,mount:function(e,t,n){return(r=regeneratorRuntime.mark((function r(){return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return bn&&bn.$destroy(),bn=new An({parent:n}),r.next=4,bn.update(t);case 4:bn.$mount(e);case 5:case"end":return r.stop()}}),r)})),function(){var e=this,t=arguments;return new Promise((function(n,i){var a=r.apply(e,t);function s(e){_n(a,n,i,s,o,"next",e)}function o(e){_n(a,n,i,s,o,"throw",e)}s(void 0)}))})();var r},update:function(e){bn.update(e)},destroy:function(){bn.$destroy(),bn=null}}))}))},73286:function(e,t,n){var r=n(87537),i=n.n(r),a=n(23645),s=n.n(a)()(i());s.push([e.id,".error[data-v-5e957d09] .action-checkbox__label:before{border:1px solid var(--color-error)}","",{version:3,sources:["webpack://./apps/files_sharing/src/components/SharePermissionsEditor.vue"],names:[],mappings:"AAEC,uDACC,mCAAA",sourcesContent:["\n.error {\n\t::v-deep .action-checkbox__label:before {\n\t\tborder: 1px solid var(--color-error);\n\t}\n}\n"],sourceRoot:""}]),t.Z=s},2096:function(e,t,n){var r=n(87537),i=n.n(r),a=n(23645),s=n.n(a)()(i());s.push([e.id,".sharing-entry[data-v-0d6fcc6a]{display:flex;align-items:center;height:44px}.sharing-entry__desc[data-v-0d6fcc6a]{display:flex;flex-direction:column;justify-content:space-between;padding:8px;line-height:1.2em}.sharing-entry__desc p[data-v-0d6fcc6a]{color:var(--color-text-maxcontrast)}.sharing-entry__desc-unique[data-v-0d6fcc6a]{color:var(--color-text-maxcontrast)}.sharing-entry__actions[data-v-0d6fcc6a]{margin-left:auto}","",{version:3,sources:["webpack://./apps/files_sharing/src/components/SharingEntry.vue"],names:[],mappings:"AACA,gCACC,YAAA,CACA,kBAAA,CACA,WAAA,CACA,sCACC,YAAA,CACA,qBAAA,CACA,6BAAA,CACA,WAAA,CACA,iBAAA,CACA,wCACC,mCAAA,CAED,6CACC,mCAAA,CAGF,yCACC,gBAAA",sourcesContent:["\n.sharing-entry {\n\tdisplay: flex;\n\talign-items: center;\n\theight: 44px;\n\t&__desc {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tjustify-content: space-between;\n\t\tpadding: 8px;\n\t\tline-height: 1.2em;\n\t\tp {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t\t&-unique {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n\t&__actions {\n\t\tmargin-left: auto;\n\t}\n}\n"],sourceRoot:""}]),t.Z=s},24147:function(e,t,n){var r=n(87537),i=n.n(r),a=n(23645),s=n.n(a)()(i());s.push([e.id,".sharing-entry[data-v-23251e4a]{display:flex;align-items:center;height:44px}.sharing-entry__desc[data-v-23251e4a]{display:flex;flex-direction:column;justify-content:space-between;padding:8px;line-height:1.2em}.sharing-entry__desc p[data-v-23251e4a]{color:var(--color-text-maxcontrast)}.sharing-entry__actions[data-v-23251e4a]{margin-left:auto}","",{version:3,sources:["webpack://./apps/files_sharing/src/components/SharingEntryInherited.vue"],names:[],mappings:"AACA,gCACC,YAAA,CACA,kBAAA,CACA,WAAA,CACA,sCACC,YAAA,CACA,qBAAA,CACA,6BAAA,CACA,WAAA,CACA,iBAAA,CACA,wCACC,mCAAA,CAGF,yCACC,gBAAA",sourcesContent:["\n.sharing-entry {\n\tdisplay: flex;\n\talign-items: center;\n\theight: 44px;\n\t&__desc {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tjustify-content: space-between;\n\t\tpadding: 8px;\n\t\tline-height: 1.2em;\n\t\tp {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n\t&__actions {\n\t\tmargin-left: auto;\n\t}\n}\n"],sourceRoot:""}]),t.Z=s},66828:function(e,t,n){var r=n(87537),i=n.n(r),a=n(23645),s=n.n(a)()(i());s.push([e.id,".sharing-entry__internal .avatar-external[data-v-69e43ddc]{width:32px;height:32px;line-height:32px;font-size:18px;background-color:var(--color-text-maxcontrast);border-radius:50%;flex-shrink:0}.sharing-entry__internal .icon-checkmark-color[data-v-69e43ddc]{opacity:1}","",{version:3,sources:["webpack://./apps/files_sharing/src/components/SharingEntryInternal.vue"],names:[],mappings:"AAEC,2DACC,UAAA,CACA,WAAA,CACA,gBAAA,CACA,cAAA,CACA,8CAAA,CACA,iBAAA,CACA,aAAA,CAED,gEACC,SAAA",sourcesContent:["\n.sharing-entry__internal {\n\t.avatar-external {\n\t\twidth: 32px;\n\t\theight: 32px;\n\t\tline-height: 32px;\n\t\tfont-size: 18px;\n\t\tbackground-color: var(--color-text-maxcontrast);\n\t\tborder-radius: 50%;\n\t\tflex-shrink: 0;\n\t}\n\t.icon-checkmark-color {\n\t\topacity: 1;\n\t}\n}\n"],sourceRoot:""}]),t.Z=s},14113:function(e,t,n){var r=n(87537),i=n.n(r),a=n(23645),s=n.n(a)()(i());s.push([e.id,".sharing-entry[data-v-10855e60]{display:flex;align-items:center;min-height:44px}.sharing-entry__desc[data-v-10855e60]{display:flex;flex-direction:column;justify-content:space-between;padding:8px;line-height:1.2em;overflow:hidden}.sharing-entry__desc p[data-v-10855e60]{color:var(--color-text-maxcontrast)}.sharing-entry__title[data-v-10855e60]{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.sharing-entry:not(.sharing-entry--share) .sharing-entry__actions .new-share-link[data-v-10855e60]{border-top:1px solid var(--color-border)}.sharing-entry[data-v-10855e60] .avatar-link-share{background-color:var(--color-primary)}.sharing-entry .sharing-entry__action--public-upload[data-v-10855e60]{border-bottom:1px solid var(--color-border)}.sharing-entry__loading[data-v-10855e60]{width:44px;height:44px;margin:0;padding:14px;margin-left:auto}.sharing-entry .action-item[data-v-10855e60]{margin-left:auto}.sharing-entry .action-item~.action-item[data-v-10855e60],.sharing-entry .action-item~.sharing-entry__loading[data-v-10855e60]{margin-left:0}.sharing-entry .icon-checkmark-color[data-v-10855e60]{opacity:1}","",{version:3,sources:["webpack://./apps/files_sharing/src/components/SharingEntryLink.vue"],names:[],mappings:"AACA,gCACC,YAAA,CACA,kBAAA,CACA,eAAA,CACA,sCACC,YAAA,CACA,qBAAA,CACA,6BAAA,CACA,WAAA,CACA,iBAAA,CACA,eAAA,CAEA,wCACC,mCAAA,CAGF,uCACC,sBAAA,CACA,eAAA,CACA,kBAAA,CAIA,mGACC,wCAAA,CAIF,mDACC,qCAAA,CAGD,sEACC,2CAAA,CAGD,yCACC,UAAA,CACA,WAAA,CACA,QAAA,CACA,YAAA,CACA,gBAAA,CAKD,6CACC,gBAAA,CACA,+HAEC,aAAA,CAIF,sDACC,SAAA",sourcesContent:["\n.sharing-entry {\n\tdisplay: flex;\n\talign-items: center;\n\tmin-height: 44px;\n\t&__desc {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tjustify-content: space-between;\n\t\tpadding: 8px;\n\t\tline-height: 1.2em;\n\t\toverflow: hidden;\n\n\t\tp {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n\t&__title {\n\t\ttext-overflow: ellipsis;\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t}\n\n\t&:not(.sharing-entry--share) &__actions {\n\t\t.new-share-link {\n\t\t\tborder-top: 1px solid var(--color-border);\n\t\t}\n\t}\n\n\t::v-deep .avatar-link-share {\n\t\tbackground-color: var(--color-primary);\n\t}\n\n\t.sharing-entry__action--public-upload {\n\t\tborder-bottom: 1px solid var(--color-border);\n\t}\n\n\t&__loading {\n\t\twidth: 44px;\n\t\theight: 44px;\n\t\tmargin: 0;\n\t\tpadding: 14px;\n\t\tmargin-left: auto;\n\t}\n\n\t// put menus to the left\n\t// but only the first one\n\t.action-item {\n\t\tmargin-left: auto;\n\t\t~ .action-item,\n\t\t~ .sharing-entry__loading {\n\t\t\tmargin-left: 0;\n\t\t}\n\t}\n\n\t.icon-checkmark-color {\n\t\topacity: 1;\n\t}\n}\n"],sourceRoot:""}]),t.Z=s},3335:function(e,t,n){var r=n(87537),i=n.n(r),a=n(23645),s=n.n(a)()(i());s.push([e.id,".sharing-entry[data-v-9fd256bc]{display:flex;align-items:center;min-height:44px}.sharing-entry__desc[data-v-9fd256bc]{padding:8px;line-height:1.2em;position:relative;flex:1 1;min-width:0}.sharing-entry__desc p[data-v-9fd256bc]{color:var(--color-text-maxcontrast)}.sharing-entry__title[data-v-9fd256bc]{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;max-width:inherit}.sharing-entry__actions[data-v-9fd256bc]{margin-left:auto !important}","",{version:3,sources:["webpack://./apps/files_sharing/src/components/SharingEntrySimple.vue"],names:[],mappings:"AACA,gCACC,YAAA,CACA,kBAAA,CACA,eAAA,CACA,sCACC,WAAA,CACA,iBAAA,CACA,iBAAA,CACA,QAAA,CACA,WAAA,CACA,wCACC,mCAAA,CAGF,uCACC,kBAAA,CACA,sBAAA,CACA,eAAA,CACA,iBAAA,CAED,yCACC,2BAAA",sourcesContent:["\n.sharing-entry {\n\tdisplay: flex;\n\talign-items: center;\n\tmin-height: 44px;\n\t&__desc {\n\t\tpadding: 8px;\n\t\tline-height: 1.2em;\n\t\tposition: relative;\n\t\tflex: 1 1;\n\t\tmin-width: 0;\n\t\tp {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n\t&__title {\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\toverflow: hidden;\n\t\tmax-width: inherit;\n\t}\n\t&__actions {\n\t\tmargin-left: auto !important;\n\t}\n}\n"],sourceRoot:""}]),t.Z=s},49082:function(e,t,n){var r=n(87537),i=n.n(r),a=n(23645),s=n.n(a)()(i());s.push([e.id,".sharing-search{display:flex;flex-direction:column;margin-bottom:4px}.sharing-search label[for=sharing-search-input]{margin-bottom:2px}.sharing-search__input{width:100%;margin:10px 0}.vs__dropdown-menu span[lookup] .avatardiv{background-image:var(--icon-search-white);background-repeat:no-repeat;background-position:center;background-color:var(--color-text-maxcontrast) !important}.vs__dropdown-menu span[lookup] .avatardiv div{display:none}","",{version:3,sources:["webpack://./apps/files_sharing/src/components/SharingInput.vue"],names:[],mappings:"AACA,gBACC,YAAA,CACA,qBAAA,CACA,iBAAA,CAEA,gDACC,iBAAA,CAGD,uBACC,UAAA,CACA,aAAA,CAOA,2CACC,yCAAA,CACA,2BAAA,CACA,0BAAA,CACA,yDAAA,CACA,+CACC,YAAA",sourcesContent:['\n.sharing-search {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin-bottom: 4px;\n\n\tlabel[for="sharing-search-input"] {\n\t\tmargin-bottom: 2px;\n\t}\n\n\t&__input {\n\t\twidth: 100%;\n\t\tmargin: 10px 0;\n\t}\n}\n\n.vs__dropdown-menu {\n\t// properly style the lookup entry\n\tspan[lookup] {\n\t\t.avatardiv {\n\t\t\tbackground-image: var(--icon-search-white);\n\t\t\tbackground-repeat: no-repeat;\n\t\t\tbackground-position: center;\n\t\t\tbackground-color: var(--color-text-maxcontrast) !important;\n\t\t\tdiv {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\t}\n}\n'],sourceRoot:""}]),t.Z=s},16843:function(e,t,n){var r=n(87537),i=n.n(r),a=n(23645),s=n.n(a)()(i());s.push([e.id,".sharing-entry__inherited .avatar-shared[data-v-3462b966]{width:32px;height:32px;line-height:32px;font-size:18px;background-color:var(--color-text-maxcontrast);border-radius:50%;flex-shrink:0}","",{version:3,sources:["webpack://./apps/files_sharing/src/views/SharingInherited.vue"],names:[],mappings:"AAEC,0DACC,UAAA,CACA,WAAA,CACA,gBAAA,CACA,cAAA,CACA,8CAAA,CACA,iBAAA,CACA,aAAA",sourcesContent:["\n.sharing-entry__inherited {\n\t.avatar-shared {\n\t\twidth: 32px;\n\t\theight: 32px;\n\t\tline-height: 32px;\n\t\tfont-size: 18px;\n\t\tbackground-color: var(--color-text-maxcontrast);\n\t\tborder-radius: 50%;\n\t\tflex-shrink: 0;\n\t}\n}\n"],sourceRoot:""}]),t.Z=s},64727:function(e,t,n){var r=n(87537),i=n.n(r),a=n(23645),s=n.n(a)()(i());s.push([e.id,".emptyContentWithSections[data-v-56c61b11]{margin:1rem auto}.sharingTab__content[data-v-56c61b11]{padding:0 6px}.sharingTab__additionalContent[data-v-56c61b11]{margin:44px 0}","",{version:3,sources:["webpack://./apps/files_sharing/src/views/SharingTab.vue"],names:[],mappings:"AACA,2CACC,gBAAA,CAIA,sCACC,aAAA,CAED,gDACC,aAAA",sourcesContent:["\n.emptyContentWithSections {\n\tmargin: 1rem auto;\n}\n\n.sharingTab {\n\t&__content {\n\t\tpadding: 0 6px;\n\t}\n\t&__additionalContent {\n\t\tmargin: 44px 0;\n\t}\n}\n"],sourceRoot:""}]),t.Z=s}},r={};function i(e){var t=r[e];if(void 0!==t)return t.exports;var a=r[e]={id:e,loaded:!1,exports:{}};return n[e].call(a.exports,a,a.exports,i),a.loaded=!0,a.exports}i.m=n,e=[],i.O=function(t,n,r,a){if(!n){var s=1/0;for(u=0;u<e.length;u++){n=e[u][0],r=e[u][1],a=e[u][2];for(var o=!0,c=0;c<n.length;c++)(!1&a||s>=a)&&Object.keys(i.O).every((function(e){return i.O[e](n[c])}))?n.splice(c--,1):(o=!1,a<s&&(s=a));if(o){e.splice(u--,1);var l=r();void 0!==l&&(t=l)}}return t}a=a||0;for(var u=e.length;u>0&&e[u-1][2]>a;u--)e[u]=e[u-1];e[u]=[n,r,a]},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,{a:t}),t},i.d=function(e,t){for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e},i.j=7870,function(){i.b=document.baseURI||self.location.href;var e={7870:0};i.O.j=function(t){return 0===e[t]};var t=function(t,n){var r,a,s=n[0],o=n[1],c=n[2],l=0;if(s.some((function(t){return 0!==e[t]}))){for(r in o)i.o(o,r)&&(i.m[r]=o[r]);if(c)var u=c(i)}for(t&&t(n);l<s.length;l++)a=s[l],i.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return i.O(u)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))}(),i.nc=void 0;var a=i.O(void 0,[7874],(function(){return i(36345)}));a=i.O(a)}(); +//# sourceMappingURL=files_sharing-files_sharing_tab.js.map?v=d397f6da51c1fc8246cd
\ No newline at end of file diff --git a/dist/files_sharing-files_sharing_tab.js.map b/dist/files_sharing-files_sharing_tab.js.map index 8cfc3998113..1343a3df2a4 100644 --- a/dist/files_sharing-files_sharing_tab.js.map +++ b/dist/files_sharing-files_sharing_tab.js.map @@ -1 +1 @@ -{"version":3,"file":"files_sharing-files_sharing_tab.js?v=7f2811313e1689cae10c","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/files_sharing/src/services/ConfigService.js","webpack:///nextcloud/apps/files_sharing/src/models/Share.js","webpack:///nextcloud/apps/files_sharing/src/mixins/ShareTypes.js","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntrySimple.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntrySimple.vue","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntrySimple.vue?1b73","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntrySimple.vue?cb12","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntrySimple.vue?0c02","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryInternal.vue","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryInternal.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntryInternal.vue?00d7","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntryInternal.vue?4c20","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntryInternal.vue?6c02","webpack:///nextcloud/apps/files_sharing/src/utils/GeneratePassword.js","webpack:///nextcloud/apps/files_sharing/src/mixins/ShareRequests.js","webpack:///nextcloud/apps/files_sharing/src/components/SharingInput.vue","webpack:///nextcloud/apps/files_sharing/src/components/SharingInput.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files_sharing/src/components/SharingInput.vue?9a14","webpack://nextcloud/./apps/files_sharing/src/components/SharingInput.vue?3d7c","webpack://nextcloud/./apps/files_sharing/src/components/SharingInput.vue?65df","webpack:///nextcloud/apps/files_sharing/src/mixins/SharesMixin.js","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryInherited.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryInherited.vue","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntryInherited.vue?4cb0","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntryInherited.vue?0e5a","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntryInherited.vue?77d5","webpack:///nextcloud/apps/files_sharing/src/views/SharingInherited.vue","webpack:///nextcloud/apps/files_sharing/src/views/SharingInherited.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files_sharing/src/views/SharingInherited.vue?42d8","webpack://nextcloud/./apps/files_sharing/src/views/SharingInherited.vue?1677","webpack://nextcloud/./apps/files_sharing/src/views/SharingInherited.vue?45a6","webpack:///nextcloud/apps/files_sharing/src/components/ExternalShareAction.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files_sharing/src/components/ExternalShareAction.vue","webpack://nextcloud/./apps/files_sharing/src/components/ExternalShareAction.vue?9bf3","webpack://nextcloud/./apps/files_sharing/src/components/ExternalShareAction.vue?82b4","webpack:///nextcloud/apps/files_sharing/src/lib/SharePermissionsToolBox.js","webpack:///nextcloud/apps/files_sharing/src/components/SharePermissionsEditor.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files_sharing/src/components/SharePermissionsEditor.vue","webpack://nextcloud/./apps/files_sharing/src/components/SharePermissionsEditor.vue?b011","webpack://nextcloud/./apps/files_sharing/src/components/SharePermissionsEditor.vue?f133","webpack://nextcloud/./apps/files_sharing/src/components/SharePermissionsEditor.vue?f69b","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryLink.vue","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryLink.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntryLink.vue?0bfc","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntryLink.vue?af90","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntryLink.vue?64e9","webpack:///nextcloud/apps/files_sharing/src/views/SharingLinkList.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files_sharing/src/views/SharingLinkList.vue","webpack://nextcloud/./apps/files_sharing/src/views/SharingLinkList.vue?a70b","webpack://nextcloud/./apps/files_sharing/src/views/SharingLinkList.vue?de0b","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntry.vue","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntry.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntry.vue?16b5","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntry.vue?10a7","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntry.vue?f8d7","webpack:///nextcloud/apps/files_sharing/src/views/SharingList.vue","webpack:///nextcloud/apps/files_sharing/src/views/SharingList.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files_sharing/src/views/SharingList.vue?9f9c","webpack://nextcloud/./apps/files_sharing/src/views/SharingList.vue?e340","webpack:///nextcloud/apps/files_sharing/src/views/SharingTab.vue","webpack:///nextcloud/apps/files_sharing/src/utils/SharedWithMe.js","webpack:///nextcloud/apps/files_sharing/src/views/SharingTab.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files_sharing/src/views/SharingTab.vue?8704","webpack://nextcloud/./apps/files_sharing/src/views/SharingTab.vue?6997","webpack://nextcloud/./apps/files_sharing/src/views/SharingTab.vue?0ae8","webpack:///nextcloud/apps/files_sharing/src/services/ShareSearch.js","webpack:///nextcloud/apps/files_sharing/src/services/ExternalLinkActions.js","webpack:///nextcloud/apps/files_sharing/src/services/ExternalShareActions.js","webpack:///nextcloud/apps/files_sharing/src/services/TabSections.js","webpack:///nextcloud/apps/files_sharing/src/files_sharing_tab.js","webpack:///nextcloud/apps/files_sharing/src/components/SharePermissionsEditor.vue?vue&type=style&index=0&id=5e957d09&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntry.vue?vue&type=style&index=0&id=13a6a5f0&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryInherited.vue?vue&type=style&index=0&id=23251e4a&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryInternal.vue?vue&type=style&index=0&id=69e43ddc&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryLink.vue?vue&type=style&index=0&id=10855e60&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntrySimple.vue?vue&type=style&index=0&id=9fd256bc&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingInput.vue?vue&type=style&index=0&id=43c265ae&prod&lang=scss&","webpack:///nextcloud/apps/files_sharing/src/views/SharingInherited.vue?vue&type=style&index=0&id=3462b966&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/views/SharingTab.vue?vue&type=style&index=0&id=56c61b11&prod&scoped=true&lang=scss&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Arthur Schiwon <blizzz@arthur-schiwon.de>\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\nexport default class Config {\n\n\t/**\n\t * Is public upload allowed on link shares ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isPublicUploadEnabled() {\n\t\treturn document.getElementsByClassName('files-filestable')[0]\n\t\t\t&& document.getElementsByClassName('files-filestable')[0].dataset.allowPublicUpload === 'yes'\n\t}\n\n\t/**\n\t * Are link share allowed ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isShareWithLinkAllowed() {\n\t\treturn document.getElementById('allowShareWithLink')\n\t\t\t&& document.getElementById('allowShareWithLink').value === 'yes'\n\t}\n\n\t/**\n\t * Get the federated sharing documentation link\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget federatedShareDocLink() {\n\t\treturn OC.appConfig.core.federatedCloudShareDoc\n\t}\n\n\t/**\n\t * Get the default link share expiration date\n\t *\n\t * @return {Date|null}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget defaultExpirationDate() {\n\t\tif (this.isDefaultExpireDateEnabled) {\n\t\t\treturn new Date(new Date().setDate(new Date().getDate() + this.defaultExpireDate))\n\t\t}\n\t\treturn null\n\t}\n\n\t/**\n\t * Get the default internal expiration date\n\t *\n\t * @return {Date|null}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget defaultInternalExpirationDate() {\n\t\tif (this.isDefaultInternalExpireDateEnabled) {\n\t\t\treturn new Date(new Date().setDate(new Date().getDate() + this.defaultInternalExpireDate))\n\t\t}\n\t\treturn null\n\t}\n\n\t/**\n\t * Get the default remote expiration date\n\t *\n\t * @return {Date|null}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget defaultRemoteExpirationDateString() {\n\t\tif (this.isDefaultRemoteExpireDateEnabled) {\n\t\t\treturn new Date(new Date().setDate(new Date().getDate() + this.defaultRemoteExpireDate))\n\t\t}\n\t\treturn null\n\t}\n\n\t/**\n\t * Are link shares password-enforced ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget enforcePasswordForPublicLink() {\n\t\treturn OC.appConfig.core.enforcePasswordForPublicLink === true\n\t}\n\n\t/**\n\t * Is password asked by default on link shares ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget enableLinkPasswordByDefault() {\n\t\treturn OC.appConfig.core.enableLinkPasswordByDefault === true\n\t}\n\n\t/**\n\t * Is link shares expiration enforced ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isDefaultExpireDateEnforced() {\n\t\treturn OC.appConfig.core.defaultExpireDateEnforced === true\n\t}\n\n\t/**\n\t * Is there a default expiration date for new link shares ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isDefaultExpireDateEnabled() {\n\t\treturn OC.appConfig.core.defaultExpireDateEnabled === true\n\t}\n\n\t/**\n\t * Is internal shares expiration enforced ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isDefaultInternalExpireDateEnforced() {\n\t\treturn OC.appConfig.core.defaultInternalExpireDateEnforced === true\n\t}\n\n\t/**\n\t * Is remote shares expiration enforced ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isDefaultRemoteExpireDateEnforced() {\n\t\treturn OC.appConfig.core.defaultRemoteExpireDateEnforced === true\n\t}\n\n\t/**\n\t * Is there a default expiration date for new internal shares ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isDefaultInternalExpireDateEnabled() {\n\t\treturn OC.appConfig.core.defaultInternalExpireDateEnabled === true\n\t}\n\n\t/**\n\t * Is there a default expiration date for new remote shares ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isDefaultRemoteExpireDateEnabled() {\n\t\treturn OC.appConfig.core.defaultRemoteExpireDateEnabled === true\n\t}\n\n\t/**\n\t * Are users on this server allowed to send shares to other servers ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isRemoteShareAllowed() {\n\t\treturn OC.appConfig.core.remoteShareAllowed === true\n\t}\n\n\t/**\n\t * Is sharing my mail (link share) enabled ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isMailShareAllowed() {\n\t\tconst capabilities = OC.getCapabilities()\n\t\t// eslint-disable-next-line camelcase\n\t\treturn capabilities?.files_sharing?.sharebymail !== undefined\n\t\t\t// eslint-disable-next-line camelcase\n\t\t\t&& capabilities?.files_sharing?.public?.enabled === true\n\t}\n\n\t/**\n\t * Get the default days to link shares expiration\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget defaultExpireDate() {\n\t\treturn OC.appConfig.core.defaultExpireDate\n\t}\n\n\t/**\n\t * Get the default days to internal shares expiration\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget defaultInternalExpireDate() {\n\t\treturn OC.appConfig.core.defaultInternalExpireDate\n\t}\n\n\t/**\n\t * Get the default days to remote shares expiration\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget defaultRemoteExpireDate() {\n\t\treturn OC.appConfig.core.defaultRemoteExpireDate\n\t}\n\n\t/**\n\t * Is resharing allowed ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isResharingAllowed() {\n\t\treturn OC.appConfig.core.resharingAllowed === true\n\t}\n\n\t/**\n\t * Is password enforced for mail shares ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isPasswordForMailSharesRequired() {\n\t\treturn (OC.getCapabilities().files_sharing.sharebymail === undefined) ? false : OC.getCapabilities().files_sharing.sharebymail.password.enforced\n\t}\n\n\t/**\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget shouldAlwaysShowUnique() {\n\t\treturn (OC.getCapabilities().files_sharing?.sharee?.always_show_unique === true)\n\t}\n\n\t/**\n\t * Is sharing with groups allowed ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget allowGroupSharing() {\n\t\treturn OC.appConfig.core.allowGroupSharing === true\n\t}\n\n\t/**\n\t * Get the maximum results of a share search\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget maxAutocompleteResults() {\n\t\treturn parseInt(OC.config['sharing.maxAutocompleteResults'], 10) || 25\n\t}\n\n\t/**\n\t * Get the minimal string length\n\t * to initiate a share search\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget minSearchStringLength() {\n\t\treturn parseInt(OC.config['sharing.minSearchStringLength'], 10) || 0\n\t}\n\n\t/**\n\t * Get the password policy config\n\t *\n\t * @return {object}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget passwordPolicy() {\n\t\tconst capabilities = OC.getCapabilities()\n\t\treturn capabilities.password_policy ? capabilities.password_policy : {}\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author Gary Kim <gary@garykim.dev>\n * @author Georg Ehrke <oc.list@georgehrke.com>\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\nexport default class Share {\n\n\t_share\n\n\t/**\n\t * Create the share object\n\t *\n\t * @param {object} ocsData ocs request response\n\t */\n\tconstructor(ocsData) {\n\t\tif (ocsData.ocs && ocsData.ocs.data && ocsData.ocs.data[0]) {\n\t\t\tocsData = ocsData.ocs.data[0]\n\t\t}\n\n\t\t// convert int into boolean\n\t\tocsData.hide_download = !!ocsData.hide_download\n\t\tocsData.mail_send = !!ocsData.mail_send\n\n\t\tif (ocsData.attributes) {\n\t\t\ttry {\n\t\t\t\tocsData.attributes = JSON.parse(ocsData.attributes)\n\t\t\t} catch (e) {\n\t\t\t\tconsole.warn('Could not parse share attributes returned by server: \"' + ocsData.attributes + '\"')\n\t\t\t}\n\t\t}\n\t\tocsData.attributes = ocsData.attributes ?? []\n\n\t\t// store state\n\t\tthis._share = ocsData\n\t}\n\n\t/**\n\t * Get the share state\n\t * ! used for reactivity purpose\n\t * Do not remove. It allow vuejs to\n\t * inject its watchers into the #share\n\t * state and make the whole class reactive\n\t *\n\t * @return {object} the share raw state\n\t * @readonly\n\t * @memberof Sidebar\n\t */\n\tget state() {\n\t\treturn this._share\n\t}\n\n\t/**\n\t * get the share id\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget id() {\n\t\treturn this._share.id\n\t}\n\n\t/**\n\t * Get the share type\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget type() {\n\t\treturn this._share.share_type\n\t}\n\n\t/**\n\t * Get the share permissions\n\t * See OC.PERMISSION_* variables\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget permissions() {\n\t\treturn this._share.permissions\n\t}\n\n\t/**\n\t * Get the share attributes\n\t *\n\t * @return {Array}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget attributes() {\n\t\treturn this._share.attributes\n\t}\n\n\t/**\n\t * Set the share permissions\n\t * See OC.PERMISSION_* variables\n\t *\n\t * @param {number} permissions valid permission, See OC.PERMISSION_* variables\n\t * @memberof Share\n\t */\n\tset permissions(permissions) {\n\t\tthis._share.permissions = permissions\n\t}\n\n\t// SHARE OWNER --------------------------------------------------\n\t/**\n\t * Get the share owner uid\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget owner() {\n\t\treturn this._share.uid_owner\n\t}\n\n\t/**\n\t * Get the share owner's display name\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget ownerDisplayName() {\n\t\treturn this._share.displayname_owner\n\t}\n\n\t// SHARED WITH --------------------------------------------------\n\t/**\n\t * Get the share with entity uid\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget shareWith() {\n\t\treturn this._share.share_with\n\t}\n\n\t/**\n\t * Get the share with entity display name\n\t * fallback to its uid if none\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget shareWithDisplayName() {\n\t\treturn this._share.share_with_displayname\n\t\t\t|| this._share.share_with\n\t}\n\n\t/**\n\t * Unique display name in case of multiple\n\t * duplicates results with the same name.\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget shareWithDisplayNameUnique() {\n\t\treturn this._share.share_with_displayname_unique\n\t\t\t|| this._share.share_with\n\t}\n\n\t/**\n\t * Get the share with entity link\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget shareWithLink() {\n\t\treturn this._share.share_with_link\n\t}\n\n\t/**\n\t * Get the share with avatar if any\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget shareWithAvatar() {\n\t\treturn this._share.share_with_avatar\n\t}\n\n\t// SHARED FILE OR FOLDER OWNER ----------------------------------\n\t/**\n\t * Get the shared item owner uid\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget uidFileOwner() {\n\t\treturn this._share.uid_file_owner\n\t}\n\n\t/**\n\t * Get the shared item display name\n\t * fallback to its uid if none\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget displaynameFileOwner() {\n\t\treturn this._share.displayname_file_owner\n\t\t\t|| this._share.uid_file_owner\n\t}\n\n\t// TIME DATA ----------------------------------------------------\n\t/**\n\t * Get the share creation timestamp\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget createdTime() {\n\t\treturn this._share.stime\n\t}\n\n\t/**\n\t * Get the expiration date\n\t *\n\t * @return {string} date with YYYY-MM-DD format\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget expireDate() {\n\t\treturn this._share.expiration\n\t}\n\n\t/**\n\t * Set the expiration date\n\t *\n\t * @param {string} date the share expiration date with YYYY-MM-DD format\n\t * @memberof Share\n\t */\n\tset expireDate(date) {\n\t\tthis._share.expiration = date\n\t}\n\n\t// EXTRA DATA ---------------------------------------------------\n\t/**\n\t * Get the public share token\n\t *\n\t * @return {string} the token\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget token() {\n\t\treturn this._share.token\n\t}\n\n\t/**\n\t * Get the share note if any\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget note() {\n\t\treturn this._share.note\n\t}\n\n\t/**\n\t * Set the share note if any\n\t *\n\t * @param {string} note the note\n\t * @memberof Share\n\t */\n\tset note(note) {\n\t\tthis._share.note = note\n\t}\n\n\t/**\n\t * Get the share label if any\n\t * Should only exist on link shares\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget label() {\n\t\treturn this._share.label\n\t}\n\n\t/**\n\t * Set the share label if any\n\t * Should only be set on link shares\n\t *\n\t * @param {string} label the label\n\t * @memberof Share\n\t */\n\tset label(label) {\n\t\tthis._share.label = label\n\t}\n\n\t/**\n\t * Have a mail been sent\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget mailSend() {\n\t\treturn this._share.mail_send === true\n\t}\n\n\t/**\n\t * Hide the download button on public page\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget hideDownload() {\n\t\treturn this._share.hide_download === true\n\t}\n\n\t/**\n\t * Hide the download button on public page\n\t *\n\t * @param {boolean} state hide the button ?\n\t * @memberof Share\n\t */\n\tset hideDownload(state) {\n\t\tthis._share.hide_download = state === true\n\t}\n\n\t/**\n\t * Password protection of the share\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget password() {\n\t\treturn this._share.password\n\t}\n\n\t/**\n\t * Password protection of the share\n\t *\n\t * @param {string} password the share password\n\t * @memberof Share\n\t */\n\tset password(password) {\n\t\tthis._share.password = password\n\t}\n\n\t/**\n\t * Password expiration time\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget passwordExpirationTime() {\n\t\treturn this._share.password_expiration_time\n\t}\n\n\t/**\n\t * Password expiration time\n\t *\n\t * @param {string} password expiration time\n\t * @memberof Share\n\t */\n\tset passwordExpirationTime(passwordExpirationTime) {\n\t\tthis._share.password_expiration_time = passwordExpirationTime\n\t}\n\n\t/**\n\t * Password protection by Talk of the share\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget sendPasswordByTalk() {\n\t\treturn this._share.send_password_by_talk\n\t}\n\n\t/**\n\t * Password protection by Talk of the share\n\t *\n\t * @param {boolean} sendPasswordByTalk whether to send the password by Talk\n\t * or not\n\t * @memberof Share\n\t */\n\tset sendPasswordByTalk(sendPasswordByTalk) {\n\t\tthis._share.send_password_by_talk = sendPasswordByTalk\n\t}\n\n\t// SHARED ITEM DATA ---------------------------------------------\n\t/**\n\t * Get the shared item absolute full path\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget path() {\n\t\treturn this._share.path\n\t}\n\n\t/**\n\t * Return the item type: file or folder\n\t *\n\t * @return {string} 'folder' or 'file'\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget itemType() {\n\t\treturn this._share.item_type\n\t}\n\n\t/**\n\t * Get the shared item mimetype\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget mimetype() {\n\t\treturn this._share.mimetype\n\t}\n\n\t/**\n\t * Get the shared item id\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget fileSource() {\n\t\treturn this._share.file_source\n\t}\n\n\t/**\n\t * Get the target path on the receiving end\n\t * e.g the file /xxx/aaa will be shared in\n\t * the receiving root as /aaa, the fileTarget is /aaa\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget fileTarget() {\n\t\treturn this._share.file_target\n\t}\n\n\t/**\n\t * Get the parent folder id if any\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget fileParent() {\n\t\treturn this._share.file_parent\n\t}\n\n\t// PERMISSIONS Shortcuts\n\n\t/**\n\t * Does this share have READ permissions\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget hasReadPermission() {\n\t\treturn !!((this.permissions & OC.PERMISSION_READ))\n\t}\n\n\t/**\n\t * Does this share have CREATE permissions\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget hasCreatePermission() {\n\t\treturn !!((this.permissions & OC.PERMISSION_CREATE))\n\t}\n\n\t/**\n\t * Does this share have DELETE permissions\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget hasDeletePermission() {\n\t\treturn !!((this.permissions & OC.PERMISSION_DELETE))\n\t}\n\n\t/**\n\t * Does this share have UPDATE permissions\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget hasUpdatePermission() {\n\t\treturn !!((this.permissions & OC.PERMISSION_UPDATE))\n\t}\n\n\t/**\n\t * Does this share have SHARE permissions\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget hasSharePermission() {\n\t\treturn !!((this.permissions & OC.PERMISSION_SHARE))\n\t}\n\n\t/**\n\t * Does this share have download permissions\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget hasDownloadPermission() {\n\t\tfor (const i in this._share.attributes) {\n\t\t\tconst attr = this._share.attributes[i]\n\t\t\tif (attr.scope === 'permissions' && attr.key === 'download') {\n\t\t\t\treturn attr.enabled\n\t\t\t}\n\t\t}\n\n\t\treturn true\n\t}\n\n\tset hasDownloadPermission(enabled) {\n\t\tthis.setAttribute('permissions', 'download', !!enabled)\n\t}\n\n\tsetAttribute(scope, key, enabled) {\n\t\tconst attrUpdate = {\n\t\t\tscope,\n\t\t\tkey,\n\t\t\tenabled,\n\t\t}\n\n\t\t// try and replace existing\n\t\tfor (const i in this._share.attributes) {\n\t\t\tconst attr = this._share.attributes[i]\n\t\t\tif (attr.scope === attrUpdate.scope && attr.key === attrUpdate.key) {\n\t\t\t\tthis._share.attributes[i] = attrUpdate\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\t\tthis._share.attributes.push(attrUpdate)\n\t}\n\n\t// PERMISSIONS Shortcuts for the CURRENT USER\n\t// ! the permissions above are the share settings,\n\t// ! meaning the permissions for the recipient\n\t/**\n\t * Can the current user EDIT this share ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget canEdit() {\n\t\treturn this._share.can_edit === true\n\t}\n\n\t/**\n\t * Can the current user DELETE this share ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget canDelete() {\n\t\treturn this._share.can_delete === true\n\t}\n\n\t/**\n\t * Top level accessible shared folder fileid for the current user\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget viaFileid() {\n\t\treturn this._share.via_fileid\n\t}\n\n\t/**\n\t * Top level accessible shared folder path for the current user\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget viaPath() {\n\t\treturn this._share.via_path\n\t}\n\n\t// TODO: SORT THOSE PROPERTIES\n\n\tget parent() {\n\t\treturn this._share.parent\n\t}\n\n\tget storageId() {\n\t\treturn this._share.storage_id\n\t}\n\n\tget storage() {\n\t\treturn this._share.storage\n\t}\n\n\tget itemSource() {\n\t\treturn this._share.item_source\n\t}\n\n\tget status() {\n\t\treturn this._share.status\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { Type as ShareTypes } from '@nextcloud/sharing'\n\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tSHARE_TYPES: ShareTypes,\n\t\t}\n\t},\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntrySimple.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!./SharingEntrySimple.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<li class=\"sharing-entry\">\n\t\t<slot name=\"avatar\" />\n\t\t<div class=\"sharing-entry__desc\">\n\t\t\t<span class=\"sharing-entry__title\">{{ title }}</span>\n\t\t\t<p v-if=\"subtitle\">\n\t\t\t\t{{ subtitle }}\n\t\t\t</p>\n\t\t</div>\n\t\t<NcActions ref=\"actionsComponent\"\n\t\t\tv-if=\"$slots['default']\"\n\t\t\tclass=\"sharing-entry__actions\"\n\t\t\tmenu-align=\"right\"\n\t\t\t:aria-expanded=\"ariaExpandedValue\">\n\t\t\t<slot />\n\t\t</NcActions>\n\t</li>\n</template>\n\n<script>\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions'\n\nexport default {\n\tname: 'SharingEntrySimple',\n\n\tcomponents: {\n\t\tNcActions,\n\t},\n\n\tprops: {\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t\trequired: true,\n\t\t},\n\t\tsubtitle: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tisUnique: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tariaExpanded: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tariaExpandedValue() {\n\t\t\tif (this.ariaExpanded === null) {\n\t\t\t\treturn this.ariaExpanded\n\t\t\t}\n\t\t\treturn this.ariaExpanded ? 'true' : 'false'\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.sharing-entry {\n\tdisplay: flex;\n\talign-items: center;\n\tmin-height: 44px;\n\t&__desc {\n\t\tpadding: 8px;\n\t\tline-height: 1.2em;\n\t\tposition: relative;\n\t\tflex: 1 1;\n\t\tmin-width: 0;\n\t\tp {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n\t&__title {\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\toverflow: hidden;\n\t\tmax-width: inherit;\n\t}\n\t&__actions {\n\t\tmargin-left: auto !important;\n\t}\n}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntrySimple.vue?vue&type=style&index=0&id=9fd256bc&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntrySimple.vue?vue&type=style&index=0&id=9fd256bc&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SharingEntrySimple.vue?vue&type=template&id=9fd256bc&scoped=true&\"\nimport script from \"./SharingEntrySimple.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingEntrySimple.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SharingEntrySimple.vue?vue&type=style&index=0&id=9fd256bc&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9fd256bc\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('li',{staticClass:\"sharing-entry\"},[_vm._t(\"avatar\"),_vm._v(\" \"),_c('div',{staticClass:\"sharing-entry__desc\"},[_c('span',{staticClass:\"sharing-entry__title\"},[_vm._v(_vm._s(_vm.title))]),_vm._v(\" \"),(_vm.subtitle)?_c('p',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.subtitle)+\"\\n\\t\\t\")]):_vm._e()]),_vm._v(\" \"),(_vm.$slots['default'])?_c('NcActions',{ref:\"actionsComponent\",staticClass:\"sharing-entry__actions\",attrs:{\"menu-align\":\"right\",\"aria-expanded\":_vm.ariaExpandedValue}},[_vm._t(\"default\")],2):_vm._e()],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n<template>\n\t<ul>\n\t\t<SharingEntrySimple ref=\"shareEntrySimple\"\n\t\t\tclass=\"sharing-entry__internal\"\n\t\t\t:title=\"t('files_sharing', 'Internal link')\"\n\t\t\t:subtitle=\"internalLinkSubtitle\">\n\t\t\t<template #avatar>\n\t\t\t\t<div class=\"avatar-external icon-external-white\" />\n\t\t\t</template>\n\n\t\t\t<NcActionLink :href=\"internalLink\"\n\t\t\t\t:aria-label=\"copyLinkTooltip\"\n\t\t\t\t:title=\"copyLinkTooltip\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\t:icon=\"copied && copySuccess ? 'icon-checkmark-color' : 'icon-clippy'\"\n\t\t\t\t@click.prevent=\"copyLink\" />\n\t\t</SharingEntrySimple>\n\t</ul>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport { showSuccess } from '@nextcloud/dialogs'\nimport NcActionLink from '@nextcloud/vue/dist/Components/NcActionLink'\nimport SharingEntrySimple from './SharingEntrySimple'\n\nexport default {\n\tname: 'SharingEntryInternal',\n\n\tcomponents: {\n\t\tNcActionLink,\n\t\tSharingEntrySimple,\n\t},\n\n\tprops: {\n\t\tfileInfo: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => {},\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tcopied: false,\n\t\t\tcopySuccess: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Get the internal link to this file id\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tinternalLink() {\n\t\t\treturn window.location.protocol + '//' + window.location.host + generateUrl('/f/') + this.fileInfo.id\n\t\t},\n\n\t\t/**\n\t\t * Tooltip message\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tcopyLinkTooltip() {\n\t\t\tif (this.copied) {\n\t\t\t\tif (this.copySuccess) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\t\t\t\treturn t('files_sharing', 'Cannot copy, please copy the link manually')\n\t\t\t}\n\t\t\treturn t('files_sharing', 'Copy internal link to clipboard')\n\t\t},\n\n\t\tinternalLinkSubtitle() {\n\t\t\tif (this.fileInfo.type === 'dir') {\n\t\t\t\treturn t('files_sharing', 'Only works for users with access to this folder')\n\t\t\t}\n\t\t\treturn t('files_sharing', 'Only works for users with access to this file')\n\t\t},\n\t},\n\n\tmethods: {\n\t\tasync copyLink() {\n\t\t\ttry {\n\t\t\t\tawait navigator.clipboard.writeText(this.internalLink)\n\t\t\t\tshowSuccess(t('files_sharing', 'Link copied'))\n\t\t\t\t// focus and show the tooltip (note: cannot set ref on NcActionLink)\n\t\t\t\tthis.$refs.shareEntrySimple.$refs.actionsComponent.$el.focus()\n\t\t\t\tthis.copySuccess = true\n\t\t\t\tthis.copied = true\n\t\t\t} catch (error) {\n\t\t\t\tthis.copySuccess = false\n\t\t\t\tthis.copied = true\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.copySuccess = false\n\t\t\t\t\tthis.copied = false\n\t\t\t\t}, 4000)\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.sharing-entry__internal {\n\t.avatar-external {\n\t\twidth: 32px;\n\t\theight: 32px;\n\t\tline-height: 32px;\n\t\tfont-size: 18px;\n\t\tbackground-color: var(--color-text-maxcontrast);\n\t\tborder-radius: 50%;\n\t\tflex-shrink: 0;\n\t}\n\t.icon-checkmark-color {\n\t\topacity: 1;\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntryInternal.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!./SharingEntryInternal.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntryInternal.vue?vue&type=style&index=0&id=69e43ddc&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntryInternal.vue?vue&type=style&index=0&id=69e43ddc&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SharingEntryInternal.vue?vue&type=template&id=69e43ddc&scoped=true&\"\nimport script from \"./SharingEntryInternal.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingEntryInternal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SharingEntryInternal.vue?vue&type=style&index=0&id=69e43ddc&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"69e43ddc\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('ul',[_c('SharingEntrySimple',{ref:\"shareEntrySimple\",staticClass:\"sharing-entry__internal\",attrs:{\"title\":_vm.t('files_sharing', 'Internal link'),\"subtitle\":_vm.internalLinkSubtitle},scopedSlots:_vm._u([{key:\"avatar\",fn:function(){return [_c('div',{staticClass:\"avatar-external icon-external-white\"})]},proxy:true}])},[_vm._v(\" \"),_c('NcActionLink',{attrs:{\"href\":_vm.internalLink,\"aria-label\":_vm.copyLinkTooltip,\"title\":_vm.copyLinkTooltip,\"target\":\"_blank\",\"icon\":_vm.copied && _vm.copySuccess ? 'icon-checkmark-color' : 'icon-clippy'},on:{\"click\":function($event){$event.preventDefault();return _vm.copyLink.apply(null, arguments)}}})],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a 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 Config from '../services/ConfigService'\nimport { showError, showSuccess } from '@nextcloud/dialogs'\n\nconst config = new Config()\n// note: some chars removed on purpose to make them human friendly when read out\nconst passwordSet = 'abcdefgijkmnopqrstwxyzABCDEFGHJKLMNPQRSTWXYZ23456789'\n\n/**\n * Generate a valid policy password or\n * request a valid password if password_policy\n * is enabled\n *\n * @return {string} a valid password\n */\nexport default async function() {\n\t// password policy is enabled, let's request a pass\n\tif (config.passwordPolicy.api && config.passwordPolicy.api.generate) {\n\t\ttry {\n\t\t\tconst request = await axios.get(config.passwordPolicy.api.generate)\n\t\t\tif (request.data.ocs.data.password) {\n\t\t\t\tshowSuccess(t('files_sharing', 'Password created successfully'))\n\t\t\t\treturn request.data.ocs.data.password\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.info('Error generating password from password_policy', error)\n\t\t\tshowError(t('files_sharing', 'Error generating password from password policy'))\n\t\t}\n\t}\n\n\tconst array = new Uint8Array(10)\n\tconst ratio = passwordSet.length / 255\n\tself.crypto.getRandomValues(array)\n\tlet password = ''\n\tfor (let i = 0; i < array.length; i++) {\n\t\tpassword += passwordSet.charAt(array[i] * ratio)\n\t}\n\treturn password\n}\n","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.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 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// TODO: remove when ie not supported\nimport 'url-search-params-polyfill'\n\nimport { generateOcsUrl } from '@nextcloud/router'\nimport axios from '@nextcloud/axios'\nimport Share from '../models/Share'\nimport { emit } from '@nextcloud/event-bus'\n\nconst shareUrl = generateOcsUrl('apps/files_sharing/api/v1/shares')\n\nexport default {\n\tmethods: {\n\t\t/**\n\t\t * Create a new share\n\t\t *\n\t\t * @param {object} data destructuring object\n\t\t * @param {string} data.path path to the file/folder which should be shared\n\t\t * @param {number} data.shareType 0 = user; 1 = group; 3 = public link; 6 = federated cloud share\n\t\t * @param {string} data.shareWith user/group id with which the file should be shared (optional for shareType > 1)\n\t\t * @param {boolean} [data.publicUpload=false] allow public upload to a public shared folder\n\t\t * @param {string} [data.password] password to protect public link Share with\n\t\t * @param {number} [data.permissions=31] 1 = read; 2 = update; 4 = create; 8 = delete; 16 = share; 31 = all (default: 31, for public shares: 1)\n\t\t * @param {boolean} [data.sendPasswordByTalk=false] send the password via a talk conversation\n\t\t * @param {string} [data.expireDate=''] expire the shareautomatically after\n\t\t * @param {string} [data.label=''] custom label\n\t\t * @param {string} [data.attributes=null] Share attributes encoded as json\n\t\t * @return {Share} the new share\n\t\t * @throws {Error}\n\t\t */\n\t\tasync createShare({ path, permissions, shareType, shareWith, publicUpload, password, sendPasswordByTalk, expireDate, label, attributes }) {\n\t\t\ttry {\n\t\t\t\tconst request = await axios.post(shareUrl, { path, permissions, shareType, shareWith, publicUpload, password, sendPasswordByTalk, expireDate, label, attributes })\n\t\t\t\tif (!request?.data?.ocs) {\n\t\t\t\t\tthrow request\n\t\t\t\t}\n\t\t\t\tconst share = new Share(request.data.ocs.data)\n\t\t\t\temit('files_sharing:share:created', { share })\n\t\t\t\treturn share\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Error while creating share', error)\n\t\t\t\tconst errorMessage = error?.response?.data?.ocs?.meta?.message\n\t\t\t\tOC.Notification.showTemporary(\n\t\t\t\t\terrorMessage ? t('files_sharing', 'Error creating the share: {errorMessage}', { errorMessage }) : t('files_sharing', 'Error creating the share'),\n\t\t\t\t\t{ type: 'error' }\n\t\t\t\t)\n\t\t\t\tthrow error\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Delete a share\n\t\t *\n\t\t * @param {number} id share id\n\t\t * @throws {Error}\n\t\t */\n\t\tasync deleteShare(id) {\n\t\t\ttry {\n\t\t\t\tconst request = await axios.delete(shareUrl + `/${id}`)\n\t\t\t\tif (!request?.data?.ocs) {\n\t\t\t\t\tthrow request\n\t\t\t\t}\n\t\t\t\temit('files_sharing:share:deleted', { id })\n\t\t\t\treturn true\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Error while deleting share', error)\n\t\t\t\tconst errorMessage = error?.response?.data?.ocs?.meta?.message\n\t\t\t\tOC.Notification.showTemporary(\n\t\t\t\t\terrorMessage ? t('files_sharing', 'Error deleting the share: {errorMessage}', { errorMessage }) : t('files_sharing', 'Error deleting the share'),\n\t\t\t\t\t{ type: 'error' }\n\t\t\t\t)\n\t\t\t\tthrow error\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Update a share\n\t\t *\n\t\t * @param {number} id share id\n\t\t * @param {object} properties key-value object of the properties to update\n\t\t */\n\t\tasync updateShare(id, properties) {\n\t\t\ttry {\n\t\t\t\tconst request = await axios.put(shareUrl + `/${id}`, properties)\n\t\t\t\temit('files_sharing:share:updated', { id })\n\t\t\t\tif (!request?.data?.ocs) {\n\t\t\t\t\tthrow request\n\t\t\t\t} else {\n\t\t\t\t\treturn request.data.ocs.data\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Error while updating share', error)\n\t\t\t\tif (error.response.status !== 400) {\n\t\t\t\t\tconst errorMessage = error?.response?.data?.ocs?.meta?.message\n\t\t\t\t\tOC.Notification.showTemporary(\n\t\t\t\t\t\terrorMessage ? t('files_sharing', 'Error updating the share: {errorMessage}', { errorMessage }) : t('files_sharing', 'Error updating the share'),\n\t\t\t\t\t\t{ type: 'error' }\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tconst message = error.response.data.ocs.meta.message\n\t\t\t\tthrow new Error(message)\n\t\t\t}\n\t\t},\n\t},\n}\n","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div class=\"sharing-search\">\n\t\t<label for=\"sharing-search-input\">{{ t('files_sharing', 'Search for share recipients') }}</label>\n\t\t<NcSelect ref=\"select\"\n\t\t\tid=\"sharing-search-input\"\n\t\t\tclass=\"sharing-search__input\"\n\t\t\t:disabled=\"!canReshare\"\n\t\t\t:loading=\"loading\"\n\t\t\t:filterable=\"false\"\n\t\t\t:placeholder=\"inputPlaceholder\"\n\t\t\t:clear-search-on-blur=\"() => false\"\n\t\t\t:user-select=\"true\"\n\t\t\t:options=\"options\"\n\t\t\tv-model=\"value\"\n\t\t\t@open=\"handleOpen\"\n\t\t\t@search=\"asyncFind\"\n\t\t\t@option:selected=\"addShare\">\n\t\t\t<template #no-options=\"{ search }\">\n\t\t\t\t{{ search ? noResultText : t('files_sharing', 'No recommendations. Start typing.') }}\n\t\t\t</template>\n\t\t</NcSelect>\n\t</div>\n</template>\n\n<script>\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { emit } from '@nextcloud/event-bus'\nimport axios from '@nextcloud/axios'\nimport debounce from 'debounce'\nimport NcSelect from '@nextcloud/vue/dist/Components/NcSelect.js'\n\nimport Config from '../services/ConfigService'\nimport GeneratePassword from '../utils/GeneratePassword'\nimport Share from '../models/Share'\nimport ShareRequests from '../mixins/ShareRequests'\nimport ShareTypes from '../mixins/ShareTypes'\n\nexport default {\n\tname: 'SharingInput',\n\n\tcomponents: {\n\t\tNcSelect,\n\t},\n\n\tmixins: [ShareTypes, ShareRequests],\n\n\tprops: {\n\t\tshares: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t\trequired: true,\n\t\t},\n\t\tlinkShares: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t\trequired: true,\n\t\t},\n\t\tfileInfo: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => {},\n\t\t\trequired: true,\n\t\t},\n\t\treshare: {\n\t\t\ttype: Share,\n\t\t\tdefault: null,\n\t\t},\n\t\tcanReshare: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tconfig: new Config(),\n\t\t\tloading: false,\n\t\t\tquery: '',\n\t\t\trecommendations: [],\n\t\t\tShareSearch: OCA.Sharing.ShareSearch.state,\n\t\t\tsuggestions: [],\n\t\t\tvalue: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Implement ShareSearch\n\t\t * allows external appas to inject new\n\t\t * results into the autocomplete dropdown\n\t\t * Used for the guests app\n\t\t *\n\t\t * @return {Array}\n\t\t */\n\t\texternalResults() {\n\t\t\treturn this.ShareSearch.results\n\t\t},\n\t\tinputPlaceholder() {\n\t\t\tconst allowRemoteSharing = this.config.isRemoteShareAllowed\n\n\t\t\tif (!this.canReshare) {\n\t\t\t\treturn t('files_sharing', 'Resharing is not allowed')\n\t\t\t}\n\t\t\t// We can always search with email addresses for users too\n\t\t\tif (!allowRemoteSharing) {\n\t\t\t\treturn t('files_sharing', 'Name or email …')\n\t\t\t}\n\n\t\t\treturn t('files_sharing', 'Name, email, or Federated Cloud ID …')\n\t\t},\n\n\t\tisValidQuery() {\n\t\t\treturn this.query && this.query.trim() !== '' && this.query.length > this.config.minSearchStringLength\n\t\t},\n\n\t\toptions() {\n\t\t\tif (this.isValidQuery) {\n\t\t\t\treturn this.suggestions\n\t\t\t}\n\t\t\treturn this.recommendations\n\t\t},\n\n\t\tnoResultText() {\n\t\t\tif (this.loading) {\n\t\t\t\treturn t('files_sharing', 'Searching …')\n\t\t\t}\n\t\t\treturn t('files_sharing', 'No elements found.')\n\t\t},\n\t},\n\n\tmounted() {\n\t\tthis.getRecommendations()\n\t},\n\n\tmethods: {\n\t\thandleOpen() {\n\t\t\t// Fix dropdown not opening when viewer is open, see https://github.com/nextcloud/viewer/pull/1319\n\t\t\temit('viewer:trapElements:changed', this.$refs.select.$el)\n\t\t},\n\n\t\tasync asyncFind(query) {\n\t\t\t// save current query to check if we display\n\t\t\t// recommendations or search results\n\t\t\tthis.query = query.trim()\n\t\t\tif (this.isValidQuery) {\n\t\t\t\t// start loading now to have proper ux feedback\n\t\t\t\t// during the debounce\n\t\t\t\tthis.loading = true\n\t\t\t\tawait this.debounceGetSuggestions(query)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Get suggestions\n\t\t *\n\t\t * @param {string} search the search query\n\t\t * @param {boolean} [lookup=false] search on lookup server\n\t\t */\n\t\tasync getSuggestions(search, lookup = false) {\n\t\t\tthis.loading = true\n\n\t\t\tif (OC.getCapabilities().files_sharing.sharee.query_lookup_default === true) {\n\t\t\t\tlookup = true\n\t\t\t}\n\n\t\t\tconst shareType = [\n\t\t\t\tthis.SHARE_TYPES.SHARE_TYPE_USER,\n\t\t\t\tthis.SHARE_TYPES.SHARE_TYPE_GROUP,\n\t\t\t\tthis.SHARE_TYPES.SHARE_TYPE_REMOTE,\n\t\t\t\tthis.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP,\n\t\t\t\tthis.SHARE_TYPES.SHARE_TYPE_CIRCLE,\n\t\t\t\tthis.SHARE_TYPES.SHARE_TYPE_ROOM,\n\t\t\t\tthis.SHARE_TYPES.SHARE_TYPE_GUEST,\n\t\t\t\tthis.SHARE_TYPES.SHARE_TYPE_DECK,\n\t\t\t\tthis.SHARE_TYPES.SHARE_TYPE_SCIENCEMESH,\n\t\t\t]\n\n\t\t\tif (OC.getCapabilities().files_sharing.public.enabled === true) {\n\t\t\t\tshareType.push(this.SHARE_TYPES.SHARE_TYPE_EMAIL)\n\t\t\t}\n\n\t\t\tlet request = null\n\t\t\ttry {\n\t\t\t\trequest = await axios.get(generateOcsUrl('apps/files_sharing/api/v1/sharees'), {\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tformat: 'json',\n\t\t\t\t\t\titemType: this.fileInfo.type === 'dir' ? 'folder' : 'file',\n\t\t\t\t\t\tsearch,\n\t\t\t\t\t\tlookup,\n\t\t\t\t\t\tperPage: this.config.maxAutocompleteResults,\n\t\t\t\t\t\tshareType,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Error fetching suggestions', error)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst data = request.data.ocs.data\n\t\t\tconst exact = request.data.ocs.data.exact\n\t\t\tdata.exact = [] // removing exact from general results\n\n\t\t\t// flatten array of arrays\n\t\t\tconst rawExactSuggestions = Object.values(exact).reduce((arr, elem) => arr.concat(elem), [])\n\t\t\tconst rawSuggestions = Object.values(data).reduce((arr, elem) => arr.concat(elem), [])\n\n\t\t\t// remove invalid data and format to user-select layout\n\t\t\tconst exactSuggestions = this.filterOutExistingShares(rawExactSuggestions)\n\t\t\t\t.map(share => this.formatForMultiselect(share))\n\t\t\t\t// sort by type so we can get user&groups first...\n\t\t\t\t.sort((a, b) => a.shareType - b.shareType)\n\t\t\tconst suggestions = this.filterOutExistingShares(rawSuggestions)\n\t\t\t\t.map(share => this.formatForMultiselect(share))\n\t\t\t\t// sort by type so we can get user&groups first...\n\t\t\t\t.sort((a, b) => a.shareType - b.shareType)\n\n\t\t\t// lookup clickable entry\n\t\t\t// show if enabled and not already requested\n\t\t\tconst lookupEntry = []\n\t\t\tif (data.lookupEnabled && !lookup) {\n\t\t\t\tlookupEntry.push({\n\t\t\t\t\tid: 'global-lookup',\n\t\t\t\t\tisNoUser: true,\n\t\t\t\t\tdisplayName: t('files_sharing', 'Search globally'),\n\t\t\t\t\tlookup: true,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// if there is a condition specified, filter it\n\t\t\tconst externalResults = this.externalResults.filter(result => !result.condition || result.condition(this))\n\n\t\t\tconst allSuggestions = exactSuggestions.concat(suggestions).concat(externalResults).concat(lookupEntry)\n\n\t\t\t// Count occurrences of display names in order to provide a distinguishable description if needed\n\t\t\tconst nameCounts = allSuggestions.reduce((nameCounts, result) => {\n\t\t\t\tif (!result.displayName) {\n\t\t\t\t\treturn nameCounts\n\t\t\t\t}\n\t\t\t\tif (!nameCounts[result.displayName]) {\n\t\t\t\t\tnameCounts[result.displayName] = 0\n\t\t\t\t}\n\t\t\t\tnameCounts[result.displayName]++\n\t\t\t\treturn nameCounts\n\t\t\t}, {})\n\n\t\t\tthis.suggestions = allSuggestions.map(item => {\n\t\t\t\t// Make sure that items with duplicate displayName get the shareWith applied as a description\n\t\t\t\tif (nameCounts[item.displayName] > 1 && !item.desc) {\n\t\t\t\t\treturn { ...item, desc: item.shareWithDisplayNameUnique }\n\t\t\t\t}\n\t\t\t\treturn item\n\t\t\t})\n\n\t\t\tthis.loading = false\n\t\t\tconsole.info('suggestions', this.suggestions)\n\t\t},\n\n\t\t/**\n\t\t * Debounce getSuggestions\n\t\t *\n\t\t * @param {...*} args the arguments\n\t\t */\n\t\tdebounceGetSuggestions: debounce(function(...args) {\n\t\t\tthis.getSuggestions(...args)\n\t\t}, 300),\n\n\t\t/**\n\t\t * Get the sharing recommendations\n\t\t */\n\t\tasync getRecommendations() {\n\t\t\tthis.loading = true\n\n\t\t\tlet request = null\n\t\t\ttry {\n\t\t\t\trequest = await axios.get(generateOcsUrl('apps/files_sharing/api/v1/sharees_recommended'), {\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tformat: 'json',\n\t\t\t\t\t\titemType: this.fileInfo.type,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Error fetching recommendations', error)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Add external results from the OCA.Sharing.ShareSearch api\n\t\t\tconst externalResults = this.externalResults.filter(result => !result.condition || result.condition(this))\n\n\t\t\t// flatten array of arrays\n\t\t\tconst rawRecommendations = Object.values(request.data.ocs.data.exact)\n\t\t\t\t.reduce((arr, elem) => arr.concat(elem), [])\n\n\t\t\t// remove invalid data and format to user-select layout\n\t\t\tthis.recommendations = this.filterOutExistingShares(rawRecommendations)\n\t\t\t\t.map(share => this.formatForMultiselect(share))\n\t\t\t\t.concat(externalResults)\n\n\t\t\tthis.loading = false\n\t\t\tconsole.info('recommendations', this.recommendations)\n\t\t},\n\n\t\t/**\n\t\t * Filter out existing shares from\n\t\t * the provided shares search results\n\t\t *\n\t\t * @param {object[]} shares the array of shares object\n\t\t * @return {object[]}\n\t\t */\n\t\tfilterOutExistingShares(shares) {\n\t\t\treturn shares.reduce((arr, share) => {\n\t\t\t\t// only check proper objects\n\t\t\t\tif (typeof share !== 'object') {\n\t\t\t\t\treturn arr\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tif (share.value.shareType === this.SHARE_TYPES.SHARE_TYPE_USER) {\n\t\t\t\t\t\t// filter out current user\n\t\t\t\t\t\tif (share.value.shareWith === getCurrentUser().uid) {\n\t\t\t\t\t\t\treturn arr\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// filter out the owner of the share\n\t\t\t\t\t\tif (this.reshare && share.value.shareWith === this.reshare.owner) {\n\t\t\t\t\t\t\treturn arr\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// filter out existing mail shares\n\t\t\t\t\tif (share.value.shareType === this.SHARE_TYPES.SHARE_TYPE_EMAIL) {\n\t\t\t\t\t\tconst emails = this.linkShares.map(elem => elem.shareWith)\n\t\t\t\t\t\tif (emails.indexOf(share.value.shareWith.trim()) !== -1) {\n\t\t\t\t\t\t\treturn arr\n\t\t\t\t\t\t}\n\t\t\t\t\t} else { // filter out existing shares\n\t\t\t\t\t\t// creating an object of uid => type\n\t\t\t\t\t\tconst sharesObj = this.shares.reduce((obj, elem) => {\n\t\t\t\t\t\t\tobj[elem.shareWith] = elem.type\n\t\t\t\t\t\t\treturn obj\n\t\t\t\t\t\t}, {})\n\n\t\t\t\t\t\t// if shareWith is the same and the share type too, ignore it\n\t\t\t\t\t\tconst key = share.value.shareWith.trim()\n\t\t\t\t\t\tif (key in sharesObj\n\t\t\t\t\t\t\t&& sharesObj[key] === share.value.shareType) {\n\t\t\t\t\t\t\treturn arr\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// ALL GOOD\n\t\t\t\t\t// let's add the suggestion\n\t\t\t\t\tarr.push(share)\n\t\t\t\t} catch {\n\t\t\t\t\treturn arr\n\t\t\t\t}\n\t\t\t\treturn arr\n\t\t\t}, [])\n\t\t},\n\n\t\t/**\n\t\t * Get the icon based on the share type\n\t\t *\n\t\t * @param {number} type the share type\n\t\t * @return {string} the icon class\n\t\t */\n\t\tshareTypeToIcon(type) {\n\t\t\tswitch (type) {\n\t\t\tcase this.SHARE_TYPES.SHARE_TYPE_GUEST:\n\t\t\t\t// default is a user, other icons are here to differentiate\n\t\t\t\t// themselves from it, so let's not display the user icon\n\t\t\t\t// case this.SHARE_TYPES.SHARE_TYPE_REMOTE:\n\t\t\t\t// case this.SHARE_TYPES.SHARE_TYPE_USER:\n\t\t\t\treturn {\n\t\t\t\t\ticon: 'icon-user',\n\t\t\t\t\ticonTitle: t('files_sharing', 'Guest'),\n\t\t\t\t}\n\t\t\tcase this.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP:\n\t\t\tcase this.SHARE_TYPES.SHARE_TYPE_GROUP:\n\t\t\t\treturn {\n\t\t\t\t\ticon: 'icon-group',\n\t\t\t\t\ticonTitle: t('files_sharing', 'Group'),\n\t\t\t\t}\n\t\t\tcase this.SHARE_TYPES.SHARE_TYPE_EMAIL:\n\t\t\t\treturn {\n\t\t\t\t\ticon: 'icon-mail',\n\t\t\t\t\ticonTitle: t('files_sharing', 'Email'),\n\t\t\t\t}\n\t\t\tcase this.SHARE_TYPES.SHARE_TYPE_CIRCLE:\n\t\t\t\treturn {\n\t\t\t\t\ticon: 'icon-circle',\n\t\t\t\t\ticonTitle: t('files_sharing', 'Circle'),\n\t\t\t\t}\n\t\t\tcase this.SHARE_TYPES.SHARE_TYPE_ROOM:\n\t\t\t\treturn {\n\t\t\t\t\ticon: 'icon-room',\n\t\t\t\t\ticonTitle: t('files_sharing', 'Talk conversation'),\n\t\t\t\t}\n\t\t\tcase this.SHARE_TYPES.SHARE_TYPE_DECK:\n\t\t\t\treturn {\n\t\t\t\t\ticon: 'icon-deck',\n\t\t\t\t\ticonTitle: t('files_sharing', 'Deck board'),\n\t\t\t\t}\n\t\t\tcase this.SHARE_TYPES.SHARE_TYPE_SCIENCEMESH:\n\t\t\t\treturn {\n\t\t\t\t\ticon: 'icon-sciencemesh',\n\t\t\t\t\ticonTitle: t('files_sharing', 'Science Mesh'),\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn {}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Format shares for the multiselect options\n\t\t *\n\t\t * @param {object} result select entry item\n\t\t * @return {object}\n\t\t */\n\t\tformatForMultiselect(result) {\n\t\t\tlet subtitle\n\t\t\tif (result.value.shareType === this.SHARE_TYPES.SHARE_TYPE_USER && this.config.shouldAlwaysShowUnique) {\n\t\t\t\tsubtitle = result.shareWithDisplayNameUnique ?? ''\n\t\t\t} else if ((result.value.shareType === this.SHARE_TYPES.SHARE_TYPE_REMOTE\n\t\t\t\t\t|| result.value.shareType === this.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP\n\t\t\t) && result.value.server) {\n\t\t\t\tsubtitle = t('files_sharing', 'on {server}', { server: result.value.server })\n\t\t\t} else if (result.value.shareType === this.SHARE_TYPES.SHARE_TYPE_EMAIL) {\n\t\t\t\tsubtitle = result.value.shareWith\n\t\t\t} else {\n\t\t\t\tsubtitle = result.shareWithDescription ?? ''\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tid: `${result.value.shareType}-${result.value.shareWith}`,\n\t\t\t\tshareWith: result.value.shareWith,\n\t\t\t\tshareType: result.value.shareType,\n\t\t\t\tuser: result.uuid || result.value.shareWith,\n\t\t\t\tisNoUser: result.value.shareType !== this.SHARE_TYPES.SHARE_TYPE_USER,\n\t\t\t\tdisplayName: result.name || result.label,\n\t\t\t\tsubtitle,\n\t\t\t\tshareWithDisplayNameUnique: result.shareWithDisplayNameUnique || '',\n\t\t\t\t...this.shareTypeToIcon(result.value.shareType),\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Process the new share request\n\t\t *\n\t\t * @param {object} value the multiselect option\n\t\t */\n\t\tasync addShare(value) {\n\t\t\t// Clear the displayed selection\n\t\t\tthis.value = null\n\n\t\t\tif (value.lookup) {\n\t\t\t\tawait this.getSuggestions(this.query, true)\n\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t// open the dropdown again\n\t\t\t\t\tthis.$refs.select.$children[0].open = true\n\t\t\t\t})\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\t// handle externalResults from OCA.Sharing.ShareSearch\n\t\t\tif (value.handler) {\n\t\t\t\tconst share = await value.handler(this)\n\t\t\t\tthis.$emit('add:share', new Share(share))\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\tthis.loading = true\n\t\t\tconsole.debug('Adding a new share from the input for', value)\n\t\t\ttry {\n\t\t\t\tlet password = null\n\n\t\t\t\tif (this.config.enforcePasswordForPublicLink\n\t\t\t\t\t&& value.shareType === this.SHARE_TYPES.SHARE_TYPE_EMAIL) {\n\t\t\t\t\tpassword = await GeneratePassword()\n\t\t\t\t}\n\n\t\t\t\tconst path = (this.fileInfo.path + '/' + this.fileInfo.name).replace('//', '/')\n\t\t\t\tconst share = await this.createShare({\n\t\t\t\t\tpath,\n\t\t\t\t\tshareType: value.shareType,\n\t\t\t\t\tshareWith: value.shareWith,\n\t\t\t\t\tpassword,\n\t\t\t\t\tpermissions: this.fileInfo.sharePermissions & OC.getCapabilities().files_sharing.default_permissions,\n\t\t\t\t\tattributes: JSON.stringify(this.fileInfo.shareAttributes),\n\t\t\t\t})\n\n\t\t\t\t// If we had a password, we need to show it to the user as it was generated\n\t\t\t\tif (password) {\n\t\t\t\t\tshare.newPassword = password\n\t\t\t\t\t// Wait for the newly added share\n\t\t\t\t\tconst component = await new Promise(resolve => {\n\t\t\t\t\t\tthis.$emit('add:share', share, resolve)\n\t\t\t\t\t})\n\n\t\t\t\t\t// open the menu on the\n\t\t\t\t\t// freshly created share component\n\t\t\t\t\tcomponent.open = true\n\t\t\t\t} else {\n\t\t\t\t\t// Else we just add it normally\n\t\t\t\t\tthis.$emit('add:share', share)\n\t\t\t\t}\n\n\t\t\t\tawait this.getRecommendations()\n\t\t\t} catch (error) {\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t// open the dropdown again on error\n\t\t\t\t\tthis.$refs.select.$children[0].open = true\n\t\t\t\t})\n\t\t\t\tthis.query = value.shareWith\n\t\t\t\tconsole.error('Error while adding new share', error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\">\n.sharing-search {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin-bottom: 4px;\n\n\tlabel[for=\"sharing-search-input\"] {\n\t\tmargin-bottom: 2px;\n\t}\n\n\t&__input {\n\t\twidth: 100%;\n\t\tmargin: 10px 0;\n\t}\n}\n\n.vs__dropdown-menu {\n\t// properly style the lookup entry\n\tspan[lookup] {\n\t\t.avatardiv {\n\t\t\tbackground-image: var(--icon-search-white);\n\t\t\tbackground-repeat: no-repeat;\n\t\t\tbackground-position: center;\n\t\t\tbackground-color: var(--color-text-maxcontrast) !important;\n\t\t\tdiv {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingInput.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!./SharingInput.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingInput.vue?vue&type=style&index=0&id=43c265ae&prod&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingInput.vue?vue&type=style&index=0&id=43c265ae&prod&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SharingInput.vue?vue&type=template&id=43c265ae&\"\nimport script from \"./SharingInput.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingInput.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SharingInput.vue?vue&type=style&index=0&id=43c265ae&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"sharing-search\"},[_c('label',{attrs:{\"for\":\"sharing-search-input\"}},[_vm._v(_vm._s(_vm.t('files_sharing', 'Search for share recipients')))]),_vm._v(\" \"),_c('NcSelect',{ref:\"select\",staticClass:\"sharing-search__input\",attrs:{\"id\":\"sharing-search-input\",\"disabled\":!_vm.canReshare,\"loading\":_vm.loading,\"filterable\":false,\"placeholder\":_vm.inputPlaceholder,\"clear-search-on-blur\":() => false,\"user-select\":true,\"options\":_vm.options},on:{\"open\":_vm.handleOpen,\"search\":_vm.asyncFind,\"option:selected\":_vm.addShare},scopedSlots:_vm._u([{key:\"no-options\",fn:function({ search }){return [_vm._v(\"\\n\\t\\t\\t\"+_vm._s(search ? _vm.noResultText : _vm.t('files_sharing', 'No recommendations. Start typing.'))+\"\\n\\t\\t\")]}}]),model:{value:(_vm.value),callback:function ($$v) {_vm.value=$$v},expression:\"value\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author Gary Kim <gary@garykim.dev>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.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\nimport { showError, showSuccess } from '@nextcloud/dialogs'\nimport { getCurrentUser } from '@nextcloud/auth'\n// eslint-disable-next-line import/no-unresolved, node/no-missing-import\nimport PQueue from 'p-queue'\nimport debounce from 'debounce'\n\nimport Share from '../models/Share.js'\nimport SharesRequests from './ShareRequests.js'\nimport ShareTypes from './ShareTypes.js'\nimport Config from '../services/ConfigService.js'\n\nexport default {\n\tmixins: [SharesRequests, ShareTypes],\n\n\tprops: {\n\t\tfileInfo: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => {},\n\t\t\trequired: true,\n\t\t},\n\t\tshare: {\n\t\t\ttype: Share,\n\t\t\tdefault: null,\n\t\t},\n\t\tisUnique: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tconfig: new Config(),\n\n\t\t\t// errors helpers\n\t\t\terrors: {},\n\n\t\t\t// component status toggles\n\t\t\tloading: false,\n\t\t\tsaving: false,\n\t\t\topen: false,\n\n\t\t\t// concurrency management queue\n\t\t\t// we want one queue per share\n\t\t\tupdateQueue: new PQueue({ concurrency: 1 }),\n\n\t\t\t/**\n\t\t\t * ! This allow vue to make the Share class state reactive\n\t\t\t * ! do not remove it ot you'll lose all reactivity here\n\t\t\t */\n\t\t\treactiveState: this.share?.state,\n\t\t}\n\t},\n\n\tcomputed: {\n\n\t\t/**\n\t\t * Does the current share have a note\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\thasNote: {\n\t\t\tget() {\n\t\t\t\treturn this.share.note !== ''\n\t\t\t},\n\t\t\tset(enabled) {\n\t\t\t\tthis.share.note = enabled\n\t\t\t\t\t? null // enabled but user did not changed the content yet\n\t\t\t\t\t: '' // empty = no note = disabled\n\t\t\t},\n\t\t},\n\n\t\tdateTomorrow() {\n\t\t\treturn new Date(new Date().setDate(new Date().getDate() + 1))\n\t\t},\n\n\t\t// Datepicker language\n\t\tlang() {\n\t\t\tconst weekdaysShort = window.dayNamesShort\n\t\t\t\t? window.dayNamesShort // provided by nextcloud\n\t\t\t\t: ['Sun.', 'Mon.', 'Tue.', 'Wed.', 'Thu.', 'Fri.', 'Sat.']\n\t\t\tconst monthsShort = window.monthNamesShort\n\t\t\t\t? window.monthNamesShort // provided by nextcloud\n\t\t\t\t: ['Jan.', 'Feb.', 'Mar.', 'Apr.', 'May.', 'Jun.', 'Jul.', 'Aug.', 'Sep.', 'Oct.', 'Nov.', 'Dec.']\n\t\t\tconst firstDayOfWeek = window.firstDay ? window.firstDay : 0\n\n\t\t\treturn {\n\t\t\t\tformatLocale: {\n\t\t\t\t\tfirstDayOfWeek,\n\t\t\t\t\tmonthsShort,\n\t\t\t\t\tweekdaysMin: weekdaysShort,\n\t\t\t\t\tweekdaysShort,\n\t\t\t\t},\n\t\t\t\tmonthFormat: 'MMM',\n\t\t\t}\n\t\t},\n\n\t\tisShareOwner() {\n\t\t\treturn this.share && this.share.owner === getCurrentUser().uid\n\t\t},\n\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Check if a share is valid before\n\t\t * firing the request\n\t\t *\n\t\t * @param {Share} share the share to check\n\t\t * @return {boolean}\n\t\t */\n\t\tcheckShare(share) {\n\t\t\tif (share.password) {\n\t\t\t\tif (typeof share.password !== 'string' || share.password.trim() === '') {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (share.expirationDate) {\n\t\t\t\tconst date = share.expirationDate\n\t\t\t\tif (!date.isValid()) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\n\t\t/**\n\t\t * @param {string} date a date with YYYY-MM-DD format\n\t\t * @return {Date} date\n\t\t */\n\t\tparseDateString(date) {\n\t\t\tif (!date) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst regex = /([0-9]{4}-[0-9]{2}-[0-9]{2})/i\n\t\t\treturn new Date(date.match(regex)?.pop())\n\t\t},\n\n\t\t/**\n\t\t * @param {Date} date\n\t\t * @return {string} date a date with YYYY-MM-DD format\n\t\t */\n\t\tformatDateToString(date) {\n\t\t\t// Force utc time. Drop time information to be timezone-less\n\t\t\tconst utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()))\n\t\t\t// Format to YYYY-MM-DD\n\t\t\treturn utcDate.toISOString().split('T')[0]\n\t\t},\n\n\t\t/**\n\t\t * Save given value to expireDate and trigger queueUpdate\n\t\t *\n\t\t * @param {Date} date\n\t\t */\n\t\tonExpirationChange(date) {\n\t\t\tthis.share.expireDate = this.formatDateToString(date)\n\t\t\tthis.queueUpdate('expireDate')\n\t\t},\n\n\t\t/**\n\t\t * Uncheck expire date\n\t\t * We need this method because @update:checked\n\t\t * is ran simultaneously as @uncheck, so\n\t\t * so we cannot ensure data is up-to-date\n\t\t */\n\t\tonExpirationDisable() {\n\t\t\tthis.share.expireDate = ''\n\t\t\tthis.queueUpdate('expireDate')\n\t\t},\n\n\t\t/**\n\t\t * Note changed, let's save it to a different key\n\t\t *\n\t\t * @param {string} note the share note\n\t\t */\n\t\tonNoteChange(note) {\n\t\t\tthis.$set(this.share, 'newNote', note.trim())\n\t\t},\n\n\t\t/**\n\t\t * When the note change, we trim, save and dispatch\n\t\t *\n\t\t */\n\t\tonNoteSubmit() {\n\t\t\tif (this.share.newNote) {\n\t\t\t\tthis.share.note = this.share.newNote\n\t\t\t\tthis.$delete(this.share, 'newNote')\n\t\t\t\tthis.queueUpdate('note')\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Delete share button handler\n\t\t */\n\t\tasync onDelete() {\n\t\t\ttry {\n\t\t\t\tthis.loading = true\n\t\t\t\tthis.open = false\n\t\t\t\tawait this.deleteShare(this.share.id)\n\t\t\t\tconsole.debug('Share deleted', this.share.id)\n\t\t\t\tconst message = this.share.itemType === 'file'\n\t\t\t\t\t? t('files_sharing', 'File \"{path}\" has been unshared', { path: this.share.path })\n\t\t\t\t\t: t('files_sharing', 'Folder \"{path}\" has been unshared', { path: this.share.path })\n\t\t\t\tshowSuccess(message)\n\t\t\t\tthis.$emit('remove:share', this.share)\n\t\t\t} catch (error) {\n\t\t\t\t// re-open menu if error\n\t\t\t\tthis.open = true\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Send an update of the share to the queue\n\t\t *\n\t\t * @param {Array<string>} propertyNames the properties to sync\n\t\t */\n\t\tqueueUpdate(...propertyNames) {\n\t\t\tif (propertyNames.length === 0) {\n\t\t\t\t// Nothing to update\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (this.share.id) {\n\t\t\t\tconst properties = {}\n\t\t\t\t// force value to string because that is what our\n\t\t\t\t// share api controller accepts\n\t\t\t\tpropertyNames.forEach(name => {\n\t\t\t\t\tif ((typeof this.share[name]) === 'object') {\n\t\t\t\t\t\tproperties[name] = JSON.stringify(this.share[name])\n\t\t\t\t\t} else {\n\t\t\t\t\t\tproperties[name] = this.share[name].toString()\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\tthis.updateQueue.add(async () => {\n\t\t\t\t\tthis.saving = true\n\t\t\t\t\tthis.errors = {}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst updatedShare = await this.updateShare(this.share.id, properties)\n\n\t\t\t\t\t\tif (propertyNames.indexOf('password') >= 0) {\n\t\t\t\t\t\t\t// reset password state after sync\n\t\t\t\t\t\t\tthis.$delete(this.share, 'newPassword')\n\n\t\t\t\t\t\t\t// updates password expiration time after sync\n\t\t\t\t\t\t\tthis.share.passwordExpirationTime = updatedShare.password_expiration_time\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// clear any previous errors\n\t\t\t\t\t\tthis.$delete(this.errors, propertyNames[0])\n\t\t\t\t\t\tshowSuccess(t('files_sharing', 'Share {propertyName} saved', { propertyName: propertyNames[0] }))\n\t\t\t\t\t} catch ({ message }) {\n\t\t\t\t\t\tif (message && message !== '') {\n\t\t\t\t\t\t\tthis.onSyncError(propertyNames[0], message)\n\t\t\t\t\t\t\tshowError(t('files_sharing', message))\n\t\t\t\t\t\t}\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tthis.saving = false\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// This share does not exists on the server yet\n\t\t\tconsole.debug('Updated local share', this.share)\n\t\t},\n\n\t\t/**\n\t\t * Manage sync errors\n\t\t *\n\t\t * @param {string} property the errored property, e.g. 'password'\n\t\t * @param {string} message the error message\n\t\t */\n\t\tonSyncError(property, message) {\n\t\t\t// re-open menu if closed\n\t\t\tthis.open = true\n\t\t\tswitch (property) {\n\t\t\tcase 'password':\n\t\t\tcase 'pending':\n\t\t\tcase 'expireDate':\n\t\t\tcase 'label':\n\t\t\tcase 'note': {\n\t\t\t\t// show error\n\t\t\t\tthis.$set(this.errors, property, message)\n\n\t\t\t\tlet propertyEl = this.$refs[property]\n\t\t\t\tif (propertyEl) {\n\t\t\t\t\tif (propertyEl.$el) {\n\t\t\t\t\t\tpropertyEl = propertyEl.$el\n\t\t\t\t\t}\n\t\t\t\t\t// focus if there is a focusable action element\n\t\t\t\t\tconst focusable = propertyEl.querySelector('.focusable')\n\t\t\t\t\tif (focusable) {\n\t\t\t\t\t\tfocusable.focus()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'sendPasswordByTalk': {\n\t\t\t\t// show error\n\t\t\t\tthis.$set(this.errors, property, message)\n\n\t\t\t\t// Restore previous state\n\t\t\t\tthis.share.sendPasswordByTalk = !this.share.sendPasswordByTalk\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Debounce queueUpdate to avoid requests spamming\n\t\t * more importantly for text data\n\t\t *\n\t\t * @param {string} property the property to sync\n\t\t */\n\t\tdebounceQueueUpdate: debounce(function(property) {\n\t\t\tthis.queueUpdate(property)\n\t\t}, 500),\n\t},\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntryInherited.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!./SharingEntryInherited.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<SharingEntrySimple :key=\"share.id\"\n\t\tclass=\"sharing-entry__inherited\"\n\t\t:title=\"share.shareWithDisplayName\">\n\t\t<template #avatar>\n\t\t\t<NcAvatar :user=\"share.shareWith\"\n\t\t\t\t:display-name=\"share.shareWithDisplayName\"\n\t\t\t\tclass=\"sharing-entry__avatar\" />\n\t\t</template>\n\t\t<NcActionText icon=\"icon-user\">\n\t\t\t{{ t('files_sharing', 'Added by {initiator}', { initiator: share.ownerDisplayName }) }}\n\t\t</NcActionText>\n\t\t<NcActionLink v-if=\"share.viaPath && share.viaFileid\"\n\t\t\ticon=\"icon-folder\"\n\t\t\t:href=\"viaFileTargetUrl\">\n\t\t\t{{ t('files_sharing', 'Via “{folder}”', {folder: viaFolderName} ) }}\n\t\t</NcActionLink>\n\t\t<NcActionButton v-if=\"share.canDelete\"\n\t\t\ticon=\"icon-close\"\n\t\t\t@click.prevent=\"onDelete\">\n\t\t\t{{ t('files_sharing', 'Unshare') }}\n\t\t</NcActionButton>\n\t</SharingEntrySimple>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport { basename } from '@nextcloud/paths'\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar'\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton'\nimport NcActionLink from '@nextcloud/vue/dist/Components/NcActionLink'\nimport NcActionText from '@nextcloud/vue/dist/Components/NcActionText'\n\n// eslint-disable-next-line no-unused-vars\nimport Share from '../models/Share'\nimport SharesMixin from '../mixins/SharesMixin'\nimport SharingEntrySimple from '../components/SharingEntrySimple'\n\nexport default {\n\tname: 'SharingEntryInherited',\n\n\tcomponents: {\n\t\tNcActionButton,\n\t\tNcActionLink,\n\t\tNcActionText,\n\t\tNcAvatar,\n\t\tSharingEntrySimple,\n\t},\n\n\tmixins: [SharesMixin],\n\n\tprops: {\n\t\tshare: {\n\t\t\ttype: Share,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tviaFileTargetUrl() {\n\t\t\treturn generateUrl('/f/{fileid}', {\n\t\t\t\tfileid: this.share.viaFileid,\n\t\t\t})\n\t\t},\n\n\t\tviaFolderName() {\n\t\t\treturn basename(this.share.viaPath)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.sharing-entry {\n\tdisplay: flex;\n\talign-items: center;\n\theight: 44px;\n\t&__desc {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tjustify-content: space-between;\n\t\tpadding: 8px;\n\t\tline-height: 1.2em;\n\t\tp {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n\t&__actions {\n\t\tmargin-left: auto;\n\t}\n}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntryInherited.vue?vue&type=style&index=0&id=23251e4a&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntryInherited.vue?vue&type=style&index=0&id=23251e4a&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SharingEntryInherited.vue?vue&type=template&id=23251e4a&scoped=true&\"\nimport script from \"./SharingEntryInherited.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingEntryInherited.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SharingEntryInherited.vue?vue&type=style&index=0&id=23251e4a&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"23251e4a\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('SharingEntrySimple',{key:_vm.share.id,staticClass:\"sharing-entry__inherited\",attrs:{\"title\":_vm.share.shareWithDisplayName},scopedSlots:_vm._u([{key:\"avatar\",fn:function(){return [_c('NcAvatar',{staticClass:\"sharing-entry__avatar\",attrs:{\"user\":_vm.share.shareWith,\"display-name\":_vm.share.shareWithDisplayName}})]},proxy:true}])},[_vm._v(\" \"),_c('NcActionText',{attrs:{\"icon\":\"icon-user\"}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Added by {initiator}', { initiator: _vm.share.ownerDisplayName }))+\"\\n\\t\")]),_vm._v(\" \"),(_vm.share.viaPath && _vm.share.viaFileid)?_c('NcActionLink',{attrs:{\"icon\":\"icon-folder\",\"href\":_vm.viaFileTargetUrl}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Via “{folder}”', {folder: _vm.viaFolderName} ))+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.share.canDelete)?_c('NcActionButton',{attrs:{\"icon\":\"icon-close\"},on:{\"click\":function($event){$event.preventDefault();return _vm.onDelete.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Unshare'))+\"\\n\\t\")]):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<ul id=\"sharing-inherited-shares\">\n\t\t<!-- Main collapsible entry -->\n\t\t<SharingEntrySimple class=\"sharing-entry__inherited\"\n\t\t\t:title=\"mainTitle\"\n\t\t\t:subtitle=\"subTitle\"\n\t\t\t:aria-expanded=\"showInheritedShares\">\n\t\t\t<template #avatar>\n\t\t\t\t<div class=\"avatar-shared icon-more-white\" />\n\t\t\t</template>\n\t\t\t<NcActionButton :icon=\"showInheritedSharesIcon\"\n\t\t\t\t:aria-label=\"toggleTooltip\"\n\t\t\t\t:title=\"toggleTooltip\"\n\t\t\t\t@click.prevent.stop=\"toggleInheritedShares\" />\n\t\t</SharingEntrySimple>\n\n\t\t<!-- Inherited shares list -->\n\t\t<SharingEntryInherited v-for=\"share in shares\"\n\t\t\t:key=\"share.id\"\n\t\t\t:file-info=\"fileInfo\"\n\t\t\t:share=\"share\"\n\t\t\t@remove:share=\"removeShare\" />\n\t</ul>\n</template>\n\n<script>\nimport { generateOcsUrl } from '@nextcloud/router'\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton'\nimport axios from '@nextcloud/axios'\n\nimport Share from '../models/Share'\nimport SharingEntryInherited from '../components/SharingEntryInherited'\nimport SharingEntrySimple from '../components/SharingEntrySimple'\n\nexport default {\n\tname: 'SharingInherited',\n\n\tcomponents: {\n\t\tNcActionButton,\n\t\tSharingEntryInherited,\n\t\tSharingEntrySimple,\n\t},\n\n\tprops: {\n\t\tfileInfo: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => {},\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloaded: false,\n\t\t\tloading: false,\n\t\t\tshowInheritedShares: false,\n\t\t\tshares: [],\n\t\t}\n\t},\n\tcomputed: {\n\t\tshowInheritedSharesIcon() {\n\t\t\tif (this.loading) {\n\t\t\t\treturn 'icon-loading-small'\n\t\t\t}\n\t\t\tif (this.showInheritedShares) {\n\t\t\t\treturn 'icon-triangle-n'\n\t\t\t}\n\t\t\treturn 'icon-triangle-s'\n\t\t},\n\t\tmainTitle() {\n\t\t\treturn t('files_sharing', 'Others with access')\n\t\t},\n\t\tsubTitle() {\n\t\t\treturn (this.showInheritedShares && this.shares.length === 0)\n\t\t\t\t? t('files_sharing', 'No other users with access found')\n\t\t\t\t: ''\n\t\t},\n\t\ttoggleTooltip() {\n\t\t\treturn this.fileInfo.type === 'dir'\n\t\t\t\t? t('files_sharing', 'Toggle list of others with access to this directory')\n\t\t\t\t: t('files_sharing', 'Toggle list of others with access to this file')\n\t\t},\n\t\tfullPath() {\n\t\t\tconst path = `${this.fileInfo.path}/${this.fileInfo.name}`\n\t\t\treturn path.replace('//', '/')\n\t\t},\n\t},\n\twatch: {\n\t\tfileInfo() {\n\t\t\tthis.resetState()\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Toggle the list view and fetch/reset the state\n\t\t */\n\t\ttoggleInheritedShares() {\n\t\t\tthis.showInheritedShares = !this.showInheritedShares\n\t\t\tif (this.showInheritedShares) {\n\t\t\t\tthis.fetchInheritedShares()\n\t\t\t} else {\n\t\t\t\tthis.resetState()\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Fetch the Inherited Shares array\n\t\t */\n\t\tasync fetchInheritedShares() {\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tconst url = generateOcsUrl('apps/files_sharing/api/v1/shares/inherited?format=json&path={path}', { path: this.fullPath })\n\t\t\t\tconst shares = await axios.get(url)\n\t\t\t\tthis.shares = shares.data.ocs.data\n\t\t\t\t\t.map(share => new Share(share))\n\t\t\t\t\t.sort((a, b) => b.createdTime - a.createdTime)\n\t\t\t\tconsole.info(this.shares)\n\t\t\t\tthis.loaded = true\n\t\t\t} catch (error) {\n\t\t\t\tOC.Notification.showTemporary(t('files_sharing', 'Unable to fetch inherited shares'), { type: 'error' })\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Reset current component state\n\t\t */\n\t\tresetState() {\n\t\t\tthis.loaded = false\n\t\t\tthis.loading = false\n\t\t\tthis.showInheritedShares = false\n\t\t\tthis.shares = []\n\t\t},\n\t\t/**\n\t\t * Remove a share from the shares list\n\t\t *\n\t\t * @param {Share} share the share to remove\n\t\t */\n\t\tremoveShare(share) {\n\t\t\tconst index = this.shares.findIndex(item => item === share)\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.shares.splice(index, 1)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.sharing-entry__inherited {\n\t.avatar-shared {\n\t\twidth: 32px;\n\t\theight: 32px;\n\t\tline-height: 32px;\n\t\tfont-size: 18px;\n\t\tbackground-color: var(--color-text-maxcontrast);\n\t\tborder-radius: 50%;\n\t\tflex-shrink: 0;\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingInherited.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!./SharingInherited.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingInherited.vue?vue&type=style&index=0&id=3462b966&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingInherited.vue?vue&type=style&index=0&id=3462b966&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SharingInherited.vue?vue&type=template&id=3462b966&scoped=true&\"\nimport script from \"./SharingInherited.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingInherited.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SharingInherited.vue?vue&type=style&index=0&id=3462b966&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3462b966\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('ul',{attrs:{\"id\":\"sharing-inherited-shares\"}},[_c('SharingEntrySimple',{staticClass:\"sharing-entry__inherited\",attrs:{\"title\":_vm.mainTitle,\"subtitle\":_vm.subTitle,\"aria-expanded\":_vm.showInheritedShares},scopedSlots:_vm._u([{key:\"avatar\",fn:function(){return [_c('div',{staticClass:\"avatar-shared icon-more-white\"})]},proxy:true}])},[_vm._v(\" \"),_c('NcActionButton',{attrs:{\"icon\":_vm.showInheritedSharesIcon,\"aria-label\":_vm.toggleTooltip,\"title\":_vm.toggleTooltip},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.toggleInheritedShares.apply(null, arguments)}}})],1),_vm._v(\" \"),_vm._l((_vm.shares),function(share){return _c('SharingEntryInherited',{key:share.id,attrs:{\"file-info\":_vm.fileInfo,\"share\":share},on:{\"remove:share\":_vm.removeShare}})})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ExternalShareAction.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!./ExternalShareAction.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<Component :is=\"data.is\"\n\t\tv-bind=\"data\"\n\t\tv-on=\"action.handlers\">\n\t\t{{ data.text }}\n\t</Component>\n</template>\n\n<script>\nimport Share from '../models/Share'\n\nexport default {\n\tname: 'ExternalShareAction',\n\n\tprops: {\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\taction: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t\tfileInfo: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => {},\n\t\t\trequired: true,\n\t\t},\n\t\tshare: {\n\t\t\ttype: Share,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tdata() {\n\t\t\treturn this.action.data(this)\n\t\t},\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./ExternalShareAction.vue?vue&type=template&id=29f555e7&\"\nimport script from \"./ExternalShareAction.vue?vue&type=script&lang=js&\"\nexport * from \"./ExternalShareAction.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c(_vm.data.is,_vm._g(_vm._b({tag:\"Component\"},'Component',_vm.data,false),_vm.action.handlers),[_vm._v(\"\\n\\t\"+_vm._s(_vm.data.text)+\"\\n\")])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2022 Louis Chmn <louis@chmn.me>\n *\n * @author Louis Chmn <louis@chmn.me>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a 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 ATOMIC_PERMISSIONS = {\n\tNONE: 0,\n\tREAD: 1,\n\tUPDATE: 2,\n\tCREATE: 4,\n\tDELETE: 8,\n\tSHARE: 16,\n}\n\nexport const BUNDLED_PERMISSIONS = {\n\tREAD_ONLY: ATOMIC_PERMISSIONS.READ,\n\tUPLOAD_AND_UPDATE: ATOMIC_PERMISSIONS.READ | ATOMIC_PERMISSIONS.UPDATE | ATOMIC_PERMISSIONS.CREATE | ATOMIC_PERMISSIONS.DELETE,\n\tFILE_DROP: ATOMIC_PERMISSIONS.CREATE,\n\tALL: ATOMIC_PERMISSIONS.UPDATE | ATOMIC_PERMISSIONS.CREATE | ATOMIC_PERMISSIONS.READ | ATOMIC_PERMISSIONS.DELETE | ATOMIC_PERMISSIONS.SHARE,\n}\n\n/**\n * Return whether a given permissions set contains some permissions.\n *\n * @param {number} initialPermissionSet - the permissions set.\n * @param {number} permissionsToCheck - the permissions to check.\n * @return {boolean}\n */\nexport function hasPermissions(initialPermissionSet, permissionsToCheck) {\n\treturn initialPermissionSet !== ATOMIC_PERMISSIONS.NONE && (initialPermissionSet & permissionsToCheck) === permissionsToCheck\n}\n\n/**\n * Return whether a given permissions set is valid.\n *\n * @param {number} permissionsSet - the permissions set.\n *\n * @return {boolean}\n */\nexport function permissionsSetIsValid(permissionsSet) {\n\t// Must have at least READ or CREATE permission.\n\tif (!hasPermissions(permissionsSet, ATOMIC_PERMISSIONS.READ) && !hasPermissions(permissionsSet, ATOMIC_PERMISSIONS.CREATE)) {\n\t\treturn false\n\t}\n\n\t// Must have READ permission if have UPDATE or DELETE.\n\tif (!hasPermissions(permissionsSet, ATOMIC_PERMISSIONS.READ) && (\n\t\thasPermissions(permissionsSet, ATOMIC_PERMISSIONS.UPDATE) || hasPermissions(permissionsSet, ATOMIC_PERMISSIONS.DELETE)\n\t)) {\n\t\treturn false\n\t}\n\n\treturn true\n}\n\n/**\n * Add some permissions to an initial set of permissions.\n *\n * @param {number} initialPermissionSet - the initial permissions.\n * @param {number} permissionsToAdd - the permissions to add.\n *\n * @return {number}\n */\nexport function addPermissions(initialPermissionSet, permissionsToAdd) {\n\treturn initialPermissionSet | permissionsToAdd\n}\n\n/**\n * Remove some permissions from an initial set of permissions.\n *\n * @param {number} initialPermissionSet - the initial permissions.\n * @param {number} permissionsToSubtract - the permissions to remove.\n *\n * @return {number}\n */\nexport function subtractPermissions(initialPermissionSet, permissionsToSubtract) {\n\treturn initialPermissionSet & ~permissionsToSubtract\n}\n\n/**\n * Toggle some permissions from an initial set of permissions.\n *\n * @param {number} initialPermissionSet - the permissions set.\n * @param {number} permissionsToToggle - the permissions to toggle.\n *\n * @return {number}\n */\nexport function togglePermissions(initialPermissionSet, permissionsToToggle) {\n\tif (hasPermissions(initialPermissionSet, permissionsToToggle)) {\n\t\treturn subtractPermissions(initialPermissionSet, permissionsToToggle)\n\t} else {\n\t\treturn addPermissions(initialPermissionSet, permissionsToToggle)\n\t}\n}\n\n/**\n * Return whether some given permissions can be toggled from a permission set.\n *\n * @param {number} permissionSet - the initial permissions set.\n * @param {number} permissionsToToggle - the permissions to toggle.\n *\n * @return {boolean}\n */\nexport function canTogglePermissions(permissionSet, permissionsToToggle) {\n\treturn permissionsSetIsValid(togglePermissions(permissionSet, permissionsToToggle))\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharePermissionsEditor.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!./SharePermissionsEditor.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2022 Louis Chmn <louis@chmn.me>\n -\n - @author Louis Chmn <louis@chmn.me>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<li>\n\t\t<ul>\n\t\t\t<!-- file -->\n\t\t\t<NcActionCheckbox v-if=\"!isFolder\"\n\t\t\t\t:checked=\"shareHasPermissions(atomicPermissions.UPDATE)\"\n\t\t\t\t:disabled=\"saving\"\n\t\t\t\t@update:checked=\"toggleSharePermissions(atomicPermissions.UPDATE)\">\n\t\t\t\t{{ t('files_sharing', 'Allow editing') }}\n\t\t\t</NcActionCheckbox>\n\n\t\t\t<!-- folder -->\n\t\t\t<template v-if=\"isFolder && fileHasCreatePermission && config.isPublicUploadEnabled\">\n\t\t\t\t<template v-if=\"!showCustomPermissionsForm\">\n\t\t\t\t\t<NcActionRadio :checked=\"sharePermissionEqual(bundledPermissions.READ_ONLY)\"\n\t\t\t\t\t\t:value=\"bundledPermissions.READ_ONLY\"\n\t\t\t\t\t\t:name=\"randomFormName\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t@change=\"setSharePermissions(bundledPermissions.READ_ONLY)\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Read only') }}\n\t\t\t\t\t</NcActionRadio>\n\n\t\t\t\t\t<NcActionRadio :checked=\"sharePermissionEqual(bundledPermissions.UPLOAD_AND_UPDATE)\"\n\t\t\t\t\t\t:value=\"bundledPermissions.UPLOAD_AND_UPDATE\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t:name=\"randomFormName\"\n\t\t\t\t\t\t@change=\"setSharePermissions(bundledPermissions.UPLOAD_AND_UPDATE)\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Allow upload and editing') }}\n\t\t\t\t\t</NcActionRadio>\n\t\t\t\t\t<NcActionRadio :checked=\"sharePermissionEqual(bundledPermissions.FILE_DROP)\"\n\t\t\t\t\t\t:value=\"bundledPermissions.FILE_DROP\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t:name=\"randomFormName\"\n\t\t\t\t\t\tclass=\"sharing-entry__action--public-upload\"\n\t\t\t\t\t\t@change=\"setSharePermissions(bundledPermissions.FILE_DROP)\">\n\t\t\t\t\t\t{{ t('files_sharing', 'File drop (upload only)') }}\n\t\t\t\t\t</NcActionRadio>\n\n\t\t\t\t\t<!-- custom permissions button -->\n\t\t\t\t\t<NcActionButton :title=\"t('files_sharing', 'Custom permissions')\"\n\t\t\t\t\t\t@click=\"showCustomPermissionsForm = true\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<Tune />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ sharePermissionsIsBundle ? \"\" : sharePermissionsSummary }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</template>\n\n\t\t\t\t<!-- custom permissions -->\n\t\t\t\t<span v-else :class=\"{error: !sharePermissionsSetIsValid}\">\n\t\t\t\t\t<NcActionCheckbox :checked=\"shareHasPermissions(atomicPermissions.READ)\"\n\t\t\t\t\t\t:disabled=\"saving || !canToggleSharePermissions(atomicPermissions.READ)\"\n\t\t\t\t\t\t@update:checked=\"toggleSharePermissions(atomicPermissions.READ)\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Read') }}\n\t\t\t\t\t</NcActionCheckbox>\n\t\t\t\t\t<NcActionCheckbox :checked=\"shareHasPermissions(atomicPermissions.CREATE)\"\n\t\t\t\t\t\t:disabled=\"saving || !canToggleSharePermissions(atomicPermissions.CREATE)\"\n\t\t\t\t\t\t@update:checked=\"toggleSharePermissions(atomicPermissions.CREATE)\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Upload') }}\n\t\t\t\t\t</NcActionCheckbox>\n\t\t\t\t\t<NcActionCheckbox :checked=\"shareHasPermissions(atomicPermissions.UPDATE)\"\n\t\t\t\t\t\t:disabled=\"saving || !canToggleSharePermissions(atomicPermissions.UPDATE)\"\n\t\t\t\t\t\t@update:checked=\"toggleSharePermissions(atomicPermissions.UPDATE)\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Edit') }}\n\t\t\t\t\t</NcActionCheckbox>\n\t\t\t\t\t<NcActionCheckbox :checked=\"shareHasPermissions(atomicPermissions.DELETE)\"\n\t\t\t\t\t\t:disabled=\"saving || !canToggleSharePermissions(atomicPermissions.DELETE)\"\n\t\t\t\t\t\t@update:checked=\"toggleSharePermissions(atomicPermissions.DELETE)\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Delete') }}\n\t\t\t\t\t</NcActionCheckbox>\n\n\t\t\t\t\t<NcActionButton @click=\"showCustomPermissionsForm = false\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<ChevronLeft />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ t('files_sharing', 'Bundled permissions') }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</span>\n\t\t\t</template>\n\t\t</ul>\n\t</li>\n</template>\n\n<script>\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton'\nimport NcActionRadio from '@nextcloud/vue/dist/Components/NcActionRadio'\nimport NcActionCheckbox from '@nextcloud/vue/dist/Components/NcActionCheckbox'\n\nimport SharesMixin from '../mixins/SharesMixin'\nimport {\n\tATOMIC_PERMISSIONS,\n\tBUNDLED_PERMISSIONS,\n\thasPermissions,\n\tpermissionsSetIsValid,\n\ttogglePermissions,\n\tcanTogglePermissions,\n} from '../lib/SharePermissionsToolBox'\n\nimport Tune from 'vue-material-design-icons/Tune'\nimport ChevronLeft from 'vue-material-design-icons/ChevronLeft'\n\nexport default {\n\tname: 'SharePermissionsEditor',\n\n\tcomponents: {\n\t\tNcActionButton,\n\t\tNcActionCheckbox,\n\t\tNcActionRadio,\n\t\tTune,\n\t\tChevronLeft,\n\t},\n\n\tmixins: [SharesMixin],\n\n\tdata() {\n\t\treturn {\n\t\t\trandomFormName: Math.random().toString(27).substring(2),\n\n\t\t\tshowCustomPermissionsForm: false,\n\n\t\t\tatomicPermissions: ATOMIC_PERMISSIONS,\n\t\t\tbundledPermissions: BUNDLED_PERMISSIONS,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Return the summary of custom checked permissions.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tsharePermissionsSummary() {\n\t\t\treturn Object.values(this.atomicPermissions)\n\t\t\t\t.filter(permission => this.shareHasPermissions(permission))\n\t\t\t\t.map(permission => {\n\t\t\t\t\tswitch (permission) {\n\t\t\t\t\tcase this.atomicPermissions.CREATE:\n\t\t\t\t\t\treturn this.t('files_sharing', 'Upload')\n\t\t\t\t\tcase this.atomicPermissions.READ:\n\t\t\t\t\t\treturn this.t('files_sharing', 'Read')\n\t\t\t\t\tcase this.atomicPermissions.UPDATE:\n\t\t\t\t\t\treturn this.t('files_sharing', 'Edit')\n\t\t\t\t\tcase this.atomicPermissions.DELETE:\n\t\t\t\t\t\treturn this.t('files_sharing', 'Delete')\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn null\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.filter(permissionLabel => permissionLabel !== null)\n\t\t\t\t.join(', ')\n\t\t},\n\n\t\t/**\n\t\t * Return whether the share's permission is a bundle.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tsharePermissionsIsBundle() {\n\t\t\treturn Object.values(BUNDLED_PERMISSIONS)\n\t\t\t\t.map(bundle => this.sharePermissionEqual(bundle))\n\t\t\t\t.filter(isBundle => isBundle)\n\t\t\t\t.length > 0\n\t\t},\n\n\t\t/**\n\t\t * Return whether the share's permission is valid.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tsharePermissionsSetIsValid() {\n\t\t\treturn permissionsSetIsValid(this.share.permissions)\n\t\t},\n\n\t\t/**\n\t\t * Is the current share a folder ?\n\t\t * TODO: move to a proper FileInfo model?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisFolder() {\n\t\t\treturn this.fileInfo.type === 'dir'\n\t\t},\n\n\t\t/**\n\t\t * Does the current file/folder have create permissions.\n\t\t * TODO: move to a proper FileInfo model?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tfileHasCreatePermission() {\n\t\t\treturn !!(this.fileInfo.permissions & ATOMIC_PERMISSIONS.CREATE)\n\t\t},\n\t},\n\n\tmounted() {\n\t\t// Show the Custom Permissions view on open if the permissions set is not a bundle.\n\t\tthis.showCustomPermissionsForm = !this.sharePermissionsIsBundle\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Return whether the share has the exact given permissions.\n\t\t *\n\t\t * @param {number} permissions - the permissions to check.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tsharePermissionEqual(permissions) {\n\t\t\t// We use the share's permission without PERMISSION_SHARE as it is not relevant here.\n\t\t\treturn (this.share.permissions & ~ATOMIC_PERMISSIONS.SHARE) === permissions\n\t\t},\n\n\t\t/**\n\t\t * Return whether the share has the given permissions.\n\t\t *\n\t\t * @param {number} permissions - the permissions to check.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tshareHasPermissions(permissions) {\n\t\t\treturn hasPermissions(this.share.permissions, permissions)\n\t\t},\n\n\t\t/**\n\t\t * Set the share permissions to the given permissions.\n\t\t *\n\t\t * @param {number} permissions - the permissions to set.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tsetSharePermissions(permissions) {\n\t\t\tthis.share.permissions = permissions\n\t\t\tthis.queueUpdate('permissions')\n\t\t},\n\n\t\t/**\n\t\t * Return whether some given permissions can be toggled.\n\t\t *\n\t\t * @param {number} permissionsToToggle - the permissions to toggle.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tcanToggleSharePermissions(permissionsToToggle) {\n\t\t\treturn canTogglePermissions(this.share.permissions, permissionsToToggle)\n\t\t},\n\n\t\t/**\n\t\t * Toggle a given permission.\n\t\t *\n\t\t * @param {number} permissions - the permissions to toggle.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\ttoggleSharePermissions(permissions) {\n\t\t\tthis.share.permissions = togglePermissions(this.share.permissions, permissions)\n\n\t\t\tif (!permissionsSetIsValid(this.share.permissions)) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.queueUpdate('permissions')\n\t\t},\n\t},\n}\n</script>\n<style lang=\"scss\" scoped>\n.error {\n\t::v-deep .action-checkbox__label:before {\n\t\tborder: 1px solid var(--color-error);\n\t}\n}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharePermissionsEditor.vue?vue&type=style&index=0&id=5e957d09&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharePermissionsEditor.vue?vue&type=style&index=0&id=5e957d09&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SharePermissionsEditor.vue?vue&type=template&id=5e957d09&scoped=true&\"\nimport script from \"./SharePermissionsEditor.vue?vue&type=script&lang=js&\"\nexport * from \"./SharePermissionsEditor.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SharePermissionsEditor.vue?vue&type=style&index=0&id=5e957d09&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5e957d09\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('li',[_c('ul',[(!_vm.isFolder)?_c('NcActionCheckbox',{attrs:{\"checked\":_vm.shareHasPermissions(_vm.atomicPermissions.UPDATE),\"disabled\":_vm.saving},on:{\"update:checked\":function($event){return _vm.toggleSharePermissions(_vm.atomicPermissions.UPDATE)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Allow editing'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.isFolder && _vm.fileHasCreatePermission && _vm.config.isPublicUploadEnabled)?[(!_vm.showCustomPermissionsForm)?[_c('NcActionRadio',{attrs:{\"checked\":_vm.sharePermissionEqual(_vm.bundledPermissions.READ_ONLY),\"value\":_vm.bundledPermissions.READ_ONLY,\"name\":_vm.randomFormName,\"disabled\":_vm.saving},on:{\"change\":function($event){return _vm.setSharePermissions(_vm.bundledPermissions.READ_ONLY)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Read only'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionRadio',{attrs:{\"checked\":_vm.sharePermissionEqual(_vm.bundledPermissions.UPLOAD_AND_UPDATE),\"value\":_vm.bundledPermissions.UPLOAD_AND_UPDATE,\"disabled\":_vm.saving,\"name\":_vm.randomFormName},on:{\"change\":function($event){return _vm.setSharePermissions(_vm.bundledPermissions.UPLOAD_AND_UPDATE)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Allow upload and editing'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionRadio',{staticClass:\"sharing-entry__action--public-upload\",attrs:{\"checked\":_vm.sharePermissionEqual(_vm.bundledPermissions.FILE_DROP),\"value\":_vm.bundledPermissions.FILE_DROP,\"disabled\":_vm.saving,\"name\":_vm.randomFormName},on:{\"change\":function($event){return _vm.setSharePermissions(_vm.bundledPermissions.FILE_DROP)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'File drop (upload only)'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"title\":_vm.t('files_sharing', 'Custom permissions')},on:{\"click\":function($event){_vm.showCustomPermissionsForm = true}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Tune')]},proxy:true}],null,false,961531849)},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.sharePermissionsIsBundle ? \"\" : _vm.sharePermissionsSummary)+\"\\n\\t\\t\\t\\t\")])]:_c('span',{class:{error: !_vm.sharePermissionsSetIsValid}},[_c('NcActionCheckbox',{attrs:{\"checked\":_vm.shareHasPermissions(_vm.atomicPermissions.READ),\"disabled\":_vm.saving || !_vm.canToggleSharePermissions(_vm.atomicPermissions.READ)},on:{\"update:checked\":function($event){return _vm.toggleSharePermissions(_vm.atomicPermissions.READ)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Read'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionCheckbox',{attrs:{\"checked\":_vm.shareHasPermissions(_vm.atomicPermissions.CREATE),\"disabled\":_vm.saving || !_vm.canToggleSharePermissions(_vm.atomicPermissions.CREATE)},on:{\"update:checked\":function($event){return _vm.toggleSharePermissions(_vm.atomicPermissions.CREATE)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Upload'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionCheckbox',{attrs:{\"checked\":_vm.shareHasPermissions(_vm.atomicPermissions.UPDATE),\"disabled\":_vm.saving || !_vm.canToggleSharePermissions(_vm.atomicPermissions.UPDATE)},on:{\"update:checked\":function($event){return _vm.toggleSharePermissions(_vm.atomicPermissions.UPDATE)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Edit'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionCheckbox',{attrs:{\"checked\":_vm.shareHasPermissions(_vm.atomicPermissions.DELETE),\"disabled\":_vm.saving || !_vm.canToggleSharePermissions(_vm.atomicPermissions.DELETE)},on:{\"update:checked\":function($event){return _vm.toggleSharePermissions(_vm.atomicPermissions.DELETE)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Delete'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionButton',{on:{\"click\":function($event){_vm.showCustomPermissionsForm = false}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('ChevronLeft')]},proxy:true}],null,false,1018742195)},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Bundled permissions'))+\"\\n\\t\\t\\t\\t\")])],1)]:_vm._e()],2)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<li :class=\"{'sharing-entry--share': share}\" class=\"sharing-entry sharing-entry__link\">\n\t\t<NcAvatar :is-no-user=\"true\"\n\t\t\t:icon-class=\"isEmailShareType ? 'avatar-link-share icon-mail-white' : 'avatar-link-share icon-public-white'\"\n\t\t\tclass=\"sharing-entry__avatar\" />\n\t\t<div class=\"sharing-entry__desc\">\n\t\t\t<span class=\"sharing-entry__title\" :title=\"title\">\n\t\t\t\t{{ title }}\n\t\t\t</span>\n\t\t\t<p v-if=\"subtitle\">\n\t\t\t\t{{ subtitle }}\n\t\t\t</p>\n\t\t</div>\n\n\t\t<!-- clipboard -->\n\t\t<NcActions v-if=\"share && !isEmailShareType && share.token\"\n\t\t\tref=\"copyButton\"\n\t\t\tclass=\"sharing-entry__copy\">\n\t\t\t<NcActionLink :href=\"shareLink\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\t:title=\"copyLinkTooltip\"\n\t\t\t\t:aria-label=\"copyLinkTooltip\"\n\t\t\t\t:icon=\"copied && copySuccess ? 'icon-checkmark-color' : 'icon-clippy'\"\n\t\t\t\t@click.stop.prevent=\"copyLink\" />\n\t\t</NcActions>\n\n\t\t<!-- pending actions -->\n\t\t<NcActions v-if=\"!pending && (pendingPassword || pendingEnforcedPassword || pendingExpirationDate)\"\n\t\t\tclass=\"sharing-entry__actions\"\n\t\t\t:aria-label=\"actionsTooltip\"\n\t\t\tmenu-align=\"right\"\n\t\t\t:open.sync=\"open\"\n\t\t\t@close=\"onNewLinkShare\">\n\t\t\t<!-- pending data menu -->\n\t\t\t<NcActionText v-if=\"errors.pending\"\n\t\t\t\ticon=\"icon-error\"\n\t\t\t\t:class=\"{ error: errors.pending}\">\n\t\t\t\t{{ errors.pending }}\n\t\t\t</NcActionText>\n\t\t\t<NcActionText v-else icon=\"icon-info\">\n\t\t\t\t{{ t('files_sharing', 'Please enter the following required information before creating the share') }}\n\t\t\t</NcActionText>\n\n\t\t\t<!-- password -->\n\t\t\t<NcActionText v-if=\"pendingEnforcedPassword\" icon=\"icon-password\">\n\t\t\t\t{{ t('files_sharing', 'Password protection (enforced)') }}\n\t\t\t</NcActionText>\n\t\t\t<NcActionCheckbox v-else-if=\"pendingPassword\"\n\t\t\t\t:checked.sync=\"isPasswordProtected\"\n\t\t\t\t:disabled=\"config.enforcePasswordForPublicLink || saving\"\n\t\t\t\tclass=\"share-link-password-checkbox\"\n\t\t\t\t@uncheck=\"onPasswordDisable\">\n\t\t\t\t{{ t('files_sharing', 'Password protection') }}\n\t\t\t</NcActionCheckbox>\n\n\t\t\t<NcActionInput v-if=\"pendingEnforcedPassword || share.password\"\n\t\t\t\tclass=\"share-link-password\"\n\t\t\t\t:value.sync=\"share.password\"\n\t\t\t\t:disabled=\"saving\"\n\t\t\t\t:required=\"config.enableLinkPasswordByDefault || config.enforcePasswordForPublicLink\"\n\t\t\t\t:minlength=\"isPasswordPolicyEnabled && config.passwordPolicy.minLength\"\n\t\t\t\ticon=\"\"\n\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\t@submit=\"onNewLinkShare\">\n\t\t\t\t{{ t('files_sharing', 'Enter a password') }}\n\t\t\t</NcActionInput>\n\n\t\t\t<!-- expiration date -->\n\t\t\t<NcActionText v-if=\"pendingExpirationDate\" icon=\"icon-calendar-dark\">\n\t\t\t\t{{ t('files_sharing', 'Expiration date (enforced)') }}\n\t\t\t</NcActionText>\n\t\t\t<NcActionInput v-if=\"pendingExpirationDate\"\n\t\t\t\tclass=\"share-link-expire-date\"\n\t\t\t\t:disabled=\"saving\"\n\t\t\t\t:is-native-picker=\"true\"\n\t\t\t\t:hide-label=\"true\"\n\t\t\t\t:value=\"new Date(share.expireDate)\"\n\t\t\t\ttype=\"date\"\n\t\t\t\t:min=\"dateTomorrow\"\n\t\t\t\t:max=\"dateMaxEnforced\"\n\t\t\t\t@input=\"onExpirationChange\">\n\t\t\t\t<!-- let's not submit when picked, the user\n\t\t\t\t\tmight want to still edit or copy the password -->\n\t\t\t\t{{ t('files_sharing', 'Enter a date') }}\n\t\t\t</NcActionInput>\n\n\t\t\t<NcActionButton icon=\"icon-checkmark\" @click.prevent.stop=\"onNewLinkShare\">\n\t\t\t\t{{ t('files_sharing', 'Create share') }}\n\t\t\t</NcActionButton>\n\t\t\t<NcActionButton icon=\"icon-close\" @click.prevent.stop=\"onCancel\">\n\t\t\t\t{{ t('files_sharing', 'Cancel') }}\n\t\t\t</NcActionButton>\n\t\t</NcActions>\n\n\t\t<!-- actions -->\n\t\t<NcActions v-else-if=\"!loading\"\n\t\t\tclass=\"sharing-entry__actions\"\n\t\t\t:aria-label=\"actionsTooltip\"\n\t\t\tmenu-align=\"right\"\n\t\t\t:open.sync=\"open\"\n\t\t\t@close=\"onMenuClose\">\n\t\t\t<template v-if=\"share\">\n\t\t\t\t<template v-if=\"share.canEdit && canReshare\">\n\t\t\t\t\t<!-- Custom Label -->\n\t\t\t\t\t<NcActionInput ref=\"label\"\n\t\t\t\t\t\t:class=\"{ error: errors.label }\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t:label=\"t('files_sharing', 'Share label')\"\n\t\t\t\t\t\t:value=\"share.newLabel !== undefined ? share.newLabel : share.label\"\n\t\t\t\t\t\ticon=\"icon-edit\"\n\t\t\t\t\t\tmaxlength=\"255\"\n\t\t\t\t\t\t@update:value=\"onLabelChange\"\n\t\t\t\t\t\t@submit=\"onLabelSubmit\" />\n\n\t\t\t\t\t<SharePermissionsEditor :can-reshare=\"canReshare\"\n\t\t\t\t\t\t:share.sync=\"share\"\n\t\t\t\t\t\t:file-info=\"fileInfo\" />\n\n\t\t\t\t\t<NcActionSeparator />\n\n\t\t\t\t\t<NcActionCheckbox :checked.sync=\"share.hideDownload\"\n\t\t\t\t\t\t:disabled=\"saving || canChangeHideDownload\"\n\t\t\t\t\t\t@change=\"queueUpdate('hideDownload')\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Hide download') }}\n\t\t\t\t\t</NcActionCheckbox>\n\n\t\t\t\t\t<!-- password -->\n\t\t\t\t\t<NcActionCheckbox :checked.sync=\"isPasswordProtected\"\n\t\t\t\t\t\t:disabled=\"config.enforcePasswordForPublicLink || saving\"\n\t\t\t\t\t\tclass=\"share-link-password-checkbox\"\n\t\t\t\t\t\t@uncheck=\"onPasswordDisable\">\n\t\t\t\t\t\t{{ config.enforcePasswordForPublicLink\n\t\t\t\t\t\t\t? t('files_sharing', 'Password protection (enforced)')\n\t\t\t\t\t\t\t: t('files_sharing', 'Password protect') }}\n\t\t\t\t\t</NcActionCheckbox>\n\n\t\t\t\t\t<NcActionInput v-if=\"isPasswordProtected\"\n\t\t\t\t\t\tref=\"password\"\n\t\t\t\t\t\tclass=\"share-link-password\"\n\t\t\t\t\t\t:class=\"{ error: errors.password}\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t:required=\"config.enforcePasswordForPublicLink\"\n\t\t\t\t\t\t:value=\"hasUnsavedPassword ? share.newPassword : '***************'\"\n\t\t\t\t\t\ticon=\"icon-password\"\n\t\t\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\t\t\t:type=\"hasUnsavedPassword ? 'text': 'password'\"\n\t\t\t\t\t\t@update:value=\"onPasswordChange\"\n\t\t\t\t\t\t@submit=\"onPasswordSubmit\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Enter a password') }}\n\t\t\t\t\t</NcActionInput>\n\t\t\t\t\t<NcActionText v-if=\"isEmailShareType && passwordExpirationTime\" icon=\"icon-info\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Password expires {passwordExpirationTime}', {passwordExpirationTime}) }}\n\t\t\t\t\t</NcActionText>\n\t\t\t\t\t<NcActionText v-else-if=\"isEmailShareType && passwordExpirationTime !== null\" icon=\"icon-error\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Password expired') }}\n\t\t\t\t\t</NcActionText>\n\n\t\t\t\t\t<!-- password protected by Talk -->\n\t\t\t\t\t<NcActionCheckbox v-if=\"isPasswordProtectedByTalkAvailable\"\n\t\t\t\t\t\t:checked.sync=\"isPasswordProtectedByTalk\"\n\t\t\t\t\t\t:disabled=\"!canTogglePasswordProtectedByTalkAvailable || saving\"\n\t\t\t\t\t\tclass=\"share-link-password-talk-checkbox\"\n\t\t\t\t\t\t@change=\"onPasswordProtectedByTalkChange\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Video verification') }}\n\t\t\t\t\t</NcActionCheckbox>\n\n\t\t\t\t\t<!-- expiration date -->\n\t\t\t\t\t<NcActionCheckbox :checked.sync=\"hasExpirationDate\"\n\t\t\t\t\t\t:disabled=\"config.isDefaultExpireDateEnforced || saving\"\n\t\t\t\t\t\tclass=\"share-link-expire-date-checkbox\"\n\t\t\t\t\t\t@uncheck=\"onExpirationDisable\">\n\t\t\t\t\t\t{{ config.isDefaultExpireDateEnforced\n\t\t\t\t\t\t\t? t('files_sharing', 'Expiration date (enforced)')\n\t\t\t\t\t\t\t: t('files_sharing', 'Set expiration date') }}\n\t\t\t\t\t</NcActionCheckbox>\n\t\t\t\t\t<NcActionInput v-if=\"hasExpirationDate\"\n\t\t\t\t\t\tref=\"expireDate\"\n\t\t\t\t\t\t:is-native-picker=\"true\"\n\t\t\t\t\t\t:hide-label=\"true\"\n\t\t\t\t\t\tclass=\"share-link-expire-date\"\n\t\t\t\t\t\t:class=\"{ error: errors.expireDate}\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t:value=\"new Date(share.expireDate)\"\n\t\t\t\t\t\ttype=\"date\"\n\t\t\t\t\t\t:min=\"dateTomorrow\"\n\t\t\t\t\t\t:max=\"dateMaxEnforced\"\n\t\t\t\t\t\t@input=\"onExpirationChange\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Enter a date') }}\n\t\t\t\t\t</NcActionInput>\n\n\t\t\t\t\t<!-- note -->\n\t\t\t\t\t<NcActionCheckbox :checked.sync=\"hasNote\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t@uncheck=\"queueUpdate('note')\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Note to recipient') }}\n\t\t\t\t\t</NcActionCheckbox>\n\n\t\t\t\t\t<NcActionTextEditable v-if=\"hasNote\"\n\t\t\t\t\t\tref=\"note\"\n\t\t\t\t\t\t:class=\"{ error: errors.note}\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t:placeholder=\"t('files_sharing', 'Enter a note for the share recipient')\"\n\t\t\t\t\t\t:value=\"share.newNote || share.note\"\n\t\t\t\t\t\ticon=\"icon-edit\"\n\t\t\t\t\t\t@update:value=\"onNoteChange\"\n\t\t\t\t\t\t@submit=\"onNoteSubmit\" />\n\t\t\t\t</template>\n\n\t\t\t\t<NcActionSeparator />\n\n\t\t\t\t<!-- external actions -->\n\t\t\t\t<ExternalShareAction v-for=\"action in externalLinkActions\"\n\t\t\t\t\t:id=\"action.id\"\n\t\t\t\t\t:key=\"action.id\"\n\t\t\t\t\t:action=\"action\"\n\t\t\t\t\t:file-info=\"fileInfo\"\n\t\t\t\t\t:share=\"share\" />\n\n\t\t\t\t<!-- external legacy sharing via url (social...) -->\n\t\t\t\t<NcActionLink v-for=\"({icon, url, name}, index) in externalLegacyLinkActions\"\n\t\t\t\t\t:key=\"index\"\n\t\t\t\t\t:href=\"url(shareLink)\"\n\t\t\t\t\t:icon=\"icon\"\n\t\t\t\t\ttarget=\"_blank\">\n\t\t\t\t\t{{ name }}\n\t\t\t\t</NcActionLink>\n\n\t\t\t\t<NcActionButton v-if=\"share.canDelete\"\n\t\t\t\t\ticon=\"icon-close\"\n\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t@click.prevent=\"onDelete\">\n\t\t\t\t\t{{ t('files_sharing', 'Unshare') }}\n\t\t\t\t</NcActionButton>\n\t\t\t\t<NcActionButton v-if=\"!isEmailShareType && canReshare\"\n\t\t\t\t\tclass=\"new-share-link\"\n\t\t\t\t\ticon=\"icon-add\"\n\t\t\t\t\t@click.prevent.stop=\"onNewLinkShare\">\n\t\t\t\t\t{{ t('files_sharing', 'Add another link') }}\n\t\t\t\t</NcActionButton>\n\t\t\t</template>\n\n\t\t\t<!-- Create new share -->\n\t\t\t<NcActionButton v-else-if=\"canReshare\"\n\t\t\t\tclass=\"new-share-link\"\n\t\t\t\t:title=\"t('files_sharing', 'Create a new share link')\"\n\t\t\t\t:aria-label=\"t('files_sharing', 'Create a new share link')\"\n\t\t\t\t:icon=\"loading ? 'icon-loading-small' : 'icon-add'\"\n\t\t\t\t@click.prevent.stop=\"onNewLinkShare\" />\n\t\t</NcActions>\n\n\t\t<!-- loading indicator to replace the menu -->\n\t\t<div v-else class=\"icon-loading-small sharing-entry__loading\" />\n\t</li>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport { showError, showSuccess } from '@nextcloud/dialogs'\nimport { Type as ShareTypes } from '@nextcloud/sharing'\nimport Vue from 'vue'\n\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton'\nimport NcActionCheckbox from '@nextcloud/vue/dist/Components/NcActionCheckbox'\nimport NcActionInput from '@nextcloud/vue/dist/Components/NcActionInput'\nimport NcActionLink from '@nextcloud/vue/dist/Components/NcActionLink'\nimport NcActionText from '@nextcloud/vue/dist/Components/NcActionText'\nimport NcActionSeparator from '@nextcloud/vue/dist/Components/NcActionSeparator'\nimport NcActionTextEditable from '@nextcloud/vue/dist/Components/NcActionTextEditable'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions'\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar'\n\nimport ExternalShareAction from './ExternalShareAction.vue'\nimport SharePermissionsEditor from './SharePermissionsEditor.vue'\nimport GeneratePassword from '../utils/GeneratePassword.js'\nimport Share from '../models/Share.js'\nimport SharesMixin from '../mixins/SharesMixin.js'\n\nexport default {\n\tname: 'SharingEntryLink',\n\n\tcomponents: {\n\t\tNcActions,\n\t\tNcActionButton,\n\t\tNcActionCheckbox,\n\t\tNcActionInput,\n\t\tNcActionLink,\n\t\tNcActionText,\n\t\tNcActionTextEditable,\n\t\tNcActionSeparator,\n\t\tNcAvatar,\n\t\tExternalShareAction,\n\t\tSharePermissionsEditor,\n\t},\n\n\tmixins: [SharesMixin],\n\n\tprops: {\n\t\tcanReshare: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tindex: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tcopySuccess: true,\n\t\t\tcopied: false,\n\n\t\t\t// Are we waiting for password/expiration date\n\t\t\tpending: false,\n\n\t\t\tExternalLegacyLinkActions: OCA.Sharing.ExternalLinkActions.state,\n\t\t\tExternalShareActions: OCA.Sharing.ExternalShareActions.state,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Link share label\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\ttitle() {\n\t\t\t// if we have a valid existing share (not pending)\n\t\t\tif (this.share && this.share.id) {\n\t\t\t\tif (!this.isShareOwner && this.share.ownerDisplayName) {\n\t\t\t\t\tif (this.isEmailShareType) {\n\t\t\t\t\t\treturn t('files_sharing', '{shareWith} by {initiator}', {\n\t\t\t\t\t\t\tshareWith: this.share.shareWith,\n\t\t\t\t\t\t\tinitiator: this.share.ownerDisplayName,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\treturn t('files_sharing', 'Shared via link by {initiator}', {\n\t\t\t\t\t\tinitiator: this.share.ownerDisplayName,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (this.share.label && this.share.label.trim() !== '') {\n\t\t\t\t\tif (this.isEmailShareType) {\n\t\t\t\t\t\treturn t('files_sharing', 'Mail share ({label})', {\n\t\t\t\t\t\t\tlabel: this.share.label.trim(),\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\treturn t('files_sharing', 'Share link ({label})', {\n\t\t\t\t\t\tlabel: this.share.label.trim(),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (this.isEmailShareType) {\n\t\t\t\t\treturn this.share.shareWith\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.index > 1) {\n\t\t\t\treturn t('files_sharing', 'Share link ({index})', { index: this.index })\n\t\t\t}\n\t\t\treturn t('files_sharing', 'Share link')\n\t\t},\n\n\t\t/**\n\t\t * Show the email on a second line if a label is set for mail shares\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tsubtitle() {\n\t\t\tif (this.isEmailShareType\n\t\t\t\t&& this.title !== this.share.shareWith) {\n\t\t\t\treturn this.share.shareWith\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\t/**\n\t\t * Does the current share have an expiration date\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\thasExpirationDate: {\n\t\t\tget() {\n\t\t\t\treturn this.config.isDefaultExpireDateEnforced\n\t\t\t\t\t|| !!this.share.expireDate\n\t\t\t},\n\t\t\tset(enabled) {\n\t\t\t\tconst defaultExpirationDate = this.config.defaultExpirationDate\n\t\t\t\t\t|| new Date(new Date().setDate(new Date().getDate() + 1))\n\t\t\t\tthis.share.expireDate = enabled\n\t\t\t\t\t? this.formatDateToString(defaultExpirationDate)\n\t\t\t\t\t: ''\n\t\t\t\tconsole.debug('Expiration date status', enabled, this.share.expireDate)\n\t\t\t},\n\t\t},\n\n\t\tdateMaxEnforced() {\n\t\t\tif (this.config.isDefaultExpireDateEnforced) {\n\t\t\t\treturn new Date(new Date().setDate(new Date().getDate() + this.config.defaultExpireDate))\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\t/**\n\t\t * Is the current share password protected ?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisPasswordProtected: {\n\t\t\tget() {\n\t\t\t\treturn this.config.enforcePasswordForPublicLink\n\t\t\t\t\t|| !!this.share.password\n\t\t\t},\n\t\t\tasync set(enabled) {\n\t\t\t\t// TODO: directly save after generation to make sure the share is always protected\n\t\t\t\tVue.set(this.share, 'password', enabled ? await GeneratePassword() : '')\n\t\t\t\tVue.set(this.share, 'newPassword', this.share.password)\n\t\t\t},\n\t\t},\n\n\t\tpasswordExpirationTime() {\n\t\t\tif (this.share.passwordExpirationTime === null) {\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\tconst expirationTime = moment(this.share.passwordExpirationTime)\n\n\t\t\tif (expirationTime.diff(moment()) < 0) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\treturn expirationTime.fromNow()\n\t\t},\n\n\t\t/**\n\t\t * Is Talk enabled?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisTalkEnabled() {\n\t\t\treturn OC.appswebroots.spreed !== undefined\n\t\t},\n\n\t\t/**\n\t\t * Is it possible to protect the password by Talk?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisPasswordProtectedByTalkAvailable() {\n\t\t\treturn this.isPasswordProtected && this.isTalkEnabled\n\t\t},\n\n\t\t/**\n\t\t * Is the current share password protected by Talk?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisPasswordProtectedByTalk: {\n\t\t\tget() {\n\t\t\t\treturn this.share.sendPasswordByTalk\n\t\t\t},\n\t\t\tasync set(enabled) {\n\t\t\t\tthis.share.sendPasswordByTalk = enabled\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Is the current share an email share ?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisEmailShareType() {\n\t\t\treturn this.share\n\t\t\t\t? this.share.type === this.SHARE_TYPES.SHARE_TYPE_EMAIL\n\t\t\t\t: false\n\t\t},\n\n\t\tcanTogglePasswordProtectedByTalkAvailable() {\n\t\t\tif (!this.isPasswordProtected) {\n\t\t\t\t// Makes no sense\n\t\t\t\treturn false\n\t\t\t} else if (this.isEmailShareType && !this.hasUnsavedPassword) {\n\t\t\t\t// For email shares we need a new password in order to enable or\n\t\t\t\t// disable\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\t// Anything else should be fine\n\t\t\treturn true\n\t\t},\n\n\t\t/**\n\t\t * Pending data.\n\t\t * If the share still doesn't have an id, it is not synced\n\t\t * Therefore this is still not valid and requires user input\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tpendingPassword() {\n\t\t\treturn this.config.enableLinkPasswordByDefault && this.share && !this.share.id\n\t\t},\n\t\tpendingEnforcedPassword() {\n\t\t\treturn this.config.enforcePasswordForPublicLink && this.share && !this.share.id\n\t\t},\n\t\tpendingExpirationDate() {\n\t\t\treturn this.config.isDefaultExpireDateEnforced && this.share && !this.share.id\n\t\t},\n\n\t\t// if newPassword exists, but is empty, it means\n\t\t// the user deleted the original password\n\t\thasUnsavedPassword() {\n\t\t\treturn this.share.newPassword !== undefined\n\t\t},\n\n\t\t/**\n\t\t * Return the public share link\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tshareLink() {\n\t\t\treturn window.location.protocol + '//' + window.location.host + generateUrl('/s/') + this.share.token\n\t\t},\n\n\t\t/**\n\t\t * Tooltip message for actions button\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tactionsTooltip() {\n\t\t\treturn t('files_sharing', 'Actions for \"{title}\"', { title: this.title })\n\t\t},\n\n\t\t/**\n\t\t * Tooltip message for copy button\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tcopyLinkTooltip() {\n\t\t\tif (this.copied) {\n\t\t\t\tif (this.copySuccess) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\t\t\t\treturn t('files_sharing', 'Cannot copy, please copy the link manually')\n\t\t\t}\n\t\t\treturn t('files_sharing', 'Copy public link of \"{title}\" to clipboard', { title: this.title })\n\t\t},\n\n\t\t/**\n\t\t * External additionnai actions for the menu\n\t\t *\n\t\t * @deprecated use OCA.Sharing.ExternalShareActions\n\t\t * @return {Array}\n\t\t */\n\t\texternalLegacyLinkActions() {\n\t\t\treturn this.ExternalLegacyLinkActions.actions\n\t\t},\n\n\t\t/**\n\t\t * Additional actions for the menu\n\t\t *\n\t\t * @return {Array}\n\t\t */\n\t\texternalLinkActions() {\n\t\t\t// filter only the registered actions for said link\n\t\t\treturn this.ExternalShareActions.actions\n\t\t\t\t.filter(action => action.shareType.includes(ShareTypes.SHARE_TYPE_LINK)\n\t\t\t\t\t|| action.shareType.includes(ShareTypes.SHARE_TYPE_EMAIL))\n\t\t},\n\n\t\tisPasswordPolicyEnabled() {\n\t\t\treturn typeof this.config.passwordPolicy === 'object'\n\t\t},\n\n\t\tcanChangeHideDownload() {\n\t\t\tconst hasDisabledDownload = (shareAttribute) => shareAttribute.key === 'download' && shareAttribute.scope === 'permissions' && shareAttribute.enabled === false\n\n\t\t\treturn this.fileInfo.shareAttributes.some(hasDisabledDownload)\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Create a new share link and append it to the list\n\t\t */\n\t\tasync onNewLinkShare() {\n\t\t\t// do not run again if already loading\n\t\t\tif (this.loading) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst shareDefaults = {\n\t\t\t\tshare_type: ShareTypes.SHARE_TYPE_LINK,\n\t\t\t}\n\t\t\tif (this.config.isDefaultExpireDateEnforced) {\n\t\t\t\t// default is empty string if not set\n\t\t\t\t// expiration is the share object key, not expireDate\n\t\t\t\tshareDefaults.expiration = this.formatDateToString(this.config.defaultExpirationDate)\n\t\t\t}\n\n\t\t\t// do not push yet if we need a password or an expiration date: show pending menu\n\t\t\tif (this.config.enableLinkPasswordByDefault || this.config.enforcePasswordForPublicLink || this.config.isDefaultExpireDateEnforced) {\n\t\t\t\tthis.pending = true\n\n\t\t\t\t// if a share already exists, pushing it\n\t\t\t\tif (this.share && !this.share.id) {\n\t\t\t\t\t// if the share is valid, create it on the server\n\t\t\t\t\tif (this.checkShare(this.share)) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait this.pushNewLinkShare(this.share, true)\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tthis.pending = false\n\t\t\t\t\t\t\tconsole.error(e)\n\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn true\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.open = true\n\t\t\t\t\t\tOC.Notification.showTemporary(t('files_sharing', 'Error, please enter proper password and/or expiration date'))\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// ELSE, show the pending popovermenu\n\t\t\t\t// if password default or enforced, pre-fill with random one\n\t\t\t\tif (this.config.enableLinkPasswordByDefault || this.config.enforcePasswordForPublicLink) {\n\t\t\t\t\tshareDefaults.password = await GeneratePassword()\n\t\t\t\t}\n\n\t\t\t\t// create share & close menu\n\t\t\t\tconst share = new Share(shareDefaults)\n\t\t\t\tconst component = await new Promise(resolve => {\n\t\t\t\t\tthis.$emit('add:share', share, resolve)\n\t\t\t\t})\n\n\t\t\t\t// open the menu on the\n\t\t\t\t// freshly created share component\n\t\t\t\tthis.open = false\n\t\t\t\tthis.pending = false\n\t\t\t\tcomponent.open = true\n\n\t\t\t// Nothing is enforced, creating share directly\n\t\t\t} else {\n\t\t\t\tconst share = new Share(shareDefaults)\n\t\t\t\tawait this.pushNewLinkShare(share)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Push a new link share to the server\n\t\t * And update or append to the list\n\t\t * accordingly\n\t\t *\n\t\t * @param {Share} share the new share\n\t\t * @param {boolean} [update=false] do we update the current share ?\n\t\t */\n\t\tasync pushNewLinkShare(share, update) {\n\t\t\ttry {\n\t\t\t\t// do nothing if we're already pending creation\n\t\t\t\tif (this.loading) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\n\t\t\t\tthis.loading = true\n\t\t\t\tthis.errors = {}\n\n\t\t\t\tconst path = (this.fileInfo.path + '/' + this.fileInfo.name).replace('//', '/')\n\t\t\t\tconst options = {\n\t\t\t\t\tpath,\n\t\t\t\t\tshareType: ShareTypes.SHARE_TYPE_LINK,\n\t\t\t\t\tpassword: share.password,\n\t\t\t\t\texpireDate: share.expireDate,\n\t\t\t\t\tattributes: JSON.stringify(this.fileInfo.shareAttributes),\n\t\t\t\t\t// we do not allow setting the publicUpload\n\t\t\t\t\t// before the share creation.\n\t\t\t\t\t// Todo: We also need to fix the createShare method in\n\t\t\t\t\t// lib/Controller/ShareAPIController.php to allow file drop\n\t\t\t\t\t// (currently not supported on create, only update)\n\t\t\t\t}\n\n\t\t\t\tconsole.debug('Creating link share with options', options)\n\t\t\t\tconst newShare = await this.createShare(options)\n\n\t\t\t\tthis.open = false\n\t\t\t\tconsole.debug('Link share created', newShare)\n\n\t\t\t\t// if share already exists, copy link directly on next tick\n\t\t\t\tlet component\n\t\t\t\tif (update) {\n\t\t\t\t\tcomponent = await new Promise(resolve => {\n\t\t\t\t\t\tthis.$emit('update:share', newShare, resolve)\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\t// adding new share to the array and copying link to clipboard\n\t\t\t\t\t// using promise so that we can copy link in the same click function\n\t\t\t\t\t// and avoid firefox copy permissions issue\n\t\t\t\t\tcomponent = await new Promise(resolve => {\n\t\t\t\t\t\tthis.$emit('add:share', newShare, resolve)\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\t// Execute the copy link method\n\t\t\t\t// freshly created share component\n\t\t\t\t// ! somehow does not works on firefox !\n\t\t\t\tif (!this.config.enforcePasswordForPublicLink) {\n\t\t\t\t\t// Only copy the link when the password was not forced,\n\t\t\t\t\t// otherwise the user needs to copy/paste the password before finishing the share.\n\t\t\t\t\tcomponent.copyLink()\n\t\t\t\t}\n\t\t\t\tshowSuccess(t('sharing', 'Link share created'))\n\n\t\t\t} catch (data) {\n\t\t\t\tconst message = data?.response?.data?.ocs?.meta?.message\n\t\t\t\tif (!message) {\n\t\t\t\t\tshowError(t('sharing', 'Error while creating the share'))\n\t\t\t\t\tconsole.error(data)\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tif (message.match(/password/i)) {\n\t\t\t\t\tthis.onSyncError('password', message)\n\t\t\t\t} else if (message.match(/date/i)) {\n\t\t\t\t\tthis.onSyncError('expireDate', message)\n\t\t\t\t} else {\n\t\t\t\t\tthis.onSyncError('pending', message)\n\t\t\t\t}\n\t\t\t\tthrow data\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Label changed, let's save it to a different key\n\t\t *\n\t\t * @param {string} label the share label\n\t\t */\n\t\tonLabelChange(label) {\n\t\t\tthis.$set(this.share, 'newLabel', label.trim())\n\t\t},\n\n\t\t/**\n\t\t * When the note change, we trim, save and dispatch\n\t\t */\n\t\tonLabelSubmit() {\n\t\t\tif (typeof this.share.newLabel === 'string') {\n\t\t\t\tthis.share.label = this.share.newLabel\n\t\t\t\tthis.$delete(this.share, 'newLabel')\n\t\t\t\tthis.queueUpdate('label')\n\t\t\t}\n\t\t},\n\t\tasync copyLink() {\n\t\t\ttry {\n\t\t\t\tawait navigator.clipboard.writeText(this.shareLink)\n\t\t\t\tshowSuccess(t('files_sharing', 'Link copied'))\n\t\t\t\t// focus and show the tooltip\n\t\t\t\tthis.$refs.copyButton.$el.focus()\n\t\t\t\tthis.copySuccess = true\n\t\t\t\tthis.copied = true\n\t\t\t} catch (error) {\n\t\t\t\tthis.copySuccess = false\n\t\t\t\tthis.copied = true\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.copySuccess = false\n\t\t\t\t\tthis.copied = false\n\t\t\t\t}, 4000)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Update newPassword values\n\t\t * of share. If password is set but not newPassword\n\t\t * then the user did not changed the password\n\t\t * If both co-exists, the password have changed and\n\t\t * we show it in plain text.\n\t\t * Then on submit (or menu close), we sync it.\n\t\t *\n\t\t * @param {string} password the changed password\n\t\t */\n\t\tonPasswordChange(password) {\n\t\t\tthis.$set(this.share, 'newPassword', password)\n\t\t},\n\n\t\t/**\n\t\t * Uncheck password protection\n\t\t * We need this method because @update:checked\n\t\t * is ran simultaneously as @uncheck, so we\n\t\t * cannot ensure data is up-to-date\n\t\t */\n\t\tonPasswordDisable() {\n\t\t\tthis.share.password = ''\n\n\t\t\t// reset password state after sync\n\t\t\tthis.$delete(this.share, 'newPassword')\n\n\t\t\t// only update if valid share.\n\t\t\tif (this.share.id) {\n\t\t\t\tthis.queueUpdate('password')\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Menu have been closed or password has been submitted.\n\t\t * The only property that does not get\n\t\t * synced automatically is the password\n\t\t * So let's check if we have an unsaved\n\t\t * password.\n\t\t * expireDate is saved on datepicker pick\n\t\t * or close.\n\t\t */\n\t\tonPasswordSubmit() {\n\t\t\tif (this.hasUnsavedPassword) {\n\t\t\t\tthis.share.password = this.share.newPassword.trim()\n\t\t\t\tthis.queueUpdate('password')\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Update the password along with \"sendPasswordByTalk\".\n\t\t *\n\t\t * If the password was modified the new password is sent; otherwise\n\t\t * updating a mail share would fail, as in that case it is required that\n\t\t * a new password is set when enabling or disabling\n\t\t * \"sendPasswordByTalk\".\n\t\t */\n\t\tonPasswordProtectedByTalkChange() {\n\t\t\tif (this.hasUnsavedPassword) {\n\t\t\t\tthis.share.password = this.share.newPassword.trim()\n\t\t\t}\n\n\t\t\tthis.queueUpdate('sendPasswordByTalk', 'password')\n\t\t},\n\n\t\t/**\n\t\t * Save potential changed data on menu close\n\t\t */\n\t\tonMenuClose() {\n\t\t\tthis.onPasswordSubmit()\n\t\t\tthis.onNoteSubmit()\n\t\t},\n\n\t\t/**\n\t\t * Cancel the share creation\n\t\t * Used in the pending popover\n\t\t */\n\t\tonCancel() {\n\t\t\t// this.share already exists at this point,\n\t\t\t// but is incomplete as not pushed to server\n\t\t\t// YET. We can safely delete the share :)\n\t\t\tthis.$emit('remove:share', this.share)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.sharing-entry {\n\tdisplay: flex;\n\talign-items: center;\n\tmin-height: 44px;\n\t&__desc {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tjustify-content: space-between;\n\t\tpadding: 8px;\n\t\tline-height: 1.2em;\n\t\toverflow: hidden;\n\n\t\tp {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n\t&__title {\n\t\ttext-overflow: ellipsis;\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t}\n\n\t&:not(.sharing-entry--share) &__actions {\n\t\t.new-share-link {\n\t\t\tborder-top: 1px solid var(--color-border);\n\t\t}\n\t}\n\n\t::v-deep .avatar-link-share {\n\t\tbackground-color: var(--color-primary);\n\t}\n\n\t.sharing-entry__action--public-upload {\n\t\tborder-bottom: 1px solid var(--color-border);\n\t}\n\n\t&__loading {\n\t\twidth: 44px;\n\t\theight: 44px;\n\t\tmargin: 0;\n\t\tpadding: 14px;\n\t\tmargin-left: auto;\n\t}\n\n\t// put menus to the left\n\t// but only the first one\n\t.action-item {\n\t\tmargin-left: auto;\n\t\t~ .action-item,\n\t\t~ .sharing-entry__loading {\n\t\t\tmargin-left: 0;\n\t\t}\n\t}\n\n\t.icon-checkmark-color {\n\t\topacity: 1;\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntryLink.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!./SharingEntryLink.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntryLink.vue?vue&type=style&index=0&id=10855e60&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntryLink.vue?vue&type=style&index=0&id=10855e60&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SharingEntryLink.vue?vue&type=template&id=10855e60&scoped=true&\"\nimport script from \"./SharingEntryLink.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingEntryLink.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SharingEntryLink.vue?vue&type=style&index=0&id=10855e60&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"10855e60\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('li',{staticClass:\"sharing-entry sharing-entry__link\",class:{'sharing-entry--share': _vm.share}},[_c('NcAvatar',{staticClass:\"sharing-entry__avatar\",attrs:{\"is-no-user\":true,\"icon-class\":_vm.isEmailShareType ? 'avatar-link-share icon-mail-white' : 'avatar-link-share icon-public-white'}}),_vm._v(\" \"),_c('div',{staticClass:\"sharing-entry__desc\"},[_c('span',{staticClass:\"sharing-entry__title\",attrs:{\"title\":_vm.title}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.title)+\"\\n\\t\\t\")]),_vm._v(\" \"),(_vm.subtitle)?_c('p',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.subtitle)+\"\\n\\t\\t\")]):_vm._e()]),_vm._v(\" \"),(_vm.share && !_vm.isEmailShareType && _vm.share.token)?_c('NcActions',{ref:\"copyButton\",staticClass:\"sharing-entry__copy\"},[_c('NcActionLink',{attrs:{\"href\":_vm.shareLink,\"target\":\"_blank\",\"title\":_vm.copyLinkTooltip,\"aria-label\":_vm.copyLinkTooltip,\"icon\":_vm.copied && _vm.copySuccess ? 'icon-checkmark-color' : 'icon-clippy'},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.copyLink.apply(null, arguments)}}})],1):_vm._e(),_vm._v(\" \"),(!_vm.pending && (_vm.pendingPassword || _vm.pendingEnforcedPassword || _vm.pendingExpirationDate))?_c('NcActions',{staticClass:\"sharing-entry__actions\",attrs:{\"aria-label\":_vm.actionsTooltip,\"menu-align\":\"right\",\"open\":_vm.open},on:{\"update:open\":function($event){_vm.open=$event},\"close\":_vm.onNewLinkShare}},[(_vm.errors.pending)?_c('NcActionText',{class:{ error: _vm.errors.pending},attrs:{\"icon\":\"icon-error\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.errors.pending)+\"\\n\\t\\t\")]):_c('NcActionText',{attrs:{\"icon\":\"icon-info\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Please enter the following required information before creating the share'))+\"\\n\\t\\t\")]),_vm._v(\" \"),(_vm.pendingEnforcedPassword)?_c('NcActionText',{attrs:{\"icon\":\"icon-password\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Password protection (enforced)'))+\"\\n\\t\\t\")]):(_vm.pendingPassword)?_c('NcActionCheckbox',{staticClass:\"share-link-password-checkbox\",attrs:{\"checked\":_vm.isPasswordProtected,\"disabled\":_vm.config.enforcePasswordForPublicLink || _vm.saving},on:{\"update:checked\":function($event){_vm.isPasswordProtected=$event},\"uncheck\":_vm.onPasswordDisable}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Password protection'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.pendingEnforcedPassword || _vm.share.password)?_c('NcActionInput',{staticClass:\"share-link-password\",attrs:{\"value\":_vm.share.password,\"disabled\":_vm.saving,\"required\":_vm.config.enableLinkPasswordByDefault || _vm.config.enforcePasswordForPublicLink,\"minlength\":_vm.isPasswordPolicyEnabled && _vm.config.passwordPolicy.minLength,\"icon\":\"\",\"autocomplete\":\"new-password\"},on:{\"update:value\":function($event){return _vm.$set(_vm.share, \"password\", $event)},\"submit\":_vm.onNewLinkShare}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Enter a password'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.pendingExpirationDate)?_c('NcActionText',{attrs:{\"icon\":\"icon-calendar-dark\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Expiration date (enforced)'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.pendingExpirationDate)?_c('NcActionInput',{staticClass:\"share-link-expire-date\",attrs:{\"disabled\":_vm.saving,\"is-native-picker\":true,\"hide-label\":true,\"value\":new Date(_vm.share.expireDate),\"type\":\"date\",\"min\":_vm.dateTomorrow,\"max\":_vm.dateMaxEnforced},on:{\"input\":_vm.onExpirationChange}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Enter a date'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"icon\":\"icon-checkmark\"},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.onNewLinkShare.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Create share'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"icon\":\"icon-close\"},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.onCancel.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Cancel'))+\"\\n\\t\\t\")])],1):(!_vm.loading)?_c('NcActions',{staticClass:\"sharing-entry__actions\",attrs:{\"aria-label\":_vm.actionsTooltip,\"menu-align\":\"right\",\"open\":_vm.open},on:{\"update:open\":function($event){_vm.open=$event},\"close\":_vm.onMenuClose}},[(_vm.share)?[(_vm.share.canEdit && _vm.canReshare)?[_c('NcActionInput',{ref:\"label\",class:{ error: _vm.errors.label },attrs:{\"disabled\":_vm.saving,\"label\":_vm.t('files_sharing', 'Share label'),\"value\":_vm.share.newLabel !== undefined ? _vm.share.newLabel : _vm.share.label,\"icon\":\"icon-edit\",\"maxlength\":\"255\"},on:{\"update:value\":_vm.onLabelChange,\"submit\":_vm.onLabelSubmit}}),_vm._v(\" \"),_c('SharePermissionsEditor',{attrs:{\"can-reshare\":_vm.canReshare,\"share\":_vm.share,\"file-info\":_vm.fileInfo},on:{\"update:share\":function($event){_vm.share=$event}}}),_vm._v(\" \"),_c('NcActionSeparator'),_vm._v(\" \"),_c('NcActionCheckbox',{attrs:{\"checked\":_vm.share.hideDownload,\"disabled\":_vm.saving || _vm.canChangeHideDownload},on:{\"update:checked\":function($event){return _vm.$set(_vm.share, \"hideDownload\", $event)},\"change\":function($event){return _vm.queueUpdate('hideDownload')}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Hide download'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionCheckbox',{staticClass:\"share-link-password-checkbox\",attrs:{\"checked\":_vm.isPasswordProtected,\"disabled\":_vm.config.enforcePasswordForPublicLink || _vm.saving},on:{\"update:checked\":function($event){_vm.isPasswordProtected=$event},\"uncheck\":_vm.onPasswordDisable}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.config.enforcePasswordForPublicLink\n\t\t\t\t\t\t? _vm.t('files_sharing', 'Password protection (enforced)')\n\t\t\t\t\t\t: _vm.t('files_sharing', 'Password protect'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),(_vm.isPasswordProtected)?_c('NcActionInput',{ref:\"password\",staticClass:\"share-link-password\",class:{ error: _vm.errors.password},attrs:{\"disabled\":_vm.saving,\"required\":_vm.config.enforcePasswordForPublicLink,\"value\":_vm.hasUnsavedPassword ? _vm.share.newPassword : '***************',\"icon\":\"icon-password\",\"autocomplete\":\"new-password\",\"type\":_vm.hasUnsavedPassword ? 'text': 'password'},on:{\"update:value\":_vm.onPasswordChange,\"submit\":_vm.onPasswordSubmit}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Enter a password'))+\"\\n\\t\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.isEmailShareType && _vm.passwordExpirationTime)?_c('NcActionText',{attrs:{\"icon\":\"icon-info\"}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Password expires {passwordExpirationTime}', {passwordExpirationTime: _vm.passwordExpirationTime}))+\"\\n\\t\\t\\t\\t\")]):(_vm.isEmailShareType && _vm.passwordExpirationTime !== null)?_c('NcActionText',{attrs:{\"icon\":\"icon-error\"}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Password expired'))+\"\\n\\t\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.isPasswordProtectedByTalkAvailable)?_c('NcActionCheckbox',{staticClass:\"share-link-password-talk-checkbox\",attrs:{\"checked\":_vm.isPasswordProtectedByTalk,\"disabled\":!_vm.canTogglePasswordProtectedByTalkAvailable || _vm.saving},on:{\"update:checked\":function($event){_vm.isPasswordProtectedByTalk=$event},\"change\":_vm.onPasswordProtectedByTalkChange}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Video verification'))+\"\\n\\t\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('NcActionCheckbox',{staticClass:\"share-link-expire-date-checkbox\",attrs:{\"checked\":_vm.hasExpirationDate,\"disabled\":_vm.config.isDefaultExpireDateEnforced || _vm.saving},on:{\"update:checked\":function($event){_vm.hasExpirationDate=$event},\"uncheck\":_vm.onExpirationDisable}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.config.isDefaultExpireDateEnforced\n\t\t\t\t\t\t? _vm.t('files_sharing', 'Expiration date (enforced)')\n\t\t\t\t\t\t: _vm.t('files_sharing', 'Set expiration date'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),(_vm.hasExpirationDate)?_c('NcActionInput',{ref:\"expireDate\",staticClass:\"share-link-expire-date\",class:{ error: _vm.errors.expireDate},attrs:{\"is-native-picker\":true,\"hide-label\":true,\"disabled\":_vm.saving,\"value\":new Date(_vm.share.expireDate),\"type\":\"date\",\"min\":_vm.dateTomorrow,\"max\":_vm.dateMaxEnforced},on:{\"input\":_vm.onExpirationChange}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Enter a date'))+\"\\n\\t\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('NcActionCheckbox',{attrs:{\"checked\":_vm.hasNote,\"disabled\":_vm.saving},on:{\"update:checked\":function($event){_vm.hasNote=$event},\"uncheck\":function($event){return _vm.queueUpdate('note')}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Note to recipient'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),(_vm.hasNote)?_c('NcActionTextEditable',{ref:\"note\",class:{ error: _vm.errors.note},attrs:{\"disabled\":_vm.saving,\"placeholder\":_vm.t('files_sharing', 'Enter a note for the share recipient'),\"value\":_vm.share.newNote || _vm.share.note,\"icon\":\"icon-edit\"},on:{\"update:value\":_vm.onNoteChange,\"submit\":_vm.onNoteSubmit}}):_vm._e()]:_vm._e(),_vm._v(\" \"),_c('NcActionSeparator'),_vm._v(\" \"),_vm._l((_vm.externalLinkActions),function(action){return _c('ExternalShareAction',{key:action.id,attrs:{\"id\":action.id,\"action\":action,\"file-info\":_vm.fileInfo,\"share\":_vm.share}})}),_vm._v(\" \"),_vm._l((_vm.externalLegacyLinkActions),function({icon, url, name},index){return _c('NcActionLink',{key:index,attrs:{\"href\":url(_vm.shareLink),\"icon\":icon,\"target\":\"_blank\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(name)+\"\\n\\t\\t\\t\")])}),_vm._v(\" \"),(_vm.share.canDelete)?_c('NcActionButton',{attrs:{\"icon\":\"icon-close\",\"disabled\":_vm.saving},on:{\"click\":function($event){$event.preventDefault();return _vm.onDelete.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Unshare'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(!_vm.isEmailShareType && _vm.canReshare)?_c('NcActionButton',{staticClass:\"new-share-link\",attrs:{\"icon\":\"icon-add\"},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.onNewLinkShare.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Add another link'))+\"\\n\\t\\t\\t\")]):_vm._e()]:(_vm.canReshare)?_c('NcActionButton',{staticClass:\"new-share-link\",attrs:{\"title\":_vm.t('files_sharing', 'Create a new share link'),\"aria-label\":_vm.t('files_sharing', 'Create a new share link'),\"icon\":_vm.loading ? 'icon-loading-small' : 'icon-add'},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.onNewLinkShare.apply(null, arguments)}}}):_vm._e()],2):_c('div',{staticClass:\"icon-loading-small sharing-entry__loading\"})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingLinkList.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!./SharingLinkList.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<ul v-if=\"canLinkShare\" class=\"sharing-link-list\">\n\t\t<!-- If no link shares, show the add link default entry -->\n\t\t<SharingEntryLink v-if=\"!hasLinkShares && canReshare\"\n\t\t\t:can-reshare=\"canReshare\"\n\t\t\t:file-info=\"fileInfo\"\n\t\t\t@add:share=\"addShare\" />\n\n\t\t<!-- Else we display the list -->\n\t\t<template v-if=\"hasShares\">\n\t\t\t<!-- using shares[index] to work with .sync -->\n\t\t\t<SharingEntryLink v-for=\"(share, index) in shares\"\n\t\t\t\t:key=\"share.id\"\n\t\t\t\t:index=\"shares.length > 1 ? index + 1 : null\"\n\t\t\t\t:can-reshare=\"canReshare\"\n\t\t\t\t:share.sync=\"shares[index]\"\n\t\t\t\t:file-info=\"fileInfo\"\n\t\t\t\t@add:share=\"addShare(...arguments)\"\n\t\t\t\t@update:share=\"awaitForShare(...arguments)\"\n\t\t\t\t@remove:share=\"removeShare\" />\n\t\t</template>\n\t</ul>\n</template>\n\n<script>\n// eslint-disable-next-line no-unused-vars\nimport Share from '../models/Share'\nimport ShareTypes from '../mixins/ShareTypes'\nimport SharingEntryLink from '../components/SharingEntryLink'\n\nexport default {\n\tname: 'SharingLinkList',\n\n\tcomponents: {\n\t\tSharingEntryLink,\n\t},\n\n\tmixins: [ShareTypes],\n\n\tprops: {\n\t\tfileInfo: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => {},\n\t\t\trequired: true,\n\t\t},\n\t\tshares: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t\trequired: true,\n\t\t},\n\t\tcanReshare: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tcanLinkShare: OC.getCapabilities().files_sharing.public.enabled,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Do we have link shares?\n\t\t * Using this to still show the `new link share`\n\t\t * button regardless of mail shares\n\t\t *\n\t\t * @return {Array}\n\t\t */\n\t\thasLinkShares() {\n\t\t\treturn this.shares.filter(share => share.type === this.SHARE_TYPES.SHARE_TYPE_LINK).length > 0\n\t\t},\n\n\t\t/**\n\t\t * Do we have any link or email shares?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\thasShares() {\n\t\t\treturn this.shares.length > 0\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Add a new share into the link shares list\n\t\t * and return the newly created share component\n\t\t *\n\t\t * @param {Share} share the share to add to the array\n\t\t * @param {Function} resolve a function to run after the share is added and its component initialized\n\t\t */\n\t\taddShare(share, resolve) {\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.shares.unshift(share)\n\t\t\tthis.awaitForShare(share, resolve)\n\t\t},\n\n\t\t/**\n\t\t * Await for next tick and render after the list updated\n\t\t * Then resolve with the matched vue component of the\n\t\t * provided share object\n\t\t *\n\t\t * @param {Share} share newly created share\n\t\t * @param {Function} resolve a function to execute after\n\t\t */\n\t\tawaitForShare(share, resolve) {\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tconst newShare = this.$children.find(component => component.share === share)\n\t\t\t\tif (newShare) {\n\t\t\t\t\tresolve(newShare)\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Remove a share from the shares list\n\t\t *\n\t\t * @param {Share} share the share to remove\n\t\t */\n\t\tremoveShare(share) {\n\t\t\tconst index = this.shares.findIndex(item => item === share)\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.shares.splice(index, 1)\n\t\t},\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./SharingLinkList.vue?vue&type=template&id=537e15c5&\"\nimport script from \"./SharingLinkList.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingLinkList.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.canLinkShare)?_c('ul',{staticClass:\"sharing-link-list\"},[(!_vm.hasLinkShares && _vm.canReshare)?_c('SharingEntryLink',{attrs:{\"can-reshare\":_vm.canReshare,\"file-info\":_vm.fileInfo},on:{\"add:share\":_vm.addShare}}):_vm._e(),_vm._v(\" \"),(_vm.hasShares)?_vm._l((_vm.shares),function(share,index){return _c('SharingEntryLink',{key:share.id,attrs:{\"index\":_vm.shares.length > 1 ? index + 1 : null,\"can-reshare\":_vm.canReshare,\"share\":_vm.shares[index],\"file-info\":_vm.fileInfo},on:{\"update:share\":[function($event){return _vm.$set(_vm.shares, index, $event)},function($event){return _vm.awaitForShare(...arguments)}],\"add:share\":function($event){return _vm.addShare(...arguments)},\"remove:share\":_vm.removeShare}})}):_vm._e()],2):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<li class=\"sharing-entry\">\n\t\t<NcAvatar class=\"sharing-entry__avatar\"\n\t\t\t:is-no-user=\"share.type !== SHARE_TYPES.SHARE_TYPE_USER\"\n\t\t\t:user=\"share.shareWith\"\n\t\t\t:display-name=\"share.shareWithDisplayName\"\n\t\t\t:menu-position=\"'left'\"\n\t\t\t:url=\"share.shareWithAvatar\" />\n\n\t\t<component :is=\"share.shareWithLink ? 'a' : 'div'\"\n\t\t\t:title=\"tooltip\"\n\t\t\t:aria-label=\"tooltip\"\n\t\t\t:href=\"share.shareWithLink\"\n\t\t\tclass=\"sharing-entry__desc\">\n\t\t\t<span>{{ title }}<span v-if=\"!isUnique\" class=\"sharing-entry__desc-unique\"> ({{ share.shareWithDisplayNameUnique }})</span></span>\n\t\t\t<p v-if=\"hasStatus\">\n\t\t\t\t<span>{{ share.status.icon || '' }}</span>\n\t\t\t\t<span>{{ share.status.message || '' }}</span>\n\t\t\t</p>\n\t\t</component>\n\t\t<NcActions menu-align=\"right\"\n\t\t\tclass=\"sharing-entry__actions\"\n\t\t\t@close=\"onMenuClose\">\n\t\t\t<template v-if=\"share.canEdit\">\n\t\t\t\t<!-- edit permission -->\n\t\t\t\t<NcActionCheckbox ref=\"canEdit\"\n\t\t\t\t\t:checked.sync=\"canEdit\"\n\t\t\t\t\t:value=\"permissionsEdit\"\n\t\t\t\t\t:disabled=\"saving || !canSetEdit\">\n\t\t\t\t\t{{ t('files_sharing', 'Allow editing') }}\n\t\t\t\t</NcActionCheckbox>\n\n\t\t\t\t<!-- create permission -->\n\t\t\t\t<NcActionCheckbox v-if=\"isFolder\"\n\t\t\t\t\tref=\"canCreate\"\n\t\t\t\t\t:checked.sync=\"canCreate\"\n\t\t\t\t\t:value=\"permissionsCreate\"\n\t\t\t\t\t:disabled=\"saving || !canSetCreate\">\n\t\t\t\t\t{{ t('files_sharing', 'Allow creating') }}\n\t\t\t\t</NcActionCheckbox>\n\n\t\t\t\t<!-- delete permission -->\n\t\t\t\t<NcActionCheckbox v-if=\"isFolder\"\n\t\t\t\t\tref=\"canDelete\"\n\t\t\t\t\t:checked.sync=\"canDelete\"\n\t\t\t\t\t:value=\"permissionsDelete\"\n\t\t\t\t\t:disabled=\"saving || !canSetDelete\">\n\t\t\t\t\t{{ t('files_sharing', 'Allow deleting') }}\n\t\t\t\t</NcActionCheckbox>\n\n\t\t\t\t<!-- reshare permission -->\n\t\t\t\t<NcActionCheckbox v-if=\"config.isResharingAllowed\"\n\t\t\t\t\tref=\"canReshare\"\n\t\t\t\t\t:checked.sync=\"canReshare\"\n\t\t\t\t\t:value=\"permissionsShare\"\n\t\t\t\t\t:disabled=\"saving || !canSetReshare\">\n\t\t\t\t\t{{ t('files_sharing', 'Allow resharing') }}\n\t\t\t\t</NcActionCheckbox>\n\n\t\t\t\t<NcActionCheckbox v-if=\"isSetDownloadButtonVisible\"\n\t\t\t\t\tref=\"canDownload\"\n\t\t\t\t\t:checked.sync=\"canDownload\"\n\t\t\t\t\t:disabled=\"saving || !canSetDownload\">\n\t\t\t\t\t{{ allowDownloadText }}\n\t\t\t\t</NcActionCheckbox>\n\n\t\t\t\t<!-- expiration date -->\n\t\t\t\t<NcActionCheckbox :checked.sync=\"hasExpirationDate\"\n\t\t\t\t\t:disabled=\"config.isDefaultInternalExpireDateEnforced || saving\"\n\t\t\t\t\t@uncheck=\"onExpirationDisable\">\n\t\t\t\t\t{{ config.isDefaultInternalExpireDateEnforced\n\t\t\t\t\t\t? t('files_sharing', 'Expiration date enforced')\n\t\t\t\t\t\t: t('files_sharing', 'Set expiration date') }}\n\t\t\t\t</NcActionCheckbox>\n\t\t\t\t<NcActionInput v-if=\"hasExpirationDate\"\n\t\t\t\t\tref=\"expireDate\"\n\t\t\t\t\t:is-native-picker=\"true\"\n\t\t\t\t\t:hide-label=\"true\"\n\t\t\t\t\t:class=\"{ error: errors.expireDate}\"\n\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t:value=\"new Date(share.expireDate)\"\n\t\t\t\t\ttype=\"date\"\n\t\t\t\t\t:min=\"dateTomorrow\"\n\t\t\t\t\t:max=\"dateMaxEnforced\"\n\t\t\t\t\t@input=\"onExpirationChange\">\n\t\t\t\t\t{{ t('files_sharing', 'Enter a date') }}\n\t\t\t\t</NcActionInput>\n\n\t\t\t\t<!-- note -->\n\t\t\t\t<template v-if=\"canHaveNote\">\n\t\t\t\t\t<NcActionCheckbox :checked.sync=\"hasNote\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t@uncheck=\"queueUpdate('note')\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Note to recipient') }}\n\t\t\t\t\t</NcActionCheckbox>\n\t\t\t\t\t<NcActionTextEditable v-if=\"hasNote\"\n\t\t\t\t\t\tref=\"note\"\n\t\t\t\t\t\t:class=\"{ error: errors.note}\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t:value=\"share.newNote || share.note\"\n\t\t\t\t\t\ticon=\"icon-edit\"\n\t\t\t\t\t\t@update:value=\"onNoteChange\"\n\t\t\t\t\t\t@submit=\"onNoteSubmit\" />\n\t\t\t\t</template>\n\t\t\t</template>\n\n\t\t\t<NcActionButton v-if=\"share.canDelete\"\n\t\t\t\ticon=\"icon-close\"\n\t\t\t\t:disabled=\"saving\"\n\t\t\t\t@click.prevent=\"onDelete\">\n\t\t\t\t{{ t('files_sharing', 'Unshare') }}\n\t\t\t</NcActionButton>\n\t\t</NcActions>\n\t</li>\n</template>\n\n<script>\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions'\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton'\nimport NcActionCheckbox from '@nextcloud/vue/dist/Components/NcActionCheckbox'\nimport NcActionInput from '@nextcloud/vue/dist/Components/NcActionInput'\nimport NcActionTextEditable from '@nextcloud/vue/dist/Components/NcActionTextEditable'\n\nimport SharesMixin from '../mixins/SharesMixin.js'\n\nexport default {\n\tname: 'SharingEntry',\n\n\tcomponents: {\n\t\tNcActions,\n\t\tNcActionButton,\n\t\tNcActionCheckbox,\n\t\tNcActionInput,\n\t\tNcActionTextEditable,\n\t\tNcAvatar,\n\t},\n\n\tmixins: [SharesMixin],\n\n\tdata() {\n\t\treturn {\n\t\t\tpermissionsEdit: OC.PERMISSION_UPDATE,\n\t\t\tpermissionsCreate: OC.PERMISSION_CREATE,\n\t\t\tpermissionsDelete: OC.PERMISSION_DELETE,\n\t\t\tpermissionsRead: OC.PERMISSION_READ,\n\t\t\tpermissionsShare: OC.PERMISSION_SHARE,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\ttitle() {\n\t\t\tlet title = this.share.shareWithDisplayName\n\t\t\tif (this.share.type === this.SHARE_TYPES.SHARE_TYPE_GROUP) {\n\t\t\t\ttitle += ` (${t('files_sharing', 'group')})`\n\t\t\t} else if (this.share.type === this.SHARE_TYPES.SHARE_TYPE_ROOM) {\n\t\t\t\ttitle += ` (${t('files_sharing', 'conversation')})`\n\t\t\t} else if (this.share.type === this.SHARE_TYPES.SHARE_TYPE_REMOTE) {\n\t\t\t\ttitle += ` (${t('files_sharing', 'remote')})`\n\t\t\t} else if (this.share.type === this.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP) {\n\t\t\t\ttitle += ` (${t('files_sharing', 'remote group')})`\n\t\t\t} else if (this.share.type === this.SHARE_TYPES.SHARE_TYPE_GUEST) {\n\t\t\t\ttitle += ` (${t('files_sharing', 'guest')})`\n\t\t\t}\n\t\t\treturn title\n\t\t},\n\n\t\ttooltip() {\n\t\t\tif (this.share.owner !== this.share.uidFileOwner) {\n\t\t\t\tconst data = {\n\t\t\t\t\t// todo: strong or italic?\n\t\t\t\t\t// but the t function escape any html from the data :/\n\t\t\t\t\tuser: this.share.shareWithDisplayName,\n\t\t\t\t\towner: this.share.ownerDisplayName,\n\t\t\t\t}\n\t\t\t\tif (this.share.type === this.SHARE_TYPES.SHARE_TYPE_GROUP) {\n\t\t\t\t\treturn t('files_sharing', 'Shared with the group {user} by {owner}', data)\n\t\t\t\t} else if (this.share.type === this.SHARE_TYPES.SHARE_TYPE_ROOM) {\n\t\t\t\t\treturn t('files_sharing', 'Shared with the conversation {user} by {owner}', data)\n\t\t\t\t}\n\n\t\t\t\treturn t('files_sharing', 'Shared with {user} by {owner}', data)\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\tcanHaveNote() {\n\t\t\treturn !this.isRemote\n\t\t},\n\n\t\tisRemote() {\n\t\t\treturn this.share.type === this.SHARE_TYPES.SHARE_TYPE_REMOTE\n\t\t\t\t|| this.share.type === this.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP\n\t\t},\n\n\t\t/**\n\t\t * Can the sharer set whether the sharee can edit the file ?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tcanSetEdit() {\n\t\t\t// If the owner revoked the permission after the resharer granted it\n\t\t\t// the share still has the permission, and the resharer is still\n\t\t\t// allowed to revoke it too (but not to grant it again).\n\t\t\treturn (this.fileInfo.sharePermissions & OC.PERMISSION_UPDATE) || this.canEdit\n\t\t},\n\n\t\t/**\n\t\t * Can the sharer set whether the sharee can create the file ?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tcanSetCreate() {\n\t\t\t// If the owner revoked the permission after the resharer granted it\n\t\t\t// the share still has the permission, and the resharer is still\n\t\t\t// allowed to revoke it too (but not to grant it again).\n\t\t\treturn (this.fileInfo.sharePermissions & OC.PERMISSION_CREATE) || this.canCreate\n\t\t},\n\n\t\t/**\n\t\t * Can the sharer set whether the sharee can delete the file ?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tcanSetDelete() {\n\t\t\t// If the owner revoked the permission after the resharer granted it\n\t\t\t// the share still has the permission, and the resharer is still\n\t\t\t// allowed to revoke it too (but not to grant it again).\n\t\t\treturn (this.fileInfo.sharePermissions & OC.PERMISSION_DELETE) || this.canDelete\n\t\t},\n\n\t\t/**\n\t\t * Can the sharer set whether the sharee can reshare the file ?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tcanSetReshare() {\n\t\t\t// If the owner revoked the permission after the resharer granted it\n\t\t\t// the share still has the permission, and the resharer is still\n\t\t\t// allowed to revoke it too (but not to grant it again).\n\t\t\treturn (this.fileInfo.sharePermissions & OC.PERMISSION_SHARE) || this.canReshare\n\t\t},\n\n\t\t/**\n\t\t * Can the sharer set whether the sharee can download the file ?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tcanSetDownload() {\n\t\t\t// If the owner revoked the permission after the resharer granted it\n\t\t\t// the share still has the permission, and the resharer is still\n\t\t\t// allowed to revoke it too (but not to grant it again).\n\t\t\treturn (this.fileInfo.canDownload() || this.canDownload)\n\t\t},\n\n\t\t/**\n\t\t * Can the sharee edit the shared file ?\n\t\t */\n\t\tcanEdit: {\n\t\t\tget() {\n\t\t\t\treturn this.share.hasUpdatePermission\n\t\t\t},\n\t\t\tset(checked) {\n\t\t\t\tthis.updatePermissions({ isEditChecked: checked })\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Can the sharee create the shared file ?\n\t\t */\n\t\tcanCreate: {\n\t\t\tget() {\n\t\t\t\treturn this.share.hasCreatePermission\n\t\t\t},\n\t\t\tset(checked) {\n\t\t\t\tthis.updatePermissions({ isCreateChecked: checked })\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Can the sharee delete the shared file ?\n\t\t */\n\t\tcanDelete: {\n\t\t\tget() {\n\t\t\t\treturn this.share.hasDeletePermission\n\t\t\t},\n\t\t\tset(checked) {\n\t\t\t\tthis.updatePermissions({ isDeleteChecked: checked })\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Can the sharee reshare the file ?\n\t\t */\n\t\tcanReshare: {\n\t\t\tget() {\n\t\t\t\treturn this.share.hasSharePermission\n\t\t\t},\n\t\t\tset(checked) {\n\t\t\t\tthis.updatePermissions({ isReshareChecked: checked })\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Can the sharee download files or only view them ?\n\t\t */\n\t\tcanDownload: {\n\t\t\tget() {\n\t\t\t\treturn this.share.hasDownloadPermission\n\t\t\t},\n\t\t\tset(checked) {\n\t\t\t\tthis.updatePermissions({ isDownloadChecked: checked })\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Is this share readable\n\t\t * Needed for some federated shares that might have been added from file drop links\n\t\t */\n\t\thasRead: {\n\t\t\tget() {\n\t\t\t\treturn this.share.hasReadPermission\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Is the current share a folder ?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisFolder() {\n\t\t\treturn this.fileInfo.type === 'dir'\n\t\t},\n\n\t\t/**\n\t\t * Does the current share have an expiration date\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\thasExpirationDate: {\n\t\t\tget() {\n\t\t\t\treturn this.config.isDefaultInternalExpireDateEnforced || !!this.share.expireDate\n\t\t\t},\n\t\t\tset(enabled) {\n\t\t\t\tconst defaultExpirationDate = this.config.defaultInternalExpirationDate\n\t\t\t\t\t|| new Date(new Date().setDate(new Date().getDate() + 1))\n\t\t\t\tthis.share.expireDate = enabled\n\t\t\t\t\t? this.formatDateToString(defaultExpirationDate)\n\t\t\t\t\t: ''\n\t\t\t\tconsole.debug('Expiration date status', enabled, this.share.expireDate)\n\t\t\t},\n\t\t},\n\n\t\tdateMaxEnforced() {\n\t\t\tif (!this.isRemote && this.config.isDefaultInternalExpireDateEnforced) {\n\t\t\t\treturn new Date(new Date().setDate(new Date().getDate() + 1 + this.config.defaultInternalExpireDate))\n\t\t\t} else if (this.config.isDefaultRemoteExpireDateEnforced) {\n\t\t\t\treturn new Date(new Date().setDate(new Date().getDate() + 1 + this.config.defaultRemoteExpireDate))\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\t/**\n\t\t * @return {boolean}\n\t\t */\n\t\thasStatus() {\n\t\t\tif (this.share.type !== this.SHARE_TYPES.SHARE_TYPE_USER) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\treturn (typeof this.share.status === 'object' && !Array.isArray(this.share.status))\n\t\t},\n\n\t\t/**\n\t\t * @return {string}\n\t\t */\n\t\tallowDownloadText() {\n\t\t\treturn t('files_sharing', 'Allow download')\n\t\t},\n\n\t\t/**\n\t\t * @return {boolean}\n\t\t */\n\t\tisSetDownloadButtonVisible() {\n\t\t\tconst allowedMimetypes = [\n\t\t\t\t// Office documents\n\t\t\t\t'application/msword',\n\t\t\t\t'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n\t\t\t\t'application/vnd.ms-powerpoint',\n\t\t\t\t'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n\t\t\t\t'application/vnd.ms-excel',\n\t\t\t\t'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n\t\t\t\t'application/vnd.oasis.opendocument.text',\n\t\t\t\t'application/vnd.oasis.opendocument.spreadsheet',\n\t\t\t\t'application/vnd.oasis.opendocument.presentation',\n\t\t\t]\n\n\t\t\treturn this.isFolder || allowedMimetypes.includes(this.fileInfo.mimetype)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tupdatePermissions({\n\t\t\tisEditChecked = this.canEdit,\n\t\t\tisCreateChecked = this.canCreate,\n\t\t\tisDeleteChecked = this.canDelete,\n\t\t\tisReshareChecked = this.canReshare,\n\t\t\tisDownloadChecked = this.canDownload,\n\t\t} = {}) {\n\t\t\t// calc permissions if checked\n\t\t\tconst permissions = 0\n\t\t\t\t| (this.hasRead ? this.permissionsRead : 0)\n\t\t\t\t| (isCreateChecked ? this.permissionsCreate : 0)\n\t\t\t\t| (isDeleteChecked ? this.permissionsDelete : 0)\n\t\t\t\t| (isEditChecked ? this.permissionsEdit : 0)\n\t\t\t\t| (isReshareChecked ? this.permissionsShare : 0)\n\n\t\t\tthis.share.permissions = permissions\n\t\t\tif (this.share.hasDownloadPermission !== isDownloadChecked) {\n\t\t\t\tthis.share.hasDownloadPermission = isDownloadChecked\n\t\t\t}\n\t\t\tthis.queueUpdate('permissions', 'attributes')\n\t\t},\n\n\t\t/**\n\t\t * Save potential changed data on menu close\n\t\t */\n\t\tonMenuClose() {\n\t\t\tthis.onNoteSubmit()\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.sharing-entry {\n\tdisplay: flex;\n\talign-items: center;\n\theight: 44px;\n\t&__desc {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tjustify-content: space-between;\n\t\tpadding: 8px;\n\t\tline-height: 1.2em;\n\t\tp {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t\t&-unique {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n\t&__actions {\n\t\tmargin-left: auto;\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntry.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!./SharingEntry.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntry.vue?vue&type=style&index=0&id=13a6a5f0&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntry.vue?vue&type=style&index=0&id=13a6a5f0&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SharingEntry.vue?vue&type=template&id=13a6a5f0&scoped=true&\"\nimport script from \"./SharingEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingEntry.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SharingEntry.vue?vue&type=style&index=0&id=13a6a5f0&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"13a6a5f0\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('li',{staticClass:\"sharing-entry\"},[_c('NcAvatar',{staticClass:\"sharing-entry__avatar\",attrs:{\"is-no-user\":_vm.share.type !== _vm.SHARE_TYPES.SHARE_TYPE_USER,\"user\":_vm.share.shareWith,\"display-name\":_vm.share.shareWithDisplayName,\"menu-position\":'left',\"url\":_vm.share.shareWithAvatar}}),_vm._v(\" \"),_c(_vm.share.shareWithLink ? 'a' : 'div',{tag:\"component\",staticClass:\"sharing-entry__desc\",attrs:{\"title\":_vm.tooltip,\"aria-label\":_vm.tooltip,\"href\":_vm.share.shareWithLink}},[_c('span',[_vm._v(_vm._s(_vm.title)),(!_vm.isUnique)?_c('span',{staticClass:\"sharing-entry__desc-unique\"},[_vm._v(\" (\"+_vm._s(_vm.share.shareWithDisplayNameUnique)+\")\")]):_vm._e()]),_vm._v(\" \"),(_vm.hasStatus)?_c('p',[_c('span',[_vm._v(_vm._s(_vm.share.status.icon || ''))]),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(_vm.share.status.message || ''))])]):_vm._e()]),_vm._v(\" \"),_c('NcActions',{staticClass:\"sharing-entry__actions\",attrs:{\"menu-align\":\"right\"},on:{\"close\":_vm.onMenuClose}},[(_vm.share.canEdit)?[_c('NcActionCheckbox',{ref:\"canEdit\",attrs:{\"checked\":_vm.canEdit,\"value\":_vm.permissionsEdit,\"disabled\":_vm.saving || !_vm.canSetEdit},on:{\"update:checked\":function($event){_vm.canEdit=$event}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Allow editing'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),(_vm.isFolder)?_c('NcActionCheckbox',{ref:\"canCreate\",attrs:{\"checked\":_vm.canCreate,\"value\":_vm.permissionsCreate,\"disabled\":_vm.saving || !_vm.canSetCreate},on:{\"update:checked\":function($event){_vm.canCreate=$event}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Allow creating'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.isFolder)?_c('NcActionCheckbox',{ref:\"canDelete\",attrs:{\"checked\":_vm.canDelete,\"value\":_vm.permissionsDelete,\"disabled\":_vm.saving || !_vm.canSetDelete},on:{\"update:checked\":function($event){_vm.canDelete=$event}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Allow deleting'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.config.isResharingAllowed)?_c('NcActionCheckbox',{ref:\"canReshare\",attrs:{\"checked\":_vm.canReshare,\"value\":_vm.permissionsShare,\"disabled\":_vm.saving || !_vm.canSetReshare},on:{\"update:checked\":function($event){_vm.canReshare=$event}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Allow resharing'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.isSetDownloadButtonVisible)?_c('NcActionCheckbox',{ref:\"canDownload\",attrs:{\"checked\":_vm.canDownload,\"disabled\":_vm.saving || !_vm.canSetDownload},on:{\"update:checked\":function($event){_vm.canDownload=$event}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.allowDownloadText)+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('NcActionCheckbox',{attrs:{\"checked\":_vm.hasExpirationDate,\"disabled\":_vm.config.isDefaultInternalExpireDateEnforced || _vm.saving},on:{\"update:checked\":function($event){_vm.hasExpirationDate=$event},\"uncheck\":_vm.onExpirationDisable}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.config.isDefaultInternalExpireDateEnforced\n\t\t\t\t\t? _vm.t('files_sharing', 'Expiration date enforced')\n\t\t\t\t\t: _vm.t('files_sharing', 'Set expiration date'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),(_vm.hasExpirationDate)?_c('NcActionInput',{ref:\"expireDate\",class:{ error: _vm.errors.expireDate},attrs:{\"is-native-picker\":true,\"hide-label\":true,\"disabled\":_vm.saving,\"value\":new Date(_vm.share.expireDate),\"type\":\"date\",\"min\":_vm.dateTomorrow,\"max\":_vm.dateMaxEnforced},on:{\"input\":_vm.onExpirationChange}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Enter a date'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.canHaveNote)?[_c('NcActionCheckbox',{attrs:{\"checked\":_vm.hasNote,\"disabled\":_vm.saving},on:{\"update:checked\":function($event){_vm.hasNote=$event},\"uncheck\":function($event){return _vm.queueUpdate('note')}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Note to recipient'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),(_vm.hasNote)?_c('NcActionTextEditable',{ref:\"note\",class:{ error: _vm.errors.note},attrs:{\"disabled\":_vm.saving,\"value\":_vm.share.newNote || _vm.share.note,\"icon\":\"icon-edit\"},on:{\"update:value\":_vm.onNoteChange,\"submit\":_vm.onNoteSubmit}}):_vm._e()]:_vm._e()]:_vm._e(),_vm._v(\" \"),(_vm.share.canDelete)?_c('NcActionButton',{attrs:{\"icon\":\"icon-close\",\"disabled\":_vm.saving},on:{\"click\":function($event){$event.preventDefault();return _vm.onDelete.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Unshare'))+\"\\n\\t\\t\")]):_vm._e()],2)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<ul class=\"sharing-sharee-list\">\n\t\t<SharingEntry v-for=\"share in shares\"\n\t\t\t:key=\"share.id\"\n\t\t\t:file-info=\"fileInfo\"\n\t\t\t:share=\"share\"\n\t\t\t:is-unique=\"isUnique(share)\"\n\t\t\t@remove:share=\"removeShare\" />\n\t</ul>\n</template>\n\n<script>\n// eslint-disable-next-line no-unused-vars\nimport Share from '../models/Share'\nimport SharingEntry from '../components/SharingEntry'\nimport ShareTypes from '../mixins/ShareTypes'\n\nexport default {\n\tname: 'SharingList',\n\n\tcomponents: {\n\t\tSharingEntry,\n\t},\n\n\tmixins: [ShareTypes],\n\n\tprops: {\n\t\tfileInfo: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => {},\n\t\t\trequired: true,\n\t\t},\n\t\tshares: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\thasShares() {\n\t\t\treturn this.shares.length === 0\n\t\t},\n\t\tisUnique() {\n\t\t\treturn (share) => {\n\t\t\t\treturn [...this.shares].filter((item) => {\n\t\t\t\t\treturn share.type === this.SHARE_TYPES.SHARE_TYPE_USER && share.shareWithDisplayName === item.shareWithDisplayName\n\t\t\t\t}).length <= 1\n\t\t\t}\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Remove a share from the shares list\n\t\t *\n\t\t * @param {Share} share the share to remove\n\t\t */\n\t\tremoveShare(share) {\n\t\t\tconst index = this.shares.findIndex(item => item === share)\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.shares.splice(index, 1)\n\t\t},\n\t},\n}\n</script>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingList.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!./SharingList.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SharingList.vue?vue&type=template&id=0b29d4c0&\"\nimport script from \"./SharingList.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingList.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('ul',{staticClass:\"sharing-sharee-list\"},_vm._l((_vm.shares),function(share){return _c('SharingEntry',{key:share.id,attrs:{\"file-info\":_vm.fileInfo,\"share\":share,\"is-unique\":_vm.isUnique(share)},on:{\"remove:share\":_vm.removeShare}})}),1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div :class=\"{ 'icon-loading': loading }\">\n\t\t<!-- error message -->\n\t\t<div v-if=\"error\" class=\"emptycontent\" :class=\"{ emptyContentWithSections: sections.length > 0 }\">\n\t\t\t<div class=\"icon icon-error\" />\n\t\t\t<h2>{{ error }}</h2>\n\t\t</div>\n\n\t\t<!-- shares content -->\n\t\t<div v-else class=\"sharingTab__content\">\n\t\t\t<!-- shared with me information -->\n\t\t\t<SharingEntrySimple v-if=\"isSharedWithMe\" v-bind=\"sharedWithMe\" class=\"sharing-entry__reshare\">\n\t\t\t\t<template #avatar>\n\t\t\t\t\t<NcAvatar :user=\"sharedWithMe.user\"\n\t\t\t\t\t\t:display-name=\"sharedWithMe.displayName\"\n\t\t\t\t\t\tclass=\"sharing-entry__avatar\" />\n\t\t\t\t</template>\n\t\t\t</SharingEntrySimple>\n\n\t\t\t<!-- add new share input -->\n\t\t\t<SharingInput v-if=\"!loading\"\n\t\t\t\t:can-reshare=\"canReshare\"\n\t\t\t\t:file-info=\"fileInfo\"\n\t\t\t\t:link-shares=\"linkShares\"\n\t\t\t\t:reshare=\"reshare\"\n\t\t\t\t:shares=\"shares\"\n\t\t\t\t@add:share=\"addShare\" />\n\n\t\t\t<!-- link shares list -->\n\t\t\t<SharingLinkList v-if=\"!loading\"\n\t\t\t\tref=\"linkShareList\"\n\t\t\t\t:can-reshare=\"canReshare\"\n\t\t\t\t:file-info=\"fileInfo\"\n\t\t\t\t:shares=\"linkShares\" />\n\n\t\t\t<!-- other shares list -->\n\t\t\t<SharingList v-if=\"!loading\"\n\t\t\t\tref=\"shareList\"\n\t\t\t\t:shares=\"shares\"\n\t\t\t\t:file-info=\"fileInfo\" />\n\n\t\t\t<!-- inherited shares -->\n\t\t\t<SharingInherited v-if=\"canReshare && !loading\" :file-info=\"fileInfo\" />\n\n\t\t\t<!-- internal link copy -->\n\t\t\t<SharingEntryInternal :file-info=\"fileInfo\" />\n\n\t\t\t<!-- projects -->\n\t\t\t<CollectionList v-if=\"projectsEnabled && fileInfo\"\n\t\t\t\t:id=\"`${fileInfo.id}`\"\n\t\t\t\ttype=\"file\"\n\t\t\t\t:name=\"fileInfo.name\" />\n\t\t</div>\n\n\t\t<!-- additional entries, use it with cautious -->\n\t\t<div v-for=\"(section, index) in sections\"\n\t\t\t:ref=\"'section-' + index\"\n\t\t\t:key=\"index\"\n\t\t\tclass=\"sharingTab__additionalContent\">\n\t\t\t<component :is=\"section($refs['section-'+index], fileInfo)\" :file-info=\"fileInfo\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { CollectionList } from 'nextcloud-vue-collections'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar'\nimport axios from '@nextcloud/axios'\nimport { loadState } from '@nextcloud/initial-state'\n\nimport Config from '../services/ConfigService'\nimport { shareWithTitle } from '../utils/SharedWithMe'\nimport Share from '../models/Share'\nimport ShareTypes from '../mixins/ShareTypes'\nimport SharingEntryInternal from '../components/SharingEntryInternal'\nimport SharingEntrySimple from '../components/SharingEntrySimple'\nimport SharingInput from '../components/SharingInput'\n\nimport SharingInherited from './SharingInherited'\nimport SharingLinkList from './SharingLinkList'\nimport SharingList from './SharingList'\n\nexport default {\n\tname: 'SharingTab',\n\n\tcomponents: {\n\t\tNcAvatar,\n\t\tCollectionList,\n\t\tSharingEntryInternal,\n\t\tSharingEntrySimple,\n\t\tSharingInherited,\n\t\tSharingInput,\n\t\tSharingLinkList,\n\t\tSharingList,\n\t},\n\n\tmixins: [ShareTypes],\n\n\tdata() {\n\t\treturn {\n\t\t\tconfig: new Config(),\n\n\t\t\terror: '',\n\t\t\texpirationInterval: null,\n\t\t\tloading: true,\n\n\t\t\tfileInfo: null,\n\n\t\t\t// reshare Share object\n\t\t\treshare: null,\n\t\t\tsharedWithMe: {},\n\t\t\tshares: [],\n\t\t\tlinkShares: [],\n\n\t\t\tsections: OCA.Sharing.ShareTabSections.getSections(),\n\t\t\tprojectsEnabled: loadState('core', 'projects_enabled', false),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Is this share shared with me?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisSharedWithMe() {\n\t\t\treturn Object.keys(this.sharedWithMe).length > 0\n\t\t},\n\n\t\tcanReshare() {\n\t\t\treturn !!(this.fileInfo.permissions & OC.PERMISSION_SHARE)\n\t\t\t\t|| !!(this.reshare && this.reshare.hasSharePermission && this.config.isResharingAllowed)\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Update current fileInfo and fetch new data\n\t\t *\n\t\t * @param {object} fileInfo the current file FileInfo\n\t\t */\n\t\tasync update(fileInfo) {\n\t\t\tthis.fileInfo = fileInfo\n\t\t\tthis.resetState()\n\t\t\tthis.getShares()\n\t\t},\n\n\t\t/**\n\t\t * Get the existing shares infos\n\t\t */\n\t\tasync getShares() {\n\t\t\ttry {\n\t\t\t\tthis.loading = true\n\n\t\t\t\t// init params\n\t\t\t\tconst shareUrl = generateOcsUrl('apps/files_sharing/api/v1/shares')\n\t\t\t\tconst format = 'json'\n\t\t\t\t// TODO: replace with proper getFUllpath implementation of our own FileInfo model\n\t\t\t\tconst path = (this.fileInfo.path + '/' + this.fileInfo.name).replace('//', '/')\n\n\t\t\t\t// fetch shares\n\t\t\t\tconst fetchShares = axios.get(shareUrl, {\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tformat,\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\treshares: true,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tconst fetchSharedWithMe = axios.get(shareUrl, {\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tformat,\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\tshared_with_me: true,\n\t\t\t\t\t},\n\t\t\t\t})\n\n\t\t\t\t// wait for data\n\t\t\t\tconst [shares, sharedWithMe] = await Promise.all([fetchShares, fetchSharedWithMe])\n\t\t\t\tthis.loading = false\n\n\t\t\t\t// process results\n\t\t\t\tthis.processSharedWithMe(sharedWithMe)\n\t\t\t\tthis.processShares(shares)\n\t\t\t} catch (error) {\n\t\t\t\tif (error.response.data?.ocs?.meta?.message) {\n\t\t\t\t\tthis.error = error.response.data.ocs.meta.message\n\t\t\t\t} else {\n\t\t\t\t\tthis.error = t('files_sharing', 'Unable to load the shares list')\n\t\t\t\t}\n\t\t\t\tthis.loading = false\n\t\t\t\tconsole.error('Error loading the shares list', error)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Reset the current view to its default state\n\t\t */\n\t\tresetState() {\n\t\t\tclearInterval(this.expirationInterval)\n\t\t\tthis.loading = true\n\t\t\tthis.error = ''\n\t\t\tthis.sharedWithMe = {}\n\t\t\tthis.shares = []\n\t\t\tthis.linkShares = []\n\t\t},\n\n\t\t/**\n\t\t * Update sharedWithMe.subtitle with the appropriate\n\t\t * expiration time left\n\t\t *\n\t\t * @param {Share} share the sharedWith Share object\n\t\t */\n\t\tupdateExpirationSubtitle(share) {\n\t\t\tconst expiration = moment(share.expireDate).unix()\n\t\t\tthis.$set(this.sharedWithMe, 'subtitle', t('files_sharing', 'Expires {relativetime}', {\n\t\t\t\trelativetime: OC.Util.relativeModifiedDate(expiration * 1000),\n\t\t\t}))\n\n\t\t\t// share have expired\n\t\t\tif (moment().unix() > expiration) {\n\t\t\t\tclearInterval(this.expirationInterval)\n\t\t\t\t// TODO: clear ui if share is expired\n\t\t\t\tthis.$set(this.sharedWithMe, 'subtitle', t('files_sharing', 'this share just expired.'))\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Process the current shares data\n\t\t * and init shares[]\n\t\t *\n\t\t * @param {object} share the share ocs api request data\n\t\t * @param {object} share.data the request data\n\t\t */\n\t\tprocessShares({ data }) {\n\t\t\tif (data.ocs && data.ocs.data && data.ocs.data.length > 0) {\n\t\t\t\t// create Share objects and sort by newest\n\t\t\t\tconst shares = data.ocs.data\n\t\t\t\t\t.map(share => new Share(share))\n\t\t\t\t\t.sort((a, b) => b.createdTime - a.createdTime)\n\n\t\t\t\tthis.linkShares = shares.filter(share => share.type === this.SHARE_TYPES.SHARE_TYPE_LINK || share.type === this.SHARE_TYPES.SHARE_TYPE_EMAIL)\n\t\t\t\tthis.shares = shares.filter(share => share.type !== this.SHARE_TYPES.SHARE_TYPE_LINK && share.type !== this.SHARE_TYPES.SHARE_TYPE_EMAIL)\n\n\t\t\t\tconsole.debug('Processed', this.linkShares.length, 'link share(s)')\n\t\t\t\tconsole.debug('Processed', this.shares.length, 'share(s)')\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Process the sharedWithMe share data\n\t\t * and init sharedWithMe\n\t\t *\n\t\t * @param {object} share the share ocs api request data\n\t\t * @param {object} share.data the request data\n\t\t */\n\t\tprocessSharedWithMe({ data }) {\n\t\t\tif (data.ocs && data.ocs.data && data.ocs.data[0]) {\n\t\t\t\tconst share = new Share(data)\n\t\t\t\tconst title = shareWithTitle(share)\n\t\t\t\tconst displayName = share.ownerDisplayName\n\t\t\t\tconst user = share.owner\n\n\t\t\t\tthis.sharedWithMe = {\n\t\t\t\t\tdisplayName,\n\t\t\t\t\ttitle,\n\t\t\t\t\tuser,\n\t\t\t\t}\n\t\t\t\tthis.reshare = share\n\n\t\t\t\t// If we have an expiration date, use it as subtitle\n\t\t\t\t// Refresh the status every 10s and clear if expired\n\t\t\t\tif (share.expireDate && moment(share.expireDate).unix() > moment().unix()) {\n\t\t\t\t\t// first update\n\t\t\t\t\tthis.updateExpirationSubtitle(share)\n\t\t\t\t\t// interval update\n\t\t\t\t\tthis.expirationInterval = setInterval(this.updateExpirationSubtitle, 10000, share)\n\t\t\t\t}\n\t\t\t} else if (this.fileInfo && this.fileInfo.shareOwnerId !== undefined ? this.fileInfo.shareOwnerId !== OC.currentUser : false) {\n\t\t\t\t// Fallback to compare owner and current user.\n\t\t\t\tthis.sharedWithMe = {\n\t\t\t\t\tdisplayName: this.fileInfo.shareOwner,\n\t\t\t\t\ttitle: t(\n\t\t\t\t\t\t'files_sharing',\n\t\t\t\t\t\t'Shared with you by {owner}',\n\t\t\t\t\t\t{ owner: this.fileInfo.shareOwner },\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t{ escape: false }\n\t\t\t\t\t),\n\t\t\t\t\tuser: this.fileInfo.shareOwnerId,\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Add a new share into the shares list\n\t\t * and return the newly created share component\n\t\t *\n\t\t * @param {Share} share the share to add to the array\n\t\t * @param {Function} [resolve] a function to run after the share is added and its component initialized\n\t\t */\n\t\taddShare(share, resolve = () => {}) {\n\t\t\t// only catching share type MAIL as link shares are added differently\n\t\t\t// meaning: not from the ShareInput\n\t\t\tif (share.type === this.SHARE_TYPES.SHARE_TYPE_EMAIL) {\n\t\t\t\tthis.linkShares.unshift(share)\n\t\t\t} else {\n\t\t\t\tthis.shares.unshift(share)\n\t\t\t}\n\t\t\tthis.awaitForShare(share, resolve)\n\t\t},\n\n\t\t/**\n\t\t * Await for next tick and render after the list updated\n\t\t * Then resolve with the matched vue component of the\n\t\t * provided share object\n\t\t *\n\t\t * @param {Share} share newly created share\n\t\t * @param {Function} resolve a function to execute after\n\t\t */\n\t\tawaitForShare(share, resolve) {\n\t\t\tlet listComponent = this.$refs.shareList\n\t\t\t// Only mail shares comes from the input, link shares\n\t\t\t// are managed internally in the SharingLinkList component\n\t\t\tif (share.type === this.SHARE_TYPES.SHARE_TYPE_EMAIL) {\n\t\t\t\tlistComponent = this.$refs.linkShareList\n\t\t\t}\n\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tconst newShare = listComponent.$children.find(component => component.share === share)\n\t\t\t\tif (newShare) {\n\t\t\t\t\tresolve(newShare)\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n.emptyContentWithSections {\n\tmargin: 1rem auto;\n}\n\n.sharingTab {\n\t&__content {\n\t\tpadding: 0 6px;\n\t}\n\t&__additionalContent {\n\t\tmargin: 44px 0;\n\t}\n}\n</style>\n","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\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 { Type as ShareTypes } from '@nextcloud/sharing'\n\nconst shareWithTitle = function(share) {\n\tif (share.type === ShareTypes.SHARE_TYPE_GROUP) {\n\t\treturn t(\n\t\t\t'files_sharing',\n\t\t\t'Shared with you and the group {group} by {owner}',\n\t\t\t{\n\t\t\t\tgroup: share.shareWithDisplayName,\n\t\t\t\towner: share.ownerDisplayName,\n\t\t\t},\n\t\t\tundefined,\n\t\t\t{ escape: false }\n\t\t)\n\t} else if (share.type === ShareTypes.SHARE_TYPE_CIRCLE) {\n\t\treturn t(\n\t\t\t'files_sharing',\n\t\t\t'Shared with you and {circle} by {owner}',\n\t\t\t{\n\t\t\t\tcircle: share.shareWithDisplayName,\n\t\t\t\towner: share.ownerDisplayName,\n\t\t\t},\n\t\t\tundefined,\n\t\t\t{ escape: false }\n\t\t)\n\t} else if (share.type === ShareTypes.SHARE_TYPE_ROOM) {\n\t\tif (share.shareWithDisplayName) {\n\t\t\treturn t(\n\t\t\t\t'files_sharing',\n\t\t\t\t'Shared with you and the conversation {conversation} by {owner}',\n\t\t\t\t{\n\t\t\t\t\tconversation: share.shareWithDisplayName,\n\t\t\t\t\towner: share.ownerDisplayName,\n\t\t\t\t},\n\t\t\t\tundefined,\n\t\t\t\t{ escape: false }\n\t\t\t)\n\t\t} else {\n\t\t\treturn t(\n\t\t\t\t'files_sharing',\n\t\t\t\t'Shared with you in a conversation by {owner}',\n\t\t\t\t{\n\t\t\t\t\towner: share.ownerDisplayName,\n\t\t\t\t},\n\t\t\t\tundefined,\n\t\t\t\t{ escape: false }\n\t\t\t)\n\t\t}\n\t} else {\n\t\treturn t(\n\t\t\t'files_sharing',\n\t\t\t'Shared with you by {owner}',\n\t\t\t{ owner: share.ownerDisplayName },\n\t\t\tundefined,\n\t\t\t{ escape: false }\n\t\t)\n\t}\n}\n\nexport { shareWithTitle }\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingTab.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!./SharingTab.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingTab.vue?vue&type=style&index=0&id=56c61b11&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingTab.vue?vue&type=style&index=0&id=56c61b11&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SharingTab.vue?vue&type=template&id=56c61b11&scoped=true&\"\nimport script from \"./SharingTab.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SharingTab.vue?vue&type=style&index=0&id=56c61b11&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"56c61b11\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{class:{ 'icon-loading': _vm.loading }},[(_vm.error)?_c('div',{staticClass:\"emptycontent\",class:{ emptyContentWithSections: _vm.sections.length > 0 }},[_c('div',{staticClass:\"icon icon-error\"}),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.error))])]):_c('div',{staticClass:\"sharingTab__content\"},[(_vm.isSharedWithMe)?_c('SharingEntrySimple',_vm._b({staticClass:\"sharing-entry__reshare\",scopedSlots:_vm._u([{key:\"avatar\",fn:function(){return [_c('NcAvatar',{staticClass:\"sharing-entry__avatar\",attrs:{\"user\":_vm.sharedWithMe.user,\"display-name\":_vm.sharedWithMe.displayName}})]},proxy:true}],null,false,3197855346)},'SharingEntrySimple',_vm.sharedWithMe,false)):_vm._e(),_vm._v(\" \"),(!_vm.loading)?_c('SharingInput',{attrs:{\"can-reshare\":_vm.canReshare,\"file-info\":_vm.fileInfo,\"link-shares\":_vm.linkShares,\"reshare\":_vm.reshare,\"shares\":_vm.shares},on:{\"add:share\":_vm.addShare}}):_vm._e(),_vm._v(\" \"),(!_vm.loading)?_c('SharingLinkList',{ref:\"linkShareList\",attrs:{\"can-reshare\":_vm.canReshare,\"file-info\":_vm.fileInfo,\"shares\":_vm.linkShares}}):_vm._e(),_vm._v(\" \"),(!_vm.loading)?_c('SharingList',{ref:\"shareList\",attrs:{\"shares\":_vm.shares,\"file-info\":_vm.fileInfo}}):_vm._e(),_vm._v(\" \"),(_vm.canReshare && !_vm.loading)?_c('SharingInherited',{attrs:{\"file-info\":_vm.fileInfo}}):_vm._e(),_vm._v(\" \"),_c('SharingEntryInternal',{attrs:{\"file-info\":_vm.fileInfo}}),_vm._v(\" \"),(_vm.projectsEnabled && _vm.fileInfo)?_c('CollectionList',{attrs:{\"id\":`${_vm.fileInfo.id}`,\"type\":\"file\",\"name\":_vm.fileInfo.name}}):_vm._e()],1),_vm._v(\" \"),_vm._l((_vm.sections),function(section,index){return _c('div',{key:index,ref:'section-' + index,refInFor:true,staticClass:\"sharingTab__additionalContent\"},[_c(section(_vm.$refs['section-'+index], _vm.fileInfo),{tag:\"component\",attrs:{\"file-info\":_vm.fileInfo}})],1)})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class ShareSearch {\n\n\t_state\n\n\tconstructor() {\n\t\t// init empty state\n\t\tthis._state = {}\n\n\t\t// init default values\n\t\tthis._state.results = []\n\t\tconsole.debug('OCA.Sharing.ShareSearch initialized')\n\t}\n\n\t/**\n\t * Get the state\n\t *\n\t * @readonly\n\t * @memberof ShareSearch\n\t * @return {object} the data state\n\t */\n\tget state() {\n\t\treturn this._state\n\t}\n\n\t/**\n\t * Register a new result\n\t * Mostly used by the guests app.\n\t * We should consider deprecation and add results via php ?\n\t *\n\t * @param {object} result entry to append\n\t * @param {string} [result.user] entry user\n\t * @param {string} result.displayName entry first line\n\t * @param {string} [result.desc] entry second line\n\t * @param {string} [result.icon] entry icon\n\t * @param {Function} result.handler function to run on entry selection\n\t * @param {Function} [result.condition] condition to add entry or not\n\t * @return {boolean}\n\t */\n\taddNewResult(result) {\n\t\tif (result.displayName.trim() !== ''\n\t\t\t&& typeof result.handler === 'function') {\n\t\t\tthis._state.results.push(result)\n\t\t\treturn true\n\t\t}\n\t\tconsole.error('Invalid search result provided', result)\n\t\treturn false\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class ExternalLinkActions {\n\n\t_state\n\n\tconstructor() {\n\t\t// init empty state\n\t\tthis._state = {}\n\n\t\t// init default values\n\t\tthis._state.actions = []\n\t\tconsole.debug('OCA.Sharing.ExternalLinkActions initialized')\n\t}\n\n\t/**\n\t * Get the state\n\t *\n\t * @readonly\n\t * @memberof ExternalLinkActions\n\t * @return {object} the data state\n\t */\n\tget state() {\n\t\treturn this._state\n\t}\n\n\t/**\n\t * Register a new action for the link share\n\t * Mostly used by the social sharing app.\n\t *\n\t * @param {object} action new action component to register\n\t * @return {boolean}\n\t */\n\tregisterAction(action) {\n\t\tconsole.warn('OCA.Sharing.ExternalLinkActions is deprecated, use OCA.Sharing.ExternalShareAction instead')\n\n\t\tif (typeof action === 'object' && action.icon && action.name && action.url) {\n\t\t\tthis._state.actions.push(action)\n\t\t\treturn true\n\t\t}\n\t\tconsole.error('Invalid action provided', action)\n\t\treturn false\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class ExternalShareActions {\n\n\t_state\n\n\tconstructor() {\n\t\t// init empty state\n\t\tthis._state = {}\n\n\t\t// init default values\n\t\tthis._state.actions = []\n\t\tconsole.debug('OCA.Sharing.ExternalShareActions initialized')\n\t}\n\n\t/**\n\t * Get the state\n\t *\n\t * @readonly\n\t * @memberof ExternalLinkActions\n\t * @return {object} the data state\n\t */\n\tget state() {\n\t\treturn this._state\n\t}\n\n\t/**\n\t * Register a new option/entry for the a given share type\n\t *\n\t * @param {object} action new action component to register\n\t * @param {string} action.id unique action id\n\t * @param {Function} action.data data to bind the component to\n\t * @param {Array} action.shareType list of \\@nextcloud/sharing.Types.SHARE_XXX to be mounted on\n\t * @param {object} action.handlers list of listeners\n\t * @return {boolean}\n\t */\n\tregisterAction(action) {\n\t\t// Validate action\n\t\tif (typeof action !== 'object'\n\t\t\t|| typeof action.id !== 'string'\n\t\t\t|| typeof action.data !== 'function' // () => {disabled: true}\n\t\t\t|| !Array.isArray(action.shareType) // [\\@nextcloud/sharing.Types.SHARE_TYPE_LINK, ...]\n\t\t\t|| typeof action.handlers !== 'object' // {click: () => {}, ...}\n\t\t\t|| !Object.values(action.handlers).every(handler => typeof handler === 'function')) {\n\t\t\tconsole.error('Invalid action provided', action)\n\t\t\treturn false\n\t\t}\n\n\t\t// Check duplicates\n\t\tconst hasDuplicate = this._state.actions.findIndex(check => check.id === action.id) > -1\n\t\tif (hasDuplicate) {\n\t\t\tconsole.error(`An action with the same id ${action.id} already exists`, action)\n\t\t\treturn false\n\t\t}\n\n\t\tthis._state.actions.push(action)\n\t\treturn true\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class TabSections {\n\n\t_sections\n\n\tconstructor() {\n\t\tthis._sections = []\n\t}\n\n\t/**\n\t * @param {registerSectionCallback} section To be called to mount the section to the sharing sidebar\n\t */\n\tregisterSection(section) {\n\t\tthis._sections.push(section)\n\t}\n\n\tgetSections() {\n\t\treturn this._sections\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n'\n\nimport SharingTab from './views/SharingTab.vue'\nimport ShareSearch from './services/ShareSearch.js'\nimport ExternalLinkActions from './services/ExternalLinkActions.js'\nimport ExternalShareActions from './services/ExternalShareActions.js'\nimport TabSections from './services/TabSections.js'\n\n// eslint-disable-next-line node/no-missing-import, import/no-unresolved\nimport ShareVariant from '@mdi/svg/svg/share-variant.svg?raw'\n\n// Init Sharing Tab Service\nif (!window.OCA.Sharing) {\n\twindow.OCA.Sharing = {}\n}\nObject.assign(window.OCA.Sharing, { ShareSearch: new ShareSearch() })\nObject.assign(window.OCA.Sharing, { ExternalLinkActions: new ExternalLinkActions() })\nObject.assign(window.OCA.Sharing, { ExternalShareActions: new ExternalShareActions() })\nObject.assign(window.OCA.Sharing, { ShareTabSections: new TabSections() })\n\nVue.prototype.t = t\nVue.prototype.n = n\n\n// Init Sharing tab component\nconst View = Vue.extend(SharingTab)\nlet TabInstance = null\n\nwindow.addEventListener('DOMContentLoaded', function() {\n\tif (OCA.Files && OCA.Files.Sidebar) {\n\t\tOCA.Files.Sidebar.registerTab(new OCA.Files.Sidebar.Tab({\n\t\t\tid: 'sharing',\n\t\t\tname: t('files_sharing', 'Sharing'),\n\t\t\ticonSvg: ShareVariant,\n\n\t\t\tasync mount(el, fileInfo, context) {\n\t\t\t\tif (TabInstance) {\n\t\t\t\t\tTabInstance.$destroy()\n\t\t\t\t}\n\t\t\t\tTabInstance = new View({\n\t\t\t\t\t// Better integration with vue parent component\n\t\t\t\t\tparent: context,\n\t\t\t\t})\n\t\t\t\t// Only mount after we have all the info we need\n\t\t\t\tawait TabInstance.update(fileInfo)\n\t\t\t\tTabInstance.$mount(el)\n\t\t\t},\n\t\t\tupdate(fileInfo) {\n\t\t\t\tTabInstance.update(fileInfo)\n\t\t\t},\n\t\t\tdestroy() {\n\t\t\t\tTabInstance.$destroy()\n\t\t\t\tTabInstance = null\n\t\t\t},\n\t\t}))\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\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".error[data-v-5e957d09] .action-checkbox__label:before{border:1px solid var(--color-error)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_sharing/src/components/SharePermissionsEditor.vue\"],\"names\":[],\"mappings\":\"AAEC,uDACC,mCAAA\",\"sourcesContent\":[\"\\n.error {\\n\\t::v-deep .action-checkbox__label:before {\\n\\t\\tborder: 1px solid var(--color-error);\\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, \".sharing-entry[data-v-13a6a5f0]{display:flex;align-items:center;height:44px}.sharing-entry__desc[data-v-13a6a5f0]{display:flex;flex-direction:column;justify-content:space-between;padding:8px;line-height:1.2em}.sharing-entry__desc p[data-v-13a6a5f0]{color:var(--color-text-maxcontrast)}.sharing-entry__desc-unique[data-v-13a6a5f0]{color:var(--color-text-maxcontrast)}.sharing-entry__actions[data-v-13a6a5f0]{margin-left:auto}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_sharing/src/components/SharingEntry.vue\"],\"names\":[],\"mappings\":\"AACA,gCACC,YAAA,CACA,kBAAA,CACA,WAAA,CACA,sCACC,YAAA,CACA,qBAAA,CACA,6BAAA,CACA,WAAA,CACA,iBAAA,CACA,wCACC,mCAAA,CAED,6CACC,mCAAA,CAGF,yCACC,gBAAA\",\"sourcesContent\":[\"\\n.sharing-entry {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\theight: 44px;\\n\\t&__desc {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\tjustify-content: space-between;\\n\\t\\tpadding: 8px;\\n\\t\\tline-height: 1.2em;\\n\\t\\tp {\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t}\\n\\t\\t&-unique {\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t}\\n\\t}\\n\\t&__actions {\\n\\t\\tmargin-left: auto;\\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, \".sharing-entry[data-v-23251e4a]{display:flex;align-items:center;height:44px}.sharing-entry__desc[data-v-23251e4a]{display:flex;flex-direction:column;justify-content:space-between;padding:8px;line-height:1.2em}.sharing-entry__desc p[data-v-23251e4a]{color:var(--color-text-maxcontrast)}.sharing-entry__actions[data-v-23251e4a]{margin-left:auto}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_sharing/src/components/SharingEntryInherited.vue\"],\"names\":[],\"mappings\":\"AACA,gCACC,YAAA,CACA,kBAAA,CACA,WAAA,CACA,sCACC,YAAA,CACA,qBAAA,CACA,6BAAA,CACA,WAAA,CACA,iBAAA,CACA,wCACC,mCAAA,CAGF,yCACC,gBAAA\",\"sourcesContent\":[\"\\n.sharing-entry {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\theight: 44px;\\n\\t&__desc {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\tjustify-content: space-between;\\n\\t\\tpadding: 8px;\\n\\t\\tline-height: 1.2em;\\n\\t\\tp {\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t}\\n\\t}\\n\\t&__actions {\\n\\t\\tmargin-left: auto;\\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, \".sharing-entry__internal .avatar-external[data-v-69e43ddc]{width:32px;height:32px;line-height:32px;font-size:18px;background-color:var(--color-text-maxcontrast);border-radius:50%;flex-shrink:0}.sharing-entry__internal .icon-checkmark-color[data-v-69e43ddc]{opacity:1}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_sharing/src/components/SharingEntryInternal.vue\"],\"names\":[],\"mappings\":\"AAEC,2DACC,UAAA,CACA,WAAA,CACA,gBAAA,CACA,cAAA,CACA,8CAAA,CACA,iBAAA,CACA,aAAA,CAED,gEACC,SAAA\",\"sourcesContent\":[\"\\n.sharing-entry__internal {\\n\\t.avatar-external {\\n\\t\\twidth: 32px;\\n\\t\\theight: 32px;\\n\\t\\tline-height: 32px;\\n\\t\\tfont-size: 18px;\\n\\t\\tbackground-color: var(--color-text-maxcontrast);\\n\\t\\tborder-radius: 50%;\\n\\t\\tflex-shrink: 0;\\n\\t}\\n\\t.icon-checkmark-color {\\n\\t\\topacity: 1;\\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, \".sharing-entry[data-v-10855e60]{display:flex;align-items:center;min-height:44px}.sharing-entry__desc[data-v-10855e60]{display:flex;flex-direction:column;justify-content:space-between;padding:8px;line-height:1.2em;overflow:hidden}.sharing-entry__desc p[data-v-10855e60]{color:var(--color-text-maxcontrast)}.sharing-entry__title[data-v-10855e60]{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.sharing-entry:not(.sharing-entry--share) .sharing-entry__actions .new-share-link[data-v-10855e60]{border-top:1px solid var(--color-border)}.sharing-entry[data-v-10855e60] .avatar-link-share{background-color:var(--color-primary)}.sharing-entry .sharing-entry__action--public-upload[data-v-10855e60]{border-bottom:1px solid var(--color-border)}.sharing-entry__loading[data-v-10855e60]{width:44px;height:44px;margin:0;padding:14px;margin-left:auto}.sharing-entry .action-item[data-v-10855e60]{margin-left:auto}.sharing-entry .action-item~.action-item[data-v-10855e60],.sharing-entry .action-item~.sharing-entry__loading[data-v-10855e60]{margin-left:0}.sharing-entry .icon-checkmark-color[data-v-10855e60]{opacity:1}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_sharing/src/components/SharingEntryLink.vue\"],\"names\":[],\"mappings\":\"AACA,gCACC,YAAA,CACA,kBAAA,CACA,eAAA,CACA,sCACC,YAAA,CACA,qBAAA,CACA,6BAAA,CACA,WAAA,CACA,iBAAA,CACA,eAAA,CAEA,wCACC,mCAAA,CAGF,uCACC,sBAAA,CACA,eAAA,CACA,kBAAA,CAIA,mGACC,wCAAA,CAIF,mDACC,qCAAA,CAGD,sEACC,2CAAA,CAGD,yCACC,UAAA,CACA,WAAA,CACA,QAAA,CACA,YAAA,CACA,gBAAA,CAKD,6CACC,gBAAA,CACA,+HAEC,aAAA,CAIF,sDACC,SAAA\",\"sourcesContent\":[\"\\n.sharing-entry {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tmin-height: 44px;\\n\\t&__desc {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\tjustify-content: space-between;\\n\\t\\tpadding: 8px;\\n\\t\\tline-height: 1.2em;\\n\\t\\toverflow: hidden;\\n\\n\\t\\tp {\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t}\\n\\t}\\n\\t&__title {\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\toverflow: hidden;\\n\\t\\twhite-space: nowrap;\\n\\t}\\n\\n\\t&:not(.sharing-entry--share) &__actions {\\n\\t\\t.new-share-link {\\n\\t\\t\\tborder-top: 1px solid var(--color-border);\\n\\t\\t}\\n\\t}\\n\\n\\t::v-deep .avatar-link-share {\\n\\t\\tbackground-color: var(--color-primary);\\n\\t}\\n\\n\\t.sharing-entry__action--public-upload {\\n\\t\\tborder-bottom: 1px solid var(--color-border);\\n\\t}\\n\\n\\t&__loading {\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t\\tmargin: 0;\\n\\t\\tpadding: 14px;\\n\\t\\tmargin-left: auto;\\n\\t}\\n\\n\\t// put menus to the left\\n\\t// but only the first one\\n\\t.action-item {\\n\\t\\tmargin-left: auto;\\n\\t\\t~ .action-item,\\n\\t\\t~ .sharing-entry__loading {\\n\\t\\t\\tmargin-left: 0;\\n\\t\\t}\\n\\t}\\n\\n\\t.icon-checkmark-color {\\n\\t\\topacity: 1;\\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, \".sharing-entry[data-v-9fd256bc]{display:flex;align-items:center;min-height:44px}.sharing-entry__desc[data-v-9fd256bc]{padding:8px;line-height:1.2em;position:relative;flex:1 1;min-width:0}.sharing-entry__desc p[data-v-9fd256bc]{color:var(--color-text-maxcontrast)}.sharing-entry__title[data-v-9fd256bc]{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;max-width:inherit}.sharing-entry__actions[data-v-9fd256bc]{margin-left:auto !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_sharing/src/components/SharingEntrySimple.vue\"],\"names\":[],\"mappings\":\"AACA,gCACC,YAAA,CACA,kBAAA,CACA,eAAA,CACA,sCACC,WAAA,CACA,iBAAA,CACA,iBAAA,CACA,QAAA,CACA,WAAA,CACA,wCACC,mCAAA,CAGF,uCACC,kBAAA,CACA,sBAAA,CACA,eAAA,CACA,iBAAA,CAED,yCACC,2BAAA\",\"sourcesContent\":[\"\\n.sharing-entry {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tmin-height: 44px;\\n\\t&__desc {\\n\\t\\tpadding: 8px;\\n\\t\\tline-height: 1.2em;\\n\\t\\tposition: relative;\\n\\t\\tflex: 1 1;\\n\\t\\tmin-width: 0;\\n\\t\\tp {\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t}\\n\\t}\\n\\t&__title {\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\toverflow: hidden;\\n\\t\\tmax-width: inherit;\\n\\t}\\n\\t&__actions {\\n\\t\\tmargin-left: auto !important;\\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, \".sharing-search{display:flex;flex-direction:column;margin-bottom:4px}.sharing-search label[for=sharing-search-input]{margin-bottom:2px}.sharing-search__input{width:100%;margin:10px 0}.vs__dropdown-menu span[lookup] .avatardiv{background-image:var(--icon-search-white);background-repeat:no-repeat;background-position:center;background-color:var(--color-text-maxcontrast) !important}.vs__dropdown-menu span[lookup] .avatardiv div{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_sharing/src/components/SharingInput.vue\"],\"names\":[],\"mappings\":\"AACA,gBACC,YAAA,CACA,qBAAA,CACA,iBAAA,CAEA,gDACC,iBAAA,CAGD,uBACC,UAAA,CACA,aAAA,CAOA,2CACC,yCAAA,CACA,2BAAA,CACA,0BAAA,CACA,yDAAA,CACA,+CACC,YAAA\",\"sourcesContent\":[\"\\n.sharing-search {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tmargin-bottom: 4px;\\n\\n\\tlabel[for=\\\"sharing-search-input\\\"] {\\n\\t\\tmargin-bottom: 2px;\\n\\t}\\n\\n\\t&__input {\\n\\t\\twidth: 100%;\\n\\t\\tmargin: 10px 0;\\n\\t}\\n}\\n\\n.vs__dropdown-menu {\\n\\t// properly style the lookup entry\\n\\tspan[lookup] {\\n\\t\\t.avatardiv {\\n\\t\\t\\tbackground-image: var(--icon-search-white);\\n\\t\\t\\tbackground-repeat: no-repeat;\\n\\t\\t\\tbackground-position: center;\\n\\t\\t\\tbackground-color: var(--color-text-maxcontrast) !important;\\n\\t\\t\\tdiv {\\n\\t\\t\\t\\tdisplay: none;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".sharing-entry__inherited .avatar-shared[data-v-3462b966]{width:32px;height:32px;line-height:32px;font-size:18px;background-color:var(--color-text-maxcontrast);border-radius:50%;flex-shrink:0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_sharing/src/views/SharingInherited.vue\"],\"names\":[],\"mappings\":\"AAEC,0DACC,UAAA,CACA,WAAA,CACA,gBAAA,CACA,cAAA,CACA,8CAAA,CACA,iBAAA,CACA,aAAA\",\"sourcesContent\":[\"\\n.sharing-entry__inherited {\\n\\t.avatar-shared {\\n\\t\\twidth: 32px;\\n\\t\\theight: 32px;\\n\\t\\tline-height: 32px;\\n\\t\\tfont-size: 18px;\\n\\t\\tbackground-color: var(--color-text-maxcontrast);\\n\\t\\tborder-radius: 50%;\\n\\t\\tflex-shrink: 0;\\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, \".emptyContentWithSections[data-v-56c61b11]{margin:1rem auto}.sharingTab__content[data-v-56c61b11]{padding:0 6px}.sharingTab__additionalContent[data-v-56c61b11]{margin:44px 0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_sharing/src/views/SharingTab.vue\"],\"names\":[],\"mappings\":\"AACA,2CACC,gBAAA,CAIA,sCACC,aAAA,CAED,gDACC,aAAA\",\"sourcesContent\":[\"\\n.emptyContentWithSections {\\n\\tmargin: 1rem auto;\\n}\\n\\n.sharingTab {\\n\\t&__content {\\n\\t\\tpadding: 0 6px;\\n\\t}\\n\\t&__additionalContent {\\n\\t\\tmargin: 44px 0;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 7870;","__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\t7870: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], function() { return __webpack_require__(26790); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","Config","document","getElementsByClassName","dataset","allowPublicUpload","getElementById","value","OC","appConfig","core","federatedCloudShareDoc","this","isDefaultExpireDateEnabled","Date","setDate","getDate","defaultExpireDate","isDefaultInternalExpireDateEnabled","defaultInternalExpireDate","isDefaultRemoteExpireDateEnabled","defaultRemoteExpireDate","enforcePasswordForPublicLink","enableLinkPasswordByDefault","defaultExpireDateEnforced","defaultExpireDateEnabled","defaultInternalExpireDateEnforced","defaultRemoteExpireDateEnforced","defaultInternalExpireDateEnabled","defaultRemoteExpireDateEnabled","remoteShareAllowed","capabilities","getCapabilities","undefined","files_sharing","sharebymail","public","enabled","resharingAllowed","password","enforced","sharee","always_show_unique","allowGroupSharing","parseInt","config","password_policy","Share","ocsData","ocs","data","hide_download","mail_send","attributes","JSON","parse","e","console","warn","_share","id","share_type","permissions","uid_owner","displayname_owner","share_with","share_with_displayname","share_with_displayname_unique","share_with_link","share_with_avatar","uid_file_owner","displayname_file_owner","stime","expiration","date","token","note","label","state","password_expiration_time","passwordExpirationTime","send_password_by_talk","sendPasswordByTalk","path","item_type","mimetype","file_source","file_target","file_parent","PERMISSION_READ","PERMISSION_CREATE","PERMISSION_DELETE","PERMISSION_UPDATE","PERMISSION_SHARE","i","attr","scope","key","setAttribute","attrUpdate","push","can_edit","can_delete","via_fileid","via_path","parent","storage_id","storage","item_source","status","SHARE_TYPES","ShareTypes","name","components","NcActions","props","title","type","default","required","subtitle","isUnique","ariaExpanded","computed","ariaExpandedValue","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","_c","_self","staticClass","_t","_v","_s","_e","$slots","ref","attrs","NcActionLink","SharingEntrySimple","fileInfo","copied","copySuccess","internalLink","copyLinkTooltip","internalLinkSubtitle","methods","copyLink","navigator","showSuccess","setTimeout","t","scopedSlots","_u","fn","proxy","on","$event","preventDefault","apply","arguments","passwordSet","passwordPolicy","api","generate","axios","request","info","showError","array","Uint8Array","ratio","length","self","crypto","getRandomValues","charAt","shareUrl","generateOcsUrl","createShare","shareType","shareWith","publicUpload","expireDate","share","emit","error","errorMessage","response","meta","message","Notification","showTemporary","deleteShare","updateShare","properties","Error","NcSelect","mixins","shares","linkShares","reshare","canReshare","loading","query","recommendations","ShareSearch","suggestions","externalResults","inputPlaceholder","isValidQuery","noResultText","mounted","handleOpen","asyncFind","getSuggestions","lookup","params","format","itemType","search","perPage","exact","rawExactSuggestions","rawSuggestions","exactSuggestions","map","sort","lookupEntry","isNoUser","displayName","allSuggestions","nameCounts","desc","debounceGetSuggestions","getRecommendations","rawRecommendations","reduce","concat","filterOutExistingShares","obj","sharesObj","arr","shareTypeToIcon","icon","iconTitle","formatForMultiselect","result","server","user","shareWithDisplayNameUnique","addShare","GeneratePassword","component","model","callback","$$v","expression","SharesRequests","Object","Boolean","errors","saving","open","updateQueue","PQueue","concurrency","reactiveState","hasNote","get","set","dateTomorrow","lang","weekdaysShort","window","dayNamesShort","monthsShort","monthNamesShort","formatLocale","firstDayOfWeek","firstDay","weekdaysMin","monthFormat","isShareOwner","owner","getCurrentUser","uid","checkShare","trim","expirationDate","isValid","parseDateString","match","pop","formatDateToString","UTC","getFullYear","getMonth","toISOString","split","onExpirationChange","queueUpdate","onExpirationDisable","onNoteChange","$set","onNoteSubmit","newNote","$delete","onDelete","debug","$emit","propertyNames","forEach","stringify","toString","add","updatedShare","indexOf","propertyName","onSyncError","property","propertyEl","$refs","$el","focusable","querySelector","focus","debounceQueueUpdate","debounce","NcActionButton","NcActionText","NcAvatar","viaFileTargetUrl","fileid","viaFolderName","shareWithDisplayName","initiator","ownerDisplayName","viaPath","viaFileid","folder","canDelete","SharingEntryInherited","loaded","showInheritedShares","showInheritedSharesIcon","mainTitle","subTitle","toggleTooltip","fullPath","watch","toggleInheritedShares","fetchInheritedShares","url","resetState","removeShare","stopPropagation","_l","action","is","_g","_b","tag","handlers","text","ATOMIC_PERMISSIONS","NONE","READ","UPDATE","CREATE","DELETE","SHARE","BUNDLED_PERMISSIONS","READ_ONLY","UPLOAD_AND_UPDATE","FILE_DROP","ALL","hasPermissions","initialPermissionSet","permissionsToCheck","permissionsSetIsValid","permissionsSet","togglePermissions","permissionsToToggle","permissionsToSubtract","subtractPermissions","permissionsToAdd","addPermissions","NcActionCheckbox","NcActionRadio","Tune","ChevronLeft","randomFormName","showCustomPermissionsForm","atomicPermissions","bundledPermissions","sharePermissionsSummary","filter","join","sharePermissionsIsBundle","sharePermissionsSetIsValid","isFolder","fileHasCreatePermission","sharePermissionEqual","shareHasPermissions","setSharePermissions","canToggleSharePermissions","permissionSet","toggleSharePermissions","isPublicUploadEnabled","class","NcActionInput","NcActionTextEditable","NcActionSeparator","ExternalShareAction","SharePermissionsEditor","index","pending","ExternalLegacyLinkActions","ExternalShareActions","hasExpirationDate","dateMaxEnforced","isPasswordProtected","Vue","isTalkEnabled","isPasswordProtectedByTalkAvailable","isPasswordProtectedByTalk","isEmailShareType","canTogglePasswordProtectedByTalkAvailable","pendingPassword","pendingEnforcedPassword","pendingExpirationDate","hasUnsavedPassword","shareLink","actionsTooltip","externalLegacyLinkActions","externalLinkActions","isPasswordPolicyEnabled","canChangeHideDownload","onNewLinkShare","shareDefaults","pushNewLinkShare","newShare","update","onLabelChange","onLabelSubmit","onPasswordChange","onPasswordDisable","onPasswordSubmit","onPasswordProtectedByTalkChange","onMenuClose","onCancel","minLength","canEdit","newLabel","hideDownload","newPassword","isDefaultExpireDateEnforced","SharingEntryLink","canLinkShare","hasLinkShares","hasShares","awaitForShare","resolve","permissionsEdit","permissionsCreate","permissionsDelete","permissionsRead","permissionsShare","tooltip","canHaveNote","isRemote","canSetEdit","canSetCreate","canSetDelete","canSetReshare","canSetDownload","isEditChecked","canCreate","isCreateChecked","isDeleteChecked","isReshareChecked","canDownload","isDownloadChecked","hasRead","hasStatus","allowDownloadText","isSetDownloadButtonVisible","updatePermissions","SHARE_TYPE_USER","shareWithAvatar","shareWithLink","isResharingAllowed","isDefaultInternalExpireDateEnforced","SharingEntry","CollectionList","SharingEntryInternal","SharingInherited","SharingInput","SharingLinkList","SharingList","expirationInterval","sharedWithMe","sections","projectsEnabled","isSharedWithMe","getShares","fetchShares","reshares","fetchSharedWithMe","shared_with_me","Promise","clearInterval","updateExpirationSubtitle","relativetime","processShares","processSharedWithMe","group","escape","circle","conversation","listComponent","emptyContentWithSections","section","refInFor","_state","results","handler","ExternalLinkActions","actions","Array","isArray","values","every","findIndex","check","TabSections","_sections","OCA","Sharing","assign","ShareTabSections","n","View","SharingTab","TabInstance","addEventListener","Files","Sidebar","registerTab","Tab","iconSvg","ShareVariant","mount","el","context","$destroy","$mount","destroy","___CSS_LOADER_EXPORT___","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","__webpack_modules__","call","m","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","j","keys","splice","r","getter","__esModule","d","a","definition","o","defineProperty","enumerable","g","globalThis","Function","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","baseURI","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","nc","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file +{"version":3,"file":"files_sharing-files_sharing_tab.js?v=d397f6da51c1fc8246cd","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/files_sharing/src/services/ConfigService.js","webpack:///nextcloud/apps/files_sharing/src/models/Share.js","webpack:///nextcloud/apps/files_sharing/src/mixins/ShareTypes.js","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntrySimple.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntrySimple.vue","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntrySimple.vue?1b73","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntrySimple.vue?cb12","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntrySimple.vue?0c02","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryInternal.vue","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryInternal.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntryInternal.vue?00d7","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntryInternal.vue?4c20","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntryInternal.vue?6c02","webpack:///nextcloud/apps/files_sharing/src/utils/GeneratePassword.js","webpack:///nextcloud/apps/files_sharing/src/mixins/ShareRequests.js","webpack:///nextcloud/apps/files_sharing/src/components/SharingInput.vue","webpack:///nextcloud/apps/files_sharing/src/components/SharingInput.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files_sharing/src/components/SharingInput.vue?9a14","webpack://nextcloud/./apps/files_sharing/src/components/SharingInput.vue?3d7c","webpack://nextcloud/./apps/files_sharing/src/components/SharingInput.vue?65df","webpack:///nextcloud/apps/files_sharing/src/mixins/SharesMixin.js","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryInherited.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryInherited.vue","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntryInherited.vue?4cb0","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntryInherited.vue?0e5a","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntryInherited.vue?77d5","webpack:///nextcloud/apps/files_sharing/src/views/SharingInherited.vue","webpack:///nextcloud/apps/files_sharing/src/views/SharingInherited.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files_sharing/src/views/SharingInherited.vue?42d8","webpack://nextcloud/./apps/files_sharing/src/views/SharingInherited.vue?1677","webpack://nextcloud/./apps/files_sharing/src/views/SharingInherited.vue?45a6","webpack:///nextcloud/apps/files_sharing/src/components/ExternalShareAction.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files_sharing/src/components/ExternalShareAction.vue","webpack://nextcloud/./apps/files_sharing/src/components/ExternalShareAction.vue?9bf3","webpack://nextcloud/./apps/files_sharing/src/components/ExternalShareAction.vue?82b4","webpack:///nextcloud/apps/files_sharing/src/lib/SharePermissionsToolBox.js","webpack:///nextcloud/apps/files_sharing/src/components/SharePermissionsEditor.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files_sharing/src/components/SharePermissionsEditor.vue","webpack://nextcloud/./apps/files_sharing/src/components/SharePermissionsEditor.vue?b011","webpack://nextcloud/./apps/files_sharing/src/components/SharePermissionsEditor.vue?f133","webpack://nextcloud/./apps/files_sharing/src/components/SharePermissionsEditor.vue?f69b","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryLink.vue","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryLink.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntryLink.vue?0bfc","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntryLink.vue?af90","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntryLink.vue?64e9","webpack:///nextcloud/apps/files_sharing/src/views/SharingLinkList.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files_sharing/src/views/SharingLinkList.vue","webpack://nextcloud/./apps/files_sharing/src/views/SharingLinkList.vue?a70b","webpack://nextcloud/./apps/files_sharing/src/views/SharingLinkList.vue?de0b","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntry.vue","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntry.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntry.vue?2dc3","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntry.vue?10a7","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntry.vue?f8d7","webpack:///nextcloud/apps/files_sharing/src/views/SharingList.vue","webpack:///nextcloud/apps/files_sharing/src/views/SharingList.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files_sharing/src/views/SharingList.vue?9f9c","webpack://nextcloud/./apps/files_sharing/src/views/SharingList.vue?e340","webpack:///nextcloud/apps/files_sharing/src/views/SharingTab.vue","webpack:///nextcloud/apps/files_sharing/src/utils/SharedWithMe.js","webpack:///nextcloud/apps/files_sharing/src/views/SharingTab.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files_sharing/src/views/SharingTab.vue?8704","webpack://nextcloud/./apps/files_sharing/src/views/SharingTab.vue?6997","webpack://nextcloud/./apps/files_sharing/src/views/SharingTab.vue?0ae8","webpack:///nextcloud/apps/files_sharing/src/services/ShareSearch.js","webpack:///nextcloud/apps/files_sharing/src/services/ExternalLinkActions.js","webpack:///nextcloud/apps/files_sharing/src/services/ExternalShareActions.js","webpack:///nextcloud/apps/files_sharing/src/services/TabSections.js","webpack:///nextcloud/apps/files_sharing/src/files_sharing_tab.js","webpack:///nextcloud/apps/files_sharing/src/components/SharePermissionsEditor.vue?vue&type=style&index=0&id=5e957d09&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntry.vue?vue&type=style&index=0&id=0d6fcc6a&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryInherited.vue?vue&type=style&index=0&id=23251e4a&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryInternal.vue?vue&type=style&index=0&id=69e43ddc&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryLink.vue?vue&type=style&index=0&id=10855e60&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntrySimple.vue?vue&type=style&index=0&id=9fd256bc&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingInput.vue?vue&type=style&index=0&id=43c265ae&prod&lang=scss&","webpack:///nextcloud/apps/files_sharing/src/views/SharingInherited.vue?vue&type=style&index=0&id=3462b966&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/views/SharingTab.vue?vue&type=style&index=0&id=56c61b11&prod&scoped=true&lang=scss&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Arthur Schiwon <blizzz@arthur-schiwon.de>\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\nexport default class Config {\n\n\t/**\n\t * Is public upload allowed on link shares ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isPublicUploadEnabled() {\n\t\treturn document.getElementsByClassName('files-filestable')[0]\n\t\t\t&& document.getElementsByClassName('files-filestable')[0].dataset.allowPublicUpload === 'yes'\n\t}\n\n\t/**\n\t * Are link share allowed ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isShareWithLinkAllowed() {\n\t\treturn document.getElementById('allowShareWithLink')\n\t\t\t&& document.getElementById('allowShareWithLink').value === 'yes'\n\t}\n\n\t/**\n\t * Get the federated sharing documentation link\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget federatedShareDocLink() {\n\t\treturn OC.appConfig.core.federatedCloudShareDoc\n\t}\n\n\t/**\n\t * Get the default link share expiration date\n\t *\n\t * @return {Date|null}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget defaultExpirationDate() {\n\t\tif (this.isDefaultExpireDateEnabled) {\n\t\t\treturn new Date(new Date().setDate(new Date().getDate() + this.defaultExpireDate))\n\t\t}\n\t\treturn null\n\t}\n\n\t/**\n\t * Get the default internal expiration date\n\t *\n\t * @return {Date|null}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget defaultInternalExpirationDate() {\n\t\tif (this.isDefaultInternalExpireDateEnabled) {\n\t\t\treturn new Date(new Date().setDate(new Date().getDate() + this.defaultInternalExpireDate))\n\t\t}\n\t\treturn null\n\t}\n\n\t/**\n\t * Get the default remote expiration date\n\t *\n\t * @return {Date|null}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget defaultRemoteExpirationDateString() {\n\t\tif (this.isDefaultRemoteExpireDateEnabled) {\n\t\t\treturn new Date(new Date().setDate(new Date().getDate() + this.defaultRemoteExpireDate))\n\t\t}\n\t\treturn null\n\t}\n\n\t/**\n\t * Are link shares password-enforced ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget enforcePasswordForPublicLink() {\n\t\treturn OC.appConfig.core.enforcePasswordForPublicLink === true\n\t}\n\n\t/**\n\t * Is password asked by default on link shares ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget enableLinkPasswordByDefault() {\n\t\treturn OC.appConfig.core.enableLinkPasswordByDefault === true\n\t}\n\n\t/**\n\t * Is link shares expiration enforced ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isDefaultExpireDateEnforced() {\n\t\treturn OC.appConfig.core.defaultExpireDateEnforced === true\n\t}\n\n\t/**\n\t * Is there a default expiration date for new link shares ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isDefaultExpireDateEnabled() {\n\t\treturn OC.appConfig.core.defaultExpireDateEnabled === true\n\t}\n\n\t/**\n\t * Is internal shares expiration enforced ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isDefaultInternalExpireDateEnforced() {\n\t\treturn OC.appConfig.core.defaultInternalExpireDateEnforced === true\n\t}\n\n\t/**\n\t * Is remote shares expiration enforced ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isDefaultRemoteExpireDateEnforced() {\n\t\treturn OC.appConfig.core.defaultRemoteExpireDateEnforced === true\n\t}\n\n\t/**\n\t * Is there a default expiration date for new internal shares ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isDefaultInternalExpireDateEnabled() {\n\t\treturn OC.appConfig.core.defaultInternalExpireDateEnabled === true\n\t}\n\n\t/**\n\t * Is there a default expiration date for new remote shares ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isDefaultRemoteExpireDateEnabled() {\n\t\treturn OC.appConfig.core.defaultRemoteExpireDateEnabled === true\n\t}\n\n\t/**\n\t * Are users on this server allowed to send shares to other servers ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isRemoteShareAllowed() {\n\t\treturn OC.appConfig.core.remoteShareAllowed === true\n\t}\n\n\t/**\n\t * Is sharing my mail (link share) enabled ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isMailShareAllowed() {\n\t\tconst capabilities = OC.getCapabilities()\n\t\t// eslint-disable-next-line camelcase\n\t\treturn capabilities?.files_sharing?.sharebymail !== undefined\n\t\t\t// eslint-disable-next-line camelcase\n\t\t\t&& capabilities?.files_sharing?.public?.enabled === true\n\t}\n\n\t/**\n\t * Get the default days to link shares expiration\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget defaultExpireDate() {\n\t\treturn OC.appConfig.core.defaultExpireDate\n\t}\n\n\t/**\n\t * Get the default days to internal shares expiration\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget defaultInternalExpireDate() {\n\t\treturn OC.appConfig.core.defaultInternalExpireDate\n\t}\n\n\t/**\n\t * Get the default days to remote shares expiration\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget defaultRemoteExpireDate() {\n\t\treturn OC.appConfig.core.defaultRemoteExpireDate\n\t}\n\n\t/**\n\t * Is resharing allowed ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isResharingAllowed() {\n\t\treturn OC.appConfig.core.resharingAllowed === true\n\t}\n\n\t/**\n\t * Is password enforced for mail shares ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isPasswordForMailSharesRequired() {\n\t\treturn (OC.getCapabilities().files_sharing.sharebymail === undefined) ? false : OC.getCapabilities().files_sharing.sharebymail.password.enforced\n\t}\n\n\t/**\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget shouldAlwaysShowUnique() {\n\t\treturn (OC.getCapabilities().files_sharing?.sharee?.always_show_unique === true)\n\t}\n\n\t/**\n\t * Is sharing with groups allowed ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget allowGroupSharing() {\n\t\treturn OC.appConfig.core.allowGroupSharing === true\n\t}\n\n\t/**\n\t * Get the maximum results of a share search\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget maxAutocompleteResults() {\n\t\treturn parseInt(OC.config['sharing.maxAutocompleteResults'], 10) || 25\n\t}\n\n\t/**\n\t * Get the minimal string length\n\t * to initiate a share search\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget minSearchStringLength() {\n\t\treturn parseInt(OC.config['sharing.minSearchStringLength'], 10) || 0\n\t}\n\n\t/**\n\t * Get the password policy config\n\t *\n\t * @return {object}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget passwordPolicy() {\n\t\tconst capabilities = OC.getCapabilities()\n\t\treturn capabilities.password_policy ? capabilities.password_policy : {}\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author Gary Kim <gary@garykim.dev>\n * @author Georg Ehrke <oc.list@georgehrke.com>\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\nexport default class Share {\n\n\t_share\n\n\t/**\n\t * Create the share object\n\t *\n\t * @param {object} ocsData ocs request response\n\t */\n\tconstructor(ocsData) {\n\t\tif (ocsData.ocs && ocsData.ocs.data && ocsData.ocs.data[0]) {\n\t\t\tocsData = ocsData.ocs.data[0]\n\t\t}\n\n\t\t// convert int into boolean\n\t\tocsData.hide_download = !!ocsData.hide_download\n\t\tocsData.mail_send = !!ocsData.mail_send\n\n\t\tif (ocsData.attributes) {\n\t\t\ttry {\n\t\t\t\tocsData.attributes = JSON.parse(ocsData.attributes)\n\t\t\t} catch (e) {\n\t\t\t\tconsole.warn('Could not parse share attributes returned by server: \"' + ocsData.attributes + '\"')\n\t\t\t}\n\t\t}\n\t\tocsData.attributes = ocsData.attributes ?? []\n\n\t\t// store state\n\t\tthis._share = ocsData\n\t}\n\n\t/**\n\t * Get the share state\n\t * ! used for reactivity purpose\n\t * Do not remove. It allow vuejs to\n\t * inject its watchers into the #share\n\t * state and make the whole class reactive\n\t *\n\t * @return {object} the share raw state\n\t * @readonly\n\t * @memberof Sidebar\n\t */\n\tget state() {\n\t\treturn this._share\n\t}\n\n\t/**\n\t * get the share id\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget id() {\n\t\treturn this._share.id\n\t}\n\n\t/**\n\t * Get the share type\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget type() {\n\t\treturn this._share.share_type\n\t}\n\n\t/**\n\t * Get the share permissions\n\t * See OC.PERMISSION_* variables\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget permissions() {\n\t\treturn this._share.permissions\n\t}\n\n\t/**\n\t * Get the share attributes\n\t *\n\t * @return {Array}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget attributes() {\n\t\treturn this._share.attributes\n\t}\n\n\t/**\n\t * Set the share permissions\n\t * See OC.PERMISSION_* variables\n\t *\n\t * @param {number} permissions valid permission, See OC.PERMISSION_* variables\n\t * @memberof Share\n\t */\n\tset permissions(permissions) {\n\t\tthis._share.permissions = permissions\n\t}\n\n\t// SHARE OWNER --------------------------------------------------\n\t/**\n\t * Get the share owner uid\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget owner() {\n\t\treturn this._share.uid_owner\n\t}\n\n\t/**\n\t * Get the share owner's display name\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget ownerDisplayName() {\n\t\treturn this._share.displayname_owner\n\t}\n\n\t// SHARED WITH --------------------------------------------------\n\t/**\n\t * Get the share with entity uid\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget shareWith() {\n\t\treturn this._share.share_with\n\t}\n\n\t/**\n\t * Get the share with entity display name\n\t * fallback to its uid if none\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget shareWithDisplayName() {\n\t\treturn this._share.share_with_displayname\n\t\t\t|| this._share.share_with\n\t}\n\n\t/**\n\t * Unique display name in case of multiple\n\t * duplicates results with the same name.\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget shareWithDisplayNameUnique() {\n\t\treturn this._share.share_with_displayname_unique\n\t\t\t|| this._share.share_with\n\t}\n\n\t/**\n\t * Get the share with entity link\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget shareWithLink() {\n\t\treturn this._share.share_with_link\n\t}\n\n\t/**\n\t * Get the share with avatar if any\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget shareWithAvatar() {\n\t\treturn this._share.share_with_avatar\n\t}\n\n\t// SHARED FILE OR FOLDER OWNER ----------------------------------\n\t/**\n\t * Get the shared item owner uid\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget uidFileOwner() {\n\t\treturn this._share.uid_file_owner\n\t}\n\n\t/**\n\t * Get the shared item display name\n\t * fallback to its uid if none\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget displaynameFileOwner() {\n\t\treturn this._share.displayname_file_owner\n\t\t\t|| this._share.uid_file_owner\n\t}\n\n\t// TIME DATA ----------------------------------------------------\n\t/**\n\t * Get the share creation timestamp\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget createdTime() {\n\t\treturn this._share.stime\n\t}\n\n\t/**\n\t * Get the expiration date\n\t *\n\t * @return {string} date with YYYY-MM-DD format\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget expireDate() {\n\t\treturn this._share.expiration\n\t}\n\n\t/**\n\t * Set the expiration date\n\t *\n\t * @param {string} date the share expiration date with YYYY-MM-DD format\n\t * @memberof Share\n\t */\n\tset expireDate(date) {\n\t\tthis._share.expiration = date\n\t}\n\n\t// EXTRA DATA ---------------------------------------------------\n\t/**\n\t * Get the public share token\n\t *\n\t * @return {string} the token\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget token() {\n\t\treturn this._share.token\n\t}\n\n\t/**\n\t * Get the share note if any\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget note() {\n\t\treturn this._share.note\n\t}\n\n\t/**\n\t * Set the share note if any\n\t *\n\t * @param {string} note the note\n\t * @memberof Share\n\t */\n\tset note(note) {\n\t\tthis._share.note = note\n\t}\n\n\t/**\n\t * Get the share label if any\n\t * Should only exist on link shares\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget label() {\n\t\treturn this._share.label\n\t}\n\n\t/**\n\t * Set the share label if any\n\t * Should only be set on link shares\n\t *\n\t * @param {string} label the label\n\t * @memberof Share\n\t */\n\tset label(label) {\n\t\tthis._share.label = label\n\t}\n\n\t/**\n\t * Have a mail been sent\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget mailSend() {\n\t\treturn this._share.mail_send === true\n\t}\n\n\t/**\n\t * Hide the download button on public page\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget hideDownload() {\n\t\treturn this._share.hide_download === true\n\t}\n\n\t/**\n\t * Hide the download button on public page\n\t *\n\t * @param {boolean} state hide the button ?\n\t * @memberof Share\n\t */\n\tset hideDownload(state) {\n\t\tthis._share.hide_download = state === true\n\t}\n\n\t/**\n\t * Password protection of the share\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget password() {\n\t\treturn this._share.password\n\t}\n\n\t/**\n\t * Password protection of the share\n\t *\n\t * @param {string} password the share password\n\t * @memberof Share\n\t */\n\tset password(password) {\n\t\tthis._share.password = password\n\t}\n\n\t/**\n\t * Password expiration time\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget passwordExpirationTime() {\n\t\treturn this._share.password_expiration_time\n\t}\n\n\t/**\n\t * Password expiration time\n\t *\n\t * @param {string} password expiration time\n\t * @memberof Share\n\t */\n\tset passwordExpirationTime(passwordExpirationTime) {\n\t\tthis._share.password_expiration_time = passwordExpirationTime\n\t}\n\n\t/**\n\t * Password protection by Talk of the share\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget sendPasswordByTalk() {\n\t\treturn this._share.send_password_by_talk\n\t}\n\n\t/**\n\t * Password protection by Talk of the share\n\t *\n\t * @param {boolean} sendPasswordByTalk whether to send the password by Talk\n\t * or not\n\t * @memberof Share\n\t */\n\tset sendPasswordByTalk(sendPasswordByTalk) {\n\t\tthis._share.send_password_by_talk = sendPasswordByTalk\n\t}\n\n\t// SHARED ITEM DATA ---------------------------------------------\n\t/**\n\t * Get the shared item absolute full path\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget path() {\n\t\treturn this._share.path\n\t}\n\n\t/**\n\t * Return the item type: file or folder\n\t *\n\t * @return {string} 'folder' or 'file'\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget itemType() {\n\t\treturn this._share.item_type\n\t}\n\n\t/**\n\t * Get the shared item mimetype\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget mimetype() {\n\t\treturn this._share.mimetype\n\t}\n\n\t/**\n\t * Get the shared item id\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget fileSource() {\n\t\treturn this._share.file_source\n\t}\n\n\t/**\n\t * Get the target path on the receiving end\n\t * e.g the file /xxx/aaa will be shared in\n\t * the receiving root as /aaa, the fileTarget is /aaa\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget fileTarget() {\n\t\treturn this._share.file_target\n\t}\n\n\t/**\n\t * Get the parent folder id if any\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget fileParent() {\n\t\treturn this._share.file_parent\n\t}\n\n\t// PERMISSIONS Shortcuts\n\n\t/**\n\t * Does this share have READ permissions\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget hasReadPermission() {\n\t\treturn !!((this.permissions & OC.PERMISSION_READ))\n\t}\n\n\t/**\n\t * Does this share have CREATE permissions\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget hasCreatePermission() {\n\t\treturn !!((this.permissions & OC.PERMISSION_CREATE))\n\t}\n\n\t/**\n\t * Does this share have DELETE permissions\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget hasDeletePermission() {\n\t\treturn !!((this.permissions & OC.PERMISSION_DELETE))\n\t}\n\n\t/**\n\t * Does this share have UPDATE permissions\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget hasUpdatePermission() {\n\t\treturn !!((this.permissions & OC.PERMISSION_UPDATE))\n\t}\n\n\t/**\n\t * Does this share have SHARE permissions\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget hasSharePermission() {\n\t\treturn !!((this.permissions & OC.PERMISSION_SHARE))\n\t}\n\n\t/**\n\t * Does this share have download permissions\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget hasDownloadPermission() {\n\t\tfor (const i in this._share.attributes) {\n\t\t\tconst attr = this._share.attributes[i]\n\t\t\tif (attr.scope === 'permissions' && attr.key === 'download') {\n\t\t\t\treturn attr.enabled\n\t\t\t}\n\t\t}\n\n\t\treturn true\n\t}\n\n\tset hasDownloadPermission(enabled) {\n\t\tthis.setAttribute('permissions', 'download', !!enabled)\n\t}\n\n\tsetAttribute(scope, key, enabled) {\n\t\tconst attrUpdate = {\n\t\t\tscope,\n\t\t\tkey,\n\t\t\tenabled,\n\t\t}\n\n\t\t// try and replace existing\n\t\tfor (const i in this._share.attributes) {\n\t\t\tconst attr = this._share.attributes[i]\n\t\t\tif (attr.scope === attrUpdate.scope && attr.key === attrUpdate.key) {\n\t\t\t\tthis._share.attributes[i] = attrUpdate\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\t\tthis._share.attributes.push(attrUpdate)\n\t}\n\n\t// PERMISSIONS Shortcuts for the CURRENT USER\n\t// ! the permissions above are the share settings,\n\t// ! meaning the permissions for the recipient\n\t/**\n\t * Can the current user EDIT this share ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget canEdit() {\n\t\treturn this._share.can_edit === true\n\t}\n\n\t/**\n\t * Can the current user DELETE this share ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget canDelete() {\n\t\treturn this._share.can_delete === true\n\t}\n\n\t/**\n\t * Top level accessible shared folder fileid for the current user\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget viaFileid() {\n\t\treturn this._share.via_fileid\n\t}\n\n\t/**\n\t * Top level accessible shared folder path for the current user\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget viaPath() {\n\t\treturn this._share.via_path\n\t}\n\n\t// TODO: SORT THOSE PROPERTIES\n\n\tget parent() {\n\t\treturn this._share.parent\n\t}\n\n\tget storageId() {\n\t\treturn this._share.storage_id\n\t}\n\n\tget storage() {\n\t\treturn this._share.storage\n\t}\n\n\tget itemSource() {\n\t\treturn this._share.item_source\n\t}\n\n\tget status() {\n\t\treturn this._share.status\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { Type as ShareTypes } from '@nextcloud/sharing'\n\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tSHARE_TYPES: ShareTypes,\n\t\t}\n\t},\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntrySimple.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!./SharingEntrySimple.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<li class=\"sharing-entry\">\n\t\t<slot name=\"avatar\" />\n\t\t<div class=\"sharing-entry__desc\">\n\t\t\t<span class=\"sharing-entry__title\">{{ title }}</span>\n\t\t\t<p v-if=\"subtitle\">\n\t\t\t\t{{ subtitle }}\n\t\t\t</p>\n\t\t</div>\n\t\t<NcActions ref=\"actionsComponent\"\n\t\t\tv-if=\"$slots['default']\"\n\t\t\tclass=\"sharing-entry__actions\"\n\t\t\tmenu-align=\"right\"\n\t\t\t:aria-expanded=\"ariaExpandedValue\">\n\t\t\t<slot />\n\t\t</NcActions>\n\t</li>\n</template>\n\n<script>\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions'\n\nexport default {\n\tname: 'SharingEntrySimple',\n\n\tcomponents: {\n\t\tNcActions,\n\t},\n\n\tprops: {\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t\trequired: true,\n\t\t},\n\t\tsubtitle: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tisUnique: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tariaExpanded: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tariaExpandedValue() {\n\t\t\tif (this.ariaExpanded === null) {\n\t\t\t\treturn this.ariaExpanded\n\t\t\t}\n\t\t\treturn this.ariaExpanded ? 'true' : 'false'\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.sharing-entry {\n\tdisplay: flex;\n\talign-items: center;\n\tmin-height: 44px;\n\t&__desc {\n\t\tpadding: 8px;\n\t\tline-height: 1.2em;\n\t\tposition: relative;\n\t\tflex: 1 1;\n\t\tmin-width: 0;\n\t\tp {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n\t&__title {\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\toverflow: hidden;\n\t\tmax-width: inherit;\n\t}\n\t&__actions {\n\t\tmargin-left: auto !important;\n\t}\n}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntrySimple.vue?vue&type=style&index=0&id=9fd256bc&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntrySimple.vue?vue&type=style&index=0&id=9fd256bc&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SharingEntrySimple.vue?vue&type=template&id=9fd256bc&scoped=true&\"\nimport script from \"./SharingEntrySimple.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingEntrySimple.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SharingEntrySimple.vue?vue&type=style&index=0&id=9fd256bc&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9fd256bc\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('li',{staticClass:\"sharing-entry\"},[_vm._t(\"avatar\"),_vm._v(\" \"),_c('div',{staticClass:\"sharing-entry__desc\"},[_c('span',{staticClass:\"sharing-entry__title\"},[_vm._v(_vm._s(_vm.title))]),_vm._v(\" \"),(_vm.subtitle)?_c('p',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.subtitle)+\"\\n\\t\\t\")]):_vm._e()]),_vm._v(\" \"),(_vm.$slots['default'])?_c('NcActions',{ref:\"actionsComponent\",staticClass:\"sharing-entry__actions\",attrs:{\"menu-align\":\"right\",\"aria-expanded\":_vm.ariaExpandedValue}},[_vm._t(\"default\")],2):_vm._e()],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n<template>\n\t<ul>\n\t\t<SharingEntrySimple ref=\"shareEntrySimple\"\n\t\t\tclass=\"sharing-entry__internal\"\n\t\t\t:title=\"t('files_sharing', 'Internal link')\"\n\t\t\t:subtitle=\"internalLinkSubtitle\">\n\t\t\t<template #avatar>\n\t\t\t\t<div class=\"avatar-external icon-external-white\" />\n\t\t\t</template>\n\n\t\t\t<NcActionLink :href=\"internalLink\"\n\t\t\t\t:aria-label=\"copyLinkTooltip\"\n\t\t\t\t:title=\"copyLinkTooltip\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\t:icon=\"copied && copySuccess ? 'icon-checkmark-color' : 'icon-clippy'\"\n\t\t\t\t@click.prevent=\"copyLink\" />\n\t\t</SharingEntrySimple>\n\t</ul>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport { showSuccess } from '@nextcloud/dialogs'\nimport NcActionLink from '@nextcloud/vue/dist/Components/NcActionLink'\nimport SharingEntrySimple from './SharingEntrySimple'\n\nexport default {\n\tname: 'SharingEntryInternal',\n\n\tcomponents: {\n\t\tNcActionLink,\n\t\tSharingEntrySimple,\n\t},\n\n\tprops: {\n\t\tfileInfo: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => {},\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tcopied: false,\n\t\t\tcopySuccess: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Get the internal link to this file id\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tinternalLink() {\n\t\t\treturn window.location.protocol + '//' + window.location.host + generateUrl('/f/') + this.fileInfo.id\n\t\t},\n\n\t\t/**\n\t\t * Tooltip message\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tcopyLinkTooltip() {\n\t\t\tif (this.copied) {\n\t\t\t\tif (this.copySuccess) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\t\t\t\treturn t('files_sharing', 'Cannot copy, please copy the link manually')\n\t\t\t}\n\t\t\treturn t('files_sharing', 'Copy internal link to clipboard')\n\t\t},\n\n\t\tinternalLinkSubtitle() {\n\t\t\tif (this.fileInfo.type === 'dir') {\n\t\t\t\treturn t('files_sharing', 'Only works for users with access to this folder')\n\t\t\t}\n\t\t\treturn t('files_sharing', 'Only works for users with access to this file')\n\t\t},\n\t},\n\n\tmethods: {\n\t\tasync copyLink() {\n\t\t\ttry {\n\t\t\t\tawait navigator.clipboard.writeText(this.internalLink)\n\t\t\t\tshowSuccess(t('files_sharing', 'Link copied'))\n\t\t\t\t// focus and show the tooltip (note: cannot set ref on NcActionLink)\n\t\t\t\tthis.$refs.shareEntrySimple.$refs.actionsComponent.$el.focus()\n\t\t\t\tthis.copySuccess = true\n\t\t\t\tthis.copied = true\n\t\t\t} catch (error) {\n\t\t\t\tthis.copySuccess = false\n\t\t\t\tthis.copied = true\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.copySuccess = false\n\t\t\t\t\tthis.copied = false\n\t\t\t\t}, 4000)\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.sharing-entry__internal {\n\t.avatar-external {\n\t\twidth: 32px;\n\t\theight: 32px;\n\t\tline-height: 32px;\n\t\tfont-size: 18px;\n\t\tbackground-color: var(--color-text-maxcontrast);\n\t\tborder-radius: 50%;\n\t\tflex-shrink: 0;\n\t}\n\t.icon-checkmark-color {\n\t\topacity: 1;\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntryInternal.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!./SharingEntryInternal.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntryInternal.vue?vue&type=style&index=0&id=69e43ddc&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntryInternal.vue?vue&type=style&index=0&id=69e43ddc&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SharingEntryInternal.vue?vue&type=template&id=69e43ddc&scoped=true&\"\nimport script from \"./SharingEntryInternal.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingEntryInternal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SharingEntryInternal.vue?vue&type=style&index=0&id=69e43ddc&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"69e43ddc\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('ul',[_c('SharingEntrySimple',{ref:\"shareEntrySimple\",staticClass:\"sharing-entry__internal\",attrs:{\"title\":_vm.t('files_sharing', 'Internal link'),\"subtitle\":_vm.internalLinkSubtitle},scopedSlots:_vm._u([{key:\"avatar\",fn:function(){return [_c('div',{staticClass:\"avatar-external icon-external-white\"})]},proxy:true}])},[_vm._v(\" \"),_c('NcActionLink',{attrs:{\"href\":_vm.internalLink,\"aria-label\":_vm.copyLinkTooltip,\"title\":_vm.copyLinkTooltip,\"target\":\"_blank\",\"icon\":_vm.copied && _vm.copySuccess ? 'icon-checkmark-color' : 'icon-clippy'},on:{\"click\":function($event){$event.preventDefault();return _vm.copyLink.apply(null, arguments)}}})],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a 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 Config from '../services/ConfigService'\nimport { showError, showSuccess } from '@nextcloud/dialogs'\n\nconst config = new Config()\n// note: some chars removed on purpose to make them human friendly when read out\nconst passwordSet = 'abcdefgijkmnopqrstwxyzABCDEFGHJKLMNPQRSTWXYZ23456789'\n\n/**\n * Generate a valid policy password or\n * request a valid password if password_policy\n * is enabled\n *\n * @return {string} a valid password\n */\nexport default async function() {\n\t// password policy is enabled, let's request a pass\n\tif (config.passwordPolicy.api && config.passwordPolicy.api.generate) {\n\t\ttry {\n\t\t\tconst request = await axios.get(config.passwordPolicy.api.generate)\n\t\t\tif (request.data.ocs.data.password) {\n\t\t\t\tshowSuccess(t('files_sharing', 'Password created successfully'))\n\t\t\t\treturn request.data.ocs.data.password\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.info('Error generating password from password_policy', error)\n\t\t\tshowError(t('files_sharing', 'Error generating password from password policy'))\n\t\t}\n\t}\n\n\tconst array = new Uint8Array(10)\n\tconst ratio = passwordSet.length / 255\n\tself.crypto.getRandomValues(array)\n\tlet password = ''\n\tfor (let i = 0; i < array.length; i++) {\n\t\tpassword += passwordSet.charAt(array[i] * ratio)\n\t}\n\treturn password\n}\n","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.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 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// TODO: remove when ie not supported\nimport 'url-search-params-polyfill'\n\nimport { generateOcsUrl } from '@nextcloud/router'\nimport axios from '@nextcloud/axios'\nimport Share from '../models/Share'\nimport { emit } from '@nextcloud/event-bus'\n\nconst shareUrl = generateOcsUrl('apps/files_sharing/api/v1/shares')\n\nexport default {\n\tmethods: {\n\t\t/**\n\t\t * Create a new share\n\t\t *\n\t\t * @param {object} data destructuring object\n\t\t * @param {string} data.path path to the file/folder which should be shared\n\t\t * @param {number} data.shareType 0 = user; 1 = group; 3 = public link; 6 = federated cloud share\n\t\t * @param {string} data.shareWith user/group id with which the file should be shared (optional for shareType > 1)\n\t\t * @param {boolean} [data.publicUpload=false] allow public upload to a public shared folder\n\t\t * @param {string} [data.password] password to protect public link Share with\n\t\t * @param {number} [data.permissions=31] 1 = read; 2 = update; 4 = create; 8 = delete; 16 = share; 31 = all (default: 31, for public shares: 1)\n\t\t * @param {boolean} [data.sendPasswordByTalk=false] send the password via a talk conversation\n\t\t * @param {string} [data.expireDate=''] expire the shareautomatically after\n\t\t * @param {string} [data.label=''] custom label\n\t\t * @param {string} [data.attributes=null] Share attributes encoded as json\n\t\t * @return {Share} the new share\n\t\t * @throws {Error}\n\t\t */\n\t\tasync createShare({ path, permissions, shareType, shareWith, publicUpload, password, sendPasswordByTalk, expireDate, label, attributes }) {\n\t\t\ttry {\n\t\t\t\tconst request = await axios.post(shareUrl, { path, permissions, shareType, shareWith, publicUpload, password, sendPasswordByTalk, expireDate, label, attributes })\n\t\t\t\tif (!request?.data?.ocs) {\n\t\t\t\t\tthrow request\n\t\t\t\t}\n\t\t\t\tconst share = new Share(request.data.ocs.data)\n\t\t\t\temit('files_sharing:share:created', { share })\n\t\t\t\treturn share\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Error while creating share', error)\n\t\t\t\tconst errorMessage = error?.response?.data?.ocs?.meta?.message\n\t\t\t\tOC.Notification.showTemporary(\n\t\t\t\t\terrorMessage ? t('files_sharing', 'Error creating the share: {errorMessage}', { errorMessage }) : t('files_sharing', 'Error creating the share'),\n\t\t\t\t\t{ type: 'error' }\n\t\t\t\t)\n\t\t\t\tthrow error\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Delete a share\n\t\t *\n\t\t * @param {number} id share id\n\t\t * @throws {Error}\n\t\t */\n\t\tasync deleteShare(id) {\n\t\t\ttry {\n\t\t\t\tconst request = await axios.delete(shareUrl + `/${id}`)\n\t\t\t\tif (!request?.data?.ocs) {\n\t\t\t\t\tthrow request\n\t\t\t\t}\n\t\t\t\temit('files_sharing:share:deleted', { id })\n\t\t\t\treturn true\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Error while deleting share', error)\n\t\t\t\tconst errorMessage = error?.response?.data?.ocs?.meta?.message\n\t\t\t\tOC.Notification.showTemporary(\n\t\t\t\t\terrorMessage ? t('files_sharing', 'Error deleting the share: {errorMessage}', { errorMessage }) : t('files_sharing', 'Error deleting the share'),\n\t\t\t\t\t{ type: 'error' }\n\t\t\t\t)\n\t\t\t\tthrow error\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Update a share\n\t\t *\n\t\t * @param {number} id share id\n\t\t * @param {object} properties key-value object of the properties to update\n\t\t */\n\t\tasync updateShare(id, properties) {\n\t\t\ttry {\n\t\t\t\tconst request = await axios.put(shareUrl + `/${id}`, properties)\n\t\t\t\temit('files_sharing:share:updated', { id })\n\t\t\t\tif (!request?.data?.ocs) {\n\t\t\t\t\tthrow request\n\t\t\t\t} else {\n\t\t\t\t\treturn request.data.ocs.data\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Error while updating share', error)\n\t\t\t\tif (error.response.status !== 400) {\n\t\t\t\t\tconst errorMessage = error?.response?.data?.ocs?.meta?.message\n\t\t\t\t\tOC.Notification.showTemporary(\n\t\t\t\t\t\terrorMessage ? t('files_sharing', 'Error updating the share: {errorMessage}', { errorMessage }) : t('files_sharing', 'Error updating the share'),\n\t\t\t\t\t\t{ type: 'error' }\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tconst message = error.response.data.ocs.meta.message\n\t\t\t\tthrow new Error(message)\n\t\t\t}\n\t\t},\n\t},\n}\n","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div class=\"sharing-search\">\n\t\t<label for=\"sharing-search-input\">{{ t('files_sharing', 'Search for share recipients') }}</label>\n\t\t<NcSelect ref=\"select\"\n\t\t\tid=\"sharing-search-input\"\n\t\t\tclass=\"sharing-search__input\"\n\t\t\t:disabled=\"!canReshare\"\n\t\t\t:loading=\"loading\"\n\t\t\t:filterable=\"false\"\n\t\t\t:placeholder=\"inputPlaceholder\"\n\t\t\t:clear-search-on-blur=\"() => false\"\n\t\t\t:user-select=\"true\"\n\t\t\t:options=\"options\"\n\t\t\tv-model=\"value\"\n\t\t\t@open=\"handleOpen\"\n\t\t\t@search=\"asyncFind\"\n\t\t\t@option:selected=\"addShare\">\n\t\t\t<template #no-options=\"{ search }\">\n\t\t\t\t{{ search ? noResultText : t('files_sharing', 'No recommendations. Start typing.') }}\n\t\t\t</template>\n\t\t</NcSelect>\n\t</div>\n</template>\n\n<script>\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { emit } from '@nextcloud/event-bus'\nimport axios from '@nextcloud/axios'\nimport debounce from 'debounce'\nimport NcSelect from '@nextcloud/vue/dist/Components/NcSelect.js'\n\nimport Config from '../services/ConfigService'\nimport GeneratePassword from '../utils/GeneratePassword'\nimport Share from '../models/Share'\nimport ShareRequests from '../mixins/ShareRequests'\nimport ShareTypes from '../mixins/ShareTypes'\n\nexport default {\n\tname: 'SharingInput',\n\n\tcomponents: {\n\t\tNcSelect,\n\t},\n\n\tmixins: [ShareTypes, ShareRequests],\n\n\tprops: {\n\t\tshares: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t\trequired: true,\n\t\t},\n\t\tlinkShares: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t\trequired: true,\n\t\t},\n\t\tfileInfo: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => {},\n\t\t\trequired: true,\n\t\t},\n\t\treshare: {\n\t\t\ttype: Share,\n\t\t\tdefault: null,\n\t\t},\n\t\tcanReshare: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tconfig: new Config(),\n\t\t\tloading: false,\n\t\t\tquery: '',\n\t\t\trecommendations: [],\n\t\t\tShareSearch: OCA.Sharing.ShareSearch.state,\n\t\t\tsuggestions: [],\n\t\t\tvalue: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Implement ShareSearch\n\t\t * allows external appas to inject new\n\t\t * results into the autocomplete dropdown\n\t\t * Used for the guests app\n\t\t *\n\t\t * @return {Array}\n\t\t */\n\t\texternalResults() {\n\t\t\treturn this.ShareSearch.results\n\t\t},\n\t\tinputPlaceholder() {\n\t\t\tconst allowRemoteSharing = this.config.isRemoteShareAllowed\n\n\t\t\tif (!this.canReshare) {\n\t\t\t\treturn t('files_sharing', 'Resharing is not allowed')\n\t\t\t}\n\t\t\t// We can always search with email addresses for users too\n\t\t\tif (!allowRemoteSharing) {\n\t\t\t\treturn t('files_sharing', 'Name or email …')\n\t\t\t}\n\n\t\t\treturn t('files_sharing', 'Name, email, or Federated Cloud ID …')\n\t\t},\n\n\t\tisValidQuery() {\n\t\t\treturn this.query && this.query.trim() !== '' && this.query.length > this.config.minSearchStringLength\n\t\t},\n\n\t\toptions() {\n\t\t\tif (this.isValidQuery) {\n\t\t\t\treturn this.suggestions\n\t\t\t}\n\t\t\treturn this.recommendations\n\t\t},\n\n\t\tnoResultText() {\n\t\t\tif (this.loading) {\n\t\t\t\treturn t('files_sharing', 'Searching …')\n\t\t\t}\n\t\t\treturn t('files_sharing', 'No elements found.')\n\t\t},\n\t},\n\n\tmounted() {\n\t\tthis.getRecommendations()\n\t},\n\n\tmethods: {\n\t\thandleOpen() {\n\t\t\t// Fix dropdown not opening when viewer is open, see https://github.com/nextcloud/viewer/pull/1319\n\t\t\temit('viewer:trapElements:changed', this.$refs.select.$el)\n\t\t},\n\n\t\tasync asyncFind(query) {\n\t\t\t// save current query to check if we display\n\t\t\t// recommendations or search results\n\t\t\tthis.query = query.trim()\n\t\t\tif (this.isValidQuery) {\n\t\t\t\t// start loading now to have proper ux feedback\n\t\t\t\t// during the debounce\n\t\t\t\tthis.loading = true\n\t\t\t\tawait this.debounceGetSuggestions(query)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Get suggestions\n\t\t *\n\t\t * @param {string} search the search query\n\t\t * @param {boolean} [lookup=false] search on lookup server\n\t\t */\n\t\tasync getSuggestions(search, lookup = false) {\n\t\t\tthis.loading = true\n\n\t\t\tif (OC.getCapabilities().files_sharing.sharee.query_lookup_default === true) {\n\t\t\t\tlookup = true\n\t\t\t}\n\n\t\t\tconst shareType = [\n\t\t\t\tthis.SHARE_TYPES.SHARE_TYPE_USER,\n\t\t\t\tthis.SHARE_TYPES.SHARE_TYPE_GROUP,\n\t\t\t\tthis.SHARE_TYPES.SHARE_TYPE_REMOTE,\n\t\t\t\tthis.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP,\n\t\t\t\tthis.SHARE_TYPES.SHARE_TYPE_CIRCLE,\n\t\t\t\tthis.SHARE_TYPES.SHARE_TYPE_ROOM,\n\t\t\t\tthis.SHARE_TYPES.SHARE_TYPE_GUEST,\n\t\t\t\tthis.SHARE_TYPES.SHARE_TYPE_DECK,\n\t\t\t\tthis.SHARE_TYPES.SHARE_TYPE_SCIENCEMESH,\n\t\t\t]\n\n\t\t\tif (OC.getCapabilities().files_sharing.public.enabled === true) {\n\t\t\t\tshareType.push(this.SHARE_TYPES.SHARE_TYPE_EMAIL)\n\t\t\t}\n\n\t\t\tlet request = null\n\t\t\ttry {\n\t\t\t\trequest = await axios.get(generateOcsUrl('apps/files_sharing/api/v1/sharees'), {\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tformat: 'json',\n\t\t\t\t\t\titemType: this.fileInfo.type === 'dir' ? 'folder' : 'file',\n\t\t\t\t\t\tsearch,\n\t\t\t\t\t\tlookup,\n\t\t\t\t\t\tperPage: this.config.maxAutocompleteResults,\n\t\t\t\t\t\tshareType,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Error fetching suggestions', error)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst data = request.data.ocs.data\n\t\t\tconst exact = request.data.ocs.data.exact\n\t\t\tdata.exact = [] // removing exact from general results\n\n\t\t\t// flatten array of arrays\n\t\t\tconst rawExactSuggestions = Object.values(exact).reduce((arr, elem) => arr.concat(elem), [])\n\t\t\tconst rawSuggestions = Object.values(data).reduce((arr, elem) => arr.concat(elem), [])\n\n\t\t\t// remove invalid data and format to user-select layout\n\t\t\tconst exactSuggestions = this.filterOutExistingShares(rawExactSuggestions)\n\t\t\t\t.map(share => this.formatForMultiselect(share))\n\t\t\t\t// sort by type so we can get user&groups first...\n\t\t\t\t.sort((a, b) => a.shareType - b.shareType)\n\t\t\tconst suggestions = this.filterOutExistingShares(rawSuggestions)\n\t\t\t\t.map(share => this.formatForMultiselect(share))\n\t\t\t\t// sort by type so we can get user&groups first...\n\t\t\t\t.sort((a, b) => a.shareType - b.shareType)\n\n\t\t\t// lookup clickable entry\n\t\t\t// show if enabled and not already requested\n\t\t\tconst lookupEntry = []\n\t\t\tif (data.lookupEnabled && !lookup) {\n\t\t\t\tlookupEntry.push({\n\t\t\t\t\tid: 'global-lookup',\n\t\t\t\t\tisNoUser: true,\n\t\t\t\t\tdisplayName: t('files_sharing', 'Search globally'),\n\t\t\t\t\tlookup: true,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// if there is a condition specified, filter it\n\t\t\tconst externalResults = this.externalResults.filter(result => !result.condition || result.condition(this))\n\n\t\t\tconst allSuggestions = exactSuggestions.concat(suggestions).concat(externalResults).concat(lookupEntry)\n\n\t\t\t// Count occurrences of display names in order to provide a distinguishable description if needed\n\t\t\tconst nameCounts = allSuggestions.reduce((nameCounts, result) => {\n\t\t\t\tif (!result.displayName) {\n\t\t\t\t\treturn nameCounts\n\t\t\t\t}\n\t\t\t\tif (!nameCounts[result.displayName]) {\n\t\t\t\t\tnameCounts[result.displayName] = 0\n\t\t\t\t}\n\t\t\t\tnameCounts[result.displayName]++\n\t\t\t\treturn nameCounts\n\t\t\t}, {})\n\n\t\t\tthis.suggestions = allSuggestions.map(item => {\n\t\t\t\t// Make sure that items with duplicate displayName get the shareWith applied as a description\n\t\t\t\tif (nameCounts[item.displayName] > 1 && !item.desc) {\n\t\t\t\t\treturn { ...item, desc: item.shareWithDisplayNameUnique }\n\t\t\t\t}\n\t\t\t\treturn item\n\t\t\t})\n\n\t\t\tthis.loading = false\n\t\t\tconsole.info('suggestions', this.suggestions)\n\t\t},\n\n\t\t/**\n\t\t * Debounce getSuggestions\n\t\t *\n\t\t * @param {...*} args the arguments\n\t\t */\n\t\tdebounceGetSuggestions: debounce(function(...args) {\n\t\t\tthis.getSuggestions(...args)\n\t\t}, 300),\n\n\t\t/**\n\t\t * Get the sharing recommendations\n\t\t */\n\t\tasync getRecommendations() {\n\t\t\tthis.loading = true\n\n\t\t\tlet request = null\n\t\t\ttry {\n\t\t\t\trequest = await axios.get(generateOcsUrl('apps/files_sharing/api/v1/sharees_recommended'), {\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tformat: 'json',\n\t\t\t\t\t\titemType: this.fileInfo.type,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Error fetching recommendations', error)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Add external results from the OCA.Sharing.ShareSearch api\n\t\t\tconst externalResults = this.externalResults.filter(result => !result.condition || result.condition(this))\n\n\t\t\t// flatten array of arrays\n\t\t\tconst rawRecommendations = Object.values(request.data.ocs.data.exact)\n\t\t\t\t.reduce((arr, elem) => arr.concat(elem), [])\n\n\t\t\t// remove invalid data and format to user-select layout\n\t\t\tthis.recommendations = this.filterOutExistingShares(rawRecommendations)\n\t\t\t\t.map(share => this.formatForMultiselect(share))\n\t\t\t\t.concat(externalResults)\n\n\t\t\tthis.loading = false\n\t\t\tconsole.info('recommendations', this.recommendations)\n\t\t},\n\n\t\t/**\n\t\t * Filter out existing shares from\n\t\t * the provided shares search results\n\t\t *\n\t\t * @param {object[]} shares the array of shares object\n\t\t * @return {object[]}\n\t\t */\n\t\tfilterOutExistingShares(shares) {\n\t\t\treturn shares.reduce((arr, share) => {\n\t\t\t\t// only check proper objects\n\t\t\t\tif (typeof share !== 'object') {\n\t\t\t\t\treturn arr\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tif (share.value.shareType === this.SHARE_TYPES.SHARE_TYPE_USER) {\n\t\t\t\t\t\t// filter out current user\n\t\t\t\t\t\tif (share.value.shareWith === getCurrentUser().uid) {\n\t\t\t\t\t\t\treturn arr\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// filter out the owner of the share\n\t\t\t\t\t\tif (this.reshare && share.value.shareWith === this.reshare.owner) {\n\t\t\t\t\t\t\treturn arr\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// filter out existing mail shares\n\t\t\t\t\tif (share.value.shareType === this.SHARE_TYPES.SHARE_TYPE_EMAIL) {\n\t\t\t\t\t\tconst emails = this.linkShares.map(elem => elem.shareWith)\n\t\t\t\t\t\tif (emails.indexOf(share.value.shareWith.trim()) !== -1) {\n\t\t\t\t\t\t\treturn arr\n\t\t\t\t\t\t}\n\t\t\t\t\t} else { // filter out existing shares\n\t\t\t\t\t\t// creating an object of uid => type\n\t\t\t\t\t\tconst sharesObj = this.shares.reduce((obj, elem) => {\n\t\t\t\t\t\t\tobj[elem.shareWith] = elem.type\n\t\t\t\t\t\t\treturn obj\n\t\t\t\t\t\t}, {})\n\n\t\t\t\t\t\t// if shareWith is the same and the share type too, ignore it\n\t\t\t\t\t\tconst key = share.value.shareWith.trim()\n\t\t\t\t\t\tif (key in sharesObj\n\t\t\t\t\t\t\t&& sharesObj[key] === share.value.shareType) {\n\t\t\t\t\t\t\treturn arr\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// ALL GOOD\n\t\t\t\t\t// let's add the suggestion\n\t\t\t\t\tarr.push(share)\n\t\t\t\t} catch {\n\t\t\t\t\treturn arr\n\t\t\t\t}\n\t\t\t\treturn arr\n\t\t\t}, [])\n\t\t},\n\n\t\t/**\n\t\t * Get the icon based on the share type\n\t\t *\n\t\t * @param {number} type the share type\n\t\t * @return {string} the icon class\n\t\t */\n\t\tshareTypeToIcon(type) {\n\t\t\tswitch (type) {\n\t\t\tcase this.SHARE_TYPES.SHARE_TYPE_GUEST:\n\t\t\t\t// default is a user, other icons are here to differentiate\n\t\t\t\t// themselves from it, so let's not display the user icon\n\t\t\t\t// case this.SHARE_TYPES.SHARE_TYPE_REMOTE:\n\t\t\t\t// case this.SHARE_TYPES.SHARE_TYPE_USER:\n\t\t\t\treturn {\n\t\t\t\t\ticon: 'icon-user',\n\t\t\t\t\ticonTitle: t('files_sharing', 'Guest'),\n\t\t\t\t}\n\t\t\tcase this.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP:\n\t\t\tcase this.SHARE_TYPES.SHARE_TYPE_GROUP:\n\t\t\t\treturn {\n\t\t\t\t\ticon: 'icon-group',\n\t\t\t\t\ticonTitle: t('files_sharing', 'Group'),\n\t\t\t\t}\n\t\t\tcase this.SHARE_TYPES.SHARE_TYPE_EMAIL:\n\t\t\t\treturn {\n\t\t\t\t\ticon: 'icon-mail',\n\t\t\t\t\ticonTitle: t('files_sharing', 'Email'),\n\t\t\t\t}\n\t\t\tcase this.SHARE_TYPES.SHARE_TYPE_CIRCLE:\n\t\t\t\treturn {\n\t\t\t\t\ticon: 'icon-circle',\n\t\t\t\t\ticonTitle: t('files_sharing', 'Circle'),\n\t\t\t\t}\n\t\t\tcase this.SHARE_TYPES.SHARE_TYPE_ROOM:\n\t\t\t\treturn {\n\t\t\t\t\ticon: 'icon-room',\n\t\t\t\t\ticonTitle: t('files_sharing', 'Talk conversation'),\n\t\t\t\t}\n\t\t\tcase this.SHARE_TYPES.SHARE_TYPE_DECK:\n\t\t\t\treturn {\n\t\t\t\t\ticon: 'icon-deck',\n\t\t\t\t\ticonTitle: t('files_sharing', 'Deck board'),\n\t\t\t\t}\n\t\t\tcase this.SHARE_TYPES.SHARE_TYPE_SCIENCEMESH:\n\t\t\t\treturn {\n\t\t\t\t\ticon: 'icon-sciencemesh',\n\t\t\t\t\ticonTitle: t('files_sharing', 'Science Mesh'),\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn {}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Format shares for the multiselect options\n\t\t *\n\t\t * @param {object} result select entry item\n\t\t * @return {object}\n\t\t */\n\t\tformatForMultiselect(result) {\n\t\t\tlet subtitle\n\t\t\tif (result.value.shareType === this.SHARE_TYPES.SHARE_TYPE_USER && this.config.shouldAlwaysShowUnique) {\n\t\t\t\tsubtitle = result.shareWithDisplayNameUnique ?? ''\n\t\t\t} else if ((result.value.shareType === this.SHARE_TYPES.SHARE_TYPE_REMOTE\n\t\t\t\t\t|| result.value.shareType === this.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP\n\t\t\t) && result.value.server) {\n\t\t\t\tsubtitle = t('files_sharing', 'on {server}', { server: result.value.server })\n\t\t\t} else if (result.value.shareType === this.SHARE_TYPES.SHARE_TYPE_EMAIL) {\n\t\t\t\tsubtitle = result.value.shareWith\n\t\t\t} else {\n\t\t\t\tsubtitle = result.shareWithDescription ?? ''\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tid: `${result.value.shareType}-${result.value.shareWith}`,\n\t\t\t\tshareWith: result.value.shareWith,\n\t\t\t\tshareType: result.value.shareType,\n\t\t\t\tuser: result.uuid || result.value.shareWith,\n\t\t\t\tisNoUser: result.value.shareType !== this.SHARE_TYPES.SHARE_TYPE_USER,\n\t\t\t\tdisplayName: result.name || result.label,\n\t\t\t\tsubtitle,\n\t\t\t\tshareWithDisplayNameUnique: result.shareWithDisplayNameUnique || '',\n\t\t\t\t...this.shareTypeToIcon(result.value.shareType),\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Process the new share request\n\t\t *\n\t\t * @param {object} value the multiselect option\n\t\t */\n\t\tasync addShare(value) {\n\t\t\t// Clear the displayed selection\n\t\t\tthis.value = null\n\n\t\t\tif (value.lookup) {\n\t\t\t\tawait this.getSuggestions(this.query, true)\n\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t// open the dropdown again\n\t\t\t\t\tthis.$refs.select.$children[0].open = true\n\t\t\t\t})\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\t// handle externalResults from OCA.Sharing.ShareSearch\n\t\t\tif (value.handler) {\n\t\t\t\tconst share = await value.handler(this)\n\t\t\t\tthis.$emit('add:share', new Share(share))\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\tthis.loading = true\n\t\t\tconsole.debug('Adding a new share from the input for', value)\n\t\t\ttry {\n\t\t\t\tlet password = null\n\n\t\t\t\tif (this.config.enforcePasswordForPublicLink\n\t\t\t\t\t&& value.shareType === this.SHARE_TYPES.SHARE_TYPE_EMAIL) {\n\t\t\t\t\tpassword = await GeneratePassword()\n\t\t\t\t}\n\n\t\t\t\tconst path = (this.fileInfo.path + '/' + this.fileInfo.name).replace('//', '/')\n\t\t\t\tconst share = await this.createShare({\n\t\t\t\t\tpath,\n\t\t\t\t\tshareType: value.shareType,\n\t\t\t\t\tshareWith: value.shareWith,\n\t\t\t\t\tpassword,\n\t\t\t\t\tpermissions: this.fileInfo.sharePermissions & OC.getCapabilities().files_sharing.default_permissions,\n\t\t\t\t\tattributes: JSON.stringify(this.fileInfo.shareAttributes),\n\t\t\t\t})\n\n\t\t\t\t// If we had a password, we need to show it to the user as it was generated\n\t\t\t\tif (password) {\n\t\t\t\t\tshare.newPassword = password\n\t\t\t\t\t// Wait for the newly added share\n\t\t\t\t\tconst component = await new Promise(resolve => {\n\t\t\t\t\t\tthis.$emit('add:share', share, resolve)\n\t\t\t\t\t})\n\n\t\t\t\t\t// open the menu on the\n\t\t\t\t\t// freshly created share component\n\t\t\t\t\tcomponent.open = true\n\t\t\t\t} else {\n\t\t\t\t\t// Else we just add it normally\n\t\t\t\t\tthis.$emit('add:share', share)\n\t\t\t\t}\n\n\t\t\t\tawait this.getRecommendations()\n\t\t\t} catch (error) {\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t// open the dropdown again on error\n\t\t\t\t\tthis.$refs.select.$children[0].open = true\n\t\t\t\t})\n\t\t\t\tthis.query = value.shareWith\n\t\t\t\tconsole.error('Error while adding new share', error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\">\n.sharing-search {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin-bottom: 4px;\n\n\tlabel[for=\"sharing-search-input\"] {\n\t\tmargin-bottom: 2px;\n\t}\n\n\t&__input {\n\t\twidth: 100%;\n\t\tmargin: 10px 0;\n\t}\n}\n\n.vs__dropdown-menu {\n\t// properly style the lookup entry\n\tspan[lookup] {\n\t\t.avatardiv {\n\t\t\tbackground-image: var(--icon-search-white);\n\t\t\tbackground-repeat: no-repeat;\n\t\t\tbackground-position: center;\n\t\t\tbackground-color: var(--color-text-maxcontrast) !important;\n\t\t\tdiv {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingInput.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!./SharingInput.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingInput.vue?vue&type=style&index=0&id=43c265ae&prod&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingInput.vue?vue&type=style&index=0&id=43c265ae&prod&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SharingInput.vue?vue&type=template&id=43c265ae&\"\nimport script from \"./SharingInput.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingInput.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SharingInput.vue?vue&type=style&index=0&id=43c265ae&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"sharing-search\"},[_c('label',{attrs:{\"for\":\"sharing-search-input\"}},[_vm._v(_vm._s(_vm.t('files_sharing', 'Search for share recipients')))]),_vm._v(\" \"),_c('NcSelect',{ref:\"select\",staticClass:\"sharing-search__input\",attrs:{\"id\":\"sharing-search-input\",\"disabled\":!_vm.canReshare,\"loading\":_vm.loading,\"filterable\":false,\"placeholder\":_vm.inputPlaceholder,\"clear-search-on-blur\":() => false,\"user-select\":true,\"options\":_vm.options},on:{\"open\":_vm.handleOpen,\"search\":_vm.asyncFind,\"option:selected\":_vm.addShare},scopedSlots:_vm._u([{key:\"no-options\",fn:function({ search }){return [_vm._v(\"\\n\\t\\t\\t\"+_vm._s(search ? _vm.noResultText : _vm.t('files_sharing', 'No recommendations. Start typing.'))+\"\\n\\t\\t\")]}}]),model:{value:(_vm.value),callback:function ($$v) {_vm.value=$$v},expression:\"value\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author Gary Kim <gary@garykim.dev>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.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\nimport { showError, showSuccess } from '@nextcloud/dialogs'\nimport { getCurrentUser } from '@nextcloud/auth'\n// eslint-disable-next-line import/no-unresolved, node/no-missing-import\nimport PQueue from 'p-queue'\nimport debounce from 'debounce'\n\nimport Share from '../models/Share.js'\nimport SharesRequests from './ShareRequests.js'\nimport ShareTypes from './ShareTypes.js'\nimport Config from '../services/ConfigService.js'\n\nexport default {\n\tmixins: [SharesRequests, ShareTypes],\n\n\tprops: {\n\t\tfileInfo: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => {},\n\t\t\trequired: true,\n\t\t},\n\t\tshare: {\n\t\t\ttype: Share,\n\t\t\tdefault: null,\n\t\t},\n\t\tisUnique: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tconfig: new Config(),\n\n\t\t\t// errors helpers\n\t\t\terrors: {},\n\n\t\t\t// component status toggles\n\t\t\tloading: false,\n\t\t\tsaving: false,\n\t\t\topen: false,\n\n\t\t\t// concurrency management queue\n\t\t\t// we want one queue per share\n\t\t\tupdateQueue: new PQueue({ concurrency: 1 }),\n\n\t\t\t/**\n\t\t\t * ! This allow vue to make the Share class state reactive\n\t\t\t * ! do not remove it ot you'll lose all reactivity here\n\t\t\t */\n\t\t\treactiveState: this.share?.state,\n\t\t}\n\t},\n\n\tcomputed: {\n\n\t\t/**\n\t\t * Does the current share have a note\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\thasNote: {\n\t\t\tget() {\n\t\t\t\treturn this.share.note !== ''\n\t\t\t},\n\t\t\tset(enabled) {\n\t\t\t\tthis.share.note = enabled\n\t\t\t\t\t? null // enabled but user did not changed the content yet\n\t\t\t\t\t: '' // empty = no note = disabled\n\t\t\t},\n\t\t},\n\n\t\tdateTomorrow() {\n\t\t\treturn new Date(new Date().setDate(new Date().getDate() + 1))\n\t\t},\n\n\t\t// Datepicker language\n\t\tlang() {\n\t\t\tconst weekdaysShort = window.dayNamesShort\n\t\t\t\t? window.dayNamesShort // provided by nextcloud\n\t\t\t\t: ['Sun.', 'Mon.', 'Tue.', 'Wed.', 'Thu.', 'Fri.', 'Sat.']\n\t\t\tconst monthsShort = window.monthNamesShort\n\t\t\t\t? window.monthNamesShort // provided by nextcloud\n\t\t\t\t: ['Jan.', 'Feb.', 'Mar.', 'Apr.', 'May.', 'Jun.', 'Jul.', 'Aug.', 'Sep.', 'Oct.', 'Nov.', 'Dec.']\n\t\t\tconst firstDayOfWeek = window.firstDay ? window.firstDay : 0\n\n\t\t\treturn {\n\t\t\t\tformatLocale: {\n\t\t\t\t\tfirstDayOfWeek,\n\t\t\t\t\tmonthsShort,\n\t\t\t\t\tweekdaysMin: weekdaysShort,\n\t\t\t\t\tweekdaysShort,\n\t\t\t\t},\n\t\t\t\tmonthFormat: 'MMM',\n\t\t\t}\n\t\t},\n\n\t\tisShareOwner() {\n\t\t\treturn this.share && this.share.owner === getCurrentUser().uid\n\t\t},\n\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Check if a share is valid before\n\t\t * firing the request\n\t\t *\n\t\t * @param {Share} share the share to check\n\t\t * @return {boolean}\n\t\t */\n\t\tcheckShare(share) {\n\t\t\tif (share.password) {\n\t\t\t\tif (typeof share.password !== 'string' || share.password.trim() === '') {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (share.expirationDate) {\n\t\t\t\tconst date = share.expirationDate\n\t\t\t\tif (!date.isValid()) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\n\t\t/**\n\t\t * @param {string} date a date with YYYY-MM-DD format\n\t\t * @return {Date} date\n\t\t */\n\t\tparseDateString(date) {\n\t\t\tif (!date) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst regex = /([0-9]{4}-[0-9]{2}-[0-9]{2})/i\n\t\t\treturn new Date(date.match(regex)?.pop())\n\t\t},\n\n\t\t/**\n\t\t * @param {Date} date\n\t\t * @return {string} date a date with YYYY-MM-DD format\n\t\t */\n\t\tformatDateToString(date) {\n\t\t\t// Force utc time. Drop time information to be timezone-less\n\t\t\tconst utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()))\n\t\t\t// Format to YYYY-MM-DD\n\t\t\treturn utcDate.toISOString().split('T')[0]\n\t\t},\n\n\t\t/**\n\t\t * Save given value to expireDate and trigger queueUpdate\n\t\t *\n\t\t * @param {Date} date\n\t\t */\n\t\tonExpirationChange(date) {\n\t\t\tthis.share.expireDate = this.formatDateToString(date)\n\t\t\tthis.queueUpdate('expireDate')\n\t\t},\n\n\t\t/**\n\t\t * Uncheck expire date\n\t\t * We need this method because @update:checked\n\t\t * is ran simultaneously as @uncheck, so\n\t\t * so we cannot ensure data is up-to-date\n\t\t */\n\t\tonExpirationDisable() {\n\t\t\tthis.share.expireDate = ''\n\t\t\tthis.queueUpdate('expireDate')\n\t\t},\n\n\t\t/**\n\t\t * Note changed, let's save it to a different key\n\t\t *\n\t\t * @param {string} note the share note\n\t\t */\n\t\tonNoteChange(note) {\n\t\t\tthis.$set(this.share, 'newNote', note.trim())\n\t\t},\n\n\t\t/**\n\t\t * When the note change, we trim, save and dispatch\n\t\t *\n\t\t */\n\t\tonNoteSubmit() {\n\t\t\tif (this.share.newNote) {\n\t\t\t\tthis.share.note = this.share.newNote\n\t\t\t\tthis.$delete(this.share, 'newNote')\n\t\t\t\tthis.queueUpdate('note')\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Delete share button handler\n\t\t */\n\t\tasync onDelete() {\n\t\t\ttry {\n\t\t\t\tthis.loading = true\n\t\t\t\tthis.open = false\n\t\t\t\tawait this.deleteShare(this.share.id)\n\t\t\t\tconsole.debug('Share deleted', this.share.id)\n\t\t\t\tconst message = this.share.itemType === 'file'\n\t\t\t\t\t? t('files_sharing', 'File \"{path}\" has been unshared', { path: this.share.path })\n\t\t\t\t\t: t('files_sharing', 'Folder \"{path}\" has been unshared', { path: this.share.path })\n\t\t\t\tshowSuccess(message)\n\t\t\t\tthis.$emit('remove:share', this.share)\n\t\t\t} catch (error) {\n\t\t\t\t// re-open menu if error\n\t\t\t\tthis.open = true\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Send an update of the share to the queue\n\t\t *\n\t\t * @param {Array<string>} propertyNames the properties to sync\n\t\t */\n\t\tqueueUpdate(...propertyNames) {\n\t\t\tif (propertyNames.length === 0) {\n\t\t\t\t// Nothing to update\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (this.share.id) {\n\t\t\t\tconst properties = {}\n\t\t\t\t// force value to string because that is what our\n\t\t\t\t// share api controller accepts\n\t\t\t\tpropertyNames.forEach(name => {\n\t\t\t\t\tif ((typeof this.share[name]) === 'object') {\n\t\t\t\t\t\tproperties[name] = JSON.stringify(this.share[name])\n\t\t\t\t\t} else {\n\t\t\t\t\t\tproperties[name] = this.share[name].toString()\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\tthis.updateQueue.add(async () => {\n\t\t\t\t\tthis.saving = true\n\t\t\t\t\tthis.errors = {}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst updatedShare = await this.updateShare(this.share.id, properties)\n\n\t\t\t\t\t\tif (propertyNames.indexOf('password') >= 0) {\n\t\t\t\t\t\t\t// reset password state after sync\n\t\t\t\t\t\t\tthis.$delete(this.share, 'newPassword')\n\n\t\t\t\t\t\t\t// updates password expiration time after sync\n\t\t\t\t\t\t\tthis.share.passwordExpirationTime = updatedShare.password_expiration_time\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// clear any previous errors\n\t\t\t\t\t\tthis.$delete(this.errors, propertyNames[0])\n\t\t\t\t\t\tshowSuccess(t('files_sharing', 'Share {propertyName} saved', { propertyName: propertyNames[0] }))\n\t\t\t\t\t} catch ({ message }) {\n\t\t\t\t\t\tif (message && message !== '') {\n\t\t\t\t\t\t\tthis.onSyncError(propertyNames[0], message)\n\t\t\t\t\t\t\tshowError(t('files_sharing', message))\n\t\t\t\t\t\t}\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tthis.saving = false\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// This share does not exists on the server yet\n\t\t\tconsole.debug('Updated local share', this.share)\n\t\t},\n\n\t\t/**\n\t\t * Manage sync errors\n\t\t *\n\t\t * @param {string} property the errored property, e.g. 'password'\n\t\t * @param {string} message the error message\n\t\t */\n\t\tonSyncError(property, message) {\n\t\t\t// re-open menu if closed\n\t\t\tthis.open = true\n\t\t\tswitch (property) {\n\t\t\tcase 'password':\n\t\t\tcase 'pending':\n\t\t\tcase 'expireDate':\n\t\t\tcase 'label':\n\t\t\tcase 'note': {\n\t\t\t\t// show error\n\t\t\t\tthis.$set(this.errors, property, message)\n\n\t\t\t\tlet propertyEl = this.$refs[property]\n\t\t\t\tif (propertyEl) {\n\t\t\t\t\tif (propertyEl.$el) {\n\t\t\t\t\t\tpropertyEl = propertyEl.$el\n\t\t\t\t\t}\n\t\t\t\t\t// focus if there is a focusable action element\n\t\t\t\t\tconst focusable = propertyEl.querySelector('.focusable')\n\t\t\t\t\tif (focusable) {\n\t\t\t\t\t\tfocusable.focus()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'sendPasswordByTalk': {\n\t\t\t\t// show error\n\t\t\t\tthis.$set(this.errors, property, message)\n\n\t\t\t\t// Restore previous state\n\t\t\t\tthis.share.sendPasswordByTalk = !this.share.sendPasswordByTalk\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Debounce queueUpdate to avoid requests spamming\n\t\t * more importantly for text data\n\t\t *\n\t\t * @param {string} property the property to sync\n\t\t */\n\t\tdebounceQueueUpdate: debounce(function(property) {\n\t\t\tthis.queueUpdate(property)\n\t\t}, 500),\n\t},\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntryInherited.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!./SharingEntryInherited.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<SharingEntrySimple :key=\"share.id\"\n\t\tclass=\"sharing-entry__inherited\"\n\t\t:title=\"share.shareWithDisplayName\">\n\t\t<template #avatar>\n\t\t\t<NcAvatar :user=\"share.shareWith\"\n\t\t\t\t:display-name=\"share.shareWithDisplayName\"\n\t\t\t\tclass=\"sharing-entry__avatar\" />\n\t\t</template>\n\t\t<NcActionText icon=\"icon-user\">\n\t\t\t{{ t('files_sharing', 'Added by {initiator}', { initiator: share.ownerDisplayName }) }}\n\t\t</NcActionText>\n\t\t<NcActionLink v-if=\"share.viaPath && share.viaFileid\"\n\t\t\ticon=\"icon-folder\"\n\t\t\t:href=\"viaFileTargetUrl\">\n\t\t\t{{ t('files_sharing', 'Via “{folder}”', {folder: viaFolderName} ) }}\n\t\t</NcActionLink>\n\t\t<NcActionButton v-if=\"share.canDelete\"\n\t\t\ticon=\"icon-close\"\n\t\t\t@click.prevent=\"onDelete\">\n\t\t\t{{ t('files_sharing', 'Unshare') }}\n\t\t</NcActionButton>\n\t</SharingEntrySimple>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport { basename } from '@nextcloud/paths'\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar'\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton'\nimport NcActionLink from '@nextcloud/vue/dist/Components/NcActionLink'\nimport NcActionText from '@nextcloud/vue/dist/Components/NcActionText'\n\n// eslint-disable-next-line no-unused-vars\nimport Share from '../models/Share'\nimport SharesMixin from '../mixins/SharesMixin'\nimport SharingEntrySimple from '../components/SharingEntrySimple'\n\nexport default {\n\tname: 'SharingEntryInherited',\n\n\tcomponents: {\n\t\tNcActionButton,\n\t\tNcActionLink,\n\t\tNcActionText,\n\t\tNcAvatar,\n\t\tSharingEntrySimple,\n\t},\n\n\tmixins: [SharesMixin],\n\n\tprops: {\n\t\tshare: {\n\t\t\ttype: Share,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tviaFileTargetUrl() {\n\t\t\treturn generateUrl('/f/{fileid}', {\n\t\t\t\tfileid: this.share.viaFileid,\n\t\t\t})\n\t\t},\n\n\t\tviaFolderName() {\n\t\t\treturn basename(this.share.viaPath)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.sharing-entry {\n\tdisplay: flex;\n\talign-items: center;\n\theight: 44px;\n\t&__desc {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tjustify-content: space-between;\n\t\tpadding: 8px;\n\t\tline-height: 1.2em;\n\t\tp {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n\t&__actions {\n\t\tmargin-left: auto;\n\t}\n}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntryInherited.vue?vue&type=style&index=0&id=23251e4a&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntryInherited.vue?vue&type=style&index=0&id=23251e4a&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SharingEntryInherited.vue?vue&type=template&id=23251e4a&scoped=true&\"\nimport script from \"./SharingEntryInherited.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingEntryInherited.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SharingEntryInherited.vue?vue&type=style&index=0&id=23251e4a&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"23251e4a\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('SharingEntrySimple',{key:_vm.share.id,staticClass:\"sharing-entry__inherited\",attrs:{\"title\":_vm.share.shareWithDisplayName},scopedSlots:_vm._u([{key:\"avatar\",fn:function(){return [_c('NcAvatar',{staticClass:\"sharing-entry__avatar\",attrs:{\"user\":_vm.share.shareWith,\"display-name\":_vm.share.shareWithDisplayName}})]},proxy:true}])},[_vm._v(\" \"),_c('NcActionText',{attrs:{\"icon\":\"icon-user\"}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Added by {initiator}', { initiator: _vm.share.ownerDisplayName }))+\"\\n\\t\")]),_vm._v(\" \"),(_vm.share.viaPath && _vm.share.viaFileid)?_c('NcActionLink',{attrs:{\"icon\":\"icon-folder\",\"href\":_vm.viaFileTargetUrl}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Via “{folder}”', {folder: _vm.viaFolderName} ))+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.share.canDelete)?_c('NcActionButton',{attrs:{\"icon\":\"icon-close\"},on:{\"click\":function($event){$event.preventDefault();return _vm.onDelete.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Unshare'))+\"\\n\\t\")]):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<ul id=\"sharing-inherited-shares\">\n\t\t<!-- Main collapsible entry -->\n\t\t<SharingEntrySimple class=\"sharing-entry__inherited\"\n\t\t\t:title=\"mainTitle\"\n\t\t\t:subtitle=\"subTitle\"\n\t\t\t:aria-expanded=\"showInheritedShares\">\n\t\t\t<template #avatar>\n\t\t\t\t<div class=\"avatar-shared icon-more-white\" />\n\t\t\t</template>\n\t\t\t<NcActionButton :icon=\"showInheritedSharesIcon\"\n\t\t\t\t:aria-label=\"toggleTooltip\"\n\t\t\t\t:title=\"toggleTooltip\"\n\t\t\t\t@click.prevent.stop=\"toggleInheritedShares\" />\n\t\t</SharingEntrySimple>\n\n\t\t<!-- Inherited shares list -->\n\t\t<SharingEntryInherited v-for=\"share in shares\"\n\t\t\t:key=\"share.id\"\n\t\t\t:file-info=\"fileInfo\"\n\t\t\t:share=\"share\"\n\t\t\t@remove:share=\"removeShare\" />\n\t</ul>\n</template>\n\n<script>\nimport { generateOcsUrl } from '@nextcloud/router'\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton'\nimport axios from '@nextcloud/axios'\n\nimport Share from '../models/Share'\nimport SharingEntryInherited from '../components/SharingEntryInherited'\nimport SharingEntrySimple from '../components/SharingEntrySimple'\n\nexport default {\n\tname: 'SharingInherited',\n\n\tcomponents: {\n\t\tNcActionButton,\n\t\tSharingEntryInherited,\n\t\tSharingEntrySimple,\n\t},\n\n\tprops: {\n\t\tfileInfo: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => {},\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloaded: false,\n\t\t\tloading: false,\n\t\t\tshowInheritedShares: false,\n\t\t\tshares: [],\n\t\t}\n\t},\n\tcomputed: {\n\t\tshowInheritedSharesIcon() {\n\t\t\tif (this.loading) {\n\t\t\t\treturn 'icon-loading-small'\n\t\t\t}\n\t\t\tif (this.showInheritedShares) {\n\t\t\t\treturn 'icon-triangle-n'\n\t\t\t}\n\t\t\treturn 'icon-triangle-s'\n\t\t},\n\t\tmainTitle() {\n\t\t\treturn t('files_sharing', 'Others with access')\n\t\t},\n\t\tsubTitle() {\n\t\t\treturn (this.showInheritedShares && this.shares.length === 0)\n\t\t\t\t? t('files_sharing', 'No other users with access found')\n\t\t\t\t: ''\n\t\t},\n\t\ttoggleTooltip() {\n\t\t\treturn this.fileInfo.type === 'dir'\n\t\t\t\t? t('files_sharing', 'Toggle list of others with access to this directory')\n\t\t\t\t: t('files_sharing', 'Toggle list of others with access to this file')\n\t\t},\n\t\tfullPath() {\n\t\t\tconst path = `${this.fileInfo.path}/${this.fileInfo.name}`\n\t\t\treturn path.replace('//', '/')\n\t\t},\n\t},\n\twatch: {\n\t\tfileInfo() {\n\t\t\tthis.resetState()\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Toggle the list view and fetch/reset the state\n\t\t */\n\t\ttoggleInheritedShares() {\n\t\t\tthis.showInheritedShares = !this.showInheritedShares\n\t\t\tif (this.showInheritedShares) {\n\t\t\t\tthis.fetchInheritedShares()\n\t\t\t} else {\n\t\t\t\tthis.resetState()\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Fetch the Inherited Shares array\n\t\t */\n\t\tasync fetchInheritedShares() {\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tconst url = generateOcsUrl('apps/files_sharing/api/v1/shares/inherited?format=json&path={path}', { path: this.fullPath })\n\t\t\t\tconst shares = await axios.get(url)\n\t\t\t\tthis.shares = shares.data.ocs.data\n\t\t\t\t\t.map(share => new Share(share))\n\t\t\t\t\t.sort((a, b) => b.createdTime - a.createdTime)\n\t\t\t\tconsole.info(this.shares)\n\t\t\t\tthis.loaded = true\n\t\t\t} catch (error) {\n\t\t\t\tOC.Notification.showTemporary(t('files_sharing', 'Unable to fetch inherited shares'), { type: 'error' })\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Reset current component state\n\t\t */\n\t\tresetState() {\n\t\t\tthis.loaded = false\n\t\t\tthis.loading = false\n\t\t\tthis.showInheritedShares = false\n\t\t\tthis.shares = []\n\t\t},\n\t\t/**\n\t\t * Remove a share from the shares list\n\t\t *\n\t\t * @param {Share} share the share to remove\n\t\t */\n\t\tremoveShare(share) {\n\t\t\tconst index = this.shares.findIndex(item => item === share)\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.shares.splice(index, 1)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.sharing-entry__inherited {\n\t.avatar-shared {\n\t\twidth: 32px;\n\t\theight: 32px;\n\t\tline-height: 32px;\n\t\tfont-size: 18px;\n\t\tbackground-color: var(--color-text-maxcontrast);\n\t\tborder-radius: 50%;\n\t\tflex-shrink: 0;\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingInherited.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!./SharingInherited.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingInherited.vue?vue&type=style&index=0&id=3462b966&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingInherited.vue?vue&type=style&index=0&id=3462b966&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SharingInherited.vue?vue&type=template&id=3462b966&scoped=true&\"\nimport script from \"./SharingInherited.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingInherited.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SharingInherited.vue?vue&type=style&index=0&id=3462b966&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3462b966\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('ul',{attrs:{\"id\":\"sharing-inherited-shares\"}},[_c('SharingEntrySimple',{staticClass:\"sharing-entry__inherited\",attrs:{\"title\":_vm.mainTitle,\"subtitle\":_vm.subTitle,\"aria-expanded\":_vm.showInheritedShares},scopedSlots:_vm._u([{key:\"avatar\",fn:function(){return [_c('div',{staticClass:\"avatar-shared icon-more-white\"})]},proxy:true}])},[_vm._v(\" \"),_c('NcActionButton',{attrs:{\"icon\":_vm.showInheritedSharesIcon,\"aria-label\":_vm.toggleTooltip,\"title\":_vm.toggleTooltip},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.toggleInheritedShares.apply(null, arguments)}}})],1),_vm._v(\" \"),_vm._l((_vm.shares),function(share){return _c('SharingEntryInherited',{key:share.id,attrs:{\"file-info\":_vm.fileInfo,\"share\":share},on:{\"remove:share\":_vm.removeShare}})})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ExternalShareAction.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!./ExternalShareAction.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<Component :is=\"data.is\"\n\t\tv-bind=\"data\"\n\t\tv-on=\"action.handlers\">\n\t\t{{ data.text }}\n\t</Component>\n</template>\n\n<script>\nimport Share from '../models/Share'\n\nexport default {\n\tname: 'ExternalShareAction',\n\n\tprops: {\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\taction: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t\tfileInfo: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => {},\n\t\t\trequired: true,\n\t\t},\n\t\tshare: {\n\t\t\ttype: Share,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tdata() {\n\t\t\treturn this.action.data(this)\n\t\t},\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./ExternalShareAction.vue?vue&type=template&id=29f555e7&\"\nimport script from \"./ExternalShareAction.vue?vue&type=script&lang=js&\"\nexport * from \"./ExternalShareAction.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c(_vm.data.is,_vm._g(_vm._b({tag:\"Component\"},'Component',_vm.data,false),_vm.action.handlers),[_vm._v(\"\\n\\t\"+_vm._s(_vm.data.text)+\"\\n\")])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2022 Louis Chmn <louis@chmn.me>\n *\n * @author Louis Chmn <louis@chmn.me>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a 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 ATOMIC_PERMISSIONS = {\n\tNONE: 0,\n\tREAD: 1,\n\tUPDATE: 2,\n\tCREATE: 4,\n\tDELETE: 8,\n\tSHARE: 16,\n}\n\nexport const BUNDLED_PERMISSIONS = {\n\tREAD_ONLY: ATOMIC_PERMISSIONS.READ,\n\tUPLOAD_AND_UPDATE: ATOMIC_PERMISSIONS.READ | ATOMIC_PERMISSIONS.UPDATE | ATOMIC_PERMISSIONS.CREATE | ATOMIC_PERMISSIONS.DELETE,\n\tFILE_DROP: ATOMIC_PERMISSIONS.CREATE,\n\tALL: ATOMIC_PERMISSIONS.UPDATE | ATOMIC_PERMISSIONS.CREATE | ATOMIC_PERMISSIONS.READ | ATOMIC_PERMISSIONS.DELETE | ATOMIC_PERMISSIONS.SHARE,\n}\n\n/**\n * Return whether a given permissions set contains some permissions.\n *\n * @param {number} initialPermissionSet - the permissions set.\n * @param {number} permissionsToCheck - the permissions to check.\n * @return {boolean}\n */\nexport function hasPermissions(initialPermissionSet, permissionsToCheck) {\n\treturn initialPermissionSet !== ATOMIC_PERMISSIONS.NONE && (initialPermissionSet & permissionsToCheck) === permissionsToCheck\n}\n\n/**\n * Return whether a given permissions set is valid.\n *\n * @param {number} permissionsSet - the permissions set.\n *\n * @return {boolean}\n */\nexport function permissionsSetIsValid(permissionsSet) {\n\t// Must have at least READ or CREATE permission.\n\tif (!hasPermissions(permissionsSet, ATOMIC_PERMISSIONS.READ) && !hasPermissions(permissionsSet, ATOMIC_PERMISSIONS.CREATE)) {\n\t\treturn false\n\t}\n\n\t// Must have READ permission if have UPDATE or DELETE.\n\tif (!hasPermissions(permissionsSet, ATOMIC_PERMISSIONS.READ) && (\n\t\thasPermissions(permissionsSet, ATOMIC_PERMISSIONS.UPDATE) || hasPermissions(permissionsSet, ATOMIC_PERMISSIONS.DELETE)\n\t)) {\n\t\treturn false\n\t}\n\n\treturn true\n}\n\n/**\n * Add some permissions to an initial set of permissions.\n *\n * @param {number} initialPermissionSet - the initial permissions.\n * @param {number} permissionsToAdd - the permissions to add.\n *\n * @return {number}\n */\nexport function addPermissions(initialPermissionSet, permissionsToAdd) {\n\treturn initialPermissionSet | permissionsToAdd\n}\n\n/**\n * Remove some permissions from an initial set of permissions.\n *\n * @param {number} initialPermissionSet - the initial permissions.\n * @param {number} permissionsToSubtract - the permissions to remove.\n *\n * @return {number}\n */\nexport function subtractPermissions(initialPermissionSet, permissionsToSubtract) {\n\treturn initialPermissionSet & ~permissionsToSubtract\n}\n\n/**\n * Toggle some permissions from an initial set of permissions.\n *\n * @param {number} initialPermissionSet - the permissions set.\n * @param {number} permissionsToToggle - the permissions to toggle.\n *\n * @return {number}\n */\nexport function togglePermissions(initialPermissionSet, permissionsToToggle) {\n\tif (hasPermissions(initialPermissionSet, permissionsToToggle)) {\n\t\treturn subtractPermissions(initialPermissionSet, permissionsToToggle)\n\t} else {\n\t\treturn addPermissions(initialPermissionSet, permissionsToToggle)\n\t}\n}\n\n/**\n * Return whether some given permissions can be toggled from a permission set.\n *\n * @param {number} permissionSet - the initial permissions set.\n * @param {number} permissionsToToggle - the permissions to toggle.\n *\n * @return {boolean}\n */\nexport function canTogglePermissions(permissionSet, permissionsToToggle) {\n\treturn permissionsSetIsValid(togglePermissions(permissionSet, permissionsToToggle))\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharePermissionsEditor.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!./SharePermissionsEditor.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2022 Louis Chmn <louis@chmn.me>\n -\n - @author Louis Chmn <louis@chmn.me>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<li>\n\t\t<ul>\n\t\t\t<!-- file -->\n\t\t\t<NcActionCheckbox v-if=\"!isFolder\"\n\t\t\t\t:checked=\"shareHasPermissions(atomicPermissions.UPDATE)\"\n\t\t\t\t:disabled=\"saving\"\n\t\t\t\t@update:checked=\"toggleSharePermissions(atomicPermissions.UPDATE)\">\n\t\t\t\t{{ t('files_sharing', 'Allow editing') }}\n\t\t\t</NcActionCheckbox>\n\n\t\t\t<!-- folder -->\n\t\t\t<template v-if=\"isFolder && fileHasCreatePermission && config.isPublicUploadEnabled\">\n\t\t\t\t<template v-if=\"!showCustomPermissionsForm\">\n\t\t\t\t\t<NcActionRadio :checked=\"sharePermissionEqual(bundledPermissions.READ_ONLY)\"\n\t\t\t\t\t\t:value=\"bundledPermissions.READ_ONLY\"\n\t\t\t\t\t\t:name=\"randomFormName\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t@change=\"setSharePermissions(bundledPermissions.READ_ONLY)\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Read only') }}\n\t\t\t\t\t</NcActionRadio>\n\n\t\t\t\t\t<NcActionRadio :checked=\"sharePermissionEqual(bundledPermissions.UPLOAD_AND_UPDATE)\"\n\t\t\t\t\t\t:value=\"bundledPermissions.UPLOAD_AND_UPDATE\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t:name=\"randomFormName\"\n\t\t\t\t\t\t@change=\"setSharePermissions(bundledPermissions.UPLOAD_AND_UPDATE)\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Allow upload and editing') }}\n\t\t\t\t\t</NcActionRadio>\n\t\t\t\t\t<NcActionRadio :checked=\"sharePermissionEqual(bundledPermissions.FILE_DROP)\"\n\t\t\t\t\t\t:value=\"bundledPermissions.FILE_DROP\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t:name=\"randomFormName\"\n\t\t\t\t\t\tclass=\"sharing-entry__action--public-upload\"\n\t\t\t\t\t\t@change=\"setSharePermissions(bundledPermissions.FILE_DROP)\">\n\t\t\t\t\t\t{{ t('files_sharing', 'File drop (upload only)') }}\n\t\t\t\t\t</NcActionRadio>\n\n\t\t\t\t\t<!-- custom permissions button -->\n\t\t\t\t\t<NcActionButton :title=\"t('files_sharing', 'Custom permissions')\"\n\t\t\t\t\t\t@click=\"showCustomPermissionsForm = true\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<Tune />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ sharePermissionsIsBundle ? \"\" : sharePermissionsSummary }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</template>\n\n\t\t\t\t<!-- custom permissions -->\n\t\t\t\t<span v-else :class=\"{error: !sharePermissionsSetIsValid}\">\n\t\t\t\t\t<NcActionCheckbox :checked=\"shareHasPermissions(atomicPermissions.READ)\"\n\t\t\t\t\t\t:disabled=\"saving || !canToggleSharePermissions(atomicPermissions.READ)\"\n\t\t\t\t\t\t@update:checked=\"toggleSharePermissions(atomicPermissions.READ)\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Read') }}\n\t\t\t\t\t</NcActionCheckbox>\n\t\t\t\t\t<NcActionCheckbox :checked=\"shareHasPermissions(atomicPermissions.CREATE)\"\n\t\t\t\t\t\t:disabled=\"saving || !canToggleSharePermissions(atomicPermissions.CREATE)\"\n\t\t\t\t\t\t@update:checked=\"toggleSharePermissions(atomicPermissions.CREATE)\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Upload') }}\n\t\t\t\t\t</NcActionCheckbox>\n\t\t\t\t\t<NcActionCheckbox :checked=\"shareHasPermissions(atomicPermissions.UPDATE)\"\n\t\t\t\t\t\t:disabled=\"saving || !canToggleSharePermissions(atomicPermissions.UPDATE)\"\n\t\t\t\t\t\t@update:checked=\"toggleSharePermissions(atomicPermissions.UPDATE)\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Edit') }}\n\t\t\t\t\t</NcActionCheckbox>\n\t\t\t\t\t<NcActionCheckbox :checked=\"shareHasPermissions(atomicPermissions.DELETE)\"\n\t\t\t\t\t\t:disabled=\"saving || !canToggleSharePermissions(atomicPermissions.DELETE)\"\n\t\t\t\t\t\t@update:checked=\"toggleSharePermissions(atomicPermissions.DELETE)\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Delete') }}\n\t\t\t\t\t</NcActionCheckbox>\n\n\t\t\t\t\t<NcActionButton @click=\"showCustomPermissionsForm = false\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<ChevronLeft />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ t('files_sharing', 'Bundled permissions') }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</span>\n\t\t\t</template>\n\t\t</ul>\n\t</li>\n</template>\n\n<script>\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton'\nimport NcActionRadio from '@nextcloud/vue/dist/Components/NcActionRadio'\nimport NcActionCheckbox from '@nextcloud/vue/dist/Components/NcActionCheckbox'\n\nimport SharesMixin from '../mixins/SharesMixin'\nimport {\n\tATOMIC_PERMISSIONS,\n\tBUNDLED_PERMISSIONS,\n\thasPermissions,\n\tpermissionsSetIsValid,\n\ttogglePermissions,\n\tcanTogglePermissions,\n} from '../lib/SharePermissionsToolBox'\n\nimport Tune from 'vue-material-design-icons/Tune'\nimport ChevronLeft from 'vue-material-design-icons/ChevronLeft'\n\nexport default {\n\tname: 'SharePermissionsEditor',\n\n\tcomponents: {\n\t\tNcActionButton,\n\t\tNcActionCheckbox,\n\t\tNcActionRadio,\n\t\tTune,\n\t\tChevronLeft,\n\t},\n\n\tmixins: [SharesMixin],\n\n\tdata() {\n\t\treturn {\n\t\t\trandomFormName: Math.random().toString(27).substring(2),\n\n\t\t\tshowCustomPermissionsForm: false,\n\n\t\t\tatomicPermissions: ATOMIC_PERMISSIONS,\n\t\t\tbundledPermissions: BUNDLED_PERMISSIONS,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Return the summary of custom checked permissions.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tsharePermissionsSummary() {\n\t\t\treturn Object.values(this.atomicPermissions)\n\t\t\t\t.filter(permission => this.shareHasPermissions(permission))\n\t\t\t\t.map(permission => {\n\t\t\t\t\tswitch (permission) {\n\t\t\t\t\tcase this.atomicPermissions.CREATE:\n\t\t\t\t\t\treturn this.t('files_sharing', 'Upload')\n\t\t\t\t\tcase this.atomicPermissions.READ:\n\t\t\t\t\t\treturn this.t('files_sharing', 'Read')\n\t\t\t\t\tcase this.atomicPermissions.UPDATE:\n\t\t\t\t\t\treturn this.t('files_sharing', 'Edit')\n\t\t\t\t\tcase this.atomicPermissions.DELETE:\n\t\t\t\t\t\treturn this.t('files_sharing', 'Delete')\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn null\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.filter(permissionLabel => permissionLabel !== null)\n\t\t\t\t.join(', ')\n\t\t},\n\n\t\t/**\n\t\t * Return whether the share's permission is a bundle.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tsharePermissionsIsBundle() {\n\t\t\treturn Object.values(BUNDLED_PERMISSIONS)\n\t\t\t\t.map(bundle => this.sharePermissionEqual(bundle))\n\t\t\t\t.filter(isBundle => isBundle)\n\t\t\t\t.length > 0\n\t\t},\n\n\t\t/**\n\t\t * Return whether the share's permission is valid.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tsharePermissionsSetIsValid() {\n\t\t\treturn permissionsSetIsValid(this.share.permissions)\n\t\t},\n\n\t\t/**\n\t\t * Is the current share a folder ?\n\t\t * TODO: move to a proper FileInfo model?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisFolder() {\n\t\t\treturn this.fileInfo.type === 'dir'\n\t\t},\n\n\t\t/**\n\t\t * Does the current file/folder have create permissions.\n\t\t * TODO: move to a proper FileInfo model?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tfileHasCreatePermission() {\n\t\t\treturn !!(this.fileInfo.permissions & ATOMIC_PERMISSIONS.CREATE)\n\t\t},\n\t},\n\n\tmounted() {\n\t\t// Show the Custom Permissions view on open if the permissions set is not a bundle.\n\t\tthis.showCustomPermissionsForm = !this.sharePermissionsIsBundle\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Return whether the share has the exact given permissions.\n\t\t *\n\t\t * @param {number} permissions - the permissions to check.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tsharePermissionEqual(permissions) {\n\t\t\t// We use the share's permission without PERMISSION_SHARE as it is not relevant here.\n\t\t\treturn (this.share.permissions & ~ATOMIC_PERMISSIONS.SHARE) === permissions\n\t\t},\n\n\t\t/**\n\t\t * Return whether the share has the given permissions.\n\t\t *\n\t\t * @param {number} permissions - the permissions to check.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tshareHasPermissions(permissions) {\n\t\t\treturn hasPermissions(this.share.permissions, permissions)\n\t\t},\n\n\t\t/**\n\t\t * Set the share permissions to the given permissions.\n\t\t *\n\t\t * @param {number} permissions - the permissions to set.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tsetSharePermissions(permissions) {\n\t\t\tthis.share.permissions = permissions\n\t\t\tthis.queueUpdate('permissions')\n\t\t},\n\n\t\t/**\n\t\t * Return whether some given permissions can be toggled.\n\t\t *\n\t\t * @param {number} permissionsToToggle - the permissions to toggle.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tcanToggleSharePermissions(permissionsToToggle) {\n\t\t\treturn canTogglePermissions(this.share.permissions, permissionsToToggle)\n\t\t},\n\n\t\t/**\n\t\t * Toggle a given permission.\n\t\t *\n\t\t * @param {number} permissions - the permissions to toggle.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\ttoggleSharePermissions(permissions) {\n\t\t\tthis.share.permissions = togglePermissions(this.share.permissions, permissions)\n\n\t\t\tif (!permissionsSetIsValid(this.share.permissions)) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.queueUpdate('permissions')\n\t\t},\n\t},\n}\n</script>\n<style lang=\"scss\" scoped>\n.error {\n\t::v-deep .action-checkbox__label:before {\n\t\tborder: 1px solid var(--color-error);\n\t}\n}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharePermissionsEditor.vue?vue&type=style&index=0&id=5e957d09&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharePermissionsEditor.vue?vue&type=style&index=0&id=5e957d09&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SharePermissionsEditor.vue?vue&type=template&id=5e957d09&scoped=true&\"\nimport script from \"./SharePermissionsEditor.vue?vue&type=script&lang=js&\"\nexport * from \"./SharePermissionsEditor.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SharePermissionsEditor.vue?vue&type=style&index=0&id=5e957d09&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5e957d09\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('li',[_c('ul',[(!_vm.isFolder)?_c('NcActionCheckbox',{attrs:{\"checked\":_vm.shareHasPermissions(_vm.atomicPermissions.UPDATE),\"disabled\":_vm.saving},on:{\"update:checked\":function($event){return _vm.toggleSharePermissions(_vm.atomicPermissions.UPDATE)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Allow editing'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.isFolder && _vm.fileHasCreatePermission && _vm.config.isPublicUploadEnabled)?[(!_vm.showCustomPermissionsForm)?[_c('NcActionRadio',{attrs:{\"checked\":_vm.sharePermissionEqual(_vm.bundledPermissions.READ_ONLY),\"value\":_vm.bundledPermissions.READ_ONLY,\"name\":_vm.randomFormName,\"disabled\":_vm.saving},on:{\"change\":function($event){return _vm.setSharePermissions(_vm.bundledPermissions.READ_ONLY)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Read only'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionRadio',{attrs:{\"checked\":_vm.sharePermissionEqual(_vm.bundledPermissions.UPLOAD_AND_UPDATE),\"value\":_vm.bundledPermissions.UPLOAD_AND_UPDATE,\"disabled\":_vm.saving,\"name\":_vm.randomFormName},on:{\"change\":function($event){return _vm.setSharePermissions(_vm.bundledPermissions.UPLOAD_AND_UPDATE)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Allow upload and editing'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionRadio',{staticClass:\"sharing-entry__action--public-upload\",attrs:{\"checked\":_vm.sharePermissionEqual(_vm.bundledPermissions.FILE_DROP),\"value\":_vm.bundledPermissions.FILE_DROP,\"disabled\":_vm.saving,\"name\":_vm.randomFormName},on:{\"change\":function($event){return _vm.setSharePermissions(_vm.bundledPermissions.FILE_DROP)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'File drop (upload only)'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"title\":_vm.t('files_sharing', 'Custom permissions')},on:{\"click\":function($event){_vm.showCustomPermissionsForm = true}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Tune')]},proxy:true}],null,false,961531849)},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.sharePermissionsIsBundle ? \"\" : _vm.sharePermissionsSummary)+\"\\n\\t\\t\\t\\t\")])]:_c('span',{class:{error: !_vm.sharePermissionsSetIsValid}},[_c('NcActionCheckbox',{attrs:{\"checked\":_vm.shareHasPermissions(_vm.atomicPermissions.READ),\"disabled\":_vm.saving || !_vm.canToggleSharePermissions(_vm.atomicPermissions.READ)},on:{\"update:checked\":function($event){return _vm.toggleSharePermissions(_vm.atomicPermissions.READ)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Read'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionCheckbox',{attrs:{\"checked\":_vm.shareHasPermissions(_vm.atomicPermissions.CREATE),\"disabled\":_vm.saving || !_vm.canToggleSharePermissions(_vm.atomicPermissions.CREATE)},on:{\"update:checked\":function($event){return _vm.toggleSharePermissions(_vm.atomicPermissions.CREATE)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Upload'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionCheckbox',{attrs:{\"checked\":_vm.shareHasPermissions(_vm.atomicPermissions.UPDATE),\"disabled\":_vm.saving || !_vm.canToggleSharePermissions(_vm.atomicPermissions.UPDATE)},on:{\"update:checked\":function($event){return _vm.toggleSharePermissions(_vm.atomicPermissions.UPDATE)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Edit'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionCheckbox',{attrs:{\"checked\":_vm.shareHasPermissions(_vm.atomicPermissions.DELETE),\"disabled\":_vm.saving || !_vm.canToggleSharePermissions(_vm.atomicPermissions.DELETE)},on:{\"update:checked\":function($event){return _vm.toggleSharePermissions(_vm.atomicPermissions.DELETE)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Delete'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionButton',{on:{\"click\":function($event){_vm.showCustomPermissionsForm = false}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('ChevronLeft')]},proxy:true}],null,false,1018742195)},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Bundled permissions'))+\"\\n\\t\\t\\t\\t\")])],1)]:_vm._e()],2)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<li :class=\"{'sharing-entry--share': share}\" class=\"sharing-entry sharing-entry__link\">\n\t\t<NcAvatar :is-no-user=\"true\"\n\t\t\t:icon-class=\"isEmailShareType ? 'avatar-link-share icon-mail-white' : 'avatar-link-share icon-public-white'\"\n\t\t\tclass=\"sharing-entry__avatar\" />\n\t\t<div class=\"sharing-entry__desc\">\n\t\t\t<span class=\"sharing-entry__title\" :title=\"title\">\n\t\t\t\t{{ title }}\n\t\t\t</span>\n\t\t\t<p v-if=\"subtitle\">\n\t\t\t\t{{ subtitle }}\n\t\t\t</p>\n\t\t</div>\n\n\t\t<!-- clipboard -->\n\t\t<NcActions v-if=\"share && !isEmailShareType && share.token\"\n\t\t\tref=\"copyButton\"\n\t\t\tclass=\"sharing-entry__copy\">\n\t\t\t<NcActionLink :href=\"shareLink\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\t:title=\"copyLinkTooltip\"\n\t\t\t\t:aria-label=\"copyLinkTooltip\"\n\t\t\t\t:icon=\"copied && copySuccess ? 'icon-checkmark-color' : 'icon-clippy'\"\n\t\t\t\t@click.stop.prevent=\"copyLink\" />\n\t\t</NcActions>\n\n\t\t<!-- pending actions -->\n\t\t<NcActions v-if=\"!pending && (pendingPassword || pendingEnforcedPassword || pendingExpirationDate)\"\n\t\t\tclass=\"sharing-entry__actions\"\n\t\t\t:aria-label=\"actionsTooltip\"\n\t\t\tmenu-align=\"right\"\n\t\t\t:open.sync=\"open\"\n\t\t\t@close=\"onNewLinkShare\">\n\t\t\t<!-- pending data menu -->\n\t\t\t<NcActionText v-if=\"errors.pending\"\n\t\t\t\ticon=\"icon-error\"\n\t\t\t\t:class=\"{ error: errors.pending}\">\n\t\t\t\t{{ errors.pending }}\n\t\t\t</NcActionText>\n\t\t\t<NcActionText v-else icon=\"icon-info\">\n\t\t\t\t{{ t('files_sharing', 'Please enter the following required information before creating the share') }}\n\t\t\t</NcActionText>\n\n\t\t\t<!-- password -->\n\t\t\t<NcActionText v-if=\"pendingEnforcedPassword\" icon=\"icon-password\">\n\t\t\t\t{{ t('files_sharing', 'Password protection (enforced)') }}\n\t\t\t</NcActionText>\n\t\t\t<NcActionCheckbox v-else-if=\"pendingPassword\"\n\t\t\t\t:checked.sync=\"isPasswordProtected\"\n\t\t\t\t:disabled=\"config.enforcePasswordForPublicLink || saving\"\n\t\t\t\tclass=\"share-link-password-checkbox\"\n\t\t\t\t@uncheck=\"onPasswordDisable\">\n\t\t\t\t{{ t('files_sharing', 'Password protection') }}\n\t\t\t</NcActionCheckbox>\n\n\t\t\t<NcActionInput v-if=\"pendingEnforcedPassword || share.password\"\n\t\t\t\tclass=\"share-link-password\"\n\t\t\t\t:value.sync=\"share.password\"\n\t\t\t\t:disabled=\"saving\"\n\t\t\t\t:required=\"config.enableLinkPasswordByDefault || config.enforcePasswordForPublicLink\"\n\t\t\t\t:minlength=\"isPasswordPolicyEnabled && config.passwordPolicy.minLength\"\n\t\t\t\ticon=\"\"\n\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\t@submit=\"onNewLinkShare\">\n\t\t\t\t{{ t('files_sharing', 'Enter a password') }}\n\t\t\t</NcActionInput>\n\n\t\t\t<!-- expiration date -->\n\t\t\t<NcActionText v-if=\"pendingExpirationDate\" icon=\"icon-calendar-dark\">\n\t\t\t\t{{ t('files_sharing', 'Expiration date (enforced)') }}\n\t\t\t</NcActionText>\n\t\t\t<NcActionInput v-if=\"pendingExpirationDate\"\n\t\t\t\tclass=\"share-link-expire-date\"\n\t\t\t\t:disabled=\"saving\"\n\t\t\t\t:is-native-picker=\"true\"\n\t\t\t\t:hide-label=\"true\"\n\t\t\t\t:value=\"new Date(share.expireDate)\"\n\t\t\t\ttype=\"date\"\n\t\t\t\t:min=\"dateTomorrow\"\n\t\t\t\t:max=\"dateMaxEnforced\"\n\t\t\t\t@input=\"onExpirationChange\">\n\t\t\t\t<!-- let's not submit when picked, the user\n\t\t\t\t\tmight want to still edit or copy the password -->\n\t\t\t\t{{ t('files_sharing', 'Enter a date') }}\n\t\t\t</NcActionInput>\n\n\t\t\t<NcActionButton icon=\"icon-checkmark\" @click.prevent.stop=\"onNewLinkShare\">\n\t\t\t\t{{ t('files_sharing', 'Create share') }}\n\t\t\t</NcActionButton>\n\t\t\t<NcActionButton icon=\"icon-close\" @click.prevent.stop=\"onCancel\">\n\t\t\t\t{{ t('files_sharing', 'Cancel') }}\n\t\t\t</NcActionButton>\n\t\t</NcActions>\n\n\t\t<!-- actions -->\n\t\t<NcActions v-else-if=\"!loading\"\n\t\t\tclass=\"sharing-entry__actions\"\n\t\t\t:aria-label=\"actionsTooltip\"\n\t\t\tmenu-align=\"right\"\n\t\t\t:open.sync=\"open\"\n\t\t\t@close=\"onMenuClose\">\n\t\t\t<template v-if=\"share\">\n\t\t\t\t<template v-if=\"share.canEdit && canReshare\">\n\t\t\t\t\t<!-- Custom Label -->\n\t\t\t\t\t<NcActionInput ref=\"label\"\n\t\t\t\t\t\t:class=\"{ error: errors.label }\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t:label=\"t('files_sharing', 'Share label')\"\n\t\t\t\t\t\t:value=\"share.newLabel !== undefined ? share.newLabel : share.label\"\n\t\t\t\t\t\ticon=\"icon-edit\"\n\t\t\t\t\t\tmaxlength=\"255\"\n\t\t\t\t\t\t@update:value=\"onLabelChange\"\n\t\t\t\t\t\t@submit=\"onLabelSubmit\" />\n\n\t\t\t\t\t<SharePermissionsEditor :can-reshare=\"canReshare\"\n\t\t\t\t\t\t:share.sync=\"share\"\n\t\t\t\t\t\t:file-info=\"fileInfo\" />\n\n\t\t\t\t\t<NcActionSeparator />\n\n\t\t\t\t\t<NcActionCheckbox :checked.sync=\"share.hideDownload\"\n\t\t\t\t\t\t:disabled=\"saving || canChangeHideDownload\"\n\t\t\t\t\t\t@change=\"queueUpdate('hideDownload')\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Hide download') }}\n\t\t\t\t\t</NcActionCheckbox>\n\n\t\t\t\t\t<!-- password -->\n\t\t\t\t\t<NcActionCheckbox :checked.sync=\"isPasswordProtected\"\n\t\t\t\t\t\t:disabled=\"config.enforcePasswordForPublicLink || saving\"\n\t\t\t\t\t\tclass=\"share-link-password-checkbox\"\n\t\t\t\t\t\t@uncheck=\"onPasswordDisable\">\n\t\t\t\t\t\t{{ config.enforcePasswordForPublicLink\n\t\t\t\t\t\t\t? t('files_sharing', 'Password protection (enforced)')\n\t\t\t\t\t\t\t: t('files_sharing', 'Password protect') }}\n\t\t\t\t\t</NcActionCheckbox>\n\n\t\t\t\t\t<NcActionInput v-if=\"isPasswordProtected\"\n\t\t\t\t\t\tref=\"password\"\n\t\t\t\t\t\tclass=\"share-link-password\"\n\t\t\t\t\t\t:class=\"{ error: errors.password}\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t:required=\"config.enforcePasswordForPublicLink\"\n\t\t\t\t\t\t:value=\"hasUnsavedPassword ? share.newPassword : '***************'\"\n\t\t\t\t\t\ticon=\"icon-password\"\n\t\t\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\t\t\t:type=\"hasUnsavedPassword ? 'text': 'password'\"\n\t\t\t\t\t\t@update:value=\"onPasswordChange\"\n\t\t\t\t\t\t@submit=\"onPasswordSubmit\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Enter a password') }}\n\t\t\t\t\t</NcActionInput>\n\t\t\t\t\t<NcActionText v-if=\"isEmailShareType && passwordExpirationTime\" icon=\"icon-info\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Password expires {passwordExpirationTime}', {passwordExpirationTime}) }}\n\t\t\t\t\t</NcActionText>\n\t\t\t\t\t<NcActionText v-else-if=\"isEmailShareType && passwordExpirationTime !== null\" icon=\"icon-error\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Password expired') }}\n\t\t\t\t\t</NcActionText>\n\n\t\t\t\t\t<!-- password protected by Talk -->\n\t\t\t\t\t<NcActionCheckbox v-if=\"isPasswordProtectedByTalkAvailable\"\n\t\t\t\t\t\t:checked.sync=\"isPasswordProtectedByTalk\"\n\t\t\t\t\t\t:disabled=\"!canTogglePasswordProtectedByTalkAvailable || saving\"\n\t\t\t\t\t\tclass=\"share-link-password-talk-checkbox\"\n\t\t\t\t\t\t@change=\"onPasswordProtectedByTalkChange\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Video verification') }}\n\t\t\t\t\t</NcActionCheckbox>\n\n\t\t\t\t\t<!-- expiration date -->\n\t\t\t\t\t<NcActionCheckbox :checked.sync=\"hasExpirationDate\"\n\t\t\t\t\t\t:disabled=\"config.isDefaultExpireDateEnforced || saving\"\n\t\t\t\t\t\tclass=\"share-link-expire-date-checkbox\"\n\t\t\t\t\t\t@uncheck=\"onExpirationDisable\">\n\t\t\t\t\t\t{{ config.isDefaultExpireDateEnforced\n\t\t\t\t\t\t\t? t('files_sharing', 'Expiration date (enforced)')\n\t\t\t\t\t\t\t: t('files_sharing', 'Set expiration date') }}\n\t\t\t\t\t</NcActionCheckbox>\n\t\t\t\t\t<NcActionInput v-if=\"hasExpirationDate\"\n\t\t\t\t\t\tref=\"expireDate\"\n\t\t\t\t\t\t:is-native-picker=\"true\"\n\t\t\t\t\t\t:hide-label=\"true\"\n\t\t\t\t\t\tclass=\"share-link-expire-date\"\n\t\t\t\t\t\t:class=\"{ error: errors.expireDate}\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t:value=\"new Date(share.expireDate)\"\n\t\t\t\t\t\ttype=\"date\"\n\t\t\t\t\t\t:min=\"dateTomorrow\"\n\t\t\t\t\t\t:max=\"dateMaxEnforced\"\n\t\t\t\t\t\t@input=\"onExpirationChange\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Enter a date') }}\n\t\t\t\t\t</NcActionInput>\n\n\t\t\t\t\t<!-- note -->\n\t\t\t\t\t<NcActionCheckbox :checked.sync=\"hasNote\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t@uncheck=\"queueUpdate('note')\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Note to recipient') }}\n\t\t\t\t\t</NcActionCheckbox>\n\n\t\t\t\t\t<NcActionTextEditable v-if=\"hasNote\"\n\t\t\t\t\t\tref=\"note\"\n\t\t\t\t\t\t:class=\"{ error: errors.note}\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t:placeholder=\"t('files_sharing', 'Enter a note for the share recipient')\"\n\t\t\t\t\t\t:value=\"share.newNote || share.note\"\n\t\t\t\t\t\ticon=\"icon-edit\"\n\t\t\t\t\t\t@update:value=\"onNoteChange\"\n\t\t\t\t\t\t@submit=\"onNoteSubmit\" />\n\t\t\t\t</template>\n\n\t\t\t\t<NcActionSeparator />\n\n\t\t\t\t<!-- external actions -->\n\t\t\t\t<ExternalShareAction v-for=\"action in externalLinkActions\"\n\t\t\t\t\t:id=\"action.id\"\n\t\t\t\t\t:key=\"action.id\"\n\t\t\t\t\t:action=\"action\"\n\t\t\t\t\t:file-info=\"fileInfo\"\n\t\t\t\t\t:share=\"share\" />\n\n\t\t\t\t<!-- external legacy sharing via url (social...) -->\n\t\t\t\t<NcActionLink v-for=\"({icon, url, name}, index) in externalLegacyLinkActions\"\n\t\t\t\t\t:key=\"index\"\n\t\t\t\t\t:href=\"url(shareLink)\"\n\t\t\t\t\t:icon=\"icon\"\n\t\t\t\t\ttarget=\"_blank\">\n\t\t\t\t\t{{ name }}\n\t\t\t\t</NcActionLink>\n\n\t\t\t\t<NcActionButton v-if=\"share.canDelete\"\n\t\t\t\t\ticon=\"icon-close\"\n\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t@click.prevent=\"onDelete\">\n\t\t\t\t\t{{ t('files_sharing', 'Unshare') }}\n\t\t\t\t</NcActionButton>\n\t\t\t\t<NcActionButton v-if=\"!isEmailShareType && canReshare\"\n\t\t\t\t\tclass=\"new-share-link\"\n\t\t\t\t\ticon=\"icon-add\"\n\t\t\t\t\t@click.prevent.stop=\"onNewLinkShare\">\n\t\t\t\t\t{{ t('files_sharing', 'Add another link') }}\n\t\t\t\t</NcActionButton>\n\t\t\t</template>\n\n\t\t\t<!-- Create new share -->\n\t\t\t<NcActionButton v-else-if=\"canReshare\"\n\t\t\t\tclass=\"new-share-link\"\n\t\t\t\t:title=\"t('files_sharing', 'Create a new share link')\"\n\t\t\t\t:aria-label=\"t('files_sharing', 'Create a new share link')\"\n\t\t\t\t:icon=\"loading ? 'icon-loading-small' : 'icon-add'\"\n\t\t\t\t@click.prevent.stop=\"onNewLinkShare\" />\n\t\t</NcActions>\n\n\t\t<!-- loading indicator to replace the menu -->\n\t\t<div v-else class=\"icon-loading-small sharing-entry__loading\" />\n\t</li>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport { showError, showSuccess } from '@nextcloud/dialogs'\nimport { Type as ShareTypes } from '@nextcloud/sharing'\nimport Vue from 'vue'\n\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton'\nimport NcActionCheckbox from '@nextcloud/vue/dist/Components/NcActionCheckbox'\nimport NcActionInput from '@nextcloud/vue/dist/Components/NcActionInput'\nimport NcActionLink from '@nextcloud/vue/dist/Components/NcActionLink'\nimport NcActionText from '@nextcloud/vue/dist/Components/NcActionText'\nimport NcActionSeparator from '@nextcloud/vue/dist/Components/NcActionSeparator'\nimport NcActionTextEditable from '@nextcloud/vue/dist/Components/NcActionTextEditable'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions'\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar'\n\nimport ExternalShareAction from './ExternalShareAction.vue'\nimport SharePermissionsEditor from './SharePermissionsEditor.vue'\nimport GeneratePassword from '../utils/GeneratePassword.js'\nimport Share from '../models/Share.js'\nimport SharesMixin from '../mixins/SharesMixin.js'\n\nexport default {\n\tname: 'SharingEntryLink',\n\n\tcomponents: {\n\t\tNcActions,\n\t\tNcActionButton,\n\t\tNcActionCheckbox,\n\t\tNcActionInput,\n\t\tNcActionLink,\n\t\tNcActionText,\n\t\tNcActionTextEditable,\n\t\tNcActionSeparator,\n\t\tNcAvatar,\n\t\tExternalShareAction,\n\t\tSharePermissionsEditor,\n\t},\n\n\tmixins: [SharesMixin],\n\n\tprops: {\n\t\tcanReshare: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tindex: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tcopySuccess: true,\n\t\t\tcopied: false,\n\n\t\t\t// Are we waiting for password/expiration date\n\t\t\tpending: false,\n\n\t\t\tExternalLegacyLinkActions: OCA.Sharing.ExternalLinkActions.state,\n\t\t\tExternalShareActions: OCA.Sharing.ExternalShareActions.state,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Link share label\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\ttitle() {\n\t\t\t// if we have a valid existing share (not pending)\n\t\t\tif (this.share && this.share.id) {\n\t\t\t\tif (!this.isShareOwner && this.share.ownerDisplayName) {\n\t\t\t\t\tif (this.isEmailShareType) {\n\t\t\t\t\t\treturn t('files_sharing', '{shareWith} by {initiator}', {\n\t\t\t\t\t\t\tshareWith: this.share.shareWith,\n\t\t\t\t\t\t\tinitiator: this.share.ownerDisplayName,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\treturn t('files_sharing', 'Shared via link by {initiator}', {\n\t\t\t\t\t\tinitiator: this.share.ownerDisplayName,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (this.share.label && this.share.label.trim() !== '') {\n\t\t\t\t\tif (this.isEmailShareType) {\n\t\t\t\t\t\treturn t('files_sharing', 'Mail share ({label})', {\n\t\t\t\t\t\t\tlabel: this.share.label.trim(),\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\treturn t('files_sharing', 'Share link ({label})', {\n\t\t\t\t\t\tlabel: this.share.label.trim(),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (this.isEmailShareType) {\n\t\t\t\t\treturn this.share.shareWith\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.index > 1) {\n\t\t\t\treturn t('files_sharing', 'Share link ({index})', { index: this.index })\n\t\t\t}\n\t\t\treturn t('files_sharing', 'Share link')\n\t\t},\n\n\t\t/**\n\t\t * Show the email on a second line if a label is set for mail shares\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tsubtitle() {\n\t\t\tif (this.isEmailShareType\n\t\t\t\t&& this.title !== this.share.shareWith) {\n\t\t\t\treturn this.share.shareWith\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\t/**\n\t\t * Does the current share have an expiration date\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\thasExpirationDate: {\n\t\t\tget() {\n\t\t\t\treturn this.config.isDefaultExpireDateEnforced\n\t\t\t\t\t|| !!this.share.expireDate\n\t\t\t},\n\t\t\tset(enabled) {\n\t\t\t\tconst defaultExpirationDate = this.config.defaultExpirationDate\n\t\t\t\t\t|| new Date(new Date().setDate(new Date().getDate() + 1))\n\t\t\t\tthis.share.expireDate = enabled\n\t\t\t\t\t? this.formatDateToString(defaultExpirationDate)\n\t\t\t\t\t: ''\n\t\t\t\tconsole.debug('Expiration date status', enabled, this.share.expireDate)\n\t\t\t},\n\t\t},\n\n\t\tdateMaxEnforced() {\n\t\t\tif (this.config.isDefaultExpireDateEnforced) {\n\t\t\t\treturn new Date(new Date().setDate(new Date().getDate() + this.config.defaultExpireDate))\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\t/**\n\t\t * Is the current share password protected ?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisPasswordProtected: {\n\t\t\tget() {\n\t\t\t\treturn this.config.enforcePasswordForPublicLink\n\t\t\t\t\t|| !!this.share.password\n\t\t\t},\n\t\t\tasync set(enabled) {\n\t\t\t\t// TODO: directly save after generation to make sure the share is always protected\n\t\t\t\tVue.set(this.share, 'password', enabled ? await GeneratePassword() : '')\n\t\t\t\tVue.set(this.share, 'newPassword', this.share.password)\n\t\t\t},\n\t\t},\n\n\t\tpasswordExpirationTime() {\n\t\t\tif (this.share.passwordExpirationTime === null) {\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\tconst expirationTime = moment(this.share.passwordExpirationTime)\n\n\t\t\tif (expirationTime.diff(moment()) < 0) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\treturn expirationTime.fromNow()\n\t\t},\n\n\t\t/**\n\t\t * Is Talk enabled?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisTalkEnabled() {\n\t\t\treturn OC.appswebroots.spreed !== undefined\n\t\t},\n\n\t\t/**\n\t\t * Is it possible to protect the password by Talk?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisPasswordProtectedByTalkAvailable() {\n\t\t\treturn this.isPasswordProtected && this.isTalkEnabled\n\t\t},\n\n\t\t/**\n\t\t * Is the current share password protected by Talk?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisPasswordProtectedByTalk: {\n\t\t\tget() {\n\t\t\t\treturn this.share.sendPasswordByTalk\n\t\t\t},\n\t\t\tasync set(enabled) {\n\t\t\t\tthis.share.sendPasswordByTalk = enabled\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Is the current share an email share ?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisEmailShareType() {\n\t\t\treturn this.share\n\t\t\t\t? this.share.type === this.SHARE_TYPES.SHARE_TYPE_EMAIL\n\t\t\t\t: false\n\t\t},\n\n\t\tcanTogglePasswordProtectedByTalkAvailable() {\n\t\t\tif (!this.isPasswordProtected) {\n\t\t\t\t// Makes no sense\n\t\t\t\treturn false\n\t\t\t} else if (this.isEmailShareType && !this.hasUnsavedPassword) {\n\t\t\t\t// For email shares we need a new password in order to enable or\n\t\t\t\t// disable\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\t// Anything else should be fine\n\t\t\treturn true\n\t\t},\n\n\t\t/**\n\t\t * Pending data.\n\t\t * If the share still doesn't have an id, it is not synced\n\t\t * Therefore this is still not valid and requires user input\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tpendingPassword() {\n\t\t\treturn this.config.enableLinkPasswordByDefault && this.share && !this.share.id\n\t\t},\n\t\tpendingEnforcedPassword() {\n\t\t\treturn this.config.enforcePasswordForPublicLink && this.share && !this.share.id\n\t\t},\n\t\tpendingExpirationDate() {\n\t\t\treturn this.config.isDefaultExpireDateEnforced && this.share && !this.share.id\n\t\t},\n\n\t\t// if newPassword exists, but is empty, it means\n\t\t// the user deleted the original password\n\t\thasUnsavedPassword() {\n\t\t\treturn this.share.newPassword !== undefined\n\t\t},\n\n\t\t/**\n\t\t * Return the public share link\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tshareLink() {\n\t\t\treturn window.location.protocol + '//' + window.location.host + generateUrl('/s/') + this.share.token\n\t\t},\n\n\t\t/**\n\t\t * Tooltip message for actions button\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tactionsTooltip() {\n\t\t\treturn t('files_sharing', 'Actions for \"{title}\"', { title: this.title })\n\t\t},\n\n\t\t/**\n\t\t * Tooltip message for copy button\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tcopyLinkTooltip() {\n\t\t\tif (this.copied) {\n\t\t\t\tif (this.copySuccess) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\t\t\t\treturn t('files_sharing', 'Cannot copy, please copy the link manually')\n\t\t\t}\n\t\t\treturn t('files_sharing', 'Copy public link of \"{title}\" to clipboard', { title: this.title })\n\t\t},\n\n\t\t/**\n\t\t * External additionnai actions for the menu\n\t\t *\n\t\t * @deprecated use OCA.Sharing.ExternalShareActions\n\t\t * @return {Array}\n\t\t */\n\t\texternalLegacyLinkActions() {\n\t\t\treturn this.ExternalLegacyLinkActions.actions\n\t\t},\n\n\t\t/**\n\t\t * Additional actions for the menu\n\t\t *\n\t\t * @return {Array}\n\t\t */\n\t\texternalLinkActions() {\n\t\t\t// filter only the registered actions for said link\n\t\t\treturn this.ExternalShareActions.actions\n\t\t\t\t.filter(action => action.shareType.includes(ShareTypes.SHARE_TYPE_LINK)\n\t\t\t\t\t|| action.shareType.includes(ShareTypes.SHARE_TYPE_EMAIL))\n\t\t},\n\n\t\tisPasswordPolicyEnabled() {\n\t\t\treturn typeof this.config.passwordPolicy === 'object'\n\t\t},\n\n\t\tcanChangeHideDownload() {\n\t\t\tconst hasDisabledDownload = (shareAttribute) => shareAttribute.key === 'download' && shareAttribute.scope === 'permissions' && shareAttribute.enabled === false\n\n\t\t\treturn this.fileInfo.shareAttributes.some(hasDisabledDownload)\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Create a new share link and append it to the list\n\t\t */\n\t\tasync onNewLinkShare() {\n\t\t\t// do not run again if already loading\n\t\t\tif (this.loading) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst shareDefaults = {\n\t\t\t\tshare_type: ShareTypes.SHARE_TYPE_LINK,\n\t\t\t}\n\t\t\tif (this.config.isDefaultExpireDateEnforced) {\n\t\t\t\t// default is empty string if not set\n\t\t\t\t// expiration is the share object key, not expireDate\n\t\t\t\tshareDefaults.expiration = this.formatDateToString(this.config.defaultExpirationDate)\n\t\t\t}\n\n\t\t\t// do not push yet if we need a password or an expiration date: show pending menu\n\t\t\tif (this.config.enableLinkPasswordByDefault || this.config.enforcePasswordForPublicLink || this.config.isDefaultExpireDateEnforced) {\n\t\t\t\tthis.pending = true\n\n\t\t\t\t// if a share already exists, pushing it\n\t\t\t\tif (this.share && !this.share.id) {\n\t\t\t\t\t// if the share is valid, create it on the server\n\t\t\t\t\tif (this.checkShare(this.share)) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait this.pushNewLinkShare(this.share, true)\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tthis.pending = false\n\t\t\t\t\t\t\tconsole.error(e)\n\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn true\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.open = true\n\t\t\t\t\t\tOC.Notification.showTemporary(t('files_sharing', 'Error, please enter proper password and/or expiration date'))\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// ELSE, show the pending popovermenu\n\t\t\t\t// if password default or enforced, pre-fill with random one\n\t\t\t\tif (this.config.enableLinkPasswordByDefault || this.config.enforcePasswordForPublicLink) {\n\t\t\t\t\tshareDefaults.password = await GeneratePassword()\n\t\t\t\t}\n\n\t\t\t\t// create share & close menu\n\t\t\t\tconst share = new Share(shareDefaults)\n\t\t\t\tconst component = await new Promise(resolve => {\n\t\t\t\t\tthis.$emit('add:share', share, resolve)\n\t\t\t\t})\n\n\t\t\t\t// open the menu on the\n\t\t\t\t// freshly created share component\n\t\t\t\tthis.open = false\n\t\t\t\tthis.pending = false\n\t\t\t\tcomponent.open = true\n\n\t\t\t// Nothing is enforced, creating share directly\n\t\t\t} else {\n\t\t\t\tconst share = new Share(shareDefaults)\n\t\t\t\tawait this.pushNewLinkShare(share)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Push a new link share to the server\n\t\t * And update or append to the list\n\t\t * accordingly\n\t\t *\n\t\t * @param {Share} share the new share\n\t\t * @param {boolean} [update=false] do we update the current share ?\n\t\t */\n\t\tasync pushNewLinkShare(share, update) {\n\t\t\ttry {\n\t\t\t\t// do nothing if we're already pending creation\n\t\t\t\tif (this.loading) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\n\t\t\t\tthis.loading = true\n\t\t\t\tthis.errors = {}\n\n\t\t\t\tconst path = (this.fileInfo.path + '/' + this.fileInfo.name).replace('//', '/')\n\t\t\t\tconst options = {\n\t\t\t\t\tpath,\n\t\t\t\t\tshareType: ShareTypes.SHARE_TYPE_LINK,\n\t\t\t\t\tpassword: share.password,\n\t\t\t\t\texpireDate: share.expireDate,\n\t\t\t\t\tattributes: JSON.stringify(this.fileInfo.shareAttributes),\n\t\t\t\t\t// we do not allow setting the publicUpload\n\t\t\t\t\t// before the share creation.\n\t\t\t\t\t// Todo: We also need to fix the createShare method in\n\t\t\t\t\t// lib/Controller/ShareAPIController.php to allow file drop\n\t\t\t\t\t// (currently not supported on create, only update)\n\t\t\t\t}\n\n\t\t\t\tconsole.debug('Creating link share with options', options)\n\t\t\t\tconst newShare = await this.createShare(options)\n\n\t\t\t\tthis.open = false\n\t\t\t\tconsole.debug('Link share created', newShare)\n\n\t\t\t\t// if share already exists, copy link directly on next tick\n\t\t\t\tlet component\n\t\t\t\tif (update) {\n\t\t\t\t\tcomponent = await new Promise(resolve => {\n\t\t\t\t\t\tthis.$emit('update:share', newShare, resolve)\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\t// adding new share to the array and copying link to clipboard\n\t\t\t\t\t// using promise so that we can copy link in the same click function\n\t\t\t\t\t// and avoid firefox copy permissions issue\n\t\t\t\t\tcomponent = await new Promise(resolve => {\n\t\t\t\t\t\tthis.$emit('add:share', newShare, resolve)\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\t// Execute the copy link method\n\t\t\t\t// freshly created share component\n\t\t\t\t// ! somehow does not works on firefox !\n\t\t\t\tif (!this.config.enforcePasswordForPublicLink) {\n\t\t\t\t\t// Only copy the link when the password was not forced,\n\t\t\t\t\t// otherwise the user needs to copy/paste the password before finishing the share.\n\t\t\t\t\tcomponent.copyLink()\n\t\t\t\t}\n\t\t\t\tshowSuccess(t('sharing', 'Link share created'))\n\n\t\t\t} catch (data) {\n\t\t\t\tconst message = data?.response?.data?.ocs?.meta?.message\n\t\t\t\tif (!message) {\n\t\t\t\t\tshowError(t('sharing', 'Error while creating the share'))\n\t\t\t\t\tconsole.error(data)\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tif (message.match(/password/i)) {\n\t\t\t\t\tthis.onSyncError('password', message)\n\t\t\t\t} else if (message.match(/date/i)) {\n\t\t\t\t\tthis.onSyncError('expireDate', message)\n\t\t\t\t} else {\n\t\t\t\t\tthis.onSyncError('pending', message)\n\t\t\t\t}\n\t\t\t\tthrow data\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Label changed, let's save it to a different key\n\t\t *\n\t\t * @param {string} label the share label\n\t\t */\n\t\tonLabelChange(label) {\n\t\t\tthis.$set(this.share, 'newLabel', label.trim())\n\t\t},\n\n\t\t/**\n\t\t * When the note change, we trim, save and dispatch\n\t\t */\n\t\tonLabelSubmit() {\n\t\t\tif (typeof this.share.newLabel === 'string') {\n\t\t\t\tthis.share.label = this.share.newLabel\n\t\t\t\tthis.$delete(this.share, 'newLabel')\n\t\t\t\tthis.queueUpdate('label')\n\t\t\t}\n\t\t},\n\t\tasync copyLink() {\n\t\t\ttry {\n\t\t\t\tawait navigator.clipboard.writeText(this.shareLink)\n\t\t\t\tshowSuccess(t('files_sharing', 'Link copied'))\n\t\t\t\t// focus and show the tooltip\n\t\t\t\tthis.$refs.copyButton.$el.focus()\n\t\t\t\tthis.copySuccess = true\n\t\t\t\tthis.copied = true\n\t\t\t} catch (error) {\n\t\t\t\tthis.copySuccess = false\n\t\t\t\tthis.copied = true\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.copySuccess = false\n\t\t\t\t\tthis.copied = false\n\t\t\t\t}, 4000)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Update newPassword values\n\t\t * of share. If password is set but not newPassword\n\t\t * then the user did not changed the password\n\t\t * If both co-exists, the password have changed and\n\t\t * we show it in plain text.\n\t\t * Then on submit (or menu close), we sync it.\n\t\t *\n\t\t * @param {string} password the changed password\n\t\t */\n\t\tonPasswordChange(password) {\n\t\t\tthis.$set(this.share, 'newPassword', password)\n\t\t},\n\n\t\t/**\n\t\t * Uncheck password protection\n\t\t * We need this method because @update:checked\n\t\t * is ran simultaneously as @uncheck, so we\n\t\t * cannot ensure data is up-to-date\n\t\t */\n\t\tonPasswordDisable() {\n\t\t\tthis.share.password = ''\n\n\t\t\t// reset password state after sync\n\t\t\tthis.$delete(this.share, 'newPassword')\n\n\t\t\t// only update if valid share.\n\t\t\tif (this.share.id) {\n\t\t\t\tthis.queueUpdate('password')\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Menu have been closed or password has been submitted.\n\t\t * The only property that does not get\n\t\t * synced automatically is the password\n\t\t * So let's check if we have an unsaved\n\t\t * password.\n\t\t * expireDate is saved on datepicker pick\n\t\t * or close.\n\t\t */\n\t\tonPasswordSubmit() {\n\t\t\tif (this.hasUnsavedPassword) {\n\t\t\t\tthis.share.password = this.share.newPassword.trim()\n\t\t\t\tthis.queueUpdate('password')\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Update the password along with \"sendPasswordByTalk\".\n\t\t *\n\t\t * If the password was modified the new password is sent; otherwise\n\t\t * updating a mail share would fail, as in that case it is required that\n\t\t * a new password is set when enabling or disabling\n\t\t * \"sendPasswordByTalk\".\n\t\t */\n\t\tonPasswordProtectedByTalkChange() {\n\t\t\tif (this.hasUnsavedPassword) {\n\t\t\t\tthis.share.password = this.share.newPassword.trim()\n\t\t\t}\n\n\t\t\tthis.queueUpdate('sendPasswordByTalk', 'password')\n\t\t},\n\n\t\t/**\n\t\t * Save potential changed data on menu close\n\t\t */\n\t\tonMenuClose() {\n\t\t\tthis.onPasswordSubmit()\n\t\t\tthis.onNoteSubmit()\n\t\t},\n\n\t\t/**\n\t\t * Cancel the share creation\n\t\t * Used in the pending popover\n\t\t */\n\t\tonCancel() {\n\t\t\t// this.share already exists at this point,\n\t\t\t// but is incomplete as not pushed to server\n\t\t\t// YET. We can safely delete the share :)\n\t\t\tthis.$emit('remove:share', this.share)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.sharing-entry {\n\tdisplay: flex;\n\talign-items: center;\n\tmin-height: 44px;\n\t&__desc {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tjustify-content: space-between;\n\t\tpadding: 8px;\n\t\tline-height: 1.2em;\n\t\toverflow: hidden;\n\n\t\tp {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n\t&__title {\n\t\ttext-overflow: ellipsis;\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t}\n\n\t&:not(.sharing-entry--share) &__actions {\n\t\t.new-share-link {\n\t\t\tborder-top: 1px solid var(--color-border);\n\t\t}\n\t}\n\n\t::v-deep .avatar-link-share {\n\t\tbackground-color: var(--color-primary);\n\t}\n\n\t.sharing-entry__action--public-upload {\n\t\tborder-bottom: 1px solid var(--color-border);\n\t}\n\n\t&__loading {\n\t\twidth: 44px;\n\t\theight: 44px;\n\t\tmargin: 0;\n\t\tpadding: 14px;\n\t\tmargin-left: auto;\n\t}\n\n\t// put menus to the left\n\t// but only the first one\n\t.action-item {\n\t\tmargin-left: auto;\n\t\t~ .action-item,\n\t\t~ .sharing-entry__loading {\n\t\t\tmargin-left: 0;\n\t\t}\n\t}\n\n\t.icon-checkmark-color {\n\t\topacity: 1;\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntryLink.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!./SharingEntryLink.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntryLink.vue?vue&type=style&index=0&id=10855e60&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntryLink.vue?vue&type=style&index=0&id=10855e60&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SharingEntryLink.vue?vue&type=template&id=10855e60&scoped=true&\"\nimport script from \"./SharingEntryLink.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingEntryLink.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SharingEntryLink.vue?vue&type=style&index=0&id=10855e60&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"10855e60\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('li',{staticClass:\"sharing-entry sharing-entry__link\",class:{'sharing-entry--share': _vm.share}},[_c('NcAvatar',{staticClass:\"sharing-entry__avatar\",attrs:{\"is-no-user\":true,\"icon-class\":_vm.isEmailShareType ? 'avatar-link-share icon-mail-white' : 'avatar-link-share icon-public-white'}}),_vm._v(\" \"),_c('div',{staticClass:\"sharing-entry__desc\"},[_c('span',{staticClass:\"sharing-entry__title\",attrs:{\"title\":_vm.title}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.title)+\"\\n\\t\\t\")]),_vm._v(\" \"),(_vm.subtitle)?_c('p',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.subtitle)+\"\\n\\t\\t\")]):_vm._e()]),_vm._v(\" \"),(_vm.share && !_vm.isEmailShareType && _vm.share.token)?_c('NcActions',{ref:\"copyButton\",staticClass:\"sharing-entry__copy\"},[_c('NcActionLink',{attrs:{\"href\":_vm.shareLink,\"target\":\"_blank\",\"title\":_vm.copyLinkTooltip,\"aria-label\":_vm.copyLinkTooltip,\"icon\":_vm.copied && _vm.copySuccess ? 'icon-checkmark-color' : 'icon-clippy'},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.copyLink.apply(null, arguments)}}})],1):_vm._e(),_vm._v(\" \"),(!_vm.pending && (_vm.pendingPassword || _vm.pendingEnforcedPassword || _vm.pendingExpirationDate))?_c('NcActions',{staticClass:\"sharing-entry__actions\",attrs:{\"aria-label\":_vm.actionsTooltip,\"menu-align\":\"right\",\"open\":_vm.open},on:{\"update:open\":function($event){_vm.open=$event},\"close\":_vm.onNewLinkShare}},[(_vm.errors.pending)?_c('NcActionText',{class:{ error: _vm.errors.pending},attrs:{\"icon\":\"icon-error\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.errors.pending)+\"\\n\\t\\t\")]):_c('NcActionText',{attrs:{\"icon\":\"icon-info\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Please enter the following required information before creating the share'))+\"\\n\\t\\t\")]),_vm._v(\" \"),(_vm.pendingEnforcedPassword)?_c('NcActionText',{attrs:{\"icon\":\"icon-password\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Password protection (enforced)'))+\"\\n\\t\\t\")]):(_vm.pendingPassword)?_c('NcActionCheckbox',{staticClass:\"share-link-password-checkbox\",attrs:{\"checked\":_vm.isPasswordProtected,\"disabled\":_vm.config.enforcePasswordForPublicLink || _vm.saving},on:{\"update:checked\":function($event){_vm.isPasswordProtected=$event},\"uncheck\":_vm.onPasswordDisable}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Password protection'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.pendingEnforcedPassword || _vm.share.password)?_c('NcActionInput',{staticClass:\"share-link-password\",attrs:{\"value\":_vm.share.password,\"disabled\":_vm.saving,\"required\":_vm.config.enableLinkPasswordByDefault || _vm.config.enforcePasswordForPublicLink,\"minlength\":_vm.isPasswordPolicyEnabled && _vm.config.passwordPolicy.minLength,\"icon\":\"\",\"autocomplete\":\"new-password\"},on:{\"update:value\":function($event){return _vm.$set(_vm.share, \"password\", $event)},\"submit\":_vm.onNewLinkShare}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Enter a password'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.pendingExpirationDate)?_c('NcActionText',{attrs:{\"icon\":\"icon-calendar-dark\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Expiration date (enforced)'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.pendingExpirationDate)?_c('NcActionInput',{staticClass:\"share-link-expire-date\",attrs:{\"disabled\":_vm.saving,\"is-native-picker\":true,\"hide-label\":true,\"value\":new Date(_vm.share.expireDate),\"type\":\"date\",\"min\":_vm.dateTomorrow,\"max\":_vm.dateMaxEnforced},on:{\"input\":_vm.onExpirationChange}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Enter a date'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"icon\":\"icon-checkmark\"},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.onNewLinkShare.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Create share'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"icon\":\"icon-close\"},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.onCancel.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Cancel'))+\"\\n\\t\\t\")])],1):(!_vm.loading)?_c('NcActions',{staticClass:\"sharing-entry__actions\",attrs:{\"aria-label\":_vm.actionsTooltip,\"menu-align\":\"right\",\"open\":_vm.open},on:{\"update:open\":function($event){_vm.open=$event},\"close\":_vm.onMenuClose}},[(_vm.share)?[(_vm.share.canEdit && _vm.canReshare)?[_c('NcActionInput',{ref:\"label\",class:{ error: _vm.errors.label },attrs:{\"disabled\":_vm.saving,\"label\":_vm.t('files_sharing', 'Share label'),\"value\":_vm.share.newLabel !== undefined ? _vm.share.newLabel : _vm.share.label,\"icon\":\"icon-edit\",\"maxlength\":\"255\"},on:{\"update:value\":_vm.onLabelChange,\"submit\":_vm.onLabelSubmit}}),_vm._v(\" \"),_c('SharePermissionsEditor',{attrs:{\"can-reshare\":_vm.canReshare,\"share\":_vm.share,\"file-info\":_vm.fileInfo},on:{\"update:share\":function($event){_vm.share=$event}}}),_vm._v(\" \"),_c('NcActionSeparator'),_vm._v(\" \"),_c('NcActionCheckbox',{attrs:{\"checked\":_vm.share.hideDownload,\"disabled\":_vm.saving || _vm.canChangeHideDownload},on:{\"update:checked\":function($event){return _vm.$set(_vm.share, \"hideDownload\", $event)},\"change\":function($event){return _vm.queueUpdate('hideDownload')}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Hide download'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionCheckbox',{staticClass:\"share-link-password-checkbox\",attrs:{\"checked\":_vm.isPasswordProtected,\"disabled\":_vm.config.enforcePasswordForPublicLink || _vm.saving},on:{\"update:checked\":function($event){_vm.isPasswordProtected=$event},\"uncheck\":_vm.onPasswordDisable}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.config.enforcePasswordForPublicLink\n\t\t\t\t\t\t? _vm.t('files_sharing', 'Password protection (enforced)')\n\t\t\t\t\t\t: _vm.t('files_sharing', 'Password protect'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),(_vm.isPasswordProtected)?_c('NcActionInput',{ref:\"password\",staticClass:\"share-link-password\",class:{ error: _vm.errors.password},attrs:{\"disabled\":_vm.saving,\"required\":_vm.config.enforcePasswordForPublicLink,\"value\":_vm.hasUnsavedPassword ? _vm.share.newPassword : '***************',\"icon\":\"icon-password\",\"autocomplete\":\"new-password\",\"type\":_vm.hasUnsavedPassword ? 'text': 'password'},on:{\"update:value\":_vm.onPasswordChange,\"submit\":_vm.onPasswordSubmit}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Enter a password'))+\"\\n\\t\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.isEmailShareType && _vm.passwordExpirationTime)?_c('NcActionText',{attrs:{\"icon\":\"icon-info\"}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Password expires {passwordExpirationTime}', {passwordExpirationTime: _vm.passwordExpirationTime}))+\"\\n\\t\\t\\t\\t\")]):(_vm.isEmailShareType && _vm.passwordExpirationTime !== null)?_c('NcActionText',{attrs:{\"icon\":\"icon-error\"}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Password expired'))+\"\\n\\t\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.isPasswordProtectedByTalkAvailable)?_c('NcActionCheckbox',{staticClass:\"share-link-password-talk-checkbox\",attrs:{\"checked\":_vm.isPasswordProtectedByTalk,\"disabled\":!_vm.canTogglePasswordProtectedByTalkAvailable || _vm.saving},on:{\"update:checked\":function($event){_vm.isPasswordProtectedByTalk=$event},\"change\":_vm.onPasswordProtectedByTalkChange}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Video verification'))+\"\\n\\t\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('NcActionCheckbox',{staticClass:\"share-link-expire-date-checkbox\",attrs:{\"checked\":_vm.hasExpirationDate,\"disabled\":_vm.config.isDefaultExpireDateEnforced || _vm.saving},on:{\"update:checked\":function($event){_vm.hasExpirationDate=$event},\"uncheck\":_vm.onExpirationDisable}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.config.isDefaultExpireDateEnforced\n\t\t\t\t\t\t? _vm.t('files_sharing', 'Expiration date (enforced)')\n\t\t\t\t\t\t: _vm.t('files_sharing', 'Set expiration date'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),(_vm.hasExpirationDate)?_c('NcActionInput',{ref:\"expireDate\",staticClass:\"share-link-expire-date\",class:{ error: _vm.errors.expireDate},attrs:{\"is-native-picker\":true,\"hide-label\":true,\"disabled\":_vm.saving,\"value\":new Date(_vm.share.expireDate),\"type\":\"date\",\"min\":_vm.dateTomorrow,\"max\":_vm.dateMaxEnforced},on:{\"input\":_vm.onExpirationChange}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Enter a date'))+\"\\n\\t\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('NcActionCheckbox',{attrs:{\"checked\":_vm.hasNote,\"disabled\":_vm.saving},on:{\"update:checked\":function($event){_vm.hasNote=$event},\"uncheck\":function($event){return _vm.queueUpdate('note')}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Note to recipient'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),(_vm.hasNote)?_c('NcActionTextEditable',{ref:\"note\",class:{ error: _vm.errors.note},attrs:{\"disabled\":_vm.saving,\"placeholder\":_vm.t('files_sharing', 'Enter a note for the share recipient'),\"value\":_vm.share.newNote || _vm.share.note,\"icon\":\"icon-edit\"},on:{\"update:value\":_vm.onNoteChange,\"submit\":_vm.onNoteSubmit}}):_vm._e()]:_vm._e(),_vm._v(\" \"),_c('NcActionSeparator'),_vm._v(\" \"),_vm._l((_vm.externalLinkActions),function(action){return _c('ExternalShareAction',{key:action.id,attrs:{\"id\":action.id,\"action\":action,\"file-info\":_vm.fileInfo,\"share\":_vm.share}})}),_vm._v(\" \"),_vm._l((_vm.externalLegacyLinkActions),function({icon, url, name},index){return _c('NcActionLink',{key:index,attrs:{\"href\":url(_vm.shareLink),\"icon\":icon,\"target\":\"_blank\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(name)+\"\\n\\t\\t\\t\")])}),_vm._v(\" \"),(_vm.share.canDelete)?_c('NcActionButton',{attrs:{\"icon\":\"icon-close\",\"disabled\":_vm.saving},on:{\"click\":function($event){$event.preventDefault();return _vm.onDelete.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Unshare'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(!_vm.isEmailShareType && _vm.canReshare)?_c('NcActionButton',{staticClass:\"new-share-link\",attrs:{\"icon\":\"icon-add\"},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.onNewLinkShare.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Add another link'))+\"\\n\\t\\t\\t\")]):_vm._e()]:(_vm.canReshare)?_c('NcActionButton',{staticClass:\"new-share-link\",attrs:{\"title\":_vm.t('files_sharing', 'Create a new share link'),\"aria-label\":_vm.t('files_sharing', 'Create a new share link'),\"icon\":_vm.loading ? 'icon-loading-small' : 'icon-add'},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.onNewLinkShare.apply(null, arguments)}}}):_vm._e()],2):_c('div',{staticClass:\"icon-loading-small sharing-entry__loading\"})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingLinkList.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!./SharingLinkList.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<ul v-if=\"canLinkShare\" class=\"sharing-link-list\">\n\t\t<!-- If no link shares, show the add link default entry -->\n\t\t<SharingEntryLink v-if=\"!hasLinkShares && canReshare\"\n\t\t\t:can-reshare=\"canReshare\"\n\t\t\t:file-info=\"fileInfo\"\n\t\t\t@add:share=\"addShare\" />\n\n\t\t<!-- Else we display the list -->\n\t\t<template v-if=\"hasShares\">\n\t\t\t<!-- using shares[index] to work with .sync -->\n\t\t\t<SharingEntryLink v-for=\"(share, index) in shares\"\n\t\t\t\t:key=\"share.id\"\n\t\t\t\t:index=\"shares.length > 1 ? index + 1 : null\"\n\t\t\t\t:can-reshare=\"canReshare\"\n\t\t\t\t:share.sync=\"shares[index]\"\n\t\t\t\t:file-info=\"fileInfo\"\n\t\t\t\t@add:share=\"addShare(...arguments)\"\n\t\t\t\t@update:share=\"awaitForShare(...arguments)\"\n\t\t\t\t@remove:share=\"removeShare\" />\n\t\t</template>\n\t</ul>\n</template>\n\n<script>\n// eslint-disable-next-line no-unused-vars\nimport Share from '../models/Share'\nimport ShareTypes from '../mixins/ShareTypes'\nimport SharingEntryLink from '../components/SharingEntryLink'\n\nexport default {\n\tname: 'SharingLinkList',\n\n\tcomponents: {\n\t\tSharingEntryLink,\n\t},\n\n\tmixins: [ShareTypes],\n\n\tprops: {\n\t\tfileInfo: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => {},\n\t\t\trequired: true,\n\t\t},\n\t\tshares: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t\trequired: true,\n\t\t},\n\t\tcanReshare: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tcanLinkShare: OC.getCapabilities().files_sharing.public.enabled,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Do we have link shares?\n\t\t * Using this to still show the `new link share`\n\t\t * button regardless of mail shares\n\t\t *\n\t\t * @return {Array}\n\t\t */\n\t\thasLinkShares() {\n\t\t\treturn this.shares.filter(share => share.type === this.SHARE_TYPES.SHARE_TYPE_LINK).length > 0\n\t\t},\n\n\t\t/**\n\t\t * Do we have any link or email shares?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\thasShares() {\n\t\t\treturn this.shares.length > 0\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Add a new share into the link shares list\n\t\t * and return the newly created share component\n\t\t *\n\t\t * @param {Share} share the share to add to the array\n\t\t * @param {Function} resolve a function to run after the share is added and its component initialized\n\t\t */\n\t\taddShare(share, resolve) {\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.shares.unshift(share)\n\t\t\tthis.awaitForShare(share, resolve)\n\t\t},\n\n\t\t/**\n\t\t * Await for next tick and render after the list updated\n\t\t * Then resolve with the matched vue component of the\n\t\t * provided share object\n\t\t *\n\t\t * @param {Share} share newly created share\n\t\t * @param {Function} resolve a function to execute after\n\t\t */\n\t\tawaitForShare(share, resolve) {\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tconst newShare = this.$children.find(component => component.share === share)\n\t\t\t\tif (newShare) {\n\t\t\t\t\tresolve(newShare)\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Remove a share from the shares list\n\t\t *\n\t\t * @param {Share} share the share to remove\n\t\t */\n\t\tremoveShare(share) {\n\t\t\tconst index = this.shares.findIndex(item => item === share)\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.shares.splice(index, 1)\n\t\t},\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./SharingLinkList.vue?vue&type=template&id=537e15c5&\"\nimport script from \"./SharingLinkList.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingLinkList.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.canLinkShare)?_c('ul',{staticClass:\"sharing-link-list\"},[(!_vm.hasLinkShares && _vm.canReshare)?_c('SharingEntryLink',{attrs:{\"can-reshare\":_vm.canReshare,\"file-info\":_vm.fileInfo},on:{\"add:share\":_vm.addShare}}):_vm._e(),_vm._v(\" \"),(_vm.hasShares)?_vm._l((_vm.shares),function(share,index){return _c('SharingEntryLink',{key:share.id,attrs:{\"index\":_vm.shares.length > 1 ? index + 1 : null,\"can-reshare\":_vm.canReshare,\"share\":_vm.shares[index],\"file-info\":_vm.fileInfo},on:{\"update:share\":[function($event){return _vm.$set(_vm.shares, index, $event)},function($event){return _vm.awaitForShare(...arguments)}],\"add:share\":function($event){return _vm.addShare(...arguments)},\"remove:share\":_vm.removeShare}})}):_vm._e()],2):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<li class=\"sharing-entry\">\n\t\t<NcAvatar class=\"sharing-entry__avatar\"\n\t\t\t:is-no-user=\"share.type !== SHARE_TYPES.SHARE_TYPE_USER\"\n\t\t\t:user=\"share.shareWith\"\n\t\t\t:display-name=\"share.shareWithDisplayName\"\n\t\t\t:menu-position=\"'left'\"\n\t\t\t:url=\"share.shareWithAvatar\" />\n\n\t\t<component :is=\"share.shareWithLink ? 'a' : 'div'\"\n\t\t\t:title=\"tooltip\"\n\t\t\t:aria-label=\"tooltip\"\n\t\t\t:href=\"share.shareWithLink\"\n\t\t\tclass=\"sharing-entry__desc\">\n\t\t\t<span>{{ title }}<span v-if=\"!isUnique\" class=\"sharing-entry__desc-unique\"> ({{ share.shareWithDisplayNameUnique }})</span></span>\n\t\t\t<p v-if=\"hasStatus\">\n\t\t\t\t<span>{{ share.status.icon || '' }}</span>\n\t\t\t\t<span>{{ share.status.message || '' }}</span>\n\t\t\t</p>\n\t\t</component>\n\t\t<NcActions menu-align=\"right\"\n\t\t\tclass=\"sharing-entry__actions\"\n\t\t\t@close=\"onMenuClose\">\n\t\t\t<template v-if=\"share.canEdit\">\n\t\t\t\t<!-- edit permission -->\n\t\t\t\t<NcActionCheckbox ref=\"canEdit\"\n\t\t\t\t\t:checked.sync=\"canEdit\"\n\t\t\t\t\t:value=\"permissionsEdit\"\n\t\t\t\t\t:disabled=\"saving || !canSetEdit\">\n\t\t\t\t\t{{ t('files_sharing', 'Allow editing') }}\n\t\t\t\t</NcActionCheckbox>\n\n\t\t\t\t<!-- create permission -->\n\t\t\t\t<NcActionCheckbox v-if=\"isFolder\"\n\t\t\t\t\tref=\"canCreate\"\n\t\t\t\t\t:checked.sync=\"canCreate\"\n\t\t\t\t\t:value=\"permissionsCreate\"\n\t\t\t\t\t:disabled=\"saving || !canSetCreate\">\n\t\t\t\t\t{{ t('files_sharing', 'Allow creating') }}\n\t\t\t\t</NcActionCheckbox>\n\n\t\t\t\t<!-- delete permission -->\n\t\t\t\t<NcActionCheckbox v-if=\"isFolder\"\n\t\t\t\t\tref=\"canDelete\"\n\t\t\t\t\t:checked.sync=\"canDelete\"\n\t\t\t\t\t:value=\"permissionsDelete\"\n\t\t\t\t\t:disabled=\"saving || !canSetDelete\">\n\t\t\t\t\t{{ t('files_sharing', 'Allow deleting') }}\n\t\t\t\t</NcActionCheckbox>\n\n\t\t\t\t<!-- reshare permission -->\n\t\t\t\t<NcActionCheckbox v-if=\"config.isResharingAllowed\"\n\t\t\t\t\tref=\"canReshare\"\n\t\t\t\t\t:checked.sync=\"canReshare\"\n\t\t\t\t\t:value=\"permissionsShare\"\n\t\t\t\t\t:disabled=\"saving || !canSetReshare\">\n\t\t\t\t\t{{ t('files_sharing', 'Allow resharing') }}\n\t\t\t\t</NcActionCheckbox>\n\n\t\t\t\t<NcActionCheckbox v-if=\"isSetDownloadButtonVisible\"\n\t\t\t\t\tref=\"canDownload\"\n\t\t\t\t\t:checked.sync=\"canDownload\"\n\t\t\t\t\t:disabled=\"saving || !canSetDownload\">\n\t\t\t\t\t{{ allowDownloadText }}\n\t\t\t\t</NcActionCheckbox>\n\n\t\t\t\t<!-- expiration date -->\n\t\t\t\t<NcActionCheckbox :checked.sync=\"hasExpirationDate\"\n\t\t\t\t\t:disabled=\"config.isDefaultInternalExpireDateEnforced || saving\"\n\t\t\t\t\t@uncheck=\"onExpirationDisable\">\n\t\t\t\t\t{{ config.isDefaultInternalExpireDateEnforced\n\t\t\t\t\t\t? t('files_sharing', 'Expiration date enforced')\n\t\t\t\t\t\t: t('files_sharing', 'Set expiration date') }}\n\t\t\t\t</NcActionCheckbox>\n\t\t\t\t<NcActionInput v-if=\"hasExpirationDate\"\n\t\t\t\t\tref=\"expireDate\"\n\t\t\t\t\t:is-native-picker=\"true\"\n\t\t\t\t\t:hide-label=\"true\"\n\t\t\t\t\t:class=\"{ error: errors.expireDate}\"\n\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t:value=\"new Date(share.expireDate)\"\n\t\t\t\t\ttype=\"date\"\n\t\t\t\t\t:min=\"dateTomorrow\"\n\t\t\t\t\t:max=\"dateMaxEnforced\"\n\t\t\t\t\t@input=\"onExpirationChange\">\n\t\t\t\t\t{{ t('files_sharing', 'Enter a date') }}\n\t\t\t\t</NcActionInput>\n\n\t\t\t\t<!-- note -->\n\t\t\t\t<template v-if=\"canHaveNote\">\n\t\t\t\t\t<NcActionCheckbox :checked.sync=\"hasNote\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t@uncheck=\"queueUpdate('note')\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Note to recipient') }}\n\t\t\t\t\t</NcActionCheckbox>\n\t\t\t\t\t<NcActionTextEditable v-if=\"hasNote\"\n\t\t\t\t\t\tref=\"note\"\n\t\t\t\t\t\t:class=\"{ error: errors.note}\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t:value=\"share.newNote || share.note\"\n\t\t\t\t\t\ticon=\"icon-edit\"\n\t\t\t\t\t\t@update:value=\"onNoteChange\"\n\t\t\t\t\t\t@submit=\"onNoteSubmit\" />\n\t\t\t\t</template>\n\t\t\t</template>\n\n\t\t\t<NcActionButton v-if=\"share.canDelete\"\n\t\t\t\ticon=\"icon-close\"\n\t\t\t\t:disabled=\"saving\"\n\t\t\t\t@click.prevent=\"onDelete\">\n\t\t\t\t{{ t('files_sharing', 'Unshare') }}\n\t\t\t</NcActionButton>\n\t\t</NcActions>\n\t</li>\n</template>\n\n<script>\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions'\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton'\nimport NcActionCheckbox from '@nextcloud/vue/dist/Components/NcActionCheckbox'\nimport NcActionInput from '@nextcloud/vue/dist/Components/NcActionInput'\nimport NcActionTextEditable from '@nextcloud/vue/dist/Components/NcActionTextEditable'\n\nimport SharesMixin from '../mixins/SharesMixin.js'\n\nexport default {\n\tname: 'SharingEntry',\n\n\tcomponents: {\n\t\tNcActions,\n\t\tNcActionButton,\n\t\tNcActionCheckbox,\n\t\tNcActionInput,\n\t\tNcActionTextEditable,\n\t\tNcAvatar,\n\t},\n\n\tmixins: [SharesMixin],\n\n\tdata() {\n\t\treturn {\n\t\t\tpermissionsEdit: OC.PERMISSION_UPDATE,\n\t\t\tpermissionsCreate: OC.PERMISSION_CREATE,\n\t\t\tpermissionsDelete: OC.PERMISSION_DELETE,\n\t\t\tpermissionsRead: OC.PERMISSION_READ,\n\t\t\tpermissionsShare: OC.PERMISSION_SHARE,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\ttitle() {\n\t\t\tlet title = this.share.shareWithDisplayName\n\t\t\tif (this.share.type === this.SHARE_TYPES.SHARE_TYPE_GROUP) {\n\t\t\t\ttitle += ` (${t('files_sharing', 'group')})`\n\t\t\t} else if (this.share.type === this.SHARE_TYPES.SHARE_TYPE_ROOM) {\n\t\t\t\ttitle += ` (${t('files_sharing', 'conversation')})`\n\t\t\t} else if (this.share.type === this.SHARE_TYPES.SHARE_TYPE_REMOTE) {\n\t\t\t\ttitle += ` (${t('files_sharing', 'remote')})`\n\t\t\t} else if (this.share.type === this.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP) {\n\t\t\t\ttitle += ` (${t('files_sharing', 'remote group')})`\n\t\t\t} else if (this.share.type === this.SHARE_TYPES.SHARE_TYPE_GUEST) {\n\t\t\t\ttitle += ` (${t('files_sharing', 'guest')})`\n\t\t\t}\n\t\t\treturn title\n\t\t},\n\n\t\ttooltip() {\n\t\t\tif (this.share.owner !== this.share.uidFileOwner) {\n\t\t\t\tconst data = {\n\t\t\t\t\t// todo: strong or italic?\n\t\t\t\t\t// but the t function escape any html from the data :/\n\t\t\t\t\tuser: this.share.shareWithDisplayName,\n\t\t\t\t\towner: this.share.ownerDisplayName,\n\t\t\t\t}\n\t\t\t\tif (this.share.type === this.SHARE_TYPES.SHARE_TYPE_GROUP) {\n\t\t\t\t\treturn t('files_sharing', 'Shared with the group {user} by {owner}', data)\n\t\t\t\t} else if (this.share.type === this.SHARE_TYPES.SHARE_TYPE_ROOM) {\n\t\t\t\t\treturn t('files_sharing', 'Shared with the conversation {user} by {owner}', data)\n\t\t\t\t}\n\n\t\t\t\treturn t('files_sharing', 'Shared with {user} by {owner}', data)\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\tcanHaveNote() {\n\t\t\treturn !this.isRemote\n\t\t},\n\n\t\tisRemote() {\n\t\t\treturn this.share.type === this.SHARE_TYPES.SHARE_TYPE_REMOTE\n\t\t\t\t|| this.share.type === this.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP\n\t\t},\n\n\t\t/**\n\t\t * Can the sharer set whether the sharee can edit the file ?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tcanSetEdit() {\n\t\t\t// If the owner revoked the permission after the resharer granted it\n\t\t\t// the share still has the permission, and the resharer is still\n\t\t\t// allowed to revoke it too (but not to grant it again).\n\t\t\treturn (this.fileInfo.sharePermissions & OC.PERMISSION_UPDATE) || this.canEdit\n\t\t},\n\n\t\t/**\n\t\t * Can the sharer set whether the sharee can create the file ?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tcanSetCreate() {\n\t\t\t// If the owner revoked the permission after the resharer granted it\n\t\t\t// the share still has the permission, and the resharer is still\n\t\t\t// allowed to revoke it too (but not to grant it again).\n\t\t\treturn (this.fileInfo.sharePermissions & OC.PERMISSION_CREATE) || this.canCreate\n\t\t},\n\n\t\t/**\n\t\t * Can the sharer set whether the sharee can delete the file ?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tcanSetDelete() {\n\t\t\t// If the owner revoked the permission after the resharer granted it\n\t\t\t// the share still has the permission, and the resharer is still\n\t\t\t// allowed to revoke it too (but not to grant it again).\n\t\t\treturn (this.fileInfo.sharePermissions & OC.PERMISSION_DELETE) || this.canDelete\n\t\t},\n\n\t\t/**\n\t\t * Can the sharer set whether the sharee can reshare the file ?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tcanSetReshare() {\n\t\t\t// If the owner revoked the permission after the resharer granted it\n\t\t\t// the share still has the permission, and the resharer is still\n\t\t\t// allowed to revoke it too (but not to grant it again).\n\t\t\treturn (this.fileInfo.sharePermissions & OC.PERMISSION_SHARE) || this.canReshare\n\t\t},\n\n\t\t/**\n\t\t * Can the sharer set whether the sharee can download the file ?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tcanSetDownload() {\n\t\t\t// If the owner revoked the permission after the resharer granted it\n\t\t\t// the share still has the permission, and the resharer is still\n\t\t\t// allowed to revoke it too (but not to grant it again).\n\t\t\treturn (this.fileInfo.canDownload() || this.canDownload)\n\t\t},\n\n\t\t/**\n\t\t * Can the sharee edit the shared file ?\n\t\t */\n\t\tcanEdit: {\n\t\t\tget() {\n\t\t\t\treturn this.share.hasUpdatePermission\n\t\t\t},\n\t\t\tset(checked) {\n\t\t\t\tthis.updatePermissions({ isEditChecked: checked })\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Can the sharee create the shared file ?\n\t\t */\n\t\tcanCreate: {\n\t\t\tget() {\n\t\t\t\treturn this.share.hasCreatePermission\n\t\t\t},\n\t\t\tset(checked) {\n\t\t\t\tthis.updatePermissions({ isCreateChecked: checked })\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Can the sharee delete the shared file ?\n\t\t */\n\t\tcanDelete: {\n\t\t\tget() {\n\t\t\t\treturn this.share.hasDeletePermission\n\t\t\t},\n\t\t\tset(checked) {\n\t\t\t\tthis.updatePermissions({ isDeleteChecked: checked })\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Can the sharee reshare the file ?\n\t\t */\n\t\tcanReshare: {\n\t\t\tget() {\n\t\t\t\treturn this.share.hasSharePermission\n\t\t\t},\n\t\t\tset(checked) {\n\t\t\t\tthis.updatePermissions({ isReshareChecked: checked })\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Can the sharee download files or only view them ?\n\t\t */\n\t\tcanDownload: {\n\t\t\tget() {\n\t\t\t\treturn this.share.hasDownloadPermission\n\t\t\t},\n\t\t\tset(checked) {\n\t\t\t\tthis.updatePermissions({ isDownloadChecked: checked })\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Is this share readable\n\t\t * Needed for some federated shares that might have been added from file drop links\n\t\t */\n\t\thasRead: {\n\t\t\tget() {\n\t\t\t\treturn this.share.hasReadPermission\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Is the current share a folder ?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisFolder() {\n\t\t\treturn this.fileInfo.type === 'dir'\n\t\t},\n\n\t\t/**\n\t\t * Does the current share have an expiration date\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\thasExpirationDate: {\n\t\t\tget() {\n\t\t\t\treturn this.config.isDefaultInternalExpireDateEnforced || !!this.share.expireDate\n\t\t\t},\n\t\t\tset(enabled) {\n\t\t\t\tconst defaultExpirationDate = this.config.defaultInternalExpirationDate\n\t\t\t\t\t|| new Date(new Date().setDate(new Date().getDate() + 1))\n\t\t\t\tthis.share.expireDate = enabled\n\t\t\t\t\t? this.formatDateToString(defaultExpirationDate)\n\t\t\t\t\t: ''\n\t\t\t\tconsole.debug('Expiration date status', enabled, this.share.expireDate)\n\t\t\t},\n\t\t},\n\n\t\tdateMaxEnforced() {\n\t\t\tif (!this.isRemote && this.config.isDefaultInternalExpireDateEnforced) {\n\t\t\t\treturn new Date(new Date().setDate(new Date().getDate() + 1 + this.config.defaultInternalExpireDate))\n\t\t\t} else if (this.config.isDefaultRemoteExpireDateEnforced) {\n\t\t\t\treturn new Date(new Date().setDate(new Date().getDate() + 1 + this.config.defaultRemoteExpireDate))\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\t/**\n\t\t * @return {boolean}\n\t\t */\n\t\thasStatus() {\n\t\t\tif (this.share.type !== this.SHARE_TYPES.SHARE_TYPE_USER) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\treturn (typeof this.share.status === 'object' && !Array.isArray(this.share.status))\n\t\t},\n\n\t\t/**\n\t\t * @return {string}\n\t\t */\n\t\tallowDownloadText() {\n\t\t\treturn t('files_sharing', 'Allow download')\n\t\t},\n\n\t\t/**\n\t\t * @return {boolean}\n\t\t */\n\t\tisSetDownloadButtonVisible() {\n\t\t\t// TODO: Implement download permission for circle shares instead of hiding the option.\n\t\t\t// https://github.com/nextcloud/server/issues/39161\n\t\t\tif (this.share && this.share.type === this.SHARE_TYPES.SHARE_TYPE_CIRCLE) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tconst allowedMimetypes = [\n\t\t\t\t// Office documents\n\t\t\t\t'application/msword',\n\t\t\t\t'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n\t\t\t\t'application/vnd.ms-powerpoint',\n\t\t\t\t'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n\t\t\t\t'application/vnd.ms-excel',\n\t\t\t\t'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n\t\t\t\t'application/vnd.oasis.opendocument.text',\n\t\t\t\t'application/vnd.oasis.opendocument.spreadsheet',\n\t\t\t\t'application/vnd.oasis.opendocument.presentation',\n\t\t\t]\n\n\t\t\treturn this.isFolder || allowedMimetypes.includes(this.fileInfo.mimetype)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tupdatePermissions({\n\t\t\tisEditChecked = this.canEdit,\n\t\t\tisCreateChecked = this.canCreate,\n\t\t\tisDeleteChecked = this.canDelete,\n\t\t\tisReshareChecked = this.canReshare,\n\t\t\tisDownloadChecked = this.canDownload,\n\t\t} = {}) {\n\t\t\t// calc permissions if checked\n\t\t\tconst permissions = 0\n\t\t\t\t| (this.hasRead ? this.permissionsRead : 0)\n\t\t\t\t| (isCreateChecked ? this.permissionsCreate : 0)\n\t\t\t\t| (isDeleteChecked ? this.permissionsDelete : 0)\n\t\t\t\t| (isEditChecked ? this.permissionsEdit : 0)\n\t\t\t\t| (isReshareChecked ? this.permissionsShare : 0)\n\n\t\t\tthis.share.permissions = permissions\n\t\t\tif (this.share.hasDownloadPermission !== isDownloadChecked) {\n\t\t\t\tthis.share.hasDownloadPermission = isDownloadChecked\n\t\t\t}\n\t\t\tthis.queueUpdate('permissions', 'attributes')\n\t\t},\n\n\t\t/**\n\t\t * Save potential changed data on menu close\n\t\t */\n\t\tonMenuClose() {\n\t\t\tthis.onNoteSubmit()\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.sharing-entry {\n\tdisplay: flex;\n\talign-items: center;\n\theight: 44px;\n\t&__desc {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tjustify-content: space-between;\n\t\tpadding: 8px;\n\t\tline-height: 1.2em;\n\t\tp {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t\t&-unique {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n\t&__actions {\n\t\tmargin-left: auto;\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntry.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!./SharingEntry.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntry.vue?vue&type=style&index=0&id=0d6fcc6a&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntry.vue?vue&type=style&index=0&id=0d6fcc6a&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SharingEntry.vue?vue&type=template&id=0d6fcc6a&scoped=true&\"\nimport script from \"./SharingEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingEntry.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SharingEntry.vue?vue&type=style&index=0&id=0d6fcc6a&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0d6fcc6a\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('li',{staticClass:\"sharing-entry\"},[_c('NcAvatar',{staticClass:\"sharing-entry__avatar\",attrs:{\"is-no-user\":_vm.share.type !== _vm.SHARE_TYPES.SHARE_TYPE_USER,\"user\":_vm.share.shareWith,\"display-name\":_vm.share.shareWithDisplayName,\"menu-position\":'left',\"url\":_vm.share.shareWithAvatar}}),_vm._v(\" \"),_c(_vm.share.shareWithLink ? 'a' : 'div',{tag:\"component\",staticClass:\"sharing-entry__desc\",attrs:{\"title\":_vm.tooltip,\"aria-label\":_vm.tooltip,\"href\":_vm.share.shareWithLink}},[_c('span',[_vm._v(_vm._s(_vm.title)),(!_vm.isUnique)?_c('span',{staticClass:\"sharing-entry__desc-unique\"},[_vm._v(\" (\"+_vm._s(_vm.share.shareWithDisplayNameUnique)+\")\")]):_vm._e()]),_vm._v(\" \"),(_vm.hasStatus)?_c('p',[_c('span',[_vm._v(_vm._s(_vm.share.status.icon || ''))]),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(_vm.share.status.message || ''))])]):_vm._e()]),_vm._v(\" \"),_c('NcActions',{staticClass:\"sharing-entry__actions\",attrs:{\"menu-align\":\"right\"},on:{\"close\":_vm.onMenuClose}},[(_vm.share.canEdit)?[_c('NcActionCheckbox',{ref:\"canEdit\",attrs:{\"checked\":_vm.canEdit,\"value\":_vm.permissionsEdit,\"disabled\":_vm.saving || !_vm.canSetEdit},on:{\"update:checked\":function($event){_vm.canEdit=$event}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Allow editing'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),(_vm.isFolder)?_c('NcActionCheckbox',{ref:\"canCreate\",attrs:{\"checked\":_vm.canCreate,\"value\":_vm.permissionsCreate,\"disabled\":_vm.saving || !_vm.canSetCreate},on:{\"update:checked\":function($event){_vm.canCreate=$event}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Allow creating'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.isFolder)?_c('NcActionCheckbox',{ref:\"canDelete\",attrs:{\"checked\":_vm.canDelete,\"value\":_vm.permissionsDelete,\"disabled\":_vm.saving || !_vm.canSetDelete},on:{\"update:checked\":function($event){_vm.canDelete=$event}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Allow deleting'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.config.isResharingAllowed)?_c('NcActionCheckbox',{ref:\"canReshare\",attrs:{\"checked\":_vm.canReshare,\"value\":_vm.permissionsShare,\"disabled\":_vm.saving || !_vm.canSetReshare},on:{\"update:checked\":function($event){_vm.canReshare=$event}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Allow resharing'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.isSetDownloadButtonVisible)?_c('NcActionCheckbox',{ref:\"canDownload\",attrs:{\"checked\":_vm.canDownload,\"disabled\":_vm.saving || !_vm.canSetDownload},on:{\"update:checked\":function($event){_vm.canDownload=$event}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.allowDownloadText)+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('NcActionCheckbox',{attrs:{\"checked\":_vm.hasExpirationDate,\"disabled\":_vm.config.isDefaultInternalExpireDateEnforced || _vm.saving},on:{\"update:checked\":function($event){_vm.hasExpirationDate=$event},\"uncheck\":_vm.onExpirationDisable}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.config.isDefaultInternalExpireDateEnforced\n\t\t\t\t\t? _vm.t('files_sharing', 'Expiration date enforced')\n\t\t\t\t\t: _vm.t('files_sharing', 'Set expiration date'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),(_vm.hasExpirationDate)?_c('NcActionInput',{ref:\"expireDate\",class:{ error: _vm.errors.expireDate},attrs:{\"is-native-picker\":true,\"hide-label\":true,\"disabled\":_vm.saving,\"value\":new Date(_vm.share.expireDate),\"type\":\"date\",\"min\":_vm.dateTomorrow,\"max\":_vm.dateMaxEnforced},on:{\"input\":_vm.onExpirationChange}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Enter a date'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.canHaveNote)?[_c('NcActionCheckbox',{attrs:{\"checked\":_vm.hasNote,\"disabled\":_vm.saving},on:{\"update:checked\":function($event){_vm.hasNote=$event},\"uncheck\":function($event){return _vm.queueUpdate('note')}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Note to recipient'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),(_vm.hasNote)?_c('NcActionTextEditable',{ref:\"note\",class:{ error: _vm.errors.note},attrs:{\"disabled\":_vm.saving,\"value\":_vm.share.newNote || _vm.share.note,\"icon\":\"icon-edit\"},on:{\"update:value\":_vm.onNoteChange,\"submit\":_vm.onNoteSubmit}}):_vm._e()]:_vm._e()]:_vm._e(),_vm._v(\" \"),(_vm.share.canDelete)?_c('NcActionButton',{attrs:{\"icon\":\"icon-close\",\"disabled\":_vm.saving},on:{\"click\":function($event){$event.preventDefault();return _vm.onDelete.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Unshare'))+\"\\n\\t\\t\")]):_vm._e()],2)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<ul class=\"sharing-sharee-list\">\n\t\t<SharingEntry v-for=\"share in shares\"\n\t\t\t:key=\"share.id\"\n\t\t\t:file-info=\"fileInfo\"\n\t\t\t:share=\"share\"\n\t\t\t:is-unique=\"isUnique(share)\"\n\t\t\t@remove:share=\"removeShare\" />\n\t</ul>\n</template>\n\n<script>\n// eslint-disable-next-line no-unused-vars\nimport Share from '../models/Share'\nimport SharingEntry from '../components/SharingEntry'\nimport ShareTypes from '../mixins/ShareTypes'\n\nexport default {\n\tname: 'SharingList',\n\n\tcomponents: {\n\t\tSharingEntry,\n\t},\n\n\tmixins: [ShareTypes],\n\n\tprops: {\n\t\tfileInfo: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => {},\n\t\t\trequired: true,\n\t\t},\n\t\tshares: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\thasShares() {\n\t\t\treturn this.shares.length === 0\n\t\t},\n\t\tisUnique() {\n\t\t\treturn (share) => {\n\t\t\t\treturn [...this.shares].filter((item) => {\n\t\t\t\t\treturn share.type === this.SHARE_TYPES.SHARE_TYPE_USER && share.shareWithDisplayName === item.shareWithDisplayName\n\t\t\t\t}).length <= 1\n\t\t\t}\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Remove a share from the shares list\n\t\t *\n\t\t * @param {Share} share the share to remove\n\t\t */\n\t\tremoveShare(share) {\n\t\t\tconst index = this.shares.findIndex(item => item === share)\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.shares.splice(index, 1)\n\t\t},\n\t},\n}\n</script>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingList.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!./SharingList.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SharingList.vue?vue&type=template&id=0b29d4c0&\"\nimport script from \"./SharingList.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingList.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('ul',{staticClass:\"sharing-sharee-list\"},_vm._l((_vm.shares),function(share){return _c('SharingEntry',{key:share.id,attrs:{\"file-info\":_vm.fileInfo,\"share\":share,\"is-unique\":_vm.isUnique(share)},on:{\"remove:share\":_vm.removeShare}})}),1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div :class=\"{ 'icon-loading': loading }\">\n\t\t<!-- error message -->\n\t\t<div v-if=\"error\" class=\"emptycontent\" :class=\"{ emptyContentWithSections: sections.length > 0 }\">\n\t\t\t<div class=\"icon icon-error\" />\n\t\t\t<h2>{{ error }}</h2>\n\t\t</div>\n\n\t\t<!-- shares content -->\n\t\t<div v-else class=\"sharingTab__content\">\n\t\t\t<!-- shared with me information -->\n\t\t\t<SharingEntrySimple v-if=\"isSharedWithMe\" v-bind=\"sharedWithMe\" class=\"sharing-entry__reshare\">\n\t\t\t\t<template #avatar>\n\t\t\t\t\t<NcAvatar :user=\"sharedWithMe.user\"\n\t\t\t\t\t\t:display-name=\"sharedWithMe.displayName\"\n\t\t\t\t\t\tclass=\"sharing-entry__avatar\" />\n\t\t\t\t</template>\n\t\t\t</SharingEntrySimple>\n\n\t\t\t<!-- add new share input -->\n\t\t\t<SharingInput v-if=\"!loading\"\n\t\t\t\t:can-reshare=\"canReshare\"\n\t\t\t\t:file-info=\"fileInfo\"\n\t\t\t\t:link-shares=\"linkShares\"\n\t\t\t\t:reshare=\"reshare\"\n\t\t\t\t:shares=\"shares\"\n\t\t\t\t@add:share=\"addShare\" />\n\n\t\t\t<!-- link shares list -->\n\t\t\t<SharingLinkList v-if=\"!loading\"\n\t\t\t\tref=\"linkShareList\"\n\t\t\t\t:can-reshare=\"canReshare\"\n\t\t\t\t:file-info=\"fileInfo\"\n\t\t\t\t:shares=\"linkShares\" />\n\n\t\t\t<!-- other shares list -->\n\t\t\t<SharingList v-if=\"!loading\"\n\t\t\t\tref=\"shareList\"\n\t\t\t\t:shares=\"shares\"\n\t\t\t\t:file-info=\"fileInfo\" />\n\n\t\t\t<!-- inherited shares -->\n\t\t\t<SharingInherited v-if=\"canReshare && !loading\" :file-info=\"fileInfo\" />\n\n\t\t\t<!-- internal link copy -->\n\t\t\t<SharingEntryInternal :file-info=\"fileInfo\" />\n\n\t\t\t<!-- projects -->\n\t\t\t<CollectionList v-if=\"projectsEnabled && fileInfo\"\n\t\t\t\t:id=\"`${fileInfo.id}`\"\n\t\t\t\ttype=\"file\"\n\t\t\t\t:name=\"fileInfo.name\" />\n\t\t</div>\n\n\t\t<!-- additional entries, use it with cautious -->\n\t\t<div v-for=\"(section, index) in sections\"\n\t\t\t:ref=\"'section-' + index\"\n\t\t\t:key=\"index\"\n\t\t\tclass=\"sharingTab__additionalContent\">\n\t\t\t<component :is=\"section($refs['section-'+index], fileInfo)\" :file-info=\"fileInfo\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { CollectionList } from 'nextcloud-vue-collections'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar'\nimport axios from '@nextcloud/axios'\nimport { loadState } from '@nextcloud/initial-state'\n\nimport Config from '../services/ConfigService'\nimport { shareWithTitle } from '../utils/SharedWithMe'\nimport Share from '../models/Share'\nimport ShareTypes from '../mixins/ShareTypes'\nimport SharingEntryInternal from '../components/SharingEntryInternal'\nimport SharingEntrySimple from '../components/SharingEntrySimple'\nimport SharingInput from '../components/SharingInput'\n\nimport SharingInherited from './SharingInherited'\nimport SharingLinkList from './SharingLinkList'\nimport SharingList from './SharingList'\n\nexport default {\n\tname: 'SharingTab',\n\n\tcomponents: {\n\t\tNcAvatar,\n\t\tCollectionList,\n\t\tSharingEntryInternal,\n\t\tSharingEntrySimple,\n\t\tSharingInherited,\n\t\tSharingInput,\n\t\tSharingLinkList,\n\t\tSharingList,\n\t},\n\n\tmixins: [ShareTypes],\n\n\tdata() {\n\t\treturn {\n\t\t\tconfig: new Config(),\n\n\t\t\terror: '',\n\t\t\texpirationInterval: null,\n\t\t\tloading: true,\n\n\t\t\tfileInfo: null,\n\n\t\t\t// reshare Share object\n\t\t\treshare: null,\n\t\t\tsharedWithMe: {},\n\t\t\tshares: [],\n\t\t\tlinkShares: [],\n\n\t\t\tsections: OCA.Sharing.ShareTabSections.getSections(),\n\t\t\tprojectsEnabled: loadState('core', 'projects_enabled', false),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Is this share shared with me?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisSharedWithMe() {\n\t\t\treturn Object.keys(this.sharedWithMe).length > 0\n\t\t},\n\n\t\tcanReshare() {\n\t\t\treturn !!(this.fileInfo.permissions & OC.PERMISSION_SHARE)\n\t\t\t\t|| !!(this.reshare && this.reshare.hasSharePermission && this.config.isResharingAllowed)\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Update current fileInfo and fetch new data\n\t\t *\n\t\t * @param {object} fileInfo the current file FileInfo\n\t\t */\n\t\tasync update(fileInfo) {\n\t\t\tthis.fileInfo = fileInfo\n\t\t\tthis.resetState()\n\t\t\tthis.getShares()\n\t\t},\n\n\t\t/**\n\t\t * Get the existing shares infos\n\t\t */\n\t\tasync getShares() {\n\t\t\ttry {\n\t\t\t\tthis.loading = true\n\n\t\t\t\t// init params\n\t\t\t\tconst shareUrl = generateOcsUrl('apps/files_sharing/api/v1/shares')\n\t\t\t\tconst format = 'json'\n\t\t\t\t// TODO: replace with proper getFUllpath implementation of our own FileInfo model\n\t\t\t\tconst path = (this.fileInfo.path + '/' + this.fileInfo.name).replace('//', '/')\n\n\t\t\t\t// fetch shares\n\t\t\t\tconst fetchShares = axios.get(shareUrl, {\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tformat,\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\treshares: true,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tconst fetchSharedWithMe = axios.get(shareUrl, {\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tformat,\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\tshared_with_me: true,\n\t\t\t\t\t},\n\t\t\t\t})\n\n\t\t\t\t// wait for data\n\t\t\t\tconst [shares, sharedWithMe] = await Promise.all([fetchShares, fetchSharedWithMe])\n\t\t\t\tthis.loading = false\n\n\t\t\t\t// process results\n\t\t\t\tthis.processSharedWithMe(sharedWithMe)\n\t\t\t\tthis.processShares(shares)\n\t\t\t} catch (error) {\n\t\t\t\tif (error.response.data?.ocs?.meta?.message) {\n\t\t\t\t\tthis.error = error.response.data.ocs.meta.message\n\t\t\t\t} else {\n\t\t\t\t\tthis.error = t('files_sharing', 'Unable to load the shares list')\n\t\t\t\t}\n\t\t\t\tthis.loading = false\n\t\t\t\tconsole.error('Error loading the shares list', error)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Reset the current view to its default state\n\t\t */\n\t\tresetState() {\n\t\t\tclearInterval(this.expirationInterval)\n\t\t\tthis.loading = true\n\t\t\tthis.error = ''\n\t\t\tthis.sharedWithMe = {}\n\t\t\tthis.shares = []\n\t\t\tthis.linkShares = []\n\t\t},\n\n\t\t/**\n\t\t * Update sharedWithMe.subtitle with the appropriate\n\t\t * expiration time left\n\t\t *\n\t\t * @param {Share} share the sharedWith Share object\n\t\t */\n\t\tupdateExpirationSubtitle(share) {\n\t\t\tconst expiration = moment(share.expireDate).unix()\n\t\t\tthis.$set(this.sharedWithMe, 'subtitle', t('files_sharing', 'Expires {relativetime}', {\n\t\t\t\trelativetime: OC.Util.relativeModifiedDate(expiration * 1000),\n\t\t\t}))\n\n\t\t\t// share have expired\n\t\t\tif (moment().unix() > expiration) {\n\t\t\t\tclearInterval(this.expirationInterval)\n\t\t\t\t// TODO: clear ui if share is expired\n\t\t\t\tthis.$set(this.sharedWithMe, 'subtitle', t('files_sharing', 'this share just expired.'))\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Process the current shares data\n\t\t * and init shares[]\n\t\t *\n\t\t * @param {object} share the share ocs api request data\n\t\t * @param {object} share.data the request data\n\t\t */\n\t\tprocessShares({ data }) {\n\t\t\tif (data.ocs && data.ocs.data && data.ocs.data.length > 0) {\n\t\t\t\t// create Share objects and sort by newest\n\t\t\t\tconst shares = data.ocs.data\n\t\t\t\t\t.map(share => new Share(share))\n\t\t\t\t\t.sort((a, b) => b.createdTime - a.createdTime)\n\n\t\t\t\tthis.linkShares = shares.filter(share => share.type === this.SHARE_TYPES.SHARE_TYPE_LINK || share.type === this.SHARE_TYPES.SHARE_TYPE_EMAIL)\n\t\t\t\tthis.shares = shares.filter(share => share.type !== this.SHARE_TYPES.SHARE_TYPE_LINK && share.type !== this.SHARE_TYPES.SHARE_TYPE_EMAIL)\n\n\t\t\t\tconsole.debug('Processed', this.linkShares.length, 'link share(s)')\n\t\t\t\tconsole.debug('Processed', this.shares.length, 'share(s)')\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Process the sharedWithMe share data\n\t\t * and init sharedWithMe\n\t\t *\n\t\t * @param {object} share the share ocs api request data\n\t\t * @param {object} share.data the request data\n\t\t */\n\t\tprocessSharedWithMe({ data }) {\n\t\t\tif (data.ocs && data.ocs.data && data.ocs.data[0]) {\n\t\t\t\tconst share = new Share(data)\n\t\t\t\tconst title = shareWithTitle(share)\n\t\t\t\tconst displayName = share.ownerDisplayName\n\t\t\t\tconst user = share.owner\n\n\t\t\t\tthis.sharedWithMe = {\n\t\t\t\t\tdisplayName,\n\t\t\t\t\ttitle,\n\t\t\t\t\tuser,\n\t\t\t\t}\n\t\t\t\tthis.reshare = share\n\n\t\t\t\t// If we have an expiration date, use it as subtitle\n\t\t\t\t// Refresh the status every 10s and clear if expired\n\t\t\t\tif (share.expireDate && moment(share.expireDate).unix() > moment().unix()) {\n\t\t\t\t\t// first update\n\t\t\t\t\tthis.updateExpirationSubtitle(share)\n\t\t\t\t\t// interval update\n\t\t\t\t\tthis.expirationInterval = setInterval(this.updateExpirationSubtitle, 10000, share)\n\t\t\t\t}\n\t\t\t} else if (this.fileInfo && this.fileInfo.shareOwnerId !== undefined ? this.fileInfo.shareOwnerId !== OC.currentUser : false) {\n\t\t\t\t// Fallback to compare owner and current user.\n\t\t\t\tthis.sharedWithMe = {\n\t\t\t\t\tdisplayName: this.fileInfo.shareOwner,\n\t\t\t\t\ttitle: t(\n\t\t\t\t\t\t'files_sharing',\n\t\t\t\t\t\t'Shared with you by {owner}',\n\t\t\t\t\t\t{ owner: this.fileInfo.shareOwner },\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t{ escape: false }\n\t\t\t\t\t),\n\t\t\t\t\tuser: this.fileInfo.shareOwnerId,\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Add a new share into the shares list\n\t\t * and return the newly created share component\n\t\t *\n\t\t * @param {Share} share the share to add to the array\n\t\t * @param {Function} [resolve] a function to run after the share is added and its component initialized\n\t\t */\n\t\taddShare(share, resolve = () => {}) {\n\t\t\t// only catching share type MAIL as link shares are added differently\n\t\t\t// meaning: not from the ShareInput\n\t\t\tif (share.type === this.SHARE_TYPES.SHARE_TYPE_EMAIL) {\n\t\t\t\tthis.linkShares.unshift(share)\n\t\t\t} else {\n\t\t\t\tthis.shares.unshift(share)\n\t\t\t}\n\t\t\tthis.awaitForShare(share, resolve)\n\t\t},\n\n\t\t/**\n\t\t * Await for next tick and render after the list updated\n\t\t * Then resolve with the matched vue component of the\n\t\t * provided share object\n\t\t *\n\t\t * @param {Share} share newly created share\n\t\t * @param {Function} resolve a function to execute after\n\t\t */\n\t\tawaitForShare(share, resolve) {\n\t\t\tlet listComponent = this.$refs.shareList\n\t\t\t// Only mail shares comes from the input, link shares\n\t\t\t// are managed internally in the SharingLinkList component\n\t\t\tif (share.type === this.SHARE_TYPES.SHARE_TYPE_EMAIL) {\n\t\t\t\tlistComponent = this.$refs.linkShareList\n\t\t\t}\n\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tconst newShare = listComponent.$children.find(component => component.share === share)\n\t\t\t\tif (newShare) {\n\t\t\t\t\tresolve(newShare)\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n.emptyContentWithSections {\n\tmargin: 1rem auto;\n}\n\n.sharingTab {\n\t&__content {\n\t\tpadding: 0 6px;\n\t}\n\t&__additionalContent {\n\t\tmargin: 44px 0;\n\t}\n}\n</style>\n","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\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 { Type as ShareTypes } from '@nextcloud/sharing'\n\nconst shareWithTitle = function(share) {\n\tif (share.type === ShareTypes.SHARE_TYPE_GROUP) {\n\t\treturn t(\n\t\t\t'files_sharing',\n\t\t\t'Shared with you and the group {group} by {owner}',\n\t\t\t{\n\t\t\t\tgroup: share.shareWithDisplayName,\n\t\t\t\towner: share.ownerDisplayName,\n\t\t\t},\n\t\t\tundefined,\n\t\t\t{ escape: false }\n\t\t)\n\t} else if (share.type === ShareTypes.SHARE_TYPE_CIRCLE) {\n\t\treturn t(\n\t\t\t'files_sharing',\n\t\t\t'Shared with you and {circle} by {owner}',\n\t\t\t{\n\t\t\t\tcircle: share.shareWithDisplayName,\n\t\t\t\towner: share.ownerDisplayName,\n\t\t\t},\n\t\t\tundefined,\n\t\t\t{ escape: false }\n\t\t)\n\t} else if (share.type === ShareTypes.SHARE_TYPE_ROOM) {\n\t\tif (share.shareWithDisplayName) {\n\t\t\treturn t(\n\t\t\t\t'files_sharing',\n\t\t\t\t'Shared with you and the conversation {conversation} by {owner}',\n\t\t\t\t{\n\t\t\t\t\tconversation: share.shareWithDisplayName,\n\t\t\t\t\towner: share.ownerDisplayName,\n\t\t\t\t},\n\t\t\t\tundefined,\n\t\t\t\t{ escape: false }\n\t\t\t)\n\t\t} else {\n\t\t\treturn t(\n\t\t\t\t'files_sharing',\n\t\t\t\t'Shared with you in a conversation by {owner}',\n\t\t\t\t{\n\t\t\t\t\towner: share.ownerDisplayName,\n\t\t\t\t},\n\t\t\t\tundefined,\n\t\t\t\t{ escape: false }\n\t\t\t)\n\t\t}\n\t} else {\n\t\treturn t(\n\t\t\t'files_sharing',\n\t\t\t'Shared with you by {owner}',\n\t\t\t{ owner: share.ownerDisplayName },\n\t\t\tundefined,\n\t\t\t{ escape: false }\n\t\t)\n\t}\n}\n\nexport { shareWithTitle }\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingTab.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!./SharingTab.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingTab.vue?vue&type=style&index=0&id=56c61b11&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingTab.vue?vue&type=style&index=0&id=56c61b11&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SharingTab.vue?vue&type=template&id=56c61b11&scoped=true&\"\nimport script from \"./SharingTab.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SharingTab.vue?vue&type=style&index=0&id=56c61b11&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"56c61b11\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{class:{ 'icon-loading': _vm.loading }},[(_vm.error)?_c('div',{staticClass:\"emptycontent\",class:{ emptyContentWithSections: _vm.sections.length > 0 }},[_c('div',{staticClass:\"icon icon-error\"}),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.error))])]):_c('div',{staticClass:\"sharingTab__content\"},[(_vm.isSharedWithMe)?_c('SharingEntrySimple',_vm._b({staticClass:\"sharing-entry__reshare\",scopedSlots:_vm._u([{key:\"avatar\",fn:function(){return [_c('NcAvatar',{staticClass:\"sharing-entry__avatar\",attrs:{\"user\":_vm.sharedWithMe.user,\"display-name\":_vm.sharedWithMe.displayName}})]},proxy:true}],null,false,3197855346)},'SharingEntrySimple',_vm.sharedWithMe,false)):_vm._e(),_vm._v(\" \"),(!_vm.loading)?_c('SharingInput',{attrs:{\"can-reshare\":_vm.canReshare,\"file-info\":_vm.fileInfo,\"link-shares\":_vm.linkShares,\"reshare\":_vm.reshare,\"shares\":_vm.shares},on:{\"add:share\":_vm.addShare}}):_vm._e(),_vm._v(\" \"),(!_vm.loading)?_c('SharingLinkList',{ref:\"linkShareList\",attrs:{\"can-reshare\":_vm.canReshare,\"file-info\":_vm.fileInfo,\"shares\":_vm.linkShares}}):_vm._e(),_vm._v(\" \"),(!_vm.loading)?_c('SharingList',{ref:\"shareList\",attrs:{\"shares\":_vm.shares,\"file-info\":_vm.fileInfo}}):_vm._e(),_vm._v(\" \"),(_vm.canReshare && !_vm.loading)?_c('SharingInherited',{attrs:{\"file-info\":_vm.fileInfo}}):_vm._e(),_vm._v(\" \"),_c('SharingEntryInternal',{attrs:{\"file-info\":_vm.fileInfo}}),_vm._v(\" \"),(_vm.projectsEnabled && _vm.fileInfo)?_c('CollectionList',{attrs:{\"id\":`${_vm.fileInfo.id}`,\"type\":\"file\",\"name\":_vm.fileInfo.name}}):_vm._e()],1),_vm._v(\" \"),_vm._l((_vm.sections),function(section,index){return _c('div',{key:index,ref:'section-' + index,refInFor:true,staticClass:\"sharingTab__additionalContent\"},[_c(section(_vm.$refs['section-'+index], _vm.fileInfo),{tag:\"component\",attrs:{\"file-info\":_vm.fileInfo}})],1)})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class ShareSearch {\n\n\t_state\n\n\tconstructor() {\n\t\t// init empty state\n\t\tthis._state = {}\n\n\t\t// init default values\n\t\tthis._state.results = []\n\t\tconsole.debug('OCA.Sharing.ShareSearch initialized')\n\t}\n\n\t/**\n\t * Get the state\n\t *\n\t * @readonly\n\t * @memberof ShareSearch\n\t * @return {object} the data state\n\t */\n\tget state() {\n\t\treturn this._state\n\t}\n\n\t/**\n\t * Register a new result\n\t * Mostly used by the guests app.\n\t * We should consider deprecation and add results via php ?\n\t *\n\t * @param {object} result entry to append\n\t * @param {string} [result.user] entry user\n\t * @param {string} result.displayName entry first line\n\t * @param {string} [result.desc] entry second line\n\t * @param {string} [result.icon] entry icon\n\t * @param {Function} result.handler function to run on entry selection\n\t * @param {Function} [result.condition] condition to add entry or not\n\t * @return {boolean}\n\t */\n\taddNewResult(result) {\n\t\tif (result.displayName.trim() !== ''\n\t\t\t&& typeof result.handler === 'function') {\n\t\t\tthis._state.results.push(result)\n\t\t\treturn true\n\t\t}\n\t\tconsole.error('Invalid search result provided', result)\n\t\treturn false\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class ExternalLinkActions {\n\n\t_state\n\n\tconstructor() {\n\t\t// init empty state\n\t\tthis._state = {}\n\n\t\t// init default values\n\t\tthis._state.actions = []\n\t\tconsole.debug('OCA.Sharing.ExternalLinkActions initialized')\n\t}\n\n\t/**\n\t * Get the state\n\t *\n\t * @readonly\n\t * @memberof ExternalLinkActions\n\t * @return {object} the data state\n\t */\n\tget state() {\n\t\treturn this._state\n\t}\n\n\t/**\n\t * Register a new action for the link share\n\t * Mostly used by the social sharing app.\n\t *\n\t * @param {object} action new action component to register\n\t * @return {boolean}\n\t */\n\tregisterAction(action) {\n\t\tconsole.warn('OCA.Sharing.ExternalLinkActions is deprecated, use OCA.Sharing.ExternalShareAction instead')\n\n\t\tif (typeof action === 'object' && action.icon && action.name && action.url) {\n\t\t\tthis._state.actions.push(action)\n\t\t\treturn true\n\t\t}\n\t\tconsole.error('Invalid action provided', action)\n\t\treturn false\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class ExternalShareActions {\n\n\t_state\n\n\tconstructor() {\n\t\t// init empty state\n\t\tthis._state = {}\n\n\t\t// init default values\n\t\tthis._state.actions = []\n\t\tconsole.debug('OCA.Sharing.ExternalShareActions initialized')\n\t}\n\n\t/**\n\t * Get the state\n\t *\n\t * @readonly\n\t * @memberof ExternalLinkActions\n\t * @return {object} the data state\n\t */\n\tget state() {\n\t\treturn this._state\n\t}\n\n\t/**\n\t * Register a new option/entry for the a given share type\n\t *\n\t * @param {object} action new action component to register\n\t * @param {string} action.id unique action id\n\t * @param {Function} action.data data to bind the component to\n\t * @param {Array} action.shareType list of \\@nextcloud/sharing.Types.SHARE_XXX to be mounted on\n\t * @param {object} action.handlers list of listeners\n\t * @return {boolean}\n\t */\n\tregisterAction(action) {\n\t\t// Validate action\n\t\tif (typeof action !== 'object'\n\t\t\t|| typeof action.id !== 'string'\n\t\t\t|| typeof action.data !== 'function' // () => {disabled: true}\n\t\t\t|| !Array.isArray(action.shareType) // [\\@nextcloud/sharing.Types.SHARE_TYPE_LINK, ...]\n\t\t\t|| typeof action.handlers !== 'object' // {click: () => {}, ...}\n\t\t\t|| !Object.values(action.handlers).every(handler => typeof handler === 'function')) {\n\t\t\tconsole.error('Invalid action provided', action)\n\t\t\treturn false\n\t\t}\n\n\t\t// Check duplicates\n\t\tconst hasDuplicate = this._state.actions.findIndex(check => check.id === action.id) > -1\n\t\tif (hasDuplicate) {\n\t\t\tconsole.error(`An action with the same id ${action.id} already exists`, action)\n\t\t\treturn false\n\t\t}\n\n\t\tthis._state.actions.push(action)\n\t\treturn true\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class TabSections {\n\n\t_sections\n\n\tconstructor() {\n\t\tthis._sections = []\n\t}\n\n\t/**\n\t * @param {registerSectionCallback} section To be called to mount the section to the sharing sidebar\n\t */\n\tregisterSection(section) {\n\t\tthis._sections.push(section)\n\t}\n\n\tgetSections() {\n\t\treturn this._sections\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n'\n\nimport SharingTab from './views/SharingTab.vue'\nimport ShareSearch from './services/ShareSearch.js'\nimport ExternalLinkActions from './services/ExternalLinkActions.js'\nimport ExternalShareActions from './services/ExternalShareActions.js'\nimport TabSections from './services/TabSections.js'\n\n// eslint-disable-next-line node/no-missing-import, import/no-unresolved\nimport ShareVariant from '@mdi/svg/svg/share-variant.svg?raw'\n\n// Init Sharing Tab Service\nif (!window.OCA.Sharing) {\n\twindow.OCA.Sharing = {}\n}\nObject.assign(window.OCA.Sharing, { ShareSearch: new ShareSearch() })\nObject.assign(window.OCA.Sharing, { ExternalLinkActions: new ExternalLinkActions() })\nObject.assign(window.OCA.Sharing, { ExternalShareActions: new ExternalShareActions() })\nObject.assign(window.OCA.Sharing, { ShareTabSections: new TabSections() })\n\nVue.prototype.t = t\nVue.prototype.n = n\n\n// Init Sharing tab component\nconst View = Vue.extend(SharingTab)\nlet TabInstance = null\n\nwindow.addEventListener('DOMContentLoaded', function() {\n\tif (OCA.Files && OCA.Files.Sidebar) {\n\t\tOCA.Files.Sidebar.registerTab(new OCA.Files.Sidebar.Tab({\n\t\t\tid: 'sharing',\n\t\t\tname: t('files_sharing', 'Sharing'),\n\t\t\ticonSvg: ShareVariant,\n\n\t\t\tasync mount(el, fileInfo, context) {\n\t\t\t\tif (TabInstance) {\n\t\t\t\t\tTabInstance.$destroy()\n\t\t\t\t}\n\t\t\t\tTabInstance = new View({\n\t\t\t\t\t// Better integration with vue parent component\n\t\t\t\t\tparent: context,\n\t\t\t\t})\n\t\t\t\t// Only mount after we have all the info we need\n\t\t\t\tawait TabInstance.update(fileInfo)\n\t\t\t\tTabInstance.$mount(el)\n\t\t\t},\n\t\t\tupdate(fileInfo) {\n\t\t\t\tTabInstance.update(fileInfo)\n\t\t\t},\n\t\t\tdestroy() {\n\t\t\t\tTabInstance.$destroy()\n\t\t\t\tTabInstance = null\n\t\t\t},\n\t\t}))\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\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".error[data-v-5e957d09] .action-checkbox__label:before{border:1px solid var(--color-error)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_sharing/src/components/SharePermissionsEditor.vue\"],\"names\":[],\"mappings\":\"AAEC,uDACC,mCAAA\",\"sourcesContent\":[\"\\n.error {\\n\\t::v-deep .action-checkbox__label:before {\\n\\t\\tborder: 1px solid var(--color-error);\\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, \".sharing-entry[data-v-0d6fcc6a]{display:flex;align-items:center;height:44px}.sharing-entry__desc[data-v-0d6fcc6a]{display:flex;flex-direction:column;justify-content:space-between;padding:8px;line-height:1.2em}.sharing-entry__desc p[data-v-0d6fcc6a]{color:var(--color-text-maxcontrast)}.sharing-entry__desc-unique[data-v-0d6fcc6a]{color:var(--color-text-maxcontrast)}.sharing-entry__actions[data-v-0d6fcc6a]{margin-left:auto}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_sharing/src/components/SharingEntry.vue\"],\"names\":[],\"mappings\":\"AACA,gCACC,YAAA,CACA,kBAAA,CACA,WAAA,CACA,sCACC,YAAA,CACA,qBAAA,CACA,6BAAA,CACA,WAAA,CACA,iBAAA,CACA,wCACC,mCAAA,CAED,6CACC,mCAAA,CAGF,yCACC,gBAAA\",\"sourcesContent\":[\"\\n.sharing-entry {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\theight: 44px;\\n\\t&__desc {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\tjustify-content: space-between;\\n\\t\\tpadding: 8px;\\n\\t\\tline-height: 1.2em;\\n\\t\\tp {\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t}\\n\\t\\t&-unique {\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t}\\n\\t}\\n\\t&__actions {\\n\\t\\tmargin-left: auto;\\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, \".sharing-entry[data-v-23251e4a]{display:flex;align-items:center;height:44px}.sharing-entry__desc[data-v-23251e4a]{display:flex;flex-direction:column;justify-content:space-between;padding:8px;line-height:1.2em}.sharing-entry__desc p[data-v-23251e4a]{color:var(--color-text-maxcontrast)}.sharing-entry__actions[data-v-23251e4a]{margin-left:auto}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_sharing/src/components/SharingEntryInherited.vue\"],\"names\":[],\"mappings\":\"AACA,gCACC,YAAA,CACA,kBAAA,CACA,WAAA,CACA,sCACC,YAAA,CACA,qBAAA,CACA,6BAAA,CACA,WAAA,CACA,iBAAA,CACA,wCACC,mCAAA,CAGF,yCACC,gBAAA\",\"sourcesContent\":[\"\\n.sharing-entry {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\theight: 44px;\\n\\t&__desc {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\tjustify-content: space-between;\\n\\t\\tpadding: 8px;\\n\\t\\tline-height: 1.2em;\\n\\t\\tp {\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t}\\n\\t}\\n\\t&__actions {\\n\\t\\tmargin-left: auto;\\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, \".sharing-entry__internal .avatar-external[data-v-69e43ddc]{width:32px;height:32px;line-height:32px;font-size:18px;background-color:var(--color-text-maxcontrast);border-radius:50%;flex-shrink:0}.sharing-entry__internal .icon-checkmark-color[data-v-69e43ddc]{opacity:1}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_sharing/src/components/SharingEntryInternal.vue\"],\"names\":[],\"mappings\":\"AAEC,2DACC,UAAA,CACA,WAAA,CACA,gBAAA,CACA,cAAA,CACA,8CAAA,CACA,iBAAA,CACA,aAAA,CAED,gEACC,SAAA\",\"sourcesContent\":[\"\\n.sharing-entry__internal {\\n\\t.avatar-external {\\n\\t\\twidth: 32px;\\n\\t\\theight: 32px;\\n\\t\\tline-height: 32px;\\n\\t\\tfont-size: 18px;\\n\\t\\tbackground-color: var(--color-text-maxcontrast);\\n\\t\\tborder-radius: 50%;\\n\\t\\tflex-shrink: 0;\\n\\t}\\n\\t.icon-checkmark-color {\\n\\t\\topacity: 1;\\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, \".sharing-entry[data-v-10855e60]{display:flex;align-items:center;min-height:44px}.sharing-entry__desc[data-v-10855e60]{display:flex;flex-direction:column;justify-content:space-between;padding:8px;line-height:1.2em;overflow:hidden}.sharing-entry__desc p[data-v-10855e60]{color:var(--color-text-maxcontrast)}.sharing-entry__title[data-v-10855e60]{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.sharing-entry:not(.sharing-entry--share) .sharing-entry__actions .new-share-link[data-v-10855e60]{border-top:1px solid var(--color-border)}.sharing-entry[data-v-10855e60] .avatar-link-share{background-color:var(--color-primary)}.sharing-entry .sharing-entry__action--public-upload[data-v-10855e60]{border-bottom:1px solid var(--color-border)}.sharing-entry__loading[data-v-10855e60]{width:44px;height:44px;margin:0;padding:14px;margin-left:auto}.sharing-entry .action-item[data-v-10855e60]{margin-left:auto}.sharing-entry .action-item~.action-item[data-v-10855e60],.sharing-entry .action-item~.sharing-entry__loading[data-v-10855e60]{margin-left:0}.sharing-entry .icon-checkmark-color[data-v-10855e60]{opacity:1}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_sharing/src/components/SharingEntryLink.vue\"],\"names\":[],\"mappings\":\"AACA,gCACC,YAAA,CACA,kBAAA,CACA,eAAA,CACA,sCACC,YAAA,CACA,qBAAA,CACA,6BAAA,CACA,WAAA,CACA,iBAAA,CACA,eAAA,CAEA,wCACC,mCAAA,CAGF,uCACC,sBAAA,CACA,eAAA,CACA,kBAAA,CAIA,mGACC,wCAAA,CAIF,mDACC,qCAAA,CAGD,sEACC,2CAAA,CAGD,yCACC,UAAA,CACA,WAAA,CACA,QAAA,CACA,YAAA,CACA,gBAAA,CAKD,6CACC,gBAAA,CACA,+HAEC,aAAA,CAIF,sDACC,SAAA\",\"sourcesContent\":[\"\\n.sharing-entry {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tmin-height: 44px;\\n\\t&__desc {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\tjustify-content: space-between;\\n\\t\\tpadding: 8px;\\n\\t\\tline-height: 1.2em;\\n\\t\\toverflow: hidden;\\n\\n\\t\\tp {\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t}\\n\\t}\\n\\t&__title {\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\toverflow: hidden;\\n\\t\\twhite-space: nowrap;\\n\\t}\\n\\n\\t&:not(.sharing-entry--share) &__actions {\\n\\t\\t.new-share-link {\\n\\t\\t\\tborder-top: 1px solid var(--color-border);\\n\\t\\t}\\n\\t}\\n\\n\\t::v-deep .avatar-link-share {\\n\\t\\tbackground-color: var(--color-primary);\\n\\t}\\n\\n\\t.sharing-entry__action--public-upload {\\n\\t\\tborder-bottom: 1px solid var(--color-border);\\n\\t}\\n\\n\\t&__loading {\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t\\tmargin: 0;\\n\\t\\tpadding: 14px;\\n\\t\\tmargin-left: auto;\\n\\t}\\n\\n\\t// put menus to the left\\n\\t// but only the first one\\n\\t.action-item {\\n\\t\\tmargin-left: auto;\\n\\t\\t~ .action-item,\\n\\t\\t~ .sharing-entry__loading {\\n\\t\\t\\tmargin-left: 0;\\n\\t\\t}\\n\\t}\\n\\n\\t.icon-checkmark-color {\\n\\t\\topacity: 1;\\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, \".sharing-entry[data-v-9fd256bc]{display:flex;align-items:center;min-height:44px}.sharing-entry__desc[data-v-9fd256bc]{padding:8px;line-height:1.2em;position:relative;flex:1 1;min-width:0}.sharing-entry__desc p[data-v-9fd256bc]{color:var(--color-text-maxcontrast)}.sharing-entry__title[data-v-9fd256bc]{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;max-width:inherit}.sharing-entry__actions[data-v-9fd256bc]{margin-left:auto !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_sharing/src/components/SharingEntrySimple.vue\"],\"names\":[],\"mappings\":\"AACA,gCACC,YAAA,CACA,kBAAA,CACA,eAAA,CACA,sCACC,WAAA,CACA,iBAAA,CACA,iBAAA,CACA,QAAA,CACA,WAAA,CACA,wCACC,mCAAA,CAGF,uCACC,kBAAA,CACA,sBAAA,CACA,eAAA,CACA,iBAAA,CAED,yCACC,2BAAA\",\"sourcesContent\":[\"\\n.sharing-entry {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tmin-height: 44px;\\n\\t&__desc {\\n\\t\\tpadding: 8px;\\n\\t\\tline-height: 1.2em;\\n\\t\\tposition: relative;\\n\\t\\tflex: 1 1;\\n\\t\\tmin-width: 0;\\n\\t\\tp {\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t}\\n\\t}\\n\\t&__title {\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\toverflow: hidden;\\n\\t\\tmax-width: inherit;\\n\\t}\\n\\t&__actions {\\n\\t\\tmargin-left: auto !important;\\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, \".sharing-search{display:flex;flex-direction:column;margin-bottom:4px}.sharing-search label[for=sharing-search-input]{margin-bottom:2px}.sharing-search__input{width:100%;margin:10px 0}.vs__dropdown-menu span[lookup] .avatardiv{background-image:var(--icon-search-white);background-repeat:no-repeat;background-position:center;background-color:var(--color-text-maxcontrast) !important}.vs__dropdown-menu span[lookup] .avatardiv div{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_sharing/src/components/SharingInput.vue\"],\"names\":[],\"mappings\":\"AACA,gBACC,YAAA,CACA,qBAAA,CACA,iBAAA,CAEA,gDACC,iBAAA,CAGD,uBACC,UAAA,CACA,aAAA,CAOA,2CACC,yCAAA,CACA,2BAAA,CACA,0BAAA,CACA,yDAAA,CACA,+CACC,YAAA\",\"sourcesContent\":[\"\\n.sharing-search {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tmargin-bottom: 4px;\\n\\n\\tlabel[for=\\\"sharing-search-input\\\"] {\\n\\t\\tmargin-bottom: 2px;\\n\\t}\\n\\n\\t&__input {\\n\\t\\twidth: 100%;\\n\\t\\tmargin: 10px 0;\\n\\t}\\n}\\n\\n.vs__dropdown-menu {\\n\\t// properly style the lookup entry\\n\\tspan[lookup] {\\n\\t\\t.avatardiv {\\n\\t\\t\\tbackground-image: var(--icon-search-white);\\n\\t\\t\\tbackground-repeat: no-repeat;\\n\\t\\t\\tbackground-position: center;\\n\\t\\t\\tbackground-color: var(--color-text-maxcontrast) !important;\\n\\t\\t\\tdiv {\\n\\t\\t\\t\\tdisplay: none;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".sharing-entry__inherited .avatar-shared[data-v-3462b966]{width:32px;height:32px;line-height:32px;font-size:18px;background-color:var(--color-text-maxcontrast);border-radius:50%;flex-shrink:0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_sharing/src/views/SharingInherited.vue\"],\"names\":[],\"mappings\":\"AAEC,0DACC,UAAA,CACA,WAAA,CACA,gBAAA,CACA,cAAA,CACA,8CAAA,CACA,iBAAA,CACA,aAAA\",\"sourcesContent\":[\"\\n.sharing-entry__inherited {\\n\\t.avatar-shared {\\n\\t\\twidth: 32px;\\n\\t\\theight: 32px;\\n\\t\\tline-height: 32px;\\n\\t\\tfont-size: 18px;\\n\\t\\tbackground-color: var(--color-text-maxcontrast);\\n\\t\\tborder-radius: 50%;\\n\\t\\tflex-shrink: 0;\\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, \".emptyContentWithSections[data-v-56c61b11]{margin:1rem auto}.sharingTab__content[data-v-56c61b11]{padding:0 6px}.sharingTab__additionalContent[data-v-56c61b11]{margin:44px 0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_sharing/src/views/SharingTab.vue\"],\"names\":[],\"mappings\":\"AACA,2CACC,gBAAA,CAIA,sCACC,aAAA,CAED,gDACC,aAAA\",\"sourcesContent\":[\"\\n.emptyContentWithSections {\\n\\tmargin: 1rem auto;\\n}\\n\\n.sharingTab {\\n\\t&__content {\\n\\t\\tpadding: 0 6px;\\n\\t}\\n\\t&__additionalContent {\\n\\t\\tmargin: 44px 0;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 7870;","__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\t7870: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], function() { return __webpack_require__(36345); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","Config","document","getElementsByClassName","dataset","allowPublicUpload","getElementById","value","OC","appConfig","core","federatedCloudShareDoc","this","isDefaultExpireDateEnabled","Date","setDate","getDate","defaultExpireDate","isDefaultInternalExpireDateEnabled","defaultInternalExpireDate","isDefaultRemoteExpireDateEnabled","defaultRemoteExpireDate","enforcePasswordForPublicLink","enableLinkPasswordByDefault","defaultExpireDateEnforced","defaultExpireDateEnabled","defaultInternalExpireDateEnforced","defaultRemoteExpireDateEnforced","defaultInternalExpireDateEnabled","defaultRemoteExpireDateEnabled","remoteShareAllowed","capabilities","getCapabilities","undefined","files_sharing","sharebymail","public","enabled","resharingAllowed","password","enforced","sharee","always_show_unique","allowGroupSharing","parseInt","config","password_policy","Share","ocsData","ocs","data","hide_download","mail_send","attributes","JSON","parse","e","console","warn","_share","id","share_type","permissions","uid_owner","displayname_owner","share_with","share_with_displayname","share_with_displayname_unique","share_with_link","share_with_avatar","uid_file_owner","displayname_file_owner","stime","expiration","date","token","note","label","state","password_expiration_time","passwordExpirationTime","send_password_by_talk","sendPasswordByTalk","path","item_type","mimetype","file_source","file_target","file_parent","PERMISSION_READ","PERMISSION_CREATE","PERMISSION_DELETE","PERMISSION_UPDATE","PERMISSION_SHARE","i","attr","scope","key","setAttribute","attrUpdate","push","can_edit","can_delete","via_fileid","via_path","parent","storage_id","storage","item_source","status","SHARE_TYPES","ShareTypes","name","components","NcActions","props","title","type","default","required","subtitle","isUnique","ariaExpanded","computed","ariaExpandedValue","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","_c","_self","staticClass","_t","_v","_s","_e","$slots","ref","attrs","NcActionLink","SharingEntrySimple","fileInfo","copied","copySuccess","internalLink","copyLinkTooltip","internalLinkSubtitle","methods","copyLink","navigator","showSuccess","setTimeout","t","scopedSlots","_u","fn","proxy","on","$event","preventDefault","apply","arguments","passwordSet","passwordPolicy","api","generate","axios","request","info","showError","array","Uint8Array","ratio","length","self","crypto","getRandomValues","charAt","shareUrl","generateOcsUrl","createShare","shareType","shareWith","publicUpload","expireDate","share","emit","error","errorMessage","response","meta","message","Notification","showTemporary","deleteShare","updateShare","properties","Error","NcSelect","mixins","shares","linkShares","reshare","canReshare","loading","query","recommendations","ShareSearch","suggestions","externalResults","inputPlaceholder","isValidQuery","noResultText","mounted","handleOpen","asyncFind","getSuggestions","lookup","params","format","itemType","search","perPage","exact","rawExactSuggestions","rawSuggestions","exactSuggestions","map","sort","lookupEntry","isNoUser","displayName","allSuggestions","nameCounts","desc","debounceGetSuggestions","getRecommendations","rawRecommendations","reduce","concat","filterOutExistingShares","obj","sharesObj","arr","shareTypeToIcon","icon","iconTitle","formatForMultiselect","result","server","user","shareWithDisplayNameUnique","addShare","GeneratePassword","component","model","callback","$$v","expression","SharesRequests","Object","Boolean","errors","saving","open","updateQueue","PQueue","concurrency","reactiveState","hasNote","get","set","dateTomorrow","lang","weekdaysShort","window","dayNamesShort","monthsShort","monthNamesShort","formatLocale","firstDayOfWeek","firstDay","weekdaysMin","monthFormat","isShareOwner","owner","getCurrentUser","uid","checkShare","trim","expirationDate","isValid","parseDateString","match","pop","formatDateToString","UTC","getFullYear","getMonth","toISOString","split","onExpirationChange","queueUpdate","onExpirationDisable","onNoteChange","$set","onNoteSubmit","newNote","$delete","onDelete","debug","$emit","propertyNames","forEach","stringify","toString","add","updatedShare","indexOf","propertyName","onSyncError","property","propertyEl","$refs","$el","focusable","querySelector","focus","debounceQueueUpdate","debounce","NcActionButton","NcActionText","NcAvatar","viaFileTargetUrl","fileid","viaFolderName","shareWithDisplayName","initiator","ownerDisplayName","viaPath","viaFileid","folder","canDelete","SharingEntryInherited","loaded","showInheritedShares","showInheritedSharesIcon","mainTitle","subTitle","toggleTooltip","fullPath","watch","toggleInheritedShares","fetchInheritedShares","url","resetState","removeShare","stopPropagation","_l","action","is","_g","_b","tag","handlers","text","ATOMIC_PERMISSIONS","NONE","READ","UPDATE","CREATE","DELETE","SHARE","BUNDLED_PERMISSIONS","READ_ONLY","UPLOAD_AND_UPDATE","FILE_DROP","ALL","hasPermissions","initialPermissionSet","permissionsToCheck","permissionsSetIsValid","permissionsSet","togglePermissions","permissionsToToggle","permissionsToSubtract","subtractPermissions","permissionsToAdd","addPermissions","NcActionCheckbox","NcActionRadio","Tune","ChevronLeft","randomFormName","showCustomPermissionsForm","atomicPermissions","bundledPermissions","sharePermissionsSummary","filter","join","sharePermissionsIsBundle","sharePermissionsSetIsValid","isFolder","fileHasCreatePermission","sharePermissionEqual","shareHasPermissions","setSharePermissions","canToggleSharePermissions","permissionSet","toggleSharePermissions","isPublicUploadEnabled","class","NcActionInput","NcActionTextEditable","NcActionSeparator","ExternalShareAction","SharePermissionsEditor","index","pending","ExternalLegacyLinkActions","ExternalShareActions","hasExpirationDate","dateMaxEnforced","isPasswordProtected","Vue","isTalkEnabled","isPasswordProtectedByTalkAvailable","isPasswordProtectedByTalk","isEmailShareType","canTogglePasswordProtectedByTalkAvailable","pendingPassword","pendingEnforcedPassword","pendingExpirationDate","hasUnsavedPassword","shareLink","actionsTooltip","externalLegacyLinkActions","externalLinkActions","isPasswordPolicyEnabled","canChangeHideDownload","onNewLinkShare","shareDefaults","pushNewLinkShare","newShare","update","onLabelChange","onLabelSubmit","onPasswordChange","onPasswordDisable","onPasswordSubmit","onPasswordProtectedByTalkChange","onMenuClose","onCancel","minLength","canEdit","newLabel","hideDownload","newPassword","isDefaultExpireDateEnforced","SharingEntryLink","canLinkShare","hasLinkShares","hasShares","awaitForShare","resolve","permissionsEdit","permissionsCreate","permissionsDelete","permissionsRead","permissionsShare","tooltip","canHaveNote","isRemote","canSetEdit","canSetCreate","canSetDelete","canSetReshare","canSetDownload","isEditChecked","canCreate","isCreateChecked","isDeleteChecked","isReshareChecked","canDownload","isDownloadChecked","hasRead","hasStatus","allowDownloadText","isSetDownloadButtonVisible","updatePermissions","SHARE_TYPE_USER","shareWithAvatar","shareWithLink","isResharingAllowed","isDefaultInternalExpireDateEnforced","SharingEntry","CollectionList","SharingEntryInternal","SharingInherited","SharingInput","SharingLinkList","SharingList","expirationInterval","sharedWithMe","sections","projectsEnabled","isSharedWithMe","getShares","fetchShares","reshares","fetchSharedWithMe","shared_with_me","Promise","clearInterval","updateExpirationSubtitle","relativetime","processShares","processSharedWithMe","group","escape","circle","conversation","listComponent","emptyContentWithSections","section","refInFor","_state","results","handler","ExternalLinkActions","actions","Array","isArray","values","every","findIndex","check","TabSections","_sections","OCA","Sharing","assign","ShareTabSections","n","View","SharingTab","TabInstance","addEventListener","Files","Sidebar","registerTab","Tab","iconSvg","ShareVariant","mount","el","context","$destroy","$mount","destroy","___CSS_LOADER_EXPORT___","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","__webpack_modules__","call","m","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","j","keys","splice","r","getter","__esModule","d","a","definition","o","defineProperty","enumerable","g","globalThis","Function","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","baseURI","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","nc","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file diff --git a/lib/l10n/gl.js b/lib/l10n/gl.js index face3f5bc52..8bb913a3918 100644 --- a/lib/l10n/gl.js +++ b/lib/l10n/gl.js @@ -139,9 +139,9 @@ OC.L10N.register( "Sharing backend %s must implement the interface OCP\\Share_Backend" : "A infraestrutura de compartición %s ten que implementar a interface OCP\\Share_Backend", "Sharing backend %s not found" : "Non se atopou a infraestrutura de compartición %s", "Sharing backend for %s not found" : "Non se atopou a infraestrutura de compartición para %s", - "%1$s shared »%2$s« with you and wants to add:" : "%1$s compartiu «%2$s» con vostede e quere engadir:", - "%1$s shared »%2$s« with you and wants to add" : "%1$s compartiu «%2$s» con vostede e quere engadir", - "»%s« added a note to a file shared with you" : "«%s» engadiu unha nota a un ficheiro compartido con vostede", + "%1$s shared »%2$s« with you and wants to add:" : "%1$s compartiu «%2$s» con Vde. e quere engadir:", + "%1$s shared »%2$s« with you and wants to add" : "%1$s compartiu «%2$s» con Vde. e quere engadir", + "»%s« added a note to a file shared with you" : "«%s» engadiu unha nota a un ficheiro compartido con Vde.", "Open »%s«" : "Abrir «%s»", "%1$s via %2$s" : "%1$s mediante %2$s", "You are not allowed to share %s" : "Non ten permiso para compartir %s", @@ -152,8 +152,8 @@ OC.L10N.register( "_Cannot set expiration date more than %n day in the future_::_Cannot set expiration date more than %n days in the future_" : ["Non é posíbel estabelecer a data de caducidade máis alo de %n día no futuro","Non é posíbel estabelecer a data de caducidade máis alo de %n días no futuro"], "Sharing is only allowed with group members" : "Só se permite compartir cos membros do grupo", "Sharing %s failed, because this item is already shared with user %s" : "Fallou a compartición de %s por mor de que este elemento xa foi compartido co usuario %s", - "%1$s shared »%2$s« with you" : "%1$s compartiu «%2$s» con vostede", - "%1$s shared »%2$s« with you." : "%1$s compartiu «%2$s» con vostede.", + "%1$s shared »%2$s« with you" : "%1$s compartiu «%2$s» con Vde.", + "%1$s shared »%2$s« with you." : "%1$s compartiu «%2$s» con Vde.", "Click the button below to open it." : "Prema no botón de embaixo para abrilo.", "The requested share does not exist anymore" : "O recurso compartido solicitado xa non existe", "The user was not created because the user limit has been reached. Check your notifications to learn more." : "Non se creou o usuario porque acadouse o límite de usuarios. Consulte as súas notificacións para obter máis información.", diff --git a/lib/l10n/gl.json b/lib/l10n/gl.json index c63cb4c8450..6656caa4e17 100644 --- a/lib/l10n/gl.json +++ b/lib/l10n/gl.json @@ -137,9 +137,9 @@ "Sharing backend %s must implement the interface OCP\\Share_Backend" : "A infraestrutura de compartición %s ten que implementar a interface OCP\\Share_Backend", "Sharing backend %s not found" : "Non se atopou a infraestrutura de compartición %s", "Sharing backend for %s not found" : "Non se atopou a infraestrutura de compartición para %s", - "%1$s shared »%2$s« with you and wants to add:" : "%1$s compartiu «%2$s» con vostede e quere engadir:", - "%1$s shared »%2$s« with you and wants to add" : "%1$s compartiu «%2$s» con vostede e quere engadir", - "»%s« added a note to a file shared with you" : "«%s» engadiu unha nota a un ficheiro compartido con vostede", + "%1$s shared »%2$s« with you and wants to add:" : "%1$s compartiu «%2$s» con Vde. e quere engadir:", + "%1$s shared »%2$s« with you and wants to add" : "%1$s compartiu «%2$s» con Vde. e quere engadir", + "»%s« added a note to a file shared with you" : "«%s» engadiu unha nota a un ficheiro compartido con Vde.", "Open »%s«" : "Abrir «%s»", "%1$s via %2$s" : "%1$s mediante %2$s", "You are not allowed to share %s" : "Non ten permiso para compartir %s", @@ -150,8 +150,8 @@ "_Cannot set expiration date more than %n day in the future_::_Cannot set expiration date more than %n days in the future_" : ["Non é posíbel estabelecer a data de caducidade máis alo de %n día no futuro","Non é posíbel estabelecer a data de caducidade máis alo de %n días no futuro"], "Sharing is only allowed with group members" : "Só se permite compartir cos membros do grupo", "Sharing %s failed, because this item is already shared with user %s" : "Fallou a compartición de %s por mor de que este elemento xa foi compartido co usuario %s", - "%1$s shared »%2$s« with you" : "%1$s compartiu «%2$s» con vostede", - "%1$s shared »%2$s« with you." : "%1$s compartiu «%2$s» con vostede.", + "%1$s shared »%2$s« with you" : "%1$s compartiu «%2$s» con Vde.", + "%1$s shared »%2$s« with you." : "%1$s compartiu «%2$s» con Vde.", "Click the button below to open it." : "Prema no botón de embaixo para abrilo.", "The requested share does not exist anymore" : "O recurso compartido solicitado xa non existe", "The user was not created because the user limit has been reached. Check your notifications to learn more." : "Non se creou o usuario porque acadouse o límite de usuarios. Consulte as súas notificacións para obter máis información.", diff --git a/lib/private/Federation/CloudIdManager.php b/lib/private/Federation/CloudIdManager.php index 85aae8e5ec5..82b711bd422 100644 --- a/lib/private/Federation/CloudIdManager.php +++ b/lib/private/Federation/CloudIdManager.php @@ -209,11 +209,12 @@ class CloudIdManager implements ICloudIdManager { * @param string $url * @return string */ - private function removeProtocolFromUrl($url) { - if (strpos($url, 'https://') === 0) { - return substr($url, strlen('https://')); - } elseif (strpos($url, 'http://') === 0) { - return substr($url, strlen('http://')); + public function removeProtocolFromUrl(string $url): string { + if (str_starts_with($url, 'https://')) { + return substr($url, 8); + } + if (str_starts_with($url, 'http://')) { + return substr($url, 7); } return $url; diff --git a/lib/private/Files/Cache/QuerySearchHelper.php b/lib/private/Files/Cache/QuerySearchHelper.php index 7e18d4c5879..96492b64123 100644 --- a/lib/private/Files/Cache/QuerySearchHelper.php +++ b/lib/private/Files/Cache/QuerySearchHelper.php @@ -38,6 +38,8 @@ use OCP\Files\Mount\IMountPoint; use OCP\Files\Search\ISearchBinaryOperator; use OCP\Files\Search\ISearchQuery; use OCP\IDBConnection; +use OCP\IGroupManager; +use OCP\IUser; use Psr\Log\LoggerInterface; class QuerySearchHelper { @@ -52,6 +54,7 @@ class QuerySearchHelper { private $searchBuilder; /** @var QueryOptimizer */ private $queryOptimizer; + private IGroupManager $groupManager; public function __construct( IMimeTypeLoader $mimetypeLoader, @@ -59,7 +62,8 @@ class QuerySearchHelper { SystemConfig $systemConfig, LoggerInterface $logger, SearchBuilder $searchBuilder, - QueryOptimizer $queryOptimizer + QueryOptimizer $queryOptimizer, + IGroupManager $groupManager, ) { $this->mimetypeLoader = $mimetypeLoader; $this->connection = $connection; @@ -67,6 +71,7 @@ class QuerySearchHelper { $this->logger = $logger; $this->searchBuilder = $searchBuilder; $this->queryOptimizer = $queryOptimizer; + $this->groupManager = $groupManager; } protected function getQueryBuilder() { @@ -116,6 +121,29 @@ class QuerySearchHelper { return $tags; } + protected function equipQueryForSystemTags(CacheQueryBuilder $query, IUser $user): void { + $query->leftJoin('file', 'systemtag_object_mapping', 'systemtagmap', $query->expr()->andX( + $query->expr()->eq('file.fileid', $query->expr()->castColumn('systemtagmap.objectid', IQueryBuilder::PARAM_INT)), + $query->expr()->eq('systemtagmap.objecttype', $query->createNamedParameter('files')) + )); + $on = $query->expr()->andX($query->expr()->eq('systemtag.id', 'systemtagmap.systemtagid')); + if (!$this->groupManager->isAdmin($user->getUID())) { + $on->add($query->expr()->eq('systemtag.visibility', $query->createNamedParameter(true))); + } + $query->leftJoin('systemtagmap', 'systemtag', 'systemtag', $on); + } + + protected function equipQueryForDavTags(CacheQueryBuilder $query, IUser $user): void { + $query + ->leftJoin('file', 'vcategory_to_object', 'tagmap', $query->expr()->eq('file.fileid', 'tagmap.objid')) + ->leftJoin('tagmap', 'vcategory', 'tag', $query->expr()->andX( + $query->expr()->eq('tagmap.type', 'tag.type'), + $query->expr()->eq('tagmap.categoryid', 'tag.id'), + $query->expr()->eq('tag.type', $query->createNamedParameter('files')), + $query->expr()->eq('tag.uid', $query->createNamedParameter($user->getUID())) + )); + } + /** * Perform a file system search in multiple caches * @@ -146,27 +174,12 @@ class QuerySearchHelper { $query = $builder->selectFileCache('file', false); - if ($this->searchBuilder->shouldJoinTags($searchQuery->getSearchOperation())) { - $user = $searchQuery->getUser(); - if ($user === null) { - throw new \InvalidArgumentException("Searching by tag requires the user to be set in the query"); - } - $query - ->leftJoin('file', 'vcategory_to_object', 'tagmap', $builder->expr()->eq('file.fileid', 'tagmap.objid')) - ->leftJoin('tagmap', 'vcategory', 'tag', $builder->expr()->andX( - $builder->expr()->eq('tagmap.type', 'tag.type'), - $builder->expr()->eq('tagmap.categoryid', 'tag.id'), - $builder->expr()->eq('tag.type', $builder->createNamedParameter('files')), - $builder->expr()->eq('tag.uid', $builder->createNamedParameter($user->getUID())) - )) - ->leftJoin('file', 'systemtag_object_mapping', 'systemtagmap', $builder->expr()->andX( - $builder->expr()->eq('file.fileid', $builder->expr()->castColumn('systemtagmap.objectid', IQueryBuilder::PARAM_INT)), - $builder->expr()->eq('systemtagmap.objecttype', $builder->createNamedParameter('files')) - )) - ->leftJoin('systemtagmap', 'systemtag', 'systemtag', $builder->expr()->andX( - $builder->expr()->eq('systemtag.id', 'systemtagmap.systemtagid'), - $builder->expr()->eq('systemtag.visibility', $builder->createNamedParameter(true)) - )); + $requestedFields = $this->searchBuilder->extractRequestedFields($searchQuery->getSearchOperation()); + if (in_array('systemtag', $requestedFields)) { + $this->equipQueryForSystemTags($query, $this->requireUser($searchQuery)); + } + if (in_array('tagname', $requestedFields) || in_array('favorite', $requestedFields)) { + $this->equipQueryForDavTags($query, $this->requireUser($searchQuery)); } $this->applySearchConstraints($query, $searchQuery, $caches); @@ -194,6 +207,14 @@ class QuerySearchHelper { return $results; } + protected function requireUser(ISearchQuery $searchQuery): IUser { + $user = $searchQuery->getUser(); + if ($user === null) { + throw new \InvalidArgumentException("This search operation requires the user to be set in the query"); + } + return $user; + } + /** * @return array{0?: array<array-key, ICache>, 1?: array<array-key, IMountPoint>} */ diff --git a/lib/private/Files/Cache/SearchBuilder.php b/lib/private/Files/Cache/SearchBuilder.php index 63dc4b9cd0e..0d15a7bba6f 100644 --- a/lib/private/Files/Cache/SearchBuilder.php +++ b/lib/private/Files/Cache/SearchBuilder.php @@ -69,20 +69,17 @@ class SearchBuilder { } /** - * Whether or not the tag tables should be joined to complete the search - * - * @param ISearchOperator $operator - * @return boolean + * @return string[] */ - public function shouldJoinTags(ISearchOperator $operator) { + public function extractRequestedFields(ISearchOperator $operator): array { if ($operator instanceof ISearchBinaryOperator) { - return array_reduce($operator->getArguments(), function ($shouldJoin, ISearchOperator $operator) { - return $shouldJoin || $this->shouldJoinTags($operator); - }, false); + return array_reduce($operator->getArguments(), function (array $fields, ISearchOperator $operator) { + return array_unique(array_merge($fields, $this->extractRequestedFields($operator))); + }, []); } elseif ($operator instanceof ISearchComparison) { - return $operator->getField() === 'tagname' || $operator->getField() === 'favorite' || $operator->getField() === 'systemtag'; + return [$operator->getField()]; } - return false; + return []; } /** diff --git a/lib/private/Files/Node/Folder.php b/lib/private/Files/Node/Folder.php index ccfddeaf3a4..e6956fe9dc4 100644 --- a/lib/private/Files/Node/Folder.php +++ b/lib/private/Files/Node/Folder.php @@ -301,6 +301,11 @@ class Folder extends Node implements \OCP\Files\Folder { return $this->search($query); } + public function searchBySystemTag(string $tagName, string $userId, int $limit = 0, int $offset = 0): array { + $query = $this->queryFromOperator(new SearchComparison(ISearchComparison::COMPARE_EQUAL, 'systemtag', $tagName), $userId, $limit, $offset); + return $this->search($query); + } + /** * @param int $id * @return \OC\Files\Node\Node[] diff --git a/lib/private/Files/Node/LazyFolder.php b/lib/private/Files/Node/LazyFolder.php index 1b4bfe5b83d..484923dfdbe 100644 --- a/lib/private/Files/Node/LazyFolder.php +++ b/lib/private/Files/Node/LazyFolder.php @@ -448,6 +448,10 @@ class LazyFolder implements \OCP\Files\Folder { return $this->__call(__FUNCTION__, func_get_args()); } + public function searchBySystemTag(string $tagName, string $userId, int $limit = 0, int $offset = 0): array { + return $this->__call(__FUNCTION__, func_get_args()); + } + /** * @inheritDoc */ diff --git a/lib/private/L10N/L10N.php b/lib/private/L10N/L10N.php index d0794c9c9c0..ea4aa0527bb 100644 --- a/lib/private/L10N/L10N.php +++ b/lib/private/L10N/L10N.php @@ -215,7 +215,12 @@ class L10N implements IL10N { public function getIdentityTranslator(): IdentityTranslator { if (\is_null($this->identityTranslator)) { $this->identityTranslator = new IdentityTranslator(); - $this->identityTranslator->setLocale($this->getLocaleCode()); + // We need to use the language code here instead of the locale, + // because Symfony does not distinguish between the two and would + // otherwise e.g. with locale "Czech" and language "German" try to + // pick a non-existing plural rule, because Czech has 4 plural forms + // and German only 2. + $this->identityTranslator->setLocale($this->getLanguageCode()); } return $this->identityTranslator; diff --git a/lib/private/SystemTag/SystemTagManager.php b/lib/private/SystemTag/SystemTagManager.php index 79c5adcf450..65046ebf000 100644 --- a/lib/private/SystemTag/SystemTagManager.php +++ b/lib/private/SystemTag/SystemTagManager.php @@ -91,7 +91,7 @@ class SystemTagManager implements ISystemTagManager { /** * {@inheritdoc} */ - public function getTagsByIds($tagIds): array { + public function getTagsByIds($tagIds, ?IUser $user = null): array { if (!\is_array($tagIds)) { $tagIds = [$tagIds]; } @@ -116,7 +116,12 @@ class SystemTagManager implements ISystemTagManager { $result = $query->execute(); while ($row = $result->fetch()) { - $tags[$row['id']] = $this->createSystemTagFromRow($row); + $tag = $this->createSystemTagFromRow($row); + if ($user && !$this->canUserSeeTag($tag, $user)) { + // if a user is given, hide invisible tags + continue; + } + $tags[$row['id']] = $tag; } $result->closeCursor(); diff --git a/lib/private/SystemTag/SystemTagObjectMapper.php b/lib/private/SystemTag/SystemTagObjectMapper.php index b61a81a1fa7..864ba3e91a8 100644 --- a/lib/private/SystemTag/SystemTagObjectMapper.php +++ b/lib/private/SystemTag/SystemTagObjectMapper.php @@ -135,6 +135,7 @@ class SystemTagObjectMapper implements ISystemTagObjectMapper { while ($row = $result->fetch()) { $objectIds[] = $row['objectid']; } + $result->closeCursor(); return $objectIds; } diff --git a/lib/private/legacy/OC_Image.php b/lib/private/legacy/OC_Image.php index 74e82e62b16..aac0c496734 100644 --- a/lib/private/legacy/OC_Image.php +++ b/lib/private/legacy/OC_Image.php @@ -758,7 +758,7 @@ class OC_Image implements \OCP\IImage { if (!$this->checkImageDataSize($data)) { return false; } - $this->resource = imagecreatefromstring($data); + $this->resource = @imagecreatefromstring($data); $iType = IMAGETYPE_PNG; $this->logger->debug('OC_Image->loadFromFile, Default', ['app' => 'core']); break; diff --git a/lib/public/Federation/ICloudIdManager.php b/lib/public/Federation/ICloudIdManager.php index 1612c03ba4a..52920751739 100644 --- a/lib/public/Federation/ICloudIdManager.php +++ b/lib/public/Federation/ICloudIdManager.php @@ -62,4 +62,14 @@ interface ICloudIdManager { * @since 12.0.0 */ public function isValidCloudId(string $cloudId): bool; + + /** + * remove scheme/protocol from an url + * + * @param string $url + * + * @return string + * @since 28.0.0 + */ + public function removeProtocolFromUrl(string $url): string; } diff --git a/lib/public/SystemTag/ISystemTagManager.php b/lib/public/SystemTag/ISystemTagManager.php index 9918e3a4f99..9d775d6e1e5 100644 --- a/lib/public/SystemTag/ISystemTagManager.php +++ b/lib/public/SystemTag/ISystemTagManager.php @@ -38,6 +38,7 @@ interface ISystemTagManager { * Returns the tag objects matching the given tag ids. * * @param array|string $tagIds id or array of unique ids of the tag to retrieve + * @param ?IUser $user optional user to run a visibility check against for each tag * * @return ISystemTag[] array of system tags with tag id as key * @@ -45,9 +46,9 @@ interface ISystemTagManager { * @throws TagNotFoundException if at least one given tag ids did no exist * The message contains a json_encoded array of the ids that could not be found * - * @since 9.0.0 + * @since 9.0.0, optional parameter $user added in 26.0.4 */ - public function getTagsByIds($tagIds): array; + public function getTagsByIds($tagIds, ?IUser $user = null): array; /** * Returns the tag object matching the given attributes. diff --git a/psalm.xml b/psalm.xml index 009c59c7857..8eb599b30d7 100644 --- a/psalm.xml +++ b/psalm.xml @@ -84,6 +84,7 @@ <errorLevel type="suppress"> <referencedClass name="OCA\GroupFolders\Mount\GroupFolderStorage"/> <referencedClass name="OCA\TwoFactorNextcloudNotification\Controller\APIController"/> + <referencedClass name="OCA\GlobalSiteSelector\Service\SlaveService"/> </errorLevel> </UndefinedClass> <UndefinedFunction> @@ -127,6 +128,7 @@ <!-- Helper classes for sharing API integration from other apps --> <referencedClass name="OCA\Deck\Sharing\ShareAPIHelper" /> <referencedClass name="OCA\Talk\Share\Helper\DeletedShareAPIController" /> + <referencedClass name="OCA\GlobalSiteSelector\Service\SlaveService"/> </errorLevel> </UndefinedDocblockClass> </issueHandlers> diff --git a/tests/lib/L10N/L10nTest.php b/tests/lib/L10N/L10nTest.php index f224592432c..67ad5843546 100644 --- a/tests/lib/L10N/L10nTest.php +++ b/tests/lib/L10N/L10nTest.php @@ -85,6 +85,15 @@ class L10nTest extends TestCase { $this->assertEquals('5 oken', (string)$l->n('%n window', '%n windows', 5)); } + public function testGermanPluralWithCzechLocaleTranslations() { + $transFile = \OC::$SERVERROOT.'/tests/data/l10n/de.json'; + $l = new L10N($this->getFactory(), 'test', 'de', 'cs_CZ', [$transFile]); + + $this->assertEquals('1 Datei', (string) $l->n('%n file', '%n files', 1)); + $this->assertEquals('2 Dateien', (string) $l->n('%n file', '%n files', 2)); + $this->assertEquals('5 Dateien', (string) $l->n('%n file', '%n files', 5)); + } + public function dataPlaceholders(): array { return [ ['Ordered placeholders one %s two %s', 'Placeholder one 1 two 2'], |