diff options
97 files changed, 318 insertions, 133 deletions
diff --git a/apps/comments/l10n/ca.js b/apps/comments/l10n/ca.js index b6d37f2f3af..642cae11aa1 100644 --- a/apps/comments/l10n/ca.js +++ b/apps/comments/l10n/ca.js @@ -19,6 +19,7 @@ OC.L10N.register( "No comments yet, start the conversation!" : "Encara no hi ha cap comentari. Enceteu la conversa!", "No more messages" : "No hi ha més missatges", "Retry" : "Torna-ho a provar", + "Failed to mark comments as read" : "No s'han pogut marcar els comentaris com a llegits", "Unable to load the comments list" : "No s'ha pogut carregar la llista de comentaris", "_%n unread comment_::_%n unread comments_" : ["%n comentari sense llegir","%n comentaris sense llegir"], "_1 new comment_::_{unread} new comments_" : ["1 comentari nou","{unread} comentaris nous"], diff --git a/apps/comments/l10n/ca.json b/apps/comments/l10n/ca.json index 922ef6c2c57..c02994d983b 100644 --- a/apps/comments/l10n/ca.json +++ b/apps/comments/l10n/ca.json @@ -17,6 +17,7 @@ "No comments yet, start the conversation!" : "Encara no hi ha cap comentari. Enceteu la conversa!", "No more messages" : "No hi ha més missatges", "Retry" : "Torna-ho a provar", + "Failed to mark comments as read" : "No s'han pogut marcar els comentaris com a llegits", "Unable to load the comments list" : "No s'ha pogut carregar la llista de comentaris", "_%n unread comment_::_%n unread comments_" : ["%n comentari sense llegir","%n comentaris sense llegir"], "_1 new comment_::_{unread} new comments_" : ["1 comentari nou","{unread} comentaris nous"], diff --git a/apps/comments/l10n/de_DE.js b/apps/comments/l10n/de_DE.js index c27c8e13267..1709943637b 100644 --- a/apps/comments/l10n/de_DE.js +++ b/apps/comments/l10n/de_DE.js @@ -19,6 +19,7 @@ OC.L10N.register( "No comments yet, start the conversation!" : "Keine Kommentare bisher. Beginnen Sie die Diskussion!", "No more messages" : "Keine weiteren Nachrichten", "Retry" : "Wiederholen", + "Failed to mark comments as read" : "Kommentare konnten nicht als gelesen markiert werden", "Unable to load the comments list" : "Kommentarliste kann nicht geladen werden", "_%n unread comment_::_%n unread comments_" : ["%n ungelesener Kommentar","%n ungelesene Kommentare"], "_1 new comment_::_{unread} new comments_" : ["1 neuer Kommentar","[unread] neue Kommentare"], diff --git a/apps/comments/l10n/de_DE.json b/apps/comments/l10n/de_DE.json index 04c411f806d..91ff9e1218b 100644 --- a/apps/comments/l10n/de_DE.json +++ b/apps/comments/l10n/de_DE.json @@ -17,6 +17,7 @@ "No comments yet, start the conversation!" : "Keine Kommentare bisher. Beginnen Sie die Diskussion!", "No more messages" : "Keine weiteren Nachrichten", "Retry" : "Wiederholen", + "Failed to mark comments as read" : "Kommentare konnten nicht als gelesen markiert werden", "Unable to load the comments list" : "Kommentarliste kann nicht geladen werden", "_%n unread comment_::_%n unread comments_" : ["%n ungelesener Kommentar","%n ungelesene Kommentare"], "_1 new comment_::_{unread} new comments_" : ["1 neuer Kommentar","[unread] neue Kommentare"], diff --git a/apps/comments/l10n/en_GB.js b/apps/comments/l10n/en_GB.js index 052af7287dd..2bccc8d7303 100644 --- a/apps/comments/l10n/en_GB.js +++ b/apps/comments/l10n/en_GB.js @@ -19,6 +19,7 @@ OC.L10N.register( "No comments yet, start the conversation!" : "No comments yet, start the conversation!", "No more messages" : "No more messages", "Retry" : "Retry", + "Failed to mark comments as read" : "Failed to mark comments as read", "Unable to load the comments list" : "Unable to load the comments list", "_%n unread comment_::_%n unread comments_" : ["%n unread comment","%n unread comments"], "_1 new comment_::_{unread} new comments_" : ["1 new comment","{unread} new comments"], diff --git a/apps/comments/l10n/en_GB.json b/apps/comments/l10n/en_GB.json index 5be8ea11d77..c51b39d650e 100644 --- a/apps/comments/l10n/en_GB.json +++ b/apps/comments/l10n/en_GB.json @@ -17,6 +17,7 @@ "No comments yet, start the conversation!" : "No comments yet, start the conversation!", "No more messages" : "No more messages", "Retry" : "Retry", + "Failed to mark comments as read" : "Failed to mark comments as read", "Unable to load the comments list" : "Unable to load the comments list", "_%n unread comment_::_%n unread comments_" : ["%n unread comment","%n unread comments"], "_1 new comment_::_{unread} new comments_" : ["1 new comment","{unread} new comments"], diff --git a/apps/comments/l10n/es.js b/apps/comments/l10n/es.js index 3b64791814a..cda85555689 100644 --- a/apps/comments/l10n/es.js +++ b/apps/comments/l10n/es.js @@ -19,6 +19,7 @@ OC.L10N.register( "No comments yet, start the conversation!" : "¡No hay comentarios, empieza la conversación!", "No more messages" : "No hay más mensajes", "Retry" : "Reintentar", + "Failed to mark comments as read" : "Fallo al marcar los comentarios como leídos", "Unable to load the comments list" : "No se pudo cargar la lista de comentarios", "_%n unread comment_::_%n unread comments_" : ["%n comentario sin leer","%n comentarios no leídos","%n comentarios no leídos"], "_1 new comment_::_{unread} new comments_" : ["1 comentario nuevo","{unread} comentarios nuevos","{unread} comentarios nuevos"], diff --git a/apps/comments/l10n/es.json b/apps/comments/l10n/es.json index 183f0a4e129..e7816ae2fe6 100644 --- a/apps/comments/l10n/es.json +++ b/apps/comments/l10n/es.json @@ -17,6 +17,7 @@ "No comments yet, start the conversation!" : "¡No hay comentarios, empieza la conversación!", "No more messages" : "No hay más mensajes", "Retry" : "Reintentar", + "Failed to mark comments as read" : "Fallo al marcar los comentarios como leídos", "Unable to load the comments list" : "No se pudo cargar la lista de comentarios", "_%n unread comment_::_%n unread comments_" : ["%n comentario sin leer","%n comentarios no leídos","%n comentarios no leídos"], "_1 new comment_::_{unread} new comments_" : ["1 comentario nuevo","{unread} comentarios nuevos","{unread} comentarios nuevos"], diff --git a/apps/comments/l10n/fr.js b/apps/comments/l10n/fr.js index f67e6b53dad..84ef0053f64 100644 --- a/apps/comments/l10n/fr.js +++ b/apps/comments/l10n/fr.js @@ -19,6 +19,7 @@ OC.L10N.register( "No comments yet, start the conversation!" : "Il n'y a aucun commentaire, démarrez la conversation !", "No more messages" : "Aucun autre message", "Retry" : "Réessayer", + "Failed to mark comments as read" : "Les commentaires n'ont pas été marqués comme lus", "Unable to load the comments list" : "Impossible de charger la liste des commentaires", "_%n unread comment_::_%n unread comments_" : ["%n commentaire non lu","%n commentaires non lus","%n commentaires non lus"], "_1 new comment_::_{unread} new comments_" : ["1 nouveau commentaire","{unread} nouveaux commentaires","{unread} nouveaux commentaires"], diff --git a/apps/comments/l10n/fr.json b/apps/comments/l10n/fr.json index 37497d18d06..e77afeba0e9 100644 --- a/apps/comments/l10n/fr.json +++ b/apps/comments/l10n/fr.json @@ -17,6 +17,7 @@ "No comments yet, start the conversation!" : "Il n'y a aucun commentaire, démarrez la conversation !", "No more messages" : "Aucun autre message", "Retry" : "Réessayer", + "Failed to mark comments as read" : "Les commentaires n'ont pas été marqués comme lus", "Unable to load the comments list" : "Impossible de charger la liste des commentaires", "_%n unread comment_::_%n unread comments_" : ["%n commentaire non lu","%n commentaires non lus","%n commentaires non lus"], "_1 new comment_::_{unread} new comments_" : ["1 nouveau commentaire","{unread} nouveaux commentaires","{unread} nouveaux commentaires"], diff --git a/apps/comments/l10n/sr.js b/apps/comments/l10n/sr.js index 5259fe7f9b7..c71f2783f35 100644 --- a/apps/comments/l10n/sr.js +++ b/apps/comments/l10n/sr.js @@ -19,6 +19,7 @@ OC.L10N.register( "No comments yet, start the conversation!" : "Још нема коментара. Започните дискусију!", "No more messages" : "Нема више порука", "Retry" : "Покушај поново", + "Failed to mark comments as read" : "Није успело означавање коментара као прочитаних", "Unable to load the comments list" : "Не могуи да учитам списак коментара", "_%n unread comment_::_%n unread comments_" : ["%nнепрочитани коментар","%nнепрочитана коментара ","%n непрочитаних коментара"], "_1 new comment_::_{unread} new comments_" : ["1 нови коментар","{unread} нова коментара","{unread} нова коментара"], diff --git a/apps/comments/l10n/sr.json b/apps/comments/l10n/sr.json index 234aaad6a49..47658614ed6 100644 --- a/apps/comments/l10n/sr.json +++ b/apps/comments/l10n/sr.json @@ -17,6 +17,7 @@ "No comments yet, start the conversation!" : "Још нема коментара. Започните дискусију!", "No more messages" : "Нема више порука", "Retry" : "Покушај поново", + "Failed to mark comments as read" : "Није успело означавање коментара као прочитаних", "Unable to load the comments list" : "Не могуи да учитам списак коментара", "_%n unread comment_::_%n unread comments_" : ["%nнепрочитани коментар","%nнепрочитана коментара ","%n непрочитаних коментара"], "_1 new comment_::_{unread} new comments_" : ["1 нови коментар","{unread} нова коментара","{unread} нова коментара"], diff --git a/apps/comments/l10n/sv.js b/apps/comments/l10n/sv.js index 4633c4abf31..81d4ed881d7 100644 --- a/apps/comments/l10n/sv.js +++ b/apps/comments/l10n/sv.js @@ -19,6 +19,7 @@ OC.L10N.register( "No comments yet, start the conversation!" : "Inga kommentarer ännu.", "No more messages" : "Inga fler meddelanden", "Retry" : "Försök igen", + "Failed to mark comments as read" : "Kunde inte markera kommentarer som lästa", "Unable to load the comments list" : "Det gick inte att ladda kommentarlistan", "_%n unread comment_::_%n unread comments_" : ["%n oläst kommentar","%n olästa kommentarer"], "_1 new comment_::_{unread} new comments_" : ["1 ny kommentar","{unread} nya kommentarer"], diff --git a/apps/comments/l10n/sv.json b/apps/comments/l10n/sv.json index f6717acd8d4..6eec5785434 100644 --- a/apps/comments/l10n/sv.json +++ b/apps/comments/l10n/sv.json @@ -17,6 +17,7 @@ "No comments yet, start the conversation!" : "Inga kommentarer ännu.", "No more messages" : "Inga fler meddelanden", "Retry" : "Försök igen", + "Failed to mark comments as read" : "Kunde inte markera kommentarer som lästa", "Unable to load the comments list" : "Det gick inte att ladda kommentarlistan", "_%n unread comment_::_%n unread comments_" : ["%n oläst kommentar","%n olästa kommentarer"], "_1 new comment_::_{unread} new comments_" : ["1 ny kommentar","{unread} nya kommentarer"], diff --git a/apps/comments/l10n/tr.js b/apps/comments/l10n/tr.js index 9e51749e18f..962d7bf4570 100644 --- a/apps/comments/l10n/tr.js +++ b/apps/comments/l10n/tr.js @@ -19,6 +19,7 @@ OC.L10N.register( "No comments yet, start the conversation!" : "Henüz bir yorum yapılmamış! Bir görüşme başlatın!", "No more messages" : "Başka ileti yok", "Retry" : "Yeniden dene", + "Failed to mark comments as read" : "Yorumlar okunmuş olarak işaretlenemedi", "Unable to load the comments list" : "Yorum listesi yüklenemedi", "_%n unread comment_::_%n unread comments_" : ["%n okunmamış yorum","%n okunmamış yorum"], "_1 new comment_::_{unread} new comments_" : ["1 yeni yorum","{unread} yeni yorum"], diff --git a/apps/comments/l10n/tr.json b/apps/comments/l10n/tr.json index a89d93b9b16..23a8a6b8f6e 100644 --- a/apps/comments/l10n/tr.json +++ b/apps/comments/l10n/tr.json @@ -17,6 +17,7 @@ "No comments yet, start the conversation!" : "Henüz bir yorum yapılmamış! Bir görüşme başlatın!", "No more messages" : "Başka ileti yok", "Retry" : "Yeniden dene", + "Failed to mark comments as read" : "Yorumlar okunmuş olarak işaretlenemedi", "Unable to load the comments list" : "Yorum listesi yüklenemedi", "_%n unread comment_::_%n unread comments_" : ["%n okunmamış yorum","%n okunmamış yorum"], "_1 new comment_::_{unread} new comments_" : ["1 yeni yorum","{unread} yeni yorum"], diff --git a/apps/comments/l10n/zh_CN.js b/apps/comments/l10n/zh_CN.js index e7b79b55a5d..a08356a4a4a 100644 --- a/apps/comments/l10n/zh_CN.js +++ b/apps/comments/l10n/zh_CN.js @@ -19,6 +19,7 @@ OC.L10N.register( "No comments yet, start the conversation!" : "还没有评论,开始对话吧!", "No more messages" : "没有更多消息", "Retry" : "重试", + "Failed to mark comments as read" : "将评论标记为已读失败", "Unable to load the comments list" : "无法加载评论列表", "_%n unread comment_::_%n unread comments_" : ["%n 条未读评论"], "_1 new comment_::_{unread} new comments_" : ["{unread} 条新评论"], diff --git a/apps/comments/l10n/zh_CN.json b/apps/comments/l10n/zh_CN.json index a972153a78a..a6d11da7bbb 100644 --- a/apps/comments/l10n/zh_CN.json +++ b/apps/comments/l10n/zh_CN.json @@ -17,6 +17,7 @@ "No comments yet, start the conversation!" : "还没有评论,开始对话吧!", "No more messages" : "没有更多消息", "Retry" : "重试", + "Failed to mark comments as read" : "将评论标记为已读失败", "Unable to load the comments list" : "无法加载评论列表", "_%n unread comment_::_%n unread comments_" : ["%n 条未读评论"], "_1 new comment_::_{unread} new comments_" : ["{unread} 条新评论"], diff --git a/apps/comments/l10n/zh_HK.js b/apps/comments/l10n/zh_HK.js index c8aa5f08837..a53a7489193 100644 --- a/apps/comments/l10n/zh_HK.js +++ b/apps/comments/l10n/zh_HK.js @@ -19,6 +19,7 @@ OC.L10N.register( "No comments yet, start the conversation!" : "尚無留言,開始討論吧!", "No more messages" : "沒有更多訊息", "Retry" : "重試", + "Failed to mark comments as read" : "無法將評論標記為已讀", "Unable to load the comments list" : "無法載入留言清單", "_%n unread comment_::_%n unread comments_" : ["%n 個未讀留言"], "_1 new comment_::_{unread} new comments_" : ["{unread} 個新留言"], diff --git a/apps/comments/l10n/zh_HK.json b/apps/comments/l10n/zh_HK.json index c1c4de8345f..1fa20495be3 100644 --- a/apps/comments/l10n/zh_HK.json +++ b/apps/comments/l10n/zh_HK.json @@ -17,6 +17,7 @@ "No comments yet, start the conversation!" : "尚無留言,開始討論吧!", "No more messages" : "沒有更多訊息", "Retry" : "重試", + "Failed to mark comments as read" : "無法將評論標記為已讀", "Unable to load the comments list" : "無法載入留言清單", "_%n unread comment_::_%n unread comments_" : ["%n 個未讀留言"], "_1 new comment_::_{unread} new comments_" : ["{unread} 個新留言"], diff --git a/apps/comments/l10n/zh_TW.js b/apps/comments/l10n/zh_TW.js index 35ad3a2ca4e..e04dd078076 100644 --- a/apps/comments/l10n/zh_TW.js +++ b/apps/comments/l10n/zh_TW.js @@ -19,6 +19,7 @@ OC.L10N.register( "No comments yet, start the conversation!" : "尚無留言,開始討論!", "No more messages" : "沒有更多訊息", "Retry" : "重試", + "Failed to mark comments as read" : "無法將留言標記為已讀", "Unable to load the comments list" : "無法載入留言列表", "_%n unread comment_::_%n unread comments_" : ["%n 則未讀留言"], "_1 new comment_::_{unread} new comments_" : ["{unread} 則新留言"], diff --git a/apps/comments/l10n/zh_TW.json b/apps/comments/l10n/zh_TW.json index 0d0f47c2c17..dfe282a1884 100644 --- a/apps/comments/l10n/zh_TW.json +++ b/apps/comments/l10n/zh_TW.json @@ -17,6 +17,7 @@ "No comments yet, start the conversation!" : "尚無留言,開始討論!", "No more messages" : "沒有更多訊息", "Retry" : "重試", + "Failed to mark comments as read" : "無法將留言標記為已讀", "Unable to load the comments list" : "無法載入留言列表", "_%n unread comment_::_%n unread comments_" : ["%n 則未讀留言"], "_1 new comment_::_{unread} new comments_" : ["{unread} 則新留言"], diff --git a/apps/dashboard/l10n/sl.js b/apps/dashboard/l10n/sl.js index 0be3dbd55c9..d4916929164 100644 --- a/apps/dashboard/l10n/sl.js +++ b/apps/dashboard/l10n/sl.js @@ -4,6 +4,7 @@ OC.L10N.register( "Dashboard" : "Nadzorna plošča", "Dashboard app" : "Program Nadzorna plošča", "Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an overview of your upcoming appointments, urgent emails, chat messages, incoming tickets, latest tweets and much more! Users can add the widgets they like and change the background to their liking." : "Začnite dan s pravimi informacijami\n\nNadzorna plošča Nextcloud je prva točka dneva, ki vam omogoča\npregled prihajajočih sestankov, nujnih elektronskih sporočil in sporočil klepeta, podrobnosti o prejetih nalogah, najnovejših čivkih in še veliko več! Vsak uporabnik lahko doda gradnike in spreminja ozadje po svojih željah.", + "\"{title} icon\"" : "»Ikona {title}«", "Customize" : "Prilagodi", "Edit widgets" : "Izbor gradnikov", "Get more widgets from the App Store" : "Pridobi več gradnikov s spletišča App Store", diff --git a/apps/dashboard/l10n/sl.json b/apps/dashboard/l10n/sl.json index 36d40ad9511..e958c129016 100644 --- a/apps/dashboard/l10n/sl.json +++ b/apps/dashboard/l10n/sl.json @@ -2,6 +2,7 @@ "Dashboard" : "Nadzorna plošča", "Dashboard app" : "Program Nadzorna plošča", "Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an overview of your upcoming appointments, urgent emails, chat messages, incoming tickets, latest tweets and much more! Users can add the widgets they like and change the background to their liking." : "Začnite dan s pravimi informacijami\n\nNadzorna plošča Nextcloud je prva točka dneva, ki vam omogoča\npregled prihajajočih sestankov, nujnih elektronskih sporočil in sporočil klepeta, podrobnosti o prejetih nalogah, najnovejših čivkih in še veliko več! Vsak uporabnik lahko doda gradnike in spreminja ozadje po svojih željah.", + "\"{title} icon\"" : "»Ikona {title}«", "Customize" : "Prilagodi", "Edit widgets" : "Izbor gradnikov", "Get more widgets from the App Store" : "Pridobi več gradnikov s spletišča App Store", diff --git a/apps/federatedfilesharing/l10n/sl.js b/apps/federatedfilesharing/l10n/sl.js index 518c485a67a..e439ed8364a 100644 --- a/apps/federatedfilesharing/l10n/sl.js +++ b/apps/federatedfilesharing/l10n/sl.js @@ -44,6 +44,7 @@ OC.L10N.register( "HTML Code:" : "Koda HTML:", "Share with me through my #Nextcloud Federated Cloud ID" : "Omogoči souporabo z #Določilom ID zveznega oblaka Nextcloud", "Copy to clipboard" : "Kopiraj v odložišče", + "Clipboard is not available" : "Odložišče ni na voljo", "Copied!" : "Kopirano!", "Copy" : "Kopiraj", "Not supported!" : "Ni podprto!", diff --git a/apps/federatedfilesharing/l10n/sl.json b/apps/federatedfilesharing/l10n/sl.json index 1cc62f55a6a..6404bd2df13 100644 --- a/apps/federatedfilesharing/l10n/sl.json +++ b/apps/federatedfilesharing/l10n/sl.json @@ -42,6 +42,7 @@ "HTML Code:" : "Koda HTML:", "Share with me through my #Nextcloud Federated Cloud ID" : "Omogoči souporabo z #Določilom ID zveznega oblaka Nextcloud", "Copy to clipboard" : "Kopiraj v odložišče", + "Clipboard is not available" : "Odložišče ni na voljo", "Copied!" : "Kopirano!", "Copy" : "Kopiraj", "Not supported!" : "Ni podprto!", diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index e3052ea9fe8..442fdec9322 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -383,6 +383,9 @@ } }); + window._nc_event_bus.subscribe('files_sharing:share:created', () => { self.reload(true) }); + window._nc_event_bus.subscribe('files_sharing:share:deleted', () => { self.reload(true) }); + this.$fileList.on('click','td.filename>a.name, td.filesize, td.date', _.bind(this._onClickFile, this)); this.$fileList.on("droppedOnFavorites", function (event, file) { @@ -2201,7 +2204,7 @@ * * @return ajax call object */ - reload: function() { + reload: function(keepOpen) { this._selectedFiles = {}; this._selectionSummary.clear(); if (this._currentFileModel) { @@ -2216,7 +2219,7 @@ properties: this._getWebdavProperties() } ); - if (this._detailsView) { + if (this._detailsView && !keepOpen) { // close sidebar this._updateDetailsView(null); } diff --git a/apps/files/l10n/ar.js b/apps/files/l10n/ar.js index d81f83627c5..baef794cf49 100644 --- a/apps/files/l10n/ar.js +++ b/apps/files/l10n/ar.js @@ -103,7 +103,7 @@ OC.L10N.register( "_%n byte_::_%n bytes_" : ["بايت","بايت","بايت","بايت","بايت","%nبايت"], "Favorited" : "المفضلة", "Favorite" : "المفضلة", - "Copy direct link (only works for users who have access to this file/folder)" : "نسخ الرابط المباشر (يعمل فقط لـ المستخدمين الذين يمكنهم الولوج الى هذا الملف/الفايل)", + "Copy direct link (only works for users who have access to this file/folder)" : "نسخ الرابط المباشر (يعمل فقط للمستخدمين الذين يمكنهم الوصول الى هذا الملف/المجلد)", "You can only favorite a single file or folder at a time" : "يمكنك فقط تفضيل ملف أو مجلد واحد في المرة الواحدة", "New folder" : "مجلد جديد", "Create new folder" : "إنشاء مجلدا جديد", diff --git a/apps/files/l10n/ar.json b/apps/files/l10n/ar.json index d491542ee50..642091ff980 100644 --- a/apps/files/l10n/ar.json +++ b/apps/files/l10n/ar.json @@ -101,7 +101,7 @@ "_%n byte_::_%n bytes_" : ["بايت","بايت","بايت","بايت","بايت","%nبايت"], "Favorited" : "المفضلة", "Favorite" : "المفضلة", - "Copy direct link (only works for users who have access to this file/folder)" : "نسخ الرابط المباشر (يعمل فقط لـ المستخدمين الذين يمكنهم الولوج الى هذا الملف/الفايل)", + "Copy direct link (only works for users who have access to this file/folder)" : "نسخ الرابط المباشر (يعمل فقط للمستخدمين الذين يمكنهم الوصول الى هذا الملف/المجلد)", "You can only favorite a single file or folder at a time" : "يمكنك فقط تفضيل ملف أو مجلد واحد في المرة الواحدة", "New folder" : "مجلد جديد", "Create new folder" : "إنشاء مجلدا جديد", diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js index 15902479c89..fcacc6f2bc5 100644 --- a/apps/files/l10n/fr.js +++ b/apps/files/l10n/fr.js @@ -169,8 +169,8 @@ OC.L10N.register( "The ownership transfer of {path} from {user} has completed." : "Le transfert de propriété de {path} de {user} est terminé.", "in %s" : "dans %s", "File Management" : "Gestion de fichier", - "Reload current directory" : "Recharger le répertoire courant", - "Go to the \"{dir}\" directory" : "Aller au répertoire \"{dir}\"", + "Reload current directory" : "Rafraîchir le dossier courant", + "Go to the \"{dir}\" directory" : "Aller au dossier \"{dir}\"", "Select the row for {displayName}" : "Sélectionner la ligne pour {displayName}", "Open folder {name}" : "Ouvrir le dossier {name}", "Download file {name}" : "Télécharger le fichier {name}", @@ -179,11 +179,11 @@ OC.L10N.register( "Total rows summary" : "Récapitulatif du nombre total de lignes", "Select all" : "Tout sélectionner", "Unselect all" : "Tout désélectionner", - "\"{displayName}\" failed on some elements " : "\"{displayName}\" a échoué pour avec certains éléments", + "\"{displayName}\" failed on some elements " : "\"{displayName}\" a échoué sur certains éléments", "\"{displayName}\" batch action executed successfully" : "Le traitement par lot \"{displayName}\" a été exécuté avec succès", "ascending" : "ascendant", "descending" : "descendant", - "Sort list by {column} ({direction})" : "Classer les listes par {column} ({direction})", + "Sort list by {column} ({direction})" : "Trier la liste par {column} ({direction})", "This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Cette liste n'est pas affichée en totalité pour des raisons de performances. Les fichiers seront affichés au fur et à mesure que vous parcourrez la liste.", "Storage informations" : "Informations sur le stockage", "{usedQuotaByte} used" : "{usedQuotaByte} utilisés", diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json index 5954039fa26..d54ef62b6dd 100644 --- a/apps/files/l10n/fr.json +++ b/apps/files/l10n/fr.json @@ -167,8 +167,8 @@ "The ownership transfer of {path} from {user} has completed." : "Le transfert de propriété de {path} de {user} est terminé.", "in %s" : "dans %s", "File Management" : "Gestion de fichier", - "Reload current directory" : "Recharger le répertoire courant", - "Go to the \"{dir}\" directory" : "Aller au répertoire \"{dir}\"", + "Reload current directory" : "Rafraîchir le dossier courant", + "Go to the \"{dir}\" directory" : "Aller au dossier \"{dir}\"", "Select the row for {displayName}" : "Sélectionner la ligne pour {displayName}", "Open folder {name}" : "Ouvrir le dossier {name}", "Download file {name}" : "Télécharger le fichier {name}", @@ -177,11 +177,11 @@ "Total rows summary" : "Récapitulatif du nombre total de lignes", "Select all" : "Tout sélectionner", "Unselect all" : "Tout désélectionner", - "\"{displayName}\" failed on some elements " : "\"{displayName}\" a échoué pour avec certains éléments", + "\"{displayName}\" failed on some elements " : "\"{displayName}\" a échoué sur certains éléments", "\"{displayName}\" batch action executed successfully" : "Le traitement par lot \"{displayName}\" a été exécuté avec succès", "ascending" : "ascendant", "descending" : "descendant", - "Sort list by {column} ({direction})" : "Classer les listes par {column} ({direction})", + "Sort list by {column} ({direction})" : "Trier la liste par {column} ({direction})", "This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Cette liste n'est pas affichée en totalité pour des raisons de performances. Les fichiers seront affichés au fur et à mesure que vous parcourrez la liste.", "Storage informations" : "Informations sur le stockage", "{usedQuotaByte} used" : "{usedQuotaByte} utilisés", diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js index 44d82191559..964cf29e4e8 100644 --- a/apps/files/l10n/pt_BR.js +++ b/apps/files/l10n/pt_BR.js @@ -228,6 +228,7 @@ OC.L10N.register( "Delete permanently" : "Remover permanentemente", "Set up templates folder" : "Configurar pasta de modelos ", "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 ", "Toggle %1$s sublist" : "Alternar a sublista %1$s", "Toggle grid view" : "Alternar a visão em grade", diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json index d495f476d1b..05133a947fb 100644 --- a/apps/files/l10n/pt_BR.json +++ b/apps/files/l10n/pt_BR.json @@ -226,6 +226,7 @@ "Delete permanently" : "Remover permanentemente", "Set up templates folder" : "Configurar pasta de modelos ", "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 ", "Toggle %1$s sublist" : "Alternar a sublista %1$s", "Toggle grid view" : "Alternar a visão em grade", diff --git a/apps/files/l10n/sl.js b/apps/files/l10n/sl.js index 226ba1d459d..1716023502c 100644 --- a/apps/files/l10n/sl.js +++ b/apps/files/l10n/sl.js @@ -21,6 +21,7 @@ OC.L10N.register( "Target folder \"{dir}\" does not exist any more" : "Ciljna mapa »{dir}« ne obstaja več.", "Not enough free space" : "Ni dovolj prostora", "An unknown error has occurred" : "Prišlo je do neznane napake!", + "File could not be uploaded" : "Datoteke ni mogoče poslati", "Uploading …" : "Poteka pošiljanje ...", "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} od {totalSize} ({bitrate})", "Uploading that item is not supported" : "Pošiljate te vrste predmeta ni podprto.", @@ -32,6 +33,7 @@ OC.L10N.register( "Move" : "Premakni", "Copy" : "Kopiraj", "Choose target folder" : "Izbor ciljne mape", + "Edit locally" : "Uredi krajevno", "Open" : "Odpri", "Delete file" : "Izbriši datoteko", "Delete folder" : "Izbriši mapo", @@ -40,6 +42,10 @@ OC.L10N.register( "Could not load info for file \"{file}\"" : "Ni mogoče naložiti podatkov za datoteko »{file}«.", "Files" : "Datoteke", "Details" : "Podrobnosti", + "Please select tag(s) to add to the selection" : "Izbrati je treba oznake za dodajanje k izbiri", + "Apply tag(s) to selection" : "Poteka uveljavljanje oznak za izbiro", + "Select directory \"{dirName}\"" : "Izberi mapo »{dirName}«", + "Select file \"{fileName}\"" : "Izberi datoteko »{fileName}«.", "Pending" : "Na čakanju ...", "Unable to determine date" : "Ni mogoče določiti datuma", "This operation is forbidden" : "To dejanje ni dovoljeno!", @@ -52,6 +58,7 @@ OC.L10N.register( "Could not copy \"{file}\"" : "Datoteke »{file}« ni mogoče kopirati.", "Copied {origin} inside {destination}" : "Kopirano {origin} v {destination}", "Copied {origin} and {nbfiles} other files inside {destination}" : "Kopirano {origin} in {nbfiles} ostale datoteke v {destination}", + "Failed to redirect to client" : "Preusmerjanje odjemalca je spodletelo", "{newName} already exists" : "Ime {newName} že obstaja", "Could not rename \"{fileName}\", it does not exist any more" : "Datoteke »{fileName}« ni mogoče preimenovati, ker ne obstaja več", "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Ime \"{targetName}\" je že v uporabi v mapi \"{dir}\". Izberati je treba drugačno ime.", @@ -70,8 +77,11 @@ OC.L10N.register( "_%n file_::_%n files_" : ["%n datoteka","%n datoteki","%n datoteke","%n datotek"], "{dirs} and {files}" : "{dirs} in {files}", "_including %n hidden_::_including %n hidden_" : ["vključujoč %n skrito","vključujoč %n skriti","vključujoč %n skrite","vključujoč %n skritih"], + "You do not have permission to upload or create files here" : "Ni ustreznih dovoljenja za pošiljanje ali ustvarjanje novih datotek", "_Uploading %n file_::_Uploading %n files_" : ["Posodabljanje %n datoteke","Posodabljanje %n datotek","Posodabljanje %n datotek","Poteka posodabljanje %n datotek"], + "New file/folder menu" : "Nov meni datoteke/mape", "Select file range" : "Izbor obsega datotek", + "{used}%" : "{used} %", "{used} of {quota} used" : "V uporabi je {used} od {quota}", "{used} used" : "V uporabi je {used}", "\"{name}\" is an invalid file name." : "Ime »{name}« ni veljavno ime datoteke.", @@ -88,6 +98,7 @@ OC.L10N.register( "Your storage is almost full ({usedSpacePercent}%)." : "Vaša shramba je skoraj do konca zasedena ({usedSpacePercent}%).", "_matches \"{filter}\"_::_match \"{filter}\"_" : ["se skladajo s filtrom »{filter}«","se skladajo s filtroma »{filter}«","se skladajo s filtri »{filter}«","se skladajo s filtri »{filter}«"], "View in folder" : "Pokaži v mapi", + "Direct link was copied (only works for users who have access to this file/folder)" : "Kopirana je neposredna povezava (za uporabnike, ki imajo dostop do datoteke ali mape)", "Path" : "Pot", "_%n byte_::_%n bytes_" : ["%n bajt","%n bajta","%n bajti","%n bajtov"], "Favorited" : "Označeno kot priljubljeno", @@ -98,6 +109,7 @@ OC.L10N.register( "Create new folder" : "Ustvari novo mapo", "Upload file" : "Pošlji datoteko", "Recent" : "Nedavne", + "This file has the tag {tag}" : "Datoteka je označena z oznako {tag}", "Not favorited" : "Ni priljubljeno", "Remove from favorites" : "Odstrani iz priljubljenih", "Add to favorites" : "Dodaj med priljubljene", @@ -149,14 +161,25 @@ OC.L10N.register( "Incoming ownership transfer from {user}" : "Vpisana je zahteva za prenos lastništva uporabnika {user}", "Do you want to accept {path}?\n\nNote: The transfer process after accepting may take up to 1 hour." : "Ali želite sprejeti pot {path}?\n\nOpomba: po sprejetju lahko prenos traja tudi več kot 1 uro.", "Ownership transfer failed" : "Prenos lastništva je spodletel", - "Your ownership transfer of {path} to {user} failed." : "Prenos vašega lastništva {path} na {user} je spodletelo", - "The ownership transfer of {path} from {user} failed." : "Prenos lastništva {path} na {user} je spodletelo", + "Your ownership transfer of {path} to {user} failed." : "Prenos lastništva mesta {path} na uporabnika {user} je spodletel.", + "The ownership transfer of {path} from {user} failed." : "Prenos lastništva mesta {path} na uporabnika {user} je spodletel.", "Ownership transfer done" : "Prenos lastništva je uspešno končan", - "Your ownership transfer of {path} to {user} has completed." : "Prenos vašega lastništva {path} na uporabnika {user} je končan.", - "The ownership transfer of {path} from {user} has completed." : "Prenos lastništva {path} z uporabnika {user} je končan.", + "Your ownership transfer of {path} to {user} has completed." : "Prenos lastništva poti {path} na uporabnika {user} je končan.", + "The ownership transfer of {path} from {user} has completed." : "Prenos lastništva poti {path} z uporabnika {user} je končan.", "in %s" : "v %s", "File Management" : "Upravljanje datotek", + "Reload current directory" : "Ponovno naloži trenutno mapo", + "Open folder {name}" : "Odpri mapo {name}", + "Download file {name}" : "Prejmi datoteko {name}", "Select all" : "izberi vse", + "Unselect all" : "Odstrani izbor", + "ascending" : "naraščajoče", + "descending" : "padajoče", + "Sort list by {column} ({direction})" : "Razvrsti seznam po stolpcu {column} ({direction})", + "Storage informations" : "Podrobnosti shrambe", + "{usedQuotaByte} used" : "Zasedeno {usedQuotaByte}", + "{relative}% used" : "Zasedeno {relative} %", + "Could not refresh storage stats" : "Ni mogoče osvežiti podatkov shrambe", "Transfer ownership of a file or folder" : "Prenos lastništva datoteke ali mape", "Choose file or folder to transfer" : "Izbor datoteke ali mape za prenos", "Change" : "Spremeni", @@ -167,14 +190,20 @@ OC.L10N.register( "Invalid path selected" : "Izbrana je neveljavna pot", "Unknown error" : "Neznana napaka", "Ownership transfer request sent" : "Zahteva za prenos lastništva je poslana", + "Loading current folder" : "Poteka nalaganje trenutne mape", "No files in here" : "V mapi ni datotek", + "Go to the previous folder" : "Skoči na predhodno mapo", "Go back" : "Skoči nazaj", + "Files settings" : "Nastavitve datotek", + "File cannot be accessed" : "Do datoteke dostop ni mogoč", "Show hidden files" : "Pokaži skrite datoteke", "Crop image previews" : "Obreži slike predogleda", "Additional settings" : "Dodatne nastavitve", "WebDAV" : "WebDAV", "Copy to clipboard" : "Kopiraj v odložišče", "Use this address to access your Files via WebDAV" : "Uporabite ta naslov za dostop do datotek z uporabo WebDAV", + "Clipboard is not available" : "Odložišče ni na voljo", + "WebDAV URL copied to clipboard" : "Naslov URL WebDAV je kopiran v odložišče", "Unable to change the favourite state of the file" : "Ni mogoče spremeniti stanja priljubljenosti datoteke", "Error while loading the file data" : "Prišlo je do napake med nalaganjem podatkov računa", "Pick a template for {name}" : "Izbor predloge za {name}", @@ -186,6 +215,7 @@ OC.L10N.register( "Delete permanently" : "Trajno izbriši", "Set up templates folder" : "Nastavitev mape predlog", "Templates" : "Predloge", + "Create new templates folder" : "Ustvari novo začasno mapo", "Unable to initialize the templates directory" : "Ni mogoče začeti mape predlog", "Toggle %1$s sublist" : "Preklopi podseznam %1$s", "Toggle grid view" : "Preklopi mrežni pogled", @@ -213,6 +243,7 @@ OC.L10N.register( "Cannot transfer ownership of a file or folder you don't own" : "Ni mogoče prenesti lastništva datotek in map, katerih niste lastnik", "Cancel" : "Prekliči", "%s used" : "Uporabljeno %s", + "%s%%" : "%s%%", "%1$s of %2$s used" : "Uporabljeno %1$s od %2$s", "Settings" : "Nastavitve", "Deleted files" : "Izbrisane datoteke" diff --git a/apps/files/l10n/sl.json b/apps/files/l10n/sl.json index c1bb5e2e683..2f8e665f39b 100644 --- a/apps/files/l10n/sl.json +++ b/apps/files/l10n/sl.json @@ -19,6 +19,7 @@ "Target folder \"{dir}\" does not exist any more" : "Ciljna mapa »{dir}« ne obstaja več.", "Not enough free space" : "Ni dovolj prostora", "An unknown error has occurred" : "Prišlo je do neznane napake!", + "File could not be uploaded" : "Datoteke ni mogoče poslati", "Uploading …" : "Poteka pošiljanje ...", "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} od {totalSize} ({bitrate})", "Uploading that item is not supported" : "Pošiljate te vrste predmeta ni podprto.", @@ -30,6 +31,7 @@ "Move" : "Premakni", "Copy" : "Kopiraj", "Choose target folder" : "Izbor ciljne mape", + "Edit locally" : "Uredi krajevno", "Open" : "Odpri", "Delete file" : "Izbriši datoteko", "Delete folder" : "Izbriši mapo", @@ -38,6 +40,10 @@ "Could not load info for file \"{file}\"" : "Ni mogoče naložiti podatkov za datoteko »{file}«.", "Files" : "Datoteke", "Details" : "Podrobnosti", + "Please select tag(s) to add to the selection" : "Izbrati je treba oznake za dodajanje k izbiri", + "Apply tag(s) to selection" : "Poteka uveljavljanje oznak za izbiro", + "Select directory \"{dirName}\"" : "Izberi mapo »{dirName}«", + "Select file \"{fileName}\"" : "Izberi datoteko »{fileName}«.", "Pending" : "Na čakanju ...", "Unable to determine date" : "Ni mogoče določiti datuma", "This operation is forbidden" : "To dejanje ni dovoljeno!", @@ -50,6 +56,7 @@ "Could not copy \"{file}\"" : "Datoteke »{file}« ni mogoče kopirati.", "Copied {origin} inside {destination}" : "Kopirano {origin} v {destination}", "Copied {origin} and {nbfiles} other files inside {destination}" : "Kopirano {origin} in {nbfiles} ostale datoteke v {destination}", + "Failed to redirect to client" : "Preusmerjanje odjemalca je spodletelo", "{newName} already exists" : "Ime {newName} že obstaja", "Could not rename \"{fileName}\", it does not exist any more" : "Datoteke »{fileName}« ni mogoče preimenovati, ker ne obstaja več", "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Ime \"{targetName}\" je že v uporabi v mapi \"{dir}\". Izberati je treba drugačno ime.", @@ -68,8 +75,11 @@ "_%n file_::_%n files_" : ["%n datoteka","%n datoteki","%n datoteke","%n datotek"], "{dirs} and {files}" : "{dirs} in {files}", "_including %n hidden_::_including %n hidden_" : ["vključujoč %n skrito","vključujoč %n skriti","vključujoč %n skrite","vključujoč %n skritih"], + "You do not have permission to upload or create files here" : "Ni ustreznih dovoljenja za pošiljanje ali ustvarjanje novih datotek", "_Uploading %n file_::_Uploading %n files_" : ["Posodabljanje %n datoteke","Posodabljanje %n datotek","Posodabljanje %n datotek","Poteka posodabljanje %n datotek"], + "New file/folder menu" : "Nov meni datoteke/mape", "Select file range" : "Izbor obsega datotek", + "{used}%" : "{used} %", "{used} of {quota} used" : "V uporabi je {used} od {quota}", "{used} used" : "V uporabi je {used}", "\"{name}\" is an invalid file name." : "Ime »{name}« ni veljavno ime datoteke.", @@ -86,6 +96,7 @@ "Your storage is almost full ({usedSpacePercent}%)." : "Vaša shramba je skoraj do konca zasedena ({usedSpacePercent}%).", "_matches \"{filter}\"_::_match \"{filter}\"_" : ["se skladajo s filtrom »{filter}«","se skladajo s filtroma »{filter}«","se skladajo s filtri »{filter}«","se skladajo s filtri »{filter}«"], "View in folder" : "Pokaži v mapi", + "Direct link was copied (only works for users who have access to this file/folder)" : "Kopirana je neposredna povezava (za uporabnike, ki imajo dostop do datoteke ali mape)", "Path" : "Pot", "_%n byte_::_%n bytes_" : ["%n bajt","%n bajta","%n bajti","%n bajtov"], "Favorited" : "Označeno kot priljubljeno", @@ -96,6 +107,7 @@ "Create new folder" : "Ustvari novo mapo", "Upload file" : "Pošlji datoteko", "Recent" : "Nedavne", + "This file has the tag {tag}" : "Datoteka je označena z oznako {tag}", "Not favorited" : "Ni priljubljeno", "Remove from favorites" : "Odstrani iz priljubljenih", "Add to favorites" : "Dodaj med priljubljene", @@ -147,14 +159,25 @@ "Incoming ownership transfer from {user}" : "Vpisana je zahteva za prenos lastništva uporabnika {user}", "Do you want to accept {path}?\n\nNote: The transfer process after accepting may take up to 1 hour." : "Ali želite sprejeti pot {path}?\n\nOpomba: po sprejetju lahko prenos traja tudi več kot 1 uro.", "Ownership transfer failed" : "Prenos lastništva je spodletel", - "Your ownership transfer of {path} to {user} failed." : "Prenos vašega lastništva {path} na {user} je spodletelo", - "The ownership transfer of {path} from {user} failed." : "Prenos lastništva {path} na {user} je spodletelo", + "Your ownership transfer of {path} to {user} failed." : "Prenos lastništva mesta {path} na uporabnika {user} je spodletel.", + "The ownership transfer of {path} from {user} failed." : "Prenos lastništva mesta {path} na uporabnika {user} je spodletel.", "Ownership transfer done" : "Prenos lastništva je uspešno končan", - "Your ownership transfer of {path} to {user} has completed." : "Prenos vašega lastništva {path} na uporabnika {user} je končan.", - "The ownership transfer of {path} from {user} has completed." : "Prenos lastništva {path} z uporabnika {user} je končan.", + "Your ownership transfer of {path} to {user} has completed." : "Prenos lastništva poti {path} na uporabnika {user} je končan.", + "The ownership transfer of {path} from {user} has completed." : "Prenos lastništva poti {path} z uporabnika {user} je končan.", "in %s" : "v %s", "File Management" : "Upravljanje datotek", + "Reload current directory" : "Ponovno naloži trenutno mapo", + "Open folder {name}" : "Odpri mapo {name}", + "Download file {name}" : "Prejmi datoteko {name}", "Select all" : "izberi vse", + "Unselect all" : "Odstrani izbor", + "ascending" : "naraščajoče", + "descending" : "padajoče", + "Sort list by {column} ({direction})" : "Razvrsti seznam po stolpcu {column} ({direction})", + "Storage informations" : "Podrobnosti shrambe", + "{usedQuotaByte} used" : "Zasedeno {usedQuotaByte}", + "{relative}% used" : "Zasedeno {relative} %", + "Could not refresh storage stats" : "Ni mogoče osvežiti podatkov shrambe", "Transfer ownership of a file or folder" : "Prenos lastništva datoteke ali mape", "Choose file or folder to transfer" : "Izbor datoteke ali mape za prenos", "Change" : "Spremeni", @@ -165,14 +188,20 @@ "Invalid path selected" : "Izbrana je neveljavna pot", "Unknown error" : "Neznana napaka", "Ownership transfer request sent" : "Zahteva za prenos lastništva je poslana", + "Loading current folder" : "Poteka nalaganje trenutne mape", "No files in here" : "V mapi ni datotek", + "Go to the previous folder" : "Skoči na predhodno mapo", "Go back" : "Skoči nazaj", + "Files settings" : "Nastavitve datotek", + "File cannot be accessed" : "Do datoteke dostop ni mogoč", "Show hidden files" : "Pokaži skrite datoteke", "Crop image previews" : "Obreži slike predogleda", "Additional settings" : "Dodatne nastavitve", "WebDAV" : "WebDAV", "Copy to clipboard" : "Kopiraj v odložišče", "Use this address to access your Files via WebDAV" : "Uporabite ta naslov za dostop do datotek z uporabo WebDAV", + "Clipboard is not available" : "Odložišče ni na voljo", + "WebDAV URL copied to clipboard" : "Naslov URL WebDAV je kopiran v odložišče", "Unable to change the favourite state of the file" : "Ni mogoče spremeniti stanja priljubljenosti datoteke", "Error while loading the file data" : "Prišlo je do napake med nalaganjem podatkov računa", "Pick a template for {name}" : "Izbor predloge za {name}", @@ -184,6 +213,7 @@ "Delete permanently" : "Trajno izbriši", "Set up templates folder" : "Nastavitev mape predlog", "Templates" : "Predloge", + "Create new templates folder" : "Ustvari novo začasno mapo", "Unable to initialize the templates directory" : "Ni mogoče začeti mape predlog", "Toggle %1$s sublist" : "Preklopi podseznam %1$s", "Toggle grid view" : "Preklopi mrežni pogled", @@ -211,6 +241,7 @@ "Cannot transfer ownership of a file or folder you don't own" : "Ni mogoče prenesti lastništva datotek in map, katerih niste lastnik", "Cancel" : "Prekliči", "%s used" : "Uporabljeno %s", + "%s%%" : "%s%%", "%1$s of %2$s used" : "Uporabljeno %1$s od %2$s", "Settings" : "Nastavitve", "Deleted files" : "Izbrisane datoteke" diff --git a/apps/files/l10n/zh_CN.js b/apps/files/l10n/zh_CN.js index 09ff25ab9af..6a1a301b54b 100644 --- a/apps/files/l10n/zh_CN.js +++ b/apps/files/l10n/zh_CN.js @@ -58,7 +58,7 @@ OC.L10N.register( "Could not copy \"{file}\"" : "无法复制 \"{file}\"", "Copied {origin} inside {destination}" : "在 {destination} 内复制 {origin}", "Copied {origin} and {nbfiles} other files inside {destination}" : "在 {destination} 内复制了 {origin} 和 {nbfiles} 个其他文件", - "Failed to redirect to client" : "无法重定向到客户端", + "Failed to redirect to client" : "重定向到客户端失败", "{newName} already exists" : "{newName} 已经存在", "Could not rename \"{fileName}\", it does not exist any more" : "无法重命名 \"{fileName}\",此文件已经不存在", "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "文件夹 \"{dir}\" 中已经存在 \"{targetName}\"。请尝试其他的名称。", diff --git a/apps/files/l10n/zh_CN.json b/apps/files/l10n/zh_CN.json index 095a4e22eaf..066904aaa73 100644 --- a/apps/files/l10n/zh_CN.json +++ b/apps/files/l10n/zh_CN.json @@ -56,7 +56,7 @@ "Could not copy \"{file}\"" : "无法复制 \"{file}\"", "Copied {origin} inside {destination}" : "在 {destination} 内复制 {origin}", "Copied {origin} and {nbfiles} other files inside {destination}" : "在 {destination} 内复制了 {origin} 和 {nbfiles} 个其他文件", - "Failed to redirect to client" : "无法重定向到客户端", + "Failed to redirect to client" : "重定向到客户端失败", "{newName} already exists" : "{newName} 已经存在", "Could not rename \"{fileName}\", it does not exist any more" : "无法重命名 \"{fileName}\",此文件已经不存在", "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "文件夹 \"{dir}\" 中已经存在 \"{targetName}\"。请尝试其他的名称。", diff --git a/apps/files_external/l10n/ar.js b/apps/files_external/l10n/ar.js index 017a4a30b26..6e66dc0b849 100644 --- a/apps/files_external/l10n/ar.js +++ b/apps/files_external/l10n/ar.js @@ -24,10 +24,10 @@ OC.L10N.register( "Saving …" : "جاري الحفظ…", "Save" : "حفظ", "External mount error" : "خطأ في نقطة التثبيت (Mount point) الخارجي", - "Please enter the credentials for the {mount} mount" : "الرجاء إدخال معلومات الدخول لـ {mount} نقطة التثبيت", + "Please enter the credentials for the {mount} mount" : "الرجاء إدخال معلومات تسجيل الدخول لـ {mount} نقطة التثبيت", "Username" : "إسم المستخدم", "Password" : "كلمة السر", - "Credentials saving failed" : "فشل حفظ معلومات الدخول", + "Credentials saving failed" : "فشل حفظ معلومات تسجيل الدخول", "Invalid mount point" : "نقطة تثبيت (Mount point) غير صالحة", "Objectstore forbidden" : "مخزن الكائنات Objectstore ممنوع", "Invalid storage backend \"%s\"" : "الواجهة الخلفية للتخزين (Storage Backend) غير صالحة \"%s\"", @@ -40,11 +40,12 @@ OC.L10N.register( "App secret" : "التطبيق السري", "Client ID" : "معرف العميل", "Client secret" : "كلمة سر العميل", + "Tenant name" : "اسم المستأجر", "Identity endpoint URL" : "عنوان URL للوحدة الطرفية للهوية Identity endpoint", "Domain" : "النطاق", "Rackspace" : "Rackspace", "Username and password" : "اسم المستخدم والكلمة السرية", - "Log-in credentials, save in session" : "بيانات اعتماد تسجيل الدخول، احفظها في الجلسة", + "Log-in credentials, save in session" : "معلومات تسجيل الدخول، احفظها في الجلسة", "User entered, store in database" : "المستخدم مدخل، تخزين في قاعدة البيانات", "Public key" : "المفتاح العمومي", "Amazon S3" : "أمازون S3", @@ -55,6 +56,7 @@ OC.L10N.register( "Enable SSL" : "تمكين SSL", "WebDAV" : "WebDAV", "URL" : "عنوان الموقع", + "FTP" : "FTP", "Host" : "المضيف", "Secure ftps://" : "بروتوكول نقل الملفات الآمن //:ftps", "Local" : "محلي", @@ -65,6 +67,7 @@ OC.L10N.register( "Share" : "شارك", "Show hidden files" : "عرض الملفات المخفية", "Timeout" : "انتهى الوقت", + "OpenStack Object Storage" : "كائنات التخزين لـ OpenStack", "Service name" : "اسم الخدمة", "Name" : "اسم", "Storage type" : "نوع التخزين", diff --git a/apps/files_external/l10n/ar.json b/apps/files_external/l10n/ar.json index ff335b1a3ba..ecea8bdb786 100644 --- a/apps/files_external/l10n/ar.json +++ b/apps/files_external/l10n/ar.json @@ -22,10 +22,10 @@ "Saving …" : "جاري الحفظ…", "Save" : "حفظ", "External mount error" : "خطأ في نقطة التثبيت (Mount point) الخارجي", - "Please enter the credentials for the {mount} mount" : "الرجاء إدخال معلومات الدخول لـ {mount} نقطة التثبيت", + "Please enter the credentials for the {mount} mount" : "الرجاء إدخال معلومات تسجيل الدخول لـ {mount} نقطة التثبيت", "Username" : "إسم المستخدم", "Password" : "كلمة السر", - "Credentials saving failed" : "فشل حفظ معلومات الدخول", + "Credentials saving failed" : "فشل حفظ معلومات تسجيل الدخول", "Invalid mount point" : "نقطة تثبيت (Mount point) غير صالحة", "Objectstore forbidden" : "مخزن الكائنات Objectstore ممنوع", "Invalid storage backend \"%s\"" : "الواجهة الخلفية للتخزين (Storage Backend) غير صالحة \"%s\"", @@ -38,11 +38,12 @@ "App secret" : "التطبيق السري", "Client ID" : "معرف العميل", "Client secret" : "كلمة سر العميل", + "Tenant name" : "اسم المستأجر", "Identity endpoint URL" : "عنوان URL للوحدة الطرفية للهوية Identity endpoint", "Domain" : "النطاق", "Rackspace" : "Rackspace", "Username and password" : "اسم المستخدم والكلمة السرية", - "Log-in credentials, save in session" : "بيانات اعتماد تسجيل الدخول، احفظها في الجلسة", + "Log-in credentials, save in session" : "معلومات تسجيل الدخول، احفظها في الجلسة", "User entered, store in database" : "المستخدم مدخل، تخزين في قاعدة البيانات", "Public key" : "المفتاح العمومي", "Amazon S3" : "أمازون S3", @@ -53,6 +54,7 @@ "Enable SSL" : "تمكين SSL", "WebDAV" : "WebDAV", "URL" : "عنوان الموقع", + "FTP" : "FTP", "Host" : "المضيف", "Secure ftps://" : "بروتوكول نقل الملفات الآمن //:ftps", "Local" : "محلي", @@ -63,6 +65,7 @@ "Share" : "شارك", "Show hidden files" : "عرض الملفات المخفية", "Timeout" : "انتهى الوقت", + "OpenStack Object Storage" : "كائنات التخزين لـ OpenStack", "Service name" : "اسم الخدمة", "Name" : "اسم", "Storage type" : "نوع التخزين", diff --git a/apps/files_external/l10n/zh_CN.js b/apps/files_external/l10n/zh_CN.js index 932f6374949..d5f8cf152c9 100644 --- a/apps/files_external/l10n/zh_CN.js +++ b/apps/files_external/l10n/zh_CN.js @@ -60,7 +60,7 @@ OC.L10N.register( "App key" : "App key", "App secret" : "应用程序 secret", "OAuth2" : "OAuth2", - "Client ID" : "Client ID", + "Client ID" : "客户端ID", "Client secret" : "客户端 secret", "OpenStack v2" : "OpenStack v2", "Tenant name" : "租户名称", diff --git a/apps/files_external/l10n/zh_CN.json b/apps/files_external/l10n/zh_CN.json index 1f132d0cf38..c89c4557bd9 100644 --- a/apps/files_external/l10n/zh_CN.json +++ b/apps/files_external/l10n/zh_CN.json @@ -58,7 +58,7 @@ "App key" : "App key", "App secret" : "应用程序 secret", "OAuth2" : "OAuth2", - "Client ID" : "Client ID", + "Client ID" : "客户端ID", "Client secret" : "客户端 secret", "OpenStack v2" : "OpenStack v2", "Tenant name" : "租户名称", diff --git a/apps/files_sharing/l10n/zh_CN.js b/apps/files_sharing/l10n/zh_CN.js index 0f9898bd47b..275e315dfdf 100644 --- a/apps/files_sharing/l10n/zh_CN.js +++ b/apps/files_sharing/l10n/zh_CN.js @@ -39,7 +39,7 @@ OC.L10N.register( "Show grid view" : "显示网格视图", "No compatible server found at {remote}" : " {remote} 未发现匹配的服务器", "Invalid server URL" : "无效的服务器地址", - "Failed to add the public link to your Nextcloud" : "无法添加公开链接到您的 Nextcloud", + "Failed to add the public link to your Nextcloud" : "添加公开链接到您的Nextcloud失败", "No expiration date set" : "未设置失效时间", "Shared by" : "共享人", "File shares" : "文件共享", diff --git a/apps/files_sharing/l10n/zh_CN.json b/apps/files_sharing/l10n/zh_CN.json index f76dbe4fd70..d04e59cdaad 100644 --- a/apps/files_sharing/l10n/zh_CN.json +++ b/apps/files_sharing/l10n/zh_CN.json @@ -37,7 +37,7 @@ "Show grid view" : "显示网格视图", "No compatible server found at {remote}" : " {remote} 未发现匹配的服务器", "Invalid server URL" : "无效的服务器地址", - "Failed to add the public link to your Nextcloud" : "无法添加公开链接到您的 Nextcloud", + "Failed to add the public link to your Nextcloud" : "添加公开链接到您的Nextcloud失败", "No expiration date set" : "未设置失效时间", "Shared by" : "共享人", "File shares" : "文件共享", diff --git a/apps/files_sharing/src/components/SharingEntryLink.vue b/apps/files_sharing/src/components/SharingEntryLink.vue index b3740d4097f..f462f6eec9a 100644 --- a/apps/files_sharing/src/components/SharingEntryLink.vue +++ b/apps/files_sharing/src/components/SharingEntryLink.vue @@ -47,7 +47,7 @@ </NcActions> <!-- pending actions --> - <NcActions v-if="!pending && (pendingPassword || pendingExpirationDate)" + <NcActions v-if="!pending && (pendingPassword || pendingEnforcedPassword || pendingExpirationDate)" class="sharing-entry__actions" :aria-label="actionsTooltip" menu-align="right" @@ -64,10 +64,10 @@ </NcActionText> <!-- password --> - <NcActionText v-if="pendingPassword" icon="icon-password"> + <NcActionText v-if="pendingEnforcedPassword" icon="icon-password"> {{ t('files_sharing', 'Password protection (enforced)') }} </NcActionText> - <NcActionCheckbox v-else-if="config.enableLinkPasswordByDefault" + <NcActionCheckbox v-else-if="pendingPassword" :checked.sync="isPasswordProtected" :disabled="config.enforcePasswordForPublicLink || saving" class="share-link-password-checkbox" @@ -75,7 +75,7 @@ {{ t('files_sharing', 'Password protection') }} </NcActionCheckbox> - <NcActionInput v-if="pendingPassword || share.password" + <NcActionInput v-if="pendingEnforcedPassword || share.password" class="share-link-password" :value.sync="share.password" :disabled="saving" @@ -517,6 +517,9 @@ export default { * @return {boolean} */ pendingPassword() { + return this.config.enableLinkPasswordByDefault && this.share && !this.share.id + }, + pendingEnforcedPassword() { return this.config.enforcePasswordForPublicLink && this.share && !this.share.id }, pendingExpirationDate() { @@ -613,12 +616,9 @@ export default { // expiration is the share object key, not expireDate shareDefaults.expiration = this.formatDateToString(this.config.defaultExpirationDate) } - if (this.config.enableLinkPasswordByDefault) { - shareDefaults.password = await GeneratePassword() - } // do not push yet if we need a password or an expiration date: show pending menu - if (this.config.enforcePasswordForPublicLink || this.config.isDefaultExpireDateEnforced) { + if (this.config.enableLinkPasswordByDefault || this.config.enforcePasswordForPublicLink || this.config.isDefaultExpireDateEnforced) { this.pending = true // if a share already exists, pushing it @@ -641,8 +641,8 @@ export default { } // ELSE, show the pending popovermenu - // if password enforced, pre-fill with random one - if (this.config.enforcePasswordForPublicLink) { + // if password default or enforced, pre-fill with random one + if (this.config.enableLinkPasswordByDefault || this.config.enforcePasswordForPublicLink) { shareDefaults.password = await GeneratePassword() } diff --git a/apps/files_sharing/src/mixins/ShareRequests.js b/apps/files_sharing/src/mixins/ShareRequests.js index 4218eecc485..e1d246b7400 100644 --- a/apps/files_sharing/src/mixins/ShareRequests.js +++ b/apps/files_sharing/src/mixins/ShareRequests.js @@ -29,6 +29,7 @@ import 'url-search-params-polyfill' import { generateOcsUrl } from '@nextcloud/router' import axios from '@nextcloud/axios' import Share from '../models/Share.js' +import { emit } from '@nextcloud/event-bus' const shareUrl = generateOcsUrl('apps/files_sharing/api/v1/shares') @@ -57,7 +58,9 @@ export default { if (!request?.data?.ocs) { throw request } - return new Share(request.data.ocs.data) + const share = new Share(request.data.ocs.data) + emit('files_sharing:share:created', { share }) + return share } catch (error) { console.error('Error while creating share', error) const errorMessage = error?.response?.data?.ocs?.meta?.message @@ -81,6 +84,7 @@ export default { if (!request?.data?.ocs) { throw request } + emit('files_sharing:share:deleted', { id }) return true } catch (error) { console.error('Error while deleting share', error) @@ -102,6 +106,7 @@ export default { async updateShare(id, properties) { try { const request = await axios.put(shareUrl + `/${id}`, properties) + emit('files_sharing:share:updated', { id }) if (!request?.data?.ocs) { throw request } else { diff --git a/apps/oauth2/l10n/zh_CN.js b/apps/oauth2/l10n/zh_CN.js index 2806db7428c..273e5f557e0 100644 --- a/apps/oauth2/l10n/zh_CN.js +++ b/apps/oauth2/l10n/zh_CN.js @@ -12,7 +12,7 @@ OC.L10N.register( "Name" : "名称", "Redirection URI" : "跳转URI", "Add" : "添加", - "Client Identifier" : "客户端 ID", + "Client Identifier" : "客户端标识", "Secret" : "Secret", "Show client secret" : "显示客户端 secret", "Delete" : "删除" diff --git a/apps/oauth2/l10n/zh_CN.json b/apps/oauth2/l10n/zh_CN.json index 4aa0d6bf0b6..dcfea33c997 100644 --- a/apps/oauth2/l10n/zh_CN.json +++ b/apps/oauth2/l10n/zh_CN.json @@ -10,7 +10,7 @@ "Name" : "名称", "Redirection URI" : "跳转URI", "Add" : "添加", - "Client Identifier" : "客户端 ID", + "Client Identifier" : "客户端标识", "Secret" : "Secret", "Show client secret" : "显示客户端 secret", "Delete" : "删除" diff --git a/apps/settings/l10n/ar.js b/apps/settings/l10n/ar.js index 9d7327a22d3..1015e1d2625 100644 --- a/apps/settings/l10n/ar.js +++ b/apps/settings/l10n/ar.js @@ -90,7 +90,7 @@ OC.L10N.register( "Admin documentation" : "دليل المدير", "Developer documentation" : "دليل المُطوّر", "Featured" : "مميزة", - "Results from other categories" : "نتائج عبر الفئات الأخرى", + "Results from other categories" : "نتائج من التصنيفات الأخرى", "No apps found for your version" : "لا يمكن العثور على تطبيقات للإصدار الخاص بك.", "Disable all" : "تعطيل الكل", "Enable all" : "تنشيط الكل", @@ -113,7 +113,7 @@ OC.L10N.register( "Error while deleting the token" : "خطأ في حذف Token", "App name" : "إسم التطبيق", "Create new app password" : "إنشاء كلمة سرية جديدة للتطبيق", - "Use the credentials below to configure your app or device." : "استخدم معلومات الدخول التالية لضبط تطبيقك أو جهازك.", + "Use the credentials below to configure your app or device." : "استخدم معلومات تسجيل الدخول التالية لضبط تطبيقك أو جهازك.", "Username" : "إسم المستخدم", "Password" : "كلمة المرور", "Done" : "تم", @@ -198,7 +198,7 @@ OC.L10N.register( "Port" : "المنفذ", "Authentication method" : "أسلوب التطابق", "Authentication required" : "المصادقة مطلوبة", - "Credentials" : "معلومات الدخول", + "Credentials" : "معلومات تسجيل الدخول", "SMTP Username" : "إسم مستخدم الـ SMTP", "SMTP Password" : "كلمة مرور الـ SMTP", "Save" : "حفظ", diff --git a/apps/settings/l10n/ar.json b/apps/settings/l10n/ar.json index 8afa2b5f390..7727824727b 100644 --- a/apps/settings/l10n/ar.json +++ b/apps/settings/l10n/ar.json @@ -88,7 +88,7 @@ "Admin documentation" : "دليل المدير", "Developer documentation" : "دليل المُطوّر", "Featured" : "مميزة", - "Results from other categories" : "نتائج عبر الفئات الأخرى", + "Results from other categories" : "نتائج من التصنيفات الأخرى", "No apps found for your version" : "لا يمكن العثور على تطبيقات للإصدار الخاص بك.", "Disable all" : "تعطيل الكل", "Enable all" : "تنشيط الكل", @@ -111,7 +111,7 @@ "Error while deleting the token" : "خطأ في حذف Token", "App name" : "إسم التطبيق", "Create new app password" : "إنشاء كلمة سرية جديدة للتطبيق", - "Use the credentials below to configure your app or device." : "استخدم معلومات الدخول التالية لضبط تطبيقك أو جهازك.", + "Use the credentials below to configure your app or device." : "استخدم معلومات تسجيل الدخول التالية لضبط تطبيقك أو جهازك.", "Username" : "إسم المستخدم", "Password" : "كلمة المرور", "Done" : "تم", @@ -196,7 +196,7 @@ "Port" : "المنفذ", "Authentication method" : "أسلوب التطابق", "Authentication required" : "المصادقة مطلوبة", - "Credentials" : "معلومات الدخول", + "Credentials" : "معلومات تسجيل الدخول", "SMTP Username" : "إسم مستخدم الـ SMTP", "SMTP Password" : "كلمة مرور الـ SMTP", "Save" : "حفظ", diff --git a/apps/settings/l10n/sl.js b/apps/settings/l10n/sl.js index 8c25767f56f..1c326bd9638 100644 --- a/apps/settings/l10n/sl.js +++ b/apps/settings/l10n/sl.js @@ -432,7 +432,7 @@ OC.L10N.register( "day(s)" : "dneh", "Enforce expiration date" : "Vsili datum preteka", "Set default expiration date for shares to other servers" : "Nastavi privzeti datuma poteka za mesta souporabe na drugih strežnikih", - "Allow users to share via link and emails" : "Uporabnikom dovoli omogočanje souporabe s povezavami in elektronskimi sporočili", + "Allow users to share via link and emails" : "Uporabnikom dovoli omogočanje souporabe s povezavami in z elektronskimi sporočili", "Allow public uploads" : "Dovoli javno pošiljanje datotek v oblak", "Always ask for a password" : "Vedno zahtevaj geslo", "Enforce password protection" : "Vsili zaščito z geslom", diff --git a/apps/settings/l10n/sl.json b/apps/settings/l10n/sl.json index a0808263dd7..5c00f1de52c 100644 --- a/apps/settings/l10n/sl.json +++ b/apps/settings/l10n/sl.json @@ -430,7 +430,7 @@ "day(s)" : "dneh", "Enforce expiration date" : "Vsili datum preteka", "Set default expiration date for shares to other servers" : "Nastavi privzeti datuma poteka za mesta souporabe na drugih strežnikih", - "Allow users to share via link and emails" : "Uporabnikom dovoli omogočanje souporabe s povezavami in elektronskimi sporočili", + "Allow users to share via link and emails" : "Uporabnikom dovoli omogočanje souporabe s povezavami in z elektronskimi sporočili", "Allow public uploads" : "Dovoli javno pošiljanje datotek v oblak", "Always ask for a password" : "Vedno zahtevaj geslo", "Enforce password protection" : "Vsili zaščito z geslom", diff --git a/apps/settings/l10n/zh_CN.js b/apps/settings/l10n/zh_CN.js index b64a549441f..23883d3a890 100644 --- a/apps/settings/l10n/zh_CN.js +++ b/apps/settings/l10n/zh_CN.js @@ -407,6 +407,7 @@ OC.L10N.register( "Phone number" : "电话号码", "Role" : "角色", "Twitter" : "Twitter", + "Fediverse (e.g. Mastodon)" : "联邦宇宙(例如Mastodon)", "Website" : "网站", "Profile visibility" : "个人资料可见性", "Not available as this property is required for core functionality including file sharing and calendar invitations" : "不可用,因为包括文件共享和日历邀请在内的核心功能需要此属性", @@ -484,7 +485,7 @@ OC.L10N.register( "This text will be shown on the public link upload page when the file list is hidden." : "这些内容将在公开链接上传页中当文件列表隐藏时显示。", "Default share permissions" : "默认共享权限", "Reasons to use Nextcloud in your organization" : "在您的组织中使用 Nextcloud 的原因", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "由 {communityopen}Nextcloud community{linkclose} 开发,{githubopen}源代码{linkclose} 基于 {licenseopen}AGPL{linkclose} 许可协议。", + "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "由{communityopen}Nextcloud社区{linkclose}开发,{githubopen}源代码{linkclose}基于 {licenseopen}AGPL{linkclose}许可协议。", "Like our Facebook page" : "点赞我们 facebook 页面!", "Follow us on Twitter" : "在 Twitter 上关注我们!", "Follow us on Mastodon" : "在Mastodon上关注我们", diff --git a/apps/settings/l10n/zh_CN.json b/apps/settings/l10n/zh_CN.json index 8161e9e83f7..921cbc25adb 100644 --- a/apps/settings/l10n/zh_CN.json +++ b/apps/settings/l10n/zh_CN.json @@ -405,6 +405,7 @@ "Phone number" : "电话号码", "Role" : "角色", "Twitter" : "Twitter", + "Fediverse (e.g. Mastodon)" : "联邦宇宙(例如Mastodon)", "Website" : "网站", "Profile visibility" : "个人资料可见性", "Not available as this property is required for core functionality including file sharing and calendar invitations" : "不可用,因为包括文件共享和日历邀请在内的核心功能需要此属性", @@ -482,7 +483,7 @@ "This text will be shown on the public link upload page when the file list is hidden." : "这些内容将在公开链接上传页中当文件列表隐藏时显示。", "Default share permissions" : "默认共享权限", "Reasons to use Nextcloud in your organization" : "在您的组织中使用 Nextcloud 的原因", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "由 {communityopen}Nextcloud community{linkclose} 开发,{githubopen}源代码{linkclose} 基于 {licenseopen}AGPL{linkclose} 许可协议。", + "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "由{communityopen}Nextcloud社区{linkclose}开发,{githubopen}源代码{linkclose}基于 {licenseopen}AGPL{linkclose}许可协议。", "Like our Facebook page" : "点赞我们 facebook 页面!", "Follow us on Twitter" : "在 Twitter 上关注我们!", "Follow us on Mastodon" : "在Mastodon上关注我们", diff --git a/apps/settings/src/admin.js b/apps/settings/src/admin.js index 665f553bfbc..3bbfb564763 100644 --- a/apps/settings/src/admin.js +++ b/apps/settings/src/admin.js @@ -46,6 +46,21 @@ window.addEventListener('DOMContentLoaded', () => { $('#setDefaultRemoteExpireDate').toggleClass('hidden', !this.checked) }) + $('#enableLinkPasswordByDefault').change(function() { + if (this.checked) { + $('#enforceLinkPassword').removeAttr('disabled') + $('#passwordsExcludedGroups').removeAttr('disabled') + } else { + $('#enforceLinkPassword').attr('disabled', '') + $('#passwordsExcludedGroups').attr('disabled', '') + + // Uncheck "Enforce password protection" when "Always asks for a + // password" is unchecked; the change event needs to be explicitly + // triggered so it behaves like a change done by the user. + $('#enforceLinkPassword').removeAttr('checked').trigger('change') + } + }) + $('#enforceLinkPassword').change(function() { $('#selectPasswordsExcludedGroups').toggleClass('hidden', !this.checked) }) diff --git a/apps/settings/templates/settings/admin/sharing.php b/apps/settings/templates/settings/admin/sharing.php index 709c36a7b7b..2918a764d89 100644 --- a/apps/settings/templates/settings/admin/sharing.php +++ b/apps/settings/templates/settings/admin/sharing.php @@ -117,17 +117,19 @@ <input type="checkbox" name="shareapi_enforce_links_password" id="enforceLinkPassword" class="checkbox" value="1" <?php if ($_['enforceLinkPassword']) { print_unescaped('checked="checked"'); +} ?> <?php if ($_['enableLinkPasswordByDefault'] !== 'yes') { + print_unescaped('disabled'); } ?> /> - <label for="enforceLinkPassword"><?php p($l->t('Enforce password protection'));?></label><br/> + <label for="enforceLinkPassword" class="indent"><?php p($l->t('Enforce password protection'));?></label><br/> <?php if ($_['passwordExcludedGroupsFeatureEnabled']) { ?> - <div id="selectPasswordsExcludedGroups" class="indent <?php if (!$_['enforceLinkPassword']) { p('hidden'); } ?>"> - <div class="indent"> - <label for="shareapi_enforce_links_password_excluded_groups"><?php p($l->t('Exclude groups from password requirements:'));?> - <br /> - <input name="shareapi_enforce_links_password_excluded_groups" id="passwordsExcludedGroups" value="<?php p($_['passwordExcludedGroups']) ?>" style="width: 400px" class="noJSAutoUpdate"/> - </div> - </div> + <span id="selectPasswordsExcludedGroups" class="double-indent <?php if (!$_['enforceLinkPassword']) { p('hidden'); } ?>"> + <label for="shareapi_enforce_links_password_excluded_groups"><?php p($l->t('Exclude groups from password requirements:'));?></label><br/> + <input name="shareapi_enforce_links_password_excluded_groups" id="passwordsExcludedGroups" value="<?php p($_['passwordExcludedGroups']) ?>" + style="width: 400px" class="noJSAutoUpdate double-indent" <?php if ($_['enableLinkPasswordByDefault'] !== 'yes') { + print_unescaped('disabled'); +} ?> /> + </span><br/> <?php } ?> <input type="checkbox" name="shareapi_default_expire_date" id="shareapiDefaultExpireDate" class="checkbox" diff --git a/apps/systemtags/l10n/cs.js b/apps/systemtags/l10n/cs.js index bec19c16f36..b16bf069521 100644 --- a/apps/systemtags/l10n/cs.js +++ b/apps/systemtags/l10n/cs.js @@ -48,6 +48,7 @@ OC.L10N.register( "Collaborative tags" : "Štítky pro spolupráci", "Collaborative tagging functionality which shares tags among users." : "Funkce opatřování štítky pro spolupráci, sdílenými mezi uživateli.", "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.)" : "Funkce pro opatřování štítky pro spolupráci, sdílenými mezi uživateli. Skvělé pro týmy.\n\t(Pokud jste poskytovateli instalace, sloužící více subjektům, je doporučeno tuto aplikaci vypnout, protože štítky jsou sdílené.)", + "Search or create collaborative tags" : "Hledat nebo vytvořit štítky pro spolupráci", "Collaborative tags …" : "Štítky pro spolupráci…", "No tags to select, type to create a new tag" : "Nevybrány žádné štítky k výběru – psaním vytvořte nový", "Failed to load tags" : "Štítky se nepodařilo načíst", diff --git a/apps/systemtags/l10n/cs.json b/apps/systemtags/l10n/cs.json index 74e7bdae3e9..746dba25411 100644 --- a/apps/systemtags/l10n/cs.json +++ b/apps/systemtags/l10n/cs.json @@ -46,6 +46,7 @@ "Collaborative tags" : "Štítky pro spolupráci", "Collaborative tagging functionality which shares tags among users." : "Funkce opatřování štítky pro spolupráci, sdílenými mezi uživateli.", "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.)" : "Funkce pro opatřování štítky pro spolupráci, sdílenými mezi uživateli. Skvělé pro týmy.\n\t(Pokud jste poskytovateli instalace, sloužící více subjektům, je doporučeno tuto aplikaci vypnout, protože štítky jsou sdílené.)", + "Search or create collaborative tags" : "Hledat nebo vytvořit štítky pro spolupráci", "Collaborative tags …" : "Štítky pro spolupráci…", "No tags to select, type to create a new tag" : "Nevybrány žádné štítky k výběru – psaním vytvořte nový", "Failed to load tags" : "Štítky se nepodařilo načíst", diff --git a/apps/systemtags/l10n/zh_CN.js b/apps/systemtags/l10n/zh_CN.js index 0e62f726678..b90d60cdab7 100644 --- a/apps/systemtags/l10n/zh_CN.js +++ b/apps/systemtags/l10n/zh_CN.js @@ -46,7 +46,7 @@ OC.L10N.register( "Collaborative tags" : "协作标签", "Collaborative tagging functionality which shares tags among users." : "协作标签功能在用户间共享标签。", "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.)" : "协作标签功能在用户间共享标签。适合团队使用。\n\n\t(如果您是一个多租户安装实例的提供者,建议在标签共享时禁用此应用)", - "Failed to load tags" : "无法加载标签", + "Failed to load tags" : "加载标签失败", "Tagged files" : "标签文件", "Select tags to filter by" : "选择标签来筛选", "No tags found" : "标签未找到", diff --git a/apps/systemtags/l10n/zh_CN.json b/apps/systemtags/l10n/zh_CN.json index f2b44cadd5e..e602c5fc840 100644 --- a/apps/systemtags/l10n/zh_CN.json +++ b/apps/systemtags/l10n/zh_CN.json @@ -44,7 +44,7 @@ "Collaborative tags" : "协作标签", "Collaborative tagging functionality which shares tags among users." : "协作标签功能在用户间共享标签。", "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.)" : "协作标签功能在用户间共享标签。适合团队使用。\n\n\t(如果您是一个多租户安装实例的提供者,建议在标签共享时禁用此应用)", - "Failed to load tags" : "无法加载标签", + "Failed to load tags" : "加载标签失败", "Tagged files" : "标签文件", "Select tags to filter by" : "选择标签来筛选", "No tags found" : "标签未找到", diff --git a/apps/theming/lib/Util.php b/apps/theming/lib/Util.php index 789da394567..635c0026112 100644 --- a/apps/theming/lib/Util.php +++ b/apps/theming/lib/Util.php @@ -190,7 +190,7 @@ class Util { if ($this->config->getAppValue('theming', 'logoMime', '') !== '') { $logoFile = null; try { - $folder = $this->appData->getFolder('images'); + $folder = $this->appData->getFolder('global/images'); return $folder->getFile('logo'); } catch (NotFoundException $e) { } diff --git a/apps/theming/tests/IconBuilderTest.php b/apps/theming/tests/IconBuilderTest.php index 6edd6a05525..5637ce25cb6 100644 --- a/apps/theming/tests/IconBuilderTest.php +++ b/apps/theming/tests/IconBuilderTest.php @@ -103,7 +103,7 @@ class IconBuilderTest extends TestCase { ->willReturn($color); $this->appData->expects($this->once()) ->method('getFolder') - ->with('images') + ->with('global/images') ->willThrowException(new NotFoundException()); $expectedIcon = new \Imagick(realpath(dirname(__FILE__)). "/data/" . $file); @@ -132,7 +132,7 @@ class IconBuilderTest extends TestCase { ->willReturn($color); $this->appData->expects($this->once()) ->method('getFolder') - ->with('images') + ->with('global/images') ->willThrowException(new NotFoundException()); $expectedIcon = new \Imagick(realpath(dirname(__FILE__)). "/data/" . $file); @@ -165,7 +165,7 @@ class IconBuilderTest extends TestCase { ->willReturn($color); $this->appData->expects($this->once()) ->method('getFolder') - ->with('images') + ->with('global/images') ->willThrowException(new NotFoundException()); $expectedIcon = new \Imagick(realpath(dirname(__FILE__)). "/data/" . $file); diff --git a/apps/theming/tests/UtilTest.php b/apps/theming/tests/UtilTest.php index 137038acb98..febf6c0a79e 100644 --- a/apps/theming/tests/UtilTest.php +++ b/apps/theming/tests/UtilTest.php @@ -153,7 +153,7 @@ class UtilTest extends TestCase { public function testGetAppIcon($app, $expected) { $this->appData->expects($this->any()) ->method('getFolder') - ->with('images') + ->with('global/images') ->willThrowException(new NotFoundException()); $this->appManager->expects($this->once()) ->method('getAppPath') @@ -180,7 +180,7 @@ class UtilTest extends TestCase { ->willReturn($file); $this->appData->expects($this->once()) ->method('getFolder') - ->with('images') + ->with('global/images') ->willReturn($folder); $icon = $this->util->getAppIcon('noapplikethis'); $this->assertEquals($file, $icon); diff --git a/apps/updatenotification/l10n/tr.js b/apps/updatenotification/l10n/tr.js index 2d020ebe94e..127ff5871e5 100644 --- a/apps/updatenotification/l10n/tr.js +++ b/apps/updatenotification/l10n/tr.js @@ -6,7 +6,7 @@ OC.L10N.register( "Web updater is disabled" : "Güncelleyici devre dışı bırakılmış", "Update notifications" : "Güncelleme bildirimleri", "The update server could not be reached since %d days to check for new updates." : "%d gündür güncellemeleri denetlemek için güncelleme sunucusuna bağlanılamadı.", - "Please check the Nextcloud and server log files for errors." : "Lütfen sorunu bulmak için Nextcloud ve sunucu günlük dosyalarına bakın.", + "Please check the Nextcloud and server log files for errors." : "Lütfen sorunu bulmak için Nextcloud ve sunucu günlük dosyalarına bakın.", "Update to %1$s is available." : "%1$s güncellemesi yayınlanmış.", "Update to {serverAndVersion} is available." : "{serverAndVersion} güncellemesi yayınlanmış.", "Update for {app} to version %s is available." : "{app} uygulaması için %s sürümü güncellemesi yayınlanmış.", diff --git a/apps/updatenotification/l10n/tr.json b/apps/updatenotification/l10n/tr.json index 9d7783bb0ea..dbb576b5830 100644 --- a/apps/updatenotification/l10n/tr.json +++ b/apps/updatenotification/l10n/tr.json @@ -4,7 +4,7 @@ "Web updater is disabled" : "Güncelleyici devre dışı bırakılmış", "Update notifications" : "Güncelleme bildirimleri", "The update server could not be reached since %d days to check for new updates." : "%d gündür güncellemeleri denetlemek için güncelleme sunucusuna bağlanılamadı.", - "Please check the Nextcloud and server log files for errors." : "Lütfen sorunu bulmak için Nextcloud ve sunucu günlük dosyalarına bakın.", + "Please check the Nextcloud and server log files for errors." : "Lütfen sorunu bulmak için Nextcloud ve sunucu günlük dosyalarına bakın.", "Update to %1$s is available." : "%1$s güncellemesi yayınlanmış.", "Update to {serverAndVersion} is available." : "{serverAndVersion} güncellemesi yayınlanmış.", "Update for {app} to version %s is available." : "{app} uygulaması için %s sürümü güncellemesi yayınlanmış.", diff --git a/apps/user_ldap/l10n/cs.js b/apps/user_ldap/l10n/cs.js index 386360449b8..6115cae2667 100644 --- a/apps/user_ldap/l10n/cs.js +++ b/apps/user_ldap/l10n/cs.js @@ -185,6 +185,23 @@ OC.L10N.register( "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home bude v nastavení externího úložiště nahrazeno hodnotou zadaného atributu", "User Profile Attributes" : "Atributy uživatelského profilu", "Phone Field" : "Kolonka s telefonním číslem", + "User profile Phone will be set from the specified attribute" : "Ze zadaného atributu bude nastaven Telefon u uživatelského profilu", + "Website Field" : "Kolonka webové stránky", + "User profile Website will be set from the specified attribute" : "Ze zadaného atributu bude nastavena adresa Webových stránek u uživatelského profilu", + "Address Field" : "Kolonka adresa", + "User profile Address will be set from the specified attribute" : "Ze zadaného atributu bude nastavena Adresa u uživatelského profilu", + "Twitter Field" : "Kolonka Twitter", + "User profile Twitter will be set from the specified attribute" : "Ze zadaného atributu bude nastavena adresa na Twitteru u uživatelského profilu", + "Fediverse Field" : "Kolonka Fediverse", + "User profile Fediverse will be set from the specified attribute" : "Ze zadaného atributu bude nastavena adresa v rámci Fediverse u uživatelského profilu", + "Organisation Field" : "Kolonka organizace", + "User profile Organisation will be set from the specified attribute" : "Ze zadaného atributu bude nastavena Organizace u uživatelského profilu", + "Role Field" : "Kolonka role", + "User profile Role will be set from the specified attribute" : "Ze zadaného atributu bude nastavena Role u uživatelského profilu", + "Headline Field" : "Kolonka nadpis", + "User profile Headline will be set from the specified attribute" : "Ze zadaného atributu bude nastaven Nadpis u uživatelského profilu", + "Biography Field" : "Kolonka životopis", + "User profile Biography will be set from the specified attribute" : "Ze zadaného atributu bude nastaven Životopis u uživatelského profilu", "Internal Username" : "Interní uživatelské jméno", "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." : "Ve výchozím nastavení bude interní uživatelské jméno vytvořeno z atributu UUID. To zajišťuje, že je uživatelské jméno unikátní a znaky nemusí být převáděny. Interní uživatelské jméno má omezení, podle kterého jsou povoleny jen následující znaky [ a-zA-Z0-9_.@- ]. Ostatní znaky jsou nahrazeny jejich protějšky z ASCII nebo prostě vynechány. Při konfliktech bude přidáno/zvýšeno číslo. Interní uživatelské jméno slouží pro interní identifikaci uživatele. Je také výchozím názvem domovského adresáře uživatele. Je také součástí URL, např. pro služby *DAV. Tímto nastavením může být výchozí chování změněno. Změny se projeví pouze u nově namapovaných (přidaných) uživatelů LDAP. Ponechte ho prázdné, pokud chcete zachovat výchozí nastavení. ", "Internal Username Attribute:" : "Atribut interního uživatelského jména:", diff --git a/apps/user_ldap/l10n/cs.json b/apps/user_ldap/l10n/cs.json index e42afe292f9..8c5fa94dadd 100644 --- a/apps/user_ldap/l10n/cs.json +++ b/apps/user_ldap/l10n/cs.json @@ -183,6 +183,23 @@ "$home in an external storage configuration will be replaced with the value of the specified attribute" : "$home bude v nastavení externího úložiště nahrazeno hodnotou zadaného atributu", "User Profile Attributes" : "Atributy uživatelského profilu", "Phone Field" : "Kolonka s telefonním číslem", + "User profile Phone will be set from the specified attribute" : "Ze zadaného atributu bude nastaven Telefon u uživatelského profilu", + "Website Field" : "Kolonka webové stránky", + "User profile Website will be set from the specified attribute" : "Ze zadaného atributu bude nastavena adresa Webových stránek u uživatelského profilu", + "Address Field" : "Kolonka adresa", + "User profile Address will be set from the specified attribute" : "Ze zadaného atributu bude nastavena Adresa u uživatelského profilu", + "Twitter Field" : "Kolonka Twitter", + "User profile Twitter will be set from the specified attribute" : "Ze zadaného atributu bude nastavena adresa na Twitteru u uživatelského profilu", + "Fediverse Field" : "Kolonka Fediverse", + "User profile Fediverse will be set from the specified attribute" : "Ze zadaného atributu bude nastavena adresa v rámci Fediverse u uživatelského profilu", + "Organisation Field" : "Kolonka organizace", + "User profile Organisation will be set from the specified attribute" : "Ze zadaného atributu bude nastavena Organizace u uživatelského profilu", + "Role Field" : "Kolonka role", + "User profile Role will be set from the specified attribute" : "Ze zadaného atributu bude nastavena Role u uživatelského profilu", + "Headline Field" : "Kolonka nadpis", + "User profile Headline will be set from the specified attribute" : "Ze zadaného atributu bude nastaven Nadpis u uživatelského profilu", + "Biography Field" : "Kolonka životopis", + "User profile Biography will be set from the specified attribute" : "Ze zadaného atributu bude nastaven Životopis u uživatelského profilu", "Internal Username" : "Interní uživatelské jméno", "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." : "Ve výchozím nastavení bude interní uživatelské jméno vytvořeno z atributu UUID. To zajišťuje, že je uživatelské jméno unikátní a znaky nemusí být převáděny. Interní uživatelské jméno má omezení, podle kterého jsou povoleny jen následující znaky [ a-zA-Z0-9_.@- ]. Ostatní znaky jsou nahrazeny jejich protějšky z ASCII nebo prostě vynechány. Při konfliktech bude přidáno/zvýšeno číslo. Interní uživatelské jméno slouží pro interní identifikaci uživatele. Je také výchozím názvem domovského adresáře uživatele. Je také součástí URL, např. pro služby *DAV. Tímto nastavením může být výchozí chování změněno. Změny se projeví pouze u nově namapovaných (přidaných) uživatelů LDAP. Ponechte ho prázdné, pokud chcete zachovat výchozí nastavení. ", "Internal Username Attribute:" : "Atribut interního uživatelského jména:", diff --git a/apps/user_ldap/l10n/pt_BR.js b/apps/user_ldap/l10n/pt_BR.js index d89c28c86c7..5b34a234768 100644 --- a/apps/user_ldap/l10n/pt_BR.js +++ b/apps/user_ldap/l10n/pt_BR.js @@ -196,6 +196,11 @@ OC.L10N.register( "User profile Fediverse will be set from the specified attribute" : "O perfil do usuário Fediverse será definido a partir do atributo especificado", "Organisation Field" : "Campo da organização", "User profile Organisation will be set from the specified attribute" : "A organização do perfil do usuário será definida a partir do atributo especificado", + "Role Field" : "Campo de Função", + "User profile Role will be set from the specified attribute" : "Perfil do usuário A função será definida a partir do atributo especificado", + "Headline Field" : "Campo do Título", + "User profile Headline will be set from the specified attribute" : "O título do perfil do usuário será definido a partir do atributo especificado", + "Biography Field" : "Campo da Biografia", "Internal Username" : "Nome de usuário interno", "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." : "Por padrão, o nome de usuário interno será criado a partir do atributo UUID. Ele garante que o nome de usuário seja exclusivo e os caracteres não precisem ser convertidos. O nome de usuário interno tem a restrição de que apenas esses caracteres são permitidos: [a-zA-Z0-9_.@-]. Outros caracteres são substituídos por sua correspondência ASCII ou simplesmente omitidos. Em colisões, um número será adicionado/aumentado. O nome de usuário interno é usado para identificar um usuário internamente. Também é o nome padrão para a pasta inicial do usuário. Também faz parte de URLs remotos, por exemplo, para todos os serviços DAV. Com essa configuração, o comportamento padrão pode ser substituído. As alterações terão efeito apenas em usuários LDAP recém-mapeados (adicionados). Deixe-o vazio para o comportamento padrão.", "Internal Username Attribute:" : "Atributo Interno de Nome de Usuário:", diff --git a/apps/user_ldap/l10n/pt_BR.json b/apps/user_ldap/l10n/pt_BR.json index 6d6f0433bc5..68e9342b37a 100644 --- a/apps/user_ldap/l10n/pt_BR.json +++ b/apps/user_ldap/l10n/pt_BR.json @@ -194,6 +194,11 @@ "User profile Fediverse will be set from the specified attribute" : "O perfil do usuário Fediverse será definido a partir do atributo especificado", "Organisation Field" : "Campo da organização", "User profile Organisation will be set from the specified attribute" : "A organização do perfil do usuário será definida a partir do atributo especificado", + "Role Field" : "Campo de Função", + "User profile Role will be set from the specified attribute" : "Perfil do usuário A função será definida a partir do atributo especificado", + "Headline Field" : "Campo do Título", + "User profile Headline will be set from the specified attribute" : "O título do perfil do usuário será definido a partir do atributo especificado", + "Biography Field" : "Campo da Biografia", "Internal Username" : "Nome de usuário interno", "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." : "Por padrão, o nome de usuário interno será criado a partir do atributo UUID. Ele garante que o nome de usuário seja exclusivo e os caracteres não precisem ser convertidos. O nome de usuário interno tem a restrição de que apenas esses caracteres são permitidos: [a-zA-Z0-9_.@-]. Outros caracteres são substituídos por sua correspondência ASCII ou simplesmente omitidos. Em colisões, um número será adicionado/aumentado. O nome de usuário interno é usado para identificar um usuário internamente. Também é o nome padrão para a pasta inicial do usuário. Também faz parte de URLs remotos, por exemplo, para todos os serviços DAV. Com essa configuração, o comportamento padrão pode ser substituído. As alterações terão efeito apenas em usuários LDAP recém-mapeados (adicionados). Deixe-o vazio para o comportamento padrão.", "Internal Username Attribute:" : "Atributo Interno de Nome de Usuário:", diff --git a/apps/user_ldap/l10n/zh_CN.js b/apps/user_ldap/l10n/zh_CN.js index c01a3ed7039..d8b4897c134 100644 --- a/apps/user_ldap/l10n/zh_CN.js +++ b/apps/user_ldap/l10n/zh_CN.js @@ -1,8 +1,8 @@ OC.L10N.register( "user_ldap", { - "Failed to clear the mappings." : "无法清除映射。", - "Failed to delete the server configuration" : "未能删除服务器配置", + "Failed to clear the mappings." : "清除映射失败。", + "Failed to delete the server configuration" : "删除服务器配置失败", "Invalid configuration: Anonymous binding is not allowed." : "配置无效:不允许匿名绑定。", "Valid configuration, connection established!" : "配置有效,连接成功!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "配置有效但绑定失败。请检查服务器设置和认证信息。", @@ -177,6 +177,8 @@ OC.L10N.register( "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "用户名留空(默认)。 否则请指定 LDAP / AD 属性。", "\"$home\" Placeholder Field" : "\"$home\" 占位字段", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "位于外部存储配置的 $home 将被指定属性替换", + "Fediverse Field" : "联邦宇宙字段", + "User profile Fediverse will be set from the specified attribute" : "用户个人资料的联邦宇宙将从指定的属性设定", "Internal Username" : "内部用户名", "Internal Username Attribute:" : "内部用户名属性:", "Override UUID detection" : "覆盖 UUID 检测", diff --git a/apps/user_ldap/l10n/zh_CN.json b/apps/user_ldap/l10n/zh_CN.json index e791075ae50..fc9e4cf9901 100644 --- a/apps/user_ldap/l10n/zh_CN.json +++ b/apps/user_ldap/l10n/zh_CN.json @@ -1,6 +1,6 @@ { "translations": { - "Failed to clear the mappings." : "无法清除映射。", - "Failed to delete the server configuration" : "未能删除服务器配置", + "Failed to clear the mappings." : "清除映射失败。", + "Failed to delete the server configuration" : "删除服务器配置失败", "Invalid configuration: Anonymous binding is not allowed." : "配置无效:不允许匿名绑定。", "Valid configuration, connection established!" : "配置有效,连接成功!", "Valid configuration, but binding failed. Please check the server settings and credentials." : "配置有效但绑定失败。请检查服务器设置和认证信息。", @@ -175,6 +175,8 @@ "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "用户名留空(默认)。 否则请指定 LDAP / AD 属性。", "\"$home\" Placeholder Field" : "\"$home\" 占位字段", "$home in an external storage configuration will be replaced with the value of the specified attribute" : "位于外部存储配置的 $home 将被指定属性替换", + "Fediverse Field" : "联邦宇宙字段", + "User profile Fediverse will be set from the specified attribute" : "用户个人资料的联邦宇宙将从指定的属性设定", "Internal Username" : "内部用户名", "Internal Username Attribute:" : "内部用户名属性:", "Override UUID detection" : "覆盖 UUID 检测", diff --git a/apps/user_status/l10n/tr.js b/apps/user_status/l10n/tr.js index a6acfe9696e..454edb4cfe0 100644 --- a/apps/user_status/l10n/tr.js +++ b/apps/user_status/l10n/tr.js @@ -11,7 +11,9 @@ OC.L10N.register( "User status" : "Kullanıcı durumu", "View profile" : "Profili görüntüle", "Clear status after" : "Durum şu kadar sonra kaldırılsın", + "Emoji for your status message" : "Durum iletiniz için emoji", "What is your status?" : "Durumunuz nedir?", + "Predefined statuses" : "Hazır durumlar", "Previously set" : "Önceden ayarlanmış", "Reset status" : "Durumu sıfırla", "Set status" : "Durumu ayarla", diff --git a/apps/user_status/l10n/tr.json b/apps/user_status/l10n/tr.json index 56c7def2140..ed1c752df64 100644 --- a/apps/user_status/l10n/tr.json +++ b/apps/user_status/l10n/tr.json @@ -9,7 +9,9 @@ "User status" : "Kullanıcı durumu", "View profile" : "Profili görüntüle", "Clear status after" : "Durum şu kadar sonra kaldırılsın", + "Emoji for your status message" : "Durum iletiniz için emoji", "What is your status?" : "Durumunuz nedir?", + "Predefined statuses" : "Hazır durumlar", "Previously set" : "Önceden ayarlanmış", "Reset status" : "Durumu sıfırla", "Set status" : "Durumu ayarla", diff --git a/build/psalm-baseline.xml b/build/psalm-baseline.xml index 72b94dc35d7..355947ffa7e 100644 --- a/build/psalm-baseline.xml +++ b/build/psalm-baseline.xml @@ -16,9 +16,6 @@ </MoreSpecificImplementedParamType> </file> <file src="3rdparty/sabre/dav/lib/CardDAV/AddressBook.php"> - <LessSpecificImplementedReturnType> - <code>array</code> - </LessSpecificImplementedReturnType> <MoreSpecificImplementedParamType> <code>$vcardData</code> </MoreSpecificImplementedParamType> @@ -32,7 +29,7 @@ </MoreSpecificImplementedParamType> </file> <file src="3rdparty/sabre/dav/lib/CardDAV/Card.php"> - <MoreSpecificImplementedParamType occurrences="1"> + <MoreSpecificImplementedParamType> <code>$cardData</code> </MoreSpecificImplementedParamType> </file> @@ -858,11 +855,6 @@ <code>getSize</code> </UndefinedInterfaceMethod> </file> - <file src="apps/encryption/lib/Command/ScanLegacyFormat.php"> - <InvalidOperand> - <code><![CDATA[$this->scanFolder($output, '/' . $user)]]></code> - </InvalidOperand> - </file> <file src="apps/encryption/lib/Crypto/Crypt.php"> <RedundantCondition> <code>$userSession</code> @@ -984,11 +976,6 @@ <code><![CDATA[$this->fileIsEncrypted]]></code> </TypeDoesNotContainType> </file> - <file src="apps/files/lib/Command/Scan.php"> - <NullArgument> - <code>null</code> - </NullArgument> - </file> <file src="apps/files/lib/Command/ScanAppData.php"> <NullArgument> <code>null</code> @@ -2744,11 +2731,6 @@ <code>false|string</code> </ImplementedReturnTypeMismatch> </file> - <file src="lib/private/Files/ObjectStore/NoopScanner.php"> - <MoreSpecificImplementedParamType> - <code>$cacheData</code> - </MoreSpecificImplementedParamType> - </file> <file src="lib/private/Files/ObjectStore/ObjectStoreStorage.php"> <InvalidScalarArgument> <code>$source</code> @@ -3186,20 +3168,6 @@ <code>\ArrayAccess</code> </MissingTemplateParam> </file> - <file src="lib/private/Memcache/Redis.php"> - <InvalidMethodCall> - <code>exec</code> - <code>exec</code> - </InvalidMethodCall> - </file> - <file src="lib/private/Metadata/Provider/ExifProvider.php"> - <InvalidReturnStatement> - <code>$exifData</code> - </InvalidReturnStatement> - <InvalidReturnType> - <code>array{'gps': FileMetadata, 'size': FileMetadata}</code> - </InvalidReturnType> - </file> <file src="lib/private/NavigationManager.php"> <ParamNameMismatch> <code>$id</code> diff --git a/config/config.sample.php b/config/config.sample.php index 870d09e24a7..366b6fbbc75 100644 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -1228,6 +1228,11 @@ $CONFIG = [ 'preview_imaginary_url' => 'http://previews_hpb:8088/', /** + * If you want set a api key for imaginary. + */ +'preview_imaginary_key' => 'secret', + +/** * Only register providers that have been explicitly enabled * * The following providers are disabled by default due to performance or privacy diff --git a/core/l10n/ar.js b/core/l10n/ar.js index 51779851e6a..fe0a82b2b66 100644 --- a/core/l10n/ar.js +++ b/core/l10n/ar.js @@ -131,7 +131,7 @@ OC.L10N.register( "Please try again or contact your administrator." : "حاول مجددا أو تواصل مع مسؤول النظام.", "Account name or email" : "اسم الحساب أو البريد الالكتروني", "Password" : "كلمة المرور", - "Log in to {productName}" : "الولوج إلى {productName}", + "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 ثانية.", diff --git a/core/l10n/ar.json b/core/l10n/ar.json index 8612fd9314a..65020f3490d 100644 --- a/core/l10n/ar.json +++ b/core/l10n/ar.json @@ -129,7 +129,7 @@ "Please try again or contact your administrator." : "حاول مجددا أو تواصل مع مسؤول النظام.", "Account name or email" : "اسم الحساب أو البريد الالكتروني", "Password" : "كلمة المرور", - "Log in to {productName}" : "الولوج إلى {productName}", + "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 ثانية.", diff --git a/core/l10n/cs.js b/core/l10n/cs.js index b70f336b778..231bc8195a9 100644 --- a/core/l10n/cs.js +++ b/core/l10n/cs.js @@ -81,6 +81,7 @@ OC.L10N.register( "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Vaše databáze není spuštěná s úrovní izolace transakcí „READ COMMITTED“. Toto může způsobit problémy při paralelním spouštění více akcí současně.", "The PHP module \"fileinfo\" is missing. It is strongly recommended to enable this module to get the best results with MIME type detection." : "Modul PHP „fileinfo“ chybí. Důrazně se doporučuje zapnout tento modul pro zajištění lepšího zjišťování MIME typů.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable \"filelocking.enabled\" in config.php to avoid these problems. See the {linkstart}documentation ↗{linkend} for more information." : "Transakční zamykání souborů je vypnuto, což může vést k problémům při souběžném přístupu. Abyste se jim vyhli, zapněte v config.php volbu „filelocking.enabled“. Další informace naleznete v {linkstart}dokumentaci ↗{linkend}.", + "The database is used for transactional file locking. To enhance performance, please configure memcache, if available. See the {linkstart}documentation ↗{linkend} for more information." : "Databáze je používaná pro transakční zamykání souborů. Pokud chcete vylepšit výkon, nastavte memcache (pokud je k dispozici). Další informace naleznete v {linkstart}dokumentaci ↗{linkend}.", "Please make sure to set the \"overwrite.cli.url\" option in your config.php file to the URL that your users mainly use to access this Nextcloud. Suggestion: \"{suggestedOverwriteCliURL}\". Otherwise there might be problems with the URL generation via cron. (It is possible though that the suggested URL is not the URL that your users mainly use to access this Nextcloud. Best is to double check this in any case.)" : "Zajistěte, aby volba „overwrite.cli.url„ v souboru config.php byla nastavena na URL adresu, přes kterou uživatelé přistupují k této instanci Nextcloud. Doporučení: „{suggestedOverwriteCliURL}“. Pokud tomu tak nebude, může docházet k problémům při vytváření URL prostřednictvím plánovače cron. (ačkoli je možné, že doporučená URL není tou, kterou uživatelé zpravidla používají pro přístup k této instanci Nextcloud. Nejlepší je toto v každém případě překontrolovat.)", "Your installation has no default phone region set. This is required to validate phone numbers in the profile settings without a country code. To allow numbers without a country code, please add \"default_phone_region\" with the respective {linkstart}ISO 3166-1 code ↗{linkend} of the region to your config file." : "Vaše instalace nemá nastavenou žádnou výchozí oblast telefonu. To je nutné k ověření telefonních čísel v nastavení profilu bez kódu země. Chcete-li povolit čísla bez kódu země, přidejte do svého souboru s nastaveními řetězec „default_phone_region“ s příslušným {linkstart} kódem ISO 3166-1 {linkend} regionu.", "It was not possible to execute the cron job via CLI. The following technical errors have appeared:" : "Nebylo možné vykonat naplánovanou úlohu z příkazového řádku. Objevily se následující technické chyby:", @@ -90,6 +91,7 @@ OC.L10N.register( "No memory cache has been configured. To enhance performance, please configure a memcache, if available. Further information can be found in the {linkstart}documentation ↗{linkend}." : "Nebyla nastavena mezipaměť v paměti. Pokud je dostupná, nastavte ji pro zlepšení výkonu. Další informace lze nalézt v naší {linkstart}dokumentaci ↗{linkend}.", "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 nenalezlo žádný použitelný zdroj náhodnosti, což je silně nedoporučeno z důvodu zabezpečení. Bližší informace naleznete v {linkstart}dokumentaci ↗{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." : "Nyní používáte PHP {version}. Abyste mohli využívat {linkstart}aktualizace, zlepšující výkonnost a zabezpečení, poskytované autory PHP↗{linkend}, přejděte na jeho novější verzi. A to tak rychle, jak to vámi využívaná distribuce operačního systému umožňuje.", + "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." : "Od Nextcloud 27 je PHP 8.0 už označeno jako zastaralé. Nextcloud 28 pak už může vyžadovat alespoň PHP 8.1. Co možná nejdříve přejděte na {linkstart}některou z oficiálně podporovaných verzí PHP, poskytovaných PHP Group ↗{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}." : "Nastavení hlaviček reverzní proxy není správné nebo přistupujete na Nextcloud z důvěryhodné proxy. Pokud nepřistupujete k Nextcloud z důvěryhodné proxy, potom je toto bezpečností chyba a může útočníkovi umožnit falšovat IP adresu, kterou NextCloud vidí. Další informace lze nalézt v naší {linkstart}dokumentaci ↗{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}." : "Je nastaven memcached jako distribuovaná cache, ale je nainstalovaný nesprávný PHP modul „memcache“. \\OC\\Memcache\\Memcached podporuje pouze „memcached“ a ne „memcache“. Podívejte se na {linkstart}memcached wiki pro oba moduly ↗{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})" : "Některé soubory neprošly kontrolou integrity. Podrobnosti ohledně řešení tohoto problém lze nalézt v {linkstart1}dokumentaci↗{linkend}. ({linkstart2}Seznam neplatných souborů…{linkend} / {linkstart3}Znovu ověřit…{linkend})", diff --git a/core/l10n/cs.json b/core/l10n/cs.json index 29fece307a1..9c2314795f0 100644 --- a/core/l10n/cs.json +++ b/core/l10n/cs.json @@ -79,6 +79,7 @@ "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Vaše databáze není spuštěná s úrovní izolace transakcí „READ COMMITTED“. Toto může způsobit problémy při paralelním spouštění více akcí současně.", "The PHP module \"fileinfo\" is missing. It is strongly recommended to enable this module to get the best results with MIME type detection." : "Modul PHP „fileinfo“ chybí. Důrazně se doporučuje zapnout tento modul pro zajištění lepšího zjišťování MIME typů.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable \"filelocking.enabled\" in config.php to avoid these problems. See the {linkstart}documentation ↗{linkend} for more information." : "Transakční zamykání souborů je vypnuto, což může vést k problémům při souběžném přístupu. Abyste se jim vyhli, zapněte v config.php volbu „filelocking.enabled“. Další informace naleznete v {linkstart}dokumentaci ↗{linkend}.", + "The database is used for transactional file locking. To enhance performance, please configure memcache, if available. See the {linkstart}documentation ↗{linkend} for more information." : "Databáze je používaná pro transakční zamykání souborů. Pokud chcete vylepšit výkon, nastavte memcache (pokud je k dispozici). Další informace naleznete v {linkstart}dokumentaci ↗{linkend}.", "Please make sure to set the \"overwrite.cli.url\" option in your config.php file to the URL that your users mainly use to access this Nextcloud. Suggestion: \"{suggestedOverwriteCliURL}\". Otherwise there might be problems with the URL generation via cron. (It is possible though that the suggested URL is not the URL that your users mainly use to access this Nextcloud. Best is to double check this in any case.)" : "Zajistěte, aby volba „overwrite.cli.url„ v souboru config.php byla nastavena na URL adresu, přes kterou uživatelé přistupují k této instanci Nextcloud. Doporučení: „{suggestedOverwriteCliURL}“. Pokud tomu tak nebude, může docházet k problémům při vytváření URL prostřednictvím plánovače cron. (ačkoli je možné, že doporučená URL není tou, kterou uživatelé zpravidla používají pro přístup k této instanci Nextcloud. Nejlepší je toto v každém případě překontrolovat.)", "Your installation has no default phone region set. This is required to validate phone numbers in the profile settings without a country code. To allow numbers without a country code, please add \"default_phone_region\" with the respective {linkstart}ISO 3166-1 code ↗{linkend} of the region to your config file." : "Vaše instalace nemá nastavenou žádnou výchozí oblast telefonu. To je nutné k ověření telefonních čísel v nastavení profilu bez kódu země. Chcete-li povolit čísla bez kódu země, přidejte do svého souboru s nastaveními řetězec „default_phone_region“ s příslušným {linkstart} kódem ISO 3166-1 {linkend} regionu.", "It was not possible to execute the cron job via CLI. The following technical errors have appeared:" : "Nebylo možné vykonat naplánovanou úlohu z příkazového řádku. Objevily se následující technické chyby:", @@ -88,6 +89,7 @@ "No memory cache has been configured. To enhance performance, please configure a memcache, if available. Further information can be found in the {linkstart}documentation ↗{linkend}." : "Nebyla nastavena mezipaměť v paměti. Pokud je dostupná, nastavte ji pro zlepšení výkonu. Další informace lze nalézt v naší {linkstart}dokumentaci ↗{linkend}.", "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 nenalezlo žádný použitelný zdroj náhodnosti, což je silně nedoporučeno z důvodu zabezpečení. Bližší informace naleznete v {linkstart}dokumentaci ↗{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." : "Nyní používáte PHP {version}. Abyste mohli využívat {linkstart}aktualizace, zlepšující výkonnost a zabezpečení, poskytované autory PHP↗{linkend}, přejděte na jeho novější verzi. A to tak rychle, jak to vámi využívaná distribuce operačního systému umožňuje.", + "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." : "Od Nextcloud 27 je PHP 8.0 už označeno jako zastaralé. Nextcloud 28 pak už může vyžadovat alespoň PHP 8.1. Co možná nejdříve přejděte na {linkstart}některou z oficiálně podporovaných verzí PHP, poskytovaných PHP Group ↗{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}." : "Nastavení hlaviček reverzní proxy není správné nebo přistupujete na Nextcloud z důvěryhodné proxy. Pokud nepřistupujete k Nextcloud z důvěryhodné proxy, potom je toto bezpečností chyba a může útočníkovi umožnit falšovat IP adresu, kterou NextCloud vidí. Další informace lze nalézt v naší {linkstart}dokumentaci ↗{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}." : "Je nastaven memcached jako distribuovaná cache, ale je nainstalovaný nesprávný PHP modul „memcache“. \\OC\\Memcache\\Memcached podporuje pouze „memcached“ a ne „memcache“. Podívejte se na {linkstart}memcached wiki pro oba moduly ↗{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})" : "Některé soubory neprošly kontrolou integrity. Podrobnosti ohledně řešení tohoto problém lze nalézt v {linkstart1}dokumentaci↗{linkend}. ({linkstart2}Seznam neplatných souborů…{linkend} / {linkstart3}Znovu ověřit…{linkend})", diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js index 6fd5e659828..7b3adf26ffe 100644 --- a/core/l10n/pt_BR.js +++ b/core/l10n/pt_BR.js @@ -309,6 +309,7 @@ OC.L10N.register( "The profile does not exist." : "O perfil não existe. ", "Back to %s" : "Voltar para %s", "Page not found" : "Página não encontrada", + "The page could not be found on the server or you may not be allowed to view it." : "A página não pôde ser encontrada no servidor ou talvez você não tenha permissão para visualizá-la.", "Too many requests" : "Muitas requisições", "There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Houve muitas solicitações de sua rede. Tente novamente mais tarde ou entre em contato com o administrador se isso for um erro.", "Error" : "Erro", diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json index 810b79e3290..748c3467689 100644 --- a/core/l10n/pt_BR.json +++ b/core/l10n/pt_BR.json @@ -307,6 +307,7 @@ "The profile does not exist." : "O perfil não existe. ", "Back to %s" : "Voltar para %s", "Page not found" : "Página não encontrada", + "The page could not be found on the server or you may not be allowed to view it." : "A página não pôde ser encontrada no servidor ou talvez você não tenha permissão para visualizá-la.", "Too many requests" : "Muitas requisições", "There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Houve muitas solicitações de sua rede. Tente novamente mais tarde ou entre em contato com o administrador se isso for um erro.", "Error" : "Erro", diff --git a/core/l10n/sl.js b/core/l10n/sl.js index 6a7e8516400..5f94e9ed969 100644 --- a/core/l10n/sl.js +++ b/core/l10n/sl.js @@ -39,6 +39,9 @@ OC.L10N.register( "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Za ponastavitev gesla kliknite na gumb. Če ponastavitve gesla niste zahtevali, prezrite to sporočilo.", "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Za ponastavitev gesla kliknite na povezavo. Če ponastavitve gesla niste zahtevali, prezrite to sporočilo.", "Reset your password" : "Ponastavi geslo", + "No translation provider available" : "Ponudnik prevoda ni na voljo.", + "Could not detect language" : "Ni mogoče zaznati jezika.", + "Unable to translate" : "Ni mogoče prevajati", "Nextcloud Server" : "Strežnik Nextcloud", "Some of your link shares have been removed" : "Nekatere povezave za souporabo so bile odstranjene.", "Due to a security bug we had to remove some of your link shares. Please see the link for more information." : "Zaradi varnostnih razlogov so bile nekatere povezave odstranjene. Več podrobnosti je na voljo v uradno izdanem opozorilu.", @@ -51,6 +54,7 @@ OC.L10N.register( "Repair info:" : "Podrobnosti nadgradnje:", "Repair warning:" : "Opozorilo nadgradnje:", "Repair error:" : "Napaka nadgradnje:", + "Please use the command line updater because updating via the browser is disabled in your config.php." : "Posodobitev sistema je treba izvesti v ukazni vrstici, ker je posodabljanje z brskalnikom v config.php onemogočeno.", "Turned on maintenance mode" : "Vzdrževalni način je omogočen ...", "Turned off maintenance mode" : "Vzdrževalni način je onemogočen.", "Maintenance mode is kept active" : "Vzdrževalni način ostane dejaven.", @@ -185,6 +189,7 @@ OC.L10N.register( "Distraction free note taking app." : "Enostavno beleženje in zapisovanje", "Search contacts" : "Poišči med stiki", "Forgot password?" : "Ali ste pozabili geslo?", + "Back to login form" : "Nazaj na prijavni obrazec", "Back" : "Nazaj", "Login form is disabled." : "Prijavni obrazec je onemogočen.", "Edit Profile" : "Uredi profil", @@ -201,6 +206,7 @@ OC.L10N.register( "Load more results" : "Naloži več zadetkov", "Search" : "Poišči", "No results for {query}" : "Ni zadetkov za poizvedbo {query}", + "Press Enter to start searching" : "Pritisnite vnosnico za začetek iskanja", "An error occurred while searching for {type}" : "Prišlo je do napake med iskanjem vrste {type}.", "_Please enter {minSearchLength} character or more to search_::_Please enter {minSearchLength} characters or more to search_" : ["Vpisati je treba vsaj {minSearchLength} znak za začetek iskanja","Vpisati je treba vsaj {minSearchLength} znaka za začetek iskanja","Vpisati je treba vsaj {minSearchLength} znake za začetek iskanja","Vpisati je treba vsaj {minSearchLength} znakov za začetek iskanja"], "This browser is not supported" : "Trenutno uporabljen brskalnik ni podprt!", @@ -283,6 +289,7 @@ OC.L10N.register( "Strong password" : "Odlično geslo", "No action available" : "Ni razpoložljivih dejanj", "Error fetching contact actions" : "Prišlo je do napake med pridobivanjem dejanj stikov", + "Close \"{dialogTitle}\" dialog" : "Zapri pogovorno okno »{dialogTitle}«", "Non-existing tag #{tag}" : "Neobstoječa oznaka #{tag}", "Restricted" : "Omejeno", "Invisible" : "Drugim nevidno", @@ -423,6 +430,7 @@ OC.L10N.register( "Setup two-factor authentication" : "Nastavite dvostopenjsko overitev", "It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Kaže, da uporabljate 32-bitno različico PHP. Oblak Nextcloud zahteva za optimalno delovanje 64-bitno različico, zato je operacijski sistem in PHP priporočljivo nadgraditi! Več podrobnosti je na na voljo na straneh {linkstart}dokumentacije{linkend}.", "Press enter to start searching" : "Pritisnite vnosno tipko za začetek iskanja", + "Please use the command line updater because updating via browser is disabled in your config.php." : "Posodobitev sistema je treba izvesti v ukazni vrstici, ker je posodabljanje z brskalnikom v config.php onemogočeno.", "The page could not be found on the server." : "Strani na strežniku ni mogoče najti." }, "nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"); diff --git a/core/l10n/sl.json b/core/l10n/sl.json index a81b18d4af6..c0c7f0e2c8f 100644 --- a/core/l10n/sl.json +++ b/core/l10n/sl.json @@ -37,6 +37,9 @@ "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Za ponastavitev gesla kliknite na gumb. Če ponastavitve gesla niste zahtevali, prezrite to sporočilo.", "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Za ponastavitev gesla kliknite na povezavo. Če ponastavitve gesla niste zahtevali, prezrite to sporočilo.", "Reset your password" : "Ponastavi geslo", + "No translation provider available" : "Ponudnik prevoda ni na voljo.", + "Could not detect language" : "Ni mogoče zaznati jezika.", + "Unable to translate" : "Ni mogoče prevajati", "Nextcloud Server" : "Strežnik Nextcloud", "Some of your link shares have been removed" : "Nekatere povezave za souporabo so bile odstranjene.", "Due to a security bug we had to remove some of your link shares. Please see the link for more information." : "Zaradi varnostnih razlogov so bile nekatere povezave odstranjene. Več podrobnosti je na voljo v uradno izdanem opozorilu.", @@ -49,6 +52,7 @@ "Repair info:" : "Podrobnosti nadgradnje:", "Repair warning:" : "Opozorilo nadgradnje:", "Repair error:" : "Napaka nadgradnje:", + "Please use the command line updater because updating via the browser is disabled in your config.php." : "Posodobitev sistema je treba izvesti v ukazni vrstici, ker je posodabljanje z brskalnikom v config.php onemogočeno.", "Turned on maintenance mode" : "Vzdrževalni način je omogočen ...", "Turned off maintenance mode" : "Vzdrževalni način je onemogočen.", "Maintenance mode is kept active" : "Vzdrževalni način ostane dejaven.", @@ -183,6 +187,7 @@ "Distraction free note taking app." : "Enostavno beleženje in zapisovanje", "Search contacts" : "Poišči med stiki", "Forgot password?" : "Ali ste pozabili geslo?", + "Back to login form" : "Nazaj na prijavni obrazec", "Back" : "Nazaj", "Login form is disabled." : "Prijavni obrazec je onemogočen.", "Edit Profile" : "Uredi profil", @@ -199,6 +204,7 @@ "Load more results" : "Naloži več zadetkov", "Search" : "Poišči", "No results for {query}" : "Ni zadetkov za poizvedbo {query}", + "Press Enter to start searching" : "Pritisnite vnosnico za začetek iskanja", "An error occurred while searching for {type}" : "Prišlo je do napake med iskanjem vrste {type}.", "_Please enter {minSearchLength} character or more to search_::_Please enter {minSearchLength} characters or more to search_" : ["Vpisati je treba vsaj {minSearchLength} znak za začetek iskanja","Vpisati je treba vsaj {minSearchLength} znaka za začetek iskanja","Vpisati je treba vsaj {minSearchLength} znake za začetek iskanja","Vpisati je treba vsaj {minSearchLength} znakov za začetek iskanja"], "This browser is not supported" : "Trenutno uporabljen brskalnik ni podprt!", @@ -281,6 +287,7 @@ "Strong password" : "Odlično geslo", "No action available" : "Ni razpoložljivih dejanj", "Error fetching contact actions" : "Prišlo je do napake med pridobivanjem dejanj stikov", + "Close \"{dialogTitle}\" dialog" : "Zapri pogovorno okno »{dialogTitle}«", "Non-existing tag #{tag}" : "Neobstoječa oznaka #{tag}", "Restricted" : "Omejeno", "Invisible" : "Drugim nevidno", @@ -421,6 +428,7 @@ "Setup two-factor authentication" : "Nastavite dvostopenjsko overitev", "It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Kaže, da uporabljate 32-bitno različico PHP. Oblak Nextcloud zahteva za optimalno delovanje 64-bitno različico, zato je operacijski sistem in PHP priporočljivo nadgraditi! Več podrobnosti je na na voljo na straneh {linkstart}dokumentacije{linkend}.", "Press enter to start searching" : "Pritisnite vnosno tipko za začetek iskanja", + "Please use the command line updater because updating via browser is disabled in your config.php." : "Posodobitev sistema je treba izvesti v ukazni vrstici, ker je posodabljanje z brskalnikom v config.php onemogočeno.", "The page could not be found on the server." : "Strani na strežniku ni mogoče najti." },"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);" }
\ No newline at end of file diff --git a/core/l10n/tr.js b/core/l10n/tr.js index e239aeb8013..fb0fa80b8db 100644 --- a/core/l10n/tr.js +++ b/core/l10n/tr.js @@ -193,6 +193,7 @@ OC.L10N.register( "Distraction free note taking app." : "Dikkatinizi dağıtmayan not alma uygulaması.", "Search contacts" : "Kişi arama", "Forgot password?" : "Parolamı unuttum", + "Back to login form" : "Oturum açma formuna dön", "Back" : "Geri", "Login form is disabled." : "Oturum açma formu devre dışı bırakılmış.", "Edit Profile" : "Profili düzenle", diff --git a/core/l10n/tr.json b/core/l10n/tr.json index 4ce1ed78583..e53c6c4151f 100644 --- a/core/l10n/tr.json +++ b/core/l10n/tr.json @@ -191,6 +191,7 @@ "Distraction free note taking app." : "Dikkatinizi dağıtmayan not alma uygulaması.", "Search contacts" : "Kişi arama", "Forgot password?" : "Parolamı unuttum", + "Back to login form" : "Oturum açma formuna dön", "Back" : "Geri", "Login form is disabled." : "Oturum açma formu devre dışı bırakılmış.", "Edit Profile" : "Profili düzenle", diff --git a/core/l10n/zh_CN.js b/core/l10n/zh_CN.js index dc0a985abf4..95bb2353140 100644 --- a/core/l10n/zh_CN.js +++ b/core/l10n/zh_CN.js @@ -130,7 +130,7 @@ OC.L10N.register( "An error occurred." : "发生错误。", "Please reload the page." : "请重新加载页面。", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "更新失败。有关此问题的更多信息请<a href=\"{url}\">查看我们的论坛帖子</a>。", - "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "升级失败。请将此问题报告给 <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud 社区</a>。", + "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "升级失败。请将此问题报告给 <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud社区</a>。", "Continue to {productName}" : "继续到 {productName}", "_The update was successful. Redirecting you to {productName} in %n second._::_The update was successful. Redirecting you to {productName} in %n seconds._" : ["更新成功。%n 秒内将把你重定向到 {productName}"], "More apps" : "更多的应用程序", @@ -260,9 +260,9 @@ OC.L10N.register( "Show details" : "显示详情", "Hide details" : "隐藏详细信息", "Rename project" : "重命名项目", - "Failed to rename the project" : "无法重命名项目", - "Failed to create a project" : "无法创建项目", - "Failed to add the item to the project" : "无法添加条目到项目中", + "Failed to rename the project" : "重命名项目失败", + "Failed to create a project" : "创建项目失败", + "Failed to add the item to the project" : "添加条目到项目中失败", "Connect items to a project to make them easier to find" : "将条目关联到项目以使它们更容易查找", "Type to search for existing projects" : "输入以搜索已有项目", "New in" : "新品", diff --git a/core/l10n/zh_CN.json b/core/l10n/zh_CN.json index 25ba9be2bc9..3cbc4482ec5 100644 --- a/core/l10n/zh_CN.json +++ b/core/l10n/zh_CN.json @@ -128,7 +128,7 @@ "An error occurred." : "发生错误。", "Please reload the page." : "请重新加载页面。", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "更新失败。有关此问题的更多信息请<a href=\"{url}\">查看我们的论坛帖子</a>。", - "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "升级失败。请将此问题报告给 <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud 社区</a>。", + "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "升级失败。请将此问题报告给 <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud社区</a>。", "Continue to {productName}" : "继续到 {productName}", "_The update was successful. Redirecting you to {productName} in %n second._::_The update was successful. Redirecting you to {productName} in %n seconds._" : ["更新成功。%n 秒内将把你重定向到 {productName}"], "More apps" : "更多的应用程序", @@ -258,9 +258,9 @@ "Show details" : "显示详情", "Hide details" : "隐藏详细信息", "Rename project" : "重命名项目", - "Failed to rename the project" : "无法重命名项目", - "Failed to create a project" : "无法创建项目", - "Failed to add the item to the project" : "无法添加条目到项目中", + "Failed to rename the project" : "重命名项目失败", + "Failed to create a project" : "创建项目失败", + "Failed to add the item to the project" : "添加条目到项目中失败", "Connect items to a project to make them easier to find" : "将条目关联到项目以使它们更容易查找", "Type to search for existing projects" : "输入以搜索已有项目", "New in" : "新品", diff --git a/dist/files_sharing-files_sharing_tab.js b/dist/files_sharing-files_sharing_tab.js index 64419e12c14..be7ef8155e8 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 */ -(()=>{"use strict";var e,s={24103:(e,s,i)=>{var a=i(20144),r=i(31352),n=i(1794),o=i(79753),h=i(75925),l=i.n(h),c=i(4820),d=i(79954);class u{get isPublicUploadEnabled(){return document.getElementsByClassName("files-filestable")[0]&&"yes"===document.getElementsByClassName("files-filestable")[0].dataset.allowPublicUpload}get isShareWithLinkAllowed(){return document.getElementById("allowShareWithLink")&&"yes"===document.getElementById("allowShareWithLink").value}get federatedShareDocLink(){return OC.appConfig.core.federatedCloudShareDoc}get defaultExpirationDate(){return this.isDefaultExpireDateEnabled?new Date((new Date).setDate((new Date).getDate()+this.defaultExpireDate)):null}get defaultInternalExpirationDate(){return this.isDefaultInternalExpireDateEnabled?new Date((new Date).setDate((new Date).getDate()+this.defaultInternalExpireDate)):null}get defaultRemoteExpirationDateString(){return this.isDefaultRemoteExpireDateEnabled?new Date((new Date).setDate((new Date).getDate()+this.defaultRemoteExpireDate)):null}get enforcePasswordForPublicLink(){return!0===OC.appConfig.core.enforcePasswordForPublicLink}get enableLinkPasswordByDefault(){return!0===OC.appConfig.core.enableLinkPasswordByDefault}get isDefaultExpireDateEnforced(){return!0===OC.appConfig.core.defaultExpireDateEnforced}get isDefaultExpireDateEnabled(){return!0===OC.appConfig.core.defaultExpireDateEnabled}get isDefaultInternalExpireDateEnforced(){return!0===OC.appConfig.core.defaultInternalExpireDateEnforced}get isDefaultRemoteExpireDateEnforced(){return!0===OC.appConfig.core.defaultRemoteExpireDateEnforced}get isDefaultInternalExpireDateEnabled(){return!0===OC.appConfig.core.defaultInternalExpireDateEnabled}get isDefaultRemoteExpireDateEnabled(){return!0===OC.appConfig.core.defaultRemoteExpireDateEnabled}get isRemoteShareAllowed(){return!0===OC.appConfig.core.remoteShareAllowed}get isMailShareAllowed(){var e,t,s;const i=OC.getCapabilities();return void 0!==(null==i||null===(e=i.files_sharing)||void 0===e?void 0:e.sharebymail)&&!0===(null==i||null===(t=i.files_sharing)||void 0===t||null===(s=t.public)||void 0===s?void 0:s.enabled)}get defaultExpireDate(){return OC.appConfig.core.defaultExpireDate}get defaultInternalExpireDate(){return OC.appConfig.core.defaultInternalExpireDate}get defaultRemoteExpireDate(){return OC.appConfig.core.defaultRemoteExpireDate}get isResharingAllowed(){return!0===OC.appConfig.core.resharingAllowed}get isPasswordForMailSharesRequired(){return void 0!==OC.getCapabilities().files_sharing.sharebymail&&OC.getCapabilities().files_sharing.sharebymail.password.enforced}get shouldAlwaysShowUnique(){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)}get allowGroupSharing(){return!0===OC.appConfig.core.allowGroupSharing}get maxAutocompleteResults(){return parseInt(OC.config["sharing.maxAutocompleteResults"],10)||25}get minSearchStringLength(){return parseInt(OC.config["sharing.minSearchStringLength"],10)||0}get passwordPolicy(){const e=OC.getCapabilities();return e.password_policy?e.password_policy:{}}}var p=i(41922),f=i(25108);class g{constructor(e){var t,s,i,a;if(s=this,a=void 0,(i=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var s=e[Symbol.toPrimitive];if(void 0!==s){var i=s.call(e,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof t?t:String(t)}(i="_share"))in s?Object.defineProperty(s,i,{value:a,enumerable:!0,configurable:!0,writable:!0}):s[i]=a,e.ocs&&e.ocs.data&&e.ocs.data[0]&&(e=e.ocs.data[0]),e.hide_download=!!e.hide_download,e.mail_send=!!e.mail_send,e.attributes)try{e.attributes=JSON.parse(e.attributes)}catch(t){f.warn('Could not parse share attributes returned by server: "'+e.attributes+'"')}e.attributes=null!==(t=e.attributes)&&void 0!==t?t:[],this._share=e}get state(){return this._share}get id(){return this._share.id}get type(){return this._share.share_type}get permissions(){return this._share.permissions}get attributes(){return this._share.attributes}set permissions(e){this._share.permissions=e}get owner(){return this._share.uid_owner}get ownerDisplayName(){return this._share.displayname_owner}get shareWith(){return this._share.share_with}get shareWithDisplayName(){return this._share.share_with_displayname||this._share.share_with}get shareWithDisplayNameUnique(){return this._share.share_with_displayname_unique||this._share.share_with}get shareWithLink(){return this._share.share_with_link}get shareWithAvatar(){return this._share.share_with_avatar}get uidFileOwner(){return this._share.uid_file_owner}get displaynameFileOwner(){return this._share.displayname_file_owner||this._share.uid_file_owner}get createdTime(){return this._share.stime}get expireDate(){return this._share.expiration}set expireDate(e){this._share.expiration=e}get token(){return this._share.token}get note(){return this._share.note}set note(e){this._share.note=e}get label(){return this._share.label}set label(e){this._share.label=e}get mailSend(){return!0===this._share.mail_send}get hideDownload(){return!0===this._share.hide_download}set hideDownload(e){this._share.hide_download=!0===e}get password(){return this._share.password}set password(e){this._share.password=e}get passwordExpirationTime(){return this._share.password_expiration_time}set passwordExpirationTime(e){this._share.password_expiration_time=e}get sendPasswordByTalk(){return this._share.send_password_by_talk}set sendPasswordByTalk(e){this._share.send_password_by_talk=e}get path(){return this._share.path}get itemType(){return this._share.item_type}get mimetype(){return this._share.mimetype}get fileSource(){return this._share.file_source}get fileTarget(){return this._share.file_target}get fileParent(){return this._share.file_parent}get hasReadPermission(){return!!(this.permissions&OC.PERMISSION_READ)}get hasCreatePermission(){return!!(this.permissions&OC.PERMISSION_CREATE)}get hasDeletePermission(){return!!(this.permissions&OC.PERMISSION_DELETE)}get hasUpdatePermission(){return!!(this.permissions&OC.PERMISSION_UPDATE)}get hasSharePermission(){return!!(this.permissions&OC.PERMISSION_SHARE)}get hasDownloadPermission(){for(const e in this._share.attributes){const t=this._share.attributes[e];if("permissions"===t.scope&&"download"===t.key)return t.enabled}return!0}set hasDownloadPermission(e){this.setAttribute("permissions","download",!!e)}setAttribute(e,t,s){const i={scope:e,key:t,enabled:s};for(const e in this._share.attributes){const t=this._share.attributes[e];if(t.scope===i.scope&&t.key===i.key)return void(this._share.attributes[e]=i)}this._share.attributes.push(i)}get canEdit(){return!0===this._share.can_edit}get canDelete(){return!0===this._share.can_delete}get viaFileid(){return this._share.via_fileid}get viaPath(){return this._share.via_path}get parent(){return this._share.parent}get storageId(){return this._share.storage_id}get storage(){return this._share.storage}get itemSource(){return this._share.item_source}get status(){return this._share.status}}const _={data:()=>({SHARE_TYPES:p.D})};var m=i(64024),A=i(76212),v=i.n(A),E=i(12945),y=i.n(E);const w={name:"SharingEntrySimple",components:{NcActions:y()},props:{title:{type:String,default:"",required:!0},subtitle:{type:String,default:""},isUnique:{type:Boolean,default:!0},ariaExpanded:{type:Boolean,default:null}},computed:{ariaExpandedValue(){return null===this.ariaExpanded?this.ariaExpanded:this.ariaExpanded?"true":"false"}}};var S=i(93379),C=i.n(S),b=i(7795),P=i.n(b),x=i(90569),D=i.n(x),k=i(3565),T=i.n(k),R=i(19216),N=i.n(R),I=i(44589),O=i.n(I),L=i(46971),H={};H.styleTagTransform=O(),H.setAttributes=T(),H.insert=D().bind(null,"head"),H.domAPI=P(),H.insertStyleElement=N(),C()(L.Z,H),L.Z&&L.Z.locals&&L.Z.locals;var Y=i(51900);const U=(0,Y.Z)(w,(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,"02e83c36",null).exports;var B=i(25108);const M={name:"SharingEntryInternal",components:{NcActionLink:v(),SharingEntrySimple:U},props:{fileInfo:{type:Object,default:()=>{},required:!0}},data:()=>({copied:!1,copySuccess:!1}),computed:{internalLink(){return window.location.protocol+"//"+window.location.host+(0,o.generateUrl)("/f/")+this.fileInfo.id},copyLinkTooltip(){return this.copied?this.copySuccess?"":t("files_sharing","Cannot copy, please copy the link manually"):t("files_sharing","Copy internal link to clipboard")},internalLinkSubtitle(){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:{async copyLink(){try{await navigator.clipboard.writeText(this.internalLink),(0,m.s$)(t("files_sharing","Link copied")),this.$refs.shareEntrySimple.$refs.actionsComponent.$el.focus(),this.copySuccess=!0,this.copied=!0}catch(e){this.copySuccess=!1,this.copied=!0,B.error(e)}finally{setTimeout((()=>{this.copySuccess=!1,this.copied=!1}),4e3)}}}};var W=i(2256),F={};F.styleTagTransform=O(),F.setAttributes=T(),F.insert=D().bind(null,"head"),F.domAPI=P(),F.insertStyleElement=N(),C()(W.Z,F),W.Z&&W.Z.locals&&W.Z.locals;const q=(0,Y.Z)(M,(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,"71a426be",null).exports;var j=i(45994),Z=i(78595),$=i(20296),G=i.n($),V=i(36456),K=i.n(V),Q=i(25108);const z=new u;async function J(){if(z.passwordPolicy.api&&z.passwordPolicy.api.generate)try{const e=await c.default.get(z.passwordPolicy.api.generate);if(e.data.ocs.data.password)return(0,m.s$)(t("files_sharing","Password created successfully")),e.data.ocs.data.password}catch(e){Q.info("Error generating password from password_policy",e),(0,m.x2)(t("files_sharing","Error generating password from password policy"))}const e=new Uint8Array(10);self.crypto.getRandomValues(e);let s="";for(let t=0;t<e.length;t++)s+="abcdefgijkmnopqrstwxyzABCDEFGHJKLMNPQRSTWXYZ23456789".charAt(.20392156862745098*e[t]);return s}i(35449);var X=i(25108);const ee=(0,o.generateOcsUrl)("apps/files_sharing/api/v1/shares"),te={methods:{async createShare(e){let{path:s,permissions:i,shareType:a,shareWith:r,publicUpload:n,password:o,sendPasswordByTalk:h,expireDate:l,label:d,attributes:u}=e;try{var p;const e=await c.default.post(ee,{path:s,permissions:i,shareType:a,shareWith:r,publicUpload:n,password:o,sendPasswordByTalk:h,expireDate:l,label:d,attributes:u});if(null==e||null===(p=e.data)||void 0===p||!p.ocs)throw e;return new g(e.data.ocs.data)}catch(e){var f,_,m,A;X.error("Error while creating share",e);const s=null==e||null===(f=e.response)||void 0===f||null===(_=f.data)||void 0===_||null===(m=_.ocs)||void 0===m||null===(A=m.meta)||void 0===A?void 0:A.message;throw OC.Notification.showTemporary(s?t("files_sharing","Error creating the share: {errorMessage}",{errorMessage:s}):t("files_sharing","Error creating the share"),{type:"error"}),e}},async deleteShare(e){try{var s;const t=await c.default.delete(ee+"/".concat(e));if(null==t||null===(s=t.data)||void 0===s||!s.ocs)throw t;return!0}catch(e){var i,a,r,n;X.error("Error while deleting share",e);const s=null==e||null===(i=e.response)||void 0===i||null===(a=i.data)||void 0===a||null===(r=a.ocs)||void 0===r||null===(n=r.meta)||void 0===n?void 0:n.message;throw OC.Notification.showTemporary(s?t("files_sharing","Error deleting the share: {errorMessage}",{errorMessage:s}):t("files_sharing","Error deleting the share"),{type:"error"}),e}},async updateShare(e,s){try{var i;const t=await c.default.put(ee+"/".concat(e),s);if(null!=t&&null!==(i=t.data)&&void 0!==i&&i.ocs)return t.data.ocs.data;throw t}catch(e){if(X.error("Error while updating share",e),400!==e.response.status){var a,r,n,o;const s=null==e||null===(a=e.response)||void 0===a||null===(r=a.data)||void 0===r||null===(n=r.ocs)||void 0===n||null===(o=n.meta)||void 0===o?void 0:o.message;OC.Notification.showTemporary(s?t("files_sharing","Error updating the share: {errorMessage}",{errorMessage:s}):t("files_sharing","Error updating the share"),{type:"error"})}const s=e.response.data.ocs.meta.message;throw new Error(s)}}}};var se=i(25108);const ie={name:"SharingInput",components:{NcSelect:K()},mixins:[_,te],props:{shares:{type:Array,default:()=>[],required:!0},linkShares:{type:Array,default:()=>[],required:!0},fileInfo:{type:Object,default:()=>{},required:!0},reshare:{type:g,default:null},canReshare:{type:Boolean,required:!0}},data:()=>({config:new u,loading:!1,query:"",recommendations:[],ShareSearch:OCA.Sharing.ShareSearch.state,suggestions:[],value:null}),computed:{externalResults(){return this.ShareSearch.results},inputPlaceholder(){const 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(){return this.query&&""!==this.query.trim()&&this.query.length>this.config.minSearchStringLength},options(){return this.isValidQuery?this.suggestions:this.recommendations},noResultText(){return this.loading?t("files_sharing","Searching …"):t("files_sharing","No elements found.")}},mounted(){this.getRecommendations()},methods:{handleOpen(){(0,Z.j8)("viewer:trapElements:changed",this.$refs.select.$el)},async asyncFind(e){this.query=e.trim(),this.isValidQuery&&(this.loading=!0,await this.debounceGetSuggestions(e))},async getSuggestions(e){let s=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.loading=!0,!0===OC.getCapabilities().files_sharing.sharee.query_lookup_default&&(s=!0);const i=[this.SHARE_TYPES.SHARE_TYPE_USER,this.SHARE_TYPES.SHARE_TYPE_GROUP,this.SHARE_TYPES.SHARE_TYPE_REMOTE,this.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP,this.SHARE_TYPES.SHARE_TYPE_CIRCLE,this.SHARE_TYPES.SHARE_TYPE_ROOM,this.SHARE_TYPES.SHARE_TYPE_GUEST,this.SHARE_TYPES.SHARE_TYPE_DECK,this.SHARE_TYPES.SHARE_TYPE_SCIENCEMESH];!0===OC.getCapabilities().files_sharing.public.enabled&&i.push(this.SHARE_TYPES.SHARE_TYPE_EMAIL);let a=null;try{a=await c.default.get((0,o.generateOcsUrl)("apps/files_sharing/api/v1/sharees"),{params:{format:"json",itemType:"dir"===this.fileInfo.type?"folder":"file",search:e,lookup:s,perPage:this.config.maxAutocompleteResults,shareType:i}})}catch(e){return void se.error("Error fetching suggestions",e)}const r=a.data.ocs.data,n=a.data.ocs.data.exact;r.exact=[];const h=Object.values(n).reduce(((e,t)=>e.concat(t)),[]),l=Object.values(r).reduce(((e,t)=>e.concat(t)),[]),d=this.filterOutExistingShares(h).map((e=>this.formatForMultiselect(e))).sort(((e,t)=>e.shareType-t.shareType)),u=this.filterOutExistingShares(l).map((e=>this.formatForMultiselect(e))).sort(((e,t)=>e.shareType-t.shareType)),p=[];r.lookupEnabled&&!s&&p.push({id:"global-lookup",isNoUser:!0,displayName:t("files_sharing","Search globally"),lookup:!0});const f=this.externalResults.filter((e=>!e.condition||e.condition(this))),g=d.concat(u).concat(f).concat(p),_=g.reduce(((e,t)=>t.displayName?(e[t.displayName]||(e[t.displayName]=0),e[t.displayName]++,e):e),{});this.suggestions=g.map((e=>_[e.displayName]>1&&!e.desc?{...e,desc:e.shareWithDisplayNameUnique}:e)),this.loading=!1,se.info("suggestions",this.suggestions)},debounceGetSuggestions:G()((function(){this.getSuggestions(...arguments)}),300),async getRecommendations(){this.loading=!0;let e=null;try{e=await c.default.get((0,o.generateOcsUrl)("apps/files_sharing/api/v1/sharees_recommended"),{params:{format:"json",itemType:this.fileInfo.type}})}catch(e){return void se.error("Error fetching recommendations",e)}const t=this.externalResults.filter((e=>!e.condition||e.condition(this))),s=Object.values(e.data.ocs.data.exact).reduce(((e,t)=>e.concat(t)),[]);this.recommendations=this.filterOutExistingShares(s).map((e=>this.formatForMultiselect(e))).concat(t),this.loading=!1,se.info("recommendations",this.recommendations)},filterOutExistingShares(e){return e.reduce(((e,t)=>{if("object"!=typeof t)return e;try{if(t.value.shareType===this.SHARE_TYPES.SHARE_TYPE_USER){if(t.value.shareWith===(0,j.ts)().uid)return e;if(this.reshare&&t.value.shareWith===this.reshare.owner)return e}if(t.value.shareType===this.SHARE_TYPES.SHARE_TYPE_EMAIL){if(-1!==this.linkShares.map((e=>e.shareWith)).indexOf(t.value.shareWith.trim()))return e}else{const s=this.shares.reduce(((e,t)=>(e[t.shareWith]=t.type,e)),{}),i=t.value.shareWith.trim();if(i in s&&s[i]===t.value.shareType)return e}e.push(t)}catch{return e}return e}),[])},shareTypeToIcon(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","ScienceMesh")};default:return{}}},formatForMultiselect(e){let s;var i;if(e.value.shareType===this.SHARE_TYPES.SHARE_TYPE_USER&&this.config.shouldAlwaysShowUnique)s=null!==(i=e.shareWithDisplayNameUnique)&&void 0!==i?i:"";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)s=e.value.shareWith;else{var a;s=null!==(a=e.shareWithDescription)&&void 0!==a?a:""}else s=t("files_sharing","on {server}",{server:e.value.server});return{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:s,shareWithDisplayNameUnique:e.shareWithDisplayNameUnique||"",...this.shareTypeToIcon(e.value.shareType)}},async addShare(e){if(this.value=null,e.lookup)return await this.getSuggestions(this.query,!0),this.$nextTick((()=>{this.$refs.select.$children[0].open=!0})),!0;if(e.handler){const t=await e.handler(this);return this.$emit("add:share",new g(t)),!0}this.loading=!0,se.debug("Adding a new share from the input for",e);try{let t=null;this.config.enforcePasswordForPublicLink&&e.shareType===this.SHARE_TYPES.SHARE_TYPE_EMAIL&&(t=await J());const s=(this.fileInfo.path+"/"+this.fileInfo.name).replace("//","/"),i=await this.createShare({path:s,shareType:e.shareType,shareWith:e.shareWith,password:t,permissions:this.fileInfo.sharePermissions&OC.getCapabilities().files_sharing.default_permissions,attributes:JSON.stringify(this.fileInfo.shareAttributes)});t?(i.newPassword=t,(await new Promise((e=>{this.$emit("add:share",i,e)}))).open=!0):this.$emit("add:share",i),await this.getRecommendations()}catch(t){this.$nextTick((()=>{this.$refs.select.$children[0].open=!0})),this.query=e.shareWith,se.error("Error while adding new share",t)}finally{this.loading=!1}}}};var ae=i(14710),re={};re.styleTagTransform=O(),re.setAttributes=T(),re.insert=D().bind(null,"head"),re.domAPI=P(),re.insertStyleElement=N(),C()(ae.Z,re),ae.Z&&ae.Z.locals&&ae.Z.locals;const ne=(0,Y.Z)(ie,(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:{"input-id":"sharing-search-input",disabled:!e.canReshare,loading:e.loading,filterable:!1,placeholder:e.inputPlaceholder,"clear-search-on-blur":()=>!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){let{search:s}=t;return[e._v("\n\t\t\t"+e._s(s?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).exports;var oe=i(45400),he=i.n(oe),le=i(65358),ce=i(1162),de=i.n(ce),ue=i(25746),pe=i(25108);const fe={mixins:[te,_],props:{fileInfo:{type:Object,default:()=>{},required:!0},share:{type:g,default:null},isUnique:{type:Boolean,default:!0}},data(){var e;return{config:new u,errors:{},loading:!1,saving:!1,open:!1,updateQueue:new ue.Z({concurrency:1}),reactiveState:null===(e=this.share)||void 0===e?void 0:e.state}},computed:{hasNote:{get(){return""!==this.share.note},set(e){this.share.note=e?null:""}},dateTomorrow:()=>new Date((new Date).setDate((new Date).getDate()+1)),lang(){const 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(){return this.share&&this.share.owner===(0,j.ts)().uid}},methods:{checkShare:e=>(!e.password||"string"==typeof e.password&&""!==e.password.trim())&&!(e.expirationDate&&!e.expirationDate.isValid()),parseDateString(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:e=>new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate())).toISOString().split("T")[0],onExpirationChange(e){this.share.expireDate=this.formatDateToString(e),this.queueUpdate("expireDate")},onExpirationDisable(){this.share.expireDate="",this.queueUpdate("expireDate")},onNoteChange(e){this.$set(this.share,"newNote",e.trim())},onNoteSubmit(){this.share.newNote&&(this.share.note=this.share.newNote,this.$delete(this.share,"newNote"),this.queueUpdate("note"))},async onDelete(){try{this.loading=!0,this.open=!1,await this.deleteShare(this.share.id),pe.debug("Share deleted",this.share.id);const e="file"===this.share.itemType?t("files_sharing",'File "{path}" has been unshared',{path:this.share.path}):t("files_sharing",'Folder "{path}" has been unshared',{path:this.share.path});(0,m.s$)(e),this.$emit("remove:share",this.share)}catch(e){this.open=!0}finally{this.loading=!1}},queueUpdate(){for(var e=arguments.length,s=new Array(e),i=0;i<e;i++)s[i]=arguments[i];if(0!==s.length){if(this.share.id){const e={};return s.forEach((t=>{"object"==typeof this.share[t]?e[t]=JSON.stringify(this.share[t]):e[t]=this.share[t].toString()})),void this.updateQueue.add((async()=>{this.saving=!0,this.errors={};try{const i=await this.updateShare(this.share.id,e);s.indexOf("password")>=0&&(this.$delete(this.share,"newPassword"),this.share.passwordExpirationTime=i.password_expiration_time),this.$delete(this.errors,s[0]),(0,m.s$)(t("files_sharing","Share {propertyName} saved",{propertyName:s[0]}))}catch({message:e}){e&&""!==e&&(this.onSyncError(s[0],e),(0,m.x2)(t("files_sharing",e)))}finally{this.saving=!1}}))}pe.debug("Updated local share",this.share)}},onSyncError(e,t){switch(this.open=!0,e){case"password":case"pending":case"expireDate":case"label":case"note":{this.$set(this.errors,e,t);let s=this.$refs[e];if(s){s.$el&&(s=s.$el);const e=s.querySelector(".focusable");e&&e.focus()}break}case"sendPasswordByTalk":this.$set(this.errors,e,t),this.share.sendPasswordByTalk=!this.share.sendPasswordByTalk}},debounceQueueUpdate:G()((function(e){this.queueUpdate(e)}),500)}},ge={name:"SharingEntryInherited",components:{NcActionButton:he(),NcActionLink:v(),NcActionText:de(),NcAvatar:l(),SharingEntrySimple:U},mixins:[fe],props:{share:{type:g,required:!0}},computed:{viaFileTargetUrl(){return(0,o.generateUrl)("/f/{fileid}",{fileid:this.share.viaFileid})},viaFolderName(){return(0,le.EZ)(this.share.viaPath)}}};var _e=i(33668),me={};me.styleTagTransform=O(),me.setAttributes=T(),me.insert=D().bind(null,"head"),me.domAPI=P(),me.insertStyleElement=N(),C()(_e.Z,me),_e.Z&&_e.Z.locals&&_e.Z.locals;const Ae=(0,Y.Z)(ge,(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,"038f97f0",null).exports;var ve=i(25108);const Ee={name:"SharingInherited",components:{NcActionButton:he(),SharingEntryInherited:Ae,SharingEntrySimple:U},props:{fileInfo:{type:Object,default:()=>{},required:!0}},data:()=>({loaded:!1,loading:!1,showInheritedShares:!1,shares:[]}),computed:{showInheritedSharesIcon(){return this.loading?"icon-loading-small":this.showInheritedShares?"icon-triangle-n":"icon-triangle-s"},mainTitle:()=>t("files_sharing","Others with access"),subTitle(){return this.showInheritedShares&&0===this.shares.length?t("files_sharing","No other users with access found"):""},toggleTooltip(){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(){return"".concat(this.fileInfo.path,"/").concat(this.fileInfo.name).replace("//","/")}},watch:{fileInfo(){this.resetState()}},methods:{toggleInheritedShares(){this.showInheritedShares=!this.showInheritedShares,this.showInheritedShares?this.fetchInheritedShares():this.resetState()},async fetchInheritedShares(){this.loading=!0;try{const e=(0,o.generateOcsUrl)("apps/files_sharing/api/v1/shares/inherited?format=json&path={path}",{path:this.fullPath}),t=await c.default.get(e);this.shares=t.data.ocs.data.map((e=>new g(e))).sort(((e,t)=>t.createdTime-e.createdTime)),ve.info(this.shares),this.loaded=!0}catch(e){OC.Notification.showTemporary(t("files_sharing","Unable to fetch inherited shares"),{type:"error"})}finally{this.loading=!1}},resetState(){this.loaded=!1,this.loading=!1,this.showInheritedShares=!1,this.shares=[]},removeShare(e){const t=this.shares.findIndex((t=>t===e));this.shares.splice(t,1)}}};var ye=i(84772),we={};we.styleTagTransform=O(),we.setAttributes=T(),we.insert=D().bind(null,"head"),we.domAPI=P(),we.insertStyleElement=N(),C()(ye.Z,we),ye.Z&&ye.Z.locals&&ye.Z.locals;const Se=(0,Y.Z)(Ee,(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(s){return t("SharingEntryInherited",{key:s.id,attrs:{"file-info":e.fileInfo,share:s},on:{"remove:share":e.removeShare}})}))],2)}),[],!1,null,"05b67dc8",null).exports;var Ce=i(81807),be=i.n(Ce),Pe=i(79570),xe=i.n(Pe),De=i(875),ke=i.n(De),Te=i(18074),Re=i.n(Te);const Ne={name:"ExternalShareAction",props:{id:{type:String,required:!0},action:{type:Object,default:()=>({})},fileInfo:{type:Object,default:()=>{},required:!0},share:{type:g,default:null}},computed:{data(){return this.action.data(this)}}},Ie=(0,Y.Z)(Ne,(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;var Oe=i(30158),Le=i.n(Oe);const He={NONE:0,READ:1,UPDATE:2,CREATE:4,DELETE:8,SHARE:16},Ye={READ_ONLY:He.READ,UPLOAD_AND_UPDATE:He.READ|He.UPDATE|He.CREATE|He.DELETE,FILE_DROP:He.CREATE,ALL:He.UPDATE|He.CREATE|He.READ|He.DELETE|He.SHARE};function Ue(e,t){return e!==He.NONE&&(e&t)===t}function Be(e){return!(!Ue(e,He.READ)&&!Ue(e,He.CREATE)||!Ue(e,He.READ)&&(Ue(e,He.UPDATE)||Ue(e,He.DELETE)))}function Me(e,t){return Ue(e,t)?function(e,t){return e&~t}(e,t):function(e,t){return e|t}(e,t)}var We=i(55976),Fe=i(32964);const qe={name:"SharePermissionsEditor",components:{NcActionButton:he(),NcActionCheckbox:be(),NcActionRadio:Le(),Tune:We.Z,ChevronLeft:Fe.default},mixins:[fe],data:()=>({randomFormName:Math.random().toString(27).substring(2),showCustomPermissionsForm:!1,atomicPermissions:He,bundledPermissions:Ye}),computed:{sharePermissionsSummary(){return Object.values(this.atomicPermissions).filter((e=>this.shareHasPermissions(e))).map((e=>{switch(e){case this.atomicPermissions.CREATE:return this.t("files_sharing","Upload");case this.atomicPermissions.READ:return this.t("files_sharing","Read");case this.atomicPermissions.UPDATE:return this.t("files_sharing","Edit");case this.atomicPermissions.DELETE:return this.t("files_sharing","Delete");default:return null}})).filter((e=>null!==e)).join(", ")},sharePermissionsIsBundle(){return Object.values(Ye).map((e=>this.sharePermissionEqual(e))).filter((e=>e)).length>0},sharePermissionsSetIsValid(){return Be(this.share.permissions)},isFolder(){return"dir"===this.fileInfo.type},fileHasCreatePermission(){return!!(this.fileInfo.permissions&He.CREATE)}},mounted(){this.showCustomPermissionsForm=!this.sharePermissionsIsBundle},methods:{sharePermissionEqual(e){return(this.share.permissions&~He.SHARE)===e},shareHasPermissions(e){return Ue(this.share.permissions,e)},setSharePermissions(e){this.share.permissions=e,this.queueUpdate("permissions")},canToggleSharePermissions(e){return function(e,t){return Be(Me(e,t))}(this.share.permissions,e)},toggleSharePermissions(e){this.share.permissions=Me(this.share.permissions,e),Be(this.share.permissions)&&this.queueUpdate("permissions")}}};var je=i(3163),Ze={};Ze.styleTagTransform=O(),Ze.setAttributes=T(),Ze.insert=D().bind(null,"head"),Ze.domAPI=P(),Ze.insertStyleElement=N(),C()(je.Z,Ze),je.Z&&je.Z.locals&&je.Z.locals;const $e=(0,Y.Z)(qe,(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,"7cec8a94",null).exports;var Ge=i(25108);const Ve={name:"SharingEntryLink",components:{NcActions:y(),NcActionButton:he(),NcActionCheckbox:be(),NcActionInput:xe(),NcActionLink:v(),NcActionText:de(),NcActionTextEditable:Re(),NcActionSeparator:ke(),NcAvatar:l(),ExternalShareAction:Ie,SharePermissionsEditor:$e},mixins:[fe],props:{canReshare:{type:Boolean,default:!0},index:{type:Number,default:null}},data:()=>({copySuccess:!0,copied:!1,pending:!1,ExternalLegacyLinkActions:OCA.Sharing.ExternalLinkActions.state,ExternalShareActions:OCA.Sharing.ExternalShareActions.state}),computed:{title(){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(){return this.isEmailShareType&&this.title!==this.share.shareWith?this.share.shareWith:null},hasExpirationDate:{get(){return this.config.isDefaultExpireDateEnforced||!!this.share.expireDate},set(e){const t=this.config.defaultExpirationDate||new Date((new Date).setDate((new Date).getDate()+1));this.share.expireDate=e?this.formatDateToString(t):"",Ge.debug("Expiration date status",e,this.share.expireDate)}},dateMaxEnforced(){return this.config.isDefaultExpireDateEnforced?new Date((new Date).setDate((new Date).getDate()+this.config.defaultExpireDate)):null},isPasswordProtected:{get(){return this.config.enforcePasswordForPublicLink||!!this.share.password},async set(e){a.default.set(this.share,"password",e?await J():""),a.default.set(this.share,"newPassword",this.share.password)}},passwordExpirationTime(){if(null===this.share.passwordExpirationTime)return null;const e=moment(this.share.passwordExpirationTime);return!(e.diff(moment())<0)&&e.fromNow()},isTalkEnabled:()=>void 0!==OC.appswebroots.spreed,isPasswordProtectedByTalkAvailable(){return this.isPasswordProtected&&this.isTalkEnabled},isPasswordProtectedByTalk:{get(){return this.share.sendPasswordByTalk},async set(e){this.share.sendPasswordByTalk=e}},isEmailShareType(){return!!this.share&&this.share.type===this.SHARE_TYPES.SHARE_TYPE_EMAIL},canTogglePasswordProtectedByTalkAvailable(){return!(!this.isPasswordProtected||this.isEmailShareType&&!this.hasUnsavedPassword)},pendingPassword(){return this.config.enforcePasswordForPublicLink&&this.share&&!this.share.id},pendingExpirationDate(){return this.config.isDefaultExpireDateEnforced&&this.share&&!this.share.id},hasUnsavedPassword(){return void 0!==this.share.newPassword},shareLink(){return window.location.protocol+"//"+window.location.host+(0,o.generateUrl)("/s/")+this.share.token},actionsTooltip(){return t("files_sharing",'Actions for "{title}"',{title:this.title})},copyLinkTooltip(){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(){return this.ExternalLegacyLinkActions.actions},externalLinkActions(){return this.ExternalShareActions.actions.filter((e=>e.shareType.includes(p.D.SHARE_TYPE_LINK)||e.shareType.includes(p.D.SHARE_TYPE_EMAIL)))},isPasswordPolicyEnabled(){return"object"==typeof this.config.passwordPolicy},canChangeHideDownload(){return this.fileInfo.shareAttributes.some((e=>"download"===e.key&&"permissions"===e.scope&&!1===e.enabled))}},methods:{async onNewLinkShare(){if(this.loading)return;const e={share_type:p.D.SHARE_TYPE_LINK};if(this.config.isDefaultExpireDateEnforced&&(e.expiration=this.formatDateToString(this.config.defaultExpirationDate)),this.config.enableLinkPasswordByDefault&&(e.password=await J()),this.config.enforcePasswordForPublicLink||this.config.isDefaultExpireDateEnforced){if(this.pending=!0,this.share&&!this.share.id){if(this.checkShare(this.share)){try{await this.pushNewLinkShare(this.share,!0)}catch(e){return this.pending=!1,Ge.error(e),!1}return!0}return this.open=!0,OC.Notification.showTemporary(t("files_sharing","Error, please enter proper password and/or expiration date")),!1}this.config.enforcePasswordForPublicLink&&(e.password=await J());const s=new g(e),i=await new Promise((e=>{this.$emit("add:share",s,e)}));this.open=!1,this.pending=!1,i.open=!0}else{const t=new g(e);await this.pushNewLinkShare(t)}},async pushNewLinkShare(e,s){try{if(this.loading)return!0;this.loading=!0,this.errors={};const i={path:(this.fileInfo.path+"/"+this.fileInfo.name).replace("//","/"),shareType:p.D.SHARE_TYPE_LINK,password:e.password,expireDate:e.expireDate,attributes:JSON.stringify(this.fileInfo.shareAttributes)};Ge.debug("Creating link share with options",i);const a=await this.createShare(i);let r;this.open=!1,Ge.debug("Link share created",a),r=s?await new Promise((e=>{this.$emit("update:share",a,e)})):await new Promise((e=>{this.$emit("add:share",a,e)})),this.config.enforcePasswordForPublicLink||r.copyLink(),(0,m.s$)(t("sharing","Link share created"))}catch(e){var i,a,r,n;const s=null==e||null===(i=e.response)||void 0===i||null===(a=i.data)||void 0===a||null===(r=a.ocs)||void 0===r||null===(n=r.meta)||void 0===n?void 0:n.message;if(!s)return(0,m.x2)(t("sharing","Error while creating the share")),void Ge.error(e);throw s.match(/password/i)?this.onSyncError("password",s):s.match(/date/i)?this.onSyncError("expireDate",s):this.onSyncError("pending",s),e}finally{this.loading=!1}},onLabelChange(e){this.$set(this.share,"newLabel",e.trim())},onLabelSubmit(){"string"==typeof this.share.newLabel&&(this.share.label=this.share.newLabel,this.$delete(this.share,"newLabel"),this.queueUpdate("label"))},async copyLink(){try{await navigator.clipboard.writeText(this.shareLink),(0,m.s$)(t("files_sharing","Link copied")),this.$refs.copyButton.$el.focus(),this.copySuccess=!0,this.copied=!0}catch(e){this.copySuccess=!1,this.copied=!0,Ge.error(e)}finally{setTimeout((()=>{this.copySuccess=!1,this.copied=!1}),4e3)}},onPasswordChange(e){this.$set(this.share,"newPassword",e)},onPasswordDisable(){this.share.password="",this.$delete(this.share,"newPassword"),this.share.id&&this.queueUpdate("password")},onPasswordSubmit(){this.hasUnsavedPassword&&(this.share.password=this.share.newPassword.trim(),this.queueUpdate("password"))},onPasswordProtectedByTalkChange(){this.hasUnsavedPassword&&(this.share.password=this.share.newPassword.trim()),this.queueUpdate("sendPasswordByTalk","password")},onMenuClose(){this.onPasswordSubmit(),this.onNoteSubmit()},onCancel(){this.$emit("remove:share",this.share)}}},Ke=Ve;var Qe=i(85795),ze={};ze.styleTagTransform=O(),ze.setAttributes=T(),ze.insert=D().bind(null,"head"),ze.domAPI=P(),ze.insertStyleElement=N(),C()(Qe.Z,ze),Qe.Z&&Qe.Z.locals&&Qe.Z.locals;const Je={name:"SharingLinkList",components:{SharingEntryLink:(0,Y.Z)(Ke,(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.pendingExpirationDate?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,"show-trailing-button":e.hasUnsavedPassword,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(s){return t("ExternalShareAction",{key:s.id,attrs:{id:s.id,action:s,"file-info":e.fileInfo,share:e.share}})})),e._v(" "),e._l(e.externalLegacyLinkActions,(function(s,i){let{icon:a,url:r,name:n}=s;return t("NcActionLink",{key:i,attrs:{href:r(e.shareLink),icon:a,target:"_blank"}},[e._v("\n\t\t\t\t"+e._s(n)+"\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):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.pendingPassword?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.config.enableLinkPasswordByDefault?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.pendingPassword||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)],1)}),[],!1,null,"3f82c612",null).exports},mixins:[_],props:{fileInfo:{type:Object,default:()=>{},required:!0},shares:{type:Array,default:()=>[],required:!0},canReshare:{type:Boolean,required:!0}},data:()=>({canLinkShare:OC.getCapabilities().files_sharing.public.enabled}),computed:{hasLinkShares(){return this.shares.filter((e=>e.type===this.SHARE_TYPES.SHARE_TYPE_LINK)).length>0},hasShares(){return this.shares.length>0}},methods:{addShare(e,t){this.shares.unshift(e),this.awaitForShare(e,t)},awaitForShare(e,t){this.$nextTick((()=>{const s=this.$children.find((t=>t.share===e));s&&t(s)}))},removeShare(e){const t=this.shares.findIndex((t=>t===e));this.shares.splice(t,1)}}},Xe=(0,Y.Z)(Je,(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(s,i){return t("SharingEntryLink",{key:s.id,attrs:{index:e.shares.length>1?i+1:null,"can-reshare":e.canReshare,share:e.shares[i],"file-info":e.fileInfo},on:{"update:share":[function(t){return e.$set(e.shares,i,t)},function(t){return e.awaitForShare(...arguments)}],"add:share":function(t){return e.addShare(...arguments)},"remove:share":e.removeShare}})})):e._e()],2):e._e()}),[],!1,null,null,null).exports;var et=i(25108);const tt={name:"SharingEntry",components:{NcActions:y(),NcActionButton:he(),NcActionCheckbox:be(),NcActionInput:xe(),NcActionTextEditable:Re(),NcAvatar:l()},mixins:[fe],data:()=>({permissionsEdit:OC.PERMISSION_UPDATE,permissionsCreate:OC.PERMISSION_CREATE,permissionsDelete:OC.PERMISSION_DELETE,permissionsRead:OC.PERMISSION_READ,permissionsShare:OC.PERMISSION_SHARE}),computed:{title(){let 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(){if(this.share.owner!==this.share.uidFileOwner){const 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(){return!this.isRemote},isRemote(){return this.share.type===this.SHARE_TYPES.SHARE_TYPE_REMOTE||this.share.type===this.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP},canSetEdit(){return this.fileInfo.sharePermissions&OC.PERMISSION_UPDATE||this.canEdit},canSetCreate(){return this.fileInfo.sharePermissions&OC.PERMISSION_CREATE||this.canCreate},canSetDelete(){return this.fileInfo.sharePermissions&OC.PERMISSION_DELETE||this.canDelete},canSetReshare(){return this.fileInfo.sharePermissions&OC.PERMISSION_SHARE||this.canReshare},canSetDownload(){return this.fileInfo.canDownload()||this.canDownload},canEdit:{get(){return this.share.hasUpdatePermission},set(e){this.updatePermissions({isEditChecked:e})}},canCreate:{get(){return this.share.hasCreatePermission},set(e){this.updatePermissions({isCreateChecked:e})}},canDelete:{get(){return this.share.hasDeletePermission},set(e){this.updatePermissions({isDeleteChecked:e})}},canReshare:{get(){return this.share.hasSharePermission},set(e){this.updatePermissions({isReshareChecked:e})}},canDownload:{get(){return this.share.hasDownloadPermission},set(e){this.updatePermissions({isDownloadChecked:e})}},hasRead:{get(){return this.share.hasReadPermission}},isFolder(){return"dir"===this.fileInfo.type},hasExpirationDate:{get(){return this.config.isDefaultInternalExpireDateEnforced||!!this.share.expireDate},set(e){const t=this.config.defaultInternalExpirationDate||new Date((new Date).setDate((new Date).getDate()+1));this.share.expireDate=e?this.formatDateToString(t):"",et.debug("Expiration date status",e,this.share.expireDate)}},dateMaxEnforced(){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(){return this.share.type===this.SHARE_TYPES.SHARE_TYPE_USER&&"object"==typeof this.share.status&&!Array.isArray(this.share.status)},allowDownloadText:()=>t("files_sharing","Allow download"),isSetDownloadButtonVisible(){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(){let{isEditChecked:e=this.canEdit,isCreateChecked:t=this.canCreate,isDeleteChecked:s=this.canDelete,isReshareChecked:i=this.canReshare,isDownloadChecked:a=this.canDownload}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const r=0|(this.hasRead?this.permissionsRead:0)|(t?this.permissionsCreate:0)|(s?this.permissionsDelete:0)|(e?this.permissionsEdit:0)|(i?this.permissionsShare:0);this.share.permissions=r,this.share.hasDownloadPermission!==a&&(this.share.hasDownloadPermission=a),this.queueUpdate("permissions","attributes")},onMenuClose(){this.onNoteSubmit()}}};var st=i(10915),it={};it.styleTagTransform=O(),it.setAttributes=T(),it.insert=D().bind(null,"head"),it.domAPI=P(),it.insertStyleElement=N(),C()(st.Z,it),st.Z&&st.Z.locals&&st.Z.locals;const at={name:"SharingList",components:{SharingEntry:(0,Y.Z)(tt,(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,"325ebcb0",null).exports},mixins:[_],props:{fileInfo:{type:Object,default:()=>{},required:!0},shares:{type:Array,default:()=>[],required:!0}},computed:{hasShares(){return 0===this.shares.length},isUnique(){return e=>[...this.shares].filter((t=>e.type===this.SHARE_TYPES.SHARE_TYPE_USER&&e.shareWithDisplayName===t.shareWithDisplayName)).length<=1}},methods:{removeShare(e){const t=this.shares.findIndex((t=>t===e));this.shares.splice(t,1)}}},rt=(0,Y.Z)(at,(function(){var e=this,t=e._self._c;return t("ul",{staticClass:"sharing-sharee-list"},e._l(e.shares,(function(s){return t("SharingEntry",{key:s.id,attrs:{"file-info":e.fileInfo,share:s,"is-unique":e.isUnique(s)},on:{"remove:share":e.removeShare}})})),1)}),[],!1,null,null,null).exports;var nt=i(25108);const ot={name:"SharingTab",components:{NcAvatar:l(),CollectionList:n.G,SharingEntryInternal:q,SharingEntrySimple:U,SharingInherited:Se,SharingInput:ne,SharingLinkList:Xe,SharingList:rt},mixins:[_],data:()=>({config:new u,error:"",expirationInterval:null,loading:!0,fileInfo:null,reshare:null,sharedWithMe:{},shares:[],linkShares:[],sections:OCA.Sharing.ShareTabSections.getSections(),projectsEnabled:(0,d.j)("core","projects_enabled",!1)}),computed:{isSharedWithMe(){return Object.keys(this.sharedWithMe).length>0},canReshare(){return!!(this.fileInfo.permissions&OC.PERMISSION_SHARE)||!!(this.reshare&&this.reshare.hasSharePermission&&this.config.isResharingAllowed)}},methods:{async update(e){this.fileInfo=e,this.resetState(),this.getShares()},async getShares(){try{this.loading=!0;const e=(0,o.generateOcsUrl)("apps/files_sharing/api/v1/shares"),t="json",s=(this.fileInfo.path+"/"+this.fileInfo.name).replace("//","/"),i=c.default.get(e,{params:{format:t,path:s,reshares:!0}}),a=c.default.get(e,{params:{format:t,path:s,shared_with_me:!0}}),[r,n]=await Promise.all([i,a]);this.loading=!1,this.processSharedWithMe(n),this.processShares(r)}catch(a){var e,s,i;null!==(e=a.response.data)&&void 0!==e&&null!==(s=e.ocs)&&void 0!==s&&null!==(i=s.meta)&&void 0!==i&&i.message?this.error=a.response.data.ocs.meta.message:this.error=t("files_sharing","Unable to load the shares list"),this.loading=!1,nt.error("Error loading the shares list",a)}},resetState(){clearInterval(this.expirationInterval),this.loading=!0,this.error="",this.sharedWithMe={},this.shares=[],this.linkShares=[]},updateExpirationSubtitle(e){const s=moment(e.expireDate).unix();this.$set(this.sharedWithMe,"subtitle",t("files_sharing","Expires {relativetime}",{relativetime:OC.Util.relativeModifiedDate(1e3*s)})),moment().unix()>s&&(clearInterval(this.expirationInterval),this.$set(this.sharedWithMe,"subtitle",t("files_sharing","this share just expired.")))},processShares(e){let{data:t}=e;if(t.ocs&&t.ocs.data&&t.ocs.data.length>0){const e=t.ocs.data.map((e=>new g(e))).sort(((e,t)=>t.createdTime-e.createdTime));this.linkShares=e.filter((e=>e.type===this.SHARE_TYPES.SHARE_TYPE_LINK||e.type===this.SHARE_TYPES.SHARE_TYPE_EMAIL)),this.shares=e.filter((e=>e.type!==this.SHARE_TYPES.SHARE_TYPE_LINK&&e.type!==this.SHARE_TYPES.SHARE_TYPE_EMAIL)),nt.debug("Processed",this.linkShares.length,"link share(s)"),nt.debug("Processed",this.shares.length,"share(s)")}},processSharedWithMe(e){let{data:s}=e;if(s.ocs&&s.ocs.data&&s.ocs.data[0]){const e=new g(s),i=function(e){return e.type===p.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===p.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===p.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})}(e),a=e.ownerDisplayName,r=e.owner;this.sharedWithMe={displayName:a,title:i,user:r},this.reshare=e,e.expireDate&&moment(e.expireDate).unix()>moment().unix()&&(this.updateExpirationSubtitle(e),this.expirationInterval=setInterval(this.updateExpirationSubtitle,1e4,e))}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(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:()=>{};e.type===this.SHARE_TYPES.SHARE_TYPE_EMAIL?this.linkShares.unshift(e):this.shares.unshift(e),this.awaitForShare(e,t)},awaitForShare(e,t){let s=this.$refs.shareList;e.type===this.SHARE_TYPES.SHARE_TYPE_EMAIL&&(s=this.$refs.linkShareList),this.$nextTick((()=>{const i=s.$children.find((t=>t.share===e));i&&t(i)}))}}},ht=ot;var lt=i(27172),ct={};ct.styleTagTransform=O(),ct.setAttributes=T(),ct.insert=D().bind(null,"head"),ct.domAPI=P(),ct.insertStyleElement=N(),C()(lt.Z,ct),lt.Z&<.Z.locals&<.Z.locals;const dt=(0,Y.Z)(ht,(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(s,i){return t("div",{key:i,ref:"section-"+i,refInFor:!0,staticClass:"sharingTab__additionalContent"},[t(s(e.$refs["section-"+i],e.fileInfo),{tag:"component",attrs:{"file-info":e.fileInfo}})],1)}))],2)}),[],!1,null,"085eaa7e",null).exports;var ut=i(25108);var pt=i(25108);var ft=i(25108);var gt=i(44582);window.OCA.Sharing||(window.OCA.Sharing={}),Object.assign(window.OCA.Sharing,{ShareSearch:new class{constructor(){var e,t,s;e=this,s=void 0,(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var s=e[Symbol.toPrimitive];if(void 0!==s){var i=s.call(e,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof t?t:String(t)}(t="_state"))in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,this._state={},this._state.results=[],ut.debug("OCA.Sharing.ShareSearch initialized")}get state(){return this._state}addNewResult(e){return""!==e.displayName.trim()&&"function"==typeof e.handler?(this._state.results.push(e),!0):(ut.error("Invalid search result provided",e),!1)}}}),Object.assign(window.OCA.Sharing,{ExternalLinkActions:new class{constructor(){var e,t,s;e=this,s=void 0,(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var s=e[Symbol.toPrimitive];if(void 0!==s){var i=s.call(e,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof t?t:String(t)}(t="_state"))in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,this._state={},this._state.actions=[],pt.debug("OCA.Sharing.ExternalLinkActions initialized")}get state(){return this._state}registerAction(e){return pt.warn("OCA.Sharing.ExternalLinkActions is deprecated, use OCA.Sharing.ExternalShareAction instead"),"object"==typeof e&&e.icon&&e.name&&e.url?(this._state.actions.push(e),!0):(pt.error("Invalid action provided",e),!1)}}}),Object.assign(window.OCA.Sharing,{ExternalShareActions:new class{constructor(){var e,t,s;e=this,s=void 0,(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var s=e[Symbol.toPrimitive];if(void 0!==s){var i=s.call(e,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof t?t:String(t)}(t="_state"))in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,this._state={},this._state.actions=[],ft.debug("OCA.Sharing.ExternalShareActions initialized")}get state(){return this._state}registerAction(e){return"object"==typeof e&&"string"==typeof e.id&&"function"==typeof e.data&&Array.isArray(e.shareType)&&"object"==typeof e.handlers&&Object.values(e.handlers).every((e=>"function"==typeof e))?this._state.actions.findIndex((t=>t.id===e.id))>-1?(ft.error("An action with the same id ".concat(e.id," already exists"),e),!1):(this._state.actions.push(e),!0):(ft.error("Invalid action provided",e),!1)}}}),Object.assign(window.OCA.Sharing,{ShareTabSections:new class{constructor(){var e,t,s;e=this,s=void 0,(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var s=e[Symbol.toPrimitive];if(void 0!==s){var i=s.call(e,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof t?t:String(t)}(t="_sections"))in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,this._sections=[]}registerSection(e){this._sections.push(e)}getSections(){return this._sections}}}),a.default.prototype.t=r.Iu,a.default.prototype.n=r.uN;const _t=a.default.extend(dt);let mt=null;window.addEventListener("DOMContentLoaded",(function(){OCA.Files&&OCA.Files.Sidebar&&OCA.Files.Sidebar.registerTab(new OCA.Files.Sidebar.Tab({id:"sharing",name:(0,r.Iu)("files_sharing","Sharing"),iconSvg:gt,async mount(e,t,s){mt&&mt.$destroy(),mt=new _t({parent:s}),await mt.update(t),mt.$mount(e)},update(e){mt.update(e)},destroy(){mt.$destroy(),mt=null}}))}))},3163:(e,t,s)=>{s.d(t,{Z:()=>o});var i=s(87537),a=s.n(i),r=s(23645),n=s.n(r)()(a());n.push([e.id,".error[data-v-7cec8a94] .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:""}]);const o=n},10915:(e,t,s)=>{s.d(t,{Z:()=>o});var i=s(87537),a=s.n(i),r=s(23645),n=s.n(r)()(a());n.push([e.id,".sharing-entry[data-v-325ebcb0]{display:flex;align-items:center;height:44px}.sharing-entry__desc[data-v-325ebcb0]{display:flex;flex-direction:column;justify-content:space-between;padding:8px;line-height:1.2em}.sharing-entry__desc p[data-v-325ebcb0]{color:var(--color-text-maxcontrast)}.sharing-entry__desc-unique[data-v-325ebcb0]{color:var(--color-text-maxcontrast)}.sharing-entry__actions[data-v-325ebcb0]{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:""}]);const o=n},33668:(e,t,s)=>{s.d(t,{Z:()=>o});var i=s(87537),a=s.n(i),r=s(23645),n=s.n(r)()(a());n.push([e.id,".sharing-entry[data-v-038f97f0]{display:flex;align-items:center;height:44px}.sharing-entry__desc[data-v-038f97f0]{display:flex;flex-direction:column;justify-content:space-between;padding:8px;line-height:1.2em}.sharing-entry__desc p[data-v-038f97f0]{color:var(--color-text-maxcontrast)}.sharing-entry__actions[data-v-038f97f0]{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:""}]);const o=n},2256:(e,t,s)=>{s.d(t,{Z:()=>o});var i=s(87537),a=s.n(i),r=s(23645),n=s.n(r)()(a());n.push([e.id,".sharing-entry__internal .avatar-external[data-v-71a426be]{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-71a426be]{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:""}]);const o=n},85795:(e,t,s)=>{s.d(t,{Z:()=>o});var i=s(87537),a=s.n(i),r=s(23645),n=s.n(r)()(a());n.push([e.id,".sharing-entry[data-v-3f82c612]{display:flex;align-items:center;min-height:44px}.sharing-entry__desc[data-v-3f82c612]{display:flex;flex-direction:column;justify-content:space-between;padding:8px;line-height:1.2em;overflow:hidden}.sharing-entry__desc p[data-v-3f82c612]{color:var(--color-text-maxcontrast)}.sharing-entry__title[data-v-3f82c612]{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.sharing-entry:not(.sharing-entry--share) .sharing-entry__actions .new-share-link[data-v-3f82c612]{border-top:1px solid var(--color-border)}.sharing-entry[data-v-3f82c612] .avatar-link-share{background-color:var(--color-primary-element)}.sharing-entry .sharing-entry__action--public-upload[data-v-3f82c612]{border-bottom:1px solid var(--color-border)}.sharing-entry__loading[data-v-3f82c612]{width:44px;height:44px;margin:0;padding:14px;margin-left:auto}.sharing-entry .action-item[data-v-3f82c612]{margin-left:auto}.sharing-entry .action-item~.action-item[data-v-3f82c612],.sharing-entry .action-item~.sharing-entry__loading[data-v-3f82c612]{margin-left:0}.sharing-entry .icon-checkmark-color[data-v-3f82c612]{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,6CAAA,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-element);\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:""}]);const o=n},46971:(e,t,s)=>{s.d(t,{Z:()=>o});var i=s(87537),a=s.n(i),r=s(23645),n=s.n(r)()(a());n.push([e.id,".sharing-entry[data-v-02e83c36]{display:flex;align-items:center;min-height:44px}.sharing-entry__desc[data-v-02e83c36]{padding:8px;line-height:1.2em;position:relative;flex:1 1;min-width:0}.sharing-entry__desc p[data-v-02e83c36]{color:var(--color-text-maxcontrast)}.sharing-entry__title[data-v-02e83c36]{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;max-width:inherit}.sharing-entry__actions[data-v-02e83c36]{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:""}]);const o=n},14710:(e,t,s)=>{s.d(t,{Z:()=>o});var i=s(87537),a=s.n(i),r=s(23645),n=s.n(r)()(a());n.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:""}]);const o=n},84772:(e,t,s)=>{s.d(t,{Z:()=>o});var i=s(87537),a=s.n(i),r=s(23645),n=s.n(r)()(a());n.push([e.id,".sharing-entry__inherited .avatar-shared[data-v-05b67dc8]{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:""}]);const o=n},27172:(e,t,s)=>{s.d(t,{Z:()=>o});var i=s(87537),a=s.n(i),r=s(23645),n=s.n(r)()(a());n.push([e.id,".emptyContentWithSections[data-v-085eaa7e]{margin:1rem auto}.sharingTab__content[data-v-085eaa7e]{padding:0 6px}.sharingTab__additionalContent[data-v-085eaa7e]{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:""}]);const o=n}},i={};function a(e){var t=i[e];if(void 0!==t)return t.exports;var r=i[e]={id:e,loaded:!1,exports:{}};return s[e].call(r.exports,r,r.exports,a),r.loaded=!0,r.exports}a.m=s,e=[],a.O=(t,s,i,r)=>{if(!s){var n=1/0;for(c=0;c<e.length;c++){s=e[c][0],i=e[c][1],r=e[c][2];for(var o=!0,h=0;h<s.length;h++)(!1&r||n>=r)&&Object.keys(a.O).every((e=>a.O[e](s[h])))?s.splice(h--,1):(o=!1,r<n&&(n=r));if(o){e.splice(c--,1);var l=i();void 0!==l&&(t=l)}}return t}r=r||0;for(var c=e.length;c>0&&e[c-1][2]>r;c--)e[c]=e[c-1];e[c]=[s,i,r]},a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var s in t)a.o(t,s)&&!a.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:t[s]})},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),a.j=7870,(()=>{a.b=document.baseURI||self.location.href;var e={7870:0};a.O.j=t=>0===e[t];var t=(t,s)=>{var i,r,n=s[0],o=s[1],h=s[2],l=0;if(n.some((t=>0!==e[t]))){for(i in o)a.o(o,i)&&(a.m[i]=o[i]);if(h)var c=h(a)}for(t&&t(s);l<n.length;l++)r=n[l],a.o(e,r)&&e[r]&&e[r][0](),e[r]=0;return a.O(c)},s=self.webpackChunknextcloud=self.webpackChunknextcloud||[];s.forEach(t.bind(null,0)),s.push=t.bind(null,s.push.bind(s))})(),a.nc=void 0;var r=a.O(void 0,[7874],(()=>a(24103)));r=a.O(r)})(); -//# sourceMappingURL=files_sharing-files_sharing_tab.js.map?v=eb41033847e7c9a9ae85
\ No newline at end of file +(()=>{"use strict";var e,s={72920:(e,s,i)=>{var a=i(20144),r=i(31352),n=i(1794),o=i(79753),h=i(75925),l=i.n(h),c=i(4820),d=i(79954);class u{get isPublicUploadEnabled(){return document.getElementsByClassName("files-filestable")[0]&&"yes"===document.getElementsByClassName("files-filestable")[0].dataset.allowPublicUpload}get isShareWithLinkAllowed(){return document.getElementById("allowShareWithLink")&&"yes"===document.getElementById("allowShareWithLink").value}get federatedShareDocLink(){return OC.appConfig.core.federatedCloudShareDoc}get defaultExpirationDate(){return this.isDefaultExpireDateEnabled?new Date((new Date).setDate((new Date).getDate()+this.defaultExpireDate)):null}get defaultInternalExpirationDate(){return this.isDefaultInternalExpireDateEnabled?new Date((new Date).setDate((new Date).getDate()+this.defaultInternalExpireDate)):null}get defaultRemoteExpirationDateString(){return this.isDefaultRemoteExpireDateEnabled?new Date((new Date).setDate((new Date).getDate()+this.defaultRemoteExpireDate)):null}get enforcePasswordForPublicLink(){return!0===OC.appConfig.core.enforcePasswordForPublicLink}get enableLinkPasswordByDefault(){return!0===OC.appConfig.core.enableLinkPasswordByDefault}get isDefaultExpireDateEnforced(){return!0===OC.appConfig.core.defaultExpireDateEnforced}get isDefaultExpireDateEnabled(){return!0===OC.appConfig.core.defaultExpireDateEnabled}get isDefaultInternalExpireDateEnforced(){return!0===OC.appConfig.core.defaultInternalExpireDateEnforced}get isDefaultRemoteExpireDateEnforced(){return!0===OC.appConfig.core.defaultRemoteExpireDateEnforced}get isDefaultInternalExpireDateEnabled(){return!0===OC.appConfig.core.defaultInternalExpireDateEnabled}get isDefaultRemoteExpireDateEnabled(){return!0===OC.appConfig.core.defaultRemoteExpireDateEnabled}get isRemoteShareAllowed(){return!0===OC.appConfig.core.remoteShareAllowed}get isMailShareAllowed(){var e,t,s;const i=OC.getCapabilities();return void 0!==(null==i||null===(e=i.files_sharing)||void 0===e?void 0:e.sharebymail)&&!0===(null==i||null===(t=i.files_sharing)||void 0===t||null===(s=t.public)||void 0===s?void 0:s.enabled)}get defaultExpireDate(){return OC.appConfig.core.defaultExpireDate}get defaultInternalExpireDate(){return OC.appConfig.core.defaultInternalExpireDate}get defaultRemoteExpireDate(){return OC.appConfig.core.defaultRemoteExpireDate}get isResharingAllowed(){return!0===OC.appConfig.core.resharingAllowed}get isPasswordForMailSharesRequired(){return void 0!==OC.getCapabilities().files_sharing.sharebymail&&OC.getCapabilities().files_sharing.sharebymail.password.enforced}get shouldAlwaysShowUnique(){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)}get allowGroupSharing(){return!0===OC.appConfig.core.allowGroupSharing}get maxAutocompleteResults(){return parseInt(OC.config["sharing.maxAutocompleteResults"],10)||25}get minSearchStringLength(){return parseInt(OC.config["sharing.minSearchStringLength"],10)||0}get passwordPolicy(){const e=OC.getCapabilities();return e.password_policy?e.password_policy:{}}}var p=i(41922),g=i(25108);class f{constructor(e){var t,s,i,a;if(s=this,a=void 0,(i=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var s=e[Symbol.toPrimitive];if(void 0!==s){var i=s.call(e,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof t?t:String(t)}(i="_share"))in s?Object.defineProperty(s,i,{value:a,enumerable:!0,configurable:!0,writable:!0}):s[i]=a,e.ocs&&e.ocs.data&&e.ocs.data[0]&&(e=e.ocs.data[0]),e.hide_download=!!e.hide_download,e.mail_send=!!e.mail_send,e.attributes)try{e.attributes=JSON.parse(e.attributes)}catch(t){g.warn('Could not parse share attributes returned by server: "'+e.attributes+'"')}e.attributes=null!==(t=e.attributes)&&void 0!==t?t:[],this._share=e}get state(){return this._share}get id(){return this._share.id}get type(){return this._share.share_type}get permissions(){return this._share.permissions}get attributes(){return this._share.attributes}set permissions(e){this._share.permissions=e}get owner(){return this._share.uid_owner}get ownerDisplayName(){return this._share.displayname_owner}get shareWith(){return this._share.share_with}get shareWithDisplayName(){return this._share.share_with_displayname||this._share.share_with}get shareWithDisplayNameUnique(){return this._share.share_with_displayname_unique||this._share.share_with}get shareWithLink(){return this._share.share_with_link}get shareWithAvatar(){return this._share.share_with_avatar}get uidFileOwner(){return this._share.uid_file_owner}get displaynameFileOwner(){return this._share.displayname_file_owner||this._share.uid_file_owner}get createdTime(){return this._share.stime}get expireDate(){return this._share.expiration}set expireDate(e){this._share.expiration=e}get token(){return this._share.token}get note(){return this._share.note}set note(e){this._share.note=e}get label(){return this._share.label}set label(e){this._share.label=e}get mailSend(){return!0===this._share.mail_send}get hideDownload(){return!0===this._share.hide_download}set hideDownload(e){this._share.hide_download=!0===e}get password(){return this._share.password}set password(e){this._share.password=e}get passwordExpirationTime(){return this._share.password_expiration_time}set passwordExpirationTime(e){this._share.password_expiration_time=e}get sendPasswordByTalk(){return this._share.send_password_by_talk}set sendPasswordByTalk(e){this._share.send_password_by_talk=e}get path(){return this._share.path}get itemType(){return this._share.item_type}get mimetype(){return this._share.mimetype}get fileSource(){return this._share.file_source}get fileTarget(){return this._share.file_target}get fileParent(){return this._share.file_parent}get hasReadPermission(){return!!(this.permissions&OC.PERMISSION_READ)}get hasCreatePermission(){return!!(this.permissions&OC.PERMISSION_CREATE)}get hasDeletePermission(){return!!(this.permissions&OC.PERMISSION_DELETE)}get hasUpdatePermission(){return!!(this.permissions&OC.PERMISSION_UPDATE)}get hasSharePermission(){return!!(this.permissions&OC.PERMISSION_SHARE)}get hasDownloadPermission(){for(const e in this._share.attributes){const t=this._share.attributes[e];if("permissions"===t.scope&&"download"===t.key)return t.enabled}return!0}set hasDownloadPermission(e){this.setAttribute("permissions","download",!!e)}setAttribute(e,t,s){const i={scope:e,key:t,enabled:s};for(const e in this._share.attributes){const t=this._share.attributes[e];if(t.scope===i.scope&&t.key===i.key)return void(this._share.attributes[e]=i)}this._share.attributes.push(i)}get canEdit(){return!0===this._share.can_edit}get canDelete(){return!0===this._share.can_delete}get viaFileid(){return this._share.via_fileid}get viaPath(){return this._share.via_path}get parent(){return this._share.parent}get storageId(){return this._share.storage_id}get storage(){return this._share.storage}get itemSource(){return this._share.item_source}get status(){return this._share.status}}const _={data:()=>({SHARE_TYPES:p.D})};var m=i(64024),A=i(76212),E=i.n(A),v=i(12945),y=i.n(v);const w={name:"SharingEntrySimple",components:{NcActions:y()},props:{title:{type:String,default:"",required:!0},subtitle:{type:String,default:""},isUnique:{type:Boolean,default:!0},ariaExpanded:{type:Boolean,default:null}},computed:{ariaExpandedValue(){return null===this.ariaExpanded?this.ariaExpanded:this.ariaExpanded?"true":"false"}}};var S=i(93379),C=i.n(S),b=i(7795),P=i.n(b),x=i(90569),D=i.n(x),k=i(3565),T=i.n(k),R=i(19216),N=i.n(R),I=i(44589),O=i.n(I),L=i(46971),H={};H.styleTagTransform=O(),H.setAttributes=T(),H.insert=D().bind(null,"head"),H.domAPI=P(),H.insertStyleElement=N(),C()(L.Z,H),L.Z&&L.Z.locals&&L.Z.locals;var Y=i(51900);const U=(0,Y.Z)(w,(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,"02e83c36",null).exports;var B=i(25108);const M={name:"SharingEntryInternal",components:{NcActionLink:E(),SharingEntrySimple:U},props:{fileInfo:{type:Object,default:()=>{},required:!0}},data:()=>({copied:!1,copySuccess:!1}),computed:{internalLink(){return window.location.protocol+"//"+window.location.host+(0,o.generateUrl)("/f/")+this.fileInfo.id},copyLinkTooltip(){return this.copied?this.copySuccess?"":t("files_sharing","Cannot copy, please copy the link manually"):t("files_sharing","Copy internal link to clipboard")},internalLinkSubtitle(){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:{async copyLink(){try{await navigator.clipboard.writeText(this.internalLink),(0,m.s$)(t("files_sharing","Link copied")),this.$refs.shareEntrySimple.$refs.actionsComponent.$el.focus(),this.copySuccess=!0,this.copied=!0}catch(e){this.copySuccess=!1,this.copied=!0,B.error(e)}finally{setTimeout((()=>{this.copySuccess=!1,this.copied=!1}),4e3)}}}};var W=i(2256),F={};F.styleTagTransform=O(),F.setAttributes=T(),F.insert=D().bind(null,"head"),F.domAPI=P(),F.insertStyleElement=N(),C()(W.Z,F),W.Z&&W.Z.locals&&W.Z.locals;const q=(0,Y.Z)(M,(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,"71a426be",null).exports;var j=i(45994),Z=i(78595),$=i(20296),G=i.n($),V=i(36456),K=i.n(V),Q=i(25108);const z=new u;async function J(){if(z.passwordPolicy.api&&z.passwordPolicy.api.generate)try{const e=await c.default.get(z.passwordPolicy.api.generate);if(e.data.ocs.data.password)return(0,m.s$)(t("files_sharing","Password created successfully")),e.data.ocs.data.password}catch(e){Q.info("Error generating password from password_policy",e),(0,m.x2)(t("files_sharing","Error generating password from password policy"))}const e=new Uint8Array(10);self.crypto.getRandomValues(e);let s="";for(let t=0;t<e.length;t++)s+="abcdefgijkmnopqrstwxyzABCDEFGHJKLMNPQRSTWXYZ23456789".charAt(.20392156862745098*e[t]);return s}i(35449);var X=i(25108);const ee=(0,o.generateOcsUrl)("apps/files_sharing/api/v1/shares"),te={methods:{async createShare(e){let{path:s,permissions:i,shareType:a,shareWith:r,publicUpload:n,password:o,sendPasswordByTalk:h,expireDate:l,label:d,attributes:u}=e;try{var p;const e=await c.default.post(ee,{path:s,permissions:i,shareType:a,shareWith:r,publicUpload:n,password:o,sendPasswordByTalk:h,expireDate:l,label:d,attributes:u});if(null==e||null===(p=e.data)||void 0===p||!p.ocs)throw e;const t=new f(e.data.ocs.data);return(0,Z.j8)("files_sharing:share:created",{share:t}),t}catch(e){var g,_,m,A;X.error("Error while creating share",e);const s=null==e||null===(g=e.response)||void 0===g||null===(_=g.data)||void 0===_||null===(m=_.ocs)||void 0===m||null===(A=m.meta)||void 0===A?void 0:A.message;throw OC.Notification.showTemporary(s?t("files_sharing","Error creating the share: {errorMessage}",{errorMessage:s}):t("files_sharing","Error creating the share"),{type:"error"}),e}},async deleteShare(e){try{var s;const t=await c.default.delete(ee+"/".concat(e));if(null==t||null===(s=t.data)||void 0===s||!s.ocs)throw t;return(0,Z.j8)("files_sharing:share:deleted",{id:e}),!0}catch(e){var i,a,r,n;X.error("Error while deleting share",e);const s=null==e||null===(i=e.response)||void 0===i||null===(a=i.data)||void 0===a||null===(r=a.ocs)||void 0===r||null===(n=r.meta)||void 0===n?void 0:n.message;throw OC.Notification.showTemporary(s?t("files_sharing","Error deleting the share: {errorMessage}",{errorMessage:s}):t("files_sharing","Error deleting the share"),{type:"error"}),e}},async updateShare(e,s){try{var i;const t=await c.default.put(ee+"/".concat(e),s);if((0,Z.j8)("files_sharing:share:updated",{id:e}),null!=t&&null!==(i=t.data)&&void 0!==i&&i.ocs)return t.data.ocs.data;throw t}catch(e){if(X.error("Error while updating share",e),400!==e.response.status){var a,r,n,o;const s=null==e||null===(a=e.response)||void 0===a||null===(r=a.data)||void 0===r||null===(n=r.ocs)||void 0===n||null===(o=n.meta)||void 0===o?void 0:o.message;OC.Notification.showTemporary(s?t("files_sharing","Error updating the share: {errorMessage}",{errorMessage:s}):t("files_sharing","Error updating the share"),{type:"error"})}const s=e.response.data.ocs.meta.message;throw new Error(s)}}}};var se=i(25108);const ie={name:"SharingInput",components:{NcSelect:K()},mixins:[_,te],props:{shares:{type:Array,default:()=>[],required:!0},linkShares:{type:Array,default:()=>[],required:!0},fileInfo:{type:Object,default:()=>{},required:!0},reshare:{type:f,default:null},canReshare:{type:Boolean,required:!0}},data:()=>({config:new u,loading:!1,query:"",recommendations:[],ShareSearch:OCA.Sharing.ShareSearch.state,suggestions:[],value:null}),computed:{externalResults(){return this.ShareSearch.results},inputPlaceholder(){const 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(){return this.query&&""!==this.query.trim()&&this.query.length>this.config.minSearchStringLength},options(){return this.isValidQuery?this.suggestions:this.recommendations},noResultText(){return this.loading?t("files_sharing","Searching …"):t("files_sharing","No elements found.")}},mounted(){this.getRecommendations()},methods:{handleOpen(){(0,Z.j8)("viewer:trapElements:changed",this.$refs.select.$el)},async asyncFind(e){this.query=e.trim(),this.isValidQuery&&(this.loading=!0,await this.debounceGetSuggestions(e))},async getSuggestions(e){let s=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.loading=!0,!0===OC.getCapabilities().files_sharing.sharee.query_lookup_default&&(s=!0);const i=[this.SHARE_TYPES.SHARE_TYPE_USER,this.SHARE_TYPES.SHARE_TYPE_GROUP,this.SHARE_TYPES.SHARE_TYPE_REMOTE,this.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP,this.SHARE_TYPES.SHARE_TYPE_CIRCLE,this.SHARE_TYPES.SHARE_TYPE_ROOM,this.SHARE_TYPES.SHARE_TYPE_GUEST,this.SHARE_TYPES.SHARE_TYPE_DECK,this.SHARE_TYPES.SHARE_TYPE_SCIENCEMESH];!0===OC.getCapabilities().files_sharing.public.enabled&&i.push(this.SHARE_TYPES.SHARE_TYPE_EMAIL);let a=null;try{a=await c.default.get((0,o.generateOcsUrl)("apps/files_sharing/api/v1/sharees"),{params:{format:"json",itemType:"dir"===this.fileInfo.type?"folder":"file",search:e,lookup:s,perPage:this.config.maxAutocompleteResults,shareType:i}})}catch(e){return void se.error("Error fetching suggestions",e)}const r=a.data.ocs.data,n=a.data.ocs.data.exact;r.exact=[];const h=Object.values(n).reduce(((e,t)=>e.concat(t)),[]),l=Object.values(r).reduce(((e,t)=>e.concat(t)),[]),d=this.filterOutExistingShares(h).map((e=>this.formatForMultiselect(e))).sort(((e,t)=>e.shareType-t.shareType)),u=this.filterOutExistingShares(l).map((e=>this.formatForMultiselect(e))).sort(((e,t)=>e.shareType-t.shareType)),p=[];r.lookupEnabled&&!s&&p.push({id:"global-lookup",isNoUser:!0,displayName:t("files_sharing","Search globally"),lookup:!0});const g=this.externalResults.filter((e=>!e.condition||e.condition(this))),f=d.concat(u).concat(g).concat(p),_=f.reduce(((e,t)=>t.displayName?(e[t.displayName]||(e[t.displayName]=0),e[t.displayName]++,e):e),{});this.suggestions=f.map((e=>_[e.displayName]>1&&!e.desc?{...e,desc:e.shareWithDisplayNameUnique}:e)),this.loading=!1,se.info("suggestions",this.suggestions)},debounceGetSuggestions:G()((function(){this.getSuggestions(...arguments)}),300),async getRecommendations(){this.loading=!0;let e=null;try{e=await c.default.get((0,o.generateOcsUrl)("apps/files_sharing/api/v1/sharees_recommended"),{params:{format:"json",itemType:this.fileInfo.type}})}catch(e){return void se.error("Error fetching recommendations",e)}const t=this.externalResults.filter((e=>!e.condition||e.condition(this))),s=Object.values(e.data.ocs.data.exact).reduce(((e,t)=>e.concat(t)),[]);this.recommendations=this.filterOutExistingShares(s).map((e=>this.formatForMultiselect(e))).concat(t),this.loading=!1,se.info("recommendations",this.recommendations)},filterOutExistingShares(e){return e.reduce(((e,t)=>{if("object"!=typeof t)return e;try{if(t.value.shareType===this.SHARE_TYPES.SHARE_TYPE_USER){if(t.value.shareWith===(0,j.ts)().uid)return e;if(this.reshare&&t.value.shareWith===this.reshare.owner)return e}if(t.value.shareType===this.SHARE_TYPES.SHARE_TYPE_EMAIL){if(-1!==this.linkShares.map((e=>e.shareWith)).indexOf(t.value.shareWith.trim()))return e}else{const s=this.shares.reduce(((e,t)=>(e[t.shareWith]=t.type,e)),{}),i=t.value.shareWith.trim();if(i in s&&s[i]===t.value.shareType)return e}e.push(t)}catch{return e}return e}),[])},shareTypeToIcon(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","ScienceMesh")};default:return{}}},formatForMultiselect(e){let s;var i;if(e.value.shareType===this.SHARE_TYPES.SHARE_TYPE_USER&&this.config.shouldAlwaysShowUnique)s=null!==(i=e.shareWithDisplayNameUnique)&&void 0!==i?i:"";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)s=e.value.shareWith;else{var a;s=null!==(a=e.shareWithDescription)&&void 0!==a?a:""}else s=t("files_sharing","on {server}",{server:e.value.server});return{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:s,shareWithDisplayNameUnique:e.shareWithDisplayNameUnique||"",...this.shareTypeToIcon(e.value.shareType)}},async addShare(e){if(this.value=null,e.lookup)return await this.getSuggestions(this.query,!0),this.$nextTick((()=>{this.$refs.select.$children[0].open=!0})),!0;if(e.handler){const t=await e.handler(this);return this.$emit("add:share",new f(t)),!0}this.loading=!0,se.debug("Adding a new share from the input for",e);try{let t=null;this.config.enforcePasswordForPublicLink&&e.shareType===this.SHARE_TYPES.SHARE_TYPE_EMAIL&&(t=await J());const s=(this.fileInfo.path+"/"+this.fileInfo.name).replace("//","/"),i=await this.createShare({path:s,shareType:e.shareType,shareWith:e.shareWith,password:t,permissions:this.fileInfo.sharePermissions&OC.getCapabilities().files_sharing.default_permissions,attributes:JSON.stringify(this.fileInfo.shareAttributes)});t?(i.newPassword=t,(await new Promise((e=>{this.$emit("add:share",i,e)}))).open=!0):this.$emit("add:share",i),await this.getRecommendations()}catch(t){this.$nextTick((()=>{this.$refs.select.$children[0].open=!0})),this.query=e.shareWith,se.error("Error while adding new share",t)}finally{this.loading=!1}}}};var ae=i(14710),re={};re.styleTagTransform=O(),re.setAttributes=T(),re.insert=D().bind(null,"head"),re.domAPI=P(),re.insertStyleElement=N(),C()(ae.Z,re),ae.Z&&ae.Z.locals&&ae.Z.locals;const ne=(0,Y.Z)(ie,(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:{"input-id":"sharing-search-input",disabled:!e.canReshare,loading:e.loading,filterable:!1,placeholder:e.inputPlaceholder,"clear-search-on-blur":()=>!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){let{search:s}=t;return[e._v("\n\t\t\t"+e._s(s?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).exports;var oe=i(45400),he=i.n(oe),le=i(65358),ce=i(1162),de=i.n(ce),ue=i(25746),pe=i(25108);const ge={mixins:[te,_],props:{fileInfo:{type:Object,default:()=>{},required:!0},share:{type:f,default:null},isUnique:{type:Boolean,default:!0}},data(){var e;return{config:new u,errors:{},loading:!1,saving:!1,open:!1,updateQueue:new ue.Z({concurrency:1}),reactiveState:null===(e=this.share)||void 0===e?void 0:e.state}},computed:{hasNote:{get(){return""!==this.share.note},set(e){this.share.note=e?null:""}},dateTomorrow:()=>new Date((new Date).setDate((new Date).getDate()+1)),lang(){const 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(){return this.share&&this.share.owner===(0,j.ts)().uid}},methods:{checkShare:e=>(!e.password||"string"==typeof e.password&&""!==e.password.trim())&&!(e.expirationDate&&!e.expirationDate.isValid()),parseDateString(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:e=>new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate())).toISOString().split("T")[0],onExpirationChange(e){this.share.expireDate=this.formatDateToString(e),this.queueUpdate("expireDate")},onExpirationDisable(){this.share.expireDate="",this.queueUpdate("expireDate")},onNoteChange(e){this.$set(this.share,"newNote",e.trim())},onNoteSubmit(){this.share.newNote&&(this.share.note=this.share.newNote,this.$delete(this.share,"newNote"),this.queueUpdate("note"))},async onDelete(){try{this.loading=!0,this.open=!1,await this.deleteShare(this.share.id),pe.debug("Share deleted",this.share.id);const e="file"===this.share.itemType?t("files_sharing",'File "{path}" has been unshared',{path:this.share.path}):t("files_sharing",'Folder "{path}" has been unshared',{path:this.share.path});(0,m.s$)(e),this.$emit("remove:share",this.share)}catch(e){this.open=!0}finally{this.loading=!1}},queueUpdate(){for(var e=arguments.length,s=new Array(e),i=0;i<e;i++)s[i]=arguments[i];if(0!==s.length){if(this.share.id){const e={};return s.forEach((t=>{"object"==typeof this.share[t]?e[t]=JSON.stringify(this.share[t]):e[t]=this.share[t].toString()})),void this.updateQueue.add((async()=>{this.saving=!0,this.errors={};try{const i=await this.updateShare(this.share.id,e);s.indexOf("password")>=0&&(this.$delete(this.share,"newPassword"),this.share.passwordExpirationTime=i.password_expiration_time),this.$delete(this.errors,s[0]),(0,m.s$)(t("files_sharing","Share {propertyName} saved",{propertyName:s[0]}))}catch({message:e}){e&&""!==e&&(this.onSyncError(s[0],e),(0,m.x2)(t("files_sharing",e)))}finally{this.saving=!1}}))}pe.debug("Updated local share",this.share)}},onSyncError(e,t){switch(this.open=!0,e){case"password":case"pending":case"expireDate":case"label":case"note":{this.$set(this.errors,e,t);let s=this.$refs[e];if(s){s.$el&&(s=s.$el);const e=s.querySelector(".focusable");e&&e.focus()}break}case"sendPasswordByTalk":this.$set(this.errors,e,t),this.share.sendPasswordByTalk=!this.share.sendPasswordByTalk}},debounceQueueUpdate:G()((function(e){this.queueUpdate(e)}),500)}},fe={name:"SharingEntryInherited",components:{NcActionButton:he(),NcActionLink:E(),NcActionText:de(),NcAvatar:l(),SharingEntrySimple:U},mixins:[ge],props:{share:{type:f,required:!0}},computed:{viaFileTargetUrl(){return(0,o.generateUrl)("/f/{fileid}",{fileid:this.share.viaFileid})},viaFolderName(){return(0,le.EZ)(this.share.viaPath)}}};var _e=i(33668),me={};me.styleTagTransform=O(),me.setAttributes=T(),me.insert=D().bind(null,"head"),me.domAPI=P(),me.insertStyleElement=N(),C()(_e.Z,me),_e.Z&&_e.Z.locals&&_e.Z.locals;const Ae=(0,Y.Z)(fe,(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,"038f97f0",null).exports;var Ee=i(25108);const ve={name:"SharingInherited",components:{NcActionButton:he(),SharingEntryInherited:Ae,SharingEntrySimple:U},props:{fileInfo:{type:Object,default:()=>{},required:!0}},data:()=>({loaded:!1,loading:!1,showInheritedShares:!1,shares:[]}),computed:{showInheritedSharesIcon(){return this.loading?"icon-loading-small":this.showInheritedShares?"icon-triangle-n":"icon-triangle-s"},mainTitle:()=>t("files_sharing","Others with access"),subTitle(){return this.showInheritedShares&&0===this.shares.length?t("files_sharing","No other users with access found"):""},toggleTooltip(){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(){return"".concat(this.fileInfo.path,"/").concat(this.fileInfo.name).replace("//","/")}},watch:{fileInfo(){this.resetState()}},methods:{toggleInheritedShares(){this.showInheritedShares=!this.showInheritedShares,this.showInheritedShares?this.fetchInheritedShares():this.resetState()},async fetchInheritedShares(){this.loading=!0;try{const e=(0,o.generateOcsUrl)("apps/files_sharing/api/v1/shares/inherited?format=json&path={path}",{path:this.fullPath}),t=await c.default.get(e);this.shares=t.data.ocs.data.map((e=>new f(e))).sort(((e,t)=>t.createdTime-e.createdTime)),Ee.info(this.shares),this.loaded=!0}catch(e){OC.Notification.showTemporary(t("files_sharing","Unable to fetch inherited shares"),{type:"error"})}finally{this.loading=!1}},resetState(){this.loaded=!1,this.loading=!1,this.showInheritedShares=!1,this.shares=[]},removeShare(e){const t=this.shares.findIndex((t=>t===e));this.shares.splice(t,1)}}};var ye=i(84772),we={};we.styleTagTransform=O(),we.setAttributes=T(),we.insert=D().bind(null,"head"),we.domAPI=P(),we.insertStyleElement=N(),C()(ye.Z,we),ye.Z&&ye.Z.locals&&ye.Z.locals;const Se=(0,Y.Z)(ve,(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(s){return t("SharingEntryInherited",{key:s.id,attrs:{"file-info":e.fileInfo,share:s},on:{"remove:share":e.removeShare}})}))],2)}),[],!1,null,"05b67dc8",null).exports;var Ce=i(81807),be=i.n(Ce),Pe=i(79570),xe=i.n(Pe),De=i(875),ke=i.n(De),Te=i(18074),Re=i.n(Te);const Ne={name:"ExternalShareAction",props:{id:{type:String,required:!0},action:{type:Object,default:()=>({})},fileInfo:{type:Object,default:()=>{},required:!0},share:{type:f,default:null}},computed:{data(){return this.action.data(this)}}},Ie=(0,Y.Z)(Ne,(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;var Oe=i(30158),Le=i.n(Oe);const He={NONE:0,READ:1,UPDATE:2,CREATE:4,DELETE:8,SHARE:16},Ye={READ_ONLY:He.READ,UPLOAD_AND_UPDATE:He.READ|He.UPDATE|He.CREATE|He.DELETE,FILE_DROP:He.CREATE,ALL:He.UPDATE|He.CREATE|He.READ|He.DELETE|He.SHARE};function Ue(e,t){return e!==He.NONE&&(e&t)===t}function Be(e){return!(!Ue(e,He.READ)&&!Ue(e,He.CREATE)||!Ue(e,He.READ)&&(Ue(e,He.UPDATE)||Ue(e,He.DELETE)))}function Me(e,t){return Ue(e,t)?function(e,t){return e&~t}(e,t):function(e,t){return e|t}(e,t)}var We=i(55976),Fe=i(32964);const qe={name:"SharePermissionsEditor",components:{NcActionButton:he(),NcActionCheckbox:be(),NcActionRadio:Le(),Tune:We.Z,ChevronLeft:Fe.default},mixins:[ge],data:()=>({randomFormName:Math.random().toString(27).substring(2),showCustomPermissionsForm:!1,atomicPermissions:He,bundledPermissions:Ye}),computed:{sharePermissionsSummary(){return Object.values(this.atomicPermissions).filter((e=>this.shareHasPermissions(e))).map((e=>{switch(e){case this.atomicPermissions.CREATE:return this.t("files_sharing","Upload");case this.atomicPermissions.READ:return this.t("files_sharing","Read");case this.atomicPermissions.UPDATE:return this.t("files_sharing","Edit");case this.atomicPermissions.DELETE:return this.t("files_sharing","Delete");default:return null}})).filter((e=>null!==e)).join(", ")},sharePermissionsIsBundle(){return Object.values(Ye).map((e=>this.sharePermissionEqual(e))).filter((e=>e)).length>0},sharePermissionsSetIsValid(){return Be(this.share.permissions)},isFolder(){return"dir"===this.fileInfo.type},fileHasCreatePermission(){return!!(this.fileInfo.permissions&He.CREATE)}},mounted(){this.showCustomPermissionsForm=!this.sharePermissionsIsBundle},methods:{sharePermissionEqual(e){return(this.share.permissions&~He.SHARE)===e},shareHasPermissions(e){return Ue(this.share.permissions,e)},setSharePermissions(e){this.share.permissions=e,this.queueUpdate("permissions")},canToggleSharePermissions(e){return function(e,t){return Be(Me(e,t))}(this.share.permissions,e)},toggleSharePermissions(e){this.share.permissions=Me(this.share.permissions,e),Be(this.share.permissions)&&this.queueUpdate("permissions")}}};var je=i(3163),Ze={};Ze.styleTagTransform=O(),Ze.setAttributes=T(),Ze.insert=D().bind(null,"head"),Ze.domAPI=P(),Ze.insertStyleElement=N(),C()(je.Z,Ze),je.Z&&je.Z.locals&&je.Z.locals;const $e=(0,Y.Z)(qe,(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,"7cec8a94",null).exports;var Ge=i(25108);const Ve={name:"SharingEntryLink",components:{NcActions:y(),NcActionButton:he(),NcActionCheckbox:be(),NcActionInput:xe(),NcActionLink:E(),NcActionText:de(),NcActionTextEditable:Re(),NcActionSeparator:ke(),NcAvatar:l(),ExternalShareAction:Ie,SharePermissionsEditor:$e},mixins:[ge],props:{canReshare:{type:Boolean,default:!0},index:{type:Number,default:null}},data:()=>({copySuccess:!0,copied:!1,pending:!1,ExternalLegacyLinkActions:OCA.Sharing.ExternalLinkActions.state,ExternalShareActions:OCA.Sharing.ExternalShareActions.state}),computed:{title(){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(){return this.isEmailShareType&&this.title!==this.share.shareWith?this.share.shareWith:null},hasExpirationDate:{get(){return this.config.isDefaultExpireDateEnforced||!!this.share.expireDate},set(e){const t=this.config.defaultExpirationDate||new Date((new Date).setDate((new Date).getDate()+1));this.share.expireDate=e?this.formatDateToString(t):"",Ge.debug("Expiration date status",e,this.share.expireDate)}},dateMaxEnforced(){return this.config.isDefaultExpireDateEnforced?new Date((new Date).setDate((new Date).getDate()+this.config.defaultExpireDate)):null},isPasswordProtected:{get(){return this.config.enforcePasswordForPublicLink||!!this.share.password},async set(e){a.default.set(this.share,"password",e?await J():""),a.default.set(this.share,"newPassword",this.share.password)}},passwordExpirationTime(){if(null===this.share.passwordExpirationTime)return null;const e=moment(this.share.passwordExpirationTime);return!(e.diff(moment())<0)&&e.fromNow()},isTalkEnabled:()=>void 0!==OC.appswebroots.spreed,isPasswordProtectedByTalkAvailable(){return this.isPasswordProtected&&this.isTalkEnabled},isPasswordProtectedByTalk:{get(){return this.share.sendPasswordByTalk},async set(e){this.share.sendPasswordByTalk=e}},isEmailShareType(){return!!this.share&&this.share.type===this.SHARE_TYPES.SHARE_TYPE_EMAIL},canTogglePasswordProtectedByTalkAvailable(){return!(!this.isPasswordProtected||this.isEmailShareType&&!this.hasUnsavedPassword)},pendingPassword(){return this.config.enableLinkPasswordByDefault&&this.share&&!this.share.id},pendingEnforcedPassword(){return this.config.enforcePasswordForPublicLink&&this.share&&!this.share.id},pendingExpirationDate(){return this.config.isDefaultExpireDateEnforced&&this.share&&!this.share.id},hasUnsavedPassword(){return void 0!==this.share.newPassword},shareLink(){return window.location.protocol+"//"+window.location.host+(0,o.generateUrl)("/s/")+this.share.token},actionsTooltip(){return t("files_sharing",'Actions for "{title}"',{title:this.title})},copyLinkTooltip(){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(){return this.ExternalLegacyLinkActions.actions},externalLinkActions(){return this.ExternalShareActions.actions.filter((e=>e.shareType.includes(p.D.SHARE_TYPE_LINK)||e.shareType.includes(p.D.SHARE_TYPE_EMAIL)))},isPasswordPolicyEnabled(){return"object"==typeof this.config.passwordPolicy},canChangeHideDownload(){return this.fileInfo.shareAttributes.some((e=>"download"===e.key&&"permissions"===e.scope&&!1===e.enabled))}},methods:{async onNewLinkShare(){if(this.loading)return;const e={share_type:p.D.SHARE_TYPE_LINK};if(this.config.isDefaultExpireDateEnforced&&(e.expiration=this.formatDateToString(this.config.defaultExpirationDate)),this.config.enableLinkPasswordByDefault||this.config.enforcePasswordForPublicLink||this.config.isDefaultExpireDateEnforced){if(this.pending=!0,this.share&&!this.share.id){if(this.checkShare(this.share)){try{await this.pushNewLinkShare(this.share,!0)}catch(e){return this.pending=!1,Ge.error(e),!1}return!0}return this.open=!0,OC.Notification.showTemporary(t("files_sharing","Error, please enter proper password and/or expiration date")),!1}(this.config.enableLinkPasswordByDefault||this.config.enforcePasswordForPublicLink)&&(e.password=await J());const s=new f(e),i=await new Promise((e=>{this.$emit("add:share",s,e)}));this.open=!1,this.pending=!1,i.open=!0}else{const t=new f(e);await this.pushNewLinkShare(t)}},async pushNewLinkShare(e,s){try{if(this.loading)return!0;this.loading=!0,this.errors={};const i={path:(this.fileInfo.path+"/"+this.fileInfo.name).replace("//","/"),shareType:p.D.SHARE_TYPE_LINK,password:e.password,expireDate:e.expireDate,attributes:JSON.stringify(this.fileInfo.shareAttributes)};Ge.debug("Creating link share with options",i);const a=await this.createShare(i);let r;this.open=!1,Ge.debug("Link share created",a),r=s?await new Promise((e=>{this.$emit("update:share",a,e)})):await new Promise((e=>{this.$emit("add:share",a,e)})),this.config.enforcePasswordForPublicLink||r.copyLink(),(0,m.s$)(t("sharing","Link share created"))}catch(e){var i,a,r,n;const s=null==e||null===(i=e.response)||void 0===i||null===(a=i.data)||void 0===a||null===(r=a.ocs)||void 0===r||null===(n=r.meta)||void 0===n?void 0:n.message;if(!s)return(0,m.x2)(t("sharing","Error while creating the share")),void Ge.error(e);throw s.match(/password/i)?this.onSyncError("password",s):s.match(/date/i)?this.onSyncError("expireDate",s):this.onSyncError("pending",s),e}finally{this.loading=!1}},onLabelChange(e){this.$set(this.share,"newLabel",e.trim())},onLabelSubmit(){"string"==typeof this.share.newLabel&&(this.share.label=this.share.newLabel,this.$delete(this.share,"newLabel"),this.queueUpdate("label"))},async copyLink(){try{await navigator.clipboard.writeText(this.shareLink),(0,m.s$)(t("files_sharing","Link copied")),this.$refs.copyButton.$el.focus(),this.copySuccess=!0,this.copied=!0}catch(e){this.copySuccess=!1,this.copied=!0,Ge.error(e)}finally{setTimeout((()=>{this.copySuccess=!1,this.copied=!1}),4e3)}},onPasswordChange(e){this.$set(this.share,"newPassword",e)},onPasswordDisable(){this.share.password="",this.$delete(this.share,"newPassword"),this.share.id&&this.queueUpdate("password")},onPasswordSubmit(){this.hasUnsavedPassword&&(this.share.password=this.share.newPassword.trim(),this.queueUpdate("password"))},onPasswordProtectedByTalkChange(){this.hasUnsavedPassword&&(this.share.password=this.share.newPassword.trim()),this.queueUpdate("sendPasswordByTalk","password")},onMenuClose(){this.onPasswordSubmit(),this.onNoteSubmit()},onCancel(){this.$emit("remove:share",this.share)}}},Ke=Ve;var Qe=i(97048),ze={};ze.styleTagTransform=O(),ze.setAttributes=T(),ze.insert=D().bind(null,"head"),ze.domAPI=P(),ze.insertStyleElement=N(),C()(Qe.Z,ze),Qe.Z&&Qe.Z.locals&&Qe.Z.locals;const Je={name:"SharingLinkList",components:{SharingEntryLink:(0,Y.Z)(Ke,(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,"show-trailing-button":e.hasUnsavedPassword,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(s){return t("ExternalShareAction",{key:s.id,attrs:{id:s.id,action:s,"file-info":e.fileInfo,share:e.share}})})),e._v(" "),e._l(e.externalLegacyLinkActions,(function(s,i){let{icon:a,url:r,name:n}=s;return t("NcActionLink",{key:i,attrs:{href:r(e.shareLink),icon:a,target:"_blank"}},[e._v("\n\t\t\t\t"+e._s(n)+"\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,"18bb4c9a",null).exports},mixins:[_],props:{fileInfo:{type:Object,default:()=>{},required:!0},shares:{type:Array,default:()=>[],required:!0},canReshare:{type:Boolean,required:!0}},data:()=>({canLinkShare:OC.getCapabilities().files_sharing.public.enabled}),computed:{hasLinkShares(){return this.shares.filter((e=>e.type===this.SHARE_TYPES.SHARE_TYPE_LINK)).length>0},hasShares(){return this.shares.length>0}},methods:{addShare(e,t){this.shares.unshift(e),this.awaitForShare(e,t)},awaitForShare(e,t){this.$nextTick((()=>{const s=this.$children.find((t=>t.share===e));s&&t(s)}))},removeShare(e){const t=this.shares.findIndex((t=>t===e));this.shares.splice(t,1)}}},Xe=(0,Y.Z)(Je,(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(s,i){return t("SharingEntryLink",{key:s.id,attrs:{index:e.shares.length>1?i+1:null,"can-reshare":e.canReshare,share:e.shares[i],"file-info":e.fileInfo},on:{"update:share":[function(t){return e.$set(e.shares,i,t)},function(t){return e.awaitForShare(...arguments)}],"add:share":function(t){return e.addShare(...arguments)},"remove:share":e.removeShare}})})):e._e()],2):e._e()}),[],!1,null,null,null).exports;var et=i(25108);const tt={name:"SharingEntry",components:{NcActions:y(),NcActionButton:he(),NcActionCheckbox:be(),NcActionInput:xe(),NcActionTextEditable:Re(),NcAvatar:l()},mixins:[ge],data:()=>({permissionsEdit:OC.PERMISSION_UPDATE,permissionsCreate:OC.PERMISSION_CREATE,permissionsDelete:OC.PERMISSION_DELETE,permissionsRead:OC.PERMISSION_READ,permissionsShare:OC.PERMISSION_SHARE}),computed:{title(){let 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(){if(this.share.owner!==this.share.uidFileOwner){const 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(){return!this.isRemote},isRemote(){return this.share.type===this.SHARE_TYPES.SHARE_TYPE_REMOTE||this.share.type===this.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP},canSetEdit(){return this.fileInfo.sharePermissions&OC.PERMISSION_UPDATE||this.canEdit},canSetCreate(){return this.fileInfo.sharePermissions&OC.PERMISSION_CREATE||this.canCreate},canSetDelete(){return this.fileInfo.sharePermissions&OC.PERMISSION_DELETE||this.canDelete},canSetReshare(){return this.fileInfo.sharePermissions&OC.PERMISSION_SHARE||this.canReshare},canSetDownload(){return this.fileInfo.canDownload()||this.canDownload},canEdit:{get(){return this.share.hasUpdatePermission},set(e){this.updatePermissions({isEditChecked:e})}},canCreate:{get(){return this.share.hasCreatePermission},set(e){this.updatePermissions({isCreateChecked:e})}},canDelete:{get(){return this.share.hasDeletePermission},set(e){this.updatePermissions({isDeleteChecked:e})}},canReshare:{get(){return this.share.hasSharePermission},set(e){this.updatePermissions({isReshareChecked:e})}},canDownload:{get(){return this.share.hasDownloadPermission},set(e){this.updatePermissions({isDownloadChecked:e})}},hasRead:{get(){return this.share.hasReadPermission}},isFolder(){return"dir"===this.fileInfo.type},hasExpirationDate:{get(){return this.config.isDefaultInternalExpireDateEnforced||!!this.share.expireDate},set(e){const t=this.config.defaultInternalExpirationDate||new Date((new Date).setDate((new Date).getDate()+1));this.share.expireDate=e?this.formatDateToString(t):"",et.debug("Expiration date status",e,this.share.expireDate)}},dateMaxEnforced(){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(){return this.share.type===this.SHARE_TYPES.SHARE_TYPE_USER&&"object"==typeof this.share.status&&!Array.isArray(this.share.status)},allowDownloadText:()=>t("files_sharing","Allow download"),isSetDownloadButtonVisible(){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(){let{isEditChecked:e=this.canEdit,isCreateChecked:t=this.canCreate,isDeleteChecked:s=this.canDelete,isReshareChecked:i=this.canReshare,isDownloadChecked:a=this.canDownload}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const r=0|(this.hasRead?this.permissionsRead:0)|(t?this.permissionsCreate:0)|(s?this.permissionsDelete:0)|(e?this.permissionsEdit:0)|(i?this.permissionsShare:0);this.share.permissions=r,this.share.hasDownloadPermission!==a&&(this.share.hasDownloadPermission=a),this.queueUpdate("permissions","attributes")},onMenuClose(){this.onNoteSubmit()}}};var st=i(10915),it={};it.styleTagTransform=O(),it.setAttributes=T(),it.insert=D().bind(null,"head"),it.domAPI=P(),it.insertStyleElement=N(),C()(st.Z,it),st.Z&&st.Z.locals&&st.Z.locals;const at={name:"SharingList",components:{SharingEntry:(0,Y.Z)(tt,(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,"325ebcb0",null).exports},mixins:[_],props:{fileInfo:{type:Object,default:()=>{},required:!0},shares:{type:Array,default:()=>[],required:!0}},computed:{hasShares(){return 0===this.shares.length},isUnique(){return e=>[...this.shares].filter((t=>e.type===this.SHARE_TYPES.SHARE_TYPE_USER&&e.shareWithDisplayName===t.shareWithDisplayName)).length<=1}},methods:{removeShare(e){const t=this.shares.findIndex((t=>t===e));this.shares.splice(t,1)}}},rt=(0,Y.Z)(at,(function(){var e=this,t=e._self._c;return t("ul",{staticClass:"sharing-sharee-list"},e._l(e.shares,(function(s){return t("SharingEntry",{key:s.id,attrs:{"file-info":e.fileInfo,share:s,"is-unique":e.isUnique(s)},on:{"remove:share":e.removeShare}})})),1)}),[],!1,null,null,null).exports;var nt=i(25108);const ot={name:"SharingTab",components:{NcAvatar:l(),CollectionList:n.G,SharingEntryInternal:q,SharingEntrySimple:U,SharingInherited:Se,SharingInput:ne,SharingLinkList:Xe,SharingList:rt},mixins:[_],data:()=>({config:new u,error:"",expirationInterval:null,loading:!0,fileInfo:null,reshare:null,sharedWithMe:{},shares:[],linkShares:[],sections:OCA.Sharing.ShareTabSections.getSections(),projectsEnabled:(0,d.j)("core","projects_enabled",!1)}),computed:{isSharedWithMe(){return Object.keys(this.sharedWithMe).length>0},canReshare(){return!!(this.fileInfo.permissions&OC.PERMISSION_SHARE)||!!(this.reshare&&this.reshare.hasSharePermission&&this.config.isResharingAllowed)}},methods:{async update(e){this.fileInfo=e,this.resetState(),this.getShares()},async getShares(){try{this.loading=!0;const e=(0,o.generateOcsUrl)("apps/files_sharing/api/v1/shares"),t="json",s=(this.fileInfo.path+"/"+this.fileInfo.name).replace("//","/"),i=c.default.get(e,{params:{format:t,path:s,reshares:!0}}),a=c.default.get(e,{params:{format:t,path:s,shared_with_me:!0}}),[r,n]=await Promise.all([i,a]);this.loading=!1,this.processSharedWithMe(n),this.processShares(r)}catch(a){var e,s,i;null!==(e=a.response.data)&&void 0!==e&&null!==(s=e.ocs)&&void 0!==s&&null!==(i=s.meta)&&void 0!==i&&i.message?this.error=a.response.data.ocs.meta.message:this.error=t("files_sharing","Unable to load the shares list"),this.loading=!1,nt.error("Error loading the shares list",a)}},resetState(){clearInterval(this.expirationInterval),this.loading=!0,this.error="",this.sharedWithMe={},this.shares=[],this.linkShares=[]},updateExpirationSubtitle(e){const s=moment(e.expireDate).unix();this.$set(this.sharedWithMe,"subtitle",t("files_sharing","Expires {relativetime}",{relativetime:OC.Util.relativeModifiedDate(1e3*s)})),moment().unix()>s&&(clearInterval(this.expirationInterval),this.$set(this.sharedWithMe,"subtitle",t("files_sharing","this share just expired.")))},processShares(e){let{data:t}=e;if(t.ocs&&t.ocs.data&&t.ocs.data.length>0){const e=t.ocs.data.map((e=>new f(e))).sort(((e,t)=>t.createdTime-e.createdTime));this.linkShares=e.filter((e=>e.type===this.SHARE_TYPES.SHARE_TYPE_LINK||e.type===this.SHARE_TYPES.SHARE_TYPE_EMAIL)),this.shares=e.filter((e=>e.type!==this.SHARE_TYPES.SHARE_TYPE_LINK&&e.type!==this.SHARE_TYPES.SHARE_TYPE_EMAIL)),nt.debug("Processed",this.linkShares.length,"link share(s)"),nt.debug("Processed",this.shares.length,"share(s)")}},processSharedWithMe(e){let{data:s}=e;if(s.ocs&&s.ocs.data&&s.ocs.data[0]){const e=new f(s),i=function(e){return e.type===p.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===p.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===p.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})}(e),a=e.ownerDisplayName,r=e.owner;this.sharedWithMe={displayName:a,title:i,user:r},this.reshare=e,e.expireDate&&moment(e.expireDate).unix()>moment().unix()&&(this.updateExpirationSubtitle(e),this.expirationInterval=setInterval(this.updateExpirationSubtitle,1e4,e))}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(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:()=>{};e.type===this.SHARE_TYPES.SHARE_TYPE_EMAIL?this.linkShares.unshift(e):this.shares.unshift(e),this.awaitForShare(e,t)},awaitForShare(e,t){let s=this.$refs.shareList;e.type===this.SHARE_TYPES.SHARE_TYPE_EMAIL&&(s=this.$refs.linkShareList),this.$nextTick((()=>{const i=s.$children.find((t=>t.share===e));i&&t(i)}))}}},ht=ot;var lt=i(27172),ct={};ct.styleTagTransform=O(),ct.setAttributes=T(),ct.insert=D().bind(null,"head"),ct.domAPI=P(),ct.insertStyleElement=N(),C()(lt.Z,ct),lt.Z&<.Z.locals&<.Z.locals;const dt=(0,Y.Z)(ht,(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(s,i){return t("div",{key:i,ref:"section-"+i,refInFor:!0,staticClass:"sharingTab__additionalContent"},[t(s(e.$refs["section-"+i],e.fileInfo),{tag:"component",attrs:{"file-info":e.fileInfo}})],1)}))],2)}),[],!1,null,"085eaa7e",null).exports;var ut=i(25108);var pt=i(25108);var gt=i(25108);var ft=i(44582);window.OCA.Sharing||(window.OCA.Sharing={}),Object.assign(window.OCA.Sharing,{ShareSearch:new class{constructor(){var e,t,s;e=this,s=void 0,(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var s=e[Symbol.toPrimitive];if(void 0!==s){var i=s.call(e,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof t?t:String(t)}(t="_state"))in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,this._state={},this._state.results=[],ut.debug("OCA.Sharing.ShareSearch initialized")}get state(){return this._state}addNewResult(e){return""!==e.displayName.trim()&&"function"==typeof e.handler?(this._state.results.push(e),!0):(ut.error("Invalid search result provided",e),!1)}}}),Object.assign(window.OCA.Sharing,{ExternalLinkActions:new class{constructor(){var e,t,s;e=this,s=void 0,(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var s=e[Symbol.toPrimitive];if(void 0!==s){var i=s.call(e,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof t?t:String(t)}(t="_state"))in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,this._state={},this._state.actions=[],pt.debug("OCA.Sharing.ExternalLinkActions initialized")}get state(){return this._state}registerAction(e){return pt.warn("OCA.Sharing.ExternalLinkActions is deprecated, use OCA.Sharing.ExternalShareAction instead"),"object"==typeof e&&e.icon&&e.name&&e.url?(this._state.actions.push(e),!0):(pt.error("Invalid action provided",e),!1)}}}),Object.assign(window.OCA.Sharing,{ExternalShareActions:new class{constructor(){var e,t,s;e=this,s=void 0,(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var s=e[Symbol.toPrimitive];if(void 0!==s){var i=s.call(e,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof t?t:String(t)}(t="_state"))in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,this._state={},this._state.actions=[],gt.debug("OCA.Sharing.ExternalShareActions initialized")}get state(){return this._state}registerAction(e){return"object"==typeof e&&"string"==typeof e.id&&"function"==typeof e.data&&Array.isArray(e.shareType)&&"object"==typeof e.handlers&&Object.values(e.handlers).every((e=>"function"==typeof e))?this._state.actions.findIndex((t=>t.id===e.id))>-1?(gt.error("An action with the same id ".concat(e.id," already exists"),e),!1):(this._state.actions.push(e),!0):(gt.error("Invalid action provided",e),!1)}}}),Object.assign(window.OCA.Sharing,{ShareTabSections:new class{constructor(){var e,t,s;e=this,s=void 0,(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var s=e[Symbol.toPrimitive];if(void 0!==s){var i=s.call(e,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof t?t:String(t)}(t="_sections"))in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,this._sections=[]}registerSection(e){this._sections.push(e)}getSections(){return this._sections}}}),a.default.prototype.t=r.Iu,a.default.prototype.n=r.uN;const _t=a.default.extend(dt);let mt=null;window.addEventListener("DOMContentLoaded",(function(){OCA.Files&&OCA.Files.Sidebar&&OCA.Files.Sidebar.registerTab(new OCA.Files.Sidebar.Tab({id:"sharing",name:(0,r.Iu)("files_sharing","Sharing"),iconSvg:ft,async mount(e,t,s){mt&&mt.$destroy(),mt=new _t({parent:s}),await mt.update(t),mt.$mount(e)},update(e){mt.update(e)},destroy(){mt.$destroy(),mt=null}}))}))},3163:(e,t,s)=>{s.d(t,{Z:()=>o});var i=s(87537),a=s.n(i),r=s(23645),n=s.n(r)()(a());n.push([e.id,".error[data-v-7cec8a94] .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:""}]);const o=n},10915:(e,t,s)=>{s.d(t,{Z:()=>o});var i=s(87537),a=s.n(i),r=s(23645),n=s.n(r)()(a());n.push([e.id,".sharing-entry[data-v-325ebcb0]{display:flex;align-items:center;height:44px}.sharing-entry__desc[data-v-325ebcb0]{display:flex;flex-direction:column;justify-content:space-between;padding:8px;line-height:1.2em}.sharing-entry__desc p[data-v-325ebcb0]{color:var(--color-text-maxcontrast)}.sharing-entry__desc-unique[data-v-325ebcb0]{color:var(--color-text-maxcontrast)}.sharing-entry__actions[data-v-325ebcb0]{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:""}]);const o=n},33668:(e,t,s)=>{s.d(t,{Z:()=>o});var i=s(87537),a=s.n(i),r=s(23645),n=s.n(r)()(a());n.push([e.id,".sharing-entry[data-v-038f97f0]{display:flex;align-items:center;height:44px}.sharing-entry__desc[data-v-038f97f0]{display:flex;flex-direction:column;justify-content:space-between;padding:8px;line-height:1.2em}.sharing-entry__desc p[data-v-038f97f0]{color:var(--color-text-maxcontrast)}.sharing-entry__actions[data-v-038f97f0]{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:""}]);const o=n},2256:(e,t,s)=>{s.d(t,{Z:()=>o});var i=s(87537),a=s.n(i),r=s(23645),n=s.n(r)()(a());n.push([e.id,".sharing-entry__internal .avatar-external[data-v-71a426be]{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-71a426be]{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:""}]);const o=n},97048:(e,t,s)=>{s.d(t,{Z:()=>o});var i=s(87537),a=s.n(i),r=s(23645),n=s.n(r)()(a());n.push([e.id,".sharing-entry[data-v-18bb4c9a]{display:flex;align-items:center;min-height:44px}.sharing-entry__desc[data-v-18bb4c9a]{display:flex;flex-direction:column;justify-content:space-between;padding:8px;line-height:1.2em;overflow:hidden}.sharing-entry__desc p[data-v-18bb4c9a]{color:var(--color-text-maxcontrast)}.sharing-entry__title[data-v-18bb4c9a]{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.sharing-entry:not(.sharing-entry--share) .sharing-entry__actions .new-share-link[data-v-18bb4c9a]{border-top:1px solid var(--color-border)}.sharing-entry[data-v-18bb4c9a] .avatar-link-share{background-color:var(--color-primary-element)}.sharing-entry .sharing-entry__action--public-upload[data-v-18bb4c9a]{border-bottom:1px solid var(--color-border)}.sharing-entry__loading[data-v-18bb4c9a]{width:44px;height:44px;margin:0;padding:14px;margin-left:auto}.sharing-entry .action-item[data-v-18bb4c9a]{margin-left:auto}.sharing-entry .action-item~.action-item[data-v-18bb4c9a],.sharing-entry .action-item~.sharing-entry__loading[data-v-18bb4c9a]{margin-left:0}.sharing-entry .icon-checkmark-color[data-v-18bb4c9a]{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,6CAAA,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-element);\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:""}]);const o=n},46971:(e,t,s)=>{s.d(t,{Z:()=>o});var i=s(87537),a=s.n(i),r=s(23645),n=s.n(r)()(a());n.push([e.id,".sharing-entry[data-v-02e83c36]{display:flex;align-items:center;min-height:44px}.sharing-entry__desc[data-v-02e83c36]{padding:8px;line-height:1.2em;position:relative;flex:1 1;min-width:0}.sharing-entry__desc p[data-v-02e83c36]{color:var(--color-text-maxcontrast)}.sharing-entry__title[data-v-02e83c36]{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;max-width:inherit}.sharing-entry__actions[data-v-02e83c36]{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:""}]);const o=n},14710:(e,t,s)=>{s.d(t,{Z:()=>o});var i=s(87537),a=s.n(i),r=s(23645),n=s.n(r)()(a());n.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:""}]);const o=n},84772:(e,t,s)=>{s.d(t,{Z:()=>o});var i=s(87537),a=s.n(i),r=s(23645),n=s.n(r)()(a());n.push([e.id,".sharing-entry__inherited .avatar-shared[data-v-05b67dc8]{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:""}]);const o=n},27172:(e,t,s)=>{s.d(t,{Z:()=>o});var i=s(87537),a=s.n(i),r=s(23645),n=s.n(r)()(a());n.push([e.id,".emptyContentWithSections[data-v-085eaa7e]{margin:1rem auto}.sharingTab__content[data-v-085eaa7e]{padding:0 6px}.sharingTab__additionalContent[data-v-085eaa7e]{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:""}]);const o=n}},i={};function a(e){var t=i[e];if(void 0!==t)return t.exports;var r=i[e]={id:e,loaded:!1,exports:{}};return s[e].call(r.exports,r,r.exports,a),r.loaded=!0,r.exports}a.m=s,e=[],a.O=(t,s,i,r)=>{if(!s){var n=1/0;for(c=0;c<e.length;c++){s=e[c][0],i=e[c][1],r=e[c][2];for(var o=!0,h=0;h<s.length;h++)(!1&r||n>=r)&&Object.keys(a.O).every((e=>a.O[e](s[h])))?s.splice(h--,1):(o=!1,r<n&&(n=r));if(o){e.splice(c--,1);var l=i();void 0!==l&&(t=l)}}return t}r=r||0;for(var c=e.length;c>0&&e[c-1][2]>r;c--)e[c]=e[c-1];e[c]=[s,i,r]},a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var s in t)a.o(t,s)&&!a.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:t[s]})},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),a.j=7870,(()=>{a.b=document.baseURI||self.location.href;var e={7870:0};a.O.j=t=>0===e[t];var t=(t,s)=>{var i,r,n=s[0],o=s[1],h=s[2],l=0;if(n.some((t=>0!==e[t]))){for(i in o)a.o(o,i)&&(a.m[i]=o[i]);if(h)var c=h(a)}for(t&&t(s);l<n.length;l++)r=n[l],a.o(e,r)&&e[r]&&e[r][0](),e[r]=0;return a.O(c)},s=self.webpackChunknextcloud=self.webpackChunknextcloud||[];s.forEach(t.bind(null,0)),s.push=t.bind(null,s.push.bind(s))})(),a.nc=void 0;var r=a.O(void 0,[7874],(()=>a(72920)));r=a.O(r)})(); +//# sourceMappingURL=files_sharing-files_sharing_tab.js.map?v=2e82d0385b4011ffdbff
\ 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 e9ae25e6c03..1dcd925e296 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=eb41033847e7c9a9ae85","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/SharingEntryInternal.vue?6c02","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntrySimple.vue","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntrySimple.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntrySimple.vue?97f3","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?1179","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntryInternal.vue?4c20","webpack://nextcloud/./apps/files_sharing/src/components/SharingInput.vue?65df","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?b00a","webpack://nextcloud/./apps/files_sharing/src/components/SharingInput.vue?3d7c","webpack://nextcloud/./apps/files_sharing/src/views/SharingInherited.vue?45a6","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?58c8","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?3fbf","webpack://nextcloud/./apps/files_sharing/src/views/SharingInherited.vue?1677","webpack://nextcloud/./apps/files_sharing/src/views/SharingLinkList.vue?de0b","webpack:///nextcloud/apps/files_sharing/src/components/ExternalShareAction.vue","webpack:///nextcloud/apps/files_sharing/src/components/ExternalShareAction.vue?vue&type=script&lang=js&","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/components/SharePermissionsEditor.vue?f69b","webpack:///nextcloud/apps/files_sharing/src/lib/SharePermissionsToolBox.js","webpack:///nextcloud/apps/files_sharing/src/components/SharePermissionsEditor.vue","webpack:///nextcloud/apps/files_sharing/src/components/SharePermissionsEditor.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files_sharing/src/components/SharePermissionsEditor.vue?19a3","webpack://nextcloud/./apps/files_sharing/src/components/SharePermissionsEditor.vue?f133","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?8b7c","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntryLink.vue?af90","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/components/SharingEntryLink.vue?64e9","webpack://nextcloud/./apps/files_sharing/src/views/SharingLinkList.vue?a70b","webpack://nextcloud/./apps/files_sharing/src/views/SharingList.vue?e340","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?2ffc","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntry.vue?10a7","webpack:///nextcloud/apps/files_sharing/src/views/SharingList.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files_sharing/src/views/SharingList.vue","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntry.vue?f8d7","webpack://nextcloud/./apps/files_sharing/src/views/SharingList.vue?9f9c","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?b24f","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/files_sharing_tab.js","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/components/SharePermissionsEditor.vue?vue&type=style&index=0&id=7cec8a94&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntry.vue?vue&type=style&index=0&id=325ebcb0&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryInherited.vue?vue&type=style&index=0&id=038f97f0&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryInternal.vue?vue&type=style&index=0&id=71a426be&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryLink.vue?vue&type=style&index=0&id=3f82c612&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntrySimple.vue?vue&type=style&index=0&id=02e83c36&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingInput.vue?vue&type=style&index=0&id=486ec7c8&prod&lang=scss&","webpack:///nextcloud/apps/files_sharing/src/views/SharingInherited.vue?vue&type=style&index=0&id=05b67dc8&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/views/SharingTab.vue?vue&type=style&index=0&id=085eaa7e&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 = (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((key) => (__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","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) 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.js'\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","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 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=02e83c36&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=02e83c36&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=02e83c36&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=02e83c36&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 \"02e83c36\",\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.js'\nimport SharingEntrySimple from './SharingEntrySimple.vue'\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=71a426be&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=71a426be&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=71a426be&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=71a426be&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 \"71a426be\",\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:{\"input-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) 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.js'\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.js'\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\treturn new Share(request.data.ocs.data)\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\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\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\tinput-id=\"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.js'\nimport GeneratePassword from '../utils/GeneratePassword.js'\nimport Share from '../models/Share.js'\nimport ShareRequests from '../mixins/ShareRequests.js'\nimport ShareTypes from '../mixins/ShareTypes.js'\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', 'ScienceMesh'),\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=486ec7c8&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=486ec7c8&prod&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SharingInput.vue?vue&type=template&id=486ec7c8&\"\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=486ec7c8&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('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 }","/**\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, n/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.js'\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\nimport NcActionLink from '@nextcloud/vue/dist/Components/NcActionLink.js'\nimport NcActionText from '@nextcloud/vue/dist/Components/NcActionText.js'\n\n// eslint-disable-next-line no-unused-vars\nimport Share from '../models/Share.js'\nimport SharesMixin from '../mixins/SharesMixin.js'\nimport SharingEntrySimple from '../components/SharingEntrySimple.vue'\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=038f97f0&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=038f97f0&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=038f97f0&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=038f97f0&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 \"038f97f0\",\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.js'\nimport axios from '@nextcloud/axios'\n\nimport Share from '../models/Share.js'\nimport SharingEntryInherited from '../components/SharingEntryInherited.vue'\nimport SharingEntrySimple from '../components/SharingEntrySimple.vue'\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=05b67dc8&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=05b67dc8&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=05b67dc8&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=05b67dc8&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 \"05b67dc8\",\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) 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.js'\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 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&\"","import { render, staticRenderFns } from \"./ExternalShareAction.vue?vue&type=template&id=0f0e27d0&\"\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 }","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 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","<!--\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.js'\nimport NcActionRadio from '@nextcloud/vue/dist/Components/NcActionRadio.js'\nimport NcActionCheckbox from '@nextcloud/vue/dist/Components/NcActionCheckbox.js'\n\nimport SharesMixin from '../mixins/SharesMixin.js'\nimport {\n\tATOMIC_PERMISSIONS,\n\tBUNDLED_PERMISSIONS,\n\thasPermissions,\n\tpermissionsSetIsValid,\n\ttogglePermissions,\n\tcanTogglePermissions,\n} from '../lib/SharePermissionsToolBox.js'\n\nimport Tune from 'vue-material-design-icons/Tune.vue'\nimport ChevronLeft from 'vue-material-design-icons/ChevronLeft.vue'\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","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 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=7cec8a94&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=7cec8a94&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=7cec8a94&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=7cec8a94&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 \"7cec8a94\",\n null\n \n)\n\nexport default component.exports","<!--\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 || 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=\"pendingPassword\" 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=\"config.enableLinkPasswordByDefault\"\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=\"pendingPassword || 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:show-trailing-button=\"hasUnsavedPassword\"\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.js'\nimport NcActionCheckbox from '@nextcloud/vue/dist/Components/NcActionCheckbox.js'\nimport NcActionInput from '@nextcloud/vue/dist/Components/NcActionInput.js'\nimport NcActionLink from '@nextcloud/vue/dist/Components/NcActionLink.js'\nimport NcActionText from '@nextcloud/vue/dist/Components/NcActionText.js'\nimport NcActionSeparator from '@nextcloud/vue/dist/Components/NcActionSeparator.js'\nimport NcActionTextEditable from '@nextcloud/vue/dist/Components/NcActionTextEditable.js'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js'\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js'\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.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\t\t\tif (this.config.enableLinkPasswordByDefault) {\n\t\t\t\tshareDefaults.password = await GeneratePassword()\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.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 enforced, pre-fill with random one\n\t\t\t\tif (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-element);\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=3f82c612&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=3f82c612&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=3f82c612&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=3f82c612&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 \"3f82c612\",\n null\n \n)\n\nexport default component.exports","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.js'\nimport ShareTypes from '../mixins/ShareTypes.js'\nimport SharingEntryLink from '../components/SharingEntryLink.vue'\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","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.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.pendingPassword)?_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.config.enableLinkPasswordByDefault)?_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.pendingPassword || _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,\"show-trailing-button\":_vm.hasUnsavedPassword,\"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 { render, staticRenderFns } from \"./SharingLinkList.vue?vue&type=template&id=7f9f5a8a&\"\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 _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<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.js'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js'\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\nimport NcActionCheckbox from '@nextcloud/vue/dist/Components/NcActionCheckbox.js'\nimport NcActionInput from '@nextcloud/vue/dist/Components/NcActionInput.js'\nimport NcActionTextEditable from '@nextcloud/vue/dist/Components/NcActionTextEditable.js'\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=325ebcb0&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=325ebcb0&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=325ebcb0&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=325ebcb0&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 \"325ebcb0\",\n null\n \n)\n\nexport default component.exports","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&\"","<!--\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.js'\nimport SharingEntry from '../components/SharingEntry.vue'\nimport ShareTypes from '../mixins/ShareTypes.js'\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","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 }","import { render, staticRenderFns } from \"./SharingList.vue?vue&type=template&id=7e1aeaa8&\"\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","<!--\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.js'\nimport axios from '@nextcloud/axios'\nimport { loadState } from '@nextcloud/initial-state'\n\nimport Config from '../services/ConfigService.js'\nimport { shareWithTitle } from '../utils/SharedWithMe.js'\nimport Share from '../models/Share.js'\nimport ShareTypes from '../mixins/ShareTypes.js'\nimport SharingEntryInternal from '../components/SharingEntryInternal.vue'\nimport SharingEntrySimple from '../components/SharingEntrySimple.vue'\nimport SharingInput from '../components/SharingInput.vue'\n\nimport SharingInherited from './SharingInherited.vue'\nimport SharingLinkList from './SharingLinkList.vue'\nimport SharingList from './SharingList.vue'\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=085eaa7e&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=085eaa7e&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=085eaa7e&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=085eaa7e&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 \"085eaa7e\",\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 * @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 n/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","/**\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","// 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-7cec8a94] .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-325ebcb0]{display:flex;align-items:center;height:44px}.sharing-entry__desc[data-v-325ebcb0]{display:flex;flex-direction:column;justify-content:space-between;padding:8px;line-height:1.2em}.sharing-entry__desc p[data-v-325ebcb0]{color:var(--color-text-maxcontrast)}.sharing-entry__desc-unique[data-v-325ebcb0]{color:var(--color-text-maxcontrast)}.sharing-entry__actions[data-v-325ebcb0]{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-038f97f0]{display:flex;align-items:center;height:44px}.sharing-entry__desc[data-v-038f97f0]{display:flex;flex-direction:column;justify-content:space-between;padding:8px;line-height:1.2em}.sharing-entry__desc p[data-v-038f97f0]{color:var(--color-text-maxcontrast)}.sharing-entry__actions[data-v-038f97f0]{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-71a426be]{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-71a426be]{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-3f82c612]{display:flex;align-items:center;min-height:44px}.sharing-entry__desc[data-v-3f82c612]{display:flex;flex-direction:column;justify-content:space-between;padding:8px;line-height:1.2em;overflow:hidden}.sharing-entry__desc p[data-v-3f82c612]{color:var(--color-text-maxcontrast)}.sharing-entry__title[data-v-3f82c612]{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.sharing-entry:not(.sharing-entry--share) .sharing-entry__actions .new-share-link[data-v-3f82c612]{border-top:1px solid var(--color-border)}.sharing-entry[data-v-3f82c612] .avatar-link-share{background-color:var(--color-primary-element)}.sharing-entry .sharing-entry__action--public-upload[data-v-3f82c612]{border-bottom:1px solid var(--color-border)}.sharing-entry__loading[data-v-3f82c612]{width:44px;height:44px;margin:0;padding:14px;margin-left:auto}.sharing-entry .action-item[data-v-3f82c612]{margin-left:auto}.sharing-entry .action-item~.action-item[data-v-3f82c612],.sharing-entry .action-item~.sharing-entry__loading[data-v-3f82c612]{margin-left:0}.sharing-entry .icon-checkmark-color[data-v-3f82c612]{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,6CAAA,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-element);\\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-02e83c36]{display:flex;align-items:center;min-height:44px}.sharing-entry__desc[data-v-02e83c36]{padding:8px;line-height:1.2em;position:relative;flex:1 1;min-width:0}.sharing-entry__desc p[data-v-02e83c36]{color:var(--color-text-maxcontrast)}.sharing-entry__title[data-v-02e83c36]{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;max-width:inherit}.sharing-entry__actions[data-v-02e83c36]{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-05b67dc8]{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-085eaa7e]{margin:1rem auto}.sharingTab__content[data-v-085eaa7e]{padding:0 6px}.sharingTab__additionalContent[data-v-085eaa7e]{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 = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (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 = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (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 = (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 = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (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((id) => (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], () => (__webpack_require__(24103)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","Config","isPublicUploadEnabled","document","getElementsByClassName","dataset","allowPublicUpload","isShareWithLinkAllowed","getElementById","value","federatedShareDocLink","OC","appConfig","core","federatedCloudShareDoc","defaultExpirationDate","this","isDefaultExpireDateEnabled","Date","setDate","getDate","defaultExpireDate","defaultInternalExpirationDate","isDefaultInternalExpireDateEnabled","defaultInternalExpireDate","defaultRemoteExpirationDateString","isDefaultRemoteExpireDateEnabled","defaultRemoteExpireDate","enforcePasswordForPublicLink","enableLinkPasswordByDefault","isDefaultExpireDateEnforced","defaultExpireDateEnforced","defaultExpireDateEnabled","isDefaultInternalExpireDateEnforced","defaultInternalExpireDateEnforced","isDefaultRemoteExpireDateEnforced","defaultRemoteExpireDateEnforced","defaultInternalExpireDateEnabled","defaultRemoteExpireDateEnabled","isRemoteShareAllowed","remoteShareAllowed","isMailShareAllowed","_capabilities$files_s","_capabilities$files_s2","_capabilities$files_s3","capabilities","getCapabilities","undefined","files_sharing","sharebymail","public","enabled","isResharingAllowed","resharingAllowed","isPasswordForMailSharesRequired","password","enforced","shouldAlwaysShowUnique","_OC$getCapabilities$f","_OC$getCapabilities$f2","sharee","always_show_unique","allowGroupSharing","maxAutocompleteResults","parseInt","config","minSearchStringLength","passwordPolicy","password_policy","Share","constructor","ocsData","_ocsData$attributes","ocs","data","hide_download","mail_send","attributes","JSON","parse","e","console","warn","_share","state","id","type","share_type","permissions","owner","uid_owner","ownerDisplayName","displayname_owner","shareWith","share_with","shareWithDisplayName","share_with_displayname","shareWithDisplayNameUnique","share_with_displayname_unique","shareWithLink","share_with_link","shareWithAvatar","share_with_avatar","uidFileOwner","uid_file_owner","displaynameFileOwner","displayname_file_owner","createdTime","stime","expireDate","expiration","date","token","note","label","mailSend","hideDownload","passwordExpirationTime","password_expiration_time","sendPasswordByTalk","send_password_by_talk","path","itemType","item_type","mimetype","fileSource","file_source","fileTarget","file_target","fileParent","file_parent","hasReadPermission","PERMISSION_READ","hasCreatePermission","PERMISSION_CREATE","hasDeletePermission","PERMISSION_DELETE","hasUpdatePermission","PERMISSION_UPDATE","hasSharePermission","PERMISSION_SHARE","hasDownloadPermission","i","attr","scope","key","setAttribute","attrUpdate","push","canEdit","can_edit","canDelete","can_delete","viaFileid","via_fileid","viaPath","via_path","parent","storageId","storage_id","storage","itemSource","item_source","status","SHARE_TYPES","ShareTypes","name","components","NcActions","props","title","String","default","required","subtitle","isUnique","Boolean","ariaExpanded","computed","ariaExpandedValue","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","_c","_self","staticClass","_t","_v","_s","_e","$slots","ref","attrs","NcActionLink","SharingEntrySimple","fileInfo","Object","copied","copySuccess","internalLink","window","location","protocol","host","generateUrl","copyLinkTooltip","t","internalLinkSubtitle","methods","navigator","clipboard","writeText","showSuccess","$refs","shareEntrySimple","actionsComponent","$el","focus","error","setTimeout","scopedSlots","_u","fn","proxy","on","$event","preventDefault","copyLink","apply","arguments","async","api","generate","request","axios","info","showError","array","Uint8Array","self","crypto","getRandomValues","length","charAt","passwordSet","shareUrl","generateOcsUrl","_ref","shareType","publicUpload","_request$data","_error$response","_error$response$data","_error$response$data$","_error$response$data$2","errorMessage","response","meta","message","Notification","showTemporary","_request$data2","concat","_error$response2","_error$response2$data","_error$response2$data2","_error$response2$data3","properties","_request$data3","_error$response3","_error$response3$data","_error$response3$data2","_error$response3$data3","Error","NcSelect","mixins","ShareRequests","shares","Array","linkShares","reshare","canReshare","loading","query","recommendations","ShareSearch","OCA","Sharing","suggestions","externalResults","results","inputPlaceholder","allowRemoteSharing","isValidQuery","trim","noResultText","mounted","getRecommendations","handleOpen","emit","select","debounceGetSuggestions","search","lookup","query_lookup_default","SHARE_TYPE_USER","SHARE_TYPE_GROUP","SHARE_TYPE_REMOTE","SHARE_TYPE_REMOTE_GROUP","SHARE_TYPE_CIRCLE","SHARE_TYPE_ROOM","SHARE_TYPE_GUEST","SHARE_TYPE_DECK","SHARE_TYPE_SCIENCEMESH","SHARE_TYPE_EMAIL","params","format","perPage","exact","rawExactSuggestions","values","reduce","arr","elem","rawSuggestions","exactSuggestions","filterOutExistingShares","map","share","formatForMultiselect","sort","a","b","lookupEntry","lookupEnabled","isNoUser","displayName","filter","result","condition","allSuggestions","nameCounts","item","desc","debounce","getSuggestions","rawRecommendations","getCurrentUser","uid","indexOf","sharesObj","obj","shareTypeToIcon","icon","iconTitle","_result$shareWithDisp","server","_result$shareWithDesc","shareWithDescription","user","uuid","$nextTick","$children","open","handler","$emit","debug","GeneratePassword","replace","createShare","sharePermissions","default_permissions","stringify","shareAttributes","newPassword","Promise","resolve","clear-search-on-blur","asyncFind","addShare","model","callback","$$v","expression","SharesRequests","_this$share","errors","saving","updateQueue","PQueue","concurrency","reactiveState","hasNote","get","set","dateTomorrow","lang","weekdaysShort","dayNamesShort","monthsShort","monthNamesShort","formatLocale","firstDayOfWeek","firstDay","weekdaysMin","monthFormat","isShareOwner","checkShare","expirationDate","isValid","parseDateString","_date$match","match","pop","formatDateToString","UTC","getFullYear","getMonth","toISOString","split","onExpirationChange","queueUpdate","onExpirationDisable","onNoteChange","$set","onNoteSubmit","newNote","$delete","deleteShare","_len","propertyNames","_key","forEach","toString","add","updatedShare","updateShare","propertyName","onSyncError","property","propertyEl","focusable","querySelector","debounceQueueUpdate","NcActionButton","NcActionText","NcAvatar","SharesMixin","viaFileTargetUrl","fileid","viaFolderName","basename","initiator","folder","onDelete","SharingEntryInherited","loaded","showInheritedShares","showInheritedSharesIcon","mainTitle","subTitle","toggleTooltip","fullPath","watch","resetState","toggleInheritedShares","fetchInheritedShares","url","removeShare","index","findIndex","splice","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","Math","random","substring","showCustomPermissionsForm","atomicPermissions","bundledPermissions","sharePermissionsSummary","permission","shareHasPermissions","permissionLabel","join","sharePermissionsIsBundle","bundle","sharePermissionEqual","isBundle","sharePermissionsSetIsValid","isFolder","fileHasCreatePermission","setSharePermissions","canToggleSharePermissions","permissionSet","canTogglePermissions","toggleSharePermissions","class","NcActionInput","NcActionTextEditable","NcActionSeparator","ExternalShareAction","SharePermissionsEditor","Number","pending","ExternalLegacyLinkActions","ExternalLinkActions","ExternalShareActions","isEmailShareType","hasExpirationDate","dateMaxEnforced","isPasswordProtected","Vue","expirationTime","moment","diff","fromNow","isTalkEnabled","appswebroots","spreed","isPasswordProtectedByTalkAvailable","isPasswordProtectedByTalk","canTogglePasswordProtectedByTalkAvailable","hasUnsavedPassword","pendingPassword","pendingExpirationDate","shareLink","actionsTooltip","externalLegacyLinkActions","actions","externalLinkActions","includes","isPasswordPolicyEnabled","canChangeHideDownload","some","shareAttribute","shareDefaults","pushNewLinkShare","component","update","newShare","_data$response","_data$response$data","_data$response$data$o","_data$response$data$o2","onLabelChange","onLabelSubmit","newLabel","copyButton","onPasswordChange","onPasswordDisable","onPasswordSubmit","onPasswordProtectedByTalkChange","onMenuClose","onCancel","SharingEntryLink","onNewLinkShare","minLength","canLinkShare","hasLinkShares","SHARE_TYPE_LINK","hasShares","unshift","awaitForShare","find","permissionsEdit","permissionsCreate","permissionsDelete","permissionsRead","permissionsShare","tooltip","canHaveNote","isRemote","canSetEdit","canSetCreate","canCreate","canSetDelete","canSetReshare","canSetDownload","canDownload","checked","updatePermissions","isEditChecked","isCreateChecked","isDeleteChecked","isReshareChecked","isDownloadChecked","hasRead","hasStatus","isArray","allowDownloadText","isSetDownloadButtonVisible","SharingEntry","CollectionList","SharingEntryInternal","SharingInherited","SharingInput","SharingLinkList","SharingList","expirationInterval","sharedWithMe","sections","ShareTabSections","getSections","projectsEnabled","loadState","isSharedWithMe","keys","getShares","fetchShares","reshares","fetchSharedWithMe","shared_with_me","all","processSharedWithMe","processShares","clearInterval","updateExpirationSubtitle","unix","relativetime","Util","relativeModifiedDate","_ref2","group","escape","circle","conversation","shareWithTitle","setInterval","shareOwnerId","currentUser","shareOwner","listComponent","shareList","linkShareList","emptyContentWithSections","section","refInFor","assign","_state","addNewResult","registerAction","every","check","_sections","registerSection","n","View","SharingTab","TabInstance","addEventListener","Files","Sidebar","registerTab","Tab","iconSvg","ShareVariant","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","r","getter","__esModule","d","definition","o","defineProperty","enumerable","g","globalThis","Function","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","baseURI","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","bind","nc","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file +{"version":3,"file":"files_sharing-files_sharing_tab.js?v=2e82d0385b4011ffdbff","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/SharingEntryInternal.vue?6c02","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntrySimple.vue","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntrySimple.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntrySimple.vue?97f3","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?1179","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntryInternal.vue?4c20","webpack://nextcloud/./apps/files_sharing/src/components/SharingInput.vue?65df","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?b00a","webpack://nextcloud/./apps/files_sharing/src/components/SharingInput.vue?3d7c","webpack://nextcloud/./apps/files_sharing/src/views/SharingInherited.vue?45a6","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?58c8","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?3fbf","webpack://nextcloud/./apps/files_sharing/src/views/SharingInherited.vue?1677","webpack://nextcloud/./apps/files_sharing/src/views/SharingLinkList.vue?de0b","webpack:///nextcloud/apps/files_sharing/src/components/ExternalShareAction.vue","webpack:///nextcloud/apps/files_sharing/src/components/ExternalShareAction.vue?vue&type=script&lang=js&","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/components/SharePermissionsEditor.vue?f69b","webpack:///nextcloud/apps/files_sharing/src/lib/SharePermissionsToolBox.js","webpack:///nextcloud/apps/files_sharing/src/components/SharePermissionsEditor.vue","webpack:///nextcloud/apps/files_sharing/src/components/SharePermissionsEditor.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files_sharing/src/components/SharePermissionsEditor.vue?19a3","webpack://nextcloud/./apps/files_sharing/src/components/SharePermissionsEditor.vue?f133","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?28c7","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntryLink.vue?af90","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/components/SharingEntryLink.vue?64e9","webpack://nextcloud/./apps/files_sharing/src/views/SharingLinkList.vue?a70b","webpack://nextcloud/./apps/files_sharing/src/views/SharingList.vue?e340","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?2ffc","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntry.vue?10a7","webpack:///nextcloud/apps/files_sharing/src/views/SharingList.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files_sharing/src/views/SharingList.vue","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntry.vue?f8d7","webpack://nextcloud/./apps/files_sharing/src/views/SharingList.vue?9f9c","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?b24f","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/files_sharing_tab.js","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/components/SharePermissionsEditor.vue?vue&type=style&index=0&id=7cec8a94&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntry.vue?vue&type=style&index=0&id=325ebcb0&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryInherited.vue?vue&type=style&index=0&id=038f97f0&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryInternal.vue?vue&type=style&index=0&id=71a426be&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryLink.vue?vue&type=style&index=0&id=18bb4c9a&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntrySimple.vue?vue&type=style&index=0&id=02e83c36&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingInput.vue?vue&type=style&index=0&id=486ec7c8&prod&lang=scss&","webpack:///nextcloud/apps/files_sharing/src/views/SharingInherited.vue?vue&type=style&index=0&id=05b67dc8&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/views/SharingTab.vue?vue&type=style&index=0&id=085eaa7e&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 = (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((key) => (__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","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) 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.js'\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","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 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=02e83c36&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=02e83c36&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=02e83c36&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=02e83c36&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 \"02e83c36\",\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.js'\nimport SharingEntrySimple from './SharingEntrySimple.vue'\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=71a426be&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=71a426be&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=71a426be&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=71a426be&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 \"71a426be\",\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:{\"input-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) 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.js'\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.js'\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\tinput-id=\"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.js'\nimport GeneratePassword from '../utils/GeneratePassword.js'\nimport Share from '../models/Share.js'\nimport ShareRequests from '../mixins/ShareRequests.js'\nimport ShareTypes from '../mixins/ShareTypes.js'\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', 'ScienceMesh'),\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=486ec7c8&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=486ec7c8&prod&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SharingInput.vue?vue&type=template&id=486ec7c8&\"\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=486ec7c8&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('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 }","/**\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, n/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.js'\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\nimport NcActionLink from '@nextcloud/vue/dist/Components/NcActionLink.js'\nimport NcActionText from '@nextcloud/vue/dist/Components/NcActionText.js'\n\n// eslint-disable-next-line no-unused-vars\nimport Share from '../models/Share.js'\nimport SharesMixin from '../mixins/SharesMixin.js'\nimport SharingEntrySimple from '../components/SharingEntrySimple.vue'\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=038f97f0&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=038f97f0&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=038f97f0&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=038f97f0&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 \"038f97f0\",\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.js'\nimport axios from '@nextcloud/axios'\n\nimport Share from '../models/Share.js'\nimport SharingEntryInherited from '../components/SharingEntryInherited.vue'\nimport SharingEntrySimple from '../components/SharingEntrySimple.vue'\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=05b67dc8&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=05b67dc8&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=05b67dc8&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=05b67dc8&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 \"05b67dc8\",\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) 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.js'\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 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&\"","import { render, staticRenderFns } from \"./ExternalShareAction.vue?vue&type=template&id=0f0e27d0&\"\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 }","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 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","<!--\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.js'\nimport NcActionRadio from '@nextcloud/vue/dist/Components/NcActionRadio.js'\nimport NcActionCheckbox from '@nextcloud/vue/dist/Components/NcActionCheckbox.js'\n\nimport SharesMixin from '../mixins/SharesMixin.js'\nimport {\n\tATOMIC_PERMISSIONS,\n\tBUNDLED_PERMISSIONS,\n\thasPermissions,\n\tpermissionsSetIsValid,\n\ttogglePermissions,\n\tcanTogglePermissions,\n} from '../lib/SharePermissionsToolBox.js'\n\nimport Tune from 'vue-material-design-icons/Tune.vue'\nimport ChevronLeft from 'vue-material-design-icons/ChevronLeft.vue'\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","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 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=7cec8a94&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=7cec8a94&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=7cec8a94&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=7cec8a94&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 \"7cec8a94\",\n null\n \n)\n\nexport default component.exports","<!--\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:show-trailing-button=\"hasUnsavedPassword\"\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.js'\nimport NcActionCheckbox from '@nextcloud/vue/dist/Components/NcActionCheckbox.js'\nimport NcActionInput from '@nextcloud/vue/dist/Components/NcActionInput.js'\nimport NcActionLink from '@nextcloud/vue/dist/Components/NcActionLink.js'\nimport NcActionText from '@nextcloud/vue/dist/Components/NcActionText.js'\nimport NcActionSeparator from '@nextcloud/vue/dist/Components/NcActionSeparator.js'\nimport NcActionTextEditable from '@nextcloud/vue/dist/Components/NcActionTextEditable.js'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js'\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js'\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-element);\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=18bb4c9a&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=18bb4c9a&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=18bb4c9a&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=18bb4c9a&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 \"18bb4c9a\",\n null\n \n)\n\nexport default component.exports","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.js'\nimport ShareTypes from '../mixins/ShareTypes.js'\nimport SharingEntryLink from '../components/SharingEntryLink.vue'\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","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,\"show-trailing-button\":_vm.hasUnsavedPassword,\"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 { render, staticRenderFns } from \"./SharingLinkList.vue?vue&type=template&id=7f9f5a8a&\"\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 _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<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.js'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js'\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\nimport NcActionCheckbox from '@nextcloud/vue/dist/Components/NcActionCheckbox.js'\nimport NcActionInput from '@nextcloud/vue/dist/Components/NcActionInput.js'\nimport NcActionTextEditable from '@nextcloud/vue/dist/Components/NcActionTextEditable.js'\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=325ebcb0&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=325ebcb0&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=325ebcb0&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=325ebcb0&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 \"325ebcb0\",\n null\n \n)\n\nexport default component.exports","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&\"","<!--\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.js'\nimport SharingEntry from '../components/SharingEntry.vue'\nimport ShareTypes from '../mixins/ShareTypes.js'\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","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 }","import { render, staticRenderFns } from \"./SharingList.vue?vue&type=template&id=7e1aeaa8&\"\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","<!--\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.js'\nimport axios from '@nextcloud/axios'\nimport { loadState } from '@nextcloud/initial-state'\n\nimport Config from '../services/ConfigService.js'\nimport { shareWithTitle } from '../utils/SharedWithMe.js'\nimport Share from '../models/Share.js'\nimport ShareTypes from '../mixins/ShareTypes.js'\nimport SharingEntryInternal from '../components/SharingEntryInternal.vue'\nimport SharingEntrySimple from '../components/SharingEntrySimple.vue'\nimport SharingInput from '../components/SharingInput.vue'\n\nimport SharingInherited from './SharingInherited.vue'\nimport SharingLinkList from './SharingLinkList.vue'\nimport SharingList from './SharingList.vue'\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=085eaa7e&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=085eaa7e&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=085eaa7e&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=085eaa7e&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 \"085eaa7e\",\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 * @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 n/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","/**\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","// 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-7cec8a94] .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-325ebcb0]{display:flex;align-items:center;height:44px}.sharing-entry__desc[data-v-325ebcb0]{display:flex;flex-direction:column;justify-content:space-between;padding:8px;line-height:1.2em}.sharing-entry__desc p[data-v-325ebcb0]{color:var(--color-text-maxcontrast)}.sharing-entry__desc-unique[data-v-325ebcb0]{color:var(--color-text-maxcontrast)}.sharing-entry__actions[data-v-325ebcb0]{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-038f97f0]{display:flex;align-items:center;height:44px}.sharing-entry__desc[data-v-038f97f0]{display:flex;flex-direction:column;justify-content:space-between;padding:8px;line-height:1.2em}.sharing-entry__desc p[data-v-038f97f0]{color:var(--color-text-maxcontrast)}.sharing-entry__actions[data-v-038f97f0]{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-71a426be]{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-71a426be]{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-18bb4c9a]{display:flex;align-items:center;min-height:44px}.sharing-entry__desc[data-v-18bb4c9a]{display:flex;flex-direction:column;justify-content:space-between;padding:8px;line-height:1.2em;overflow:hidden}.sharing-entry__desc p[data-v-18bb4c9a]{color:var(--color-text-maxcontrast)}.sharing-entry__title[data-v-18bb4c9a]{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.sharing-entry:not(.sharing-entry--share) .sharing-entry__actions .new-share-link[data-v-18bb4c9a]{border-top:1px solid var(--color-border)}.sharing-entry[data-v-18bb4c9a] .avatar-link-share{background-color:var(--color-primary-element)}.sharing-entry .sharing-entry__action--public-upload[data-v-18bb4c9a]{border-bottom:1px solid var(--color-border)}.sharing-entry__loading[data-v-18bb4c9a]{width:44px;height:44px;margin:0;padding:14px;margin-left:auto}.sharing-entry .action-item[data-v-18bb4c9a]{margin-left:auto}.sharing-entry .action-item~.action-item[data-v-18bb4c9a],.sharing-entry .action-item~.sharing-entry__loading[data-v-18bb4c9a]{margin-left:0}.sharing-entry .icon-checkmark-color[data-v-18bb4c9a]{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,6CAAA,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-element);\\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-02e83c36]{display:flex;align-items:center;min-height:44px}.sharing-entry__desc[data-v-02e83c36]{padding:8px;line-height:1.2em;position:relative;flex:1 1;min-width:0}.sharing-entry__desc p[data-v-02e83c36]{color:var(--color-text-maxcontrast)}.sharing-entry__title[data-v-02e83c36]{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;max-width:inherit}.sharing-entry__actions[data-v-02e83c36]{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-05b67dc8]{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-085eaa7e]{margin:1rem auto}.sharingTab__content[data-v-085eaa7e]{padding:0 6px}.sharingTab__additionalContent[data-v-085eaa7e]{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 = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (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 = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (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 = (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 = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (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((id) => (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], () => (__webpack_require__(72920)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","Config","isPublicUploadEnabled","document","getElementsByClassName","dataset","allowPublicUpload","isShareWithLinkAllowed","getElementById","value","federatedShareDocLink","OC","appConfig","core","federatedCloudShareDoc","defaultExpirationDate","this","isDefaultExpireDateEnabled","Date","setDate","getDate","defaultExpireDate","defaultInternalExpirationDate","isDefaultInternalExpireDateEnabled","defaultInternalExpireDate","defaultRemoteExpirationDateString","isDefaultRemoteExpireDateEnabled","defaultRemoteExpireDate","enforcePasswordForPublicLink","enableLinkPasswordByDefault","isDefaultExpireDateEnforced","defaultExpireDateEnforced","defaultExpireDateEnabled","isDefaultInternalExpireDateEnforced","defaultInternalExpireDateEnforced","isDefaultRemoteExpireDateEnforced","defaultRemoteExpireDateEnforced","defaultInternalExpireDateEnabled","defaultRemoteExpireDateEnabled","isRemoteShareAllowed","remoteShareAllowed","isMailShareAllowed","_capabilities$files_s","_capabilities$files_s2","_capabilities$files_s3","capabilities","getCapabilities","undefined","files_sharing","sharebymail","public","enabled","isResharingAllowed","resharingAllowed","isPasswordForMailSharesRequired","password","enforced","shouldAlwaysShowUnique","_OC$getCapabilities$f","_OC$getCapabilities$f2","sharee","always_show_unique","allowGroupSharing","maxAutocompleteResults","parseInt","config","minSearchStringLength","passwordPolicy","password_policy","Share","constructor","ocsData","_ocsData$attributes","ocs","data","hide_download","mail_send","attributes","JSON","parse","e","console","warn","_share","state","id","type","share_type","permissions","owner","uid_owner","ownerDisplayName","displayname_owner","shareWith","share_with","shareWithDisplayName","share_with_displayname","shareWithDisplayNameUnique","share_with_displayname_unique","shareWithLink","share_with_link","shareWithAvatar","share_with_avatar","uidFileOwner","uid_file_owner","displaynameFileOwner","displayname_file_owner","createdTime","stime","expireDate","expiration","date","token","note","label","mailSend","hideDownload","passwordExpirationTime","password_expiration_time","sendPasswordByTalk","send_password_by_talk","path","itemType","item_type","mimetype","fileSource","file_source","fileTarget","file_target","fileParent","file_parent","hasReadPermission","PERMISSION_READ","hasCreatePermission","PERMISSION_CREATE","hasDeletePermission","PERMISSION_DELETE","hasUpdatePermission","PERMISSION_UPDATE","hasSharePermission","PERMISSION_SHARE","hasDownloadPermission","i","attr","scope","key","setAttribute","attrUpdate","push","canEdit","can_edit","canDelete","can_delete","viaFileid","via_fileid","viaPath","via_path","parent","storageId","storage_id","storage","itemSource","item_source","status","SHARE_TYPES","ShareTypes","name","components","NcActions","props","title","String","default","required","subtitle","isUnique","Boolean","ariaExpanded","computed","ariaExpandedValue","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","_c","_self","staticClass","_t","_v","_s","_e","$slots","ref","attrs","NcActionLink","SharingEntrySimple","fileInfo","Object","copied","copySuccess","internalLink","window","location","protocol","host","generateUrl","copyLinkTooltip","t","internalLinkSubtitle","methods","navigator","clipboard","writeText","showSuccess","$refs","shareEntrySimple","actionsComponent","$el","focus","error","setTimeout","scopedSlots","_u","fn","proxy","on","$event","preventDefault","copyLink","apply","arguments","async","api","generate","request","axios","info","showError","array","Uint8Array","self","crypto","getRandomValues","length","charAt","passwordSet","shareUrl","generateOcsUrl","_ref","shareType","publicUpload","_request$data","share","emit","_error$response","_error$response$data","_error$response$data$","_error$response$data$2","errorMessage","response","meta","message","Notification","showTemporary","_request$data2","concat","_error$response2","_error$response2$data","_error$response2$data2","_error$response2$data3","properties","_request$data3","_error$response3","_error$response3$data","_error$response3$data2","_error$response3$data3","Error","NcSelect","mixins","ShareRequests","shares","Array","linkShares","reshare","canReshare","loading","query","recommendations","ShareSearch","OCA","Sharing","suggestions","externalResults","results","inputPlaceholder","allowRemoteSharing","isValidQuery","trim","noResultText","mounted","getRecommendations","handleOpen","select","debounceGetSuggestions","search","lookup","query_lookup_default","SHARE_TYPE_USER","SHARE_TYPE_GROUP","SHARE_TYPE_REMOTE","SHARE_TYPE_REMOTE_GROUP","SHARE_TYPE_CIRCLE","SHARE_TYPE_ROOM","SHARE_TYPE_GUEST","SHARE_TYPE_DECK","SHARE_TYPE_SCIENCEMESH","SHARE_TYPE_EMAIL","params","format","perPage","exact","rawExactSuggestions","values","reduce","arr","elem","rawSuggestions","exactSuggestions","filterOutExistingShares","map","formatForMultiselect","sort","a","b","lookupEntry","lookupEnabled","isNoUser","displayName","filter","result","condition","allSuggestions","nameCounts","item","desc","debounce","getSuggestions","rawRecommendations","getCurrentUser","uid","indexOf","sharesObj","obj","shareTypeToIcon","icon","iconTitle","_result$shareWithDisp","server","_result$shareWithDesc","shareWithDescription","user","uuid","$nextTick","$children","open","handler","$emit","debug","GeneratePassword","replace","createShare","sharePermissions","default_permissions","stringify","shareAttributes","newPassword","Promise","resolve","clear-search-on-blur","asyncFind","addShare","model","callback","$$v","expression","SharesRequests","_this$share","errors","saving","updateQueue","PQueue","concurrency","reactiveState","hasNote","get","set","dateTomorrow","lang","weekdaysShort","dayNamesShort","monthsShort","monthNamesShort","formatLocale","firstDayOfWeek","firstDay","weekdaysMin","monthFormat","isShareOwner","checkShare","expirationDate","isValid","parseDateString","_date$match","match","pop","formatDateToString","UTC","getFullYear","getMonth","toISOString","split","onExpirationChange","queueUpdate","onExpirationDisable","onNoteChange","$set","onNoteSubmit","newNote","$delete","deleteShare","_len","propertyNames","_key","forEach","toString","add","updatedShare","updateShare","propertyName","onSyncError","property","propertyEl","focusable","querySelector","debounceQueueUpdate","NcActionButton","NcActionText","NcAvatar","SharesMixin","viaFileTargetUrl","fileid","viaFolderName","basename","initiator","folder","onDelete","SharingEntryInherited","loaded","showInheritedShares","showInheritedSharesIcon","mainTitle","subTitle","toggleTooltip","fullPath","watch","resetState","toggleInheritedShares","fetchInheritedShares","url","removeShare","index","findIndex","splice","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","Math","random","substring","showCustomPermissionsForm","atomicPermissions","bundledPermissions","sharePermissionsSummary","permission","shareHasPermissions","permissionLabel","join","sharePermissionsIsBundle","bundle","sharePermissionEqual","isBundle","sharePermissionsSetIsValid","isFolder","fileHasCreatePermission","setSharePermissions","canToggleSharePermissions","permissionSet","canTogglePermissions","toggleSharePermissions","class","NcActionInput","NcActionTextEditable","NcActionSeparator","ExternalShareAction","SharePermissionsEditor","Number","pending","ExternalLegacyLinkActions","ExternalLinkActions","ExternalShareActions","isEmailShareType","hasExpirationDate","dateMaxEnforced","isPasswordProtected","Vue","expirationTime","moment","diff","fromNow","isTalkEnabled","appswebroots","spreed","isPasswordProtectedByTalkAvailable","isPasswordProtectedByTalk","canTogglePasswordProtectedByTalkAvailable","hasUnsavedPassword","pendingPassword","pendingEnforcedPassword","pendingExpirationDate","shareLink","actionsTooltip","externalLegacyLinkActions","actions","externalLinkActions","includes","isPasswordPolicyEnabled","canChangeHideDownload","some","shareAttribute","shareDefaults","pushNewLinkShare","component","update","newShare","_data$response","_data$response$data","_data$response$data$o","_data$response$data$o2","onLabelChange","onLabelSubmit","newLabel","copyButton","onPasswordChange","onPasswordDisable","onPasswordSubmit","onPasswordProtectedByTalkChange","onMenuClose","onCancel","SharingEntryLink","onNewLinkShare","minLength","canLinkShare","hasLinkShares","SHARE_TYPE_LINK","hasShares","unshift","awaitForShare","find","permissionsEdit","permissionsCreate","permissionsDelete","permissionsRead","permissionsShare","tooltip","canHaveNote","isRemote","canSetEdit","canSetCreate","canCreate","canSetDelete","canSetReshare","canSetDownload","canDownload","checked","updatePermissions","isEditChecked","isCreateChecked","isDeleteChecked","isReshareChecked","isDownloadChecked","hasRead","hasStatus","isArray","allowDownloadText","isSetDownloadButtonVisible","SharingEntry","CollectionList","SharingEntryInternal","SharingInherited","SharingInput","SharingLinkList","SharingList","expirationInterval","sharedWithMe","sections","ShareTabSections","getSections","projectsEnabled","loadState","isSharedWithMe","keys","getShares","fetchShares","reshares","fetchSharedWithMe","shared_with_me","all","processSharedWithMe","processShares","clearInterval","updateExpirationSubtitle","unix","relativetime","Util","relativeModifiedDate","_ref2","group","escape","circle","conversation","shareWithTitle","setInterval","shareOwnerId","currentUser","shareOwner","listComponent","shareList","linkShareList","emptyContentWithSections","section","refInFor","assign","_state","addNewResult","registerAction","every","check","_sections","registerSection","n","View","SharingTab","TabInstance","addEventListener","Files","Sidebar","registerTab","Tab","iconSvg","ShareVariant","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","r","getter","__esModule","d","definition","o","defineProperty","enumerable","g","globalThis","Function","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","baseURI","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","bind","nc","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file diff --git a/dist/settings-legacy-admin.js b/dist/settings-legacy-admin.js index 99cd2a29708..6dfe5a6a1fa 100644 --- a/dist/settings-legacy-admin.js +++ b/dist/settings-legacy-admin.js @@ -1,2 +1,2 @@ -({39583:function(){window.addEventListener("DOMContentLoaded",(()=>{$("#linksExcludedGroups,#passwordsExcludedGroups").each((function(e,s){OC.Settings.setupGroupsSelect($(s)),$(s).change((function(e){let s=e.val||[];s=JSON.stringify(s),OCP.AppConfig.setValue("core",$(this).attr("name"),s)}))})),$("#loglevel").change((function(){$.post(OC.generateUrl("/settings/admin/log/level"),{level:$(this).val()},(()=>{OC.Log.reload()}))})),$("#shareAPIEnabled").change((function(){$("#shareAPI p:not(#enable)").toggleClass("hidden",!this.checked)})),$("#shareapiExpireAfterNDays").on("input",(function(){this.value=this.value.replace(/\D/g,"")})),$("#shareAPI input:not(.noJSAutoUpdate)").change((function(){let e=$(this).val();"checkbox"===$(this).attr("type")&&(e=this.checked?"yes":"no"),OCP.AppConfig.setValue("core",$(this).attr("name"),e)})),$("#shareapiDefaultExpireDate").change((function(){$("#setDefaultExpireDate").toggleClass("hidden",!this.checked)})),$("#shareapiDefaultInternalExpireDate").change((function(){$("#setDefaultInternalExpireDate").toggleClass("hidden",!this.checked)})),$("#shareapiDefaultRemoteExpireDate").change((function(){$("#setDefaultRemoteExpireDate").toggleClass("hidden",!this.checked)})),$("#enforceLinkPassword").change((function(){$("#selectPasswordsExcludedGroups").toggleClass("hidden",!this.checked)})),$("#publicShareDisclaimer").change((function(){$("#publicShareDisclaimerText").toggleClass("hidden",!this.checked),this.checked||e("")})),$("#shareApiDefaultPermissionsSection input").change((function(e){const s=$("#shareApiDefaultPermissions"),t=$(e.target);let i=s.val();return t.is(":checked")?i|=t.val():i&=~t.val(),i|=OC.PERMISSION_READ,s.val(i).change(),e.preventDefault(),!1}));const e=_.debounce((function(e){const s={success:()=>{OC.msg.finishedSuccess("#publicShareDisclaimerStatus",t("settings","Saved"))},error:()=>{OC.msg.finishedError("#publicShareDisclaimerStatus",t("settings","Not saved"))}};OC.msg.startSaving("#publicShareDisclaimerStatus"),_.isString(e)&&""!==e?OCP.AppConfig.setValue("core","shareapi_public_link_disclaimertext",e,s):($("#publicShareDisclaimerText").val(""),OCP.AppConfig.deleteKey("core","shareapi_public_link_disclaimertext",s))}),500);$("#publicShareDisclaimerText").on("change, keyup",(function(){e(this.value)})),$("#shareapi_allow_share_dialog_user_enumeration").on("change",(function(){$("#shareapi_restrict_user_enumeration_to_group_setting").toggleClass("hidden",!this.checked),$("#shareapi_restrict_user_enumeration_to_phone_setting").toggleClass("hidden",!this.checked),$("#shareapi_restrict_user_enumeration_combinewarning_setting").toggleClass("hidden",!this.checked)})),$("#allowLinks").change((function(){$("#publicLinkSettings").toggleClass("hidden",!this.checked),$("#setDefaultExpireDate").toggleClass("hidden",!(this.checked&&$("#shareapiDefaultExpireDate")[0].checked))})),$("#mail_smtpauth").change((function(){this.checked?$("#mail_credentials").removeClass("hidden"):$("#mail_credentials").addClass("hidden")})),$("#mail_smtpmode").change((function(){"smtp"!==$(this).val()?($("#setting_smtpauth").addClass("hidden"),$("#setting_smtphost").addClass("hidden"),$("#mail_smtpsecure_label").addClass("hidden"),$("#mail_smtpsecure").addClass("hidden"),$("#mail_credentials").addClass("hidden"),$("#mail_sendmailmode_label, #mail_sendmailmode").removeClass("hidden")):($("#setting_smtpauth").removeClass("hidden"),$("#setting_smtphost").removeClass("hidden"),$("#mail_smtpsecure_label").removeClass("hidden"),$("#mail_smtpsecure").removeClass("hidden"),$("#mail_smtpauth").is(":checked")&&$("#mail_credentials").removeClass("hidden"),$("#mail_sendmailmode_label, #mail_sendmailmode").addClass("hidden"))}));const s=function(){OC.PasswordConfirmation.requiresPasswordConfirmation()?OC.PasswordConfirmation.requirePasswordConfirmation(s):(OC.msg.startSaving("#mail_settings_msg"),$.ajax({url:OC.generateUrl("/settings/admin/mailsettings"),type:"POST",data:$("#mail_general_settings_form").serialize(),success:()=>{OC.msg.finishedSuccess("#mail_settings_msg",t("settings","Saved"))},error:e=>{OC.msg.finishedError("#mail_settings_msg",e.responseJSON)}}))},i=function(){OC.PasswordConfirmation.requiresPasswordConfirmation()?OC.PasswordConfirmation.requirePasswordConfirmation(i):(OC.msg.startSaving("#mail_settings_msg"),$.ajax({url:OC.generateUrl("/settings/admin/mailsettings/credentials"),type:"POST",data:$("#mail_credentials_settings").serialize(),success:()=>{OC.msg.finishedSuccess("#mail_settings_msg",t("settings","Saved"))},error:e=>{OC.msg.finishedError("#mail_settings_msg",e.responseJSON)}}))};$("#mail_general_settings_form").change(s),$("#mail_credentials_settings_submit").click(i),$("#mail_smtppassword").click((()=>{"text"===this.d&&"********"===this.S&&(this.d="password",this.S="")})),$("#sendtestemail").click((e=>{e.preventDefault(),OC.msg.startAction("#sendtestmail_msg",t("settings","Sending…")),$.ajax({url:OC.generateUrl("/settings/admin/mailtest"),type:"POST",success:()=>{OC.msg.finishedSuccess("#sendtestmail_msg",t("settings","Email sent"))},error:e=>{OC.msg.finishedError("#sendtestmail_msg",e.responseJSON)}})})),$("#allowGroupSharing").change((function(){$("#allowGroupSharing").toggleClass("hidden",!this.checked)})),$("#shareapiExcludeGroups").change((function(){$("#selectExcludedGroups").toggleClass("hidden",!this.checked)})),null!==document.getElementById("security-warning")&&$.when(OC.SetupChecks.checkWebDAV(),OC.SetupChecks.checkWellKnownUrl("GET","/.well-known/webfinger",OC.theme.docPlaceholderUrl,!0===$("#postsetupchecks").data("check-wellknown"),[200,404],!0),OC.SetupChecks.checkWellKnownUrl("GET","/.well-known/nodeinfo",OC.theme.docPlaceholderUrl,!0===$("#postsetupchecks").data("check-wellknown"),[200,404],!0),OC.SetupChecks.checkWellKnownUrl("PROPFIND","/.well-known/caldav",OC.theme.docPlaceholderUrl,!0===$("#postsetupchecks").data("check-wellknown")),OC.SetupChecks.checkWellKnownUrl("PROPFIND","/.well-known/carddav",OC.theme.docPlaceholderUrl,!0===$("#postsetupchecks").data("check-wellknown")),OC.SetupChecks.checkProviderUrl(OC.getRootPath()+"/ocm-provider/",OC.theme.docPlaceholderUrl,!0===$("#postsetupchecks").data("check-wellknown")),OC.SetupChecks.checkProviderUrl(OC.getRootPath()+"/ocs-provider/",OC.theme.docPlaceholderUrl,!0===$("#postsetupchecks").data("check-wellknown")),OC.SetupChecks.checkSetup(),OC.SetupChecks.checkGeneric(),OC.SetupChecks.checkWOFF2Loading(OC.filePath("core","","fonts/NotoSans-Regular-latin.woff2"),OC.theme.docPlaceholderUrl),OC.SetupChecks.checkDataProtected()).then(((e,s,t,i,a,n,l,c,r,d,o)=>{const h=[].concat(e,s,t,i,a,n,l,c,r,d,o),g=$("#postsetupchecks");$("#security-warning-state-loading").addClass("hidden");let u=!1;const m=g.find(".errors"),p=g.find(".warnings"),C=g.find(".info");for(let e=0;e<h.length;e++)switch(h[e].type){case OC.SetupChecks.MESSAGE_TYPE_INFO:C.append("<li>"+h[e].msg+"</li>");break;case OC.SetupChecks.MESSAGE_TYPE_WARNING:p.append("<li>"+h[e].msg+"</li>");break;case OC.SetupChecks.MESSAGE_TYPE_ERROR:default:m.append("<li>"+h[e].msg+"</li>")}m.find("li").length>0&&(m.removeClass("hidden"),u=!0),p.find("li").length>0&&(p.removeClass("hidden"),u=!0),C.find("li").length>0&&(C.removeClass("hidden"),u=!0),u?($("#postsetupchecks-hint").removeClass("hidden"),m.find("li").length>0?$("#security-warning-state-failure").removeClass("hidden"):$("#security-warning-state-warning").removeClass("hidden")):0===$("#security-warning").children("ul").children().length?$("#security-warning-state-ok").removeClass("hidden"):$("#security-warning-state-failure").removeClass("hidden")})),$("#shareAPI").removeClass("loading")}))}})[39583](); -//# sourceMappingURL=settings-legacy-admin.js.map?v=65cf3499d4a69ec64dac
\ No newline at end of file +({39583:function(){window.addEventListener("DOMContentLoaded",(()=>{$("#linksExcludedGroups,#passwordsExcludedGroups").each((function(e,s){OC.Settings.setupGroupsSelect($(s)),$(s).change((function(e){let s=e.val||[];s=JSON.stringify(s),OCP.AppConfig.setValue("core",$(this).attr("name"),s)}))})),$("#loglevel").change((function(){$.post(OC.generateUrl("/settings/admin/log/level"),{level:$(this).val()},(()=>{OC.Log.reload()}))})),$("#shareAPIEnabled").change((function(){$("#shareAPI p:not(#enable)").toggleClass("hidden",!this.checked)})),$("#shareapiExpireAfterNDays").on("input",(function(){this.value=this.value.replace(/\D/g,"")})),$("#shareAPI input:not(.noJSAutoUpdate)").change((function(){let e=$(this).val();"checkbox"===$(this).attr("type")&&(e=this.checked?"yes":"no"),OCP.AppConfig.setValue("core",$(this).attr("name"),e)})),$("#shareapiDefaultExpireDate").change((function(){$("#setDefaultExpireDate").toggleClass("hidden",!this.checked)})),$("#shareapiDefaultInternalExpireDate").change((function(){$("#setDefaultInternalExpireDate").toggleClass("hidden",!this.checked)})),$("#shareapiDefaultRemoteExpireDate").change((function(){$("#setDefaultRemoteExpireDate").toggleClass("hidden",!this.checked)})),$("#enableLinkPasswordByDefault").change((function(){this.checked?($("#enforceLinkPassword").removeAttr("disabled"),$("#passwordsExcludedGroups").removeAttr("disabled")):($("#enforceLinkPassword").attr("disabled",""),$("#passwordsExcludedGroups").attr("disabled",""),$("#enforceLinkPassword").removeAttr("checked").trigger("change"))})),$("#enforceLinkPassword").change((function(){$("#selectPasswordsExcludedGroups").toggleClass("hidden",!this.checked)})),$("#publicShareDisclaimer").change((function(){$("#publicShareDisclaimerText").toggleClass("hidden",!this.checked),this.checked||e("")})),$("#shareApiDefaultPermissionsSection input").change((function(e){const s=$("#shareApiDefaultPermissions"),t=$(e.target);let i=s.val();return t.is(":checked")?i|=t.val():i&=~t.val(),i|=OC.PERMISSION_READ,s.val(i).change(),e.preventDefault(),!1}));const e=_.debounce((function(e){const s={success:()=>{OC.msg.finishedSuccess("#publicShareDisclaimerStatus",t("settings","Saved"))},error:()=>{OC.msg.finishedError("#publicShareDisclaimerStatus",t("settings","Not saved"))}};OC.msg.startSaving("#publicShareDisclaimerStatus"),_.isString(e)&&""!==e?OCP.AppConfig.setValue("core","shareapi_public_link_disclaimertext",e,s):($("#publicShareDisclaimerText").val(""),OCP.AppConfig.deleteKey("core","shareapi_public_link_disclaimertext",s))}),500);$("#publicShareDisclaimerText").on("change, keyup",(function(){e(this.value)})),$("#shareapi_allow_share_dialog_user_enumeration").on("change",(function(){$("#shareapi_restrict_user_enumeration_to_group_setting").toggleClass("hidden",!this.checked),$("#shareapi_restrict_user_enumeration_to_phone_setting").toggleClass("hidden",!this.checked),$("#shareapi_restrict_user_enumeration_combinewarning_setting").toggleClass("hidden",!this.checked)})),$("#allowLinks").change((function(){$("#publicLinkSettings").toggleClass("hidden",!this.checked),$("#setDefaultExpireDate").toggleClass("hidden",!(this.checked&&$("#shareapiDefaultExpireDate")[0].checked))})),$("#mail_smtpauth").change((function(){this.checked?$("#mail_credentials").removeClass("hidden"):$("#mail_credentials").addClass("hidden")})),$("#mail_smtpmode").change((function(){"smtp"!==$(this).val()?($("#setting_smtpauth").addClass("hidden"),$("#setting_smtphost").addClass("hidden"),$("#mail_smtpsecure_label").addClass("hidden"),$("#mail_smtpsecure").addClass("hidden"),$("#mail_credentials").addClass("hidden"),$("#mail_sendmailmode_label, #mail_sendmailmode").removeClass("hidden")):($("#setting_smtpauth").removeClass("hidden"),$("#setting_smtphost").removeClass("hidden"),$("#mail_smtpsecure_label").removeClass("hidden"),$("#mail_smtpsecure").removeClass("hidden"),$("#mail_smtpauth").is(":checked")&&$("#mail_credentials").removeClass("hidden"),$("#mail_sendmailmode_label, #mail_sendmailmode").addClass("hidden"))}));const s=function(){OC.PasswordConfirmation.requiresPasswordConfirmation()?OC.PasswordConfirmation.requirePasswordConfirmation(s):(OC.msg.startSaving("#mail_settings_msg"),$.ajax({url:OC.generateUrl("/settings/admin/mailsettings"),type:"POST",data:$("#mail_general_settings_form").serialize(),success:()=>{OC.msg.finishedSuccess("#mail_settings_msg",t("settings","Saved"))},error:e=>{OC.msg.finishedError("#mail_settings_msg",e.responseJSON)}}))},i=function(){OC.PasswordConfirmation.requiresPasswordConfirmation()?OC.PasswordConfirmation.requirePasswordConfirmation(i):(OC.msg.startSaving("#mail_settings_msg"),$.ajax({url:OC.generateUrl("/settings/admin/mailsettings/credentials"),type:"POST",data:$("#mail_credentials_settings").serialize(),success:()=>{OC.msg.finishedSuccess("#mail_settings_msg",t("settings","Saved"))},error:e=>{OC.msg.finishedError("#mail_settings_msg",e.responseJSON)}}))};$("#mail_general_settings_form").change(s),$("#mail_credentials_settings_submit").click(i),$("#mail_smtppassword").click((()=>{"text"===this.d&&"********"===this.S&&(this.d="password",this.S="")})),$("#sendtestemail").click((e=>{e.preventDefault(),OC.msg.startAction("#sendtestmail_msg",t("settings","Sending…")),$.ajax({url:OC.generateUrl("/settings/admin/mailtest"),type:"POST",success:()=>{OC.msg.finishedSuccess("#sendtestmail_msg",t("settings","Email sent"))},error:e=>{OC.msg.finishedError("#sendtestmail_msg",e.responseJSON)}})})),$("#allowGroupSharing").change((function(){$("#allowGroupSharing").toggleClass("hidden",!this.checked)})),$("#shareapiExcludeGroups").change((function(){$("#selectExcludedGroups").toggleClass("hidden",!this.checked)})),null!==document.getElementById("security-warning")&&$.when(OC.SetupChecks.checkWebDAV(),OC.SetupChecks.checkWellKnownUrl("GET","/.well-known/webfinger",OC.theme.docPlaceholderUrl,!0===$("#postsetupchecks").data("check-wellknown"),[200,404],!0),OC.SetupChecks.checkWellKnownUrl("GET","/.well-known/nodeinfo",OC.theme.docPlaceholderUrl,!0===$("#postsetupchecks").data("check-wellknown"),[200,404],!0),OC.SetupChecks.checkWellKnownUrl("PROPFIND","/.well-known/caldav",OC.theme.docPlaceholderUrl,!0===$("#postsetupchecks").data("check-wellknown")),OC.SetupChecks.checkWellKnownUrl("PROPFIND","/.well-known/carddav",OC.theme.docPlaceholderUrl,!0===$("#postsetupchecks").data("check-wellknown")),OC.SetupChecks.checkProviderUrl(OC.getRootPath()+"/ocm-provider/",OC.theme.docPlaceholderUrl,!0===$("#postsetupchecks").data("check-wellknown")),OC.SetupChecks.checkProviderUrl(OC.getRootPath()+"/ocs-provider/",OC.theme.docPlaceholderUrl,!0===$("#postsetupchecks").data("check-wellknown")),OC.SetupChecks.checkSetup(),OC.SetupChecks.checkGeneric(),OC.SetupChecks.checkWOFF2Loading(OC.filePath("core","","fonts/NotoSans-Regular-latin.woff2"),OC.theme.docPlaceholderUrl),OC.SetupChecks.checkDataProtected()).then(((e,s,t,i,a,n,l,r,c,d,o)=>{const h=[].concat(e,s,t,i,a,n,l,r,c,d,o),g=$("#postsetupchecks");$("#security-warning-state-loading").addClass("hidden");let u=!1;const m=g.find(".errors"),p=g.find(".warnings"),C=g.find(".info");for(let e=0;e<h.length;e++)switch(h[e].type){case OC.SetupChecks.MESSAGE_TYPE_INFO:C.append("<li>"+h[e].msg+"</li>");break;case OC.SetupChecks.MESSAGE_TYPE_WARNING:p.append("<li>"+h[e].msg+"</li>");break;case OC.SetupChecks.MESSAGE_TYPE_ERROR:default:m.append("<li>"+h[e].msg+"</li>")}m.find("li").length>0&&(m.removeClass("hidden"),u=!0),p.find("li").length>0&&(p.removeClass("hidden"),u=!0),C.find("li").length>0&&(C.removeClass("hidden"),u=!0),u?($("#postsetupchecks-hint").removeClass("hidden"),m.find("li").length>0?$("#security-warning-state-failure").removeClass("hidden"):$("#security-warning-state-warning").removeClass("hidden")):0===$("#security-warning").children("ul").children().length?$("#security-warning-state-ok").removeClass("hidden"):$("#security-warning-state-failure").removeClass("hidden")})),$("#shareAPI").removeClass("loading")}))}})[39583](); +//# sourceMappingURL=settings-legacy-admin.js.map?v=9625d91a8b5cde5f1859
\ No newline at end of file diff --git a/dist/settings-legacy-admin.js.map b/dist/settings-legacy-admin.js.map index b9f12fcd8e4..68e094b8b66 100644 --- a/dist/settings-legacy-admin.js.map +++ b/dist/settings-legacy-admin.js.map @@ -1 +1 @@ -{"version":3,"file":"settings-legacy-admin.js?v=65cf3499d4a69ec64dac","mappings":"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","sources":["webpack:///nextcloud/apps/settings/src/admin.js","webpack:///nextcloud/webpack/startup"],"sourcesContent":["window.addEventListener('DOMContentLoaded', () => {\n\t$('#linksExcludedGroups,#passwordsExcludedGroups').each(function(index, element) {\n\t\tOC.Settings.setupGroupsSelect($(element))\n\t\t$(element).change(function(ev) {\n\t\t\tlet groups = ev.val || []\n\t\t\tgroups = JSON.stringify(groups)\n\t\t\tOCP.AppConfig.setValue('core', $(this).attr('name'), groups)\n\t\t})\n\t})\n\n\t$('#loglevel').change(function() {\n\t\t$.post(OC.generateUrl('/settings/admin/log/level'), { level: $(this).val() }, () => {\n\t\t\tOC.Log.reload()\n\t\t})\n\t})\n\n\t$('#shareAPIEnabled').change(function() {\n\t\t$('#shareAPI p:not(#enable)').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#shareapiExpireAfterNDays').on('input', function() {\n\t\tthis.value = this.value.replace(/\\D/g, '')\n\t})\n\n\t$('#shareAPI input:not(.noJSAutoUpdate)').change(function() {\n\t\tlet value = $(this).val()\n\t\tif ($(this).attr('type') === 'checkbox') {\n\t\t\tif (this.checked) {\n\t\t\t\tvalue = 'yes'\n\t\t\t} else {\n\t\t\t\tvalue = 'no'\n\t\t\t}\n\t\t}\n\t\tOCP.AppConfig.setValue('core', $(this).attr('name'), value)\n\t})\n\n\t$('#shareapiDefaultExpireDate').change(function() {\n\t\t$('#setDefaultExpireDate').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#shareapiDefaultInternalExpireDate').change(function() {\n\t\t$('#setDefaultInternalExpireDate').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#shareapiDefaultRemoteExpireDate').change(function() {\n\t\t$('#setDefaultRemoteExpireDate').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#enforceLinkPassword').change(function() {\n\t\t$('#selectPasswordsExcludedGroups').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#publicShareDisclaimer').change(function() {\n\t\t$('#publicShareDisclaimerText').toggleClass('hidden', !this.checked)\n\t\tif (!this.checked) {\n\t\t\tsavePublicShareDisclaimerText('')\n\t\t}\n\t})\n\n\t$('#shareApiDefaultPermissionsSection input').change(function(ev) {\n\t\tconst $el = $('#shareApiDefaultPermissions')\n\t\tconst $target = $(ev.target)\n\n\t\tlet value = $el.val()\n\t\tif ($target.is(':checked')) {\n\t\t\tvalue = value | $target.val()\n\t\t} else {\n\t\t\tvalue = value & ~$target.val()\n\t\t}\n\n\t\t// always set read permission\n\t\tvalue |= OC.PERMISSION_READ\n\n\t\t// this will trigger the field's change event and will save it\n\t\t$el.val(value).change()\n\n\t\tev.preventDefault()\n\n\t\treturn false\n\t})\n\n\tconst savePublicShareDisclaimerText = _.debounce(function(value) {\n\t\tconst options = {\n\t\t\tsuccess: () => {\n\t\t\t\tOC.msg.finishedSuccess('#publicShareDisclaimerStatus', t('settings', 'Saved'))\n\t\t\t},\n\t\t\terror: () => {\n\t\t\t\tOC.msg.finishedError('#publicShareDisclaimerStatus', t('settings', 'Not saved'))\n\t\t\t},\n\t\t}\n\n\t\tOC.msg.startSaving('#publicShareDisclaimerStatus')\n\t\tif (_.isString(value) && value !== '') {\n\t\t\tOCP.AppConfig.setValue('core', 'shareapi_public_link_disclaimertext', value, options)\n\t\t} else {\n\t\t\t$('#publicShareDisclaimerText').val('')\n\t\t\tOCP.AppConfig.deleteKey('core', 'shareapi_public_link_disclaimertext', options)\n\t\t}\n\t}, 500)\n\n\t$('#publicShareDisclaimerText').on('change, keyup', function() {\n\t\tsavePublicShareDisclaimerText(this.value)\n\t})\n\n\t$('#shareapi_allow_share_dialog_user_enumeration').on('change', function() {\n\t\t$('#shareapi_restrict_user_enumeration_to_group_setting').toggleClass('hidden', !this.checked)\n\t\t$('#shareapi_restrict_user_enumeration_to_phone_setting').toggleClass('hidden', !this.checked)\n\t\t$('#shareapi_restrict_user_enumeration_combinewarning_setting').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#allowLinks').change(function() {\n\t\t$('#publicLinkSettings').toggleClass('hidden', !this.checked)\n\t\t$('#setDefaultExpireDate').toggleClass('hidden', !(this.checked && $('#shareapiDefaultExpireDate')[0].checked))\n\t})\n\n\t$('#mail_smtpauth').change(function() {\n\t\tif (!this.checked) {\n\t\t\t$('#mail_credentials').addClass('hidden')\n\t\t} else {\n\t\t\t$('#mail_credentials').removeClass('hidden')\n\t\t}\n\t})\n\n\t$('#mail_smtpmode').change(function() {\n\t\tif ($(this).val() !== 'smtp') {\n\t\t\t$('#setting_smtpauth').addClass('hidden')\n\t\t\t$('#setting_smtphost').addClass('hidden')\n\t\t\t$('#mail_smtpsecure_label').addClass('hidden')\n\t\t\t$('#mail_smtpsecure').addClass('hidden')\n\t\t\t$('#mail_credentials').addClass('hidden')\n\t\t\t$('#mail_sendmailmode_label, #mail_sendmailmode').removeClass('hidden')\n\t\t} else {\n\t\t\t$('#setting_smtpauth').removeClass('hidden')\n\t\t\t$('#setting_smtphost').removeClass('hidden')\n\t\t\t$('#mail_smtpsecure_label').removeClass('hidden')\n\t\t\t$('#mail_smtpsecure').removeClass('hidden')\n\t\t\tif ($('#mail_smtpauth').is(':checked')) {\n\t\t\t\t$('#mail_credentials').removeClass('hidden')\n\t\t\t}\n\t\t\t$('#mail_sendmailmode_label, #mail_sendmailmode').addClass('hidden')\n\t\t}\n\t})\n\n\tconst changeEmailSettings = function() {\n\t\tif (OC.PasswordConfirmation.requiresPasswordConfirmation()) {\n\t\t\tOC.PasswordConfirmation.requirePasswordConfirmation(changeEmailSettings)\n\t\t\treturn\n\t\t}\n\n\t\tOC.msg.startSaving('#mail_settings_msg')\n\t\t$.ajax({\n\t\t\turl: OC.generateUrl('/settings/admin/mailsettings'),\n\t\t\ttype: 'POST',\n\t\t\tdata: $('#mail_general_settings_form').serialize(),\n\t\t\tsuccess: () => {\n\t\t\t\tOC.msg.finishedSuccess('#mail_settings_msg', t('settings', 'Saved'))\n\t\t\t},\n\t\t\terror: (xhr) => {\n\t\t\t\tOC.msg.finishedError('#mail_settings_msg', xhr.responseJSON)\n\t\t\t},\n\t\t})\n\t}\n\n\tconst toggleEmailCredentials = function() {\n\t\tif (OC.PasswordConfirmation.requiresPasswordConfirmation()) {\n\t\t\tOC.PasswordConfirmation.requirePasswordConfirmation(toggleEmailCredentials)\n\t\t\treturn\n\t\t}\n\n\t\tOC.msg.startSaving('#mail_settings_msg')\n\t\t$.ajax({\n\t\t\turl: OC.generateUrl('/settings/admin/mailsettings/credentials'),\n\t\t\ttype: 'POST',\n\t\t\tdata: $('#mail_credentials_settings').serialize(),\n\t\t\tsuccess: () => {\n\t\t\t\tOC.msg.finishedSuccess('#mail_settings_msg', t('settings', 'Saved'))\n\t\t\t},\n\t\t\terror: (xhr) => {\n\t\t\t\tOC.msg.finishedError('#mail_settings_msg', xhr.responseJSON)\n\t\t\t},\n\t\t})\n\t}\n\n\t$('#mail_general_settings_form').change(changeEmailSettings)\n\t$('#mail_credentials_settings_submit').click(toggleEmailCredentials)\n\t$('#mail_smtppassword').click(() => {\n\t\tif (this.type === 'text' && this.value === '********') {\n\t\t\tthis.type = 'password'\n\t\t\tthis.value = ''\n\t\t}\n\t})\n\n\t$('#sendtestemail').click((event) => {\n\t\tevent.preventDefault()\n\t\tOC.msg.startAction('#sendtestmail_msg', t('settings', 'Sending…'))\n\n\t\t$.ajax({\n\t\t\turl: OC.generateUrl('/settings/admin/mailtest'),\n\t\t\ttype: 'POST',\n\t\t\tsuccess: () => {\n\t\t\t\tOC.msg.finishedSuccess('#sendtestmail_msg', t('settings', 'Email sent'))\n\t\t\t},\n\t\t\terror: (xhr) => {\n\t\t\t\tOC.msg.finishedError('#sendtestmail_msg', xhr.responseJSON)\n\t\t\t},\n\t\t})\n\t})\n\n\t$('#allowGroupSharing').change(function() {\n\t\t$('#allowGroupSharing').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#shareapiExcludeGroups').change(function() {\n\t\t$('#selectExcludedGroups').toggleClass('hidden', !this.checked)\n\t})\n\n\tconst setupChecks = () => {\n\t\t// run setup checks then gather error messages\n\t\t$.when(\n\t\t\tOC.SetupChecks.checkWebDAV(),\n\t\t\tOC.SetupChecks.checkWellKnownUrl('GET', '/.well-known/webfinger', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true, [200, 404], true),\n\t\t\tOC.SetupChecks.checkWellKnownUrl('GET', '/.well-known/nodeinfo', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true, [200, 404], true),\n\t\t\tOC.SetupChecks.checkWellKnownUrl('PROPFIND', '/.well-known/caldav', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),\n\t\t\tOC.SetupChecks.checkWellKnownUrl('PROPFIND', '/.well-known/carddav', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),\n\t\t\tOC.SetupChecks.checkProviderUrl(OC.getRootPath() + '/ocm-provider/', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),\n\t\t\tOC.SetupChecks.checkProviderUrl(OC.getRootPath() + '/ocs-provider/', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),\n\t\t\tOC.SetupChecks.checkSetup(),\n\t\t\tOC.SetupChecks.checkGeneric(),\n\t\t\tOC.SetupChecks.checkWOFF2Loading(OC.filePath('core', '', 'fonts/NotoSans-Regular-latin.woff2'), OC.theme.docPlaceholderUrl),\n\t\t\tOC.SetupChecks.checkDataProtected()\n\t\t).then((check1, check2, check3, check4, check5, check6, check7, check8, check9, check10, check11) => {\n\t\t\tconst messages = [].concat(check1, check2, check3, check4, check5, check6, check7, check8, check9, check10, check11)\n\t\t\tconst $el = $('#postsetupchecks')\n\t\t\t$('#security-warning-state-loading').addClass('hidden')\n\n\t\t\tlet hasMessages = false\n\t\t\tconst $errorsEl = $el.find('.errors')\n\t\t\tconst $warningsEl = $el.find('.warnings')\n\t\t\tconst $infoEl = $el.find('.info')\n\n\t\t\tfor (let i = 0; i < messages.length; i++) {\n\t\t\t\tswitch (messages[i].type) {\n\t\t\t\tcase OC.SetupChecks.MESSAGE_TYPE_INFO:\n\t\t\t\t\t$infoEl.append('<li>' + messages[i].msg + '</li>')\n\t\t\t\t\tbreak\n\t\t\t\tcase OC.SetupChecks.MESSAGE_TYPE_WARNING:\n\t\t\t\t\t$warningsEl.append('<li>' + messages[i].msg + '</li>')\n\t\t\t\t\tbreak\n\t\t\t\tcase OC.SetupChecks.MESSAGE_TYPE_ERROR:\n\t\t\t\tdefault:\n\t\t\t\t\t$errorsEl.append('<li>' + messages[i].msg + '</li>')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ($errorsEl.find('li').length > 0) {\n\t\t\t\t$errorsEl.removeClass('hidden')\n\t\t\t\thasMessages = true\n\t\t\t}\n\t\t\tif ($warningsEl.find('li').length > 0) {\n\t\t\t\t$warningsEl.removeClass('hidden')\n\t\t\t\thasMessages = true\n\t\t\t}\n\t\t\tif ($infoEl.find('li').length > 0) {\n\t\t\t\t$infoEl.removeClass('hidden')\n\t\t\t\thasMessages = true\n\t\t\t}\n\n\t\t\tif (hasMessages) {\n\t\t\t\t$('#postsetupchecks-hint').removeClass('hidden')\n\t\t\t\tif ($errorsEl.find('li').length > 0) {\n\t\t\t\t\t$('#security-warning-state-failure').removeClass('hidden')\n\t\t\t\t} else {\n\t\t\t\t\t$('#security-warning-state-warning').removeClass('hidden')\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst securityWarning = $('#security-warning')\n\t\t\t\tif (securityWarning.children('ul').children().length === 0) {\n\t\t\t\t\t$('#security-warning-state-ok').removeClass('hidden')\n\t\t\t\t} else {\n\t\t\t\t\t$('#security-warning-state-failure').removeClass('hidden')\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\n\tif (document.getElementById('security-warning') !== null) {\n\t\tsetupChecks()\n\t}\n\n\t$('#shareAPI').removeClass('loading')\n})\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = {};\n__webpack_modules__[39583]();\n"],"names":["window","addEventListener","$","each","index","element","OC","Settings","setupGroupsSelect","change","ev","groups","val","JSON","stringify","OCP","AppConfig","setValue","this","attr","post","generateUrl","level","Log","reload","toggleClass","checked","on","value","replace","savePublicShareDisclaimerText","$el","$target","target","is","PERMISSION_READ","preventDefault","_","debounce","options","success","msg","finishedSuccess","t","error","finishedError","startSaving","isString","deleteKey","removeClass","addClass","changeEmailSettings","PasswordConfirmation","requiresPasswordConfirmation","requirePasswordConfirmation","ajax","url","type","data","serialize","xhr","responseJSON","toggleEmailCredentials","click","event","startAction","document","getElementById","when","SetupChecks","checkWebDAV","checkWellKnownUrl","theme","docPlaceholderUrl","checkProviderUrl","getRootPath","checkSetup","checkGeneric","checkWOFF2Loading","filePath","checkDataProtected","then","check1","check2","check3","check4","check5","check6","check7","check8","check9","check10","check11","messages","concat","hasMessages","$errorsEl","find","$warningsEl","$infoEl","i","length","MESSAGE_TYPE_INFO","append","MESSAGE_TYPE_WARNING","MESSAGE_TYPE_ERROR","children"],"sourceRoot":""}
\ No newline at end of file +{"version":3,"file":"settings-legacy-admin.js?v=9625d91a8b5cde5f1859","mappings":"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","sources":["webpack:///nextcloud/apps/settings/src/admin.js","webpack:///nextcloud/webpack/startup"],"sourcesContent":["window.addEventListener('DOMContentLoaded', () => {\n\t$('#linksExcludedGroups,#passwordsExcludedGroups').each(function(index, element) {\n\t\tOC.Settings.setupGroupsSelect($(element))\n\t\t$(element).change(function(ev) {\n\t\t\tlet groups = ev.val || []\n\t\t\tgroups = JSON.stringify(groups)\n\t\t\tOCP.AppConfig.setValue('core', $(this).attr('name'), groups)\n\t\t})\n\t})\n\n\t$('#loglevel').change(function() {\n\t\t$.post(OC.generateUrl('/settings/admin/log/level'), { level: $(this).val() }, () => {\n\t\t\tOC.Log.reload()\n\t\t})\n\t})\n\n\t$('#shareAPIEnabled').change(function() {\n\t\t$('#shareAPI p:not(#enable)').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#shareapiExpireAfterNDays').on('input', function() {\n\t\tthis.value = this.value.replace(/\\D/g, '')\n\t})\n\n\t$('#shareAPI input:not(.noJSAutoUpdate)').change(function() {\n\t\tlet value = $(this).val()\n\t\tif ($(this).attr('type') === 'checkbox') {\n\t\t\tif (this.checked) {\n\t\t\t\tvalue = 'yes'\n\t\t\t} else {\n\t\t\t\tvalue = 'no'\n\t\t\t}\n\t\t}\n\t\tOCP.AppConfig.setValue('core', $(this).attr('name'), value)\n\t})\n\n\t$('#shareapiDefaultExpireDate').change(function() {\n\t\t$('#setDefaultExpireDate').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#shareapiDefaultInternalExpireDate').change(function() {\n\t\t$('#setDefaultInternalExpireDate').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#shareapiDefaultRemoteExpireDate').change(function() {\n\t\t$('#setDefaultRemoteExpireDate').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#enableLinkPasswordByDefault').change(function() {\n\t\tif (this.checked) {\n\t\t\t$('#enforceLinkPassword').removeAttr('disabled')\n\t\t\t$('#passwordsExcludedGroups').removeAttr('disabled')\n\t\t} else {\n\t\t\t$('#enforceLinkPassword').attr('disabled', '')\n\t\t\t$('#passwordsExcludedGroups').attr('disabled', '')\n\n\t\t\t// Uncheck \"Enforce password protection\" when \"Always asks for a\n\t\t\t// password\" is unchecked; the change event needs to be explicitly\n\t\t\t// triggered so it behaves like a change done by the user.\n\t\t\t$('#enforceLinkPassword').removeAttr('checked').trigger('change')\n\t\t}\n\t})\n\n\t$('#enforceLinkPassword').change(function() {\n\t\t$('#selectPasswordsExcludedGroups').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#publicShareDisclaimer').change(function() {\n\t\t$('#publicShareDisclaimerText').toggleClass('hidden', !this.checked)\n\t\tif (!this.checked) {\n\t\t\tsavePublicShareDisclaimerText('')\n\t\t}\n\t})\n\n\t$('#shareApiDefaultPermissionsSection input').change(function(ev) {\n\t\tconst $el = $('#shareApiDefaultPermissions')\n\t\tconst $target = $(ev.target)\n\n\t\tlet value = $el.val()\n\t\tif ($target.is(':checked')) {\n\t\t\tvalue = value | $target.val()\n\t\t} else {\n\t\t\tvalue = value & ~$target.val()\n\t\t}\n\n\t\t// always set read permission\n\t\tvalue |= OC.PERMISSION_READ\n\n\t\t// this will trigger the field's change event and will save it\n\t\t$el.val(value).change()\n\n\t\tev.preventDefault()\n\n\t\treturn false\n\t})\n\n\tconst savePublicShareDisclaimerText = _.debounce(function(value) {\n\t\tconst options = {\n\t\t\tsuccess: () => {\n\t\t\t\tOC.msg.finishedSuccess('#publicShareDisclaimerStatus', t('settings', 'Saved'))\n\t\t\t},\n\t\t\terror: () => {\n\t\t\t\tOC.msg.finishedError('#publicShareDisclaimerStatus', t('settings', 'Not saved'))\n\t\t\t},\n\t\t}\n\n\t\tOC.msg.startSaving('#publicShareDisclaimerStatus')\n\t\tif (_.isString(value) && value !== '') {\n\t\t\tOCP.AppConfig.setValue('core', 'shareapi_public_link_disclaimertext', value, options)\n\t\t} else {\n\t\t\t$('#publicShareDisclaimerText').val('')\n\t\t\tOCP.AppConfig.deleteKey('core', 'shareapi_public_link_disclaimertext', options)\n\t\t}\n\t}, 500)\n\n\t$('#publicShareDisclaimerText').on('change, keyup', function() {\n\t\tsavePublicShareDisclaimerText(this.value)\n\t})\n\n\t$('#shareapi_allow_share_dialog_user_enumeration').on('change', function() {\n\t\t$('#shareapi_restrict_user_enumeration_to_group_setting').toggleClass('hidden', !this.checked)\n\t\t$('#shareapi_restrict_user_enumeration_to_phone_setting').toggleClass('hidden', !this.checked)\n\t\t$('#shareapi_restrict_user_enumeration_combinewarning_setting').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#allowLinks').change(function() {\n\t\t$('#publicLinkSettings').toggleClass('hidden', !this.checked)\n\t\t$('#setDefaultExpireDate').toggleClass('hidden', !(this.checked && $('#shareapiDefaultExpireDate')[0].checked))\n\t})\n\n\t$('#mail_smtpauth').change(function() {\n\t\tif (!this.checked) {\n\t\t\t$('#mail_credentials').addClass('hidden')\n\t\t} else {\n\t\t\t$('#mail_credentials').removeClass('hidden')\n\t\t}\n\t})\n\n\t$('#mail_smtpmode').change(function() {\n\t\tif ($(this).val() !== 'smtp') {\n\t\t\t$('#setting_smtpauth').addClass('hidden')\n\t\t\t$('#setting_smtphost').addClass('hidden')\n\t\t\t$('#mail_smtpsecure_label').addClass('hidden')\n\t\t\t$('#mail_smtpsecure').addClass('hidden')\n\t\t\t$('#mail_credentials').addClass('hidden')\n\t\t\t$('#mail_sendmailmode_label, #mail_sendmailmode').removeClass('hidden')\n\t\t} else {\n\t\t\t$('#setting_smtpauth').removeClass('hidden')\n\t\t\t$('#setting_smtphost').removeClass('hidden')\n\t\t\t$('#mail_smtpsecure_label').removeClass('hidden')\n\t\t\t$('#mail_smtpsecure').removeClass('hidden')\n\t\t\tif ($('#mail_smtpauth').is(':checked')) {\n\t\t\t\t$('#mail_credentials').removeClass('hidden')\n\t\t\t}\n\t\t\t$('#mail_sendmailmode_label, #mail_sendmailmode').addClass('hidden')\n\t\t}\n\t})\n\n\tconst changeEmailSettings = function() {\n\t\tif (OC.PasswordConfirmation.requiresPasswordConfirmation()) {\n\t\t\tOC.PasswordConfirmation.requirePasswordConfirmation(changeEmailSettings)\n\t\t\treturn\n\t\t}\n\n\t\tOC.msg.startSaving('#mail_settings_msg')\n\t\t$.ajax({\n\t\t\turl: OC.generateUrl('/settings/admin/mailsettings'),\n\t\t\ttype: 'POST',\n\t\t\tdata: $('#mail_general_settings_form').serialize(),\n\t\t\tsuccess: () => {\n\t\t\t\tOC.msg.finishedSuccess('#mail_settings_msg', t('settings', 'Saved'))\n\t\t\t},\n\t\t\terror: (xhr) => {\n\t\t\t\tOC.msg.finishedError('#mail_settings_msg', xhr.responseJSON)\n\t\t\t},\n\t\t})\n\t}\n\n\tconst toggleEmailCredentials = function() {\n\t\tif (OC.PasswordConfirmation.requiresPasswordConfirmation()) {\n\t\t\tOC.PasswordConfirmation.requirePasswordConfirmation(toggleEmailCredentials)\n\t\t\treturn\n\t\t}\n\n\t\tOC.msg.startSaving('#mail_settings_msg')\n\t\t$.ajax({\n\t\t\turl: OC.generateUrl('/settings/admin/mailsettings/credentials'),\n\t\t\ttype: 'POST',\n\t\t\tdata: $('#mail_credentials_settings').serialize(),\n\t\t\tsuccess: () => {\n\t\t\t\tOC.msg.finishedSuccess('#mail_settings_msg', t('settings', 'Saved'))\n\t\t\t},\n\t\t\terror: (xhr) => {\n\t\t\t\tOC.msg.finishedError('#mail_settings_msg', xhr.responseJSON)\n\t\t\t},\n\t\t})\n\t}\n\n\t$('#mail_general_settings_form').change(changeEmailSettings)\n\t$('#mail_credentials_settings_submit').click(toggleEmailCredentials)\n\t$('#mail_smtppassword').click(() => {\n\t\tif (this.type === 'text' && this.value === '********') {\n\t\t\tthis.type = 'password'\n\t\t\tthis.value = ''\n\t\t}\n\t})\n\n\t$('#sendtestemail').click((event) => {\n\t\tevent.preventDefault()\n\t\tOC.msg.startAction('#sendtestmail_msg', t('settings', 'Sending…'))\n\n\t\t$.ajax({\n\t\t\turl: OC.generateUrl('/settings/admin/mailtest'),\n\t\t\ttype: 'POST',\n\t\t\tsuccess: () => {\n\t\t\t\tOC.msg.finishedSuccess('#sendtestmail_msg', t('settings', 'Email sent'))\n\t\t\t},\n\t\t\terror: (xhr) => {\n\t\t\t\tOC.msg.finishedError('#sendtestmail_msg', xhr.responseJSON)\n\t\t\t},\n\t\t})\n\t})\n\n\t$('#allowGroupSharing').change(function() {\n\t\t$('#allowGroupSharing').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#shareapiExcludeGroups').change(function() {\n\t\t$('#selectExcludedGroups').toggleClass('hidden', !this.checked)\n\t})\n\n\tconst setupChecks = () => {\n\t\t// run setup checks then gather error messages\n\t\t$.when(\n\t\t\tOC.SetupChecks.checkWebDAV(),\n\t\t\tOC.SetupChecks.checkWellKnownUrl('GET', '/.well-known/webfinger', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true, [200, 404], true),\n\t\t\tOC.SetupChecks.checkWellKnownUrl('GET', '/.well-known/nodeinfo', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true, [200, 404], true),\n\t\t\tOC.SetupChecks.checkWellKnownUrl('PROPFIND', '/.well-known/caldav', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),\n\t\t\tOC.SetupChecks.checkWellKnownUrl('PROPFIND', '/.well-known/carddav', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),\n\t\t\tOC.SetupChecks.checkProviderUrl(OC.getRootPath() + '/ocm-provider/', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),\n\t\t\tOC.SetupChecks.checkProviderUrl(OC.getRootPath() + '/ocs-provider/', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),\n\t\t\tOC.SetupChecks.checkSetup(),\n\t\t\tOC.SetupChecks.checkGeneric(),\n\t\t\tOC.SetupChecks.checkWOFF2Loading(OC.filePath('core', '', 'fonts/NotoSans-Regular-latin.woff2'), OC.theme.docPlaceholderUrl),\n\t\t\tOC.SetupChecks.checkDataProtected()\n\t\t).then((check1, check2, check3, check4, check5, check6, check7, check8, check9, check10, check11) => {\n\t\t\tconst messages = [].concat(check1, check2, check3, check4, check5, check6, check7, check8, check9, check10, check11)\n\t\t\tconst $el = $('#postsetupchecks')\n\t\t\t$('#security-warning-state-loading').addClass('hidden')\n\n\t\t\tlet hasMessages = false\n\t\t\tconst $errorsEl = $el.find('.errors')\n\t\t\tconst $warningsEl = $el.find('.warnings')\n\t\t\tconst $infoEl = $el.find('.info')\n\n\t\t\tfor (let i = 0; i < messages.length; i++) {\n\t\t\t\tswitch (messages[i].type) {\n\t\t\t\tcase OC.SetupChecks.MESSAGE_TYPE_INFO:\n\t\t\t\t\t$infoEl.append('<li>' + messages[i].msg + '</li>')\n\t\t\t\t\tbreak\n\t\t\t\tcase OC.SetupChecks.MESSAGE_TYPE_WARNING:\n\t\t\t\t\t$warningsEl.append('<li>' + messages[i].msg + '</li>')\n\t\t\t\t\tbreak\n\t\t\t\tcase OC.SetupChecks.MESSAGE_TYPE_ERROR:\n\t\t\t\tdefault:\n\t\t\t\t\t$errorsEl.append('<li>' + messages[i].msg + '</li>')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ($errorsEl.find('li').length > 0) {\n\t\t\t\t$errorsEl.removeClass('hidden')\n\t\t\t\thasMessages = true\n\t\t\t}\n\t\t\tif ($warningsEl.find('li').length > 0) {\n\t\t\t\t$warningsEl.removeClass('hidden')\n\t\t\t\thasMessages = true\n\t\t\t}\n\t\t\tif ($infoEl.find('li').length > 0) {\n\t\t\t\t$infoEl.removeClass('hidden')\n\t\t\t\thasMessages = true\n\t\t\t}\n\n\t\t\tif (hasMessages) {\n\t\t\t\t$('#postsetupchecks-hint').removeClass('hidden')\n\t\t\t\tif ($errorsEl.find('li').length > 0) {\n\t\t\t\t\t$('#security-warning-state-failure').removeClass('hidden')\n\t\t\t\t} else {\n\t\t\t\t\t$('#security-warning-state-warning').removeClass('hidden')\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst securityWarning = $('#security-warning')\n\t\t\t\tif (securityWarning.children('ul').children().length === 0) {\n\t\t\t\t\t$('#security-warning-state-ok').removeClass('hidden')\n\t\t\t\t} else {\n\t\t\t\t\t$('#security-warning-state-failure').removeClass('hidden')\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\n\tif (document.getElementById('security-warning') !== null) {\n\t\tsetupChecks()\n\t}\n\n\t$('#shareAPI').removeClass('loading')\n})\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = {};\n__webpack_modules__[39583]();\n"],"names":["window","addEventListener","$","each","index","element","OC","Settings","setupGroupsSelect","change","ev","groups","val","JSON","stringify","OCP","AppConfig","setValue","this","attr","post","generateUrl","level","Log","reload","toggleClass","checked","on","value","replace","removeAttr","trigger","savePublicShareDisclaimerText","$el","$target","target","is","PERMISSION_READ","preventDefault","_","debounce","options","success","msg","finishedSuccess","t","error","finishedError","startSaving","isString","deleteKey","removeClass","addClass","changeEmailSettings","PasswordConfirmation","requiresPasswordConfirmation","requirePasswordConfirmation","ajax","url","type","data","serialize","xhr","responseJSON","toggleEmailCredentials","click","event","startAction","document","getElementById","when","SetupChecks","checkWebDAV","checkWellKnownUrl","theme","docPlaceholderUrl","checkProviderUrl","getRootPath","checkSetup","checkGeneric","checkWOFF2Loading","filePath","checkDataProtected","then","check1","check2","check3","check4","check5","check6","check7","check8","check9","check10","check11","messages","concat","hasMessages","$errorsEl","find","$warningsEl","$infoEl","i","length","MESSAGE_TYPE_INFO","append","MESSAGE_TYPE_WARNING","MESSAGE_TYPE_ERROR","children"],"sourceRoot":""}
\ No newline at end of file diff --git a/lib/l10n/ar.js b/lib/l10n/ar.js index 6ee26c3e562..d1386cfd73a 100644 --- a/lib/l10n/ar.js +++ b/lib/l10n/ar.js @@ -147,7 +147,7 @@ OC.L10N.register( "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "ربما يكون السبب في ذلك هو ذاكرة التخزين المؤقت/المسرع مثل Zend OPcache أو eAccelerator.", "PHP modules have been installed, but they are still listed as missing?" : "تم تثبيت وحدات PHP ، لكنها لا تزال مدرجة على أنها وحدات مفقودة؟", "Please ask your server administrator to restart the web server." : "يرجى مطالبة مسؤول الخادم بإعادة تشغيل خادم الويب.", - "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "الرجاء تغيير الأذونات إلى 0770 حتى لا يتمكن المستخدمون الآخرون من عرض محتويات المجلد.", + "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "الرجاء تغيير الصلاحيات إلى 0770 حتى لا يتمكن المستخدمون الآخرون من عرض محتويات المجلد.", "Could not obtain lock type %d on \"%s\"." : "تعذر الحصول على نوع القفل%d على \"%s\".", "Storage unauthorized. %s" : "التخزين غير مصرح به.%s", "Storage incomplete configuration. %s" : "تكوين التخزين غير مكتمل. %s", diff --git a/lib/l10n/ar.json b/lib/l10n/ar.json index 5b45f57b9c6..90412f77090 100644 --- a/lib/l10n/ar.json +++ b/lib/l10n/ar.json @@ -145,7 +145,7 @@ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "ربما يكون السبب في ذلك هو ذاكرة التخزين المؤقت/المسرع مثل Zend OPcache أو eAccelerator.", "PHP modules have been installed, but they are still listed as missing?" : "تم تثبيت وحدات PHP ، لكنها لا تزال مدرجة على أنها وحدات مفقودة؟", "Please ask your server administrator to restart the web server." : "يرجى مطالبة مسؤول الخادم بإعادة تشغيل خادم الويب.", - "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "الرجاء تغيير الأذونات إلى 0770 حتى لا يتمكن المستخدمون الآخرون من عرض محتويات المجلد.", + "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "الرجاء تغيير الصلاحيات إلى 0770 حتى لا يتمكن المستخدمون الآخرون من عرض محتويات المجلد.", "Could not obtain lock type %d on \"%s\"." : "تعذر الحصول على نوع القفل%d على \"%s\".", "Storage unauthorized. %s" : "التخزين غير مصرح به.%s", "Storage incomplete configuration. %s" : "تكوين التخزين غير مكتمل. %s", diff --git a/lib/l10n/ast.js b/lib/l10n/ast.js index b5e90b93dd4..4c570bbbfd7 100644 --- a/lib/l10n/ast.js +++ b/lib/l10n/ast.js @@ -16,6 +16,8 @@ OC.L10N.register( "Fediverse" : "Fediversu", "Twitter" : "Twitter", "Website" : "Sitiu web", + "Organisation" : "Organización", + "Role" : "Rol", "Additional settings" : "Configuración adicional", "%1$s via %2$s" : "%1$s per %2$s", "You are not allowed to share %s" : "Nun tienes permisu pa compartir «%s»", @@ -65,6 +67,7 @@ OC.L10N.register( "Nov." : "Pay.", "Dec." : "Avi.", "Application is not enabled" : "L'aplicación nun ta activada", + "Please ask your server administrator to install the module." : "Pidi a l'alministración del sirvidor qu'instale'l módulu.", "Full name" : "Nome completu" }, "nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/ast.json b/lib/l10n/ast.json index afae4823c26..7f4c8383db1 100644 --- a/lib/l10n/ast.json +++ b/lib/l10n/ast.json @@ -14,6 +14,8 @@ "Fediverse" : "Fediversu", "Twitter" : "Twitter", "Website" : "Sitiu web", + "Organisation" : "Organización", + "Role" : "Rol", "Additional settings" : "Configuración adicional", "%1$s via %2$s" : "%1$s per %2$s", "You are not allowed to share %s" : "Nun tienes permisu pa compartir «%s»", @@ -63,6 +65,7 @@ "Nov." : "Pay.", "Dec." : "Avi.", "Application is not enabled" : "L'aplicación nun ta activada", + "Please ask your server administrator to install the module." : "Pidi a l'alministración del sirvidor qu'instale'l módulu.", "Full name" : "Nome completu" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/lib/l10n/zh_CN.js b/lib/l10n/zh_CN.js index a4608197590..a28ffd4d03a 100644 --- a/lib/l10n/zh_CN.js +++ b/lib/l10n/zh_CN.js @@ -101,6 +101,8 @@ OC.L10N.register( "Users" : "用户", "Email" : "电子邮箱", "Mail %s" : "发邮件给 %s", + "Fediverse" : "联邦宇宙", + "View %s on the fediverse" : "在联邦宇宙上浏览 %s", "Phone" : "电话", "Call %s" : "呼叫 %s", "Twitter" : "推特", @@ -224,7 +226,7 @@ OC.L10N.register( "This can usually be fixed by giving the web server write access to the root directory. See %s" : "通常可以为 Web 服务器授予对根目录的写入权限来修复这个问题。查看:%s", "Permissions can usually be fixed by giving the web server write access to the root directory. See %s." : "通常可以为 Web 服务器授予对根目录的写入权限来修复权限问题。查看:%s。", "Your data directory is not writable." : "您的数据目录无法写入。", - "Setting locale to %s failed." : "设置语言为 %s 失败。", + "Setting locale to %s failed." : "设置语言为%s失败。", "Please install one of these locales on your system and restart your web server." : "请在您的系统中安装下述一种语言并重启 Web 服务器。", "PHP module %s not installed." : "PHP %s 模块未安装。", "Please ask your server administrator to install the module." : "请联系您的服务器管理员安装模块。", @@ -266,6 +268,6 @@ OC.L10N.register( "The user limit has been reached and the user was not created. Check your notifications to learn more." : "已达到用户上限,未创建该用户。请检查您的通知以了解更多。", "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "在用户名中只允许使用以下字符:“a-z”、“A-Z”、“0-9” 和 \"_.@-'\"", "libxml2 2.7.0 is at least required. Currently %s is installed." : "至少需要 libxml2 2.7.0. 当前安装 %s。", - "To fix this issue update your libxml2 version and restart your web server." : "升级您的 libxml2 版本然后重启 Web 服务器以解决该问题。" + "To fix this issue update your libxml2 version and restart your web server." : "升级您的libxml2版本然后重启Web服务器以解决该问题。" }, "nplurals=1; plural=0;"); diff --git a/lib/l10n/zh_CN.json b/lib/l10n/zh_CN.json index e054f53f123..aa72eacaa6a 100644 --- a/lib/l10n/zh_CN.json +++ b/lib/l10n/zh_CN.json @@ -99,6 +99,8 @@ "Users" : "用户", "Email" : "电子邮箱", "Mail %s" : "发邮件给 %s", + "Fediverse" : "联邦宇宙", + "View %s on the fediverse" : "在联邦宇宙上浏览 %s", "Phone" : "电话", "Call %s" : "呼叫 %s", "Twitter" : "推特", @@ -222,7 +224,7 @@ "This can usually be fixed by giving the web server write access to the root directory. See %s" : "通常可以为 Web 服务器授予对根目录的写入权限来修复这个问题。查看:%s", "Permissions can usually be fixed by giving the web server write access to the root directory. See %s." : "通常可以为 Web 服务器授予对根目录的写入权限来修复权限问题。查看:%s。", "Your data directory is not writable." : "您的数据目录无法写入。", - "Setting locale to %s failed." : "设置语言为 %s 失败。", + "Setting locale to %s failed." : "设置语言为%s失败。", "Please install one of these locales on your system and restart your web server." : "请在您的系统中安装下述一种语言并重启 Web 服务器。", "PHP module %s not installed." : "PHP %s 模块未安装。", "Please ask your server administrator to install the module." : "请联系您的服务器管理员安装模块。", @@ -264,6 +266,6 @@ "The user limit has been reached and the user was not created. Check your notifications to learn more." : "已达到用户上限,未创建该用户。请检查您的通知以了解更多。", "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "在用户名中只允许使用以下字符:“a-z”、“A-Z”、“0-9” 和 \"_.@-'\"", "libxml2 2.7.0 is at least required. Currently %s is installed." : "至少需要 libxml2 2.7.0. 当前安装 %s。", - "To fix this issue update your libxml2 version and restart your web server." : "升级您的 libxml2 版本然后重启 Web 服务器以解决该问题。" + "To fix this issue update your libxml2 version and restart your web server." : "升级您的libxml2版本然后重启Web服务器以解决该问题。" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/lib/private/Preview/Imaginary.php b/lib/private/Preview/Imaginary.php index ed8b9eaa838..74f04e09250 100644 --- a/lib/private/Preview/Imaginary.php +++ b/lib/private/Preview/Imaginary.php @@ -136,9 +136,10 @@ class Imaginary extends ProviderV2 { ]; try { + $imaginaryKey = $this->config->getSystemValueString('preview_imaginary_key', ''); $response = $httpClient->post( $imaginaryUrl . '/pipeline', [ - 'query' => ['operations' => json_encode($operations)], + 'query' => ['operations' => json_encode($operations), 'key' => $imaginaryKey], 'stream' => true, 'content-type' => $file->getMimeType(), 'body' => $stream, |